commit 2a0f58f0d156b500145a4f04f6a6b32d4ab3a11f Author: wujiawei <12345678> Date: Wed May 29 10:39:56 2024 +0800 [fix] change diff --git a/CloudClientInternalNetworkPenetration.README.md b/CloudClientInternalNetworkPenetration.README.md new file mode 100644 index 00000000..c4652dfd --- /dev/null +++ b/CloudClientInternalNetworkPenetration.README.md @@ -0,0 +1,92 @@ +### 内网穿透使用 + +#### 模块说明 + +| 模块 | 所属层级 | 描述 | 端口 | +|------------------------------------------------------------------------------------|------|------------------------|----------------------------------------------------------------| +| [wu-smart-agent-network-heartbeat-common](wu-smart-agent-network-heartbeat-common) | 基础模块 | 基于Netty数据解码、编码、通道处理器声明 | 无 | +| [wu-smart-agent-network-heartbeat-server](wu-smart-agent-network-heartbeat-server) | 启动模块 | 内网穿透服务端 | http端口:6001、tcp端口:7001 (默认tcp端口=http端口+1000 如:6001+1000=7001) | +| [wu-smart-agent-network-heartbeat-client](wu-smart-agent-network-heartbeat-client) | 启动模块 | 内网穿透客户端 | 6004 | + +#### 功能 + + 1.将局域网IP映射到公网IP + 2. 支持tcp、http映射 + +#### 使用 + +```text +客户端配置信息 +``` + +```yaml +spring: + middleground: + netty: + inet-host: 127.0.0.1 # 服务端地址 + inet-port: 7001 #服务端端口 + client-id: local # 客户端ID +``` + +```text +服务端配置客户端映射地址 +数据库表【internal_network_penetration_mapping】 添加数据 +``` + +| 客户端ID | 客户端真实地址 | 客户端真实端口 | 创建时间 | id | 是否删除 | 更新时间 | 访客端口 | 描述 | +|--------------|----------------|---------|------|----|------|------|-------|------------------------------------------------------------| +| local | 127.0.0.1 | 18080 | null | 1 | 0 | null | 19080 | 访客通过 --> 19080 --> 访问 --> 客户端 local本地的 18080 | +| local | 127.0.0.1 | 28080 | null | 2 | 0 | null | 29080 | 访客通过 --> 29080 --> 访问 --> 客户端 local本地的 28080 | +| local | 127.0.0.1 | 3306 | null | 3 | 0 | null | 4306 | 访客通过 --> 4306 --> 访问 --> 客户端 local本地的 3306 | +| local | 192.168.17.185 | 80 | null | 4 | 0 | null | 30080 | 访客通过 --> 30080 --> 访问 --> 客户端 local局域网内192.168.17.185的 80 | +| middleground | web-nginx | 80 | null | 5 | 0 | null | 31570 | 访客通过 --> 31570 --> 访问 --> 客户端 local局域网内web-nginx的 80 | + + + +#### 部署 + +##### 云端部署 + +```text +云端部署:内网穿透服务端 +如果云端需要部署云上暂存+内网穿透功能:需要部署 内网穿透服务端、暂存服务、内网穿透客户端、云上离线网关 +``` + +| 模块 | 说明 | 部署内网穿透必须 | 部署内网穿透+云上暂存必须 | +|------------------------------------------------------------------|------------|----------|---------------| +| [wu-smart-agent-network-heartbeat-server](wu-smart-agent-network-heartbeat-server) | 内网穿透+心跳服务端 | ☑️ | ☑️ | +| [wu-smart-agent-network-heartbeat-client](wu-smart-agent-network-heartbeat-client) | 内网穿透+心跳客户端 | ✖️ | ☑️ | +| [wu-lazy-cloud-staging-provider](wu-lazy-cloud-staging-provider) | 暂存服务 | ✖️ | ☑️ | +| [wu-lazy-cloud-central-gateway](wu-lazy-cloud-central-gateway) | 云上暂存网关 | ✖️ | ☑️ | +| [wu-lazy-cloud-central-gateway](wu-lazy-cloud-central-gateway) | 云下暂存网关 | ✖️ | ✖️ | + +##### 云网关部署 + +```text +云网关部署内网穿透客户端 +``` + +| 模块 | 说明 | 部署内网穿透必须 | 部署内网穿透+云上暂存必须 | +|------------------------------------------------------------------|------------|----------|---------------| +| [wu-smart-agent-network-heartbeat-server](wu-smart-agent-network-heartbeat-server) | 内网穿透+心跳服务端 | ✖️ | ✖️ | +| [wu-smart-agent-network-heartbeat-client](wu-smart-agent-network-heartbeat-client) | 内网穿透+心跳客户端 | ✖️ | ☑️ | +| [wu-lazy-cloud-staging-provider](wu-lazy-cloud-staging-provider) | 暂存服务 | ✖️ | ✖️ | +| [wu-lazy-cloud-central-gateway](wu-lazy-cloud-central-gateway) | 云上暂存网关 | ✖️ | ☑️ | +| [wu-lazy-cloud-central-gateway](wu-lazy-cloud-central-gateway) | 云下暂存网关 | ✖️ | ✖️ | + +##### 独立租户部署 + +```text +拥有内网穿透能力:需要部署内网穿透客户端 +内网穿透+离线暂存能力: 需要部署内网穿透客户端、离线网关、离线暂存服务 +``` + +| 模块 | 说明 | 部署内网穿透必须 | 部署内网穿透+云上暂存必须 | +|------------------------------------------------------------------|------------|----------|---------------| +| [wu-smart-agent-network-heartbeat-server](wu-smart-agent-network-heartbeat-server) | 内网穿透+心跳服务端 | ✖️ | ✖️ | +| [wu-smart-agent-network-heartbeat-client](wu-smart-agent-network-heartbeat-client) | 内网穿透+心跳客户端 | ☑️ | ☑️ | +| [wu-lazy-cloud-staging-provider](wu-lazy-cloud-staging-provider) | 暂存服务 | ✖️ | ☑️ | +| [wu-lazy-cloud-central-gateway](wu-lazy-cloud-central-gateway) | 云上暂存网关 | ✖️ | ✖️ | +| [wu-lazy-cloud-central-gateway](wu-lazy-cloud-central-gateway) | 云下暂存网关 | ✖️ | ☑️ | + + diff --git a/CloudClientInternalNetworkPenetration1.0-.png b/CloudClientInternalNetworkPenetration1.0-.png new file mode 100644 index 00000000..dd2d74dd Binary files /dev/null and b/CloudClientInternalNetworkPenetration1.0-.png differ diff --git a/CloudClientInternalNetworkPenetration1.0.puml b/CloudClientInternalNetworkPenetration1.0.puml new file mode 100644 index 00000000..c5391862 --- /dev/null +++ b/CloudClientInternalNetworkPenetration1.0.puml @@ -0,0 +1,77 @@ + + +@startuml + +title 内网穿透 + +actor 访客 + +package "客户端"{ + + + + node "Netty客户端" { + component [客户端当前通道]{ + [客户端心跳通道] + component [客户端代理通信通道]{ + [客户端通信通道读数据] + [客户端通信通道返回数据] + } + } + + +' [客户端当前通道] <...right... [客户端真实代理通道]: 返回真实服务请求结果 +' [客户端当前通道] ...right..> [客户端真实代理通道]: 转发二进制请求到真实服务通道 + } + node “客户端真实服务”{ + component [客户端需要代理的真实服务A]{ + [客户端真实通道读数据] + [客户端真实通道返回数据] + } + } + +' [客户端真实代理通道] ...right...> [客户端真实服务]: 发送真实二进制请求到真实服务 + +} +package "服务端"{ + node "Netty服务端" { + + component [Netty服务端通道] { + component [服务端心跳通道]{ + + } + component [服务端代理通信通道]{ + [服务端通信通道读数据] + [服务端通信通道返回数据] + } + } + + component [Netty服务端绑定访客端口] { + component [服务端访客真实通道]{ + [服务端访客真实通道读数据] + [服务端访客真实通道返回数据] + } + } + + } + +} + + + + [服务端心跳通道] <----> [客户端心跳通道]:长连接channel + + + [访客] ..> [服务端访客真实通道读数据]: 访客访问数据 + [服务端访客真实通道读数据] ...> [服务端通信通道读数据]: 服务端访客数据转发到通信通道 + [服务端通信通道读数据] ..down..> [客户端通信通道读数据]: 服务端通信将数据转发到客户端通信通道 + [客户端通信通道读数据] ..down..> [客户端真实通道读数据]: 客户端通信通道将数据转发道客户端端真实代理通道 + [客户端真实通道读数据] ..left..> [客户端真实通道返回数据]: 处理数据。。。 + [客户端真实通道返回数据] ..up..> [客户端通信通道返回数据]: 客户端真实服务返回数据 + [客户端通信通道返回数据] ..up..> [服务端通信通道返回数据]: 将客户端返回的数据发送给访客真实通道 + [服务端通信通道返回数据] ..up..> [服务端访客真实通道返回数据]: 返回数据 + + + + +@enduml \ No newline at end of file diff --git a/Cluster.puml b/Cluster.puml new file mode 100644 index 00000000..a7bec99d --- /dev/null +++ b/Cluster.puml @@ -0,0 +1,55 @@ +@startuml +'https://plantuml.com/component-diagram +title 网络代理集群模式设计集群初始化 node1 初始化后自动初始化node2 + +package "Network Cluster" { + + database "Network DB" { + + } + + node "node1"{ + + node "Network Server Node1" { + + } + node "Network Client Node1" { + + } + + "Network Server Node1" ----> "Network Server Node1" : 5. rescan node config and register + + "Network Server Node1" --left--> "Network DB" :node1 config story get and use + +' "Network DB" --down-- "Network Client Node1" :node1 config get and use + + "Network Client Node1" --up--> "Network Server Node1" :node1 register + + ' "Network Server Node2" --> "Network Client Node1" :scan node config and register + } + node "node2"{ + + node "Network Server Node2" { + + } + node "Network Client Node2" { + + } + + "Network Server Node2" ----> "Network Server Node2" : rescan node config and register + + "Network Server Node2" --right--> "Network DB" :1. node2 config story get and use + +' "Network DB" --down--> "Network Client Node2" :node2 config get and use + + "Network Client Node2" --up--> "Network Server Node2" :2. node2 register.. + "Network Server Node2" --down--> "Network Client Node2" :3. node2 register success + + "Network Client Node2" --left-> "Network Server Node1" :4. send msg to all register server ,tail it scan node config and register +' "Network Client Node2" ---> "Network Server Node2" :send msg to all register server ,tail it scan node config and register + } + +} + + +@enduml \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 00000000..2fcc70b9 --- /dev/null +++ b/README.md @@ -0,0 +1,320 @@ +

+ + Maven + + + Maven + + + Apache 2 + + + jdk-11 + + + jdk-17 + +
+ +
+ + Gitee star + + + GitHub star + + + GitHub star + + +

+ +#### 项目介绍 + +wu-smart-agent-network +是一款基于([wu-framework-parent](https://gitee.com/wujiawei1207537021/wu-framework-parent))孵化出的项目,内部使用Lazy +ORM操作数据库,主要功能是网络穿透,对于没有公网IP的服务进行公网IP映射 +使用环境JDK17 Spring Boot 3.0.2 + +#### 项目地址 + +[Gitee](https://gitee.com/wujiawei1207537021/wu-smart-agent-network) + +[GitHub](https://github.com/wujiawei1207537021/wu-smart-agent-network) + +#### 架构图 + +![architecture.png](architecture.png) + +#### 实现原理 + +##### 服务端创建socket服务端绑定本地端口(用于客户端连接) + +```java +package org.framework.smart.agent.network.heartbeat.server.netty.socket; + + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.framework.smart.agent.network.heartbeat.server.netty.filter.NettyServerFilter; + +public class NettyOnCloudNettyServerSocket { + private final EventLoopGroup bossGroup = new NioEventLoopGroup(); + private final EventLoopGroup workerGroup = new NioEventLoopGroup(); + private final NettyServerFilter nettyServerFilter;// 通道业务处理 + private ChannelFuture channelFuture; + + public NettyOnCloudNettyServerSocket(NettyServerFilter nettyServerFilter) { + this.nettyServerFilter = nettyServerFilter; + } + + /** + * 启动服务端 + * + * @throws Exception + */ + public void startServer(int serverPort) throws Exception { + try { + + ServerBootstrap b = new ServerBootstrap(); + b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) + // 给服务端channel设置属性 + .option(ChannelOption.SO_BACKLOG, 128) + + .childOption(ChannelOption.SO_KEEPALIVE, true) + .childHandler(nettyServerFilter) + ; + channelFuture = b.bind(serverPort).sync(); + + channelFuture.addListener((ChannelFutureListener) channelFuture -> { + // 服务器已启动 + }); + channelFuture.channel().closeFuture().sync(); + } finally { + shutdown(); + // 服务器已关闭 + } + } + + public void shutdown() { + if (channelFuture != null) { + channelFuture.channel().close().syncUninterruptibly(); + } + if ((bossGroup != null) && (!bossGroup.isShutdown())) { + bossGroup.shutdownGracefully(); + } + if ((workerGroup != null) && (!workerGroup.isShutdown())) { + workerGroup.shutdownGracefully(); + } + } +} +``` + +##### 客户端通过class NettyClientSocket 连接服务端 + +```java +package org.framework.smart.agent.network.heartbeat.client.netty.socket; + + +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioSocketChannel; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.application.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.client.netty.filter.NettyClientFilter; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * 客户端连接服务端 + */ +@Slf4j +public class NettyClientSocket { + private static final EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); + /** + * 服务端host + */ + private final String inetHost; + /** + * 服务端端口 + */ + private final int inetPort; + /** + * 当前客户端id + */ + @Getter + private final String clientId; + /** + * nacos配置信息处理应用 + */ + @Getter + private final ClientNettyConfigApplication clientChangeEvent; + private final List handleChannelTypeAdvancedList; // 处理服务端发送过来的数据类型 + + public NettyClientSocket(String inetHost, int inetPort, String clientId, ClientNettyConfigApplication clientChangeEvent, List handleChannelTypeAdvancedList) { + this.inetHost = inetHost; + this.inetPort = inetPort; + this.clientId = clientId; + this.clientChangeEvent = clientChangeEvent; + this.handleChannelTypeAdvancedList = handleChannelTypeAdvancedList; + } + + public void newConnect2Server() throws InterruptedException { + newConnect2Server(inetHost, inetPort, clientId, clientChangeEvent); + } + + protected void newConnect2Server(String inetHost, int inetPort, String clientId, ClientNettyConfigApplication clientChangeEvent) throws InterruptedException { + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(eventLoopGroup) + .channel(NioSocketChannel.class) + .handler(new NettyClientFilter(new ChannelTypeAdapter(handleChannelTypeAdvancedList), this)) + ; + + log.info("连接服务端IP:{},连接服务端端口:{}", inetHost, inetPort); + ChannelFuture future = bootstrap.connect(inetHost, inetPort); + Channel channel = future.channel(); + + log.info("使用的客户端ID:" + clientId); + future.addListener((ChannelFutureListener) futureListener -> { + if (futureListener.isSuccess()) { + + log.info("连接服务端成功"); + // 告诉服务端这条连接是client的连接 + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.REPORT_CLIENT_CONNECT_SUCCESS); + nettyMsg.setClientId(clientId); + nettyMsg.setData((clientId).getBytes()); + ChannelAttributeKeyUtils.buildClientId(channel, clientId); + channel.writeAndFlush(nettyMsg); + // 在线 + clientChangeEvent.clientOnLine(clientId); + } else { + log.info("每隔2s重连...."); + // 离线 + clientChangeEvent.clientOffLine(clientId); + futureListener.channel().eventLoop().schedule(() -> { + try { + newConnect2Server(inetHost, inetPort, clientId, clientChangeEvent); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }, 2, TimeUnit.SECONDS); + } + }); + } + + /** + * 关闭连接 + */ + + public void shutdown() { + if ((eventLoopGroup != null) && (!eventLoopGroup.isShutdown())) { + eventLoopGroup.shutdownGracefully(); + } + } + +} +``` + +##### 通过客户端与服务端建立的连接进行访客端口绑定 + + 上述连接会形成一个channel,我们称之为通道(本文中简单叫**心跳通道**) + 第一步 页面GUI进行新增访客端口而后将访客端口与客户端绑定(如果客户端已经启动,使用页面客户端下线触发第二步) + 第二步 客户端与访客端口绑定后使用**心跳通道** 发送客户端告诉客户端,你帮我绑定你本地真实端口 + 第三步 访客访问,访客通过访客端口访问数据,此时访客通道打开截取访客发送的数据,然后将数据发送给客户真实通道,数据返回后再返回给访客通道 + +### 功能 + + 1.内网穿透 + 2.服务端自主下发数据到客户端 + 3.流量监控 + +### 项目结构 + +| 模块 | 版本 | 描述 | +|-----------------------------------------------------------------------------------------------------------------------------------------|----------------------|------------------------------| +| [wu-smart-agent-network-heartbeat-common](wu-smart-agent-network-heartbeat-common) | 1.2.6-JDK17-SNAPSHOT | 内网穿透公共模块(声明接口、枚举、常量、适配器、解析器) | +| [wu-smart-agent-network-heartbeat-client](wu-smart-agent-network-heartbeat-client) | 1.2.6-JDK17-SNAPSHOT | 客户端(支持二次开发) | +| [wu-smart-agent-network-heartbeat-server](wu-smart-agent-network-heartbeat-server) | 1.2.6-JDK17-SNAPSHOT | 服务端(支持二次开发) | +| [wu-smart-agent-network-ui](wu-smart-agent-network-heartbeat-server-ui) | 1.2.6-JDK17-SNAPSHOT | 服务端页面 | +| [wu-smart-agent-network-heartbeat-client-start](wu-smart-agent-network-heartbeat-sample/wu-smart-agent-network-heartbeat-client-sample) | 1.2.6-JDK17-SNAPSHOT | 客户端样例 | +| [wu-smart-agent-network-heartbeat-server-start](wu-smart-agent-network-heartbeat-sample/wu-smart-agent-network-heartbeat-server-sample) | 1.2.6-JDK17-SNAPSHOT | 服务端样例 | + +### 使用技术 + +| 框架 | 版本 | 描述 | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------|--------------| +| spring-boot | 3.0.7 | springboot框架 | +| [wu-framework-web](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-framework-web) | 1.2.6-JDK17-SNAPSHOT | web容器 | +| [Lazy -ORM](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-inner-intergration/wu-database-parent) | 1.2.6-JDK17-SNAPSHOT | ORM | +| mysql-connector-j | 8.0.33 | mysql驱动 | +| [wu-authorization-server-platform-starter](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-smart-platform/wu-authorization-server-platform-starter) | 1.2.6-JDK17-SNAPSHOT | 用户授权体系 | + +### 使用环境 + + IDEA + Mac、Windows + JAVA >=13 + MAVEN + +### 启动 + + docker启动 + + docker run -d -it -p 18080:18080 --name wu-smart-agent-network-heartbeat-server registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server:1.2.6-JDK17-SNAPSHOT + + http://127.0.0.1:18080/swagger-ui/index.html + + 源码启动 + +#### 页面操作 + +启动项目后打开服务端界面 +![img.png](url_info.png) + +默认账号密码:admin/admin +![img.png](login.png) + +初始化项目 +![img.png](init_menu.png) +添加角色 +![img.png](init_role.png) +为用户授权 +![img.png](authRoe2User.png) + +刷新页面 +![img.png](cloud_client.png) + +客户端管理(客户端会自动注册) +![img.png](cloud_client.png) + +网络映射管理(修改后者新增需要映射的客户端) +![img.png](mapping.png) + +访客端口池管理(服务器端需要开放的端口) +![img.png](visitor_port.png) + +流量管理(每个客户端使用的流量) +![img.png](flow.png) + + 流量日统计报表 +![clientPerDayFlow.png](clientPerDayFlow.png) + +客户端近七天使用流量 +![clientPortPerDayFlow.png](clientPortPerDayFlow.png) \ No newline at end of file diff --git a/architecture.png b/architecture.png new file mode 100644 index 00000000..278da26b Binary files /dev/null and b/architecture.png differ diff --git a/authRoe2User.png b/authRoe2User.png new file mode 100644 index 00000000..fc2846f1 Binary files /dev/null and b/authRoe2User.png differ diff --git a/clientPerDayFlow.png b/clientPerDayFlow.png new file mode 100644 index 00000000..dd258c81 Binary files /dev/null and b/clientPerDayFlow.png differ diff --git a/clientPortPerDayFlow.png b/clientPortPerDayFlow.png new file mode 100644 index 00000000..1dcbb9d3 Binary files /dev/null and b/clientPortPerDayFlow.png differ diff --git a/cloud_client.png b/cloud_client.png new file mode 100644 index 00000000..09010141 Binary files /dev/null and b/cloud_client.png differ diff --git a/flow.png b/flow.png new file mode 100644 index 00000000..c3ec8c11 Binary files /dev/null and b/flow.png differ diff --git a/init_menu.png b/init_menu.png new file mode 100644 index 00000000..54ab27d1 Binary files /dev/null and b/init_menu.png differ diff --git a/init_role.png b/init_role.png new file mode 100644 index 00000000..c80615da Binary files /dev/null and b/init_role.png differ diff --git a/k8s-node-pod-network-k8snodepod.png b/k8s-node-pod-network-k8snodepod.png new file mode 100644 index 00000000..32a87e6b Binary files /dev/null and b/k8s-node-pod-network-k8snodepod.png differ diff --git a/k8s-node-pod-network.puml b/k8s-node-pod-network.puml new file mode 100644 index 00000000..e1394c18 --- /dev/null +++ b/k8s-node-pod-network.puml @@ -0,0 +1,50 @@ +@startuml +'https://plantuml.com/component-diagram +title k8s中node中的pod之间通讯 + +package "k8s node pod" { + + node "node1 "{ + + node "node1-pod1" { + + } + node "node1-pod2" { + + } + "node1-pod1" ---- "node1-pod2" :正常 + + } + node "node2(问题节点)"{ + + node "node2-pod1" { + + + } + node "node2-pod2" { + + } + "node2-pod1" --right-- "node2-pod2" :正常 + "node1-pod1" -- "node2-pod1" :无法通信 + "node1-pod1" -- "node2-pod2" :无法通信 + + } + node "node3"{ + + node "node3-pod1" { + + + } + node "node3-pod2" { + + } + "node3-pod1" ---- "node3-pod2" :正常 + "node3-pod1" -- "node2-pod1" :正常 + "node3-pod1" -- "node2-pod2" :正常 + + } + +} + + +@enduml \ No newline at end of file diff --git a/login.png b/login.png new file mode 100644 index 00000000..8377a9fc Binary files /dev/null and b/login.png differ diff --git a/main.png b/main.png new file mode 100644 index 00000000..c3ec8c11 Binary files /dev/null and b/main.png differ diff --git a/mapping.png b/mapping.png new file mode 100644 index 00000000..c8977bcf Binary files /dev/null and b/mapping.png differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000..513c962e --- /dev/null +++ b/pom.xml @@ -0,0 +1,259 @@ + + + 4.0.0 + + + + wu-framework-parent + top.wu2020 + 1.2.6-JDK17-SNAPSHOT + + + wu-smart-agent-network + pom + 1.2.6-JDK17-SNAPSHOT + 云上云下 + + + + + wu-smart-agent-network-heartbeat-server + wu-smart-agent-network-heartbeat-server-cluster + wu-smart-agent-network-heartbeat-client + wu-smart-agent-network-heartbeat-common + + + wu-smart-agent-network-heartbeat-start + + + + + + + + + org.projectlombok + lombok + 1.18.32 + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + + + org.mapstruct + mapstruct + 1.6.0.Beta1 + + + org.mapstruct + mapstruct-processor + 1.6.0.Beta1 + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + + top.wu2020 + wu-framework-dependencies + 1.2.6-JDK17-SNAPSHOT + pom + import + + + + + + maven_central + Maven Central + https://repo.maven.apache.org/maven2/ + + + + + + + oss + + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + package + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + + package + + jar + + + en_US + UTF-8 + UTF-8 + none + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + ${maven-gpg-plugin.version} + + + verify + + sign + + + + + + + org.codehaus.mojo + flatten-maven-plugin + ${flatten-maven-plugin.version} + + true + resolveCiFriendliesOnly + + + + flatten + process-resources + + flatten + + + + flatten.clean + clean + + clean + + + + + + + 发布的地址<--> + + + snapshots + https://oss.sonatype.org/content/repositories/snapshots/ + + + snapshots + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + + snapshots + 发布的地址<--> + + + maven-snapshots + deployment + http://192.168.17.221:31004/repository/maven-snapshots/ + + + maven-releases + deployment + http://192.168.17.221:31004/repository/maven-releases/ + + + + + native + + + + org.graalvm.buildtools + native-maven-plugin + 0.9.28 + + + + + Standard + + true + true + true + + true + + true + + + true + + + + + true + + + + + add-reachability-metadata + + add-reachability-metadata + + + + test-native + + test + + test + + + build-native + + compile-no-fork + + package + + + + + + + + + + \ No newline at end of file diff --git a/url_info.png b/url_info.png new file mode 100644 index 00000000..9a805eba Binary files /dev/null and b/url_info.png differ diff --git a/version.md b/version.md new file mode 100644 index 00000000..2f25107f --- /dev/null +++ b/version.md @@ -0,0 +1,11 @@ +### 版本更新 +#### 1.2.3-JDK17-SNAPSHOT + 【fix】修正流量计算保存两位小数 + [fix] 添加配置spring.lazy.netty.enable 控制是否开启客户端默认是自动连接服务端的 需要手动关闭 + + +#### 1.2.6-JDK17-SNAPSHOT + [fix] 客户端添加按钮删除 + [fix] 修改浏览器title内网穿透 + [fix] HandleChannelTypeAdvanced 添加权重 order 越小越靠前 + [fix] 新增网络映射新增、修改、删除、自动变更 \ No newline at end of file diff --git a/visitor_port.png b/visitor_port.png new file mode 100644 index 00000000..dd1099f6 Binary files /dev/null and b/visitor_port.png differ diff --git a/wu-smart-agent-network-heartbeat-client/Dockerfile b/wu-smart-agent-network-heartbeat-client/Dockerfile new file mode 100644 index 00000000..a149bd23 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/Dockerfile @@ -0,0 +1,22 @@ +FROM registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-framework-parent:jdk-17.0.7-x64 +MAINTAINER wujiawei <1207537021@qq.com> + +RUN echo "Asia/Shanghai" > /etc/timezone + + + +ENV APP_JAR_NAME=$APP_NAME \ + JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom" \ + PARAMS="" + + +COPY target/*.jar /app.jar + + + +ENTRYPOINT exec java -server $JAVA_OPTS -jar /app.jar $PARAMS + + + + + diff --git a/wu-smart-agent-network-heartbeat-client/Native-Dockerfile b/wu-smart-agent-network-heartbeat-client/Native-Dockerfile new file mode 100644 index 00000000..9a7595d8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/Native-Dockerfile @@ -0,0 +1,16 @@ +FROM alpine + +MAINTAINER wujiawei <1207537021@qq.com> + +RUN echo "Asia/Shanghai" > /etc/timezone + + +COPY target/lazy-cloud-heartbeat-client /native-app + +ENTRYPOINT ["/bin/sh" ,"-c", "exec ./native-app"] + + + + + + diff --git a/wu-smart-agent-network-heartbeat-client/README.md b/wu-smart-agent-network-heartbeat-client/README.md new file mode 100644 index 00000000..83b4b015 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/README.md @@ -0,0 +1,55 @@ +#### 构建native 镜像 + +```shell +mvn clean compile +mvn spring-boot:process-aot -Pnative + +mvn native:build -Pnative +``` + +### 构建docker镜像 + +```shell +docker build -t docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-native-SNAPSHOT_latest -f Native-Dockerfile . +docker push docker-registry.wujiawei.com/lazy/lazy-under-cloud-heartbeat-client:lazy-2.4.2-native-SNAPSHOT_latest +``` + +## BUILD IMAGE + +```shell + +#docker login --username=1207537021@qq.com registry.cn-hangzhou.aliyuncs.com + +docker build -t registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client:server-jdk17-master . +docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client:server-jdk17-master + +``` + +### run + +```shell +docker run -d -it --name client -e spring.lazy.netty.inet-host=124.222.48.62 -e spring.lazy.netty.inet-port=30676 -e spring.lazy.netty.client-id=node1 registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client:server-jdk17-master + + + +``` + +```shell +gu install native-image + +gu list + +mvn native:build +``` + +```shell + mvn clean native:compile -Pnative +``` + +```RUN +docker run -d -it -p 18080:18080 --name wu-smart-agent-network-heartbeat-client registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client:server-jdk17-master + +http://127.0.0.1:18080/swagger-ui/index.html + + +``` \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/pom.xml b/wu-smart-agent-network-heartbeat-client/pom.xml new file mode 100644 index 00000000..744f2afc --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/pom.xml @@ -0,0 +1,56 @@ + + + + top.wu2020 + wu-smart-agent-network + 1.2.6-JDK17-SNAPSHOT + + 4.0.0 + + wu-smart-agent-network-heartbeat-client + 云下心跳客户端 + + + 17 + 17 + + + + + + top.wu2020 + wu-smart-agent-network-heartbeat-common + + + com.alibaba + fastjson + 2.0.50 + + + top.wu2020 + wu-framework-web-spring-starter + + + + + com.h2database + h2 + + + top.wu2020 + wu-database-lazy-plus-starter + + + + + + maven_central + Maven Central + https://repo.maven.apache.org/maven2/ + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/EnableHeartbeatClientAutoConfiguration.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/EnableHeartbeatClientAutoConfiguration.java new file mode 100644 index 00000000..e3042949 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/EnableHeartbeatClientAutoConfiguration.java @@ -0,0 +1,9 @@ +package org.framework.smart.agent.network.heartbeat.client; + +import org.springframework.context.annotation.ComponentScan; +import org.wu.framework.lazy.orm.core.stereotype.LazyScan; + +@ComponentScan(basePackages = "org.framework.smart.agent.network.heartbeat.client") +@LazyScan(scanBasePackages = "org.framework.smart.agent.network.heartbeat.client.infrastructure.entity") +public class EnableHeartbeatClientAutoConfiguration { +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/ClientChangeApplication.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/ClientChangeApplication.java new file mode 100644 index 00000000..9c99dfb4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/ClientChangeApplication.java @@ -0,0 +1,54 @@ +package org.framework.smart.agent.network.heartbeat.client.application; + + +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; + +/** + * 客户端状态变更事件 + * @see ClientChangeEvent + */ +@Deprecated +public interface ClientChangeApplication { + + + /** + * 推送客户端在线 + */ + void clientOnLine(String clientId); + + /** + * 推送客户端在线 + * @param clientId 客户端 + * @param inetHost 服务端ip + * @param inetPort 服务端端口 + */ + void clientOnLine(String inetHost, int inetPort,String clientId); + + /** + * 推送客户端离线 + */ + void clientOffLine(String clientId); + + /** + * 推送客户端离线 + * @param clientId 客户端 + * @param inetHost 服务端ip + * @param inetPort 服务端端口 + */ + void clientOffLine(String inetHost, int inetPort,String clientId); + + /** + * 暂存开启 + * + * @param clientId 租户ID + */ + void stagingOpen(String clientId); + + + /** + * 暂存关闭 + * + * @param clientId 客户端ID 对应的租户 + */ + void stagingClose(String clientId); +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/LazyNettyServerPropertiesApplication.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/LazyNettyServerPropertiesApplication.java new file mode 100644 index 00000000..fba72266 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/LazyNettyServerPropertiesApplication.java @@ -0,0 +1,128 @@ +package org.framework.smart.agent.network.heartbeat.client.application; + +import org.wu.framework.web.response.Result; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesRemoveCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesStoryCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesUpdateCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesQueryListCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesQueryOneCommand; +import org.framework.smart.agent.network.heartbeat.client.application.dto.LazyNettyServerPropertiesDTO; + +import java.util.List; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; + +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication + **/ + +public interface LazyNettyServerPropertiesApplication { + + + /** + * describe 新增服务端配置信息 + * + * @param lazyNettyServerPropertiesStoryCommand 新增服务端配置信息 + * @return {@link Result} 服务端配置信息新增后领域对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result story(LazyNettyServerPropertiesStoryCommand lazyNettyServerPropertiesStoryCommand); + + /** + * describe 批量新增服务端配置信息 + * + * @param lazyNettyServerPropertiesStoryCommandList 批量新增服务端配置信息 + * @return {@link Result>} 服务端配置信息新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result> batchStory(List lazyNettyServerPropertiesStoryCommandList); + + /** + * describe 更新服务端配置信息 + * + * @param lazyNettyServerPropertiesUpdateCommand 更新服务端配置信息 + * @return {@link Result} 服务端配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result updateOne(LazyNettyServerPropertiesUpdateCommand lazyNettyServerPropertiesUpdateCommand); + + /** + * describe 查询单个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryOneCommand 查询单个服务端配置信息 + * @return {@link Result} 服务端配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result findOne(LazyNettyServerPropertiesQueryOneCommand lazyNettyServerPropertiesQueryOneCommand); + + /** + * describe 查询多个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryListCommand 查询多个服务端配置信息 + * @return {@link Result >} 服务端配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result> findList(LazyNettyServerPropertiesQueryListCommand lazyNettyServerPropertiesQueryListCommand); + + /** + * describe 分页查询多个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryListCommand 分页查询多个服务端配置信息 + * @return {@link Result >} 分页服务端配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result> findPage(int size, int current, LazyNettyServerPropertiesQueryListCommand lazyNettyServerPropertiesQueryListCommand); + + /** + * describe 删除服务端配置信息 + * + * @param lazyNettyServerPropertiesRemoveCommand 删除服务端配置信息 + * @return {@link Result} 服务端配置信息 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result remove(LazyNettyServerPropertiesRemoveCommand lazyNettyServerPropertiesRemoveCommand); + + /** + * 启动socket + * + * @param lazyNettyServerProperties 配置 + */ + void starterOneClientSocket(LazyNettyServerProperties lazyNettyServerProperties); + + /** + * 启动所有 配置的socket + */ + void starterAllClientSocket(); + + /** + * 关闭 客户端socket + * @param needCloseLazyNettyServerProperties 配置 + */ + void destroyOneClientSocket(LazyNettyServerProperties needCloseLazyNettyServerProperties); + + /** + * 关闭 客户端socket + */ + void destroyClientSocket(); + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/assembler/LazyNettyServerPropertiesDTOAssembler.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/assembler/LazyNettyServerPropertiesDTOAssembler.java new file mode 100644 index 00000000..cacc860e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/assembler/LazyNettyServerPropertiesDTOAssembler.java @@ -0,0 +1,93 @@ +package org.framework.smart.agent.network.heartbeat.client.application.assembler; + +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesRemoveCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesStoryCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesUpdateCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesQueryListCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesQueryOneCommand; +import org.framework.smart.agent.network.heartbeat.client.application.dto.LazyNettyServerPropertiesDTO; +import org.mapstruct.factory.Mappers; +import org.mapstruct.Mapper; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler + **/ +@Mapper +public interface LazyNettyServerPropertiesDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + + + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerPropertiesDTOAssembler INSTANCE = Mappers.getMapper(LazyNettyServerPropertiesDTOAssembler.class); + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param lazyNettyServerPropertiesStoryCommand 保存服务端配置信息对象 + * @return {@link LazyNettyServerProperties} 服务端配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerProperties toLazyNettyServerProperties(LazyNettyServerPropertiesStoryCommand lazyNettyServerPropertiesStoryCommand); + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param lazyNettyServerPropertiesUpdateCommand 更新服务端配置信息对象 + * @return {@link LazyNettyServerProperties} 服务端配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerProperties toLazyNettyServerProperties(LazyNettyServerPropertiesUpdateCommand lazyNettyServerPropertiesUpdateCommand); + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyServerPropertiesQueryOneCommand 查询单个服务端配置信息对象参数 + * @return {@link LazyNettyServerProperties} 服务端配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerProperties toLazyNettyServerProperties(LazyNettyServerPropertiesQueryOneCommand lazyNettyServerPropertiesQueryOneCommand); + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyServerPropertiesQueryListCommand 查询集合服务端配置信息对象参数 + * @return {@link LazyNettyServerProperties} 服务端配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerProperties toLazyNettyServerProperties(LazyNettyServerPropertiesQueryListCommand lazyNettyServerPropertiesQueryListCommand); + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param lazyNettyServerPropertiesRemoveCommand 删除服务端配置信息对象参数 + * @return {@link LazyNettyServerProperties} 服务端配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerProperties toLazyNettyServerProperties(LazyNettyServerPropertiesRemoveCommand lazyNettyServerPropertiesRemoveCommand); + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyNettyServerProperties 服务端配置信息领域对象 + * @return {@link LazyNettyServerPropertiesDTO} 服务端配置信息DTO对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerPropertiesDTO fromLazyNettyServerProperties(LazyNettyServerProperties lazyNettyServerProperties); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesQueryListCommand.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesQueryListCommand.java new file mode 100644 index 00000000..425b0d74 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesQueryListCommand.java @@ -0,0 +1,77 @@ +package org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; + +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Integer; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_properties_query_List_command",description = "服务端配置信息") +public class LazyNettyServerPropertiesQueryListCommand { + + + /** + * + * 客户身份ID + */ + @Schema(description ="客户身份ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 状态(on_line、off_line) + */ + @Schema(description ="状态(on_line、off_line)",name ="connectStatus",example = "") + private NettyClientStatus connectStatus; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + + /** + * + * 服务端host + */ + @Schema(description ="服务端host",name ="inetHost",example = "") + private String inetHost; + + /** + * + * 服务端端口 + */ + @Schema(description ="服务端端口",name ="inetPort",example = "") + private Integer inetPort; + + + + /** + * + * 类型(配置、DB) + */ + @Schema(description ="类型(配置、DB)",name ="type",example = "") + private PropertiesType type; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesQueryOneCommand.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesQueryOneCommand.java new file mode 100644 index 00000000..5af7b909 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesQueryOneCommand.java @@ -0,0 +1,76 @@ +package org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; + +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Integer; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_properties_query_one_command",description = "服务端配置信息") +public class LazyNettyServerPropertiesQueryOneCommand { + + + /** + * + * 客户身份ID + */ + @Schema(description ="客户身份ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 状态(on_line、off_line) + */ + @Schema(description ="状态(on_line、off_line)",name ="connectStatus",example = "") + private NettyClientStatus connectStatus; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 服务端host + */ + @Schema(description ="服务端host",name ="inetHost",example = "") + private String inetHost; + + /** + * + * 服务端端口 + */ + @Schema(description ="服务端端口",name ="inetPort",example = "") + private Integer inetPort; + + + + /** + * + * 类型(配置、DB) + */ + @Schema(description ="类型(配置、DB)",name ="type",example = "") + private PropertiesType type; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesRemoveCommand.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesRemoveCommand.java new file mode 100644 index 00000000..538725f2 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesRemoveCommand.java @@ -0,0 +1,77 @@ +package org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; + +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Integer; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_properties_remove_command",description = "服务端配置信息") +public class LazyNettyServerPropertiesRemoveCommand { + + + /** + * + * 客户身份ID + */ + @Schema(description ="客户身份ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 状态(on_line、off_line) + */ + @Schema(description ="状态(on_line、off_line)",name ="connectStatus",example = "") + private NettyClientStatus connectStatus; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + + /** + * + * 服务端host + */ + @Schema(description ="服务端host",name ="inetHost",example = "") + private String inetHost; + + /** + * + * 服务端端口 + */ + @Schema(description ="服务端端口",name ="inetPort",example = "") + private Integer inetPort; + + + + /** + * + * 类型(配置、DB) + */ + @Schema(description ="类型(配置、DB)",name ="type",example = "") + private PropertiesType type; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesStoryCommand.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesStoryCommand.java new file mode 100644 index 00000000..3eb2aca9 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesStoryCommand.java @@ -0,0 +1,76 @@ +package org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; + +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Integer; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_properties_story_command",description = "服务端配置信息") +public class LazyNettyServerPropertiesStoryCommand { + + + /** + * + * 客户身份ID + */ + @Schema(description ="客户身份ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 状态(on_line、off_line) + */ + @Schema(description ="状态(on_line、off_line)",name ="connectStatus",example = "") + private NettyClientStatus connectStatus; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 服务端host + */ + @Schema(description ="服务端host",name ="inetHost",example = "") + private String inetHost; + + /** + * + * 服务端端口 + */ + @Schema(description ="服务端端口",name ="inetPort",example = "") + private Integer inetPort; + + + + /** + * + * 类型(配置、DB) + */ + @Schema(description ="类型(配置、DB)",name ="type",example = "") + private PropertiesType type; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesUpdateCommand.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesUpdateCommand.java new file mode 100644 index 00000000..256255fe --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/command/lazy/netty/server/properties/LazyNettyServerPropertiesUpdateCommand.java @@ -0,0 +1,76 @@ +package org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; + +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Integer; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_properties_update_command",description = "服务端配置信息") +public class LazyNettyServerPropertiesUpdateCommand { + + + /** + * + * 客户身份ID + */ + @Schema(description ="客户身份ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 状态(on_line、off_line) + */ + @Schema(description ="状态(on_line、off_line)",name ="connectStatus",example = "") + private NettyClientStatus connectStatus; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 服务端host + */ + @Schema(description ="服务端host",name ="inetHost",example = "") + private String inetHost; + + /** + * + * 服务端端口 + */ + @Schema(description ="服务端端口",name ="inetPort",example = "") + private Integer inetPort; + + + + /** + * + * 类型(配置、DB) + */ + @Schema(description ="类型(配置、DB)",name ="type",example = "") + private PropertiesType type; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/dto/LazyNettyServerPropertiesDTO.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/dto/LazyNettyServerPropertiesDTO.java new file mode 100644 index 00000000..efd90c59 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/dto/LazyNettyServerPropertiesDTO.java @@ -0,0 +1,76 @@ +package org.framework.smart.agent.network.heartbeat.client.application.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; + +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Integer; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_properties_command_dto",description = "服务端配置信息") +public class LazyNettyServerPropertiesDTO { + + + /** + * + * 客户身份ID + */ + @Schema(description ="客户身份ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 状态(on_line、off_line) + */ + @Schema(description ="状态(on_line、off_line)",name ="connectStatus",example = "") + private NettyClientStatus connectStatus; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 服务端host + */ + @Schema(description ="服务端host",name ="inetHost",example = "") + private String inetHost; + + /** + * + * 服务端端口 + */ + @Schema(description ="服务端端口",name ="inetPort",example = "") + private Integer inetPort; + + + + /** + * + * 类型(配置、DB) + */ + @Schema(description ="类型(配置、DB)",name ="type",example = "") + private PropertiesType type; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/impl/LazyNettyServerPropertiesApplicationImpl.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/impl/LazyNettyServerPropertiesApplicationImpl.java new file mode 100644 index 00000000..d151b921 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/application/impl/LazyNettyServerPropertiesApplicationImpl.java @@ -0,0 +1,270 @@ +package org.framework.smart.agent.network.heartbeat.client.application.impl; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.application.LazyNettyServerPropertiesApplication; +import org.framework.smart.agent.network.heartbeat.client.application.assembler.LazyNettyServerPropertiesDTOAssembler; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.*; +import org.framework.smart.agent.network.heartbeat.client.application.dto.LazyNettyServerPropertiesDTO; +import org.framework.smart.agent.network.heartbeat.client.config.NettyClientProperties; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerPropertiesRepository; +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.client.netty.socket.NettyClientSocket; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.wu.framework.core.NormalUsedString; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; + +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl + **/ +@Slf4j +@LazyApplication +public class LazyNettyServerPropertiesApplicationImpl implements LazyNettyServerPropertiesApplication { + + @Resource + LazyNettyServerPropertiesRepository lazyNettyServerPropertiesRepository; + + @Resource + private ClientChangeEvent clientChangeEvent; + + @Resource + private List handleChannelTypeAdvancedList; // 处理服务端发送过来的数据类型 + + @Resource + private NettyClientProperties nettyClientProperties;// 默认配置文件配置 + + + // 缓存连接socket + private final ConcurrentHashMap cacheNettyClientSocketMap = new ConcurrentHashMap<>(); + + public static final ThreadPoolExecutor NETTY_CLIENT_EXECUTOR = + new ThreadPoolExecutor(20, 50, 200, TimeUnit.MILLISECONDS, + new ArrayBlockingQueue<>(1)); + + /** + * describe 新增服务端配置信息 + * + * @param lazyNettyServerPropertiesStoryCommand 新增服务端配置信息 + * @return {@link Result} 服务端配置信息新增后领域对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result story(LazyNettyServerPropertiesStoryCommand lazyNettyServerPropertiesStoryCommand) { + LazyNettyServerProperties lazyNettyServerProperties = LazyNettyServerPropertiesDTOAssembler.INSTANCE.toLazyNettyServerProperties(lazyNettyServerPropertiesStoryCommand); + + // 如果状态正在运行中直接忽略 + lazyNettyServerPropertiesRepository.exists(lazyNettyServerProperties) + .accept(exists -> { + if (!exists) { + starterOneClientSocket(lazyNettyServerProperties); + } + }); + lazyNettyServerProperties.setType(PropertiesType.DB); + return lazyNettyServerPropertiesRepository.story(lazyNettyServerProperties); + } + + /** + * describe 批量新增服务端配置信息 + * + * @param lazyNettyServerPropertiesStoryCommandList 批量新增服务端配置信息 + * @return {@link Result>} 服务端配置信息新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyServerPropertiesStoryCommandList) { + List lazyNettyServerPropertiesList = lazyNettyServerPropertiesStoryCommandList.stream().map(LazyNettyServerPropertiesDTOAssembler.INSTANCE::toLazyNettyServerProperties).collect(Collectors.toList()); + return lazyNettyServerPropertiesRepository.batchStory(lazyNettyServerPropertiesList); + } + + /** + * describe 更新服务端配置信息 + * + * @param lazyNettyServerPropertiesUpdateCommand 更新服务端配置信息 + * @return {@link Result} 服务端配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result updateOne(LazyNettyServerPropertiesUpdateCommand lazyNettyServerPropertiesUpdateCommand) { + LazyNettyServerProperties lazyNettyServerProperties = LazyNettyServerPropertiesDTOAssembler.INSTANCE.toLazyNettyServerProperties(lazyNettyServerPropertiesUpdateCommand); + return lazyNettyServerPropertiesRepository.story(lazyNettyServerProperties); + } + + /** + * describe 查询单个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryOneCommand 查询单个服务端配置信息 + * @return {@link Result} 服务端配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result findOne(LazyNettyServerPropertiesQueryOneCommand lazyNettyServerPropertiesQueryOneCommand) { + LazyNettyServerProperties lazyNettyServerProperties = LazyNettyServerPropertiesDTOAssembler.INSTANCE.toLazyNettyServerProperties(lazyNettyServerPropertiesQueryOneCommand); + return lazyNettyServerPropertiesRepository.findOne(lazyNettyServerProperties).convert(LazyNettyServerPropertiesDTOAssembler.INSTANCE::fromLazyNettyServerProperties); + } + + /** + * describe 查询多个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryListCommand 查询多个服务端配置信息 + * @return {@link Result>} 服务端配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result> findList(LazyNettyServerPropertiesQueryListCommand lazyNettyServerPropertiesQueryListCommand) { + LazyNettyServerProperties lazyNettyServerProperties = LazyNettyServerPropertiesDTOAssembler.INSTANCE.toLazyNettyServerProperties(lazyNettyServerPropertiesQueryListCommand); + return lazyNettyServerPropertiesRepository.findList(lazyNettyServerProperties).convert(lazyNettyServerPropertiess -> lazyNettyServerPropertiess.stream().map(LazyNettyServerPropertiesDTOAssembler.INSTANCE::fromLazyNettyServerProperties).collect(Collectors.toList())); + } + + /** + * describe 分页查询多个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryListCommand 分页查询多个服务端配置信息 + * @return {@link Result>} 分页服务端配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyServerPropertiesQueryListCommand lazyNettyServerPropertiesQueryListCommand) { + LazyNettyServerProperties lazyNettyServerProperties = LazyNettyServerPropertiesDTOAssembler.INSTANCE.toLazyNettyServerProperties(lazyNettyServerPropertiesQueryListCommand); + return lazyNettyServerPropertiesRepository.findPage(size, current, lazyNettyServerProperties).convert(page -> page.convert(LazyNettyServerPropertiesDTOAssembler.INSTANCE::fromLazyNettyServerProperties)); + } + + /** + * describe 删除服务端配置信息 + * + * @param lazyNettyServerPropertiesRemoveCommand 删除服务端配置信息 + * @return {@link Result} 服务端配置信息 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result remove(LazyNettyServerPropertiesRemoveCommand lazyNettyServerPropertiesRemoveCommand) { + LazyNettyServerProperties lazyNettyServerProperties = LazyNettyServerPropertiesDTOAssembler.INSTANCE.toLazyNettyServerProperties(lazyNettyServerPropertiesRemoveCommand); + // 关闭连接 + destroyOneClientSocket(lazyNettyServerProperties); + return lazyNettyServerPropertiesRepository.remove(lazyNettyServerProperties); + } + + /** + * 启动socket + * + * @param lazyNettyServerProperties 配置 + */ + @Override + public void starterOneClientSocket(LazyNettyServerProperties lazyNettyServerProperties) { + boolean enabled = nettyClientProperties.isEnabled(); + if (enabled) { + String inetHost = lazyNettyServerProperties.getInetHost(); + Integer inetPort = lazyNettyServerProperties.getInetPort(); + String clientId = lazyNettyServerProperties.getClientId(); + + NettyClientSocket nettyClientSocket = new + NettyClientSocket(inetHost, inetPort, clientId, + NormalUsedString.DEFAULT, + clientChangeEvent, handleChannelTypeAdvancedList); + cacheNettyClientSocketMap.put(lazyNettyServerProperties, nettyClientSocket); + + // 更新状态为运行中 + lazyNettyServerProperties.setConnectStatus(NettyClientStatus.RUNNING); + lazyNettyServerPropertiesRepository.story(lazyNettyServerProperties); + Thread thread = new Thread(() -> { + try { + nettyClientSocket.newConnect2Server(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + }); + // 当前服务连接Netty客户端:{},Netty端口:{} + log.info("Current service connection Netty client: {}, Netty port: {}", inetHost, inetPort); + NETTY_CLIENT_EXECUTOR.execute(thread); + + } + } + + /** + * 启动所有 配置的socket + */ + @Override + public void starterAllClientSocket() { + boolean enabled = nettyClientProperties.isEnabled(); + if (enabled) { + // 查询所有配置 + lazyNettyServerPropertiesRepository.findList(new LazyNettyServerProperties()).accept(lazyNettyServerPropertiesDTOS -> { + for (LazyNettyServerProperties nettyServerProperties : lazyNettyServerPropertiesDTOS) { + starterOneClientSocket(nettyServerProperties); + } + }); + } + } + + /** + * 关闭 客户端socket + * + * @param needCloseLazyNettyServerProperties 配置 + */ + @Override + public void destroyOneClientSocket(LazyNettyServerProperties needCloseLazyNettyServerProperties) { + // 关闭指定socket + cacheNettyClientSocketMap.forEach(((nettyServerProperties, nettyClientSocket) -> { + String clientId = nettyServerProperties.getClientId(); + String inetHost = nettyServerProperties.getInetHost(); + Integer inetPort = nettyServerProperties.getInetPort(); + String needCloseInetHost = needCloseLazyNettyServerProperties.getInetHost(); + Integer needCloseInetPort = needCloseLazyNettyServerProperties.getInetPort(); + String needCloseClientId = needCloseLazyNettyServerProperties.getClientId(); + if (Objects.equals(clientId, needCloseClientId) + && Objects.equals(inetPort, needCloseInetPort) + && Objects.equals(inetHost, needCloseInetHost)) { + nettyClientSocket.shutdown(); + // 关闭客户端:{}与服务端连接:{}:{} + log.warn("Close client: {} Connect to server: {}: {}", clientId, inetHost, inetPort); + } + })); + } + + /** + * 关闭 客户端socket + */ + @Override + public void destroyClientSocket() { + // 关闭socket + cacheNettyClientSocketMap.forEach(((nettyServerProperties, nettyClientSocket) -> { + nettyClientSocket.shutdown(); + String clientId = nettyServerProperties.getClientId(); + String inetHost = nettyServerProperties.getInetHost(); + Integer inetPort = nettyServerProperties.getInetPort(); + // 关闭客户端:{}与服务端连接:{}:{} + log.warn("Close client: {} Connect to server: {}: {}", clientId, inetHost, inetPort); + })); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/ClientAutoConfiguration.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/ClientAutoConfiguration.java new file mode 100644 index 00000000..68bf430a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/ClientAutoConfiguration.java @@ -0,0 +1,82 @@ +package org.framework.smart.agent.network.heartbeat.client.config; + + +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.netty.socket.NettyClientSocket; +import org.springframework.boot.CommandLineRunner; +import org.springframework.context.annotation.Bean; +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.wu.framework.core.NormalUsedString; + +import java.util.List; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * description 自动配置 + * + * @author 吴佳伟 + * @date 2023/09/12 18:22 + * @see InitConfig + */ +@Deprecated +@Slf4j +public class ClientAutoConfiguration implements CommandLineRunner { + + private final NettyClientProperties nettyClientProperties; + private final ClientChangeEvent clientChangeEvent; + + private final List handleChannelTypeAdvancedList; // 处理服务端发送过来的数据类型 + + + public static final ThreadPoolExecutor NETTY_CLIENT_EXECUTOR = new ThreadPoolExecutor(1, 1, 200, TimeUnit.MILLISECONDS, + new ArrayBlockingQueue<>(1)); + + public ClientAutoConfiguration(NettyClientProperties nettyClientProperties, + ClientChangeEvent clientChangeEvent, + List handleChannelTypeAdvancedList) { + this.nettyClientProperties = nettyClientProperties; + this.clientChangeEvent = clientChangeEvent; + this.handleChannelTypeAdvancedList = handleChannelTypeAdvancedList; + } + + + @Bean(destroyMethod = "shutdown") + public NettyClientSocket nettyClientSocket() { + String inetHost = nettyClientProperties.getInetHost(); + int inetPort = nettyClientProperties.getInetPort(); + String clientId = nettyClientProperties.getClientId(); + return new NettyClientSocket(inetHost, inetPort, clientId, NormalUsedString.DEFAULT, clientChangeEvent, handleChannelTypeAdvancedList); + } + + /** + * @param args + * @throws Exception + */ + @Override + public void run(String... args) throws Exception { + + + String inetHost = nettyClientProperties.getInetHost(); + int inetPort = nettyClientProperties.getInetPort(); + String clientId = nettyClientProperties.getClientId(); + NettyClientSocket nettyClientSocket = new NettyClientSocket( + inetHost, inetPort, + clientId, NormalUsedString.DEFAULT, + clientChangeEvent, handleChannelTypeAdvancedList); + Thread thread = new Thread(() -> { + try { + nettyClientSocket.newConnect2Server(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + }); + log.info("当前服务连接Netty客户端:{},Netty端口:{}", inetHost, inetPort); + NETTY_CLIENT_EXECUTOR.execute(thread); + + + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/HeartbeatClientConfiguration.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/HeartbeatClientConfiguration.java new file mode 100644 index 00000000..94eed2cf --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/HeartbeatClientConfiguration.java @@ -0,0 +1,89 @@ +package org.framework.smart.agent.network.heartbeat.client.config; + + +import org.framework.smart.agent.network.heartbeat.client.netty.advanced.*; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Role; +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; + +import java.util.List; + +@Role(BeanDefinition.ROLE_INFRASTRUCTURE) +@ConditionalOnProperty(prefix = NettyClientProperties.PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) +public class HeartbeatClientConfiguration { + + /** + * 服务端 处理客户端心跳 + * + * @return ClientHandleChannelHeartbeatTypeAdvanced + */ + @Bean + public ClientHandleChannelHeartbeatTypeAdvanced clientChannelHeartbeatTypeAdvanced() { + return new ClientHandleChannelHeartbeatTypeAdvanced(); + } + + /** + * 处理 客户端代理的真实端口自动读写 + * + * @return ClientHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced + */ + @Bean + public ClientHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced handleDistributeSingleClientRealAutoReadConnectTypeAdvanced() { + return new ClientHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced(); + } + + /** + * 处理 接收服务端发送过来的聊天信息 + * + * @return ClientHandleDistributeSingleClientMessageTypeAdvanced + */ + @Bean + public ClientHandleDistributeSingleClientMessageTypeAdvanced handleDistributeSingleClientMessageTypeAdvanced() { + return new ClientHandleDistributeSingleClientMessageTypeAdvanced(); + } + + @Bean + public ClientHandleDistributeSingleClientRealCloseVisitorTypeAdvanced handleDistributeSingleClientRealCloseVisitorTypeAdvanced() { + return new ClientHandleDistributeSingleClientRealCloseVisitorTypeAdvanced(); + } + + @Bean + public ClientReportHandleChannelTransferTypeAdvancedHandleDistribute handleChannelTransferTypeAdvancedHandleDistribute(NettyClientProperties nettyClientProperties) { + return new ClientReportHandleChannelTransferTypeAdvancedHandleDistribute(nettyClientProperties); + } + + @Bean + public HandleDistributeConnectSuccessNotificationTypeAdvancedHandle handleDistributeConnectSuccessNotificationTypeAdvancedHandle(ClientChangeEvent clientChangeEvent) { + return new HandleDistributeConnectSuccessNotificationTypeAdvancedHandle(clientChangeEvent); + } + + @Bean + public HandleClientChannelActiveAdvanced handleClientChannelActiveAdvanced(NettyClientProperties nettyClientProperties) { + return new HandleClientChannelActiveAdvanced(nettyClientProperties); + } + + @Bean + public HandleDistributeDisconnectTypeAdvancedHandle handleDistributeDisconnectTypeAdvancedHandle(ClientChangeEvent clientChangeEvent) { + return new HandleDistributeDisconnectTypeAdvancedHandle(clientChangeEvent); + } + + @Bean + public HandleDistributeStagingClosedTypeAdvanced handleDistributeStagingClosedTypeAdvanced() { + return new HandleDistributeStagingClosedTypeAdvanced(); + } + + @Bean + public HandleDistributeStagingOpenedTypeAdvanced handleDistributeStagingOpenedTypeAdvanced() { + return new HandleDistributeStagingOpenedTypeAdvanced(); + } + + + @Bean + public ClientHandleDistributeSingleClientRealConnectTypeAdvanced clientHandleDistributeSingleClientRealConnectTypeAdvanced(NettyClientProperties nettyClientProperties, + List handleChannelTypeAdvancedList) { + return new ClientHandleDistributeSingleClientRealConnectTypeAdvanced(nettyClientProperties, handleChannelTypeAdvancedList); + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/InitConfig.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/InitConfig.java new file mode 100644 index 00000000..eaff2a53 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/InitConfig.java @@ -0,0 +1,87 @@ +package org.framework.smart.agent.network.heartbeat.client.config; + +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.application.LazyNettyServerPropertiesApplication; +import org.framework.smart.agent.network.heartbeat.client.infrastructure.entity.LazyNettyServerPropertiesDO; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Role; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; + +import java.util.Objects; + +/** + * 初始化配置 + */ +@Role(BeanDefinition.ROLE_INFRASTRUCTURE) +@Slf4j +@Configuration +public class InitConfig implements CommandLineRunner, DisposableBean { + + private final NettyClientProperties nettyClientProperties; + private final LazyLambdaStream lazyLambdaStream; + + private final LazyNettyServerPropertiesApplication lazyNettyServerPropertiesApplication; + + public InitConfig(NettyClientProperties nettyClientProperties, LazyLambdaStream lazyLambdaStream, LazyNettyServerPropertiesApplication lazyNettyServerPropertiesApplication) { + this.nettyClientProperties = nettyClientProperties; + this.lazyLambdaStream = lazyLambdaStream; + this.lazyNettyServerPropertiesApplication = lazyNettyServerPropertiesApplication; + } + + + @Override + public void run(String... args) throws Exception { + try { + // 存储配置到db + initDb2Config(); + // 启动客户端连接 + lazyNettyServerPropertiesApplication.starterAllClientSocket(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 存储配置到db + */ + public void initDb2Config() { + + String clientId = nettyClientProperties.getClientId(); + String inetHost = nettyClientProperties.getInetHost(); + int inetPort = nettyClientProperties.getInetPort(); + if (Objects.isNull(clientId) || + Objects.isNull(inetHost)) { + log.warn("配置信息为空,请通过页面添加配置信息:{}", nettyClientProperties); + return; + } + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = new LazyNettyServerPropertiesDO(); + lazyNettyServerPropertiesDO.setClientId(clientId); + lazyNettyServerPropertiesDO.setInetHost(inetHost); + lazyNettyServerPropertiesDO.setInetPort(inetPort); + lazyNettyServerPropertiesDO.setType(PropertiesType.CONFIG); + lazyNettyServerPropertiesDO.setIsDeleted(false); + // 根据服务端端口、port 唯一性验证 + boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapper() + .eq(LazyNettyServerPropertiesDO::getInetHost, inetHost) + .eq(LazyNettyServerPropertiesDO::getInetPort, inetPort) + .eq(LazyNettyServerPropertiesDO::getClientId, clientId) + ); + if (!exists) { + lazyLambdaStream.insert(lazyNettyServerPropertiesDO); + } + } + + /** + * 程序关闭后执行 + */ + @Override + public void destroy() { + lazyNettyServerPropertiesApplication.destroyClientSocket(); + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/NettyClientProperties.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/NettyClientProperties.java new file mode 100644 index 00000000..2d9ae2c5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/NettyClientProperties.java @@ -0,0 +1,36 @@ +package org.framework.smart.agent.network.heartbeat.client.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * netty 客户服务端地址配置属性 + */ +@ConfigurationProperties(prefix = NettyClientProperties.PREFIX, ignoreUnknownFields = true) +@Configuration +@Data +public class NettyClientProperties { + public static final String PREFIX = "spring.lazy.netty.client"; + /** + * 服务端地址 如:127.0.0.1 + */ + private String inetHost; + /** + * 服务端端口 如:7001 + */ + private int inetPort; + /** + * 服务端path + */ + private String inetPath = "lazy-cloud-heartbeat-server"; + /** + * 客户端ID 如:1024 + */ + private String clientId; + + /** + * 是否开启 默认是 + */ + private boolean enabled = true; +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/PropertiesType.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/PropertiesType.java new file mode 100644 index 00000000..387fd3c8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/config/PropertiesType.java @@ -0,0 +1,14 @@ +package org.framework.smart.agent.network.heartbeat.client.config; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 属性类型 + */ +@AllArgsConstructor +@Getter +public enum PropertiesType { + DB, + CONFIG +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/controller/LazyNettyServerPropertiesProvider.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/controller/LazyNettyServerPropertiesProvider.java new file mode 100644 index 00000000..22cfe84e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/controller/LazyNettyServerPropertiesProvider.java @@ -0,0 +1,141 @@ +package org.framework.smart.agent.network.heartbeat.client.controller; + +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import org.wu.framework.web.spring.EasyController; +import org.springframework.web.bind.annotation.*; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import org.springframework.beans.factory.annotation.Autowired; +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesRemoveCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesStoryCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesUpdateCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesQueryListCommand; +import org.framework.smart.agent.network.heartbeat.client.application.command.lazy.netty.server.properties.LazyNettyServerPropertiesQueryOneCommand; +import org.framework.smart.agent.network.heartbeat.client.application.LazyNettyServerPropertiesApplication; +import org.framework.smart.agent.network.heartbeat.client.application.dto.LazyNettyServerPropertiesDTO; +import java.util.List; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController + **/ +@Tag(name = "服务端配置信息提供者") +@EasyController("/v1/api/lazy/netty/server/properties") +public class LazyNettyServerPropertiesProvider { + + @Resource + private LazyNettyServerPropertiesApplication lazyNettyServerPropertiesApplication; + + /** + * describe 新增服务端配置信息 + * + * @param lazyNettyServerPropertiesStoryCommand 新增服务端配置信息 + * @return {@link Result} 服务端配置信息新增后领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + @Operation(summary = "新增服务端配置信息") + @PostMapping("/story") + public Result story(@RequestBody LazyNettyServerPropertiesStoryCommand lazyNettyServerPropertiesStoryCommand){ + return lazyNettyServerPropertiesApplication.story(lazyNettyServerPropertiesStoryCommand); + } + /** + * describe 批量新增服务端配置信息 + * + * @param lazyNettyServerPropertiesStoryCommandList 批量新增服务端配置信息 + * @return {@link Result>} 服务端配置信息新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Operation(summary = "批量新增服务端配置信息") + @PostMapping("/batchStory") + public Result> batchStory(@RequestBody List lazyNettyServerPropertiesStoryCommandList){ + return lazyNettyServerPropertiesApplication.batchStory(lazyNettyServerPropertiesStoryCommandList); + } + /** + * describe 更新服务端配置信息 + * + * @param lazyNettyServerPropertiesUpdateCommand 更新服务端配置信息 + * @return {@link Result} 服务端配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Operation(summary = "更新服务端配置信息") + @PutMapping("/updateOne") + public Result updateOne(@RequestBody LazyNettyServerPropertiesUpdateCommand lazyNettyServerPropertiesUpdateCommand){ + return lazyNettyServerPropertiesApplication.updateOne(lazyNettyServerPropertiesUpdateCommand); + } + /** + * describe 查询单个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryOneCommand 查询单个服务端配置信息 + * @return {@link Result} 服务端配置信息DTO对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Operation(summary = "查询单个服务端配置信息") + @GetMapping("/findOne") + public Result findOne(@ModelAttribute LazyNettyServerPropertiesQueryOneCommand lazyNettyServerPropertiesQueryOneCommand){ + return lazyNettyServerPropertiesApplication.findOne(lazyNettyServerPropertiesQueryOneCommand); + } + /** + * describe 查询多个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryListCommand 查询多个服务端配置信息 + * @return {@link Result>} 服务端配置信息DTO对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Operation(summary = "查询多个服务端配置信息") + @GetMapping("/findList") + public Result> findList(@ModelAttribute LazyNettyServerPropertiesQueryListCommand lazyNettyServerPropertiesQueryListCommand){ + return lazyNettyServerPropertiesApplication.findList(lazyNettyServerPropertiesQueryListCommand); + } + /** + * describe 分页查询多个服务端配置信息 + * + * @param lazyNettyServerPropertiesQueryListCommand 分页查询多个服务端配置信息 + * @return {@link Result>} 分页服务端配置信息DTO对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Operation(summary = "分页查询多个服务端配置信息") + @GetMapping("/findPage") + public Result> findPage(@Parameter(description ="分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description ="当前页数") @RequestParam(defaultValue = "1", value = "current") int current,@ModelAttribute LazyNettyServerPropertiesQueryListCommand lazyNettyServerPropertiesQueryListCommand){ + return lazyNettyServerPropertiesApplication.findPage(size,current,lazyNettyServerPropertiesQueryListCommand); + } + /** + * describe 删除服务端配置信息 + * + * @param lazyNettyServerPropertiesRemoveCommand 删除服务端配置信息 + * @return {@link Result} 服务端配置信息 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Operation(summary = "删除服务端配置信息") + @DeleteMapping("/remove") + public Result remove(@ModelAttribute LazyNettyServerPropertiesRemoveCommand lazyNettyServerPropertiesRemoveCommand){ + return lazyNettyServerPropertiesApplication.remove(lazyNettyServerPropertiesRemoveCommand); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/domain/model/lazy/netty/server/properties/LazyNettyServerProperties.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/domain/model/lazy/netty/server/properties/LazyNettyServerProperties.java new file mode 100644 index 00000000..bb88a2bf --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/domain/model/lazy/netty/server/properties/LazyNettyServerProperties.java @@ -0,0 +1,76 @@ +package org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; + +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Integer; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_properties",description = "服务端配置信息") +public class LazyNettyServerProperties { + + + /** + * + * 客户身份ID + */ + @Schema(description ="客户身份ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 状态(on_line、off_line) + */ + @Schema(description ="状态(on_line、off_line)",name ="connectStatus",example = "") + private NettyClientStatus connectStatus; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + + /** + * + * 服务端host + */ + @Schema(description ="服务端host",name ="inetHost",example = "") + private String inetHost; + + /** + * + * 服务端端口 + */ + @Schema(description ="服务端端口",name ="inetPort",example = "") + private Integer inetPort; + + + /** + * + * 类型(配置、DB) + */ + @Schema(description ="类型(配置、DB)",name ="type",example = "") + private PropertiesType type; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/domain/model/lazy/netty/server/properties/LazyNettyServerPropertiesRepository.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/domain/model/lazy/netty/server/properties/LazyNettyServerPropertiesRepository.java new file mode 100644 index 00000000..b7b47bf0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/domain/model/lazy/netty/server/properties/LazyNettyServerPropertiesRepository.java @@ -0,0 +1,118 @@ +package org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties; + +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import java.util.List; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository + **/ + +public interface LazyNettyServerPropertiesRepository { + + + /** + * describe 新增服务端配置信息 + * + * @param lazyNettyServerProperties 新增服务端配置信息 + * @return {@link Result} 服务端配置信息新增后领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result story(LazyNettyServerProperties lazyNettyServerProperties); + + /** + * describe 批量新增服务端配置信息 + * + * @param lazyNettyServerPropertiesList 批量新增服务端配置信息 + * @return {@link Result>} 服务端配置信息新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result> batchStory(List lazyNettyServerPropertiesList); + + /** + * describe 查询单个服务端配置信息 + * + * @param lazyNettyServerProperties 查询单个服务端配置信息 + * @return {@link Result} 服务端配置信息DTO对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result findOne(LazyNettyServerProperties lazyNettyServerProperties); + + /** + * describe 查询多个服务端配置信息 + * + * @param lazyNettyServerProperties 查询多个服务端配置信息 + * @return {@link Result>} 服务端配置信息DTO对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result> findList(LazyNettyServerProperties lazyNettyServerProperties); + + /** + * describe 分页查询多个服务端配置信息 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyServerProperties 分页查询多个服务端配置信息 + * @return {@link Result>} 分页服务端配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result> findPage(int size,int current,LazyNettyServerProperties lazyNettyServerProperties); + + /** + * describe 删除服务端配置信息 + * + * @param lazyNettyServerProperties 删除服务端配置信息 + * @return {@link Result} 服务端配置信息 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result remove(LazyNettyServerProperties lazyNettyServerProperties); + + /** + * describe 是否存在服务端配置信息 + * + * @param lazyNettyServerProperties 是否存在服务端配置信息 + * @return {@link Result} 服务端配置信息是否存在 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + Result exists(LazyNettyServerProperties lazyNettyServerProperties); + + /** + * 客户端连接服务端状态在线 + * @param lazyNettyServerProperties 数据 + */ + void onLine(LazyNettyServerProperties lazyNettyServerProperties); + + /** + * 推送客户端离线 + * @param lazyNettyServerProperties 数据 + */ + void offLine(LazyNettyServerProperties lazyNettyServerProperties); + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/converter/LazyNettyServerPropertiesConverter.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/converter/LazyNettyServerPropertiesConverter.java new file mode 100644 index 00000000..84667c84 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/converter/LazyNettyServerPropertiesConverter.java @@ -0,0 +1,48 @@ +package org.framework.smart.agent.network.heartbeat.client.infrastructure.converter; + +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import org.framework.smart.agent.network.heartbeat.client.infrastructure.entity.LazyNettyServerPropertiesDO; +import org.mapstruct.factory.Mappers; +import org.mapstruct.Mapper; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface LazyNettyServerPropertiesConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + + + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerPropertiesConverter INSTANCE = Mappers.getMapper(LazyNettyServerPropertiesConverter.class); + /** + * describe 实体对象 转换成领域对象 + * + * @param lazyNettyServerPropertiesDO 服务端配置信息实体对象 + * @return {@link LazyNettyServerProperties} 服务端配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerProperties toLazyNettyServerProperties(LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO); + /** + * describe 领域对象 转换成实体对象 + * + * @param lazyNettyServerProperties 服务端配置信息领域对象 + * @return {@link LazyNettyServerPropertiesDO} 服务端配置信息实体对象 + + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + LazyNettyServerPropertiesDO fromLazyNettyServerProperties(LazyNettyServerProperties lazyNettyServerProperties); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/entity/LazyNettyServerPropertiesDO.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/entity/LazyNettyServerPropertiesDO.java new file mode 100644 index 00000000..bbedd1bb --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/entity/LazyNettyServerPropertiesDO.java @@ -0,0 +1,97 @@ +package org.framework.smart.agent.network.heartbeat.client.infrastructure.entity; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; +import org.wu.framework.lazy.orm.core.stereotype.LazyTableIndex; +import org.wu.framework.core.stereotype.LayerField; +import org.wu.framework.core.stereotype.LayerField.LayerFieldType; +import org.wu.framework.lazy.orm.core.stereotype.LazyTable; +import org.wu.framework.lazy.orm.core.stereotype.LazyTableField; +import org.wu.framework.lazy.orm.core.stereotype.*; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Integer; +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "lazy_netty_server_properties",comment = "服务端配置信息") +@Schema(title = "lazy_netty_server_properties",description = "服务端配置信息") +public class LazyNettyServerPropertiesDO { + + + /** + * + * 客户身份ID + */ + @Schema(description ="客户身份ID",name ="clientId",example = "") + @LazyTableFieldUnique(name="client_id",comment="客户身份ID",columnType="varchar(255)") + private String clientId; + + /** + * + * 状态(on_line、off_line) + */ + @Schema(description ="状态(on_line、off_line)",name ="connectStatus",example = "") + @LazyTableField(name="connect_status",comment="状态(on_line、off_line)",columnType="varchar(255)") + private NettyClientStatus connectStatus; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + @LazyTableField(name="create_time",comment="创建时间") + private LocalDateTime createTime; + + + /** + * + * 服务端host + */ + @Schema(description ="服务端host",name ="inetHost",example = "") + @LazyTableFieldUnique(name="inet_host",comment="服务端host",columnType="varchar(255)") + private String inetHost; + + /** + * + * 服务端端口 + */ + @Schema(description ="服务端端口",name ="inetPort",example = "") + @LazyTableFieldUnique(name="inet_port",comment="服务端端口",columnType="int") + private Integer inetPort; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + @LazyTableField(name="is_deleted",comment="是否删除") + private Boolean isDeleted; + + /** + * + * 类型(配置、DB) + */ + @Schema(description ="类型(配置、DB)",name ="type",example = "") + @LazyTableField(name="type",comment="类型(配置、DB)",columnType="varchar(255)") + private PropertiesType type; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + @LazyTableField(name="update_time",comment="更新时间") + private LocalDateTime updateTime; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/mapper/LazyNettyServerPropertiesMapper.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/mapper/LazyNettyServerPropertiesMapper.java new file mode 100644 index 00000000..016189d3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/mapper/LazyNettyServerPropertiesMapper.java @@ -0,0 +1,15 @@ +package org.framework.smart.agent.network.heartbeat.client.infrastructure.mapper; + +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyNettyServerPropertiesMapper { + + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/persistence/LazyNettyServerPropertiesRepositoryImpl.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/persistence/LazyNettyServerPropertiesRepositoryImpl.java new file mode 100644 index 00000000..ecc50495 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/persistence/LazyNettyServerPropertiesRepositoryImpl.java @@ -0,0 +1,213 @@ +package org.framework.smart.agent.network.heartbeat.client.infrastructure.persistence; + +import org.framework.smart.agent.network.heartbeat.client.config.PropertiesType; +import org.framework.smart.agent.network.heartbeat.client.infrastructure.entity.LazyNettyServerPropertiesDO; +import org.framework.smart.agent.network.heartbeat.client.infrastructure.converter.LazyNettyServerPropertiesConverter; +import org.framework.smart.agent.network.heartbeat.client.infrastructure.mapper.LazyNettyServerPropertiesMapper; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerPropertiesRepository; +import org.springframework.stereotype.Repository; + +import java.util.stream.Collectors; + +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; + +import java.util.List; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; + +/** + * describe 服务端配置信息 + * + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class LazyNettyServerPropertiesRepositoryImpl implements LazyNettyServerPropertiesRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增服务端配置信息 + * + * @param lazyNettyServerProperties 新增服务端配置信息 + * @return {@link Result} 服务端配置信息新增后领域对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result story(LazyNettyServerProperties lazyNettyServerProperties) { + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = LazyNettyServerPropertiesConverter.INSTANCE.fromLazyNettyServerProperties(lazyNettyServerProperties); + String inetHost = lazyNettyServerPropertiesDO.getInetHost(); + Integer inetPort = lazyNettyServerPropertiesDO.getInetPort(); + String clientId = lazyNettyServerPropertiesDO.getClientId(); + lazyNettyServerPropertiesDO.setIsDeleted(false); + + // 查询 ip、端口、客户端 + boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapper() + .eq(LazyNettyServerPropertiesDO::getInetHost, inetHost) + .eq(LazyNettyServerPropertiesDO::getInetPort, inetPort) + .eq(LazyNettyServerPropertiesDO::getClientId, clientId) + ); + if (exists) { + // 更新 + lazyLambdaStream.update(lazyNettyServerPropertiesDO, LazyWrappers.lambdaWrapper() + .eq(LazyNettyServerPropertiesDO::getInetHost, inetHost) + .eq(LazyNettyServerPropertiesDO::getInetPort, inetPort) + .eq(LazyNettyServerPropertiesDO::getClientId, clientId) + ); + } else { + lazyLambdaStream.insert(lazyNettyServerPropertiesDO); + } + + return ResultFactory.successOf(); + } + + /** + * describe 批量新增服务端配置信息 + * + * @param lazyNettyServerPropertiesList 批量新增服务端配置信息 + * @return {@link Result>} 服务端配置信息新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyServerPropertiesList) { + List lazyNettyServerPropertiesDOList = lazyNettyServerPropertiesList.stream().map(LazyNettyServerPropertiesConverter.INSTANCE::fromLazyNettyServerProperties).collect(Collectors.toList()); + lazyLambdaStream.upsert(lazyNettyServerPropertiesDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个服务端配置信息 + * + * @param lazyNettyServerProperties 查询单个服务端配置信息 + * @return {@link Result} 服务端配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result findOne(LazyNettyServerProperties lazyNettyServerProperties) { + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = LazyNettyServerPropertiesConverter.INSTANCE.fromLazyNettyServerProperties(lazyNettyServerProperties); + LazyNettyServerProperties lazyNettyServerPropertiesOne = lazyLambdaStream + .selectOne( + LazyWrappers.lambdaWrapperBean(lazyNettyServerPropertiesDO) + .eq(LazyNettyServerPropertiesDO::getIsDeleted,false) + , LazyNettyServerProperties.class); + return ResultFactory.successOf(lazyNettyServerPropertiesOne); + } + + /** + * describe 查询多个服务端配置信息 + * + * @param lazyNettyServerProperties 查询多个服务端配置信息 + * @return {@link Result>} 服务端配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result> findList(LazyNettyServerProperties lazyNettyServerProperties) { + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = LazyNettyServerPropertiesConverter.INSTANCE.fromLazyNettyServerProperties(lazyNettyServerProperties); + List lazyNettyServerPropertiesList = lazyLambdaStream.selectList( + LazyWrappers.lambdaWrapperBean(lazyNettyServerPropertiesDO) + .eq(LazyNettyServerPropertiesDO::getIsDeleted, false) + , LazyNettyServerProperties.class); + return ResultFactory.successOf(lazyNettyServerPropertiesList); + } + + /** + * describe 分页查询多个服务端配置信息 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyServerProperties 分页查询多个服务端配置信息 + * @return {@link Result>} 分页服务端配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyServerProperties lazyNettyServerProperties) { + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = LazyNettyServerPropertiesConverter.INSTANCE.fromLazyNettyServerProperties(lazyNettyServerProperties); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage lazyNettyServerPropertiesLazyPage = lazyLambdaStream.selectPage( + LazyWrappers + .lambdaWrapperBean(lazyNettyServerPropertiesDO) + .eq(LazyNettyServerPropertiesDO::getIsDeleted, false) + , lazyPage, LazyNettyServerProperties.class); + return ResultFactory.successOf(lazyNettyServerPropertiesLazyPage); + } + + /** + * describe 删除服务端配置信息 + * + * @param lazyNettyServerProperties 删除服务端配置信息 + * @return {@link Result} 服务端配置信息 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result remove(LazyNettyServerProperties lazyNettyServerProperties) { + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = LazyNettyServerPropertiesConverter.INSTANCE.fromLazyNettyServerProperties(lazyNettyServerProperties); + lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyNettyServerPropertiesDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在服务端配置信息 + * + * @param lazyNettyServerProperties 服务端配置信息领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + * @author Jia wei Wu + * @date 2024/04/03 03:00 下午 + **/ + + @Override + public Result exists(LazyNettyServerProperties lazyNettyServerProperties) { + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = LazyNettyServerPropertiesConverter.INSTANCE.fromLazyNettyServerProperties(lazyNettyServerProperties); + Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyNettyServerPropertiesDO)); + return ResultFactory.successOf(exists); + } + + /** + * 客户端连接服务端状态在线 + * + * @param lazyNettyServerProperties 数据 + */ + @Override + public void onLine(LazyNettyServerProperties lazyNettyServerProperties) { + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = LazyNettyServerPropertiesConverter.INSTANCE.fromLazyNettyServerProperties(lazyNettyServerProperties); + lazyLambdaStream.update(lazyNettyServerPropertiesDO,LazyWrappers.lambdaWrapper() + .eq(LazyNettyServerPropertiesDO::getInetPort,lazyNettyServerPropertiesDO.getInetPort()) + .eq(LazyNettyServerPropertiesDO::getInetHost,lazyNettyServerPropertiesDO.getInetHost()) + .eq(LazyNettyServerPropertiesDO::getClientId,lazyNettyServerPropertiesDO.getClientId()) + ); + + } + + /** + * 推送客户端离线 + * + * @param lazyNettyServerProperties 数据 + */ + @Override + public void offLine(LazyNettyServerProperties lazyNettyServerProperties) { + LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = LazyNettyServerPropertiesConverter.INSTANCE.fromLazyNettyServerProperties(lazyNettyServerProperties); + lazyLambdaStream.update(lazyNettyServerPropertiesDO,LazyWrappers.lambdaWrapper() + .eq(LazyNettyServerPropertiesDO::getInetPort,lazyNettyServerPropertiesDO.getInetPort()) + .eq(LazyNettyServerPropertiesDO::getInetHost,lazyNettyServerPropertiesDO.getInetHost()) + .eq(LazyNettyServerPropertiesDO::getClientId,lazyNettyServerPropertiesDO.getClientId()) + ); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/xml/LazyNettyServerPropertiesMapper.xml b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/xml/LazyNettyServerPropertiesMapper.xml new file mode 100644 index 00000000..054f0737 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/infrastructure/xml/LazyNettyServerPropertiesMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleChannelHeartbeatTypeAdvanced.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleChannelHeartbeatTypeAdvanced.java new file mode 100644 index 00000000..4d8ed2b3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleChannelHeartbeatTypeAdvanced.java @@ -0,0 +1,29 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + + +import io.netty.channel.Channel; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelHeartbeatTypeAdvanced; + + +/** + * 服务端 处理客户端心跳 + * TYPE_HEARTBEAT + */ +public class ClientHandleChannelHeartbeatTypeAdvanced extends AbstractHandleChannelHeartbeatTypeAdvanced { + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + public void doHandler(Channel channel, NettyProxyMsg msg) { + NettyProxyMsg hb = new NettyProxyMsg(); + hb.setType(MessageType.TYPE_HEARTBEAT); +// channel.writeAndFlush(hb); + } + +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientMessageTypeAdvanced.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientMessageTypeAdvanced.java new file mode 100644 index 00000000..91273859 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientMessageTypeAdvanced.java @@ -0,0 +1,26 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeSingleClientMessageTypeAdvanced; + +/** + * 接收服务端发送过来的聊天信息 + */ +@Slf4j +public class ClientHandleDistributeSingleClientMessageTypeAdvanced extends AbstractHandleDistributeSingleClientMessageTypeAdvanced { + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + byte[] clientId = nettyProxyMsg.getClientId(); + byte[] data = nettyProxyMsg.getData(); + log.info("接收客户端:{},发送过来的聊天信息:{}", new String(clientId), new String(data)); + + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced.java new file mode 100644 index 00000000..cc3da62f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced.java @@ -0,0 +1,29 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelOption; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyRealIdContext; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced; + +@Slf4j +public class ClientHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced extends AbstractHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced { + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + // 获取访客ID + byte[] visitorId = nettyProxyMsg.getVisitorId(); + // 获取访客对应的真实代理通道 + Channel realChannel = NettyRealIdContext.getReal(visitorId); + if (realChannel != null) { + realChannel.config().setOption(ChannelOption.AUTO_READ, true); + } + + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealCloseVisitorTypeAdvanced.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealCloseVisitorTypeAdvanced.java new file mode 100644 index 00000000..93869ba5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealCloseVisitorTypeAdvanced.java @@ -0,0 +1,26 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.NettyCommunicationIdContext; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyRealIdContext; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced; + +@Slf4j +public class ClientHandleDistributeSingleClientRealCloseVisitorTypeAdvanced extends AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced { + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + // 关闭代理的真实通道 + byte[] visitorId = nettyProxyMsg.getVisitorId(); + NettyRealIdContext.clear(visitorId); + NettyCommunicationIdContext.clear(visitorId); + + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealConnectTypeAdvanced.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealConnectTypeAdvanced.java new file mode 100644 index 00000000..61a89050 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealConnectTypeAdvanced.java @@ -0,0 +1,56 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.config.NettyClientProperties; +import org.framework.smart.agent.network.heartbeat.client.netty.socket.NettyClientRealSocket; +import org.framework.smart.agent.network.heartbeat.common.InternalNetworkPenetrationRealClient; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeSingleClientRealConnectTypeAdvanced; + +import java.util.List; + +/** + * 客户端创建真实代理同奥 + */ +@Slf4j +public class ClientHandleDistributeSingleClientRealConnectTypeAdvanced extends AbstractHandleDistributeSingleClientRealConnectTypeAdvanced { + + private final NettyClientProperties nettyClientProperties;// 服务端地址信息 + private final List handleChannelTypeAdvancedList; + + public ClientHandleDistributeSingleClientRealConnectTypeAdvanced(NettyClientProperties nettyClientProperties, List handleChannelTypeAdvancedList) { + this.nettyClientProperties = nettyClientProperties; + this.handleChannelTypeAdvancedList = handleChannelTypeAdvancedList; + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg msg) { + // 创建真实端口监听 + byte[] clientIdBytes = msg.getClientId(); + byte[] visitorPort = msg.getVisitorPort(); + byte[] clientTargetIp = msg.getClientTargetIp(); + byte[] clientTargetPort = msg.getClientTargetPort(); + byte[] visitorIdBytes = msg.getVisitorId(); + InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient = + InternalNetworkPenetrationRealClient + .builder() + .clientId(new String(clientIdBytes)) + .visitorPort(Integer.valueOf(new String(visitorPort))) + .clientTargetIp(new String(clientTargetIp)) + .clientTargetPort(Integer.valueOf(new String(clientTargetPort))) + .visitorId(new String(visitorIdBytes)) + .build(); + + // 绑定真实服务端口 + NettyClientRealSocket.buildRealServer(internalNetworkPenetrationRealClient, nettyClientProperties, handleChannelTypeAdvancedList); + + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientReportHandleChannelTransferTypeAdvancedHandleDistribute.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientReportHandleChannelTransferTypeAdvancedHandleDistribute.java new file mode 100644 index 00000000..d5d76fe4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/ClientReportHandleChannelTransferTypeAdvancedHandleDistribute.java @@ -0,0 +1,58 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.config.NettyClientProperties; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyRealIdContext; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeChannelTransferTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 服务端处理客户端数据传输 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_TRANSFER + */ +@Slf4j +public class ClientReportHandleChannelTransferTypeAdvancedHandleDistribute extends AbstractHandleDistributeChannelTransferTypeAdvanced { + + private final NettyClientProperties nettyClientProperties; + + public ClientReportHandleChannelTransferTypeAdvancedHandleDistribute(NettyClientProperties nettyClientProperties) { + this.nettyClientProperties = nettyClientProperties; + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + public void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + log.debug("接收到服务端需要内网穿透的数据:{}" , nettyProxyMsg); + String clientId = nettyClientProperties.getClientId(); + byte[] visitorPort = nettyProxyMsg.getVisitorPort(); + byte[] clientTargetIp = nettyProxyMsg.getClientTargetIp(); + byte[] clientTargetPort = nettyProxyMsg.getClientTargetPort(); + byte[] visitorId = nettyProxyMsg.getVisitorId(); + // 真实服务通道 + Channel realChannel = NettyRealIdContext.getReal(new String(visitorId)); + if (realChannel == null) { + log.error("无法获取访客:{} 真实服务", new String(visitorId)); + return; + } + + + // 把数据转到真实服务 + ByteBuf buf = channel.config().getAllocator().buffer(nettyProxyMsg.getData().length); + buf.writeBytes(nettyProxyMsg.getData()); + + realChannel.writeAndFlush(buf); + + } + +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleClientChannelActiveAdvanced.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleClientChannelActiveAdvanced.java new file mode 100644 index 00000000..f7cff39f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleClientChannelActiveAdvanced.java @@ -0,0 +1,34 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + +import io.netty.channel.Channel; +import org.framework.smart.agent.network.heartbeat.client.config.NettyClientProperties; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleClientChannelActiveAdvanced; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +/** + * 客户端通道 is active + */ +public class HandleClientChannelActiveAdvanced extends AbstractHandleClientChannelActiveAdvanced { + private final NettyClientProperties nettyClientProperties; + + public HandleClientChannelActiveAdvanced(NettyClientProperties nettyClientProperties) { + this.nettyClientProperties = nettyClientProperties; + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + // 缓存当前通道 + byte[] clientIdByte = nettyProxyMsg.getClientId(); + String clientId = new String(clientIdByte); + ChannelContext.push(channel, clientId); + ChannelAttributeKeyUtils.buildClientId(channel, clientId); + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeConnectSuccessNotificationTypeAdvancedHandle.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeConnectSuccessNotificationTypeAdvancedHandle.java new file mode 100644 index 00000000..6782c374 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeConnectSuccessNotificationTypeAdvancedHandle.java @@ -0,0 +1,44 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + +import com.alibaba.fastjson.JSONObject; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle; + +import java.util.List; + +/** + * 客户端连接成功通知 + */ +@Slf4j +public class HandleDistributeConnectSuccessNotificationTypeAdvancedHandle extends AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle { + + private final ClientChangeEvent clientChangeEvent; + + + public HandleDistributeConnectSuccessNotificationTypeAdvancedHandle(ClientChangeEvent clientChangeEvent) { + this.clientChangeEvent = clientChangeEvent; + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg msg) { + // 客户端ID:{},客户端:{}连接成功 + log.warn("Client ID: {}, Client Data : {} Connection successful", new String(msg.getClientId()), new String(msg.getData())); + + + // 存储其他客户端状态 + List clientIdList = JSONObject.parseArray(new String(msg.getData()), String.class); + for (String tenantId : clientIdList) { + clientChangeEvent.clientOnLine(tenantId); + } + + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeDisconnectTypeAdvancedHandle.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeDisconnectTypeAdvancedHandle.java new file mode 100644 index 00000000..d81e780f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeDisconnectTypeAdvancedHandle.java @@ -0,0 +1,43 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeDisconnectTypeAdvancedHandle; + + +/** + * 服务端处理客户端断开连接处理 + * TYPE_DISCONNECT + */ +@Slf4j +public class HandleDistributeDisconnectTypeAdvancedHandle extends AbstractHandleDistributeDisconnectTypeAdvancedHandle { + + + private final ClientChangeEvent clientChangeEvent; + + public HandleDistributeDisconnectTypeAdvancedHandle(ClientChangeEvent clientChangeEvent) { + this.clientChangeEvent = clientChangeEvent; + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + public void doHandler(Channel channel, NettyProxyMsg msg) { + // 服务下线 + byte[] data = msg.getData(); + byte[] clientId = msg.getClientId(); + String tenantId = new String(clientId); + //客户端:{}下线 + log.warn("Client: {} Offline", tenantId); + clientChangeEvent.clientOffLine(tenantId); + + } + +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeStagingClosedTypeAdvanced.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeStagingClosedTypeAdvanced.java new file mode 100644 index 00000000..49085dd5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeStagingClosedTypeAdvanced.java @@ -0,0 +1,30 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeStagingClosedTypeAdvanced; + +/** + * 服务端下发暂存关闭消息处理 + */ +@Slf4j +public class HandleDistributeStagingClosedTypeAdvanced extends AbstractHandleDistributeStagingClosedTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg msg) { + String clientId = new String(msg.getClientId()); + log.info("客户端:{}离线暂存关闭", clientId); + // 修改redis 客户端暂存状态 +// String stagingStatusKey = StagingConfigKeyConstant.getStagingStatusKey(clientId); +// stringRedisTemplate.opsForValue().set(stagingStatusKey, StagingStatus.CLOSED.name()); + + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeStagingOpenedTypeAdvanced.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeStagingOpenedTypeAdvanced.java new file mode 100644 index 00000000..514a33a5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/advanced/HandleDistributeStagingOpenedTypeAdvanced.java @@ -0,0 +1,34 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.AbstractHandleDistributeStagingOpenedTypeAdvanced; + +/** + * 服务端下发暂存开启消息处理 + */ +@Slf4j +public class HandleDistributeStagingOpenedTypeAdvanced extends AbstractHandleDistributeStagingOpenedTypeAdvanced { + + + public HandleDistributeStagingOpenedTypeAdvanced() { + + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg msg) { + String clientId = new String(msg.getClientId()); + //客户端:{}离线暂存开启 + log.warn("Client: {} Offline temporary storage enabled", new String(msg.getClientId())); + // 修改redis 客户端暂存状态 +// String stagingStatusKey = StagingConfigKeyConstant.getStagingStatusKey(clientId); +// stringRedisTemplate.opsForValue().set(stagingStatusKey, StagingStatus.OPENED.name()); + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/event/ClientChangeEvent.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/event/ClientChangeEvent.java new file mode 100644 index 00000000..b4249aea --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/event/ClientChangeEvent.java @@ -0,0 +1,52 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.event; + +/** + * 客户端状态变更事件 + */ +public interface ClientChangeEvent { + + + /** + * 推送客户端在线 + */ + void clientOnLine(String clientId); + + /** + * 推送客户端在线 + * @param clientId 客户端 + * @param inetHost 服务端ip + * @param inetPort 服务端端口 + * @param serverId 服务端ID + */ + void clientOnLine(String inetHost, int inetPort,String serverId ,String clientId); + + /** + * 推送客户端离线 + */ + void clientOffLine(String clientId); + + /** + * 推送客户端离线 + * + * @param inetHost 服务端ip + * @param inetPort 服务端端口 + * @param serverId 服务端ID + * @param clientId 客户端 + */ + void clientOffLine(String inetHost, int inetPort,String serverId,String clientId); + + /** + * 暂存开启 + * + * @param clientId 租户ID + */ + void stagingOpen(String clientId); + + + /** + * 暂存关闭 + * + * @param clientId 客户端ID 对应的租户 + */ + void stagingClose(String clientId); +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/event/DefaultClientChangeEventImpl.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/event/DefaultClientChangeEventImpl.java new file mode 100644 index 00000000..b817998f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/event/DefaultClientChangeEventImpl.java @@ -0,0 +1,131 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.event; + + +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerPropertiesRepository; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class DefaultClientChangeEventImpl implements ClientChangeEvent { + + + @Resource + private LazyNettyServerPropertiesRepository lazyNettyServerPropertiesRepository; + + +// private final StringRedisTemplate stringRedisTemplate; +// private final RedisProviderTemplate redisProviderTemplate; +// +// public DefaultClientChangeEvent1Impl(StringRedisTemplate stringRedisTemplate, RedisProviderTemplate redisProviderTemplate) { +// this.stringRedisTemplate = stringRedisTemplate; +// this.redisProviderTemplate = redisProviderTemplate; +// } + + + /** + * 推送客户端在线 + */ + @Override + public void clientOnLine(String clientId) { +// // 获取当前客户端ID +// if (ObjectUtils.isEmpty(clientId)) { +// clientId = stringRedisTemplate.opsForValue().get(ClientConfigKeyUtils.CLIENT_ID_KEY); +// } +// String clientStatusKey = ClientConfigKeyUtils.getClientStatusKey(clientId); +// // 如果可以已经在线状态不推送 +// stringRedisTemplate.opsForValue().set(clientStatusKey, NettyClientStatus.ON_LINE.name()); +// ClientOnLineState clientOnLineState = new ClientOnLineState(); +// clientOnLineState.setClientId(clientId); +// clientOnLineState.setOnLineState(NettyClientStatus.ON_LINE.name()); +// // 暂存扫描触发 +// redisProviderTemplate.send(RedisChannelConstant.REDIS_CLIENT_ONLINE_OR_OFFLINE_CHANNEL,clientOnLineState); + + } + + /** + * 推送客户端在线 + * + * @param inetHost 服务端ip + * @param inetPort 服务端端口 + * @param serverId 服务端ID + * @param clientId 客户端 + */ + @Override + public void clientOnLine(String inetHost, int inetPort, String serverId, String clientId) { + LazyNettyServerProperties lazyNettyServerProperties = new LazyNettyServerProperties(); + lazyNettyServerProperties.setClientId(clientId); + lazyNettyServerProperties.setInetHost(inetHost); + lazyNettyServerProperties.setInetPort(inetPort); + lazyNettyServerProperties.setConnectStatus(NettyClientStatus.ON_LINE); + lazyNettyServerPropertiesRepository.onLine(lazyNettyServerProperties); + // 更改状态未在线 + clientOnLine(clientId); + } + + + /** + * 推送客户端离线 + */ + @Override + public void clientOffLine(String clientId) { +// if (ObjectUtils.isEmpty(clientId)) { +// clientId = stringRedisTemplate.opsForValue().get(ClientConfigKeyUtils.CLIENT_ID_KEY); +// } +// String clientStatusKey = ClientConfigKeyUtils.getClientStatusKey(clientId); +// // 离线状态 +// stringRedisTemplate.opsForValue().set(clientStatusKey, NettyClientStatus.OFF_LINE.name()); +// // 暂存状态 +// stagingOpen(clientId); +// // 暂存扫描触发 +// ClientOnLineState clientOnLineState = new ClientOnLineState(); +// clientOnLineState.setClientId(clientId); +// clientOnLineState.setOnLineState(NettyClientStatus.OFF_LINE.name()); +// redisProviderTemplate.send(RedisChannelConstant.REDIS_CLIENT_ONLINE_OR_OFFLINE_CHANNEL,clientOnLineState); + } + + /** + * 推送客户端离线 + * + * @param inetHost 服务端ip + * @param inetPort 服务端端口 + * @param serverId + * @param clientId 客户端 + */ + @Override + public void clientOffLine(String inetHost, int inetPort, String serverId, String clientId) { + LazyNettyServerProperties lazyNettyServerProperties = new LazyNettyServerProperties(); + lazyNettyServerProperties.setClientId(clientId); + lazyNettyServerProperties.setInetHost(inetHost); + lazyNettyServerProperties.setInetPort(inetPort); + lazyNettyServerProperties.setConnectStatus(NettyClientStatus.OFF_LINE); + lazyNettyServerPropertiesRepository.offLine(lazyNettyServerProperties); + clientOffLine(clientId); + } + + @Override + public void stagingOpen(String clientId) { +// String stagingStatusKey = StagingConfigKeyConstant.getStagingStatusKey(clientId); +// stringRedisTemplate.opsForValue().set(stagingStatusKey, StagingStatus.OPENED.name()); + + } + + /** + * 暂存关闭 + * + * @param clientId 租户ID + */ + @Override + public void stagingClose(String clientId) { +// if (clientId == null) { +// clientId = stringRedisTemplate.opsForValue().get(ClientConfigKeyUtils.CLIENT_ID_KEY); +// } +// String stagingStatusKey = StagingConfigKeyConstant.getStagingStatusKey(clientId); +// stringRedisTemplate.opsForValue().set(stagingStatusKey, StagingStatus.CLOSED.name()); + + } + +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientFilter.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientFilter.java new file mode 100644 index 00000000..a5f57688 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientFilter.java @@ -0,0 +1,45 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.filter; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.handler.timeout.IdleStateHandler; +import org.framework.smart.agent.network.heartbeat.client.netty.handler.NettyClientHandler; +import org.framework.smart.agent.network.heartbeat.client.netty.socket.NettyClientSocket; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.smart.agent.network.heartbeat.common.decoder.NettyProxyMsgDecoder; +import org.framework.smart.agent.network.heartbeat.common.encoder.NettyProxyMsgEncoder; + +public class NettyClientFilter extends ChannelInitializer { + + + private final ChannelTypeAdapter channelTypeAdapter; + private final NettyClientSocket nettyClientSocket; + + public NettyClientFilter(ChannelTypeAdapter channelTypeAdapter, NettyClientSocket nettyClientSocket) { + this.channelTypeAdapter = channelTypeAdapter; + this.nettyClientSocket = nettyClientSocket; + } + + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + + /* * 解码和编码,应和服务端一致 * */ +// pipeline.addLast(new NettyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); +// pipeline.addLast(new NettMsgEncoder()); + // 解码、编码 + pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); + pipeline.addLast(new NettyProxyMsgEncoder()); +// pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); + //入参说明: 读超时时间、写超时时间、所有类型的超时时间、时间格式 + //因为服务端设置的超时时间是5秒,所以设置4秒 + + pipeline.addLast(new IdleStateHandler(0, 4, 0)); + pipeline.addLast("decoder", new StringDecoder()); + pipeline.addLast("encoder", new StringEncoder()); + pipeline.addLast("doHandler", new NettyClientHandler(channelTypeAdapter, nettyClientSocket)); //客户端的逻辑 + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientRealFilter.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientRealFilter.java new file mode 100644 index 00000000..dce60da9 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientRealFilter.java @@ -0,0 +1,30 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.filter; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import org.framework.smart.agent.network.heartbeat.client.netty.handler.NettyClientRealHandler; + +public class NettyClientRealFilter extends ChannelInitializer { + /** + * This method will be called once the {@link Channel} was registered. After the method returns this instance + * will be removed from the {@link ChannelPipeline} of the {@link Channel}. + * + * @param ch the {@link Channel} which was registered. + * @throws Exception is thrown if an error occurs. In that case it will be handled by + * {@link #exceptionCaught(ChannelHandlerContext, Throwable)} which will by default connectionClose + * the {@link Channel}. + */ + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast(new NettyClientRealHandler()); +// // 解码、编码 +// pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); +// pipeline.addLast(new NettMsgEncoder()); +// pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); +// pipeline.addLast(new NettyProxyMsgEncoder()); + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientVisitorRealFilter.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientVisitorRealFilter.java new file mode 100644 index 00000000..3df23738 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/filter/NettyClientVisitorRealFilter.java @@ -0,0 +1,42 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.filter; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import org.framework.smart.agent.network.heartbeat.client.netty.handler.NettyClientVisitorRealHandler; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.smart.agent.network.heartbeat.common.decoder.NettyProxyMsgDecoder; +import org.framework.smart.agent.network.heartbeat.common.encoder.NettyProxyMsgEncoder; + +/** + * netty 客户端连接真实服服务端访客拦截器 + */ +public class NettyClientVisitorRealFilter extends ChannelInitializer { + private final ChannelTypeAdapter channelTypeAdapter; + + public NettyClientVisitorRealFilter(ChannelTypeAdapter channelTypeAdapter) { + this.channelTypeAdapter = channelTypeAdapter; + } + + /** + * This method will be called once the {@link Channel} was registered. After the method returns this instance + * will be removed from the {@link ChannelPipeline} of the {@link Channel}. + * + * @param ch the {@link Channel} which was registered. + * @throws Exception is thrown if an error occurs. In that case it will be handled by + * {@link #exceptionCaught(ChannelHandlerContext, Throwable)} which will by default connectionClose + * the {@link Channel}. + */ + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); +// // 解码、编码 +// pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); +// pipeline.addLast(new NettMsgEncoder()); + pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); + pipeline.addLast(new NettyProxyMsgEncoder()); + pipeline.addLast(new NettyClientVisitorRealHandler(channelTypeAdapter)); + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/HeartBeatClientHandler.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/HeartBeatClientHandler.java new file mode 100644 index 00000000..b3d36194 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/HeartBeatClientHandler.java @@ -0,0 +1,24 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.handler; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; + +import java.util.Date; + +public class HeartBeatClientHandler extends ChannelInboundHandlerAdapter { + private final int lossConnectCount = 0; + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + System.out.println("客户端循环心跳监测发送: " + new Date()); + if (evt instanceof IdleStateEvent event) { + if (event.state() == IdleState.WRITER_IDLE) { + ctx.writeAndFlush("biubiu"); + } + + } + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientHandler.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientHandler.java new file mode 100644 index 00000000..555ccc25 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientHandler.java @@ -0,0 +1,121 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.handler; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.EventLoop; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.netty.socket.NettyClientSocket; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; + +import java.nio.charset.StandardCharsets; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +/** + * description + * + * @author 吴佳伟 + * @date 2023/09/13 10:29 + */ +@Slf4j +public class NettyClientHandler extends SimpleChannelInboundHandler { + + private final ChannelTypeAdapter channelTypeAdapter; + private final NettyClientSocket nettyClientSocket; + + + public NettyClientHandler(ChannelTypeAdapter channelTypeAdapter, NettyClientSocket nettyClientSocket) { + this.channelTypeAdapter = channelTypeAdapter; + this.nettyClientSocket = nettyClientSocket; + } + + /** + * @param ctx the {@link ChannelHandlerContext} which this {@link SimpleChannelInboundHandler} + * belongs to + * @param msg the message to handle + */ + @Override + protected void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg msg) { +// log.info("第" + count + "次" + ",客户端接受的消息:" + msg); +// log.info("第" + count + "次" + ",客户端接受的消息内容:" + new String(msg.getData())); +// count++; + // 接收服务端、或者是代理端的信息 + Channel channel = ctx.channel(); +// log.info("type:{},clientId:{},data:{}",msg.getMysqlType(),new String(msg.getClientId()),new String(msg.getData())); + channelTypeAdapter.handler(channel, msg); + } + + /** + * 建立连接时 + */ + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + // 建立连接时 + log.info("When establishing a connection:{}" , new Date()); + ctx.fireChannelActive(); + String clientId = nettyClientSocket.getClientId(); + // 处理客户端连接成功 + Channel channel = ctx.channel(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.CLIENT_CHANNEL_ACTIVE); + nettyMsg.setClientId(clientId); + channelTypeAdapter.handler(channel, nettyMsg); + + + } + + /** + * 关闭连接时 + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + //服务端主动关闭当前客户端连接时 + log.info("When the server actively closes the current client connection:{}" , new Date()); + final EventLoop eventLoop = ctx.channel().eventLoop(); + eventLoop.schedule(() -> { + try { + nettyClientSocket.newConnect2Server(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + }, 1L, TimeUnit.SECONDS); + + super.channelInactive(ctx); + } + + /** + * 心跳请求处理 * 每4秒发送一次心跳请求; * + */ + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object obj) throws Exception { + if (obj instanceof IdleStateEvent event) { + if (IdleState.WRITER_IDLE.equals(event.state())) { //如果写通道处于空闲状态,就发送心跳命令 + String clientId = nettyClientSocket.getClientId(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.TYPE_HEARTBEAT); + nettyMsg.setData(clientId.getBytes(StandardCharsets.UTF_8)); + nettyMsg.setClientId(clientId.getBytes(StandardCharsets.UTF_8)); + ctx.writeAndFlush(nettyMsg);// 发送心跳数据 + } else if (event.state() == IdleState.WRITER_IDLE) { // 如果检测到写空闲状态,关闭连接 + // 离线、暂存通知 + String clientId = nettyClientSocket.getClientId(); + Channel channel = ctx.channel(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION); + nettyMsg.setClientId(clientId.getBytes(StandardCharsets.UTF_8)); + channelTypeAdapter.handler(channel, nettyMsg); + ctx.close(); + } + + } else { + super.userEventTriggered(ctx, obj); + } + } + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientRealHandler.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientRealHandler.java new file mode 100644 index 00000000..61e9a574 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientRealHandler.java @@ -0,0 +1,85 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.handler; + + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyCommunicationIdContext; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +/** + * 来自客户端 真实服务器返回的数据请求 + */ +@Slf4j +public class NettyClientRealHandler extends SimpleChannelInboundHandler { + + @Override + public void channelRead0(ChannelHandlerContext ctx, ByteBuf buf) throws Exception { + + // 客户端发送真实数据到代理了 + byte[] bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + log.debug("接收客户端真实服务数据:{}", new String(bytes)); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + Integer visitorPort = ChannelAttributeKeyUtils.getVisitorPort(ctx.channel()); + String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel()); + // 访客通信通道 上报服务端代理完成 + Channel visitorChannel = NettyCommunicationIdContext.getVisitor(visitorId); + NettyProxyMsg returnMessage = new NettyProxyMsg(); + returnMessage.setType(MessageType.REPORT_CLIENT_TRANSFER); + returnMessage.setVisitorId(visitorId); + returnMessage.setClientId(clientId); + returnMessage.setVisitorPort(visitorPort); + returnMessage.setData(bytes); + + visitorChannel.writeAndFlush(returnMessage); + + + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel()); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + // 客户端真实通信通道 + Channel visitor = NettyCommunicationIdContext.getVisitor(visitorId); + if (visitor != null) { + // 上报关闭这个客户端的访客通道 + NettyProxyMsg closeVisitorMsg = new NettyProxyMsg(); + closeVisitorMsg.setType(MessageType.REPORT_SINGLE_CLIENT_CLOSE_VISITOR); + closeVisitorMsg.setVisitorId(visitorId); + visitor.writeAndFlush(closeVisitorMsg); + } + + super.channelInactive(ctx); + } + + @Override + public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception { +// String vid = ctx.channel().attr(Constant.VID).get(); +// if (StringUtil.isNullOrEmpty(vid)) { +// super.channelWritabilityChanged(ctx); +// return; +// } +// Channel proxyChannel = Constant.vpc.get(vid); +// if (proxyChannel != null) { +// proxyChannel.config().setOption(ChannelOption.AUTO_READ, ctx.channel().isWritable()); +// } + + super.channelWritabilityChanged(ctx); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + super.exceptionCaught(ctx, cause); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientVisitorRealHandler.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientVisitorRealHandler.java new file mode 100644 index 00000000..71c56a0a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/handler/NettyClientVisitorRealHandler.java @@ -0,0 +1,66 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.handler; + + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +/** + * 客户端访客通信通道 处理器 + */ +@Slf4j +public class NettyClientVisitorRealHandler extends SimpleChannelInboundHandler { + private final ChannelTypeAdapter channelTypeAdapter; + + public NettyClientVisitorRealHandler(ChannelTypeAdapter channelTypeAdapter) { + this.channelTypeAdapter = channelTypeAdapter; + } + + @Override + public void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyProxyMsg) throws Exception { + Channel channel = ctx.channel(); + channelTypeAdapter.handler(channel, nettyProxyMsg); + + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + + String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel()); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + // 关闭访客 + ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId); + if (clientChannel != null) { + Channel channel = clientChannel.getChannel(); + // 上报关闭这个客户端的访客通道 + NettyProxyMsg closeVisitorMsg = new NettyProxyMsg(); + closeVisitorMsg.setType(MessageType.REPORT_SINGLE_CLIENT_CLOSE_VISITOR); + closeVisitorMsg.setVisitorId(visitorId); + channel.writeAndFlush(closeVisitorMsg); + } + + super.channelInactive(ctx); + } + + @Override + public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception { + + super.channelWritabilityChanged(ctx); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + super.exceptionCaught(ctx, cause); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/listener/ClientStagingOpenedOrClosedListener.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/listener/ClientStagingOpenedOrClosedListener.java new file mode 100644 index 00000000..6df48a57 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/listener/ClientStagingOpenedOrClosedListener.java @@ -0,0 +1,53 @@ +//package org.framework.smart.agent.network.heartbeat.client.netty.listener; +// +// +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Component; +//import org.framework.smart.agent.network.heartbeat.client.netty.config.NettyClientProperties; +//import org.framework.smart.agent.network.heartbeat.client.rpc.StagingNoticeApiRpc; +//import org.framework.smart.agent.network.heartbeat.common.constant.RedisChannelConstant; +// +///** +// * 客户端暂存开启、关闭通知 +// * +// * @see RedisChannelConstant#REDIS_CLIENT_STAGING_OPENED_OR_CLOSED_CHANNEL +// */ +//@Slf4j +//@Component +//public class ClientStagingOpenedOrClosedListener { +// +// private final StagingNoticeApiRpc stagingNoticeApiRpc; +// private final NettyClientProperties nettyServerProperties; +// +// +// public ClientStagingOpenedOrClosedListener(StagingNoticeApiRpc stagingNoticeApiRpc, NettyClientProperties nettyServerProperties) { +// this.stagingNoticeApiRpc = stagingNoticeApiRpc; +// this.nettyServerProperties = nettyServerProperties; +// +// } +// +//// /** +//// * 使用redis监听注解监听数据 +//// * +//// * @param consumerRecord 客户端暂存开启、关闭通知 +//// */ +//// @EasyRedisListener(topics = RedisChannelConstant.REDIS_CLIENT_STAGING_OPENED_OR_CLOSED_CHANNEL) +//// public void subscription(ConsumerRecord consumerRecord, Acknowledgment acknowledgment) { +//// ClientStagingRedisChannelBo payload = consumerRecord.payload(); +//// String clientId = payload.getClientId(); +//// // 如果客户端ID为空默认当前客户端 +//// if (ObjectUtils.isEmpty(clientId)) { +//// clientId = nettyServerProperties.getClientId(); +//// } +//// StagingStatus stagingStatus = payload.getStagingStatus(); +//// log.info("客户端:【{}】暂存:【{}】通知", clientId, stagingStatus); +//// +//// +//// if (StagingStatus.OPENED.equals(stagingStatus)) { +//// stagingNoticeApiRpc.stagingOpened(clientId); +//// } else if (StagingStatus.CLOSED.equals(stagingStatus)) { +//// stagingNoticeApiRpc.stagingClosed(clientId); +//// } +//// acknowledgment.acknowledge(); +//// } +//} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/socket/NettyClientRealSocket.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/socket/NettyClientRealSocket.java new file mode 100644 index 00000000..00316e2e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/socket/NettyClientRealSocket.java @@ -0,0 +1,183 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.socket; + + +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.*; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioSocketChannel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.config.NettyClientProperties; +import org.framework.smart.agent.network.heartbeat.client.netty.filter.NettyClientRealFilter; +import org.framework.smart.agent.network.heartbeat.client.netty.filter.NettyClientVisitorRealFilter; +import org.framework.smart.agent.network.heartbeat.common.*; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * 客户端连接真实服务 + */ +@Slf4j +public class NettyClientRealSocket { + static EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); + + /** + * 连接真实服务 + * + * @param internalNetworkPenetrationRealClient 访客信息 + * @param nettyClientProperties 服务端地址信息 + */ + public static void buildRealServer(InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient, + NettyClientProperties nettyClientProperties, + List handleChannelTypeAdvancedList) { + + buildNewRealServer(internalNetworkPenetrationRealClient, nettyClientProperties, handleChannelTypeAdvancedList); + + } + + /** + * @param internalNetworkPenetrationRealClient 访客信息 + * @param nettyClientProperties 服务端地址信息 + */ + private static void buildNewRealServer(InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient, + NettyClientProperties nettyClientProperties, + List handleChannelTypeAdvancedList) { + try { + String clientId = internalNetworkPenetrationRealClient.getClientId(); + String clientTargetIp = internalNetworkPenetrationRealClient.getClientTargetIp(); + Integer clientTargetPort = internalNetworkPenetrationRealClient.getClientTargetPort(); + Integer visitorPort = internalNetworkPenetrationRealClient.getVisitorPort(); + String visitorId = internalNetworkPenetrationRealClient.getVisitorId(); + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class) + .handler(new NettyClientRealFilter()); + bootstrap.connect(clientTargetIp, clientTargetPort).addListener((ChannelFutureListener) future -> { + if (future.isSuccess()) { + // 客户端链接真实服务成功 设置自动读写false 等待访客连接成功后设置成true + Channel realChannel = future.channel(); + realChannel.config().setOption(ChannelOption.AUTO_READ, false); + + log.info("访客通过 客户端:【{}】,绑定本地服务,IP:{},端口:{} 新建通道成功", clientId, clientTargetIp, clientTargetPort); + // 客户端真实通道 + NettyRealIdContext.pushReal(realChannel, visitorId); + // 绑定访客ID到当前真实通道属性 + ChannelAttributeKeyUtils.buildVisitorId(realChannel, visitorId); + ChannelAttributeKeyUtils.buildClientId(realChannel, clientId); + ChannelAttributeKeyUtils.buildVisitorPort(realChannel, visitorPort); + // 通知服务端访客连接成功 + + + // 新建一个通道处理 + newVisitorConnect2Server(internalNetworkPenetrationRealClient, nettyClientProperties, handleChannelTypeAdvancedList); + + // 是否等 服务端相应访客通道已经可以自动读写 +// realChannel.config().setOption(ChannelOption.AUTO_READ, true); + // 模拟发送 + String byteData = "GET /swagger-ui/index.html HTTP/1.1\n" + + "Host: 127.0.0.1:19080\n" + + "Connection: keep-alive\n" + + "Cache-Control: max-age=0\n" + + "sec-ch-ua: \"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"\n" + + "sec-ch-ua-mobile: ?0\n" + + "sec-ch-ua-platform: \"macOS\"\n" + + "Upgrade-Insecure-Requests: 1\n" + + "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\n" + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\n" + + "Sec-Fetch-Site: none\n" + + "Sec-Fetch-Mode: navigate\n" + + "Sec-Fetch-User: ?1\n" + + "Sec-Fetch-Dest: document\n" + + "Accept-Encoding: gzip, deflate, br\n" + + "Accept-Language: zh-CN,zh;q=0.9\n" + + "Cookie: XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d; Hm_lvt_173e771eef816c412396d2cb4fe2d632=1703040917\n"; +// ChannelContext.ClientChannel clientChannel = ChannelContext.get(String.valueOf(visitorPort).getBytes(StandardCharsets.UTF_8)); +// Channel channel = clientChannel.getChannel(); +// channel.writeAndFlush(byteData.getBytes(StandardCharsets.UTF_8)); +// future.channel().attr(Constant.VID).set(internalNetworkPenetrationRealClient); +// Constant.vrc.put(internalNetworkPenetrationRealClient, future.channel()); +// ProxySocket.connectProxyServer(internalNetworkPenetrationRealClient); + } else { + log.error("客户:【{}】,无法连接当前网络内的目标IP:【{}】,目标端口:【{}】", clientId, clientTargetIp, clientTargetPort); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 创建访客连接服务端 + * + * @param internalNetworkPenetrationRealClient 内网穿透信息 + * @param nettyClientProperties 服务端配置信息 + * @param handleChannelTypeAdvancedList 处理器适配器 + * @throws InterruptedException 异常 + */ + protected static void newVisitorConnect2Server(InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient, + NettyClientProperties nettyClientProperties, + List handleChannelTypeAdvancedList) throws InterruptedException { + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(eventLoopGroup) + .channel(NioSocketChannel.class) + .handler(new NettyClientVisitorRealFilter(new ChannelTypeAdapter(handleChannelTypeAdvancedList))) + ; + + String inetHost = nettyClientProperties.getInetHost(); + int inetPort = nettyClientProperties.getInetPort(); + // local client id + + String clientId = nettyClientProperties.getClientId(); + + + String visitorId = internalNetworkPenetrationRealClient.getVisitorId(); + Integer visitorPort = internalNetworkPenetrationRealClient.getVisitorPort(); + String clientTargetIp = internalNetworkPenetrationRealClient.getClientTargetIp(); + Integer clientTargetPort = internalNetworkPenetrationRealClient.getClientTargetPort(); + String visitorClientId = internalNetworkPenetrationRealClient.getClientId(); + + // 客户端新建访客通道 连接服务端IP:{},连接服务端端口:{} + log.info("Client creates a new visitor channel to connect to server IP: {}, connecting to server port: {}", inetHost, inetPort); + ChannelFuture future = bootstrap.connect(inetHost, inetPort); + + // 使用的客户端ID:{} + log.info("Client ID used: {}" , visitorClientId); + future.addListener((ChannelFutureListener) futureListener -> { + Channel channel = futureListener.channel(); + if (futureListener.isSuccess()) { + + NettyProxyMsg myMsg = new NettyProxyMsg(); + myMsg.setType(MessageType.REPORT_SINGLE_CLIENT_REAL_CONNECT); + myMsg.setClientId(visitorClientId); + myMsg.setVisitorPort(visitorPort); + myMsg.setClientTargetIp(clientTargetIp); + myMsg.setClientTargetPort(clientTargetPort); + + myMsg.setVisitorId(visitorId); + channel.writeAndFlush(myMsg); + // 绑定客户端真实通信通道 + NettyCommunicationIdContext.pushVisitor(channel, visitorId); + ChannelAttributeKeyUtils.buildVisitorId(channel, visitorId); + ChannelAttributeKeyUtils.buildClientId(channel, visitorClientId); + // 客户端真实通道自动读写打开 + Channel visitor = NettyRealIdContext.getReal(visitorId); + visitor.config().setOption(ChannelOption.AUTO_READ, true); + + + } else { + log.info("每隔2s重连...."); + // 离线 + channel.eventLoop().schedule(() -> { + try { + newVisitorConnect2Server(internalNetworkPenetrationRealClient, nettyClientProperties, handleChannelTypeAdvancedList); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }, 2, TimeUnit.SECONDS); + } + }); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/socket/NettyClientSocket.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/socket/NettyClientSocket.java new file mode 100644 index 00000000..91ced6a5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/netty/socket/NettyClientSocket.java @@ -0,0 +1,122 @@ +package org.framework.smart.agent.network.heartbeat.client.netty.socket; + + +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioSocketChannel; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.client.netty.filter.NettyClientFilter; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyServerContext; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * 客户端连接服务端 + */ +@Slf4j +public class NettyClientSocket { + private final EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); + /** + * 服务端host + */ + private final String inetHost; + /** + * 服务端端口 + */ + private final int inetPort; + /** + * 当前客户端id + */ + @Getter + private final String clientId; + + /** + * 当前连接的服务端ID + */ + private final String serverId; + /** + * 客户端状态变更事件 + */ + @Getter + private final ClientChangeEvent clientChangeEvent; + private final List handleChannelTypeAdvancedList; // 处理服务端发送过来的数据类型 + + public NettyClientSocket(String inetHost, int inetPort, String clientId, String serverId, ClientChangeEvent clientChangeEvent, List handleChannelTypeAdvancedList) { + this.inetHost = inetHost; + this.inetPort = inetPort; + this.clientId = clientId; + this.serverId = serverId; + this.clientChangeEvent = clientChangeEvent; + this.handleChannelTypeAdvancedList = handleChannelTypeAdvancedList; + } + + public void newConnect2Server() throws InterruptedException { + newConnect2Server(inetHost, inetPort, clientId, serverId, clientChangeEvent); + } + + protected void newConnect2Server(String inetHost, int inetPort, String clientId, String serverId, ClientChangeEvent clientChangeEvent) throws InterruptedException { + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(eventLoopGroup) + .channel(NioSocketChannel.class) + .handler(new NettyClientFilter(new ChannelTypeAdapter(handleChannelTypeAdvancedList), this)) + ; + + log.info("use clientId:{} connect to server IP:{},server port :{}", clientId, inetHost, inetPort); + ChannelFuture future = bootstrap.connect(inetHost, inetPort); + // 客户端连接服务端的channel + Channel serviceChannel = future.channel(); + + future.addListener((ChannelFutureListener) futureListener -> { + if (futureListener.isSuccess()) { + + log.info("clientId:{},connect to server IP:{},server port :{} isSuccess ", clientId, inetHost, inetPort); + // 告诉服务端这条连接是client的连接 + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.REPORT_CLIENT_CONNECT_SUCCESS); + nettyMsg.setClientId(clientId); + nettyMsg.setData((clientId).getBytes()); + ChannelAttributeKeyUtils.buildClientId(serviceChannel, clientId); + serviceChannel.writeAndFlush(nettyMsg); + + NettyServerContext.pushServerEndpointChannel(serverId, clientId, serviceChannel); + // 在线 客户端注册服务端成功 + clientChangeEvent.clientOnLine(inetHost, inetPort,serverId, clientId); + } else { + log.warn("Reconnect every 2 seconds...."); + // 离线 + NettyServerContext.removeServerEndpointChannels(serverId, clientId); + clientChangeEvent.clientOffLine(inetHost, inetPort,serverId, clientId); + futureListener.channel().eventLoop().schedule(() -> { + try { + newConnect2Server(inetHost, inetPort, clientId, serverId, clientChangeEvent); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }, 2, TimeUnit.SECONDS); + } + }); + } + + /** + * 关闭连接 + */ + + public void shutdown() { + if ((eventLoopGroup != null) && (!eventLoopGroup.isShutdown())) { + eventLoopGroup.shutdownGracefully(); + } + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/rpc/StagingNoticeApiRpc.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/rpc/StagingNoticeApiRpc.java new file mode 100644 index 00000000..bb8a4616 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/rpc/StagingNoticeApiRpc.java @@ -0,0 +1,65 @@ +//package org.framework.smart.agent.network.heartbeat.client.rpc; +// +//import org.wu.framework.database.lazy.web.plus.stereotype.LazyRpc; +//import org.wu.framework.web.response.Result; +//import org.wu.framework.web.response.ResultFactory; +//import io.netty.channel.Channel; +//import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +//import org.framework.smart.agent.network.heartbeat.common.MessageType; +//import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +// +//import java.nio.charset.StandardCharsets; +//import java.util.List; +// +//@LazyRpc +//public class StagingNoticeApiRpc { +// +// +// /** +// * 前提当前客户端曾经有过离线、而后上线了,但是呢现在有暂存的数据,因此暂存是打开的,所以这个时候可以通知服务端让其告知其他客户户我暂存了 +// * 通知自己暂存了 +// * +// * @param clientId 租户ID +// * @return +// */ +// public Result stagingOpened(String clientId) { +// List clientChannels = ChannelContext.get(); +// for (ChannelContext.ClientChannel clientChannel : clientChannels) { +// // 上报 当前通道暂存开启了 +// Channel channel = clientChannel.getChannel(); +// +// NettyProxyMsg nettyMsg = new NettyProxyMsg(); +// nettyMsg.setType(MessageType.REPORT_CLIENT_STAGING_OPENED); +// nettyMsg.setData((clientId +// .getBytes(StandardCharsets.UTF_8))); +// nettyMsg.setClientId((clientId +// .getBytes(StandardCharsets.UTF_8))); +// channel.writeAndFlush(nettyMsg); +// } +// +// return ResultFactory.successOf(); +// } +// +// /** +// * 暂存恢复 +// * +// * @param clientId 租户ID +// * @return +// */ +// public Result stagingClosed(String clientId) { +// List clientChannels = ChannelContext.get(); +// for (ChannelContext.ClientChannel clientChannel : clientChannels) { +// // 上报 当前通道暂存关闭了 +// Channel channel = clientChannel.getChannel(); +// NettyProxyMsg nettyMsg = new NettyProxyMsg(); +// nettyMsg.setType(MessageType.REPORT_CLIENT_STAGING_CLOSED); +// nettyMsg.setData((clientId +// .getBytes(StandardCharsets.UTF_8))); +// nettyMsg.setClientId((clientId +// .getBytes(StandardCharsets.UTF_8))); +// channel.writeAndFlush(nettyMsg); +// } +// +// return ResultFactory.successOf(); +// } +//} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/ui/NettyClientLocalLazyUI.java b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/ui/NettyClientLocalLazyUI.java new file mode 100644 index 00000000..bfdc81e6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/java/org/framework/smart/agent/network/heartbeat/client/ui/NettyClientLocalLazyUI.java @@ -0,0 +1,65 @@ +package org.framework.smart.agent.network.heartbeat.client.ui; + +import org.springframework.context.annotation.Configuration; +import org.wu.framework.web.ui.LazyUI; + +/** + * netty 客户端本地UI + */ +@Configuration +public class NettyClientLocalLazyUI implements LazyUI { + public static final String UI_URL = "/netty-client-local-ui/**"; + public static final String UI_URL_INDEX = "/netty-client-local-ui/index.html"; + public static final String CLASSPATH = "classpath:/netty-client-local-ui/v1/"; + + /** + * 是否支持 default false + *

+ * pathPatterns 格式 /acw-client-ui/** + * locations 格式 classpath:/acw-local-client/v1/ + *

+ * + * @return true、false + */ + @Override + public boolean support() { + return true; + } + + /** + * @return UI 描述 + */ + @Override + public String desc() { + return "Netty 本地客户端 UI"; + } + + /** + * @return UI 访问的path + * 例如:/acw-client-ui/** + */ + @Override + public String pathPatterns() { + return UI_URL; + } + + /** + * 返回页面首页地址 + * + * @return String + * 例如 /acw-client-ui/index.html + */ + @Override + public String index() { + return UI_URL_INDEX; + } + + /** + * @return 文件资源 + * 例如:classpath:/acw-local-client/v1/ + */ + @Override + public String locations() { + return CLASSPATH; + } +} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/resources/META-INF/spring.factories b/wu-smart-agent-network-heartbeat-client/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..03a9ba6d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/resources/META-INF/spring.factories @@ -0,0 +1,6 @@ +# Auto Configure +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +org.framework.smart.agent.network.heartbeat.client.EnableHeartbeatClientAutoConfiguration,\ +org.framework.smart.agent.network.heartbeat.client.config.NettyClientProperties,\ +org.framework.smart.agent.network.heartbeat.client.config.InitConfig,\ +org.framework.smart.agent.network.heartbeat.client.config.HeartbeatClientConfiguration diff --git a/wu-smart-agent-network-heartbeat-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/wu-smart-agent-network-heartbeat-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..88f206b2 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,4 @@ +org.framework.smart.agent.network.heartbeat.client.EnableHeartbeatClientAutoConfiguration +org.framework.smart.agent.network.heartbeat.client.config.NettyClientProperties +org.framework.smart.agent.network.heartbeat.client.config.InitConfig +org.framework.smart.agent.network.heartbeat.client.config.HeartbeatClientConfiguration diff --git a/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/assets/index-BTaJShFE.js b/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/assets/index-BTaJShFE.js new file mode 100644 index 00000000..2acdebc4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/assets/index-BTaJShFE.js @@ -0,0 +1,65 @@ +var __=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var cie=__((Un,Yn)=>{(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))o(a);new MutationObserver(a=>{for(const r of a)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function n(a){const r={};return a.integrity&&(r.integrity=a.integrity),a.referrerPolicy&&(r.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?r.credentials="include":a.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(a){if(a.ep)return;a.ep=!0;const r=n(a);fetch(a.href,r)}})();/** +* @vue/shared v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function g0(e,t){const n=new Set(e.split(","));return t?o=>n.has(o.toLowerCase()):o=>n.has(o)}const Yt={},tl=[],Et=()=>{},b_=()=>!1,ec=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),y0=e=>e.startsWith("onUpdate:"),ln=Object.assign,_0=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},w_=Object.prototype.hasOwnProperty,yt=(e,t)=>w_.call(e,t),Ie=Array.isArray,nl=e=>Us(e)==="[object Map]",tc=e=>Us(e)==="[object Set]",wr=e=>Us(e)==="[object Date]",Xe=e=>typeof e=="function",Ze=e=>typeof e=="string",Ba=e=>typeof e=="symbol",ct=e=>e!==null&&typeof e=="object",ys=e=>(ct(e)||Xe(e))&&Xe(e.then)&&Xe(e.catch),hm=Object.prototype.toString,Us=e=>hm.call(e),Fi=e=>Us(e).slice(8,-1),Cu=e=>Us(e)==="[object Object]",b0=e=>Ze(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,as=g0(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),nc=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},C_=/-(\w)/g,lo=nc(e=>e.replace(C_,(t,n)=>n?n.toUpperCase():"")),S_=/\B([A-Z])/g,qa=nc(e=>e.replace(S_,"-$1").toLowerCase()),Ys=nc(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ki=nc(e=>e?`on${Ys(e)}`:""),za=(e,t)=>!Object.is(e,t),Wi=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Kd=e=>{const t=parseFloat(e);return isNaN(t)?e:t},k_=e=>{const t=Ze(e)?Number(e):NaN;return isNaN(t)?e:t};let Tp;const mm=()=>Tp||(Tp=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function De(e){if(Ie(e)){const t={};for(let n=0;n{if(n){const o=n.split(x_);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function $(e){let t="";if(Ze(e))t=e;else if(Ie(e))for(let n=0;ndl(n,t))}const Me=e=>Ze(e)?e:e==null?"":Ie(e)||ct(e)&&(e.toString===hm||!Xe(e.toString))?JSON.stringify(e,_m,2):String(e),_m=(e,t)=>t&&t.__v_isRef?_m(e,t.value):nl(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,a],r)=>(n[nd(o,r)+" =>"]=a,n),{})}:tc(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>nd(n))}:Ba(t)?nd(t):ct(t)&&!Ie(t)&&!Cu(t)?String(t):t,nd=(e,t="")=>{var n;return Ba(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Wn;class bm{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Wn,!t&&Wn&&(this.index=(Wn.scopes||(Wn.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Wn;try{return Wn=this,t()}finally{Wn=n}}}on(){Wn=this}off(){Wn=this.parent}stop(t){if(this._active){let n,o;for(n=0,o=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),Rr()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Ra,n=pr;try{return Ra=!0,pr=this,this._runnings++,Ap(this),this.fn()}finally{Op(this),this._runnings--,pr=n,Ra=t}}stop(){var t;this.active&&(Ap(this),Op(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function R_(e){return e.value}function Ap(e){e._trackId++,e._depsLength=0}function Op(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},ku=new WeakMap,vr=Symbol(""),qd=Symbol("");function zn(e,t,n){if(Ra&&pr){let o=ku.get(e);o||ku.set(e,o=new Map);let a=o.get(n);a||o.set(n,a=Mm(()=>o.delete(n))),Em(pr,a)}}function Qo(e,t,n,o,a,r){const l=ku.get(e);if(!l)return;let i=[];if(t==="clear")i=[...l.values()];else if(n==="length"&&Ie(e)){const u=Number(o);l.forEach((d,f)=>{(f==="length"||!Ba(f)&&f>=u)&&i.push(d)})}else switch(n!==void 0&&i.push(l.get(n)),t){case"add":Ie(e)?b0(n)&&i.push(l.get("length")):(i.push(l.get(vr)),nl(e)&&i.push(l.get(qd)));break;case"delete":Ie(e)||(i.push(l.get(vr)),nl(e)&&i.push(l.get(qd)));break;case"set":nl(e)&&i.push(l.get(vr));break}C0();for(const u of i)u&&xm(u,4);S0()}function P_(e,t){var n;return(n=ku.get(e))==null?void 0:n.get(t)}const L_=g0("__proto__,__v_isRef,__isVue"),$m=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ba)),Np=V_();function V_(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const o=xt(this);for(let r=0,l=this.length;r{e[t]=function(...n){Ir(),C0();const o=xt(this)[t].apply(this,n);return S0(),Rr(),o}}),e}function B_(e){const t=xt(this);return zn(t,"has",e),t.hasOwnProperty(e)}class Tm{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,o){const a=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!a;if(n==="__v_isReadonly")return a;if(n==="__v_isShallow")return r;if(n==="__v_raw")return o===(a?r?J_:Im:r?Nm:Om).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const l=Ie(t);if(!a){if(l&&yt(Np,n))return Reflect.get(Np,n,o);if(n==="hasOwnProperty")return B_}const i=Reflect.get(t,n,o);return(Ba(n)?$m.has(n):L_(n))||(a||zn(t,"get",n),r)?i:Pt(i)?l&&b0(n)?i:i.value:ct(i)?a?Ol(i):wt(i):i}}class Am extends Tm{constructor(t=!1){super(!1,t)}set(t,n,o,a){let r=t[n];if(!this._isShallow){const u=fl(r);if(!Eu(o)&&!fl(o)&&(r=xt(r),o=xt(o)),!Ie(t)&&Pt(r)&&!Pt(o))return u?!1:(r.value=o,!0)}const l=Ie(t)&&b0(n)?Number(n)e,oc=e=>Reflect.getPrototypeOf(e);function gi(e,t,n=!1,o=!1){e=e.__v_raw;const a=xt(e),r=xt(t);n||(za(t,r)&&zn(a,"get",t),zn(a,"get",r));const{has:l}=oc(a),i=o?k0:n?M0:_s;if(l.call(a,t))return i(e.get(t));if(l.call(a,r))return i(e.get(r));e!==a&&e.get(t)}function yi(e,t=!1){const n=this.__v_raw,o=xt(n),a=xt(e);return t||(za(e,a)&&zn(o,"has",e),zn(o,"has",a)),e===a?n.has(e):n.has(e)||n.has(a)}function _i(e,t=!1){return e=e.__v_raw,!t&&zn(xt(e),"iterate",vr),Reflect.get(e,"size",e)}function Ip(e){e=xt(e);const t=xt(this);return oc(t).has.call(t,e)||(t.add(e),Qo(t,"add",e,e)),this}function Rp(e,t){t=xt(t);const n=xt(this),{has:o,get:a}=oc(n);let r=o.call(n,e);r||(e=xt(e),r=o.call(n,e));const l=a.call(n,e);return n.set(e,t),r?za(t,l)&&Qo(n,"set",e,t):Qo(n,"add",e,t),this}function Pp(e){const t=xt(this),{has:n,get:o}=oc(t);let a=n.call(t,e);a||(e=xt(e),a=n.call(t,e)),o&&o.call(t,e);const r=t.delete(e);return a&&Qo(t,"delete",e,void 0),r}function Lp(){const e=xt(this),t=e.size!==0,n=e.clear();return t&&Qo(e,"clear",void 0,void 0),n}function bi(e,t){return function(o,a){const r=this,l=r.__v_raw,i=xt(l),u=t?k0:e?M0:_s;return!e&&zn(i,"iterate",vr),l.forEach((d,f)=>o.call(a,u(d),u(f),r))}}function wi(e,t,n){return function(...o){const a=this.__v_raw,r=xt(a),l=nl(r),i=e==="entries"||e===Symbol.iterator&&l,u=e==="keys"&&l,d=a[e](...o),f=n?k0:t?M0:_s;return!t&&zn(r,"iterate",u?qd:vr),{next(){const{value:c,done:p}=d.next();return p?{value:c,done:p}:{value:i?[f(c[0]),f(c[1])]:f(c),done:p}},[Symbol.iterator](){return this}}}}function ya(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function K_(){const e={get(r){return gi(this,r)},get size(){return _i(this)},has:yi,add:Ip,set:Rp,delete:Pp,clear:Lp,forEach:bi(!1,!1)},t={get(r){return gi(this,r,!1,!0)},get size(){return _i(this)},has:yi,add:Ip,set:Rp,delete:Pp,clear:Lp,forEach:bi(!1,!0)},n={get(r){return gi(this,r,!0)},get size(){return _i(this,!0)},has(r){return yi.call(this,r,!0)},add:ya("add"),set:ya("set"),delete:ya("delete"),clear:ya("clear"),forEach:bi(!0,!1)},o={get(r){return gi(this,r,!0,!0)},get size(){return _i(this,!0)},has(r){return yi.call(this,r,!0)},add:ya("add"),set:ya("set"),delete:ya("delete"),clear:ya("clear"),forEach:bi(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{e[r]=wi(r,!1,!1),n[r]=wi(r,!0,!1),t[r]=wi(r,!1,!0),o[r]=wi(r,!0,!0)}),[e,n,t,o]}const[W_,j_,q_,U_]=K_();function E0(e,t){const n=t?e?U_:q_:e?j_:W_;return(o,a,r)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?o:Reflect.get(yt(n,a)&&a in o?n:o,a,r)}const Y_={get:E0(!1,!1)},G_={get:E0(!1,!0)},X_={get:E0(!0,!1)},Om=new WeakMap,Nm=new WeakMap,Im=new WeakMap,J_=new WeakMap;function Z_(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Q_(e){return e.__v_skip||!Object.isExtensible(e)?0:Z_(Fi(e))}function wt(e){return fl(e)?e:x0(e,!1,H_,Y_,Om)}function Rm(e){return x0(e,!1,F_,G_,Nm)}function Ol(e){return x0(e,!0,D_,X_,Im)}function x0(e,t,n,o,a){if(!ct(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=a.get(e);if(r)return r;const l=Q_(e);if(l===0)return e;const i=new Proxy(e,l===2?o:n);return a.set(e,i),i}function ol(e){return fl(e)?ol(e.__v_raw):!!(e&&e.__v_isReactive)}function fl(e){return!!(e&&e.__v_isReadonly)}function Eu(e){return!!(e&&e.__v_isShallow)}function Pm(e){return ol(e)||fl(e)}function xt(e){const t=e&&e.__v_raw;return t?xt(t):e}function hr(e){return Object.isExtensible(e)&&Su(e,"__v_skip",!0),e}const _s=e=>ct(e)?wt(e):e,M0=e=>ct(e)?Ol(e):e;class Lm{constructor(t,n,o,a){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new w0(()=>t(this._value),()=>ji(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!a,this.__v_isReadonly=o}get value(){const t=xt(this);return(!t._cacheable||t.effect.dirty)&&za(t._value,t._value=t.effect.run())&&ji(t,4),Bm(t),t.effect._dirtyLevel>=2&&ji(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function Vm(e,t,n=!1){let o,a;const r=Xe(e);return r?(o=e,a=Et):(o=e.get,a=e.set),new Lm(o,a,r||!a,n)}function Bm(e){var t;Ra&&pr&&(e=xt(e),Em(pr,(t=e.dep)!=null?t:e.dep=Mm(()=>e.dep=void 0,e instanceof Lm?e:void 0)))}function ji(e,t=4,n){e=xt(e);const o=e.dep;o&&xm(o,t)}function Pt(e){return!!(e&&e.__v_isRef===!0)}function R(e){return zm(e,!1)}function Rt(e){return zm(e,!0)}function zm(e,t){return Pt(e)?e:new eb(e,t)}class eb{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:xt(t),this._value=n?t:_s(t)}get value(){return Bm(this),this._value}set value(t){const n=this.__v_isShallow||Eu(t)||fl(t);t=n?t:xt(t),za(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:_s(t),ji(this,4))}}function s(e){return Pt(e)?e.value:e}const tb={get:(e,t,n)=>s(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const a=e[t];return Pt(a)&&!Pt(n)?(a.value=n,!0):Reflect.set(e,t,n,o)}};function Hm(e){return ol(e)?e:new Proxy(e,tb)}function un(e){const t=Ie(e)?new Array(e.length):{};for(const n in e)t[n]=Dm(e,n);return t}class nb{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return P_(xt(this._object),this._key)}}class ob{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function At(e,t,n){return Pt(e)?e:Xe(e)?new ob(e):ct(e)&&arguments.length>1?Dm(e,t,n):R(e)}function Dm(e,t,n){const o=e[t];return Pt(o)?o:new nb(e,t,n)}/** +* @vue/runtime-core v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Pa(e,t,n,o){try{return o?e(...o):e()}catch(a){ac(a,t,n)}}function no(e,t,n,o){if(Xe(e)){const r=Pa(e,t,n,o);return r&&ys(r)&&r.catch(l=>{ac(l,t,n)}),r}const a=[];for(let r=0;r>>1,a=bn[o],r=ws(a);rTo&&bn.splice(t,1)}function sb(e){Ie(e)?al.push(...e):(!xa||!xa.includes(e,e.allowRecurse?nr+1:nr))&&al.push(e),Km()}function Vp(e,t,n=bs?To+1:0){for(;nws(n)-ws(o));if(al.length=0,xa){xa.push(...t);return}for(xa=t,nr=0;nre.id==null?1/0:e.id,ib=(e,t)=>{const n=ws(e)-ws(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function jm(e){Ud=!1,bs=!0,bn.sort(ib);try{for(To=0;ToZe(h)?h.trim():h)),c&&(a=n.map(Kd))}let i,u=o[i=Ki(t)]||o[i=Ki(lo(t))];!u&&r&&(u=o[i=Ki(qa(t))]),u&&no(u,e,6,a);const d=o[i+"Once"];if(d){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,no(d,e,6,a)}}function qm(e,t,n=!1){const o=t.emitsCache,a=o.get(e);if(a!==void 0)return a;const r=e.emits;let l={},i=!1;if(!Xe(e)){const u=d=>{const f=qm(d,t,!0);f&&(i=!0,ln(l,f))};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!r&&!i?(ct(e)&&o.set(e,null),null):(Ie(r)?r.forEach(u=>l[u]=null):ln(l,r),ct(e)&&o.set(e,l),l)}function rc(e,t){return!e||!ec(t)?!1:(t=t.slice(2).replace(/Once$/,""),yt(e,t[0].toLowerCase()+t.slice(1))||yt(e,qa(t))||yt(e,t))}let sn=null,lc=null;function xu(e){const t=sn;return sn=e,lc=e&&e.type.__scopeId||null,t}function Um(e){lc=e}function Ym(){lc=null}function G(e,t=sn,n){if(!t||e._n)return e;const o=(...a)=>{o._d&&Jp(-1);const r=xu(t);let l;try{l=e(...a)}finally{xu(r),o._d&&Jp(1)}return l};return o._n=!0,o._c=!0,o._d=!0,o}function od(e){const{type:t,vnode:n,proxy:o,withProxy:a,props:r,propsOptions:[l],slots:i,attrs:u,emit:d,render:f,renderCache:c,data:p,setupState:h,ctx:m,inheritAttrs:v}=e;let _,g;const w=xu(e);try{if(n.shapeFlag&4){const C=a||o,x=C;_=$o(f.call(x,C,c,r,h,p,m)),g=u}else{const C=t;_=$o(C.length>1?C(r,{attrs:u,slots:i,emit:d}):C(r,null)),g=t.props?u:cb(u)}}catch(C){us.length=0,ac(C,e,1),_=W($n)}let b=_;if(g&&v!==!1){const C=Object.keys(g),{shapeFlag:x}=b;C.length&&x&7&&(l&&C.some(y0)&&(g=db(g,l)),b=oa(b,g))}return n.dirs&&(b=oa(b),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),_=b,xu(w),_}const cb=e=>{let t;for(const n in e)(n==="class"||n==="style"||ec(n))&&((t||(t={}))[n]=e[n]);return t},db=(e,t)=>{const n={};for(const o in e)(!y0(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function fb(e,t,n){const{props:o,children:a,component:r}=e,{props:l,children:i,patchFlag:u}=t,d=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return o?Bp(o,l,d):!!l;if(u&8){const f=t.dynamicProps;for(let c=0;ce.__isSuspense;function mb(e,t){t&&t.pendingBranch?Ie(e)?t.effects.push(...e):t.effects.push(e):sb(e)}const gb=Symbol.for("v-scx"),yb=()=>Pe(gb);function gn(e,t){return N0(e,null,t)}const Ci={};function pe(e,t,n){return N0(e,t,n)}function N0(e,t,{immediate:n,deep:o,flush:a,once:r,onTrack:l,onTrigger:i}=Yt){if(t&&r){const E=t;t=(...O)=>{E(...O),x()}}const u=vn,d=E=>o===!0?E:lr(E,o===!1?1:void 0);let f,c=!1,p=!1;if(Pt(e)?(f=()=>e.value,c=Eu(e)):ol(e)?(f=()=>d(e),c=!0):Ie(e)?(p=!0,c=e.some(E=>ol(E)||Eu(E)),f=()=>e.map(E=>{if(Pt(E))return E.value;if(ol(E))return d(E);if(Xe(E))return Pa(E,u,2)})):Xe(e)?t?f=()=>Pa(e,u,2):f=()=>(h&&h(),no(e,u,3,[m])):f=Et,t&&o){const E=f;f=()=>lr(E())}let h,m=E=>{h=b.onStop=()=>{Pa(E,u,4),h=b.onStop=void 0}},v;if(fc)if(m=Et,t?n&&no(t,u,3,[f(),p?[]:void 0,m]):f(),a==="sync"){const E=yb();v=E.__watcherHandles||(E.__watcherHandles=[])}else return Et;let _=p?new Array(e.length).fill(Ci):Ci;const g=()=>{if(!(!b.active||!b.dirty))if(t){const E=b.run();(o||c||(p?E.some((O,T)=>za(O,_[T])):za(E,_)))&&(h&&h(),no(t,u,3,[E,_===Ci?void 0:p&&_[0]===Ci?[]:_,m]),_=E)}else b.run()};g.allowRecurse=!!t;let w;a==="sync"?w=g:a==="post"?w=()=>Pn(g,u&&u.suspense):(g.pre=!0,u&&(g.id=u.uid),w=()=>T0(g));const b=new w0(f,Et,w),C=wm(),x=()=>{b.stop(),C&&_0(C.effects,b)};return t?n?g():_=b.run():a==="post"?Pn(b.run.bind(b),u&&u.suspense):b.run(),v&&v.push(x),x}function _b(e,t,n){const o=this.proxy,a=Ze(e)?e.includes(".")?Xm(o,e):()=>o[e]:e.bind(o,o);let r;Xe(t)?r=t:(r=t.handler,n=t);const l=Gs(this),i=N0(a,r.bind(o),n);return l(),i}function Xm(e,t){const n=t.split(".");return()=>{let o=e;for(let a=0;a0){if(n>=t)return e;n++}if(o=o||new Set,o.has(e))return e;if(o.add(e),Pt(e))lr(e.value,t,n,o);else if(Ie(e))for(let a=0;a{lr(a,t,n,o)});else if(Cu(e))for(const a in e)lr(e[a],t,n,o);return e}function Qe(e,t){if(sn===null)return e;const n=pc(sn)||sn.proxy,o=e.dirs||(e.dirs=[]);for(let a=0;a{e.isMounted=!0}),It(()=>{e.isUnmounting=!0}),e}const Xn=[Function,Array],Zm={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Xn,onEnter:Xn,onAfterEnter:Xn,onEnterCancelled:Xn,onBeforeLeave:Xn,onLeave:Xn,onAfterLeave:Xn,onLeaveCancelled:Xn,onBeforeAppear:Xn,onAppear:Xn,onAfterAppear:Xn,onAppearCancelled:Xn},bb={name:"BaseTransition",props:Zm,setup(e,{slots:t}){const n=rt(),o=Jm();return()=>{const a=t.default&&I0(t.default(),!0);if(!a||!a.length)return;let r=a[0];if(a.length>1){for(const p of a)if(p.type!==$n){r=p;break}}const l=xt(e),{mode:i}=l;if(o.isLeaving)return ad(r);const u=Hp(r);if(!u)return ad(r);const d=Cs(u,l,o,n);Ss(u,d);const f=n.subTree,c=f&&Hp(f);if(c&&c.type!==$n&&!or(u,c)){const p=Cs(c,l,o,n);if(Ss(c,p),i==="out-in")return o.isLeaving=!0,p.afterLeave=()=>{o.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},ad(r);i==="in-out"&&u.type!==$n&&(p.delayLeave=(h,m,v)=>{const _=Qm(o,c);_[String(c.key)]=c,h[Ma]=()=>{m(),h[Ma]=void 0,delete d.delayedLeave},d.delayedLeave=v})}return r}}},wb=bb;function Qm(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function Cs(e,t,n,o){const{appear:a,mode:r,persisted:l=!1,onBeforeEnter:i,onEnter:u,onAfterEnter:d,onEnterCancelled:f,onBeforeLeave:c,onLeave:p,onAfterLeave:h,onLeaveCancelled:m,onBeforeAppear:v,onAppear:_,onAfterAppear:g,onAppearCancelled:w}=t,b=String(e.key),C=Qm(n,e),x=(T,V)=>{T&&no(T,o,9,V)},E=(T,V)=>{const L=V[1];x(T,V),Ie(T)?T.every(P=>P.length<=1)&&L():T.length<=1&&L()},O={mode:r,persisted:l,beforeEnter(T){let V=i;if(!n.isMounted)if(a)V=v||i;else return;T[Ma]&&T[Ma](!0);const L=C[b];L&&or(e,L)&&L.el[Ma]&&L.el[Ma](),x(V,[T])},enter(T){let V=u,L=d,P=f;if(!n.isMounted)if(a)V=_||u,L=g||d,P=w||f;else return;let z=!1;const j=T[Si]=K=>{z||(z=!0,K?x(P,[T]):x(L,[T]),O.delayedLeave&&O.delayedLeave(),T[Si]=void 0)};V?E(V,[T,j]):j()},leave(T,V){const L=String(e.key);if(T[Si]&&T[Si](!0),n.isUnmounting)return V();x(c,[T]);let P=!1;const z=T[Ma]=j=>{P||(P=!0,V(),j?x(m,[T]):x(h,[T]),T[Ma]=void 0,C[L]===e&&delete C[L])};C[L]=e,p?E(p,[T,z]):z()},clone(T){return Cs(T,t,n,o)}};return O}function ad(e){if(ic(e))return e=oa(e),e.children=null,e}function Hp(e){return ic(e)?e.children?e.children[0]:void 0:e}function Ss(e,t){e.shapeFlag&6&&e.component?Ss(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function I0(e,t=!1,n){let o=[],a=0;for(let r=0;r1)for(let r=0;r!!e.type.__asyncLoader,ic=e=>e.type.__isKeepAlive;function Cb(e,t){t4(e,"a",t)}function e4(e,t){t4(e,"da",t)}function t4(e,t,n=vn){const o=e.__wdc||(e.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(uc(t,o,n),n){let a=n.parent;for(;a&&a.parent;)ic(a.parent.vnode)&&Sb(o,t,n,a),a=a.parent}}function Sb(e,t,n,o){const a=uc(t,e,o,!0);Ua(()=>{_0(o[t],a)},n)}function uc(e,t,n=vn,o=!1){if(n){const a=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;Ir();const i=Gs(n),u=no(t,n,e,l);return i(),Rr(),u});return o?a.unshift(r):a.push(r),r}}const ia=e=>(t,n=vn)=>(!fc||e==="sp")&&uc(e,(...o)=>t(...o),n),cc=ia("bm"),et=ia("m"),n4=ia("bu"),ua=ia("u"),It=ia("bum"),Ua=ia("um"),kb=ia("sp"),Eb=ia("rtg"),xb=ia("rtc");function Mb(e,t=vn){uc("ec",e,t)}function mt(e,t,n,o){let a;const r=n&&n[o];if(Ie(e)||Ze(e)){a=new Array(e.length);for(let l=0,i=e.length;lt(l,i,void 0,r&&r[i]));else{const l=Object.keys(e);a=new Array(l.length);for(let i=0,u=l.length;i{const r=o.fn(...a);return r&&(r.key=o.key),r}:o.fn)}return e}function re(e,t,n={},o,a){if(sn.isCE||sn.parent&&rs(sn.parent)&&sn.parent.isCE)return t!=="default"&&(n.name=t),W("slot",n,o&&o());let r=e[t];r&&r._c&&(r._d=!1),y();const l=r&&o4(r(n)),i=oe(Fe,{key:n.key||l&&l.key||`_${t}`},l||(o?o():[]),l&&e._===1?64:-2);return!a&&i.scopeId&&(i.slotScopeIds=[i.scopeId+"-s"]),r&&r._c&&(r._d=!0),i}function o4(e){return e.some(t=>zt(t)?!(t.type===$n||t.type===Fe&&!o4(t.children)):!0)?e:null}function $b(e,t){const n={};for(const o in e)n[t&&/[A-Z]/.test(o)?`on:${o}`:Ki(o)]=e[o];return n}const Yd=e=>e?m4(e)?pc(e)||e.proxy:Yd(e.parent):null,ls=ln(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Yd(e.parent),$root:e=>Yd(e.root),$emit:e=>e.emit,$options:e=>R0(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,T0(e.update)}),$nextTick:e=>e.n||(e.n=We.bind(e.proxy)),$watch:e=>_b.bind(e)}),rd=(e,t)=>e!==Yt&&!e.__isScriptSetup&&yt(e,t),Tb={get({_:e},t){const{ctx:n,setupState:o,data:a,props:r,accessCache:l,type:i,appContext:u}=e;let d;if(t[0]!=="$"){const h=l[t];if(h!==void 0)switch(h){case 1:return o[t];case 2:return a[t];case 4:return n[t];case 3:return r[t]}else{if(rd(o,t))return l[t]=1,o[t];if(a!==Yt&&yt(a,t))return l[t]=2,a[t];if((d=e.propsOptions[0])&&yt(d,t))return l[t]=3,r[t];if(n!==Yt&&yt(n,t))return l[t]=4,n[t];Gd&&(l[t]=0)}}const f=ls[t];let c,p;if(f)return t==="$attrs"&&zn(e,"get",t),f(e);if((c=i.__cssModules)&&(c=c[t]))return c;if(n!==Yt&&yt(n,t))return l[t]=4,n[t];if(p=u.config.globalProperties,yt(p,t))return p[t]},set({_:e},t,n){const{data:o,setupState:a,ctx:r}=e;return rd(a,t)?(a[t]=n,!0):o!==Yt&&yt(o,t)?(o[t]=n,!0):yt(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:a,propsOptions:r}},l){let i;return!!n[l]||e!==Yt&&yt(e,l)||rd(t,l)||(i=r[0])&&yt(i,l)||yt(o,l)||yt(ls,l)||yt(a.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:yt(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function fn(){return a4().slots}function Pr(){return a4().attrs}function a4(){const e=rt();return e.setupContext||(e.setupContext=y4(e))}function Dp(e){return Ie(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Gd=!0;function Ab(e){const t=R0(e),n=e.proxy,o=e.ctx;Gd=!1,t.beforeCreate&&Fp(t.beforeCreate,e,"bc");const{data:a,computed:r,methods:l,watch:i,provide:u,inject:d,created:f,beforeMount:c,mounted:p,beforeUpdate:h,updated:m,activated:v,deactivated:_,beforeDestroy:g,beforeUnmount:w,destroyed:b,unmounted:C,render:x,renderTracked:E,renderTriggered:O,errorCaptured:T,serverPrefetch:V,expose:L,inheritAttrs:P,components:z,directives:j,filters:K}=t;if(d&&Ob(d,o,null),l)for(const I in l){const H=l[I];Xe(H)&&(o[I]=H.bind(n))}if(a){const I=a.call(n,n);ct(I)&&(e.data=wt(I))}if(Gd=!0,r)for(const I in r){const H=r[I],N=Xe(H)?H.bind(n,n):Xe(H.get)?H.get.bind(n,n):Et,D=!Xe(H)&&Xe(H.set)?H.set.bind(n):Et,q=S({get:N,set:D});Object.defineProperty(o,I,{enumerable:!0,configurable:!0,get:()=>q.value,set:Y=>q.value=Y})}if(i)for(const I in i)r4(i[I],o,n,I);if(u){const I=Xe(u)?u.call(n):u;Reflect.ownKeys(I).forEach(H=>{pt(H,I[H])})}f&&Fp(f,e,"c");function B(I,H){Ie(H)?H.forEach(N=>I(N.bind(n))):H&&I(H.bind(n))}if(B(cc,c),B(et,p),B(n4,h),B(ua,m),B(Cb,v),B(e4,_),B(Mb,T),B(xb,E),B(Eb,O),B(It,w),B(Ua,C),B(kb,V),Ie(L))if(L.length){const I=e.exposed||(e.exposed={});L.forEach(H=>{Object.defineProperty(I,H,{get:()=>n[H],set:N=>n[H]=N})})}else e.exposed||(e.exposed={});x&&e.render===Et&&(e.render=x),P!=null&&(e.inheritAttrs=P),z&&(e.components=z),j&&(e.directives=j)}function Ob(e,t,n=Et){Ie(e)&&(e=Xd(e));for(const o in e){const a=e[o];let r;ct(a)?"default"in a?r=Pe(a.from||o,a.default,!0):r=Pe(a.from||o):r=Pe(a),Pt(r)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>r.value,set:l=>r.value=l}):t[o]=r}}function Fp(e,t,n){no(Ie(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function r4(e,t,n,o){const a=o.includes(".")?Xm(n,o):()=>n[o];if(Ze(e)){const r=t[e];Xe(r)&&pe(a,r)}else if(Xe(e))pe(a,e.bind(n));else if(ct(e))if(Ie(e))e.forEach(r=>r4(r,t,n,o));else{const r=Xe(e.handler)?e.handler.bind(n):t[e.handler];Xe(r)&&pe(a,r,e)}}function R0(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:a,optionsCache:r,config:{optionMergeStrategies:l}}=e.appContext,i=r.get(t);let u;return i?u=i:!a.length&&!n&&!o?u=t:(u={},a.length&&a.forEach(d=>Mu(u,d,l,!0)),Mu(u,t,l)),ct(t)&&r.set(t,u),u}function Mu(e,t,n,o=!1){const{mixins:a,extends:r}=t;r&&Mu(e,r,n,!0),a&&a.forEach(l=>Mu(e,l,n,!0));for(const l in t)if(!(o&&l==="expose")){const i=Nb[l]||n&&n[l];e[l]=i?i(e[l],t[l]):t[l]}return e}const Nb={data:Kp,props:Wp,emits:Wp,methods:Zl,computed:Zl,beforeCreate:Mn,created:Mn,beforeMount:Mn,mounted:Mn,beforeUpdate:Mn,updated:Mn,beforeDestroy:Mn,beforeUnmount:Mn,destroyed:Mn,unmounted:Mn,activated:Mn,deactivated:Mn,errorCaptured:Mn,serverPrefetch:Mn,components:Zl,directives:Zl,watch:Rb,provide:Kp,inject:Ib};function Kp(e,t){return t?e?function(){return ln(Xe(e)?e.call(this,this):e,Xe(t)?t.call(this,this):t)}:t:e}function Ib(e,t){return Zl(Xd(e),Xd(t))}function Xd(e){if(Ie(e)){const t={};for(let n=0;n1)return n&&Xe(t)?t.call(o&&o.proxy):t}}function Vb(e,t,n,o=!1){const a={},r={};Su(r,dc,1),e.propsDefaults=Object.create(null),s4(e,t,a,r);for(const l in e.propsOptions[0])l in a||(a[l]=void 0);n?e.props=o?a:Rm(a):e.type.props?e.props=a:e.props=r,e.attrs=r}function Bb(e,t,n,o){const{props:a,attrs:r,vnode:{patchFlag:l}}=e,i=xt(a),[u]=e.propsOptions;let d=!1;if((o||l>0)&&!(l&16)){if(l&8){const f=e.vnode.dynamicProps;for(let c=0;c{u=!0;const[p,h]=i4(c,t,!0);ln(l,p),h&&i.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!r&&!u)return ct(e)&&o.set(e,tl),tl;if(Ie(r))for(let f=0;f-1,h[1]=v<0||m-1||yt(h,"default"))&&i.push(c)}}}const d=[l,i];return ct(e)&&o.set(e,d),d}function jp(e){return e[0]!=="$"&&!as(e)}function qp(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function Up(e,t){return qp(e)===qp(t)}function Yp(e,t){return Ie(t)?t.findIndex(n=>Up(n,e)):Xe(t)&&Up(t,e)?0:-1}const u4=e=>e[0]==="_"||e==="$stable",P0=e=>Ie(e)?e.map($o):[$o(e)],zb=(e,t,n)=>{if(t._n)return t;const o=G((...a)=>P0(t(...a)),n);return o._c=!1,o},c4=(e,t,n)=>{const o=e._ctx;for(const a in e){if(u4(a))continue;const r=e[a];if(Xe(r))t[a]=zb(a,r,o);else if(r!=null){const l=P0(r);t[a]=()=>l}}},d4=(e,t)=>{const n=P0(t);e.slots.default=()=>n},Hb=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=xt(t),Su(t,"_",n)):c4(t,e.slots={})}else e.slots={},t&&d4(e,t);Su(e.slots,dc,1)},Db=(e,t,n)=>{const{vnode:o,slots:a}=e;let r=!0,l=Yt;if(o.shapeFlag&32){const i=t._;i?n&&i===1?r=!1:(ln(a,t),!n&&i===1&&delete a._):(r=!t.$stable,c4(t,a)),l=t}else t&&(d4(e,t),l={default:1});if(r)for(const i in a)!u4(i)&&l[i]==null&&delete a[i]};function Zd(e,t,n,o,a=!1){if(Ie(e)){e.forEach((p,h)=>Zd(p,t&&(Ie(t)?t[h]:t),n,o,a));return}if(rs(o)&&!a)return;const r=o.shapeFlag&4?pc(o.component)||o.component.proxy:o.el,l=a?null:r,{i,r:u}=e,d=t&&t.r,f=i.refs===Yt?i.refs={}:i.refs,c=i.setupState;if(d!=null&&d!==u&&(Ze(d)?(f[d]=null,yt(c,d)&&(c[d]=null)):Pt(d)&&(d.value=null)),Xe(u))Pa(u,i,12,[l,f]);else{const p=Ze(u),h=Pt(u);if(p||h){const m=()=>{if(e.f){const v=p?yt(c,u)?c[u]:f[u]:u.value;a?Ie(v)&&_0(v,r):Ie(v)?v.includes(r)||v.push(r):p?(f[u]=[r],yt(c,u)&&(c[u]=f[u])):(u.value=[r],e.k&&(f[e.k]=u.value))}else p?(f[u]=l,yt(c,u)&&(c[u]=l)):h&&(u.value=l,e.k&&(f[e.k]=l))};l?(m.id=-1,Pn(m,n)):m()}}}const Pn=mb;function Fb(e){return Kb(e)}function Kb(e,t){const n=mm();n.__VUE__=!0;const{insert:o,remove:a,patchProp:r,createElement:l,createText:i,createComment:u,setText:d,setElementText:f,parentNode:c,nextSibling:p,setScopeId:h=Et,insertStaticContent:m}=e,v=(U,te,ve,be=null,ue=null,ye=null,we=void 0,Ce=null,he=!!te.dynamicChildren)=>{if(U===te)return;U&&!or(U,te)&&(be=le(U),Y(U,ue,ye,!0),U=null),te.patchFlag===-2&&(he=!1,te.dynamicChildren=null);const{type:Se,ref:Re,shapeFlag:He}=te;switch(Se){case Il:_(U,te,ve,be);break;case $n:g(U,te,ve,be);break;case sd:U==null&&w(te,ve,be,we);break;case Fe:z(U,te,ve,be,ue,ye,we,Ce,he);break;default:He&1?x(U,te,ve,be,ue,ye,we,Ce,he):He&6?j(U,te,ve,be,ue,ye,we,Ce,he):(He&64||He&128)&&Se.process(U,te,ve,be,ue,ye,we,Ce,he,ce)}Re!=null&&ue&&Zd(Re,U&&U.ref,ye,te||U,!te)},_=(U,te,ve,be)=>{if(U==null)o(te.el=i(te.children),ve,be);else{const ue=te.el=U.el;te.children!==U.children&&d(ue,te.children)}},g=(U,te,ve,be)=>{U==null?o(te.el=u(te.children||""),ve,be):te.el=U.el},w=(U,te,ve,be)=>{[U.el,U.anchor]=m(U.children,te,ve,be,U.el,U.anchor)},b=({el:U,anchor:te},ve,be)=>{let ue;for(;U&&U!==te;)ue=p(U),o(U,ve,be),U=ue;o(te,ve,be)},C=({el:U,anchor:te})=>{let ve;for(;U&&U!==te;)ve=p(U),a(U),U=ve;a(te)},x=(U,te,ve,be,ue,ye,we,Ce,he)=>{te.type==="svg"?we="svg":te.type==="math"&&(we="mathml"),U==null?E(te,ve,be,ue,ye,we,Ce,he):V(U,te,ue,ye,we,Ce,he)},E=(U,te,ve,be,ue,ye,we,Ce)=>{let he,Se;const{props:Re,shapeFlag:He,transition:de,dirs:Le}=U;if(he=U.el=l(U.type,ye,Re&&Re.is,Re),He&8?f(he,U.children):He&16&&T(U.children,he,null,be,ue,ld(U,ye),we,Ce),Le&&Xa(U,null,be,"created"),O(he,U,U.scopeId,we,be),Re){for(const ot in Re)ot!=="value"&&!as(ot)&&r(he,ot,null,Re[ot],ye,U.children,be,ue,Q);"value"in Re&&r(he,"value",null,Re.value,ye),(Se=Re.onVnodeBeforeMount)&&Mo(Se,be,U)}Le&&Xa(U,null,be,"beforeMount");const Ue=Wb(ue,de);Ue&&de.beforeEnter(he),o(he,te,ve),((Se=Re&&Re.onVnodeMounted)||Ue||Le)&&Pn(()=>{Se&&Mo(Se,be,U),Ue&&de.enter(he),Le&&Xa(U,null,be,"mounted")},ue)},O=(U,te,ve,be,ue)=>{if(ve&&h(U,ve),be)for(let ye=0;ye{for(let Se=he;Se{const Ce=te.el=U.el;let{patchFlag:he,dynamicChildren:Se,dirs:Re}=te;he|=U.patchFlag&16;const He=U.props||Yt,de=te.props||Yt;let Le;if(ve&&Ja(ve,!1),(Le=de.onVnodeBeforeUpdate)&&Mo(Le,ve,te,U),Re&&Xa(te,U,ve,"beforeUpdate"),ve&&Ja(ve,!0),Se?L(U.dynamicChildren,Se,Ce,ve,be,ld(te,ue),ye):we||H(U,te,Ce,null,ve,be,ld(te,ue),ye,!1),he>0){if(he&16)P(Ce,te,He,de,ve,be,ue);else if(he&2&&He.class!==de.class&&r(Ce,"class",null,de.class,ue),he&4&&r(Ce,"style",He.style,de.style,ue),he&8){const Ue=te.dynamicProps;for(let ot=0;ot{Le&&Mo(Le,ve,te,U),Re&&Xa(te,U,ve,"updated")},be)},L=(U,te,ve,be,ue,ye,we)=>{for(let Ce=0;Ce{if(ve!==be){if(ve!==Yt)for(const Ce in ve)!as(Ce)&&!(Ce in be)&&r(U,Ce,ve[Ce],null,we,te.children,ue,ye,Q);for(const Ce in be){if(as(Ce))continue;const he=be[Ce],Se=ve[Ce];he!==Se&&Ce!=="value"&&r(U,Ce,Se,he,we,te.children,ue,ye,Q)}"value"in be&&r(U,"value",ve.value,be.value,we)}},z=(U,te,ve,be,ue,ye,we,Ce,he)=>{const Se=te.el=U?U.el:i(""),Re=te.anchor=U?U.anchor:i("");let{patchFlag:He,dynamicChildren:de,slotScopeIds:Le}=te;Le&&(Ce=Ce?Ce.concat(Le):Le),U==null?(o(Se,ve,be),o(Re,ve,be),T(te.children||[],ve,Re,ue,ye,we,Ce,he)):He>0&&He&64&&de&&U.dynamicChildren?(L(U.dynamicChildren,de,ve,ue,ye,we,Ce),(te.key!=null||ue&&te===ue.subTree)&&L0(U,te,!0)):H(U,te,ve,Re,ue,ye,we,Ce,he)},j=(U,te,ve,be,ue,ye,we,Ce,he)=>{te.slotScopeIds=Ce,U==null?te.shapeFlag&512?ue.ctx.activate(te,ve,be,we,he):K(te,ve,be,ue,ye,we,he):F(U,te,he)},K=(U,te,ve,be,ue,ye,we)=>{const Ce=U.component=Qb(U,be,ue);if(ic(U)&&(Ce.ctx.renderer=ce),ew(Ce),Ce.asyncDep){if(ue&&ue.registerDep(Ce,B),!U.el){const he=Ce.subTree=W($n);g(null,he,te,ve)}}else B(Ce,U,te,ve,ue,ye,we)},F=(U,te,ve)=>{const be=te.component=U.component;if(fb(U,te,ve))if(be.asyncDep&&!be.asyncResolved){I(be,te,ve);return}else be.next=te,lb(be.update),be.effect.dirty=!0,be.update();else te.el=U.el,be.vnode=te},B=(U,te,ve,be,ue,ye,we)=>{const Ce=()=>{if(U.isMounted){let{next:Re,bu:He,u:de,parent:Le,vnode:Ue}=U;{const $e=f4(U);if($e){Re&&(Re.el=Ue.el,I(U,Re,we)),$e.asyncDep.then(()=>{U.isUnmounted||Ce()});return}}let ot=Re,dt;Ja(U,!1),Re?(Re.el=Ue.el,I(U,Re,we)):Re=Ue,He&&Wi(He),(dt=Re.props&&Re.props.onVnodeBeforeUpdate)&&Mo(dt,Le,Re,Ue),Ja(U,!0);const je=od(U),fe=U.subTree;U.subTree=je,v(fe,je,c(fe.el),le(fe),U,ue,ye),Re.el=je.el,ot===null&&pb(U,je.el),de&&Pn(de,ue),(dt=Re.props&&Re.props.onVnodeUpdated)&&Pn(()=>Mo(dt,Le,Re,Ue),ue)}else{let Re;const{el:He,props:de}=te,{bm:Le,m:Ue,parent:ot}=U,dt=rs(te);if(Ja(U,!1),Le&&Wi(Le),!dt&&(Re=de&&de.onVnodeBeforeMount)&&Mo(Re,ot,te),Ja(U,!0),He&&Ae){const je=()=>{U.subTree=od(U),Ae(He,U.subTree,U,ue,null)};dt?te.type.__asyncLoader().then(()=>!U.isUnmounted&&je()):je()}else{const je=U.subTree=od(U);v(null,je,ve,be,U,ue,ye),te.el=je.el}if(Ue&&Pn(Ue,ue),!dt&&(Re=de&&de.onVnodeMounted)){const je=te;Pn(()=>Mo(Re,ot,je),ue)}(te.shapeFlag&256||ot&&rs(ot.vnode)&&ot.vnode.shapeFlag&256)&&U.a&&Pn(U.a,ue),U.isMounted=!0,te=ve=be=null}},he=U.effect=new w0(Ce,Et,()=>T0(Se),U.scope),Se=U.update=()=>{he.dirty&&he.run()};Se.id=U.uid,Ja(U,!0),Se()},I=(U,te,ve)=>{te.component=U;const be=U.vnode.props;U.vnode=te,U.next=null,Bb(U,te.props,be,ve),Db(U,te.children,ve),Ir(),Vp(U),Rr()},H=(U,te,ve,be,ue,ye,we,Ce,he=!1)=>{const Se=U&&U.children,Re=U?U.shapeFlag:0,He=te.children,{patchFlag:de,shapeFlag:Le}=te;if(de>0){if(de&128){D(Se,He,ve,be,ue,ye,we,Ce,he);return}else if(de&256){N(Se,He,ve,be,ue,ye,we,Ce,he);return}}Le&8?(Re&16&&Q(Se,ue,ye),He!==Se&&f(ve,He)):Re&16?Le&16?D(Se,He,ve,be,ue,ye,we,Ce,he):Q(Se,ue,ye,!0):(Re&8&&f(ve,""),Le&16&&T(He,ve,be,ue,ye,we,Ce,he))},N=(U,te,ve,be,ue,ye,we,Ce,he)=>{U=U||tl,te=te||tl;const Se=U.length,Re=te.length,He=Math.min(Se,Re);let de;for(de=0;deRe?Q(U,ue,ye,!0,!1,He):T(te,ve,be,ue,ye,we,Ce,he,He)},D=(U,te,ve,be,ue,ye,we,Ce,he)=>{let Se=0;const Re=te.length;let He=U.length-1,de=Re-1;for(;Se<=He&&Se<=de;){const Le=U[Se],Ue=te[Se]=he?$a(te[Se]):$o(te[Se]);if(or(Le,Ue))v(Le,Ue,ve,null,ue,ye,we,Ce,he);else break;Se++}for(;Se<=He&&Se<=de;){const Le=U[He],Ue=te[de]=he?$a(te[de]):$o(te[de]);if(or(Le,Ue))v(Le,Ue,ve,null,ue,ye,we,Ce,he);else break;He--,de--}if(Se>He){if(Se<=de){const Le=de+1,Ue=Lede)for(;Se<=He;)Y(U[Se],ue,ye,!0),Se++;else{const Le=Se,Ue=Se,ot=new Map;for(Se=Ue;Se<=de;Se++){const ne=te[Se]=he?$a(te[Se]):$o(te[Se]);ne.key!=null&&ot.set(ne.key,Se)}let dt,je=0;const fe=de-Ue+1;let $e=!1,ee=0;const ie=new Array(fe);for(Se=0;Se=fe){Y(ne,ue,ye,!0);continue}let ze;if(ne.key!=null)ze=ot.get(ne.key);else for(dt=Ue;dt<=de;dt++)if(ie[dt-Ue]===0&&or(ne,te[dt])){ze=dt;break}ze===void 0?Y(ne,ue,ye,!0):(ie[ze-Ue]=Se+1,ze>=ee?ee=ze:$e=!0,v(ne,te[ze],ve,null,ue,ye,we,Ce,he),je++)}const ke=$e?jb(ie):tl;for(dt=ke.length-1,Se=fe-1;Se>=0;Se--){const ne=Ue+Se,ze=te[ne],tt=ne+1{const{el:ye,type:we,transition:Ce,children:he,shapeFlag:Se}=U;if(Se&6){q(U.component.subTree,te,ve,be);return}if(Se&128){U.suspense.move(te,ve,be);return}if(Se&64){we.move(U,te,ve,ce);return}if(we===Fe){o(ye,te,ve);for(let He=0;HeCe.enter(ye),ue);else{const{leave:He,delayLeave:de,afterLeave:Le}=Ce,Ue=()=>o(ye,te,ve),ot=()=>{He(ye,()=>{Ue(),Le&&Le()})};de?de(ye,Ue,ot):ot()}else o(ye,te,ve)},Y=(U,te,ve,be=!1,ue=!1)=>{const{type:ye,props:we,ref:Ce,children:he,dynamicChildren:Se,shapeFlag:Re,patchFlag:He,dirs:de}=U;if(Ce!=null&&Zd(Ce,null,ve,U,!0),Re&256){te.ctx.deactivate(U);return}const Le=Re&1&&de,Ue=!rs(U);let ot;if(Ue&&(ot=we&&we.onVnodeBeforeUnmount)&&Mo(ot,te,U),Re&6)_e(U.component,ve,be);else{if(Re&128){U.suspense.unmount(ve,be);return}Le&&Xa(U,null,te,"beforeUnmount"),Re&64?U.type.remove(U,te,ve,ue,ce,be):Se&&(ye!==Fe||He>0&&He&64)?Q(Se,te,ve,!1,!0):(ye===Fe&&He&384||!ue&&Re&16)&&Q(he,te,ve),be&&J(U)}(Ue&&(ot=we&&we.onVnodeUnmounted)||Le)&&Pn(()=>{ot&&Mo(ot,te,U),Le&&Xa(U,null,te,"unmounted")},ve)},J=U=>{const{type:te,el:ve,anchor:be,transition:ue}=U;if(te===Fe){se(ve,be);return}if(te===sd){C(U);return}const ye=()=>{a(ve),ue&&!ue.persisted&&ue.afterLeave&&ue.afterLeave()};if(U.shapeFlag&1&&ue&&!ue.persisted){const{leave:we,delayLeave:Ce}=ue,he=()=>we(ve,ye);Ce?Ce(U.el,ye,he):he()}else ye()},se=(U,te)=>{let ve;for(;U!==te;)ve=p(U),a(U),U=ve;a(te)},_e=(U,te,ve)=>{const{bum:be,scope:ue,update:ye,subTree:we,um:Ce}=U;be&&Wi(be),ue.stop(),ye&&(ye.active=!1,Y(we,U,te,ve)),Ce&&Pn(Ce,te),Pn(()=>{U.isUnmounted=!0},te),te&&te.pendingBranch&&!te.isUnmounted&&U.asyncDep&&!U.asyncResolved&&U.suspenseId===te.pendingId&&(te.deps--,te.deps===0&&te.resolve())},Q=(U,te,ve,be=!1,ue=!1,ye=0)=>{for(let we=ye;weU.shapeFlag&6?le(U.component.subTree):U.shapeFlag&128?U.suspense.next():p(U.anchor||U.el);let ae=!1;const Te=(U,te,ve)=>{U==null?te._vnode&&Y(te._vnode,null,null,!0):v(te._vnode||null,U,te,null,null,null,ve),ae||(ae=!0,Vp(),Wm(),ae=!1),te._vnode=U},ce={p:v,um:Y,m:q,r:J,mt:K,mc:T,pc:H,pbc:L,n:le,o:e};let ge,Ae;return t&&([ge,Ae]=t(ce)),{render:Te,hydrate:ge,createApp:Lb(Te,ge)}}function ld({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ja({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Wb(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function L0(e,t,n=!1){const o=e.children,a=t.children;if(Ie(o)&&Ie(a))for(let r=0;r>1,e[n[i]]0&&(t[o]=n[r-1]),n[r]=o)}}for(r=n.length,l=n[r-1];r-- >0;)n[r]=l,l=t[l];return n}function f4(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:f4(t)}const qb=e=>e.__isTeleport,is=e=>e&&(e.disabled||e.disabled===""),Gp=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Xp=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Qd=(e,t)=>{const n=e&&e.to;return Ze(n)?t?t(n):null:n},Ub={name:"Teleport",__isTeleport:!0,process(e,t,n,o,a,r,l,i,u,d){const{mc:f,pc:c,pbc:p,o:{insert:h,querySelector:m,createText:v,createComment:_}}=d,g=is(t.props);let{shapeFlag:w,children:b,dynamicChildren:C}=t;if(e==null){const x=t.el=v(""),E=t.anchor=v("");h(x,n,o),h(E,n,o);const O=t.target=Qd(t.props,m),T=t.targetAnchor=v("");O&&(h(T,O),l==="svg"||Gp(O)?l="svg":(l==="mathml"||Xp(O))&&(l="mathml"));const V=(L,P)=>{w&16&&f(b,L,P,a,r,l,i,u)};g?V(n,E):O&&V(O,T)}else{t.el=e.el;const x=t.anchor=e.anchor,E=t.target=e.target,O=t.targetAnchor=e.targetAnchor,T=is(e.props),V=T?n:E,L=T?x:O;if(l==="svg"||Gp(E)?l="svg":(l==="mathml"||Xp(E))&&(l="mathml"),C?(p(e.dynamicChildren,C,V,a,r,l,i),L0(e,t,!0)):u||c(e,t,V,L,a,r,l,i,!1),g)T?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):ki(t,n,x,d,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const P=t.target=Qd(t.props,m);P&&ki(t,P,null,d,0)}else T&&ki(t,E,O,d,1)}p4(t)},remove(e,t,n,o,{um:a,o:{remove:r}},l){const{shapeFlag:i,children:u,anchor:d,targetAnchor:f,target:c,props:p}=e;if(c&&r(f),l&&r(d),i&16){const h=l||!is(p);for(let m=0;m0?_o||tl:null,Gb(),ks>0&&_o&&_o.push(e),e}function M(e,t,n,o,a,r){return v4(k(e,t,n,o,a,r,!0))}function oe(e,t,n,o,a){return v4(W(e,t,n,o,a,!0))}function zt(e){return e?e.__v_isVNode===!0:!1}function or(e,t){return e.type===t.type&&e.key===t.key}const dc="__vInternal",h4=({key:e})=>e??null,qi=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Ze(e)||Pt(e)||Xe(e)?{i:sn,r:e,k:t,f:!!n}:e:null);function k(e,t=null,n=null,o=0,a=null,r=e===Fe?0:1,l=!1,i=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&h4(t),ref:t&&qi(t),scopeId:lc,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:o,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:sn};return i?(V0(u,n),r&128&&e.normalize(u)):n&&(u.shapeFlag|=Ze(n)?8:16),ks>0&&!l&&_o&&(u.patchFlag>0||r&6)&&u.patchFlag!==32&&_o.push(u),u}const W=Xb;function Xb(e,t=null,n=null,o=0,a=null,r=!1){if((!e||e===Gm)&&(e=$n),zt(e)){const i=oa(e,t,!0);return n&&V0(i,n),ks>0&&!r&&_o&&(i.shapeFlag&6?_o[_o.indexOf(e)]=i:_o.push(i)),i.patchFlag|=-2,i}if(aw(e)&&(e=e.__vccOpts),t){t=pl(t);let{class:i,style:u}=t;i&&!Ze(i)&&(t.class=$(i)),ct(u)&&(Pm(u)&&!Ie(u)&&(u=ln({},u)),t.style=De(u))}const l=Ze(e)?1:hb(e)?128:qb(e)?64:ct(e)?4:Xe(e)?2:0;return k(e,t,n,o,a,l,r,!0)}function pl(e){return e?Pm(e)||dc in e?ln({},e):e:null}function oa(e,t,n=!1){const{props:o,ref:a,patchFlag:r,children:l}=e,i=t?ft(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:i,key:i&&h4(i),ref:t&&t.ref?n&&a?Ie(a)?a.concat(qi(t)):[a,qi(t)]:qi(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Fe?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&oa(e.ssContent),ssFallback:e.ssFallback&&oa(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function vt(e=" ",t=0){return W(Il,null,e,t)}function Z(e="",t=!1){return t?(y(),oe($n,null,e)):W($n,null,e)}function $o(e){return e==null||typeof e=="boolean"?W($n):Ie(e)?W(Fe,null,e.slice()):typeof e=="object"?$a(e):W(Il,null,String(e))}function $a(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:oa(e)}function V0(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(Ie(t))n=16;else if(typeof t=="object")if(o&65){const a=t.default;a&&(a._c&&(a._d=!1),V0(e,a()),a._c&&(a._d=!0));return}else{n=32;const a=t._;!a&&!(dc in t)?t._ctx=sn:a===3&&sn&&(sn.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Xe(t)?(t={default:t,_ctx:sn},n=32):(t=String(t),o&64?(n=16,t=[vt(t)]):n=8);e.children=t,e.shapeFlag|=n}function ft(...e){const t={};for(let n=0;nvn||sn;let $u,ef;{const e=mm(),t=(n,o)=>{let a;return(a=e[n])||(a=e[n]=[]),a.push(o),r=>{a.length>1?a.forEach(l=>l(r)):a[0](r)}};$u=t("__VUE_INSTANCE_SETTERS__",n=>vn=n),ef=t("__VUE_SSR_SETTERS__",n=>fc=n)}const Gs=e=>{const t=vn;return $u(e),e.scope.on(),()=>{e.scope.off(),$u(t)}},Zp=()=>{vn&&vn.scope.off(),$u(null)};function m4(e){return e.vnode.shapeFlag&4}let fc=!1;function ew(e,t=!1){t&&ef(t);const{props:n,children:o}=e.vnode,a=m4(e);Vb(e,n,a,t),Hb(e,o);const r=a?tw(e,t):void 0;return t&&ef(!1),r}function tw(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=hr(new Proxy(e.ctx,Tb));const{setup:o}=n;if(o){const a=e.setupContext=o.length>1?y4(e):null,r=Gs(e);Ir();const l=Pa(o,e,0,[e.props,a]);if(Rr(),r(),ys(l)){if(l.then(Zp,Zp),t)return l.then(i=>{Qp(e,i,t)}).catch(i=>{ac(i,e,0)});e.asyncDep=l}else Qp(e,l,t)}else g4(e,t)}function Qp(e,t,n){Xe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ct(t)&&(e.setupState=Hm(t)),g4(e,n)}let ev;function g4(e,t,n){const o=e.type;if(!e.render){if(!t&&ev&&!o.render){const a=o.template||R0(e).template;if(a){const{isCustomElement:r,compilerOptions:l}=e.appContext.config,{delimiters:i,compilerOptions:u}=o,d=ln(ln({isCustomElement:r,delimiters:i},l),u);o.render=ev(a,d)}}e.render=o.render||Et}{const a=Gs(e);Ir();try{Ab(e)}finally{Rr(),a()}}}function nw(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return zn(e,"get","$attrs"),t[n]}}))}function y4(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return nw(e)},slots:e.slots,emit:e.emit,expose:t}}function pc(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Hm(hr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ls)return ls[n](e)},has(t,n){return n in t||n in ls}}))}function ow(e,t=!0){return Xe(e)?e.displayName||e.name:e.name||t&&e.__name}function aw(e){return Xe(e)&&"__vccOpts"in e}const S=(e,t)=>Vm(e,t,fc);function qe(e,t,n){const o=arguments.length;return o===2?ct(t)&&!Ie(t)?zt(t)?W(e,null,[t]):W(e,t):W(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&zt(n)&&(n=[n]),W(e,t,n))}const rw="3.4.21",lw=Et;/** +* @vue/runtime-dom v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const sw="http://www.w3.org/2000/svg",iw="http://www.w3.org/1998/Math/MathML",Ta=typeof document<"u"?document:null,tv=Ta&&Ta.createElement("template"),uw={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const a=t==="svg"?Ta.createElementNS(sw,e):t==="mathml"?Ta.createElementNS(iw,e):Ta.createElement(e,n?{is:n}:void 0);return e==="select"&&o&&o.multiple!=null&&a.setAttribute("multiple",o.multiple),a},createText:e=>Ta.createTextNode(e),createComment:e=>Ta.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ta.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,a,r){const l=n?n.previousSibling:t.lastChild;if(a&&(a===r||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),n),!(a===r||!(a=a.nextSibling)););else{tv.innerHTML=o==="svg"?`${e}`:o==="mathml"?`${e}`:e;const i=tv.content;if(o==="svg"||o==="mathml"){const u=i.firstChild;for(;u.firstChild;)i.appendChild(u.firstChild);i.removeChild(u)}t.insertBefore(i,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},_a="transition",Kl="animation",vl=Symbol("_vtc"),nn=(e,{slots:t})=>qe(wb,b4(e),t);nn.displayName="Transition";const _4={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},cw=nn.props=ln({},Zm,_4),Za=(e,t=[])=>{Ie(e)?e.forEach(n=>n(...t)):e&&e(...t)},nv=e=>e?Ie(e)?e.some(t=>t.length>1):e.length>1:!1;function b4(e){const t={};for(const z in e)z in _4||(t[z]=e[z]);if(e.css===!1)return t;const{name:n="v",type:o,duration:a,enterFromClass:r=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:i=`${n}-enter-to`,appearFromClass:u=r,appearActiveClass:d=l,appearToClass:f=i,leaveFromClass:c=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,m=dw(a),v=m&&m[0],_=m&&m[1],{onBeforeEnter:g,onEnter:w,onEnterCancelled:b,onLeave:C,onLeaveCancelled:x,onBeforeAppear:E=g,onAppear:O=w,onAppearCancelled:T=b}=t,V=(z,j,K)=>{Ca(z,j?f:i),Ca(z,j?d:l),K&&K()},L=(z,j)=>{z._isLeaving=!1,Ca(z,c),Ca(z,h),Ca(z,p),j&&j()},P=z=>(j,K)=>{const F=z?O:w,B=()=>V(j,z,K);Za(F,[j,B]),ov(()=>{Ca(j,z?u:r),Yo(j,z?f:i),nv(F)||av(j,o,v,B)})};return ln(t,{onBeforeEnter(z){Za(g,[z]),Yo(z,r),Yo(z,l)},onBeforeAppear(z){Za(E,[z]),Yo(z,u),Yo(z,d)},onEnter:P(!1),onAppear:P(!0),onLeave(z,j){z._isLeaving=!0;const K=()=>L(z,j);Yo(z,c),C4(),Yo(z,p),ov(()=>{z._isLeaving&&(Ca(z,c),Yo(z,h),nv(C)||av(z,o,_,K))}),Za(C,[z,K])},onEnterCancelled(z){V(z,!1),Za(b,[z])},onAppearCancelled(z){V(z,!0),Za(T,[z])},onLeaveCancelled(z){L(z),Za(x,[z])}})}function dw(e){if(e==null)return null;if(ct(e))return[id(e.enter),id(e.leave)];{const t=id(e);return[t,t]}}function id(e){return k_(e)}function Yo(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[vl]||(e[vl]=new Set)).add(t)}function Ca(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[vl];n&&(n.delete(t),n.size||(e[vl]=void 0))}function ov(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let fw=0;function av(e,t,n,o){const a=e._endId=++fw,r=()=>{a===e._endId&&o()};if(n)return setTimeout(r,n);const{type:l,timeout:i,propCount:u}=w4(e,t);if(!l)return o();const d=l+"end";let f=0;const c=()=>{e.removeEventListener(d,p),r()},p=h=>{h.target===e&&++f>=u&&c()};setTimeout(()=>{f(n[m]||"").split(", "),a=o(`${_a}Delay`),r=o(`${_a}Duration`),l=rv(a,r),i=o(`${Kl}Delay`),u=o(`${Kl}Duration`),d=rv(i,u);let f=null,c=0,p=0;t===_a?l>0&&(f=_a,c=l,p=r.length):t===Kl?d>0&&(f=Kl,c=d,p=u.length):(c=Math.max(l,d),f=c>0?l>d?_a:Kl:null,p=f?f===_a?r.length:u.length:0);const h=f===_a&&/\b(transform|all)(,|$)/.test(o(`${_a}Property`).toString());return{type:f,timeout:c,propCount:p,hasTransform:h}}function rv(e,t){for(;e.lengthlv(n)+lv(e[o])))}function lv(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function C4(){return document.body.offsetHeight}function pw(e,t,n){const o=e[vl];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Tu=Symbol("_vod"),S4=Symbol("_vsh"),bt={beforeMount(e,{value:t},{transition:n}){e[Tu]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Wl(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),Wl(e,!0),o.enter(e)):o.leave(e,()=>{Wl(e,!1)}):Wl(e,t))},beforeUnmount(e,{value:t}){Wl(e,t)}};function Wl(e,t){e.style.display=t?e[Tu]:"none",e[S4]=!t}const vw=Symbol(""),hw=/(^|;)\s*display\s*:/;function mw(e,t,n){const o=e.style,a=Ze(n);let r=!1;if(n&&!a){if(t)if(Ze(t))for(const l of t.split(";")){const i=l.slice(0,l.indexOf(":")).trim();n[i]==null&&Ui(o,i,"")}else for(const l in t)n[l]==null&&Ui(o,l,"");for(const l in n)l==="display"&&(r=!0),Ui(o,l,n[l])}else if(a){if(t!==n){const l=o[vw];l&&(n+=";"+l),o.cssText=n,r=hw.test(n)}}else t&&e.removeAttribute("style");Tu in e&&(e[Tu]=r?o.display:"",e[S4]&&(o.display="none"))}const sv=/\s*!important$/;function Ui(e,t,n){if(Ie(n))n.forEach(o=>Ui(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=gw(e,t);sv.test(n)?e.setProperty(qa(o),n.replace(sv,""),"important"):e[o]=n}}const iv=["Webkit","Moz","ms"],ud={};function gw(e,t){const n=ud[t];if(n)return n;let o=lo(t);if(o!=="filter"&&o in e)return ud[t]=o;o=Ys(o);for(let a=0;acd||(Sw.then(()=>cd=0),cd=Date.now());function Ew(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;no(xw(o,n.value),t,5,[o])};return n.value=e,n.attached=kw(),n}function xw(e,t){if(Ie(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>a=>!a._stopped&&o&&o(a))}else return t}const fv=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Mw=(e,t,n,o,a,r,l,i,u)=>{const d=a==="svg";t==="class"?pw(e,o,d):t==="style"?mw(e,n,o):ec(t)?y0(t)||ww(e,t,n,o,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):$w(e,t,o,d))?_w(e,t,o,r,l,i,u):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),yw(e,t,o,d))};function $w(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&fv(t)&&Xe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return fv(t)&&Ze(n)?!1:t in e}const k4=new WeakMap,E4=new WeakMap,Au=Symbol("_moveCb"),pv=Symbol("_enterCb"),x4={name:"TransitionGroup",props:ln({},cw,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=rt(),o=Jm();let a,r;return ua(()=>{if(!a.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!Iw(a[0].el,n.vnode.el,l))return;a.forEach(Aw),a.forEach(Ow);const i=a.filter(Nw);C4(),i.forEach(u=>{const d=u.el,f=d.style;Yo(d,l),f.transform=f.webkitTransform=f.transitionDuration="";const c=d[Au]=p=>{p&&p.target!==d||(!p||/transform$/.test(p.propertyName))&&(d.removeEventListener("transitionend",c),d[Au]=null,Ca(d,l))};d.addEventListener("transitionend",c)})}),()=>{const l=xt(e),i=b4(l);let u=l.tag||Fe;a=r,r=t.default?I0(t.default()):[];for(let d=0;ddelete e.mode;x4.props;const M4=x4;function Aw(e){const t=e.el;t[Au]&&t[Au](),t[pv]&&t[pv]()}function Ow(e){E4.set(e,e.el.getBoundingClientRect())}function Nw(e){const t=k4.get(e),n=E4.get(e),o=t.left-n.left,a=t.top-n.top;if(o||a){const r=e.el.style;return r.transform=r.webkitTransform=`translate(${o}px,${a}px)`,r.transitionDuration="0s",e}}function Iw(e,t,n){const o=e.cloneNode(),a=e[vl];a&&a.forEach(i=>{i.split(/\s+/).forEach(u=>u&&o.classList.remove(u))}),n.split(/\s+/).forEach(i=>i&&o.classList.add(i)),o.style.display="none";const r=t.nodeType===1?t:t.parentNode;r.appendChild(o);const{hasTransform:l}=w4(o);return r.removeChild(o),l}const hl=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Ie(t)?n=>Wi(t,n):t};function Rw(e){e.target.composing=!0}function vv(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ea=Symbol("_assign"),B0={created(e,{modifiers:{lazy:t,trim:n,number:o}},a){e[ea]=hl(a);const r=o||a.props&&a.props.type==="number";Aa(e,t?"change":"input",l=>{if(l.target.composing)return;let i=e.value;n&&(i=i.trim()),r&&(i=Kd(i)),e[ea](i)}),n&&Aa(e,"change",()=>{e.value=e.value.trim()}),t||(Aa(e,"compositionstart",Rw),Aa(e,"compositionend",vv),Aa(e,"change",vv))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:o,number:a}},r){if(e[ea]=hl(r),e.composing)return;const l=a||e.type==="number"?Kd(e.value):e.value,i=t??"";l!==i&&(document.activeElement===e&&e.type!=="range"&&(n||o&&e.value.trim()===i)||(e.value=i))}},Ou={deep:!0,created(e,t,n){e[ea]=hl(n),Aa(e,"change",()=>{const o=e._modelValue,a=T4(e),r=e.checked,l=e[ea];if(Ie(o)){const i=ym(o,a),u=i!==-1;if(r&&!u)l(o.concat(a));else if(!r&&u){const d=[...o];d.splice(i,1),l(d)}}else if(tc(o)){const i=new Set(o);r?i.add(a):i.delete(a),l(i)}else l(A4(e,r))})},mounted:hv,beforeUpdate(e,t,n){e[ea]=hl(n),hv(e,t,n)}};function hv(e,{value:t,oldValue:n},o){e._modelValue=t,Ie(t)?e.checked=ym(t,o.props.value)>-1:tc(t)?e.checked=t.has(o.props.value):t!==n&&(e.checked=dl(t,A4(e,!0)))}const $4={created(e,{value:t},n){e.checked=dl(t,n.props.value),e[ea]=hl(n),Aa(e,"change",()=>{e[ea](T4(e))})},beforeUpdate(e,{value:t,oldValue:n},o){e[ea]=hl(o),t!==n&&(e.checked=dl(t,o.props.value))}};function T4(e){return"_value"in e?e._value:e.value}function A4(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Pw=["ctrl","shift","alt","meta"],Lw={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pw.some(n=>e[`${n}Key`]&&!t.includes(n))},Ge=(e,t)=>{const n=e._withMods||(e._withMods={}),o=t.join(".");return n[o]||(n[o]=(a,...r)=>{for(let l=0;l{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=a=>{if(!("key"in a))return;const r=qa(a.key);if(t.some(l=>l===r||Vw[l]===r))return e(a)})},Bw=ln({patchProp:Mw},uw);let mv;function O4(){return mv||(mv=Fb(Bw))}const Ha=(...e)=>{O4().render(...e)},N4=(...e)=>{const t=O4().createApp(...e),{mount:n}=t;return t.mount=o=>{const a=Hw(o);if(!a)return;const r=t._component;!Xe(r)&&!r.render&&!r.template&&(r.template=a.innerHTML),a.innerHTML="";const l=n(a,!1,zw(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),l},t};function zw(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Hw(e){return Ze(e)?document.querySelector(e):e}const Dw="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAABkCAYAAAA8AQ3AAAAJXUlEQVR4Xu3daahNXRzH8eeNSCQpIXkhJEkSkRISCUmJJEqkiFIIESKEIimZklJemMqYWUookjFTMmbKlClT7Kfffvqv1l37nHvuufs+ddbzfP/1KXevtfc5d9f5PWutvc59/qpXr14CADH4KzwAAJWKwAIQDQILQDQILADRILAARIPAAhANAgtANAgsANEgsABEg8ACEA0CC0A0CCwA0SCwAESDwAIQDQILQDQILADRILAARIPAAhANAgtANAgsANEgsABEg8ACEA0CC0A0CCwA0SCwAESDwAIQDQILQDQILADRILAARIPAAhANAgtANAgsANEgsABEg8ACEA0CC1Fp2LBhMnjw4GTQoEHpv8N2/LcRWBVo5MiRyY8fP1LdunXLtP/f9OvXL7l+/Xry6dOnJCwdu3btWtKrV6/Meca/n8V8+fIlefLkSXL8+PGkY8eOmWvInTt3XP9FixZl2ktZv369O//mzZuZdpRGYFWgmTNnug9k7969M+3/J2vWrEn+/PnjRVThUp9ly5Zlzhf/fta0tm3blrnOx48fXfuHDx8y7aV8+/bNnf/ixYtMO0ojsCoQgfWPq1evuvugQDp69Ggya9aspFOnTknnzp3T+3TkyBHXR3Xx4sXMdfz7uWPHjvQavnnz5iVbtmxJR2p+TZo0qcp1/MBSjRkzJvNaxcyYMaPKuQRW7RBYFYjAqpfMmTPH3YOvX78mAwYMyPQxAwcOTPtYTZ48uUq7fz+ru45ofczq1atXVdrCwLp//37m/GIUUH4RWLVDYFWgug6sBg0apOsyTZo0ybRVokaNGrnp069fv5IWLVpk+oRatWqV/P79Oz3n8+fPSf369V1bOYElWi9T6Xr+8TCwVF26dMmcH+rfv394GoFVSwRWBaqLwNK0SQvIWuD1yxZ8O3ToUKX/ihUrkjdv3tTI0qVLU/Zznz59Mq9vJkyY4PqNHz8+017Ipk2b3PvdvHlzpr2YnTt3uvP89axyA2v//v2uvx+WFlgvX7507adOncqcH7p8+XLaVwH47t279N8EVu0QWBUob2BpWqORSXWlD8/w4cPdOYcPHw67FC2tJfXt29f9fObMmcx7MPfu3XP92rZtm2kv5Pbt22n/nz9/pqOtsL2Ypk2bulHWhQsX3PFyA8vWzrRu5h+3wHrw4EFy5cqV9N96vWbNmmWuYdq0aeMeGpw8eTKdZqoIrNohsCpQ3sDyH/+fPn06GTt2bPrBb926dbrobKVRj52jrQNafC5Ej+Ot9OHTmpHOef36dXpM4VhoT5Rez6qc9R49gVNpm0HYVop+J5UfCOUElj99u3v3bpU2P7B0HSuNCMPrmF27drl+mj4SWPkQWBUoT2BNnTrVnXvr1q1Muxw8eND10dQxbPcpiCyYVAsWLHBtmhZaKdjCczdu3Ojap0yZkmkvxkZJ586dy7SVcuPGjfRcTX3tmH8/p0+fnt5Tn0JKT/FOnDjhRkN6D+G99wNLP9tCuhb8w/chuncaJaossAmsfAisCpQnsLp3756sXLky2b59e9KyZctMuwwbNsxdP3x0Hzp//rzrq6mg36ZRm4XL06dPM+e+f/8+bfPDo5TmzZu719OaVNheir/NwY7597MmpSlhjx49MtcOAysMwrD/4sWLXbttgSCw8iGwKlCewAopVHr27JlMnDgxHUXMnj07WbVqlbv+kiVLMucYbdq0UiD5T96M1mWs/NGav8a1d+/ezHnVsVGOprNhWym2wK1pqh0rN7C0633atGmZa4eBpfthTzOfP3+e6f/27du0zd9kSmDlQ2BVoLoIrIULF1aZyhWrYoE1atQo10cfSm0bCPuIRiJWfjD5QVbsqy7F2BqcBUM57Amefnc75t/PIUOGpCHu06K5vtqjzaM2YlRohr9zGFiiHfFWWge04yNGjHDH9QTWjhNY+RBYFShvYPlrVCoFwOPHj9Od3BqB2DqPqlBgKWDsKaM+uP4HsRBby/n+/Xv6s/Z92drNo0ePMv1L0XqPSkEZtlVHr2vvW0/x7Hg5i+56QGG1devWKm2FAktTWBsRXrp0yR23J516P/6TTgIrHwKrAuUJLC2KWyksCm1s1DGrMLAaN27s9gqpNIUMzw9pwd1KU0+t51hpGhr2L2XPnj3ufI0Uw/Zi/CmsFvzteDmBJTbNC9flCgWWnD17Nj2u4NI2BgW+lfZ0+X0JrHwIrAqUJ7AUUiqNcBQ+YbssX77cXT8MLFsDUh04cCBzbiH+iEojC9t7pWOF1r1K0cMCm5rpCZyuH/YJaRe/vQct8vu7+ssNLBvhaWTqHy8WWP60ePfu3VUW/sO9ZwRWPgRWBcoTWLb+o7WcsE3at2/vPtgqP7D8bQjlTuUKbTw9dOhQpl9NbdiwwV1HH+7wg+/TiMbffR6GcLmBpe0UKn/hXooFlth/KHSOha2m4GE/AisfAqsC+R8wPa3SGlIp9veg9DebVJqejB49usp19aVg/0+cqOzDPW7cOHdMIxSFgL6WUojWbcL37E8zrQpNR2tKoyrbBKpSyOrppp4+atSmdoWPNrVaQKjCaZyUG1j+5lr/PxjVBZamwmFpgT/sR2DlQ2BVoHIfw6tsr5O+u+eXFsI1+vD/msGxY8fcQrEFVk2eKFqFXwo2Wti3evbsWaa9XNp4qc2cYRX7+1j79u0rOAUtN7D8XewaOdrx6gJL9KVrK/8ppY/AyofAqkB5Aku0A73QdwkVXqtXr0772KjEAsv2DNWkwqmSWbduneszd+7cTHttaZe8RluFgkq/h0JAT/fC80xtpti6VyrtybJjFlgaxYb9Ze3ate51iv3+BFY+BNZ/lL4IrL1U+qsFeoo3dOjQTJ+69vDhw/TDWOy7hXVBC9zz589P/15Wnikn4kRgoU507drVjS405QzbgbpAYKFO+GtNhb6HB9QFAgu5ac+TrYmxNoN/E4GF3LSQb1Wb//0VUFMEFnJr166d2w/2by22A0JgAYgGgQUgGgQWgGgQWACiQWABiAaBBSAaBBaAaBBYAKJBYAGIBoEFIBoEFoBoEFgAokFgAYgGgQUgGgQWgGgQWACiQWABiAaBBSAaBBaAaBBYAKJBYAGIBoEFIBoEFoBoEFgAokFgAYgGgQUgGgQWgGgQWACiQWABiAaBBSAaBBaAaBBYAKJBYAGIBoEFIBoEFoBoEFgAokFgAYgGgQUgGgQWgGj8DTX1H3SCKTxHAAAAAElFTkSuQmCC",I4=(e,t)=>{const n=e.__vccOpts||e;for(const[o,a]of t)n[o]=a;return n},Fw=e=>(Um("data-v-3cc994dc"),e=e(),Ym(),e),Kw={class:"greetings"},Ww={class:"green"},jw=Fw(()=>k("h3",null,[vt(" You can see detail with project "),k("a",{href:"https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-database-parent",target:"_blank",rel:"noopener"},"Lazy ORM"),vt(" + "),k("a",{href:"https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-smart-integration/wu-smart-agent-network",target:"_blank",rel:"noopener"},"NetWork Local Client"),vt(". ")],-1)),qw={__name:"HelloWorld",props:{msg:{type:String,required:!0}},setup(e){return(t,n)=>(y(),M("div",Kw,[k("h1",Ww,Me(e.msg),1),jw]))}},Uw=I4(qw,[["__scopeId","data-v-3cc994dc"]]),Yw='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',Gw=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,gv=e=>Array.from(e.querySelectorAll(Yw)).filter(t=>Xw(t)&&Gw(t)),Xw=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},Yi=function(e,t,...n){let o;t.includes("mouse")||t.includes("click")?o="MouseEvents":t.includes("key")?o="KeyboardEvent":o="HTMLEvents";const a=document.createEvent(o);return a.initEvent(t,...n),e.dispatchEvent(a),e},R4=e=>!e.getAttribute("aria-owns"),P4=(e,t,n)=>{const{parentNode:o}=e;if(!o)return null;const a=o.querySelectorAll(n),r=Array.prototype.indexOf.call(a,e);return a[r+t]||null},Gi=e=>{e&&(e.focus(),!R4(e)&&e.click())},jt=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const r=e==null?void 0:e(a);if(n===!1||!r)return t==null?void 0:t(a)},yv=e=>t=>t.pointerType==="mouse"?e(t):void 0;var Jw=Object.defineProperty,Zw=Object.defineProperties,Qw=Object.getOwnPropertyDescriptors,_v=Object.getOwnPropertySymbols,e5=Object.prototype.hasOwnProperty,t5=Object.prototype.propertyIsEnumerable,bv=(e,t,n)=>t in e?Jw(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,n5=(e,t)=>{for(var n in t||(t={}))e5.call(t,n)&&bv(e,n,t[n]);if(_v)for(var n of _v(t))t5.call(t,n)&&bv(e,n,t[n]);return e},o5=(e,t)=>Zw(e,Qw(t));function wv(e,t){var n;const o=Rt();return gn(()=>{o.value=e()},o5(n5({},t),{flush:(n=t==null?void 0:t.flush)!=null?n:"sync"})),Ol(o)}var Cv;const gt=typeof window<"u",a5=e=>typeof e<"u",r5=e=>typeof e=="function",l5=e=>typeof e=="string",ml=()=>{},s5=gt&&((Cv=window==null?void 0:window.navigator)==null?void 0:Cv.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Da(e){return typeof e=="function"?e():s(e)}function L4(e,t){function n(...o){return new Promise((a,r)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(a).catch(r)})}return n}function i5(e,t={}){let n,o,a=ml;const r=i=>{clearTimeout(i),a(),a=ml};return i=>{const u=Da(e),d=Da(t.maxWait);return n&&r(n),u<=0||d!==void 0&&d<=0?(o&&(r(o),o=null),Promise.resolve(i())):new Promise((f,c)=>{a=t.rejectOnCancel?c:f,d&&!o&&(o=setTimeout(()=>{n&&r(n),o=null,f(i())},d)),n=setTimeout(()=>{o&&r(o),o=null,f(i())},u)})}}function u5(e,t=!0,n=!0,o=!1){let a=0,r,l=!0,i=ml,u;const d=()=>{r&&(clearTimeout(r),r=void 0,i(),i=ml)};return c=>{const p=Da(e),h=Date.now()-a,m=()=>u=c();return d(),p<=0?(a=Date.now(),m()):(h>p&&(n||!l)?(a=Date.now(),m()):t&&(u=new Promise((v,_)=>{i=o?_:v,r=setTimeout(()=>{a=Date.now(),l=!0,v(m()),d()},Math.max(0,p-h))})),!n&&!r&&(r=setTimeout(()=>l=!0,p)),l=!1,u)}}function c5(e){return e}function Xs(e){return wm()?(Cm(e),!0):!1}function d5(e,t=200,n={}){return L4(i5(t,n),e)}function f5(e,t=200,n={}){const o=R(e.value),a=d5(()=>{o.value=e.value},t,n);return pe(e,()=>a()),o}function V4(e,t=200,n=!1,o=!0,a=!1){return L4(u5(t,n,o,a),e)}function z0(e,t=!0){rt()?et(e):t?e():We(e)}function Cr(e,t,n={}){const{immediate:o=!0}=n,a=R(!1);let r=null;function l(){r&&(clearTimeout(r),r=null)}function i(){a.value=!1,l()}function u(...d){l(),a.value=!0,r=setTimeout(()=>{a.value=!1,r=null,e(...d)},Da(t))}return o&&(a.value=!0,gt&&u()),Xs(i),{isPending:Ol(a),start:u,stop:i}}function Ln(e){var t;const n=Da(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Lr=gt?window:void 0,p5=gt?window.document:void 0;function Vt(...e){let t,n,o,a;if(l5(e[0])||Array.isArray(e[0])?([n,o,a]=e,t=Lr):[t,n,o,a]=e,!t)return ml;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const r=[],l=()=>{r.forEach(f=>f()),r.length=0},i=(f,c,p,h)=>(f.addEventListener(c,p,h),()=>f.removeEventListener(c,p,h)),u=pe(()=>[Ln(t),Da(a)],([f,c])=>{l(),f&&r.push(...n.flatMap(p=>o.map(h=>i(f,p,h,c))))},{immediate:!0,flush:"post"}),d=()=>{u(),l()};return Xs(d),d}let Sv=!1;function H0(e,t,n={}){const{window:o=Lr,ignore:a=[],capture:r=!0,detectIframe:l=!1}=n;if(!o)return;s5&&!Sv&&(Sv=!0,Array.from(o.document.body.children).forEach(p=>p.addEventListener("click",ml)));let i=!0;const u=p=>a.some(h=>{if(typeof h=="string")return Array.from(o.document.querySelectorAll(h)).some(m=>m===p.target||p.composedPath().includes(m));{const m=Ln(h);return m&&(p.target===m||p.composedPath().includes(m))}}),f=[Vt(o,"click",p=>{const h=Ln(e);if(!(!h||h===p.target||p.composedPath().includes(h))){if(p.detail===0&&(i=!u(p)),!i){i=!0;return}t(p)}},{passive:!0,capture:r}),Vt(o,"pointerdown",p=>{const h=Ln(e);h&&(i=!p.composedPath().includes(h)&&!u(p))},{passive:!0}),l&&Vt(o,"blur",p=>{var h;const m=Ln(e);((h=o.document.activeElement)==null?void 0:h.tagName)==="IFRAME"&&!(m!=null&&m.contains(o.document.activeElement))&&t(p)})].filter(Boolean);return()=>f.forEach(p=>p())}function B4(e,t=!1){const n=R(),o=()=>n.value=!!e();return o(),z0(o,t),n}function v5(e){return JSON.parse(JSON.stringify(e))}const kv=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Ev="__vueuse_ssr_handlers__";kv[Ev]=kv[Ev]||{};function h5(e,t,{window:n=Lr,initialValue:o=""}={}){const a=R(o),r=S(()=>{var l;return Ln(t)||((l=n==null?void 0:n.document)==null?void 0:l.documentElement)});return pe([r,()=>Da(e)],([l,i])=>{var u;if(l&&n){const d=(u=n.getComputedStyle(l).getPropertyValue(i))==null?void 0:u.trim();a.value=d||o}},{immediate:!0}),pe(a,l=>{var i;(i=r.value)!=null&&i.style&&r.value.style.setProperty(Da(e),l)}),a}function m5({document:e=p5}={}){if(!e)return R("visible");const t=R(e.visibilityState);return Vt(e,"visibilitychange",()=>{t.value=e.visibilityState}),t}var xv=Object.getOwnPropertySymbols,g5=Object.prototype.hasOwnProperty,y5=Object.prototype.propertyIsEnumerable,_5=(e,t)=>{var n={};for(var o in e)g5.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&xv)for(var o of xv(e))t.indexOf(o)<0&&y5.call(e,o)&&(n[o]=e[o]);return n};function Kt(e,t,n={}){const o=n,{window:a=Lr}=o,r=_5(o,["window"]);let l;const i=B4(()=>a&&"ResizeObserver"in a),u=()=>{l&&(l.disconnect(),l=void 0)},d=pe(()=>Ln(e),c=>{u(),i.value&&a&&c&&(l=new ResizeObserver(t),l.observe(c,r))},{immediate:!0,flush:"post"}),f=()=>{u(),d()};return Xs(f),{isSupported:i,stop:f}}function Mv(e,t={}){const{reset:n=!0,windowResize:o=!0,windowScroll:a=!0,immediate:r=!0}=t,l=R(0),i=R(0),u=R(0),d=R(0),f=R(0),c=R(0),p=R(0),h=R(0);function m(){const v=Ln(e);if(!v){n&&(l.value=0,i.value=0,u.value=0,d.value=0,f.value=0,c.value=0,p.value=0,h.value=0);return}const _=v.getBoundingClientRect();l.value=_.height,i.value=_.bottom,u.value=_.left,d.value=_.right,f.value=_.top,c.value=_.width,p.value=_.x,h.value=_.y}return Kt(e,m),pe(()=>Ln(e),v=>!v&&m()),a&&Vt("scroll",m,{capture:!0,passive:!0}),o&&Vt("resize",m,{passive:!0}),z0(()=>{r&&m()}),{height:l,bottom:i,left:u,right:d,top:f,width:c,x:p,y:h,update:m}}var $v=Object.getOwnPropertySymbols,b5=Object.prototype.hasOwnProperty,w5=Object.prototype.propertyIsEnumerable,C5=(e,t)=>{var n={};for(var o in e)b5.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&$v)for(var o of $v(e))t.indexOf(o)<0&&w5.call(e,o)&&(n[o]=e[o]);return n};function z4(e,t,n={}){const o=n,{window:a=Lr}=o,r=C5(o,["window"]);let l;const i=B4(()=>a&&"MutationObserver"in a),u=()=>{l&&(l.disconnect(),l=void 0)},d=pe(()=>Ln(e),c=>{u(),i.value&&a&&c&&(l=new MutationObserver(t),l.observe(c,r))},{immediate:!0}),f=()=>{u(),d()};return Xs(f),{isSupported:i,stop:f}}var Tv;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(Tv||(Tv={}));var S5=Object.defineProperty,Av=Object.getOwnPropertySymbols,k5=Object.prototype.hasOwnProperty,E5=Object.prototype.propertyIsEnumerable,Ov=(e,t,n)=>t in e?S5(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x5=(e,t)=>{for(var n in t||(t={}))k5.call(t,n)&&Ov(e,n,t[n]);if(Av)for(var n of Av(t))E5.call(t,n)&&Ov(e,n,t[n]);return e};const M5={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};x5({linear:c5},M5);function H4(e,t,n,o={}){var a,r,l;const{clone:i=!1,passive:u=!1,eventName:d,deep:f=!1,defaultValue:c}=o,p=rt(),h=n||(p==null?void 0:p.emit)||((a=p==null?void 0:p.$emit)==null?void 0:a.bind(p))||((l=(r=p==null?void 0:p.proxy)==null?void 0:r.$emit)==null?void 0:l.bind(p==null?void 0:p.proxy));let m=d;t||(t="modelValue"),m=d||m||`update:${t.toString()}`;const v=g=>i?r5(i)?i(g):v5(g):g,_=()=>a5(e[t])?v(e[t]):c;if(u){const g=_(),w=R(g);return pe(()=>e[t],b=>w.value=v(b)),pe(w,b=>{(b!==e[t]||f)&&h(m,b)},{deep:f}),w}else return S({get(){return _()},set(g){h(m,g)}})}function $5({window:e=Lr}={}){if(!e)return R(!1);const t=R(e.document.hasFocus());return Vt(e,"blur",()=>{t.value=!1}),Vt(e,"focus",()=>{t.value=!0}),t}function T5(e={}){const{window:t=Lr,initialWidth:n=1/0,initialHeight:o=1/0,listenOrientation:a=!0,includeScrollbar:r=!0}=e,l=R(n),i=R(o),u=()=>{t&&(r?(l.value=t.innerWidth,i.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,i.value=t.document.documentElement.clientHeight))};return u(),z0(u),Vt("resize",u,{passive:!0}),a&&Vt("orientationchange",u,{passive:!0}),{width:l,height:i}}const D4=()=>gt&&/firefox/i.test(window.navigator.userAgent),A5=(e,t)=>{if(!gt||!e||!t)return!1;const n=e.getBoundingClientRect();let o;return t instanceof Element?o=t.getBoundingClientRect():o={top:0,right:window.innerWidth,bottom:window.innerHeight,left:0},n.topo.top&&n.right>o.left&&n.left{let t=0,n=e;for(;n;)t+=n.offsetTop,n=n.offsetParent;return t},tf=(e,t)=>Math.abs(Nv(e)-Nv(t)),D0=e=>{let t,n;return e.type==="touchend"?(n=e.changedTouches[0].clientY,t=e.changedTouches[0].clientX):e.type.startsWith("touch")?(n=e.touches[0].clientY,t=e.touches[0].clientX):(n=e.clientY,t=e.clientX),{clientX:t,clientY:n}};function O5(e,t,n,o){const a=n-t;return e/=o/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}var F4=typeof global=="object"&&global&&global.Object===Object&&global,N5=typeof self=="object"&&self&&self.Object===Object&&self,Co=F4||N5||Function("return this")(),so=Co.Symbol,K4=Object.prototype,I5=K4.hasOwnProperty,R5=K4.toString,jl=so?so.toStringTag:void 0;function P5(e){var t=I5.call(e,jl),n=e[jl];try{e[jl]=void 0;var o=!0}catch{}var a=R5.call(e);return o&&(t?e[jl]=n:delete e[jl]),a}var L5=Object.prototype,V5=L5.toString;function B5(e){return V5.call(e)}var z5="[object Null]",H5="[object Undefined]",Iv=so?so.toStringTag:void 0;function Vr(e){return e==null?e===void 0?H5:z5:Iv&&Iv in Object(e)?P5(e):B5(e)}function Ro(e){return e!=null&&typeof e=="object"}var D5="[object Symbol]";function vc(e){return typeof e=="symbol"||Ro(e)&&Vr(e)==D5}function F0(e,t){for(var n=-1,o=e==null?0:e.length,a=Array(o);++n0){if(++t>=_9)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function S9(e){return function(){return e}}var Nu=function(){try{var e=zr(Object,"defineProperty");return e({},"",{}),e}catch{}}(),k9=Nu?function(e,t){return Nu(e,"toString",{configurable:!0,enumerable:!1,value:S9(t),writable:!0})}:K0;const E9=k9;var q4=C9(E9);function x9(e,t){for(var n=-1,o=e==null?0:e.length;++n-1}var O9=9007199254740991,N9=/^(?:0|[1-9]\d*)$/;function hc(e,t){var n=typeof e;return t=t??O9,!!t&&(n=="number"||n!="symbol"&&N9.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=P9}function Pl(e){return e!=null&&U0(e.length)&&!W0(e)}function L9(e,t,n){if(!On(n))return!1;var o=typeof t;return(o=="number"?Pl(n)&&hc(t,n.length):o=="string"&&t in n)?Js(n[t],e):!1}function V9(e){return G4(function(t,n){var o=-1,a=n.length,r=a>1?n[a-1]:void 0,l=a>2?n[2]:void 0;for(r=e.length>3&&typeof r=="function"?(a--,r):void 0,l&&L9(n[0],n[1],l)&&(r=a<3?void 0:r,a=1),t=Object(t);++o-1}function UC(e,t){var n=this.__data__,o=mc(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}function ca(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(i)?t>1?ei(i,t-1,n,o,a):Z0(a,i):o||(a[a.length]=i)}return a}function tg(e){var t=e==null?0:e.length;return t?ei(e,1):[]}function ng(e){return q4(Y4(e,void 0,tg),e+"")}var u7=eg(Object.getPrototypeOf,Object);const Q0=u7;var c7="[object Object]",d7=Function.prototype,f7=Object.prototype,og=d7.toString,p7=f7.hasOwnProperty,v7=og.call(Object);function ag(e){if(!Ro(e)||Vr(e)!=c7)return!1;var t=Q0(e);if(t===null)return!0;var n=p7.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&og.call(n)==v7}function h7(e,t,n){var o=-1,a=e.length;t<0&&(t=-t>a?0:a+t),n=n>a?a:n,n<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var r=Array(a);++oi))return!1;var d=r.get(e),f=r.get(t);if(d&&f)return d==t&&f==e;var c=-1,p=!0,h=n&XS?new As:void 0;for(r.set(e,t),r.set(t,e);++c=t||O<0||c&&T>=r}function g(){var E=vd();if(_(E))return w(E);i=setTimeout(g,v(E))}function w(E){return i=void 0,p&&o?h(E):(o=a=void 0,l)}function b(){i!==void 0&&clearTimeout(i),d=0,o=u=a=i=void 0}function C(){return i===void 0?l:w(vd())}function x(){var E=vd(),O=_(E);if(o=arguments,a=this,u=E,O){if(i===void 0)return m(u);if(c)return clearTimeout(i),i=setTimeout(g,t),h(u)}return i===void 0&&(i=setTimeout(g,t)),l}return x.cancel=b,x.flush=C,x}function sf(e,t,n){(n!==void 0&&!Js(e[t],n)||n===void 0&&!(t in e))&&j0(e,t,n)}function Sg(e){return Ro(e)&&Pl(e)}function uf(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}function zk(e){return Rl(e,Qs(e))}function Hk(e,t,n,o,a,r,l){var i=uf(e,n),u=uf(t,n),d=l.get(u);if(d){sf(e,n,d);return}var f=r?r(i,u,n+"",e,t,l):void 0,c=f===void 0;if(c){var p=An(u),h=!p&&xs(u),m=!p&&!h&&X0(u);f=u,p||h||m?An(i)?f=i:Sg(i)?f=j4(i):h?(c=!1,f=lg(u,!0)):m?(c=!1,f=dg(u,!0)):f=[]:ag(u)||Es(u)?(f=i,Es(i)?f=zk(i):(!On(i)||W0(i))&&(f=fg(u))):c=!1}c&&(l.set(u,f),a(f,u,o,r,l),l.delete(u)),sf(e,n,f)}function kg(e,t,n,o,a){e!==t&&Cg(t,function(r,l){if(a||(a=new wo),On(r))Hk(e,t,l,n,kg,o,a);else{var i=o?o(uf(e,l),r,l+"",e,t,a):void 0;i===void 0&&(i=r),sf(e,l,i)}},Qs)}function Dk(e,t,n){for(var o=-1,a=e==null?0:e.length;++o1),r}),Rl(e,cg(e),n),o&&(n=ll(n,tE|nE|oE,eE));for(var a=t.length;a--;)Qk(n,t[a]);return n});function Mg(e,t,n,o){if(!On(e))return e;t=Ll(t,e);for(var a=-1,r=t.length,l=r-1,i=e;i!=null&&++a=dE){var d=t?null:cE(e);if(d)return n2(d);l=!1,a=mg,u=new As}else u=t?[]:i;e:for(;++oe===void 0,Qt=e=>typeof e=="boolean",Ye=e=>typeof e=="number",Qn=e=>!e&&e!==0||Ie(e)&&e.length===0||ct(e)&&!Object.keys(e).length,io=e=>typeof Element>"u"?!1:e instanceof Element,Er=e=>tn(e),pE=e=>Ze(e)?!Number.isNaN(Number(e)):!1,wc=e=>e===window,Fa=e=>gt?window.requestAnimationFrame(e):setTimeout(e,16),xr=e=>gt?window.cancelAnimationFrame(e):clearTimeout(e),o2=(e="")=>e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d"),Ao=e=>Ys(e),yl=e=>Object.keys(e),vE=e=>Object.entries(e),Xi=(e,t,n)=>({get value(){return Gt(e,t,n)},set value(o){sE(e,t,o)}});class hE extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function on(e,t){throw new hE(`[${e}] ${t}`)}const $g=(e="")=>e.split(" ").filter(t=>!!t.trim()),oo=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},eo=(e,t)=>{!e||!t.trim()||e.classList.add(...$g(t))},Cn=(e,t)=>{!e||!t.trim()||e.classList.remove(...$g(t))},Oa=(e,t)=>{var n;if(!gt||!e||!t)return"";let o=lo(t);o==="float"&&(o="cssFloat");try{const a=e.style[o];if(a)return a;const r=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return r?r[o]:""}catch{return e.style[o]}};function Xt(e,t="px"){if(!e)return"";if(Ye(e)||pE(e))return`${e}${t}`;if(Ze(e))return e}const mE=(e,t)=>{if(!gt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],o=Oa(e,n);return["scroll","auto","overlay"].some(a=>o.includes(a))},a2=(e,t)=>{if(!gt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(mE(n,t))return n;n=n.parentNode}return n};let xi;const Tg=e=>{var t;if(!gt)return 0;if(xi!==void 0)return xi;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const o=n.offsetWidth;n.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",n.appendChild(a);const r=a.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),xi=o-r,xi};function Ag(e,t){if(!gt)return;if(!t){e.scrollTop=0;return}const n=[];let o=t.offsetParent;for(;o!==null&&e!==o&&e.contains(o);)n.push(o),o=o.offsetParent;const a=t.offsetTop+n.reduce((u,d)=>u+d.offsetTop,0),r=a+t.offsetHeight,l=e.scrollTop,i=l+e.clientHeight;ai&&(e.scrollTop=r-e.clientHeight)}function gE(e,t,n,o,a){const r=Date.now();let l;const i=()=>{const d=Date.now()-r,f=O5(d>o?o:d,t,n,o);wc(e)?e.scrollTo(window.pageXOffset,f):e.scrollTop=f,d{l&&xr(l)}}const c1=(e,t)=>wc(t)?e.ownerDocument.documentElement:t,d1=e=>wc(e)?window.scrollY:e.scrollTop,Mi=e=>{if(!gt||e==="")return null;if(Ze(e))try{return document.querySelector(e)}catch{return null}return e};/*! Element Plus Icons Vue v2.3.1 */var yE=A({name:"AddLocation",__name:"add-location",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32"}),k("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),k("path",{fill:"currentColor",d:"M544 384h96a32 32 0 1 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64h96v-96a32 32 0 0 1 64 0z"})]))}}),_E=yE,bE=A({name:"Aim",__name:"aim",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),k("path",{fill:"currentColor",d:"M512 96a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V128a32 32 0 0 1 32-32m0 576a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V704a32 32 0 0 1 32-32M96 512a32 32 0 0 1 32-32h192a32 32 0 0 1 0 64H128a32 32 0 0 1-32-32m576 0a32 32 0 0 1 32-32h192a32 32 0 1 1 0 64H704a32 32 0 0 1-32-32"})]))}}),wE=bE,CE=A({name:"AlarmClock",__name:"alarm-clock",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 832a320 320 0 1 0 0-640 320 320 0 0 0 0 640m0 64a384 384 0 1 1 0-768 384 384 0 0 1 0 768"}),k("path",{fill:"currentColor",d:"m292.288 824.576 55.424 32-48 83.136a32 32 0 1 1-55.424-32zm439.424 0-55.424 32 48 83.136a32 32 0 1 0 55.424-32zM512 512h160a32 32 0 1 1 0 64H480a32 32 0 0 1-32-32V320a32 32 0 0 1 64 0zM90.496 312.256A160 160 0 0 1 312.32 90.496l-46.848 46.848a96 96 0 0 0-128 128L90.56 312.256zm835.264 0A160 160 0 0 0 704 90.496l46.848 46.848a96 96 0 0 1 128 128z"})]))}}),SE=CE,kE=A({name:"Apple",__name:"apple",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M599.872 203.776a189.44 189.44 0 0 1 64.384-4.672l2.624.128c31.168 1.024 51.2 4.096 79.488 16.32 37.632 16.128 74.496 45.056 111.488 89.344 96.384 115.264 82.752 372.8-34.752 521.728-7.68 9.728-32 41.6-30.72 39.936a426.624 426.624 0 0 1-30.08 35.776c-31.232 32.576-65.28 49.216-110.08 50.048-31.36.64-53.568-5.312-84.288-18.752l-6.528-2.88c-20.992-9.216-30.592-11.904-47.296-11.904-18.112 0-28.608 2.88-51.136 12.672l-6.464 2.816c-28.416 12.224-48.32 18.048-76.16 19.2-74.112 2.752-116.928-38.08-180.672-132.16-96.64-142.08-132.608-349.312-55.04-486.4 46.272-81.92 129.92-133.632 220.672-135.04 32.832-.576 60.288 6.848 99.648 22.72 27.136 10.88 34.752 13.76 37.376 14.272 16.256-20.16 27.776-36.992 34.56-50.24 13.568-26.304 27.2-59.968 40.704-100.8a32 32 0 1 1 60.8 20.224c-12.608 37.888-25.408 70.4-38.528 97.664zm-51.52 78.08c-14.528 17.792-31.808 37.376-51.904 58.816a32 32 0 1 1-46.72-43.776l12.288-13.248c-28.032-11.2-61.248-26.688-95.68-26.112-70.4 1.088-135.296 41.6-171.648 105.792C121.6 492.608 176 684.16 247.296 788.992c34.816 51.328 76.352 108.992 130.944 106.944 52.48-2.112 72.32-34.688 135.872-34.688 63.552 0 81.28 34.688 136.96 33.536 56.448-1.088 75.776-39.04 126.848-103.872 107.904-136.768 107.904-362.752 35.776-449.088-72.192-86.272-124.672-84.096-151.68-85.12-41.472-4.288-81.6 12.544-113.664 25.152z"})]))}}),EE=kE,xE=A({name:"ArrowDownBold",__name:"arrow-down-bold",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M104.704 338.752a64 64 0 0 1 90.496 0l316.8 316.8 316.8-316.8a64 64 0 0 1 90.496 90.496L557.248 791.296a64 64 0 0 1-90.496 0L104.704 429.248a64 64 0 0 1 0-90.496z"})]))}}),ME=xE,$E=A({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),Bo=$E,TE=A({name:"ArrowLeftBold",__name:"arrow-left-bold",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M685.248 104.704a64 64 0 0 1 0 90.496L368.448 512l316.8 316.8a64 64 0 0 1-90.496 90.496L232.704 557.248a64 64 0 0 1 0-90.496l362.048-362.048a64 64 0 0 1 90.496 0z"})]))}}),AE=TE,OE=A({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),aa=OE,NE=A({name:"ArrowRightBold",__name:"arrow-right-bold",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M338.752 104.704a64 64 0 0 0 0 90.496l316.8 316.8-316.8 316.8a64 64 0 0 0 90.496 90.496l362.048-362.048a64 64 0 0 0 0-90.496L429.248 104.704a64 64 0 0 0-90.496 0z"})]))}}),IE=NE,RE=A({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Sn=RE,PE=A({name:"ArrowUpBold",__name:"arrow-up-bold",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M104.704 685.248a64 64 0 0 0 90.496 0l316.8-316.8 316.8 316.8a64 64 0 0 0 90.496-90.496L557.248 232.704a64 64 0 0 0-90.496 0L104.704 594.752a64 64 0 0 0 0 90.496z"})]))}}),LE=PE,VE=A({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),Cc=VE,BE=A({name:"Avatar",__name:"avatar",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M628.736 528.896A416 416 0 0 1 928 928H96a415.872 415.872 0 0 1 299.264-399.104L512 704zM720 304a208 208 0 1 1-416 0 208 208 0 0 1 416 0"})]))}}),zE=BE,HE=A({name:"Back",__name:"back",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),k("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),Og=HE,DE=A({name:"Baseball",__name:"baseball",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M195.2 828.8a448 448 0 1 1 633.6-633.6 448 448 0 0 1-633.6 633.6zm45.248-45.248a384 384 0 1 0 543.104-543.104 384 384 0 0 0-543.104 543.104"}),k("path",{fill:"currentColor",d:"M497.472 96.896c22.784 4.672 44.416 9.472 64.896 14.528a256.128 256.128 0 0 0 350.208 350.208c5.056 20.48 9.856 42.112 14.528 64.896A320.128 320.128 0 0 1 497.472 96.896zM108.48 491.904a320.128 320.128 0 0 1 423.616 423.68c-23.04-3.648-44.992-7.424-65.728-11.52a256.128 256.128 0 0 0-346.496-346.432 1736.64 1736.64 0 0 1-11.392-65.728z"})]))}}),FE=DE,KE=A({name:"Basketball",__name:"basketball",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M778.752 788.224a382.464 382.464 0 0 0 116.032-245.632 256.512 256.512 0 0 0-241.728-13.952 762.88 762.88 0 0 1 125.696 259.584zm-55.04 44.224a699.648 699.648 0 0 0-125.056-269.632 256.128 256.128 0 0 0-56.064 331.968 382.72 382.72 0 0 0 181.12-62.336m-254.08 61.248A320.128 320.128 0 0 1 557.76 513.6a715.84 715.84 0 0 0-48.192-48.128 320.128 320.128 0 0 1-379.264 88.384 382.4 382.4 0 0 0 110.144 229.696 382.4 382.4 0 0 0 229.184 110.08zM129.28 481.088a256.128 256.128 0 0 0 331.072-56.448 699.648 699.648 0 0 0-268.8-124.352 382.656 382.656 0 0 0-62.272 180.8m106.56-235.84a762.88 762.88 0 0 1 258.688 125.056 256.512 256.512 0 0 0-13.44-241.088A382.464 382.464 0 0 0 235.84 245.248zm318.08-114.944c40.576 89.536 37.76 193.92-8.448 281.344a779.84 779.84 0 0 1 66.176 66.112 320.832 320.832 0 0 1 282.112-8.128 382.4 382.4 0 0 0-110.144-229.12 382.4 382.4 0 0 0-229.632-110.208zM828.8 828.8a448 448 0 1 1-633.6-633.6 448 448 0 0 1 633.6 633.6"})]))}}),WE=KE,jE=A({name:"BellFilled",__name:"bell-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M640 832a128 128 0 0 1-256 0zm192-64H134.4a38.4 38.4 0 0 1 0-76.8H192V448c0-154.88 110.08-284.16 256.32-313.6a64 64 0 1 1 127.36 0A320.128 320.128 0 0 1 832 448v243.2h57.6a38.4 38.4 0 0 1 0 76.8z"})]))}}),qE=jE,UE=A({name:"Bell",__name:"bell",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a64 64 0 0 1 64 64v64H448v-64a64 64 0 0 1 64-64"}),k("path",{fill:"currentColor",d:"M256 768h512V448a256 256 0 1 0-512 0zm256-640a320 320 0 0 1 320 320v384H192V448a320 320 0 0 1 320-320"}),k("path",{fill:"currentColor",d:"M96 768h832q32 0 32 32t-32 32H96q-32 0-32-32t32-32m352 128h128a64 64 0 0 1-128 0"})]))}}),YE=UE,GE=A({name:"Bicycle",__name:"bicycle",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 832a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384"}),k("path",{fill:"currentColor",d:"M288 672h320q32 0 32 32t-32 32H288q-32 0-32-32t32-32"}),k("path",{fill:"currentColor",d:"M768 832a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384"}),k("path",{fill:"currentColor",d:"M480 192a32 32 0 0 1 0-64h160a32 32 0 0 1 31.04 24.256l96 384a32 32 0 0 1-62.08 15.488L615.04 192zM96 384a32 32 0 0 1 0-64h128a32 32 0 0 1 30.336 21.888l64 192a32 32 0 1 1-60.672 20.224L200.96 384z"}),k("path",{fill:"currentColor",d:"m373.376 599.808-42.752-47.616 320-288 42.752 47.616z"})]))}}),XE=GE,JE=A({name:"BottomLeft",__name:"bottom-left",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 768h416a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V352a32 32 0 0 1 64 0z"}),k("path",{fill:"currentColor",d:"M246.656 822.656a32 32 0 0 1-45.312-45.312l544-544a32 32 0 0 1 45.312 45.312l-544 544z"})]))}}),ZE=JE,QE=A({name:"BottomRight",__name:"bottom-right",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M352 768a32 32 0 1 0 0 64h448a32 32 0 0 0 32-32V352a32 32 0 0 0-64 0v416z"}),k("path",{fill:"currentColor",d:"M777.344 822.656a32 32 0 0 0 45.312-45.312l-544-544a32 32 0 0 0-45.312 45.312z"})]))}}),ex=QE,tx=A({name:"Bottom",__name:"bottom",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M544 805.888V168a32 32 0 1 0-64 0v637.888L246.656 557.952a30.72 30.72 0 0 0-45.312 0 35.52 35.52 0 0 0 0 48.064l288 306.048a30.72 30.72 0 0 0 45.312 0l288-306.048a35.52 35.52 0 0 0 0-48 30.72 30.72 0 0 0-45.312 0L544 805.824z"})]))}}),nx=tx,ox=A({name:"Bowl",__name:"bowl",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M714.432 704a351.744 351.744 0 0 0 148.16-256H161.408a351.744 351.744 0 0 0 148.16 256zM288 766.592A415.68 415.68 0 0 1 96 416a32 32 0 0 1 32-32h768a32 32 0 0 1 32 32 415.68 415.68 0 0 1-192 350.592V832a64 64 0 0 1-64 64H352a64 64 0 0 1-64-64zM493.248 320h-90.496l254.4-254.4a32 32 0 1 1 45.248 45.248zm187.328 0h-128l269.696-155.712a32 32 0 0 1 32 55.424zM352 768v64h320v-64z"})]))}}),ax=ox,rx=A({name:"Box",__name:"box",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M317.056 128 128 344.064V896h768V344.064L706.944 128zm-14.528-64h418.944a32 32 0 0 1 24.064 10.88l206.528 236.096A32 32 0 0 1 960 332.032V928a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V332.032a32 32 0 0 1 7.936-21.12L278.4 75.008A32 32 0 0 1 302.528 64z"}),k("path",{fill:"currentColor",d:"M64 320h896v64H64z"}),k("path",{fill:"currentColor",d:"M448 327.872V640h128V327.872L526.08 128h-28.16zM448 64h128l64 256v352a32 32 0 0 1-32 32H416a32 32 0 0 1-32-32V320z"})]))}}),lx=rx,sx=A({name:"Briefcase",__name:"briefcase",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M320 320V128h384v192h192v192H128V320zM128 576h768v320H128zm256-256h256.064V192H384z"})]))}}),ix=sx,ux=A({name:"BrushFilled",__name:"brush-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M608 704v160a96 96 0 0 1-192 0V704h-96a128 128 0 0 1-128-128h640a128 128 0 0 1-128 128zM192 512V128.064h640V512z"})]))}}),cx=ux,dx=A({name:"Brush",__name:"brush",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M896 448H128v192a64 64 0 0 0 64 64h192v192h256V704h192a64 64 0 0 0 64-64zm-770.752-64c0-47.552 5.248-90.24 15.552-128 14.72-54.016 42.496-107.392 83.2-160h417.28l-15.36 70.336L736 96h211.2c-24.832 42.88-41.92 96.256-51.2 160a663.872 663.872 0 0 0-6.144 128H960v256a128 128 0 0 1-128 128H704v160a32 32 0 0 1-32 32H352a32 32 0 0 1-32-32V768H192A128 128 0 0 1 64 640V384h61.248zm64 0h636.544c-2.048-45.824.256-91.584 6.848-137.216 4.48-30.848 10.688-59.776 18.688-86.784h-96.64l-221.12 141.248L561.92 160H256.512c-25.856 37.888-43.776 75.456-53.952 112.832-8.768 32.064-13.248 69.12-13.312 111.168z"})]))}}),fx=dx,px=A({name:"Burger",__name:"burger",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 512a32 32 0 0 0-32 32v64a32 32 0 0 0 30.08 32H864a32 32 0 0 0 32-32v-64a32 32 0 0 0-32-32zm736-58.56A96 96 0 0 1 960 544v64a96 96 0 0 1-51.968 85.312L855.36 833.6a96 96 0 0 1-89.856 62.272H258.496A96 96 0 0 1 168.64 833.6l-52.608-140.224A96 96 0 0 1 64 608v-64a96 96 0 0 1 64-90.56V448a384 384 0 1 1 768 5.44M832 448a320 320 0 0 0-640 0zM512 704H188.352l40.192 107.136a32 32 0 0 0 29.952 20.736h507.008a32 32 0 0 0 29.952-20.736L835.648 704z"})]))}}),vx=px,hx=A({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),Ng=hx,mx=A({name:"CameraFilled",__name:"camera-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 224a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64V288a64 64 0 0 0-64-64H748.416l-46.464-92.672A64 64 0 0 0 644.736 96H379.328a64 64 0 0 0-57.216 35.392L275.776 224zm352 435.2a115.2 115.2 0 1 0 0-230.4 115.2 115.2 0 0 0 0 230.4m0 140.8a256 256 0 1 1 0-512 256 256 0 0 1 0 512"})]))}}),gx=mx,yx=A({name:"Camera",__name:"camera",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M896 256H128v576h768zm-199.424-64-32.064-64h-304.96l-32 64zM96 192h160l46.336-92.608A64 64 0 0 1 359.552 64h304.96a64 64 0 0 1 57.216 35.328L768.192 192H928a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32m416 512a160 160 0 1 0 0-320 160 160 0 0 0 0 320m0 64a224 224 0 1 1 0-448 224 224 0 0 1 0 448"})]))}}),_x=yx,bx=A({name:"CaretBottom",__name:"caret-bottom",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m192 384 320 384 320-384z"})]))}}),wx=bx,Cx=A({name:"CaretLeft",__name:"caret-left",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M672 192 288 511.936 672 832z"})]))}}),Sx=Cx,kx=A({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),r2=kx,Ex=A({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),Ig=Ex,xx=A({name:"Cellphone",__name:"cellphone",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 128a64 64 0 0 0-64 64v640a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h512a128 128 0 0 1 128 128v640a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V192A128 128 0 0 1 256 64m128 128h256a32 32 0 1 1 0 64H384a32 32 0 0 1 0-64m128 640a64 64 0 1 1 0-128 64 64 0 0 1 0 128"})]))}}),Mx=xx,$x=A({name:"ChatDotRound",__name:"chat-dot-round",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m174.72 855.68 135.296-45.12 23.68 11.84C388.096 849.536 448.576 864 512 864c211.84 0 384-166.784 384-352S723.84 160 512 160 128 326.784 128 512c0 69.12 24.96 139.264 70.848 199.232l22.08 28.8-46.272 115.584zm-45.248 82.56A32 32 0 0 1 89.6 896l58.368-145.92C94.72 680.32 64 596.864 64 512 64 299.904 256 96 512 96s448 203.904 448 416-192 416-448 416a461.056 461.056 0 0 1-206.912-48.384l-175.616 58.56z"}),k("path",{fill:"currentColor",d:"M512 563.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4m192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4m-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4"})]))}}),Tx=$x,Ax=A({name:"ChatDotSquare",__name:"chat-dot-square",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z"}),k("path",{fill:"currentColor",d:"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4z"})]))}}),Ox=Ax,Nx=A({name:"ChatLineRound",__name:"chat-line-round",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m174.72 855.68 135.296-45.12 23.68 11.84C388.096 849.536 448.576 864 512 864c211.84 0 384-166.784 384-352S723.84 160 512 160 128 326.784 128 512c0 69.12 24.96 139.264 70.848 199.232l22.08 28.8-46.272 115.584zm-45.248 82.56A32 32 0 0 1 89.6 896l58.368-145.92C94.72 680.32 64 596.864 64 512 64 299.904 256 96 512 96s448 203.904 448 416-192 416-448 416a461.056 461.056 0 0 1-206.912-48.384l-175.616 58.56z"}),k("path",{fill:"currentColor",d:"M352 576h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m32-192h256q32 0 32 32t-32 32H384q-32 0-32-32t32-32"})]))}}),Ix=Nx,Rx=A({name:"ChatLineSquare",__name:"chat-line-square",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 826.88 273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z"}),k("path",{fill:"currentColor",d:"M352 512h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m0-192h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32"})]))}}),Px=Rx,Lx=A({name:"ChatRound",__name:"chat-round",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m174.72 855.68 130.048-43.392 23.424 11.392C382.4 849.984 444.352 864 512 864c223.744 0 384-159.872 384-352 0-192.832-159.104-352-384-352S128 319.168 128 512a341.12 341.12 0 0 0 69.248 204.288l21.632 28.8-44.16 110.528zm-45.248 82.56A32 32 0 0 1 89.6 896l56.512-141.248A405.12 405.12 0 0 1 64 512C64 299.904 235.648 96 512 96s448 203.904 448 416-173.44 416-448 416c-79.68 0-150.848-17.152-211.712-46.72l-170.88 56.96z"})]))}}),Vx=Lx,Bx=A({name:"ChatSquare",__name:"chat-square",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z"})]))}}),zx=Bx,Hx=A({name:"Check",__name:"check",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),Bl=Hx,Dx=A({name:"Checked",__name:"checked",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M704 192h160v736H160V192h160.064v64H704zM311.616 537.28l-45.312 45.248L447.36 763.52l316.8-316.8-45.312-45.184L447.36 673.024zM384 192V96h256v96z"})]))}}),Fx=Dx,Kx=A({name:"Cherry",__name:"cherry",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M261.056 449.6c13.824-69.696 34.88-128.96 63.36-177.728 23.744-40.832 61.12-88.64 112.256-143.872H320a32 32 0 0 1 0-64h384a32 32 0 1 1 0 64H554.752c14.912 39.168 41.344 86.592 79.552 141.76 47.36 68.48 84.8 106.752 106.304 114.304a224 224 0 1 1-84.992 14.784c-22.656-22.912-47.04-53.76-73.92-92.608-38.848-56.128-67.008-105.792-84.352-149.312-55.296 58.24-94.528 107.52-117.76 147.2-23.168 39.744-41.088 88.768-53.568 147.072a224.064 224.064 0 1 1-64.96-1.6zM288 832a160 160 0 1 0 0-320 160 160 0 0 0 0 320m448-64a160 160 0 1 0 0-320 160 160 0 0 0 0 320"})]))}}),Wx=Kx,jx=A({name:"Chicken",__name:"chicken",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M349.952 716.992 478.72 588.16a106.688 106.688 0 0 1-26.176-19.072 106.688 106.688 0 0 1-19.072-26.176L304.704 671.744c.768 3.072 1.472 6.144 2.048 9.216l2.048 31.936 31.872 1.984c3.136.64 6.208 1.28 9.28 2.112zm57.344 33.152a128 128 0 1 1-216.32 114.432l-1.92-32-32-1.92a128 128 0 1 1 114.432-216.32L416.64 469.248c-2.432-101.44 58.112-239.104 149.056-330.048 107.328-107.328 231.296-85.504 316.8 0 85.44 85.44 107.328 209.408 0 316.8-91.008 90.88-228.672 151.424-330.112 149.056L407.296 750.08zm90.496-226.304c49.536 49.536 233.344-7.04 339.392-113.088 78.208-78.208 63.232-163.072 0-226.304-63.168-63.232-148.032-78.208-226.24 0C504.896 290.496 448.32 474.368 497.792 523.84M244.864 708.928a64 64 0 1 0-59.84 59.84l56.32-3.52zm8.064 127.68a64 64 0 1 0 59.84-59.84l-56.32 3.52-3.52 56.32z"})]))}}),qx=jx,Ux=A({name:"ChromeFilled",__name:"chrome-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M938.67 512.01c0-44.59-6.82-87.6-19.54-128H682.67a212.372 212.372 0 0 1 42.67 128c.06 38.71-10.45 76.7-30.42 109.87l-182.91 316.8c235.65-.01 426.66-191.02 426.66-426.67z"}),k("path",{fill:"currentColor",d:"M576.79 401.63a127.92 127.92 0 0 0-63.56-17.6c-22.36-.22-44.39 5.43-63.89 16.38s-35.79 26.82-47.25 46.02a128.005 128.005 0 0 0-2.16 127.44l1.24 2.13a127.906 127.906 0 0 0 46.36 46.61 127.907 127.907 0 0 0 63.38 17.44c22.29.2 44.24-5.43 63.68-16.33a127.94 127.94 0 0 0 47.16-45.79v-.01l1.11-1.92a127.984 127.984 0 0 0 .29-127.46 127.957 127.957 0 0 0-46.36-46.91"}),k("path",{fill:"currentColor",d:"M394.45 333.96A213.336 213.336 0 0 1 512 298.67h369.58A426.503 426.503 0 0 0 512 85.34a425.598 425.598 0 0 0-171.74 35.98 425.644 425.644 0 0 0-142.62 102.22l118.14 204.63a213.397 213.397 0 0 1 78.67-94.21m117.56 604.72H512zm-97.25-236.73a213.284 213.284 0 0 1-89.54-86.81L142.48 298.6c-36.35 62.81-57.13 135.68-57.13 213.42 0 203.81 142.93 374.22 333.95 416.55h.04l118.19-204.71a213.315 213.315 0 0 1-122.77-21.91z"})]))}}),Yx=Ux,Gx=A({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),Rg=Gx,Xx=A({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),k("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Sc=Xx,Jx=A({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),kc=Jx,Zx=A({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),fa=Zx,Qx=A({name:"CirclePlusFilled",__name:"circle-plus-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-38.4 409.6H326.4a38.4 38.4 0 1 0 0 76.8h147.2v147.2a38.4 38.4 0 0 0 76.8 0V550.4h147.2a38.4 38.4 0 0 0 0-76.8H550.4V326.4a38.4 38.4 0 1 0-76.8 0v147.2z"})]))}}),eM=Qx,tM=A({name:"CirclePlus",__name:"circle-plus",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M352 480h320a32 32 0 1 1 0 64H352a32 32 0 0 1 0-64"}),k("path",{fill:"currentColor",d:"M480 672V352a32 32 0 1 1 64 0v320a32 32 0 0 1-64 0"}),k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),nM=tM,oM=A({name:"Clock",__name:"clock",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),k("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),l2=oM,aM=A({name:"CloseBold",__name:"close-bold",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z"})]))}}),rM=aM,lM=A({name:"Close",__name:"close",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),uo=lM,sM=A({name:"Cloudy",__name:"cloudy",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M598.4 831.872H328.192a256 256 0 0 1-34.496-510.528A352 352 0 1 1 598.4 831.872m-271.36-64h272.256a288 288 0 1 0-248.512-417.664L335.04 381.44l-34.816 3.584a192 192 0 0 0 26.88 382.848z"})]))}}),iM=sM,uM=A({name:"CoffeeCup",__name:"coffee-cup",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M768 192a192 192 0 1 1-8 383.808A256.128 256.128 0 0 1 512 768H320A256 256 0 0 1 64 512V160a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 64v256a128 128 0 1 0 0-256M96 832h640a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64m32-640v320a192 192 0 0 0 192 192h192a192 192 0 0 0 192-192V192z"})]))}}),cM=uM,dM=A({name:"Coffee",__name:"coffee",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M822.592 192h14.272a32 32 0 0 1 31.616 26.752l21.312 128A32 32 0 0 1 858.24 384h-49.344l-39.04 546.304A32 32 0 0 1 737.92 960H285.824a32 32 0 0 1-32-29.696L214.912 384H165.76a32 32 0 0 1-31.552-37.248l21.312-128A32 32 0 0 1 187.136 192h14.016l-6.72-93.696A32 32 0 0 1 226.368 64h571.008a32 32 0 0 1 31.936 34.304zm-64.128 0 4.544-64H260.736l4.544 64h493.184m-548.16 128H820.48l-10.688-64H214.208l-10.688 64h6.784m68.736 64 36.544 512H708.16l36.544-512z"})]))}}),fM=dM,pM=A({name:"Coin",__name:"coin",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m161.92 580.736 29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264z"}),k("path",{fill:"currentColor",d:"m161.92 388.736 29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264z"}),k("path",{fill:"currentColor",d:"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224-188.544 224-416 224m0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160 155.328 160 352 160"})]))}}),vM=pM,hM=A({name:"ColdDrink",__name:"cold-drink",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M768 64a192 192 0 1 1-69.952 370.88L480 725.376V896h96a32 32 0 1 1 0 64H320a32 32 0 1 1 0-64h96V725.376L76.8 273.536a64 64 0 0 1-12.8-38.4v-10.688a32 32 0 0 1 32-32h71.808l-65.536-83.84a32 32 0 0 1 50.432-39.424l96.256 123.264h337.728A192.064 192.064 0 0 1 768 64M656.896 192.448H800a32 32 0 0 1 32 32v10.624a64 64 0 0 1-12.8 38.4l-80.448 107.2a128 128 0 1 0-81.92-188.16v-.064zm-357.888 64 129.472 165.76a32 32 0 0 1-50.432 39.36l-160.256-205.12H144l304 404.928 304-404.928z"})]))}}),mM=hM,gM=A({name:"CollectionTag",__name:"collection-tag",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 128v698.88l196.032-156.864a96 96 0 0 1 119.936 0L768 826.816V128zm-32-64h576a32 32 0 0 1 32 32v797.44a32 32 0 0 1-51.968 24.96L531.968 720a32 32 0 0 0-39.936 0L243.968 918.4A32 32 0 0 1 192 893.44V96a32 32 0 0 1 32-32"})]))}}),yM=gM,_M=A({name:"Collection",__name:"collection",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M192 736h640V128H256a64 64 0 0 0-64 64zm64-672h608a32 32 0 0 1 32 32v672a32 32 0 0 1-32 32H160l-32 57.536V192A128 128 0 0 1 256 64"}),k("path",{fill:"currentColor",d:"M240 800a48 48 0 1 0 0 96h592v-96zm0-64h656v160a64 64 0 0 1-64 64H240a112 112 0 0 1 0-224m144-608v250.88l96-76.8 96 76.8V128zm-64-64h320v381.44a32 32 0 0 1-51.968 24.96L480 384l-108.032 86.4A32 32 0 0 1 320 445.44z"})]))}}),bM=_M,wM=A({name:"Comment",__name:"comment",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M736 504a56 56 0 1 1 0-112 56 56 0 0 1 0 112m-224 0a56 56 0 1 1 0-112 56 56 0 0 1 0 112m-224 0a56 56 0 1 1 0-112 56 56 0 0 1 0 112M128 128v640h192v160l224-160h352V128z"})]))}}),CM=wM,SM=A({name:"Compass",__name:"compass",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),k("path",{fill:"currentColor",d:"M725.888 315.008C676.48 428.672 624 513.28 568.576 568.64c-55.424 55.424-139.968 107.904-253.568 157.312a12.8 12.8 0 0 1-16.896-16.832c49.536-113.728 102.016-198.272 157.312-253.632 55.36-55.296 139.904-107.776 253.632-157.312a12.8 12.8 0 0 1 16.832 16.832"})]))}}),kM=SM,EM=A({name:"Connection",__name:"connection",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M640 384v64H448a128 128 0 0 0-128 128v128a128 128 0 0 0 128 128h320a128 128 0 0 0 128-128V576a128 128 0 0 0-64-110.848V394.88c74.56 26.368 128 97.472 128 181.056v128a192 192 0 0 1-192 192H448a192 192 0 0 1-192-192V576a192 192 0 0 1 192-192z"}),k("path",{fill:"currentColor",d:"M384 640v-64h192a128 128 0 0 0 128-128V320a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128v128a128 128 0 0 0 64 110.848v70.272A192.064 192.064 0 0 1 64 448V320a192 192 0 0 1 192-192h320a192 192 0 0 1 192 192v128a192 192 0 0 1-192 192z"})]))}}),xM=EM,MM=A({name:"Coordinate",__name:"coordinate",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M480 512h64v320h-64z"}),k("path",{fill:"currentColor",d:"M192 896h640a64 64 0 0 0-64-64H256a64 64 0 0 0-64 64m64-128h512a128 128 0 0 1 128 128v64H128v-64a128 128 0 0 1 128-128m256-256a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512"})]))}}),$M=MM,TM=A({name:"CopyDocument",__name:"copy-document",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64z"}),k("path",{fill:"currentColor",d:"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64"})]))}}),AM=TM,OM=A({name:"Cpu",__name:"cpu",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M320 256a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64zm0-64h384a128 128 0 0 1 128 128v384a128 128 0 0 1-128 128H320a128 128 0 0 1-128-128V320a128 128 0 0 1 128-128"}),k("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m160 0a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m-320 0a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m160 896a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32m160 0a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32m-320 0a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32M64 512a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m0-160a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m0 320a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m896-160a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32m0-160a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32m0 320a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32"})]))}}),NM=OM,IM=A({name:"CreditCard",__name:"credit-card",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M896 324.096c0-42.368-2.496-55.296-9.536-68.48a52.352 52.352 0 0 0-22.144-22.08c-13.12-7.04-26.048-9.536-68.416-9.536H228.096c-42.368 0-55.296 2.496-68.48 9.536a52.352 52.352 0 0 0-22.08 22.144c-7.04 13.12-9.536 26.048-9.536 68.416v375.808c0 42.368 2.496 55.296 9.536 68.48a52.352 52.352 0 0 0 22.144 22.08c13.12 7.04 26.048 9.536 68.416 9.536h567.808c42.368 0 55.296-2.496 68.48-9.536a52.352 52.352 0 0 0 22.08-22.144c7.04-13.12 9.536-26.048 9.536-68.416zm64 0v375.808c0 57.088-5.952 77.76-17.088 98.56-11.136 20.928-27.52 37.312-48.384 48.448-20.864 11.136-41.6 17.088-98.56 17.088H228.032c-57.088 0-77.76-5.952-98.56-17.088a116.288 116.288 0 0 1-48.448-48.384c-11.136-20.864-17.088-41.6-17.088-98.56V324.032c0-57.088 5.952-77.76 17.088-98.56 11.136-20.928 27.52-37.312 48.384-48.448 20.864-11.136 41.6-17.088 98.56-17.088H795.84c57.088 0 77.76 5.952 98.56 17.088 20.928 11.136 37.312 27.52 48.448 48.384 11.136 20.864 17.088 41.6 17.088 98.56z"}),k("path",{fill:"currentColor",d:"M64 320h896v64H64zm0 128h896v64H64zm128 192h256v64H192z"})]))}}),RM=IM,PM=A({name:"Crop",__name:"crop",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 768h672a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V96a32 32 0 0 1 64 0z"}),k("path",{fill:"currentColor",d:"M832 224v704a32 32 0 1 1-64 0V256H96a32 32 0 0 1 0-64h704a32 32 0 0 1 32 32"})]))}}),LM=PM,VM=A({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),Mr=VM,BM=A({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),$r=BM,zM=A({name:"DCaret",__name:"d-caret",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m512 128 288 320H224zM224 576h576L512 896z"})]))}}),HM=zM,DM=A({name:"DataAnalysis",__name:"data-analysis",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m665.216 768 110.848 192h-73.856L591.36 768H433.024L322.176 960H248.32l110.848-192H160a32 32 0 0 1-32-32V192H64a32 32 0 0 1 0-64h896a32 32 0 1 1 0 64h-64v544a32 32 0 0 1-32 32zM832 192H192v512h640zM352 448a32 32 0 0 1 32 32v64a32 32 0 0 1-64 0v-64a32 32 0 0 1 32-32m160-64a32 32 0 0 1 32 32v128a32 32 0 0 1-64 0V416a32 32 0 0 1 32-32m160-64a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V352a32 32 0 0 1 32-32"})]))}}),FM=DM,KM=A({name:"DataBoard",__name:"data-board",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M32 128h960v64H32z"}),k("path",{fill:"currentColor",d:"M192 192v512h640V192zm-64-64h768v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32z"}),k("path",{fill:"currentColor",d:"M322.176 960H248.32l144.64-250.56 55.424 32zm453.888 0h-73.856L576 741.44l55.424-32z"})]))}}),WM=KM,jM=A({name:"DataLine",__name:"data-line",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M359.168 768H160a32 32 0 0 1-32-32V192H64a32 32 0 0 1 0-64h896a32 32 0 1 1 0 64h-64v544a32 32 0 0 1-32 32H665.216l110.848 192h-73.856L591.36 768H433.024L322.176 960H248.32zM832 192H192v512h640zM342.656 534.656a32 32 0 1 1-45.312-45.312L444.992 341.76l125.44 94.08L679.04 300.032a32 32 0 1 1 49.92 39.936L581.632 524.224 451.008 426.24 342.656 534.592z"})]))}}),qM=jM,UM=A({name:"DeleteFilled",__name:"delete-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M352 192V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64H96a32 32 0 0 1 0-64zm64 0h192v-64H416zM192 960a32 32 0 0 1-32-32V256h704v672a32 32 0 0 1-32 32zm224-192a32 32 0 0 0 32-32V416a32 32 0 0 0-64 0v320a32 32 0 0 0 32 32m192 0a32 32 0 0 0 32-32V416a32 32 0 0 0-64 0v320a32 32 0 0 0 32 32"})]))}}),YM=UM,GM=A({name:"DeleteLocation",__name:"delete-location",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32"}),k("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),k("path",{fill:"currentColor",d:"M384 384h256q32 0 32 32t-32 32H384q-32 0-32-32t32-32"})]))}}),XM=GM,JM=A({name:"Delete",__name:"delete",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),Pg=JM,ZM=A({name:"Dessert",__name:"dessert",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 416v-48a144 144 0 0 1 168.64-141.888 224.128 224.128 0 0 1 430.72 0A144 144 0 0 1 896 368v48a384 384 0 0 1-352 382.72V896h-64v-97.28A384 384 0 0 1 128 416m287.104-32.064h193.792a143.808 143.808 0 0 1 58.88-132.736 160.064 160.064 0 0 0-311.552 0 143.808 143.808 0 0 1 58.88 132.8zm-72.896 0a72 72 0 1 0-140.48 0h140.48m339.584 0h140.416a72 72 0 1 0-140.48 0zM512 736a320 320 0 0 0 318.4-288.064H193.6A320 320 0 0 0 512 736M384 896.064h256a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64"})]))}}),QM=ZM,e$=A({name:"Discount",__name:"discount",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M224 704h576V318.336L552.512 115.84a64 64 0 0 0-81.024 0L224 318.336zm0 64v128h576V768zM593.024 66.304l259.2 212.096A32 32 0 0 1 864 303.168V928a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V303.168a32 32 0 0 1 11.712-24.768l259.2-212.096a128 128 0 0 1 162.112 0"}),k("path",{fill:"currentColor",d:"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"})]))}}),t$=e$,n$=A({name:"DishDot",__name:"dish-dot",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m384.064 274.56.064-50.688A128 128 0 0 1 512.128 96c70.528 0 127.68 57.152 127.68 127.68v50.752A448.192 448.192 0 0 1 955.392 768H68.544A448.192 448.192 0 0 1 384 274.56zM96 832h832a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64m32-128h768a384 384 0 1 0-768 0m447.808-448v-32.32a63.68 63.68 0 0 0-63.68-63.68 64 64 0 0 0-64 63.936V256z"})]))}}),o$=n$,a$=A({name:"Dish",__name:"dish",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M480 257.152V192h-96a32 32 0 0 1 0-64h256a32 32 0 1 1 0 64h-96v65.152A448 448 0 0 1 955.52 768H68.48A448 448 0 0 1 480 257.152M128 704h768a384 384 0 1 0-768 0M96 832h832a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64"})]))}}),r$=a$,l$=A({name:"DocumentAdd",__name:"document-add",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m320 512V448h64v128h128v64H544v128h-64V640H352v-64z"})]))}}),s$=l$,i$=A({name:"DocumentChecked",__name:"document-checked",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m318.4 582.144 180.992-180.992L704.64 510.4 478.4 736.64 320 578.304l45.248-45.312z"})]))}}),u$=i$,c$=A({name:"DocumentCopy",__name:"document-copy",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 320v576h576V320zm-32-64h640a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32M960 96v704a32 32 0 0 1-32 32h-96v-64h64V128H384v64h-64V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32M256 672h320v64H256zm0-192h320v64H256z"})]))}}),d$=c$,f$=A({name:"DocumentDelete",__name:"document-delete",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m308.992 546.304-90.496-90.624 45.248-45.248 90.56 90.496 90.496-90.432 45.248 45.248-90.496 90.56 90.496 90.496-45.248 45.248-90.496-90.496-90.56 90.496-45.248-45.248 90.496-90.496z"})]))}}),p$=f$,v$=A({name:"DocumentRemove",__name:"document-remove",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m192 512h320v64H352z"})]))}}),h$=v$,m$=A({name:"Document",__name:"document",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),Lg=m$,g$=A({name:"Download",__name:"download",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64z"})]))}}),y$=g$,_$=A({name:"Drizzling",__name:"drizzling",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m739.328 291.328-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 97.28 78.72 175.936 175.808 175.936h400a192 192 0 0 0 35.776-380.672zM959.552 480a256 256 0 0 1-256 256h-400A239.808 239.808 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 959.552 480M288 800h64v64h-64zm192 0h64v64h-64zm-96 96h64v64h-64zm192 0h64v64h-64zm96-96h64v64h-64z"})]))}}),b$=_$,w$=A({name:"EditPen",__name:"edit-pen",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m199.04 672.64 193.984 112 224-387.968-193.92-112-224 388.032zm-23.872 60.16 32.896 148.288 144.896-45.696zM455.04 229.248l193.92 112 56.704-98.112-193.984-112-56.64 98.112zM104.32 708.8l384-665.024 304.768 175.936L409.152 884.8h.064l-248.448 78.336zm384 254.272v-64h448v64h-448z"})]))}}),C$=w$,S$=A({name:"Edit",__name:"edit",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640z"}),k("path",{fill:"currentColor",d:"m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z"})]))}}),k$=S$,E$=A({name:"ElemeFilled",__name:"eleme-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M176 64h672c61.824 0 112 50.176 112 112v672a112 112 0 0 1-112 112H176A112 112 0 0 1 64 848V176c0-61.824 50.176-112 112-112m150.528 173.568c-152.896 99.968-196.544 304.064-97.408 456.96a330.688 330.688 0 0 0 456.96 96.64c9.216-5.888 17.6-11.776 25.152-18.56a18.24 18.24 0 0 0 4.224-24.32L700.352 724.8a47.552 47.552 0 0 0-65.536-14.272A234.56 234.56 0 0 1 310.592 641.6C240 533.248 271.104 387.968 379.456 316.48a234.304 234.304 0 0 1 276.352 15.168c1.664.832 2.56 2.56 3.392 4.224 5.888 8.384 3.328 19.328-5.12 25.216L456.832 489.6a47.552 47.552 0 0 0-14.336 65.472l16 24.384c5.888 8.384 16.768 10.88 25.216 5.056l308.224-199.936a19.584 19.584 0 0 0 6.72-23.488v-.896c-4.992-9.216-10.048-17.6-15.104-26.88-99.968-151.168-304.064-194.88-456.96-95.744zM786.88 504.704l-62.208 40.32c-8.32 5.888-10.88 16.768-4.992 25.216L760 632.32c5.888 8.448 16.768 11.008 25.152 5.12l31.104-20.16a55.36 55.36 0 0 0 16-76.48l-20.224-31.04a19.52 19.52 0 0 0-25.152-5.12z"})]))}}),x$=E$,M$=A({name:"Eleme",__name:"eleme",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M300.032 188.8c174.72-113.28 408-63.36 522.24 109.44 5.76 10.56 11.52 20.16 17.28 30.72v.96a22.4 22.4 0 0 1-7.68 26.88l-352.32 228.48c-9.6 6.72-22.08 3.84-28.8-5.76l-18.24-27.84a54.336 54.336 0 0 1 16.32-74.88l225.6-146.88c9.6-6.72 12.48-19.2 5.76-28.8-.96-1.92-1.92-3.84-3.84-4.8a267.84 267.84 0 0 0-315.84-17.28c-123.84 81.6-159.36 247.68-78.72 371.52a268.096 268.096 0 0 0 370.56 78.72 54.336 54.336 0 0 1 74.88 16.32l17.28 26.88c5.76 9.6 3.84 21.12-4.8 27.84-8.64 7.68-18.24 14.4-28.8 21.12a377.92 377.92 0 0 1-522.24-110.4c-113.28-174.72-63.36-408 111.36-522.24zm526.08 305.28a22.336 22.336 0 0 1 28.8 5.76l23.04 35.52a63.232 63.232 0 0 1-18.24 87.36l-35.52 23.04c-9.6 6.72-22.08 3.84-28.8-5.76l-46.08-71.04c-6.72-9.6-3.84-22.08 5.76-28.8l71.04-46.08z"})]))}}),$$=M$,T$=A({name:"ElementPlus",__name:"element-plus",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M839.7 734.7c0 33.3-17.9 41-17.9 41S519.7 949.8 499.2 960c-10.2 5.1-20.5 5.1-30.7 0 0 0-314.9-184.3-325.1-192-5.1-5.1-10.2-12.8-12.8-20.5V368.6c0-17.9 20.5-28.2 20.5-28.2L466 158.6c12.8-5.1 25.6-5.1 38.4 0 0 0 279 161.3 309.8 179.2 17.9 7.7 28.2 25.6 25.6 46.1-.1-5-.1 317.5-.1 350.8M714.2 371.2c-64-35.8-217.6-125.4-217.6-125.4-7.7-5.1-20.5-5.1-30.7 0L217.6 389.1s-17.9 10.2-17.9 23v297c0 5.1 5.1 12.8 7.7 17.9 7.7 5.1 256 148.5 256 148.5 7.7 5.1 17.9 5.1 25.6 0 15.4-7.7 250.9-145.9 250.9-145.9s12.8-5.1 12.8-30.7v-74.2l-276.5 169v-64c0-17.9 7.7-30.7 20.5-46.1L745 535c5.1-7.7 10.2-20.5 10.2-30.7v-66.6l-279 169v-69.1c0-15.4 5.1-30.7 17.9-38.4l220.1-128zM919 135.7c0-5.1-5.1-7.7-7.7-7.7h-58.9V66.6c0-5.1-5.1-5.1-10.2-5.1l-30.7 5.1c-5.1 0-5.1 2.6-5.1 5.1V128h-56.3c-5.1 0-5.1 5.1-7.7 5.1v38.4h69.1v64c0 5.1 5.1 5.1 10.2 5.1l30.7-5.1c5.1 0 5.1-2.6 5.1-5.1v-56.3h64l-2.5-38.4z"})]))}}),A$=T$,O$=A({name:"Expand",__name:"expand",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 192h768v128H128zm0 256h512v128H128zm0 256h768v128H128zm576-352 192 160-192 128z"})]))}}),N$=O$,I$=A({name:"Failed",__name:"failed",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m557.248 608 135.744-135.744-45.248-45.248-135.68 135.744-135.808-135.68-45.248 45.184L466.752 608l-135.68 135.68 45.184 45.312L512 653.248l135.744 135.744 45.248-45.248L557.312 608zM704 192h160v736H160V192h160v64h384zm-320 0V96h256v96z"})]))}}),R$=I$,P$=A({name:"Female",__name:"female",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 640a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640"}),k("path",{fill:"currentColor",d:"M512 640q32 0 32 32v256q0 32-32 32t-32-32V672q0-32 32-32"}),k("path",{fill:"currentColor",d:"M352 800h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32"})]))}}),L$=P$,V$=A({name:"Files",__name:"files",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 384v448h768V384zm-32-64h832a32 32 0 0 1 32 32v512a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V352a32 32 0 0 1 32-32m64-128h704v64H160zm96-128h512v64H256z"})]))}}),B$=V$,z$=A({name:"Film",__name:"film",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 160v704h704V160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M320 288V128h64v352h256V128h64v160h160v64H704v128h160v64H704v128h160v64H704v160h-64V544H384v352h-64V736H128v-64h192V544H128v-64h192V352H128v-64z"})]))}}),H$=z$,D$=A({name:"Filter",__name:"filter",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M384 523.392V928a32 32 0 0 0 46.336 28.608l192-96A32 32 0 0 0 640 832V523.392l280.768-343.104a32 32 0 1 0-49.536-40.576l-288 352A32 32 0 0 0 576 512v300.224l-128 64V512a32 32 0 0 0-7.232-20.288L195.52 192H704a32 32 0 1 0 0-64H128a32 32 0 0 0-24.768 52.288z"})]))}}),F$=D$,K$=A({name:"Finished",__name:"finished",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M280.768 753.728 691.456 167.04a32 32 0 1 1 52.416 36.672L314.24 817.472a32 32 0 0 1-45.44 7.296l-230.4-172.8a32 32 0 0 1 38.4-51.2l203.968 152.96zM736 448a32 32 0 1 1 0-64h192a32 32 0 1 1 0 64zM608 640a32 32 0 0 1 0-64h319.936a32 32 0 1 1 0 64zM480 832a32 32 0 1 1 0-64h447.936a32 32 0 1 1 0 64z"})]))}}),W$=K$,j$=A({name:"FirstAidKit",__name:"first-aid-kit",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M192 256a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64zm0-64h640a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H192A128 128 0 0 1 64 768V320a128 128 0 0 1 128-128"}),k("path",{fill:"currentColor",d:"M544 512h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64h96v-96a32 32 0 0 1 64 0zM352 128v64h320v-64zm-32-64h384a32 32 0 0 1 32 32v128a32 32 0 0 1-32 32H320a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32"})]))}}),q$=j$,U$=A({name:"Flag",__name:"flag",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M288 128h608L736 384l160 256H288v320h-96V64h96z"})]))}}),Y$=U$,G$=A({name:"Fold",__name:"fold",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M896 192H128v128h768zm0 256H384v128h512zm0 256H128v128h768zM320 384 128 512l192 128z"})]))}}),X$=G$,J$=A({name:"FolderAdd",__name:"folder-add",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m384 416V416h64v128h128v64H544v128h-64V608H352v-64z"})]))}}),Z$=J$,Q$=A({name:"FolderChecked",__name:"folder-checked",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m414.08 502.144 180.992-180.992L736.32 494.4 510.08 720.64l-158.4-158.336 45.248-45.312z"})]))}}),eT=Q$,tT=A({name:"FolderDelete",__name:"folder-delete",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m370.752 448-90.496-90.496 45.248-45.248L512 530.752l90.496-90.496 45.248 45.248L557.248 576l90.496 90.496-45.248 45.248L512 621.248l-90.496 90.496-45.248-45.248z"})]))}}),nT=tT,oT=A({name:"FolderOpened",__name:"folder-opened",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896"})]))}}),aT=oT,rT=A({name:"FolderRemove",__name:"folder-remove",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m256 416h320v64H352z"})]))}}),lT=rT,sT=A({name:"Folder",__name:"folder",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32"})]))}}),iT=sT,uT=A({name:"Food",__name:"food",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 352.576V352a288 288 0 0 1 491.072-204.224 192 192 0 0 1 274.24 204.48 64 64 0 0 1 57.216 74.24C921.6 600.512 850.048 710.656 736 756.992V800a96 96 0 0 1-96 96H384a96 96 0 0 1-96-96v-43.008c-114.048-46.336-185.6-156.48-214.528-330.496A64 64 0 0 1 128 352.64zm64-.576h64a160 160 0 0 1 320 0h64a224 224 0 0 0-448 0m128 0h192a96 96 0 0 0-192 0m439.424 0h68.544A128.256 128.256 0 0 0 704 192c-15.36 0-29.952 2.688-43.52 7.616 11.328 18.176 20.672 37.76 27.84 58.304A64.128 64.128 0 0 1 759.424 352M672 768H352v32a32 32 0 0 0 32 32h256a32 32 0 0 0 32-32zm-342.528-64h365.056c101.504-32.64 165.76-124.928 192.896-288H136.576c27.136 163.072 91.392 255.36 192.896 288"})]))}}),cT=uT,dT=A({name:"Football",__name:"football",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896m0-64a384 384 0 1 0 0-768 384 384 0 0 0 0 768"}),k("path",{fill:"currentColor",d:"M186.816 268.288c16-16.384 31.616-31.744 46.976-46.08 17.472 30.656 39.808 58.112 65.984 81.28l-32.512 56.448a385.984 385.984 0 0 1-80.448-91.648zm653.696-5.312a385.92 385.92 0 0 1-83.776 96.96l-32.512-56.384a322.923 322.923 0 0 0 68.48-85.76c15.552 14.08 31.488 29.12 47.808 45.184zM465.984 445.248l11.136-63.104a323.584 323.584 0 0 0 69.76 0l11.136 63.104a387.968 387.968 0 0 1-92.032 0m-62.72-12.8A381.824 381.824 0 0 1 320 396.544l32-55.424a319.885 319.885 0 0 0 62.464 27.712l-11.2 63.488zm300.8-35.84a381.824 381.824 0 0 1-83.328 35.84l-11.2-63.552A319.885 319.885 0 0 0 672 341.184l32 55.424zm-520.768 364.8a385.92 385.92 0 0 1 83.968-97.28l32.512 56.32c-26.88 23.936-49.856 52.352-67.52 84.032-16-13.44-32.32-27.712-48.96-43.072zm657.536.128a1442.759 1442.759 0 0 1-49.024 43.072 321.408 321.408 0 0 0-67.584-84.16l32.512-56.32c33.216 27.456 61.696 60.352 84.096 97.408zM465.92 578.752a387.968 387.968 0 0 1 92.032 0l-11.136 63.104a323.584 323.584 0 0 0-69.76 0zm-62.72 12.8 11.2 63.552a319.885 319.885 0 0 0-62.464 27.712L320 627.392a381.824 381.824 0 0 1 83.264-35.84zm300.8 35.84-32 55.424a318.272 318.272 0 0 0-62.528-27.712l11.2-63.488c29.44 8.64 57.28 20.736 83.264 35.776z"})]))}}),fT=dT,pT=A({name:"ForkSpoon",__name:"fork-spoon",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 410.304V96a32 32 0 0 1 64 0v314.304a96 96 0 0 0 64-90.56V96a32 32 0 0 1 64 0v223.744a160 160 0 0 1-128 156.8V928a32 32 0 1 1-64 0V476.544a160 160 0 0 1-128-156.8V96a32 32 0 0 1 64 0v223.744a96 96 0 0 0 64 90.56zM672 572.48C581.184 552.128 512 446.848 512 320c0-141.44 85.952-256 192-256s192 114.56 192 256c0 126.848-69.184 232.128-160 252.48V928a32 32 0 1 1-64 0zM704 512c66.048 0 128-82.56 128-192s-61.952-192-128-192-128 82.56-128 192 61.952 192 128 192"})]))}}),vT=pT,hT=A({name:"Fries",__name:"fries",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M608 224v-64a32 32 0 0 0-64 0v336h26.88A64 64 0 0 0 608 484.096zm101.12 160A64 64 0 0 0 672 395.904V384h64V224a32 32 0 1 0-64 0v160zm74.88 0a92.928 92.928 0 0 1 91.328 110.08l-60.672 323.584A96 96 0 0 1 720.32 896H303.68a96 96 0 0 1-94.336-78.336L148.672 494.08A92.928 92.928 0 0 1 240 384h-16V224a96 96 0 0 1 188.608-25.28A95.744 95.744 0 0 1 480 197.44V160a96 96 0 0 1 188.608-25.28A96 96 0 0 1 800 224v160zM670.784 512a128 128 0 0 1-99.904 48H453.12a128 128 0 0 1-99.84-48H352v-1.536a128.128 128.128 0 0 1-9.984-14.976L314.88 448H240a28.928 28.928 0 0 0-28.48 34.304L241.088 640h541.824l29.568-157.696A28.928 28.928 0 0 0 784 448h-74.88l-27.136 47.488A132.405 132.405 0 0 1 672 510.464V512zM480 288a32 32 0 0 0-64 0v196.096A64 64 0 0 0 453.12 496H480zm-128 96V224a32 32 0 0 0-64 0v160zh-37.12A64 64 0 0 1 352 395.904zm-98.88 320 19.072 101.888A32 32 0 0 0 303.68 832h416.64a32 32 0 0 0 31.488-26.112L770.88 704z"})]))}}),mT=hT,gT=A({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),Vg=gT,yT=A({name:"GobletFull",__name:"goblet-full",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 320h512c0-78.592-12.608-142.4-36.928-192h-434.24C269.504 192.384 256 256.256 256 320m503.936 64H264.064a256.128 256.128 0 0 0 495.872 0zM544 638.4V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.4A320 320 0 0 1 192 320c0-85.632 21.312-170.944 64-256h512c42.688 64.32 64 149.632 64 256a320 320 0 0 1-288 318.4"})]))}}),_T=yT,bT=A({name:"GobletSquareFull",__name:"goblet-square-full",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 270.912c10.048 6.72 22.464 14.912 28.992 18.624a220.16 220.16 0 0 0 114.752 30.72c30.592 0 49.408-9.472 91.072-41.152l.64-.448c52.928-40.32 82.368-55.04 132.288-54.656 55.552.448 99.584 20.8 142.72 57.408l1.536 1.28V128H256v142.912zm.96 76.288C266.368 482.176 346.88 575.872 512 576c157.44.064 237.952-85.056 253.248-209.984a952.32 952.32 0 0 1-40.192-35.712c-32.704-27.776-63.36-41.92-101.888-42.24-31.552-.256-50.624 9.28-93.12 41.6l-.576.448c-52.096 39.616-81.024 54.208-129.792 54.208-54.784 0-100.48-13.376-142.784-37.056zM480 638.848C250.624 623.424 192 442.496 192 319.68V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v224c0 122.816-58.624 303.68-288 318.912V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96z"})]))}}),wT=bT,CT=A({name:"GobletSquare",__name:"goblet-square",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M544 638.912V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.848C250.624 623.424 192 442.496 192 319.68V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v224c0 122.816-58.624 303.68-288 318.912M256 319.68c0 149.568 80 256.192 256 256.256C688.128 576 768 469.568 768 320V128H256z"})]))}}),ST=CT,kT=A({name:"Goblet",__name:"goblet",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M544 638.4V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.4A320 320 0 0 1 192 320c0-85.632 21.312-170.944 64-256h512c42.688 64.32 64 149.632 64 256a320 320 0 0 1-288 318.4M256 320a256 256 0 1 0 512 0c0-78.592-12.608-142.4-36.928-192h-434.24C269.504 192.384 256 256.256 256 320"})]))}}),ET=kT,xT=A({name:"GoldMedal",__name:"gold-medal",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m772.13 452.84 53.86-351.81c1.32-10.01-1.17-18.68-7.49-26.02S804.35 64 795.01 64H228.99v-.01h-.06c-9.33 0-17.15 3.67-23.49 11.01s-8.83 16.01-7.49 26.02l53.87 351.89C213.54 505.73 193.59 568.09 192 640c2 90.67 33.17 166.17 93.5 226.5S421.33 957.99 512 960c90.67-2 166.17-33.17 226.5-93.5 60.33-60.34 91.49-135.83 93.5-226.5-1.59-71.94-21.56-134.32-59.87-187.16zM640.01 128h117.02l-39.01 254.02c-20.75-10.64-40.74-19.73-59.94-27.28-5.92-3-11.95-5.8-18.08-8.41V128h.01zM576 128v198.76c-13.18-2.58-26.74-4.43-40.67-5.55-8.07-.8-15.85-1.2-23.33-1.2-10.54 0-21.09.66-31.64 1.96a359.844 359.844 0 0 0-32.36 4.79V128zm-192 0h.04v218.3c-6.22 2.66-12.34 5.5-18.36 8.56-19.13 7.54-39.02 16.6-59.66 27.16L267.01 128zm308.99 692.99c-48 48-108.33 73-180.99 75.01-72.66-2.01-132.99-27.01-180.99-75.01S258.01 712.66 256 640c2.01-72.66 27.01-132.99 75.01-180.99 19.67-19.67 41.41-35.47 65.22-47.41 38.33-15.04 71.15-23.92 98.44-26.65 5.07-.41 10.2-.7 15.39-.88.63-.01 1.28-.03 1.91-.03.66 0 1.35.03 2.02.04 5.11.17 10.15.46 15.13.86 27.4 2.71 60.37 11.65 98.91 26.79 23.71 11.93 45.36 27.69 64.96 47.29 48 48 73 108.33 75.01 180.99-2.01 72.65-27.01 132.98-75.01 180.98z"}),k("path",{fill:"currentColor",d:"M544 480H416v64h64v192h-64v64h192v-64h-64z"})]))}}),MT=xT,$T=A({name:"GoodsFilled",__name:"goods-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M192 352h640l64 544H128zm128 224h64V448h-64zm320 0h64V448h-64zM384 288h-64a192 192 0 1 1 384 0h-64a128 128 0 1 0-256 0"})]))}}),TT=$T,AT=A({name:"Goods",__name:"goods",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M320 288v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4h131.072a32 32 0 0 1 31.808 28.8l57.6 576a32 32 0 0 1-31.808 35.2H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320zm64 0h256v-22.336C640 189.248 582.272 128 512 128c-70.272 0-128 61.248-128 137.664v22.4zm-64 64H217.92l-51.2 512h690.56l-51.264-512H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0z"})]))}}),OT=AT,NT=A({name:"Grape",__name:"grape",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M544 195.2a160 160 0 0 1 96 60.8 160 160 0 1 1 146.24 254.976 160 160 0 0 1-128 224 160 160 0 1 1-292.48 0 160 160 0 0 1-128-224A160 160 0 1 1 384 256a160 160 0 0 1 96-60.8V128h-64a32 32 0 0 1 0-64h192a32 32 0 0 1 0 64h-64zM512 448a96 96 0 1 0 0-192 96 96 0 0 0 0 192m-256 0a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128 224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128 224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128-224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128-224a96 96 0 1 0 0-192 96 96 0 0 0 0 192"})]))}}),IT=NT,RT=A({name:"Grid",__name:"grid",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M640 384v256H384V384zm64 0h192v256H704zm-64 512H384V704h256zm64 0V704h192v192zm-64-768v192H384V128zm64 0h192v192H704zM320 384v256H128V384zm0 512H128V704h192zm0-768v192H128V128z"})]))}}),PT=RT,LT=A({name:"Guide",__name:"guide",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M640 608h-64V416h64zm0 160v160a32 32 0 0 1-32 32H416a32 32 0 0 1-32-32V768h64v128h128V768zM384 608V416h64v192zm256-352h-64V128H448v128h-64V96a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32z"}),k("path",{fill:"currentColor",d:"m220.8 256-71.232 80 71.168 80H768V256H220.8zm-14.4-64H800a32 32 0 0 1 32 32v224a32 32 0 0 1-32 32H206.4a32 32 0 0 1-23.936-10.752l-99.584-112a32 32 0 0 1 0-42.496l99.584-112A32 32 0 0 1 206.4 192m678.784 496-71.104 80H266.816V608h547.2l71.168 80zm-56.768-144H234.88a32 32 0 0 0-32 32v224a32 32 0 0 0 32 32h593.6a32 32 0 0 0 23.936-10.752l99.584-112a32 32 0 0 0 0-42.496l-99.584-112A32 32 0 0 0 828.48 544z"})]))}}),VT=LT,BT=A({name:"Handbag",__name:"handbag",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M887.01 264.99c-6-5.99-13.67-8.99-23.01-8.99H704c-1.34-54.68-20.01-100.01-56-136s-81.32-54.66-136-56c-54.68 1.34-100.01 20.01-136 56s-54.66 81.32-56 136H160c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.67-8.99 23.01v640c0 9.35 2.99 17.02 8.99 23.01S150.66 960 160 960h704c9.35 0 17.02-2.99 23.01-8.99S896 937.34 896 928V288c0-9.35-2.99-17.02-8.99-23.01M421.5 165.5c24.32-24.34 54.49-36.84 90.5-37.5 35.99.68 66.16 13.18 90.5 37.5s36.84 54.49 37.5 90.5H384c.68-35.99 13.18-66.16 37.5-90.5M832 896H192V320h128v128h64V320h256v128h64V320h128z"})]))}}),zT=BT,HT=A({name:"Headset",__name:"headset",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M896 529.152V512a384 384 0 1 0-768 0v17.152A128 128 0 0 1 320 640v128a128 128 0 1 1-256 0V512a448 448 0 1 1 896 0v256a128 128 0 1 1-256 0V640a128 128 0 0 1 192-110.848M896 640a64 64 0 0 0-128 0v128a64 64 0 0 0 128 0zm-768 0v128a64 64 0 0 0 128 0V640a64 64 0 1 0-128 0"})]))}}),DT=HT,FT=A({name:"HelpFilled",__name:"help-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M926.784 480H701.312A192.512 192.512 0 0 0 544 322.688V97.216A416.064 416.064 0 0 1 926.784 480m0 64A416.064 416.064 0 0 1 544 926.784V701.312A192.512 192.512 0 0 0 701.312 544zM97.28 544h225.472A192.512 192.512 0 0 0 480 701.312v225.472A416.064 416.064 0 0 1 97.216 544zm0-64A416.064 416.064 0 0 1 480 97.216v225.472A192.512 192.512 0 0 0 322.688 480H97.216z"})]))}}),KT=FT,WT=A({name:"Help",__name:"help",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m759.936 805.248-90.944-91.008A254.912 254.912 0 0 1 512 768a254.912 254.912 0 0 1-156.992-53.76l-90.944 91.008A382.464 382.464 0 0 0 512 896c94.528 0 181.12-34.176 247.936-90.752m45.312-45.312A382.464 382.464 0 0 0 896 512c0-94.528-34.176-181.12-90.752-247.936l-91.008 90.944C747.904 398.4 768 452.864 768 512c0 59.136-20.096 113.6-53.76 156.992l91.008 90.944zm-45.312-541.184A382.464 382.464 0 0 0 512 128c-94.528 0-181.12 34.176-247.936 90.752l90.944 91.008A254.912 254.912 0 0 1 512 256c59.136 0 113.6 20.096 156.992 53.76l90.944-91.008zm-541.184 45.312A382.464 382.464 0 0 0 128 512c0 94.528 34.176 181.12 90.752 247.936l91.008-90.944A254.912 254.912 0 0 1 256 512c0-59.136 20.096-113.6 53.76-156.992zm417.28 394.496a194.56 194.56 0 0 0 22.528-22.528C686.912 602.56 704 559.232 704 512a191.232 191.232 0 0 0-67.968-146.56A191.296 191.296 0 0 0 512 320a191.232 191.232 0 0 0-146.56 67.968C337.088 421.44 320 464.768 320 512a191.232 191.232 0 0 0 67.968 146.56C421.44 686.912 464.768 704 512 704c47.296 0 90.56-17.088 124.032-45.44zM512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),jT=WT,qT=A({name:"Hide",__name:"hide",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),k("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),Bg=qT,UT=A({name:"Histogram",__name:"histogram",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M416 896V128h192v768zm-288 0V448h192v448zm576 0V320h192v576z"})]))}}),YT=UT,GT=A({name:"HomeFilled",__name:"home-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 128 128 447.936V896h255.936V640H640v256h255.936V447.936z"})]))}}),XT=GT,JT=A({name:"HotWater",__name:"hot-water",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M273.067 477.867h477.866V409.6H273.067zm0 68.266v51.2A187.733 187.733 0 0 0 460.8 785.067h102.4a187.733 187.733 0 0 0 187.733-187.734v-51.2H273.067zm-34.134-204.8h546.134a34.133 34.133 0 0 1 34.133 34.134v221.866a256 256 0 0 1-256 256H460.8a256 256 0 0 1-256-256V375.467a34.133 34.133 0 0 1 34.133-34.134zM512 34.133a34.133 34.133 0 0 1 34.133 34.134v170.666a34.133 34.133 0 0 1-68.266 0V68.267A34.133 34.133 0 0 1 512 34.133zM375.467 102.4a34.133 34.133 0 0 1 34.133 34.133v102.4a34.133 34.133 0 0 1-68.267 0v-102.4a34.133 34.133 0 0 1 34.134-34.133m273.066 0a34.133 34.133 0 0 1 34.134 34.133v102.4a34.133 34.133 0 1 1-68.267 0v-102.4a34.133 34.133 0 0 1 34.133-34.133M170.667 921.668h682.666a34.133 34.133 0 1 1 0 68.267H170.667a34.133 34.133 0 1 1 0-68.267z"})]))}}),ZT=JT,QT=A({name:"House",__name:"house",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M192 413.952V896h640V413.952L512 147.328zM139.52 374.4l352-293.312a32 32 0 0 1 40.96 0l352 293.312A32 32 0 0 1 896 398.976V928a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V398.976a32 32 0 0 1 11.52-24.576"})]))}}),eA=QT,tA=A({name:"IceCreamRound",__name:"ice-cream-round",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m308.352 489.344 226.304 226.304a32 32 0 0 0 45.248 0L783.552 512A192 192 0 1 0 512 240.448L308.352 444.16a32 32 0 0 0 0 45.248zm135.744 226.304L308.352 851.392a96 96 0 0 1-135.744-135.744l135.744-135.744-45.248-45.248a96 96 0 0 1 0-135.808L466.752 195.2A256 256 0 0 1 828.8 557.248L625.152 760.96a96 96 0 0 1-135.808 0l-45.248-45.248zM398.848 670.4 353.6 625.152 217.856 760.896a32 32 0 0 0 45.248 45.248zm248.96-384.64a32 32 0 0 1 0 45.248L466.624 512a32 32 0 1 1-45.184-45.248l180.992-181.056a32 32 0 0 1 45.248 0zm90.496 90.496a32 32 0 0 1 0 45.248L557.248 602.496A32 32 0 1 1 512 557.248l180.992-180.992a32 32 0 0 1 45.312 0z"})]))}}),nA=tA,oA=A({name:"IceCreamSquare",__name:"ice-cream-square",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M416 640h256a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32H352a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32zm192 64v160a96 96 0 0 1-192 0V704h-64a96 96 0 0 1-96-96V160a96 96 0 0 1 96-96h320a96 96 0 0 1 96 96v448a96 96 0 0 1-96 96zm-64 0h-64v160a32 32 0 1 0 64 0z"})]))}}),aA=oA,rA=A({name:"IceCream",__name:"ice-cream",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128.64 448a208 208 0 0 1 193.536-191.552 224 224 0 0 1 445.248 15.488A208.128 208.128 0 0 1 894.784 448H896L548.8 983.68a32 32 0 0 1-53.248.704L128 448zm64.256 0h286.208a144 144 0 0 0-286.208 0zm351.36 0h286.272a144 144 0 0 0-286.272 0zm-294.848 64 271.808 396.608L778.24 512H249.408zM511.68 352.64a207.872 207.872 0 0 1 189.184-96.192 160 160 0 0 0-314.752 5.632c52.608 12.992 97.28 46.08 125.568 90.56"})]))}}),lA=rA,sA=A({name:"IceDrink",__name:"ice-drink",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 448v128h239.68l16.064-128zm-64 0H256.256l16.064 128H448zm64-255.36V384h247.744A256.128 256.128 0 0 0 512 192.64m-64 8.064A256.448 256.448 0 0 0 264.256 384H448zm64-72.064A320.128 320.128 0 0 1 825.472 384H896a32 32 0 1 1 0 64h-64v1.92l-56.96 454.016A64 64 0 0 1 711.552 960H312.448a64 64 0 0 1-63.488-56.064L192 449.92V448h-64a32 32 0 0 1 0-64h70.528A320.384 320.384 0 0 1 448 135.04V96a96 96 0 0 1 96-96h128a32 32 0 1 1 0 64H544a32 32 0 0 0-32 32zM743.68 640H280.32l32.128 256h399.104z"})]))}}),iA=sA,uA=A({name:"IceTea",__name:"ice-tea",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M197.696 259.648a320.128 320.128 0 0 1 628.608 0A96 96 0 0 1 896 352v64a96 96 0 0 1-71.616 92.864l-49.408 395.072A64 64 0 0 1 711.488 960H312.512a64 64 0 0 1-63.488-56.064l-49.408-395.072A96 96 0 0 1 128 416v-64a96 96 0 0 1 69.696-92.352M264.064 256h495.872a256.128 256.128 0 0 0-495.872 0m495.424 256H264.512l48 384h398.976zM224 448h576a32 32 0 0 0 32-32v-64a32 32 0 0 0-32-32H224a32 32 0 0 0-32 32v64a32 32 0 0 0 32 32m160 192h64v64h-64zm192 64h64v64h-64zm-128 64h64v64h-64zm64-192h64v64h-64z"})]))}}),cA=uA,dA=A({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Ec=dA,fA=A({name:"Iphone",__name:"iphone",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M224 768v96.064a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V768zm0-64h576V160a64 64 0 0 0-64-64H288a64 64 0 0 0-64 64zm32 288a96 96 0 0 1-96-96V128a96 96 0 0 1 96-96h512a96 96 0 0 1 96 96v768a96 96 0 0 1-96 96zm304-144a48 48 0 1 1-96 0 48 48 0 0 1 96 0"})]))}}),pA=fA,vA=A({name:"Key",__name:"key",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M448 456.064V96a32 32 0 0 1 32-32.064L672 64a32 32 0 0 1 0 64H512v128h160a32 32 0 0 1 0 64H512v128a256 256 0 1 1-64 8.064M512 896a192 192 0 1 0 0-384 192 192 0 0 0 0 384"})]))}}),hA=vA,mA=A({name:"KnifeFork",__name:"knife-fork",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 410.56V96a32 32 0 0 1 64 0v314.56A96 96 0 0 0 384 320V96a32 32 0 0 1 64 0v224a160 160 0 0 1-128 156.8V928a32 32 0 1 1-64 0V476.8A160 160 0 0 1 128 320V96a32 32 0 0 1 64 0v224a96 96 0 0 0 64 90.56m384-250.24V544h126.72c-3.328-78.72-12.928-147.968-28.608-207.744-14.336-54.528-46.848-113.344-98.112-175.872zM640 608v320a32 32 0 1 1-64 0V64h64c85.312 89.472 138.688 174.848 160 256 21.312 81.152 32 177.152 32 288z"})]))}}),gA=mA,yA=A({name:"Lightning",__name:"lightning",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M288 671.36v64.128A239.808 239.808 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 736 734.016v-64.768a192 192 0 0 0 3.328-377.92l-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 91.968 70.464 167.36 160.256 175.232z"}),k("path",{fill:"currentColor",d:"M416 736a32 32 0 0 1-27.776-47.872l128-224a32 32 0 1 1 55.552 31.744L471.168 672H608a32 32 0 0 1 27.776 47.872l-128 224a32 32 0 1 1-55.68-31.744L552.96 736z"})]))}}),_A=yA,bA=A({name:"Link",__name:"link",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M715.648 625.152 670.4 579.904l90.496-90.56c75.008-74.944 85.12-186.368 22.656-248.896-62.528-62.464-173.952-52.352-248.96 22.656L444.16 353.6l-45.248-45.248 90.496-90.496c100.032-99.968 251.968-110.08 339.456-22.656 87.488 87.488 77.312 239.424-22.656 339.456l-90.496 90.496zm-90.496 90.496-90.496 90.496C434.624 906.112 282.688 916.224 195.2 828.8c-87.488-87.488-77.312-239.424 22.656-339.456l90.496-90.496 45.248 45.248-90.496 90.56c-75.008 74.944-85.12 186.368-22.656 248.896 62.528 62.464 173.952 52.352 248.96-22.656l90.496-90.496zm0-362.048 45.248 45.248L398.848 670.4 353.6 625.152z"})]))}}),wA=bA,CA=A({name:"List",__name:"list",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M704 192h160v736H160V192h160v64h384zM288 512h448v-64H288zm0 256h448v-64H288zm96-576V96h256v96z"})]))}}),SA=CA,kA=A({name:"Loading",__name:"loading",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),pa=kA,EA=A({name:"LocationFilled",__name:"location-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 928c23.936 0 117.504-68.352 192.064-153.152C803.456 661.888 864 535.808 864 416c0-189.632-155.84-320-352-320S160 226.368 160 416c0 120.32 60.544 246.4 159.936 359.232C394.432 859.84 488 928 512 928m0-435.2a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 140.8a204.8 204.8 0 1 1 0-409.6 204.8 204.8 0 0 1 0 409.6"})]))}}),xA=EA,MA=A({name:"LocationInformation",__name:"location-information",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32"}),k("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),k("path",{fill:"currentColor",d:"M512 512a96 96 0 1 0 0-192 96 96 0 0 0 0 192m0 64a160 160 0 1 1 0-320 160 160 0 0 1 0 320"})]))}}),$A=MA,TA=A({name:"Location",__name:"location",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),k("path",{fill:"currentColor",d:"M512 512a96 96 0 1 0 0-192 96 96 0 0 0 0 192m0 64a160 160 0 1 1 0-320 160 160 0 0 1 0 320"})]))}}),AA=TA,OA=A({name:"Lock",__name:"lock",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M224 448a32 32 0 0 0-32 32v384a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V480a32 32 0 0 0-32-32zm0-64h576a96 96 0 0 1 96 96v384a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V480a96 96 0 0 1 96-96"}),k("path",{fill:"currentColor",d:"M512 544a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V576a32 32 0 0 1 32-32m192-160v-64a192 192 0 1 0-384 0v64zM512 64a256 256 0 0 1 256 256v128H256V320A256 256 0 0 1 512 64"})]))}}),NA=OA,IA=A({name:"Lollipop",__name:"lollipop",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M513.28 448a64 64 0 1 1 76.544 49.728A96 96 0 0 0 768 448h64a160 160 0 0 1-320 0zm-126.976-29.696a256 256 0 1 0 43.52-180.48A256 256 0 0 1 832 448h-64a192 192 0 0 0-381.696-29.696m105.664 249.472L285.696 874.048a96 96 0 0 1-135.68-135.744l206.208-206.272a320 320 0 1 1 135.744 135.744zm-54.464-36.032a321.92 321.92 0 0 1-45.248-45.248L195.2 783.552a32 32 0 1 0 45.248 45.248l197.056-197.12z"})]))}}),RA=IA,PA=A({name:"MagicStick",__name:"magic-stick",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64h64v192h-64zm0 576h64v192h-64zM160 480v-64h192v64zm576 0v-64h192v64zM249.856 199.04l45.248-45.184L430.848 289.6 385.6 334.848 249.856 199.104zM657.152 606.4l45.248-45.248 135.744 135.744-45.248 45.248zM114.048 923.2 68.8 877.952l316.8-316.8 45.248 45.248zM702.4 334.848 657.152 289.6l135.744-135.744 45.248 45.248z"})]))}}),LA=PA,VA=A({name:"Magnet",__name:"magnet",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M832 320V192H704v320a192 192 0 1 1-384 0V192H192v128h128v64H192v128a320 320 0 0 0 640 0V384H704v-64zM640 512V128h256v384a384 384 0 1 1-768 0V128h256v384a128 128 0 1 0 256 0"})]))}}),BA=VA,zA=A({name:"Male",__name:"male",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M399.5 849.5a225 225 0 1 0 0-450 225 225 0 0 0 0 450m0 56.25a281.25 281.25 0 1 1 0-562.5 281.25 281.25 0 0 1 0 562.5m253.125-787.5h225q28.125 0 28.125 28.125T877.625 174.5h-225q-28.125 0-28.125-28.125t28.125-28.125"}),k("path",{fill:"currentColor",d:"M877.625 118.25q28.125 0 28.125 28.125v225q0 28.125-28.125 28.125T849.5 371.375v-225q0-28.125 28.125-28.125"}),k("path",{fill:"currentColor",d:"M604.813 458.9 565.1 419.131l292.613-292.668 39.825 39.824z"})]))}}),HA=zA,DA=A({name:"Management",__name:"management",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M576 128v288l96-96 96 96V128h128v768H320V128zm-448 0h128v768H128z"})]))}}),FA=DA,KA=A({name:"MapLocation",__name:"map-location",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),k("path",{fill:"currentColor",d:"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256m345.6 192L960 960H672v-64H352v64H64l102.4-256zm-68.928 0H235.328l-76.8 192h706.944z"})]))}}),WA=KA,jA=A({name:"Medal",__name:"medal",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 896a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640"}),k("path",{fill:"currentColor",d:"M576 128H448v200a286.72 286.72 0 0 1 64-8c19.52 0 40.832 2.688 64 8zm64 0v219.648c24.448 9.088 50.56 20.416 78.4 33.92L757.44 128zm-256 0H266.624l39.04 253.568c27.84-13.504 53.888-24.832 78.336-33.92V128zM229.312 64h565.376a32 32 0 0 1 31.616 36.864L768 480c-113.792-64-199.104-96-256-96-56.896 0-142.208 32-256 96l-58.304-379.136A32 32 0 0 1 229.312 64"})]))}}),qA=jA,UA=A({name:"Memo",__name:"memo",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M480 320h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32"}),k("path",{fill:"currentColor",d:"M887.01 72.99C881.01 67 873.34 64 864 64H160c-9.35 0-17.02 3-23.01 8.99C131 78.99 128 86.66 128 96v832c0 9.35 2.99 17.02 8.99 23.01S150.66 960 160 960h704c9.35 0 17.02-2.99 23.01-8.99S896 937.34 896 928V96c0-9.35-3-17.02-8.99-23.01M192 896V128h96v768zm640 0H352V128h480z"}),k("path",{fill:"currentColor",d:"M480 512h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32m0 192h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32"})]))}}),YA=UA,GA=A({name:"Menu",__name:"menu",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 448a32 32 0 0 1-32-32V160.064a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V416a32 32 0 0 1-32 32zm448 0a32 32 0 0 1-32-32V160.064a32 32 0 0 1 32-32h255.936a32 32 0 0 1 32 32V416a32 32 0 0 1-32 32zM160 896a32 32 0 0 1-32-32V608a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32zm448 0a32 32 0 0 1-32-32V608a32 32 0 0 1 32-32h255.936a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32z"})]))}}),XA=GA,JA=A({name:"MessageBox",__name:"message-box",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M288 384h448v64H288zm96-128h256v64H384zM131.456 512H384v128h256V512h252.544L721.856 192H302.144zM896 576H704v128H320V576H128v256h768zM275.776 128h472.448a32 32 0 0 1 28.608 17.664l179.84 359.552A32 32 0 0 1 960 519.552V864a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V519.552a32 32 0 0 1 3.392-14.336l179.776-359.552A32 32 0 0 1 275.776 128z"})]))}}),ZA=JA,QA=A({name:"Message",__name:"message",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 224v512a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V224zm0-64h768a64 64 0 0 1 64 64v512a128 128 0 0 1-128 128H192A128 128 0 0 1 64 736V224a64 64 0 0 1 64-64"}),k("path",{fill:"currentColor",d:"M904 224 656.512 506.88a192 192 0 0 1-289.024 0L120 224zm-698.944 0 210.56 240.704a128 128 0 0 0 192.704 0L818.944 224H205.056"})]))}}),eO=QA,tO=A({name:"Mic",__name:"mic",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M480 704h160a64 64 0 0 0 64-64v-32h-96a32 32 0 0 1 0-64h96v-96h-96a32 32 0 0 1 0-64h96v-96h-96a32 32 0 0 1 0-64h96v-32a64 64 0 0 0-64-64H384a64 64 0 0 0-64 64v32h96a32 32 0 0 1 0 64h-96v96h96a32 32 0 0 1 0 64h-96v96h96a32 32 0 0 1 0 64h-96v32a64 64 0 0 0 64 64zm64 64v128h192a32 32 0 1 1 0 64H288a32 32 0 1 1 0-64h192V768h-96a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64h256a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128z"})]))}}),nO=tO,oO=A({name:"Microphone",__name:"microphone",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 128a128 128 0 0 0-128 128v256a128 128 0 1 0 256 0V256a128 128 0 0 0-128-128m0-64a192 192 0 0 1 192 192v256a192 192 0 1 1-384 0V256A192 192 0 0 1 512 64m-32 832v-64a288 288 0 0 1-288-288v-32a32 32 0 0 1 64 0v32a224 224 0 0 0 224 224h64a224 224 0 0 0 224-224v-32a32 32 0 1 1 64 0v32a288 288 0 0 1-288 288v64h64a32 32 0 1 1 0 64H416a32 32 0 1 1 0-64z"})]))}}),aO=oO,rO=A({name:"MilkTea",__name:"milk-tea",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M416 128V96a96 96 0 0 1 96-96h128a32 32 0 1 1 0 64H512a32 32 0 0 0-32 32v32h320a96 96 0 0 1 11.712 191.296l-39.68 581.056A64 64 0 0 1 708.224 960H315.776a64 64 0 0 1-63.872-59.648l-39.616-581.056A96 96 0 0 1 224 128zM276.48 320l39.296 576h392.448l4.8-70.784a224.064 224.064 0 0 1 30.016-439.808L747.52 320zM224 256h576a32 32 0 1 0 0-64H224a32 32 0 0 0 0 64m493.44 503.872 21.12-309.12a160 160 0 0 0-21.12 309.12"})]))}}),lO=rO,sO=A({name:"Minus",__name:"minus",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),zg=sO,iO=A({name:"Money",__name:"money",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 640v192h640V384H768v-64h150.976c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H233.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096c-2.688-5.184-4.224-10.368-4.224-24.576V640z"}),k("path",{fill:"currentColor",d:"M768 192H128v448h640zm64-22.976v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096C65.536 682.432 64 677.248 64 663.04V169.024c0-14.272 1.472-19.456 4.288-24.64a29.056 29.056 0 0 1 12.096-12.16C85.568 129.536 90.752 128 104.96 128h685.952c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64z"}),k("path",{fill:"currentColor",d:"M448 576a160 160 0 1 1 0-320 160 160 0 0 1 0 320m0-64a96 96 0 1 0 0-192 96 96 0 0 0 0 192"})]))}}),uO=iO,cO=A({name:"Monitor",__name:"monitor",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M544 768v128h192a32 32 0 1 1 0 64H288a32 32 0 1 1 0-64h192V768H192A128 128 0 0 1 64 640V256a128 128 0 0 1 128-128h640a128 128 0 0 1 128 128v384a128 128 0 0 1-128 128zM192 192a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64z"})]))}}),dO=cO,fO=A({name:"MoonNight",__name:"moon-night",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M384 512a448 448 0 0 1 215.872-383.296A384 384 0 0 0 213.76 640h188.8A448.256 448.256 0 0 1 384 512M171.136 704a448 448 0 0 1 636.992-575.296A384 384 0 0 0 499.328 704h-328.32z"}),k("path",{fill:"currentColor",d:"M32 640h960q32 0 32 32t-32 32H32q-32 0-32-32t32-32m128 128h384a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m160 127.68 224 .256a32 32 0 0 1 32 32V928a32 32 0 0 1-32 32l-224-.384a32 32 0 0 1-32-32v-.064a32 32 0 0 1 32-32z"})]))}}),pO=fO,vO=A({name:"Moon",__name:"moon",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M240.448 240.448a384 384 0 1 0 559.424 525.696 448 448 0 0 1-542.016-542.08 390.592 390.592 0 0 0-17.408 16.384zm181.056 362.048a384 384 0 0 0 525.632 16.384A448 448 0 1 1 405.056 76.8a384 384 0 0 0 16.448 525.696"})]))}}),hO=vO,mO=A({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),cf=mO,gO=A({name:"More",__name:"more",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),Hg=gO,yO=A({name:"MostlyCloudy",__name:"mostly-cloudy",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M737.216 357.952 704 349.824l-11.776-32a192.064 192.064 0 0 0-367.424 23.04l-8.96 39.04-39.04 8.96A192.064 192.064 0 0 0 320 768h368a207.808 207.808 0 0 0 207.808-208 208.32 208.32 0 0 0-158.592-202.048m15.168-62.208A272.32 272.32 0 0 1 959.744 560a271.808 271.808 0 0 1-271.552 272H320a256 256 0 0 1-57.536-505.536 256.128 256.128 0 0 1 489.92-30.72"})]))}}),_O=yO,bO=A({name:"Mouse",__name:"mouse",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M438.144 256c-68.352 0-92.736 4.672-117.76 18.112-20.096 10.752-35.52 26.176-46.272 46.272C260.672 345.408 256 369.792 256 438.144v275.712c0 68.352 4.672 92.736 18.112 117.76 10.752 20.096 26.176 35.52 46.272 46.272C345.408 891.328 369.792 896 438.144 896h147.712c68.352 0 92.736-4.672 117.76-18.112 20.096-10.752 35.52-26.176 46.272-46.272C763.328 806.592 768 782.208 768 713.856V438.144c0-68.352-4.672-92.736-18.112-117.76a110.464 110.464 0 0 0-46.272-46.272C678.592 260.672 654.208 256 585.856 256zm0-64h147.712c85.568 0 116.608 8.96 147.904 25.6 31.36 16.768 55.872 41.344 72.576 72.64C823.104 321.536 832 352.576 832 438.08v275.84c0 85.504-8.96 116.544-25.6 147.84a174.464 174.464 0 0 1-72.64 72.576C702.464 951.104 671.424 960 585.92 960H438.08c-85.504 0-116.544-8.96-147.84-25.6a174.464 174.464 0 0 1-72.64-72.704c-16.768-31.296-25.664-62.336-25.664-147.84v-275.84c0-85.504 8.96-116.544 25.6-147.84a174.464 174.464 0 0 1 72.768-72.576c31.232-16.704 62.272-25.6 147.776-25.6z"}),k("path",{fill:"currentColor",d:"M512 320q32 0 32 32v128q0 32-32 32t-32-32V352q0-32 32-32m32-96a32 32 0 0 1-64 0v-64a32 32 0 0 0-32-32h-96a32 32 0 0 1 0-64h96a96 96 0 0 1 96 96z"})]))}}),wO=bO,CO=A({name:"Mug",__name:"mug",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M736 800V160H160v640a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64m64-544h63.552a96 96 0 0 1 96 96v224a96 96 0 0 1-96 96H800v128a128 128 0 0 1-128 128H224A128 128 0 0 1 96 800V128a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 64v288h63.552a32 32 0 0 0 32-32V352a32 32 0 0 0-32-32z"})]))}}),SO=CO,kO=A({name:"MuteNotification",__name:"mute-notification",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m241.216 832 63.616-64H768V448c0-42.368-10.24-82.304-28.48-117.504l46.912-47.232C815.36 331.392 832 387.84 832 448v320h96a32 32 0 1 1 0 64zm-90.24 0H96a32 32 0 1 1 0-64h96V448a320.128 320.128 0 0 1 256-313.6V128a64 64 0 1 1 128 0v6.4a319.552 319.552 0 0 1 171.648 97.088l-45.184 45.44A256 256 0 0 0 256 448v278.336L151.04 832zM448 896h128a64 64 0 0 1-128 0"}),k("path",{fill:"currentColor",d:"M150.72 859.072a32 32 0 0 1-45.44-45.056l704-708.544a32 32 0 0 1 45.44 45.056l-704 708.544z"})]))}}),EO=kO,xO=A({name:"Mute",__name:"mute",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m412.16 592.128-45.44 45.44A191.232 191.232 0 0 1 320 512V256a192 192 0 1 1 384 0v44.352l-64 64V256a128 128 0 1 0-256 0v256c0 30.336 10.56 58.24 28.16 80.128m51.968 38.592A128 128 0 0 0 640 512v-57.152l64-64V512a192 192 0 0 1-287.68 166.528zM314.88 779.968l46.144-46.08A222.976 222.976 0 0 0 480 768h64a224 224 0 0 0 224-224v-32a32 32 0 1 1 64 0v32a288 288 0 0 1-288 288v64h64a32 32 0 1 1 0 64H416a32 32 0 1 1 0-64h64v-64c-61.44 0-118.4-19.2-165.12-52.032M266.752 737.6A286.976 286.976 0 0 1 192 544v-32a32 32 0 0 1 64 0v32c0 56.832 21.184 108.8 56.064 148.288z"}),k("path",{fill:"currentColor",d:"M150.72 859.072a32 32 0 0 1-45.44-45.056l704-708.544a32 32 0 0 1 45.44 45.056l-704 708.544z"})]))}}),MO=xO,$O=A({name:"NoSmoking",__name:"no-smoking",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M440.256 576H256v128h56.256l-64 64H224a32 32 0 0 1-32-32V544a32 32 0 0 1 32-32h280.256zm143.488 128H704V583.744L775.744 512H928a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32H519.744zM768 576v128h128V576zm-29.696-207.552 45.248 45.248-497.856 497.856-45.248-45.248zM256 64h64v320h-64zM128 192h64v192h-64zM64 512h64v256H64z"})]))}}),TO=$O,AO=A({name:"Notebook",__name:"notebook",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M192 128v768h640V128zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M672 128h64v768h-64zM96 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32"})]))}}),OO=AO,NO=A({name:"Notification",__name:"notification",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 128v64H256a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V512h64v256a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V256a128 128 0 0 1 128-128z"}),k("path",{fill:"currentColor",d:"M768 384a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384"})]))}}),IO=NO,RO=A({name:"Odometer",__name:"odometer",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),k("path",{fill:"currentColor",d:"M192 512a320 320 0 1 1 640 0 32 32 0 1 1-64 0 256 256 0 1 0-512 0 32 32 0 0 1-64 0"}),k("path",{fill:"currentColor",d:"M570.432 627.84A96 96 0 1 1 509.568 608l60.992-187.776A32 32 0 1 1 631.424 440l-60.992 187.776zM502.08 734.464a32 32 0 1 0 19.84-60.928 32 32 0 0 0-19.84 60.928"})]))}}),PO=RO,LO=A({name:"OfficeBuilding",__name:"office-building",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M192 128v704h384V128zm-32-64h448a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M256 256h256v64H256zm0 192h256v64H256zm0 192h256v64H256zm384-128h128v64H640zm0 128h128v64H640zM64 832h896v64H64z"}),k("path",{fill:"currentColor",d:"M640 384v448h192V384zm-32-64h256a32 32 0 0 1 32 32v512a32 32 0 0 1-32 32H608a32 32 0 0 1-32-32V352a32 32 0 0 1 32-32"})]))}}),VO=LO,BO=A({name:"Open",__name:"open",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M329.956 257.138a254.862 254.862 0 0 0 0 509.724h364.088a254.862 254.862 0 0 0 0-509.724zm0-72.818h364.088a327.68 327.68 0 1 1 0 655.36H329.956a327.68 327.68 0 1 1 0-655.36z"}),k("path",{fill:"currentColor",d:"M694.044 621.227a109.227 109.227 0 1 0 0-218.454 109.227 109.227 0 0 0 0 218.454m0 72.817a182.044 182.044 0 1 1 0-364.088 182.044 182.044 0 0 1 0 364.088"})]))}}),zO=BO,HO=A({name:"Operation",__name:"operation",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M389.44 768a96.064 96.064 0 0 1 181.12 0H896v64H570.56a96.064 96.064 0 0 1-181.12 0H128v-64zm192-288a96.064 96.064 0 0 1 181.12 0H896v64H762.56a96.064 96.064 0 0 1-181.12 0H128v-64zm-320-288a96.064 96.064 0 0 1 181.12 0H896v64H442.56a96.064 96.064 0 0 1-181.12 0H128v-64z"})]))}}),DO=HO,FO=A({name:"Opportunity",__name:"opportunity",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M384 960v-64h192.064v64zm448-544a350.656 350.656 0 0 1-128.32 271.424C665.344 719.04 640 763.776 640 813.504V832H320v-14.336c0-48-19.392-95.36-57.216-124.992a351.552 351.552 0 0 1-128.448-344.256c25.344-136.448 133.888-248.128 269.76-276.48A352.384 352.384 0 0 1 832 416m-544 32c0-132.288 75.904-224 192-224v-64c-154.432 0-256 122.752-256 288z"})]))}}),KO=FO,WO=A({name:"Orange",__name:"orange",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M544 894.72a382.336 382.336 0 0 0 215.936-89.472L577.024 622.272c-10.24 6.016-21.248 10.688-33.024 13.696v258.688zm261.248-134.784A382.336 382.336 0 0 0 894.656 544H635.968c-3.008 11.776-7.68 22.848-13.696 33.024l182.976 182.912zM894.656 480a382.336 382.336 0 0 0-89.408-215.936L622.272 446.976c6.016 10.24 10.688 21.248 13.696 33.024h258.688zm-134.72-261.248A382.336 382.336 0 0 0 544 129.344v258.688c11.776 3.008 22.848 7.68 33.024 13.696zM480 129.344a382.336 382.336 0 0 0-215.936 89.408l182.912 182.976c10.24-6.016 21.248-10.688 33.024-13.696zm-261.248 134.72A382.336 382.336 0 0 0 129.344 480h258.688c3.008-11.776 7.68-22.848 13.696-33.024zM129.344 544a382.336 382.336 0 0 0 89.408 215.936l182.976-182.912A127.232 127.232 0 0 1 388.032 544zm134.72 261.248A382.336 382.336 0 0 0 480 894.656V635.968a127.232 127.232 0 0 1-33.024-13.696zM512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896m0-384a64 64 0 1 0 0-128 64 64 0 0 0 0 128"})]))}}),jO=WO,qO=A({name:"Paperclip",__name:"paperclip",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M602.496 240.448A192 192 0 1 1 874.048 512l-316.8 316.8A256 256 0 0 1 195.2 466.752L602.496 59.456l45.248 45.248L240.448 512A192 192 0 0 0 512 783.552l316.8-316.8a128 128 0 1 0-181.056-181.056L353.6 579.904a32 32 0 1 0 45.248 45.248l294.144-294.144 45.312 45.248L444.096 670.4a96 96 0 1 1-135.744-135.744l294.144-294.208z"})]))}}),UO=qO,YO=A({name:"PartlyCloudy",__name:"partly-cloudy",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M598.4 895.872H328.192a256 256 0 0 1-34.496-510.528A352 352 0 1 1 598.4 895.872m-271.36-64h272.256a288 288 0 1 0-248.512-417.664L335.04 445.44l-34.816 3.584a192 192 0 0 0 26.88 382.848z"}),k("path",{fill:"currentColor",d:"M139.84 501.888a256 256 0 1 1 417.856-277.12c-17.728 2.176-38.208 8.448-61.504 18.816A192 192 0 1 0 189.12 460.48a6003.84 6003.84 0 0 0-49.28 41.408z"})]))}}),GO=YO,XO=A({name:"Pear",__name:"pear",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M542.336 258.816a443.255 443.255 0 0 0-9.024 25.088 32 32 0 1 1-60.8-20.032l1.088-3.328a162.688 162.688 0 0 0-122.048 131.392l-17.088 102.72-20.736 15.36C256.192 552.704 224 610.88 224 672c0 120.576 126.4 224 288 224s288-103.424 288-224c0-61.12-32.192-119.296-89.728-161.92l-20.736-15.424-17.088-102.72a162.688 162.688 0 0 0-130.112-133.12zm-40.128-66.56c7.936-15.552 16.576-30.08 25.92-43.776 23.296-33.92 49.408-59.776 78.528-77.12a32 32 0 1 1 32.704 55.04c-20.544 12.224-40.064 31.552-58.432 58.304a316.608 316.608 0 0 0-9.792 15.104 226.688 226.688 0 0 1 164.48 181.568l12.8 77.248C819.456 511.36 864 587.392 864 672c0 159.04-157.568 288-352 288S160 831.04 160 672c0-84.608 44.608-160.64 115.584-213.376l12.8-77.248a226.624 226.624 0 0 1 213.76-189.184z"})]))}}),JO=XO,ZO=A({name:"PhoneFilled",__name:"phone-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M199.232 125.568 90.624 379.008a32 32 0 0 0 6.784 35.2l512.384 512.384a32 32 0 0 0 35.2 6.784l253.44-108.608a32 32 0 0 0 10.048-52.032L769.6 633.92a32 32 0 0 0-36.928-5.952l-130.176 65.088-271.488-271.552 65.024-130.176a32 32 0 0 0-5.952-36.928L251.2 115.52a32 32 0 0 0-51.968 10.048z"})]))}}),QO=ZO,eN=A({name:"Phone",__name:"phone",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M79.36 432.256 591.744 944.64a32 32 0 0 0 35.2 6.784l253.44-108.544a32 32 0 0 0 9.984-52.032l-153.856-153.92a32 32 0 0 0-36.928-6.016l-69.888 34.944L358.08 394.24l35.008-69.888a32 32 0 0 0-5.952-36.928L233.152 133.568a32 32 0 0 0-52.032 10.048L72.512 397.056a32 32 0 0 0 6.784 35.2zm60.48-29.952 81.536-190.08L325.568 316.48l-24.64 49.216-20.608 41.216 32.576 32.64 271.552 271.552 32.64 32.64 41.216-20.672 49.28-24.576 104.192 104.128-190.08 81.472L139.84 402.304zM512 320v-64a256 256 0 0 1 256 256h-64a192 192 0 0 0-192-192m0-192V64a448 448 0 0 1 448 448h-64a384 384 0 0 0-384-384"})]))}}),tN=eN,nN=A({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Dg=nN,oN=A({name:"PictureRounded",__name:"picture-rounded",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 128a384 384 0 1 0 0 768 384 384 0 0 0 0-768m0-64a448 448 0 1 1 0 896 448 448 0 0 1 0-896"}),k("path",{fill:"currentColor",d:"M640 288q64 0 64 64t-64 64q-64 0-64-64t64-64M214.656 790.656l-45.312-45.312 185.664-185.6a96 96 0 0 1 123.712-10.24l138.24 98.688a32 32 0 0 0 39.872-2.176L906.688 422.4l42.624 47.744L699.52 693.696a96 96 0 0 1-119.808 6.592l-138.24-98.752a32 32 0 0 0-41.152 3.456l-185.664 185.6z"})]))}}),aN=oN,rN=A({name:"Picture",__name:"picture",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 160v704h704V160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M384 288q64 0 64 64t-64 64q-64 0-64-64t64-64M185.408 876.992l-50.816-38.912L350.72 556.032a96 96 0 0 1 134.592-17.856l1.856 1.472 122.88 99.136a32 32 0 0 0 44.992-4.864l216-269.888 49.92 39.936-215.808 269.824-.256.32a96 96 0 0 1-135.04 14.464l-122.88-99.072-.64-.512a32 32 0 0 0-44.8 5.952z"})]))}}),lN=rN,sN=A({name:"PieChart",__name:"pie-chart",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M448 68.48v64.832A384.128 384.128 0 0 0 512 896a384.128 384.128 0 0 0 378.688-320h64.768A448.128 448.128 0 0 1 64 512 448.128 448.128 0 0 1 448 68.48z"}),k("path",{fill:"currentColor",d:"M576 97.28V448h350.72A384.064 384.064 0 0 0 576 97.28zM512 64V33.152A448 448 0 0 1 990.848 512H512z"})]))}}),iN=sN,uN=A({name:"Place",__name:"place",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 512a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512"}),k("path",{fill:"currentColor",d:"M512 512a32 32 0 0 1 32 32v256a32 32 0 1 1-64 0V544a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M384 649.088v64.96C269.76 732.352 192 771.904 192 800c0 37.696 139.904 96 320 96s320-58.304 320-96c0-28.16-77.76-67.648-192-85.952v-64.96C789.12 671.04 896 730.368 896 800c0 88.32-171.904 160-384 160s-384-71.68-384-160c0-69.696 106.88-128.96 256-150.912"})]))}}),cN=uN,dN=A({name:"Platform",__name:"platform",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M448 832v-64h128v64h192v64H256v-64zM128 704V128h768v576z"})]))}}),fN=dN,pN=A({name:"Plus",__name:"plus",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),s2=pN,vN=A({name:"Pointer",__name:"pointer",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M511.552 128c-35.584 0-64.384 28.8-64.384 64.448v516.48L274.048 570.88a94.272 94.272 0 0 0-112.896-3.456 44.416 44.416 0 0 0-8.96 62.208L332.8 870.4A64 64 0 0 0 384 896h512V575.232a64 64 0 0 0-45.632-61.312l-205.952-61.76A96 96 0 0 1 576 360.192V192.448C576 156.8 547.2 128 511.552 128M359.04 556.8l24.128 19.2V192.448a128.448 128.448 0 1 1 256.832 0v167.744a32 32 0 0 0 22.784 30.656l206.016 61.76A128 128 0 0 1 960 575.232V896a64 64 0 0 1-64 64H384a128 128 0 0 1-102.4-51.2L101.056 668.032A108.416 108.416 0 0 1 128 512.512a158.272 158.272 0 0 1 185.984 8.32z"})]))}}),hN=vN,mN=A({name:"Position",__name:"position",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m249.6 417.088 319.744 43.072 39.168 310.272L845.12 178.88 249.6 417.088zm-129.024 47.168a32 32 0 0 1-7.68-61.44l777.792-311.04a32 32 0 0 1 41.6 41.6l-310.336 775.68a32 32 0 0 1-61.44-7.808L512 516.992l-391.424-52.736z"})]))}}),gN=mN,yN=A({name:"Postcard",__name:"postcard",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 224a32 32 0 0 0-32 32v512a32 32 0 0 0 32 32h704a32 32 0 0 0 32-32V256a32 32 0 0 0-32-32zm0-64h704a96 96 0 0 1 96 96v512a96 96 0 0 1-96 96H160a96 96 0 0 1-96-96V256a96 96 0 0 1 96-96"}),k("path",{fill:"currentColor",d:"M704 320a64 64 0 1 1 0 128 64 64 0 0 1 0-128M288 448h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32m0 128h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32"})]))}}),_N=yN,bN=A({name:"Pouring",__name:"pouring",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m739.328 291.328-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 97.28 78.72 175.936 175.808 175.936h400a192 192 0 0 0 35.776-380.672zM959.552 480a256 256 0 0 1-256 256h-400A239.808 239.808 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 959.552 480M224 800a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32"})]))}}),wN=bN,CN=A({name:"Present",__name:"present",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M480 896V640H192v-64h288V320H192v576zm64 0h288V320H544v256h288v64H544zM128 256h768v672a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32z"}),k("path",{fill:"currentColor",d:"M96 256h832q32 0 32 32t-32 32H96q-32 0-32-32t32-32"}),k("path",{fill:"currentColor",d:"M416 256a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"}),k("path",{fill:"currentColor",d:"M608 256a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"})]))}}),SN=CN,kN=A({name:"PriceTag",__name:"price-tag",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M224 318.336V896h576V318.336L552.512 115.84a64 64 0 0 0-81.024 0zM593.024 66.304l259.2 212.096A32 32 0 0 1 864 303.168V928a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V303.168a32 32 0 0 1 11.712-24.768l259.2-212.096a128 128 0 0 1 162.112 0z"}),k("path",{fill:"currentColor",d:"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"})]))}}),EN=kN,xN=A({name:"Printer",__name:"printer",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 768H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096C65.536 746.432 64 741.248 64 727.04V379.072c0-42.816 4.48-58.304 12.8-73.984 8.384-15.616 20.672-27.904 36.288-36.288 15.68-8.32 31.168-12.8 73.984-12.8H256V64h512v192h68.928c42.816 0 58.304 4.48 73.984 12.8 15.616 8.384 27.904 20.672 36.288 36.288 8.32 15.68 12.8 31.168 12.8 73.984v347.904c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H768v192H256zm64-192v320h384V576zm-64 128V512h512v192h128V379.072c0-29.376-1.408-36.48-5.248-43.776a23.296 23.296 0 0 0-10.048-10.048c-7.232-3.84-14.4-5.248-43.776-5.248H187.072c-29.376 0-36.48 1.408-43.776 5.248a23.296 23.296 0 0 0-10.048 10.048c-3.84 7.232-5.248 14.4-5.248 43.776V704zm64-448h384V128H320zm-64 128h64v64h-64zm128 0h64v64h-64z"})]))}}),MN=xN,$N=A({name:"Promotion",__name:"promotion",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472zm256 512V657.024L512 768z"})]))}}),TN=$N,AN=A({name:"QuartzWatch",__name:"quartz-watch",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M422.02 602.01v-.03c-6.68-5.99-14.35-8.83-23.01-8.51-8.67.32-16.17 3.66-22.5 10.02-6.33 6.36-9.5 13.7-9.5 22.02s3 15.82 8.99 22.5c8.68 8.68 19.02 11.35 31.01 8s19.49-10.85 22.5-22.5c3.01-11.65.51-22.15-7.49-31.49zM384 512c0-9.35-3-17.02-8.99-23.01-6-5.99-13.66-8.99-23.01-8.99-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.66 8.99 23.01 8.99 9.35 0 17.02-3 23.01-8.99 5.99-6 8.99-13.67 8.99-23.01m6.53-82.49c11.65 3.01 22.15.51 31.49-7.49h.04c5.99-6.68 8.83-14.34 8.51-23.01-.32-8.67-3.66-16.16-10.02-22.5-6.36-6.33-13.7-9.5-22.02-9.5s-15.82 3-22.5 8.99c-8.68 8.69-11.35 19.02-8 31.01 3.35 11.99 10.85 19.49 22.5 22.5zm242.94 0c11.67-3.03 19.01-10.37 22.02-22.02 3.01-11.65.51-22.15-7.49-31.49h.01c-6.68-5.99-14.18-8.99-22.5-8.99s-15.66 3.16-22.02 9.5c-6.36 6.34-9.7 13.84-10.02 22.5-.32 8.66 2.52 16.33 8.51 23.01 9.32 8.02 19.82 10.52 31.49 7.49M512 640c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.67 8.99 23.01 8.99 9.35 0 17.02-3 23.01-8.99 5.99-6 8.99-13.66 8.99-23.01s-3-17.02-8.99-23.01c-6-5.99-13.66-8.99-23.01-8.99m183.01-151.01c-6-5.99-13.66-8.99-23.01-8.99s-17.02 3-23.01 8.99c-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.66 8.99 23.01 8.99s17.02-3 23.01-8.99c5.99-6 8.99-13.67 8.99-23.01 0-9.35-3-17.02-8.99-23.01"}),k("path",{fill:"currentColor",d:"M832 512c-2-90.67-33.17-166.17-93.5-226.5-20.43-20.42-42.6-37.49-66.5-51.23V64H352v170.26c-23.9 13.74-46.07 30.81-66.5 51.24-60.33 60.33-91.49 135.83-93.5 226.5 2 90.67 33.17 166.17 93.5 226.5 20.43 20.43 42.6 37.5 66.5 51.24V960h320V789.74c23.9-13.74 46.07-30.81 66.5-51.24 60.33-60.34 91.49-135.83 93.5-226.5M416 128h192v78.69c-29.85-9.03-61.85-13.93-96-14.69-34.15.75-66.15 5.65-96 14.68zm192 768H416v-78.68c29.85 9.03 61.85 13.93 96 14.68 34.15-.75 66.15-5.65 96-14.68zm-96-128c-72.66-2.01-132.99-27.01-180.99-75.01S258.01 584.66 256 512c2.01-72.66 27.01-132.99 75.01-180.99S439.34 258.01 512 256c72.66 2.01 132.99 27.01 180.99 75.01S765.99 439.34 768 512c-2.01 72.66-27.01 132.99-75.01 180.99S584.66 765.99 512 768"}),k("path",{fill:"currentColor",d:"M512 320c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.66-8.99 23.01 0 9.35 3 17.02 8.99 23.01 6 5.99 13.67 8.99 23.01 8.99 9.35 0 17.02-3 23.01-8.99 5.99-6 8.99-13.66 8.99-23.01 0-9.35-3-17.02-8.99-23.01-6-5.99-13.66-8.99-23.01-8.99m112.99 273.5c-8.66-.32-16.33 2.52-23.01 8.51-7.98 9.32-10.48 19.82-7.49 31.49s10.49 19.17 22.5 22.5 22.35.66 31.01-8v.04c5.99-6.68 8.99-14.18 8.99-22.5s-3.16-15.66-9.5-22.02-13.84-9.7-22.5-10.02"})]))}}),ON=AN,NN=A({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),Fg=NN,IN=A({name:"Rank",__name:"rank",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m186.496 544 41.408 41.344a32 32 0 1 1-45.248 45.312l-96-96a32 32 0 0 1 0-45.312l96-96a32 32 0 1 1 45.248 45.312L186.496 480h290.816V186.432l-41.472 41.472a32 32 0 1 1-45.248-45.184l96-96.128a32 32 0 0 1 45.312 0l96 96.064a32 32 0 0 1-45.248 45.184l-41.344-41.28V480H832l-41.344-41.344a32 32 0 0 1 45.248-45.312l96 96a32 32 0 0 1 0 45.312l-96 96a32 32 0 0 1-45.248-45.312L832 544H541.312v293.44l41.344-41.28a32 32 0 1 1 45.248 45.248l-96 96a32 32 0 0 1-45.312 0l-96-96a32 32 0 1 1 45.312-45.248l41.408 41.408V544H186.496z"})]))}}),RN=IN,PN=A({name:"ReadingLamp",__name:"reading-lamp",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M352 896h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m-44.672-768-99.52 448h608.384l-99.52-448zm-25.6-64h460.608a32 32 0 0 1 31.232 25.088l113.792 512A32 32 0 0 1 856.128 640H167.872a32 32 0 0 1-31.232-38.912l113.792-512A32 32 0 0 1 281.664 64z"}),k("path",{fill:"currentColor",d:"M672 576q32 0 32 32v128q0 32-32 32t-32-32V608q0-32 32-32m-192-.064h64V960h-64z"})]))}}),LN=PN,VN=A({name:"Reading",__name:"reading",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m512 863.36 384-54.848v-638.72L525.568 222.72a96 96 0 0 1-27.136 0L128 169.792v638.72zM137.024 106.432l370.432 52.928a32 32 0 0 0 9.088 0l370.432-52.928A64 64 0 0 1 960 169.792v638.72a64 64 0 0 1-54.976 63.36l-388.48 55.488a32 32 0 0 1-9.088 0l-388.48-55.488A64 64 0 0 1 64 808.512v-638.72a64 64 0 0 1 73.024-63.36z"}),k("path",{fill:"currentColor",d:"M480 192h64v704h-64z"})]))}}),BN=VN,zN=A({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),Kg=zN,HN=A({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),Wg=HN,DN=A({name:"Refresh",__name:"refresh",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64h149.056a32 32 0 0 1 32 32v148.928a32 32 0 1 1-64 0v-50.56zM276.288 295.616h92.992a32 32 0 0 1 0 64H220.16a32 32 0 0 1-32-32V178.56a32 32 0 0 1 64 0v50.56A384 384 0 0 1 896.128 512h-64a320 320 0 0 0-555.776-216.384z"})]))}}),FN=DN,KN=A({name:"Refrigerator",__name:"refrigerator",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 448h512V160a32 32 0 0 0-32-32H288a32 32 0 0 0-32 32zm0 64v352a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V512zm32-448h448a96 96 0 0 1 96 96v704a96 96 0 0 1-96 96H288a96 96 0 0 1-96-96V160a96 96 0 0 1 96-96m32 224h64v96h-64zm0 288h64v96h-64z"})]))}}),WN=KN,jN=A({name:"RemoveFilled",__name:"remove-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896M288 512a38.4 38.4 0 0 0 38.4 38.4h371.2a38.4 38.4 0 0 0 0-76.8H326.4A38.4 38.4 0 0 0 288 512"})]))}}),qN=jN,UN=A({name:"Remove",__name:"remove",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M352 480h320a32 32 0 1 1 0 64H352a32 32 0 0 1 0-64"}),k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),YN=UN,GN=A({name:"Right",__name:"right",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M754.752 480H160a32 32 0 1 0 0 64h594.752L521.344 777.344a32 32 0 0 0 45.312 45.312l288-288a32 32 0 0 0 0-45.312l-288-288a32 32 0 1 0-45.312 45.312z"})]))}}),XN=GN,JN=A({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),jg=JN,ZN=A({name:"School",__name:"school",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M224 128v704h576V128zm-32-64h640a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M64 832h896v64H64zm256-640h128v96H320z"}),k("path",{fill:"currentColor",d:"M384 832h256v-64a128 128 0 1 0-256 0zm128-256a192 192 0 0 1 192 192v128H320V768a192 192 0 0 1 192-192M320 384h128v96H320zm256-192h128v96H576zm0 192h128v96H576z"})]))}}),QN=ZN,eI=A({name:"Scissor",__name:"scissor",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m512.064 578.368-106.88 152.768a160 160 0 1 1-23.36-78.208L472.96 522.56 196.864 128.256a32 32 0 1 1 52.48-36.736l393.024 561.344a160 160 0 1 1-23.36 78.208l-106.88-152.704zm54.4-189.248 208.384-297.6a32 32 0 0 1 52.48 36.736l-221.76 316.672-39.04-55.808zm-376.32 425.856a96 96 0 1 0 110.144-157.248 96 96 0 0 0-110.08 157.248zm643.84 0a96 96 0 1 0-110.08-157.248 96 96 0 0 0 110.08 157.248"})]))}}),tI=eI,nI=A({name:"Search",__name:"search",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),qg=nI,oI=A({name:"Select",__name:"select",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496z"})]))}}),aI=oI,rI=A({name:"Sell",__name:"sell",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M704 288h131.072a32 32 0 0 1 31.808 28.8L886.4 512h-64.384l-16-160H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0v-96H217.92l-51.2 512H512v64H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4zm-64 0v-22.336C640 189.248 582.272 128 512 128c-70.272 0-128 61.248-128 137.664v22.4h256zm201.408 483.84L768 698.496V928a32 32 0 1 1-64 0V698.496l-73.344 73.344a32 32 0 1 1-45.248-45.248l128-128a32 32 0 0 1 45.248 0l128 128a32 32 0 1 1-45.248 45.248z"})]))}}),lI=rI,sI=A({name:"SemiSelect",__name:"semi-select",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 448h768q64 0 64 64t-64 64H128q-64 0-64-64t64-64"})]))}}),iI=sI,uI=A({name:"Service",__name:"service",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M864 409.6a192 192 0 0 1-37.888 349.44A256.064 256.064 0 0 1 576 960h-96a32 32 0 1 1 0-64h96a192.064 192.064 0 0 0 181.12-128H736a32 32 0 0 1-32-32V416a32 32 0 0 1 32-32h32c10.368 0 20.544.832 30.528 2.432a288 288 0 0 0-573.056 0A193.235 193.235 0 0 1 256 384h32a32 32 0 0 1 32 32v320a32 32 0 0 1-32 32h-32a192 192 0 0 1-96-358.4 352 352 0 0 1 704 0M256 448a128 128 0 1 0 0 256zm640 128a128 128 0 0 0-128-128v256a128 128 0 0 0 128-128"})]))}}),cI=uI,dI=A({name:"SetUp",__name:"set-up",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M224 160a64 64 0 0 0-64 64v576a64 64 0 0 0 64 64h576a64 64 0 0 0 64-64V224a64 64 0 0 0-64-64zm0-64h576a128 128 0 0 1 128 128v576a128 128 0 0 1-128 128H224A128 128 0 0 1 96 800V224A128 128 0 0 1 224 96"}),k("path",{fill:"currentColor",d:"M384 416a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"}),k("path",{fill:"currentColor",d:"M480 320h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32m160 416a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"}),k("path",{fill:"currentColor",d:"M288 640h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32"})]))}}),fI=dI,pI=A({name:"Setting",__name:"setting",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296l112.32 24.256c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384m0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256"})]))}}),vI=pI,hI=A({name:"Share",__name:"share",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m679.872 348.8-301.76 188.608a127.808 127.808 0 0 1 5.12 52.16l279.936 104.96a128 128 0 1 1-22.464 59.904l-279.872-104.96a128 128 0 1 1-16.64-166.272l301.696-188.608a128 128 0 1 1 33.92 54.272z"})]))}}),mI=hI,gI=A({name:"Ship",__name:"ship",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 386.88V448h405.568a32 32 0 0 1 30.72 40.768l-76.48 267.968A192 192 0 0 1 687.168 896H336.832a192 192 0 0 1-184.64-139.264L75.648 488.768A32 32 0 0 1 106.368 448H448V117.888a32 32 0 0 1 47.36-28.096l13.888 7.616L512 96v2.88l231.68 126.4a32 32 0 0 1-2.048 57.216zm0-70.272 144.768-65.792L512 171.84zM512 512H148.864l18.24 64H856.96l18.24-64zM185.408 640l28.352 99.2A128 128 0 0 0 336.832 832h350.336a128 128 0 0 0 123.072-92.8l28.352-99.2H185.408"})]))}}),yI=gI,_I=A({name:"Shop",__name:"shop",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M704 704h64v192H256V704h64v64h384zm188.544-152.192C894.528 559.616 896 567.616 896 576a96 96 0 1 1-192 0 96 96 0 1 1-192 0 96 96 0 1 1-192 0 96 96 0 1 1-192 0c0-8.384 1.408-16.384 3.392-24.192L192 128h640z"})]))}}),bI=_I,wI=A({name:"ShoppingBag",__name:"shopping-bag",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M704 320v96a32 32 0 0 1-32 32h-32V320H384v128h-32a32 32 0 0 1-32-32v-96H192v576h640V320zm-384-64a192 192 0 1 1 384 0h160a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32zm64 0h256a128 128 0 1 0-256 0"}),k("path",{fill:"currentColor",d:"M192 704h640v64H192z"})]))}}),CI=wI,SI=A({name:"ShoppingCartFull",__name:"shopping-cart-full",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M432 928a48 48 0 1 1 0-96 48 48 0 0 1 0 96m320 0a48 48 0 1 1 0-96 48 48 0 0 1 0 96M96 128a32 32 0 0 1 0-64h160a32 32 0 0 1 31.36 25.728L320.64 256H928a32 32 0 0 1 31.296 38.72l-96 448A32 32 0 0 1 832 768H384a32 32 0 0 1-31.36-25.728L229.76 128zm314.24 576h395.904l82.304-384H333.44l76.8 384z"}),k("path",{fill:"currentColor",d:"M699.648 256 608 145.984 516.352 256h183.296zm-140.8-151.04a64 64 0 0 1 98.304 0L836.352 320H379.648l179.2-215.04"})]))}}),kI=SI,EI=A({name:"ShoppingCart",__name:"shopping-cart",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M432 928a48 48 0 1 1 0-96 48 48 0 0 1 0 96m320 0a48 48 0 1 1 0-96 48 48 0 0 1 0 96M96 128a32 32 0 0 1 0-64h160a32 32 0 0 1 31.36 25.728L320.64 256H928a32 32 0 0 1 31.296 38.72l-96 448A32 32 0 0 1 832 768H384a32 32 0 0 1-31.36-25.728L229.76 128zm314.24 576h395.904l82.304-384H333.44l76.8 384z"})]))}}),xI=EI,MI=A({name:"ShoppingTrolley",__name:"shopping-trolley",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M368 833c-13.3 0-24.5 4.5-33.5 13.5S321 866.7 321 880s4.5 24.5 13.5 33.5 20.2 13.8 33.5 14.5c13.3-.7 24.5-5.5 33.5-14.5S415 893.3 415 880s-4.5-24.5-13.5-33.5S381.3 833 368 833m439-193c7.4 0 13.8-2.2 19.5-6.5S836 623.3 838 616l112-448c2-10-.2-19.2-6.5-27.5S929 128 919 128H96c-9.3 0-17 3-23 9s-9 13.7-9 23 3 17 9 23 13.7 9 23 9h96v576h672c9.3 0 17-3 23-9s9-13.7 9-23-3-17-9-23-13.7-9-23-9H256v-64zM256 192h622l-96 384H256zm432 641c-13.3 0-24.5 4.5-33.5 13.5S641 866.7 641 880s4.5 24.5 13.5 33.5 20.2 13.8 33.5 14.5c13.3-.7 24.5-5.5 33.5-14.5S735 893.3 735 880s-4.5-24.5-13.5-33.5S701.3 833 688 833"})]))}}),$I=MI,TI=A({name:"Smoking",__name:"smoking",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 576v128h640V576zm-32-64h704a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32H224a32 32 0 0 1-32-32V544a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M704 576h64v128h-64zM256 64h64v320h-64zM128 192h64v192h-64zM64 512h64v256H64z"})]))}}),AI=TI,OI=A({name:"Soccer",__name:"soccer",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M418.496 871.04 152.256 604.8c-16.512 94.016-2.368 178.624 42.944 224 44.928 44.928 129.344 58.752 223.296 42.24m72.32-18.176a573.056 573.056 0 0 0 224.832-137.216 573.12 573.12 0 0 0 137.216-224.832L533.888 171.84a578.56 578.56 0 0 0-227.52 138.496A567.68 567.68 0 0 0 170.432 532.48l320.384 320.384zM871.04 418.496c16.512-93.952 2.688-178.368-42.24-223.296-44.544-44.544-128.704-58.048-222.592-41.536zM149.952 874.048c-112.96-112.96-88.832-408.96 111.168-608.96C461.056 65.152 760.96 36.928 874.048 149.952c113.024 113.024 86.784 411.008-113.152 610.944-199.936 199.936-497.92 226.112-610.944 113.152m452.544-497.792 22.656-22.656a32 32 0 0 1 45.248 45.248l-22.656 22.656 45.248 45.248A32 32 0 1 1 647.744 512l-45.248-45.248L557.248 512l45.248 45.248a32 32 0 1 1-45.248 45.248L512 557.248l-45.248 45.248L512 647.744a32 32 0 1 1-45.248 45.248l-45.248-45.248-22.656 22.656a32 32 0 1 1-45.248-45.248l22.656-22.656-45.248-45.248A32 32 0 1 1 376.256 512l45.248 45.248L466.752 512l-45.248-45.248a32 32 0 1 1 45.248-45.248L512 466.752l45.248-45.248L512 376.256a32 32 0 0 1 45.248-45.248l45.248 45.248z"})]))}}),NI=OI,II=A({name:"SoldOut",__name:"sold-out",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M704 288h131.072a32 32 0 0 1 31.808 28.8L886.4 512h-64.384l-16-160H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0v-96H217.92l-51.2 512H512v64H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4zm-64 0v-22.336C640 189.248 582.272 128 512 128c-70.272 0-128 61.248-128 137.664v22.4h256zm201.408 476.16a32 32 0 1 1 45.248 45.184l-128 128a32 32 0 0 1-45.248 0l-128-128a32 32 0 1 1 45.248-45.248L704 837.504V608a32 32 0 1 1 64 0v229.504l73.408-73.408z"})]))}}),RI=II,PI=A({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Ug=PI,LI=A({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),Yg=LI,VI=A({name:"Sort",__name:"sort",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M384 96a32 32 0 0 1 64 0v786.752a32 32 0 0 1-54.592 22.656L95.936 608a32 32 0 0 1 0-45.312h.128a32 32 0 0 1 45.184 0L384 805.632zm192 45.248a32 32 0 0 1 54.592-22.592L928.064 416a32 32 0 0 1 0 45.312h-.128a32 32 0 0 1-45.184 0L640 218.496V928a32 32 0 1 1-64 0V141.248z"})]))}}),BI=VI,zI=A({name:"Stamp",__name:"stamp",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M624 475.968V640h144a128 128 0 0 1 128 128H128a128 128 0 0 1 128-128h144V475.968a192 192 0 1 1 224 0M128 896v-64h768v64z"})]))}}),HI=zI,DI=A({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),Ql=DI,FI=A({name:"Star",__name:"star",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Gg=FI,KI=A({name:"Stopwatch",__name:"stopwatch",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),k("path",{fill:"currentColor",d:"M672 234.88c-39.168 174.464-80 298.624-122.688 372.48-64 110.848-202.624 30.848-138.624-80C453.376 453.44 540.48 355.968 672 234.816z"})]))}}),WI=KI,jI=A({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),i2=jI,qI=A({name:"Sugar",__name:"sugar",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m801.728 349.184 4.48 4.48a128 128 0 0 1 0 180.992L534.656 806.144a128 128 0 0 1-181.056 0l-4.48-4.48-19.392 109.696a64 64 0 0 1-108.288 34.176L78.464 802.56a64 64 0 0 1 34.176-108.288l109.76-19.328-4.544-4.544a128 128 0 0 1 0-181.056l271.488-271.488a128 128 0 0 1 181.056 0l4.48 4.48 19.392-109.504a64 64 0 0 1 108.352-34.048l142.592 143.04a64 64 0 0 1-34.24 108.16l-109.248 19.2zm-548.8 198.72h447.168v2.24l60.8-60.8a63.808 63.808 0 0 0 18.752-44.416h-426.88l-89.664 89.728a64.064 64.064 0 0 0-10.24 13.248zm0 64c2.752 4.736 6.144 9.152 10.176 13.248l135.744 135.744a64 64 0 0 0 90.496 0L638.4 611.904zm490.048-230.976L625.152 263.104a64 64 0 0 0-90.496 0L416.768 380.928zM123.712 757.312l142.976 142.976 24.32-137.6a25.6 25.6 0 0 0-29.696-29.632l-137.6 24.256zm633.6-633.344-24.32 137.472a25.6 25.6 0 0 0 29.632 29.632l137.28-24.064-142.656-143.04z"})]))}}),UI=qI,YI=A({name:"SuitcaseLine",__name:"suitcase-line",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M922.5 229.5c-24.32-24.34-54.49-36.84-90.5-37.5H704v-64c-.68-17.98-7.02-32.98-19.01-44.99S658.01 64.66 640 64H384c-17.98.68-32.98 7.02-44.99 19.01S320.66 110 320 128v64H192c-35.99.68-66.16 13.18-90.5 37.5C77.16 253.82 64.66 283.99 64 320v448c.68 35.99 13.18 66.16 37.5 90.5s54.49 36.84 90.5 37.5h640c35.99-.68 66.16-13.18 90.5-37.5s36.84-54.49 37.5-90.5V320c-.68-35.99-13.18-66.16-37.5-90.5M384 128h256v64H384zM256 832h-64c-17.98-.68-32.98-7.02-44.99-19.01S128.66 786.01 128 768V448h128zm448 0H320V448h384zm192-64c-.68 17.98-7.02 32.98-19.01 44.99S850.01 831.34 832 832h-64V448h128zm0-384H128v-64c.69-17.98 7.02-32.98 19.01-44.99S173.99 256.66 192 256h640c17.98.69 32.98 7.02 44.99 19.01S895.34 301.99 896 320z"})]))}}),GI=YI,XI=A({name:"Suitcase",__name:"suitcase",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 384h768v-64a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64zm0 64v320a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V448zm64-256h640a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H192A128 128 0 0 1 64 768V320a128 128 0 0 1 128-128"}),k("path",{fill:"currentColor",d:"M384 128v64h256v-64zm0-64h256a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H384a64 64 0 0 1-64-64v-64a64 64 0 0 1 64-64"})]))}}),JI=XI,ZI=A({name:"Sunny",__name:"sunny",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 704a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512m0-704a32 32 0 0 1 32 32v64a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 768a32 32 0 0 1 32 32v64a32 32 0 1 1-64 0v-64a32 32 0 0 1 32-32M195.2 195.2a32 32 0 0 1 45.248 0l45.248 45.248a32 32 0 1 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm543.104 543.104a32 32 0 0 1 45.248 0l45.248 45.248a32 32 0 0 1-45.248 45.248l-45.248-45.248a32 32 0 0 1 0-45.248M64 512a32 32 0 0 1 32-32h64a32 32 0 0 1 0 64H96a32 32 0 0 1-32-32m768 0a32 32 0 0 1 32-32h64a32 32 0 1 1 0 64h-64a32 32 0 0 1-32-32M195.2 828.8a32 32 0 0 1 0-45.248l45.248-45.248a32 32 0 0 1 45.248 45.248L240.448 828.8a32 32 0 0 1-45.248 0zm543.104-543.104a32 32 0 0 1 0-45.248l45.248-45.248a32 32 0 0 1 45.248 45.248l-45.248 45.248a32 32 0 0 1-45.248 0"})]))}}),QI=ZI,eR=A({name:"Sunrise",__name:"sunrise",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M32 768h960a32 32 0 1 1 0 64H32a32 32 0 1 1 0-64m129.408-96a352 352 0 0 1 701.184 0h-64.32a288 288 0 0 0-572.544 0h-64.32zM512 128a32 32 0 0 1 32 32v96a32 32 0 0 1-64 0v-96a32 32 0 0 1 32-32m407.296 168.704a32 32 0 0 1 0 45.248l-67.84 67.84a32 32 0 1 1-45.248-45.248l67.84-67.84a32 32 0 0 1 45.248 0zm-814.592 0a32 32 0 0 1 45.248 0l67.84 67.84a32 32 0 1 1-45.248 45.248l-67.84-67.84a32 32 0 0 1 0-45.248"})]))}}),tR=eR,nR=A({name:"Sunset",__name:"sunset",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M82.56 640a448 448 0 1 1 858.88 0h-67.2a384 384 0 1 0-724.288 0zM32 704h960q32 0 32 32t-32 32H32q-32 0-32-32t32-32m256 128h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32"})]))}}),oR=nR,aR=A({name:"SwitchButton",__name:"switch-button",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M352 159.872V230.4a352 352 0 1 0 320 0v-70.528A416.128 416.128 0 0 1 512 960a416 416 0 0 1-160-800.128z"}),k("path",{fill:"currentColor",d:"M512 64q32 0 32 32v320q0 32-32 32t-32-32V96q0-32 32-32"})]))}}),rR=aR,lR=A({name:"SwitchFilled",__name:"switch-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M247.47 358.4v.04c.07 19.17 7.72 37.53 21.27 51.09s31.92 21.2 51.09 21.27c39.86 0 72.41-32.6 72.41-72.4s-32.6-72.36-72.41-72.36-72.36 32.55-72.36 72.36z"}),k("path",{fill:"currentColor",d:"M492.38 128H324.7c-52.16 0-102.19 20.73-139.08 57.61a196.655 196.655 0 0 0-57.61 139.08V698.7c-.01 25.84 5.08 51.42 14.96 75.29s24.36 45.56 42.63 63.83 39.95 32.76 63.82 42.65a196.67 196.67 0 0 0 75.28 14.98h167.68c3.03 0 5.46-2.43 5.46-5.42V133.42c.6-2.99-1.83-5.42-5.46-5.42zm-56.11 705.88H324.7c-17.76.13-35.36-3.33-51.75-10.18s-31.22-16.94-43.61-29.67c-25.3-25.35-39.81-59.1-39.81-95.32V324.69c-.13-17.75 3.33-35.35 10.17-51.74a131.695 131.695 0 0 1 29.64-43.62c25.39-25.3 59.14-39.81 95.36-39.81h111.57zm402.12-647.67a196.655 196.655 0 0 0-139.08-57.61H580.48c-3.03 0-4.82 2.43-4.82 4.82v757.16c-.6 2.99 1.79 5.42 5.42 5.42h118.23a196.69 196.69 0 0 0 139.08-57.61A196.655 196.655 0 0 0 896 699.31V325.29a196.69 196.69 0 0 0-57.61-139.08zm-111.3 441.92c-42.83 0-77.82-34.99-77.82-77.82s34.98-77.82 77.82-77.82c42.83 0 77.82 34.99 77.82 77.82s-34.99 77.82-77.82 77.82z"})]))}}),sR=lR,iR=A({name:"Switch",__name:"switch",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M118.656 438.656a32 32 0 0 1 0-45.248L416 96l4.48-3.776A32 32 0 0 1 461.248 96l3.712 4.48a32.064 32.064 0 0 1-3.712 40.832L218.56 384H928a32 32 0 1 1 0 64H141.248a32 32 0 0 1-22.592-9.344zM64 608a32 32 0 0 1 32-32h786.752a32 32 0 0 1 22.656 54.592L608 928l-4.48 3.776a32.064 32.064 0 0 1-40.832-49.024L805.632 640H96a32 32 0 0 1-32-32"})]))}}),uR=iR,cR=A({name:"TakeawayBox",__name:"takeaway-box",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M832 384H192v448h640zM96 320h832V128H96zm800 64v480a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V384H64a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h896a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32zM416 512h192a32 32 0 0 1 0 64H416a32 32 0 0 1 0-64"})]))}}),dR=cR,fR=A({name:"Ticket",__name:"ticket",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M640 832H64V640a128 128 0 1 0 0-256V192h576v160h64V192h256v192a128 128 0 1 0 0 256v192H704V672h-64zm0-416v192h64V416z"})]))}}),pR=fR,vR=A({name:"Tickets",__name:"tickets",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M192 128v768h640V128zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h192v64H320zm0 384h384v64H320z"})]))}}),hR=vR,mR=A({name:"Timer",__name:"timer",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 896a320 320 0 1 0 0-640 320 320 0 0 0 0 640m0 64a384 384 0 1 1 0-768 384 384 0 0 1 0 768"}),k("path",{fill:"currentColor",d:"M512 320a32 32 0 0 1 32 32l-.512 224a32 32 0 1 1-64 0L480 352a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M448 576a64 64 0 1 0 128 0 64 64 0 1 0-128 0m96-448v128h-64V128h-96a32 32 0 0 1 0-64h256a32 32 0 1 1 0 64z"})]))}}),gR=mR,yR=A({name:"ToiletPaper",__name:"toilet-paper",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M595.2 128H320a192 192 0 0 0-192 192v576h384V352c0-90.496 32.448-171.2 83.2-224M736 64c123.712 0 224 128.96 224 288S859.712 640 736 640H576v320H64V320A256 256 0 0 1 320 64zM576 352v224h160c84.352 0 160-97.28 160-224s-75.648-224-160-224-160 97.28-160 224"}),k("path",{fill:"currentColor",d:"M736 448c-35.328 0-64-43.008-64-96s28.672-96 64-96 64 43.008 64 96-28.672 96-64 96"})]))}}),_R=yR,bR=A({name:"Tools",__name:"tools",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M764.416 254.72a351.68 351.68 0 0 1 86.336 149.184H960v192.064H850.752a351.68 351.68 0 0 1-86.336 149.312l54.72 94.72-166.272 96-54.592-94.72a352.64 352.64 0 0 1-172.48 0L371.136 936l-166.272-96 54.72-94.72a351.68 351.68 0 0 1-86.336-149.312H64v-192h109.248a351.68 351.68 0 0 1 86.336-149.312L204.8 160l166.208-96h.192l54.656 94.592a352.64 352.64 0 0 1 172.48 0L652.8 64h.128L819.2 160l-54.72 94.72zM704 499.968a192 192 0 1 0-384 0 192 192 0 0 0 384 0"})]))}}),wR=bR,CR=A({name:"TopLeft",__name:"top-left",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M256 256h416a32 32 0 1 0 0-64H224a32 32 0 0 0-32 32v448a32 32 0 0 0 64 0z"}),k("path",{fill:"currentColor",d:"M246.656 201.344a32 32 0 0 0-45.312 45.312l544 544a32 32 0 0 0 45.312-45.312l-544-544z"})]))}}),SR=CR,kR=A({name:"TopRight",__name:"top-right",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M768 256H353.6a32 32 0 1 1 0-64H800a32 32 0 0 1 32 32v448a32 32 0 0 1-64 0z"}),k("path",{fill:"currentColor",d:"M777.344 201.344a32 32 0 0 1 45.312 45.312l-544 544a32 32 0 0 1-45.312-45.312l544-544z"})]))}}),ER=kR,xR=A({name:"Top",__name:"top",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M572.235 205.282v600.365a30.118 30.118 0 1 1-60.235 0V205.282L292.382 438.633a28.913 28.913 0 0 1-42.646 0 33.43 33.43 0 0 1 0-45.236l271.058-288.045a28.913 28.913 0 0 1 42.647 0L834.5 393.397a33.43 33.43 0 0 1 0 45.176 28.913 28.913 0 0 1-42.647 0l-219.618-233.23z"})]))}}),MR=xR,$R=A({name:"TrendCharts",__name:"trend-charts",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128 896V128h768v768zm291.712-327.296 128 102.4 180.16-201.792-47.744-42.624-139.84 156.608-128-102.4-180.16 201.792 47.744 42.624 139.84-156.608zM816 352a48 48 0 1 0-96 0 48 48 0 0 0 96 0"})]))}}),TR=$R,AR=A({name:"TrophyBase",__name:"trophy-base",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M918.4 201.6c-6.4-6.4-12.8-9.6-22.4-9.6H768V96c0-9.6-3.2-16-9.6-22.4C752 67.2 745.6 64 736 64H288c-9.6 0-16 3.2-22.4 9.6C259.2 80 256 86.4 256 96v96H128c-9.6 0-16 3.2-22.4 9.6-6.4 6.4-9.6 16-9.6 22.4 3.2 108.8 25.6 185.6 64 224 34.4 34.4 77.56 55.65 127.65 61.99 10.91 20.44 24.78 39.25 41.95 56.41 40.86 40.86 91 65.47 150.4 71.9V768h-96c-9.6 0-16 3.2-22.4 9.6-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4c6.4 6.4 12.8 9.6 22.4 9.6h256c9.6 0 16-3.2 22.4-9.6 6.4-6.4 9.6-12.8 9.6-22.4s-3.2-16-9.6-22.4c-6.4-6.4-12.8-9.6-22.4-9.6h-96V637.26c59.4-7.71 109.54-30.01 150.4-70.86 17.2-17.2 31.51-36.06 42.81-56.55 48.93-6.51 90.02-27.7 126.79-61.85 38.4-38.4 60.8-112 64-224 0-6.4-3.2-16-9.6-22.4zM256 438.4c-19.2-6.4-35.2-19.2-51.2-35.2-22.4-22.4-35.2-70.4-41.6-147.2H256zm390.4 80C608 553.6 566.4 576 512 576s-99.2-19.2-134.4-57.6C342.4 480 320 438.4 320 384V128h384v256c0 54.4-19.2 99.2-57.6 134.4m172.8-115.2c-16 16-32 25.6-51.2 35.2V256h92.8c-6.4 76.8-19.2 124.8-41.6 147.2zM768 896H256c-9.6 0-16 3.2-22.4 9.6-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4c6.4 6.4 12.8 9.6 22.4 9.6h512c9.6 0 16-3.2 22.4-9.6 6.4-6.4 9.6-12.8 9.6-22.4s-3.2-16-9.6-22.4c-6.4-6.4-12.8-9.6-22.4-9.6"})]))}}),OR=AR,NR=A({name:"Trophy",__name:"trophy",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M480 896V702.08A256.256 256.256 0 0 1 264.064 512h-32.64a96 96 0 0 1-91.968-68.416L93.632 290.88a76.8 76.8 0 0 1 73.6-98.88H256V96a32 32 0 0 1 32-32h448a32 32 0 0 1 32 32v96h88.768a76.8 76.8 0 0 1 73.6 98.88L884.48 443.52A96 96 0 0 1 792.576 512h-32.64A256.256 256.256 0 0 1 544 702.08V896h128a32 32 0 1 1 0 64H352a32 32 0 1 1 0-64zm224-448V128H320v320a192 192 0 1 0 384 0m64 0h24.576a32 32 0 0 0 30.656-22.784l45.824-152.768A12.8 12.8 0 0 0 856.768 256H768zm-512 0V256h-88.768a12.8 12.8 0 0 0-12.288 16.448l45.824 152.768A32 32 0 0 0 231.424 448z"})]))}}),IR=NR,RR=A({name:"TurnOff",__name:"turn-off",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M329.956 257.138a254.862 254.862 0 0 0 0 509.724h364.088a254.862 254.862 0 0 0 0-509.724zm0-72.818h364.088a327.68 327.68 0 1 1 0 655.36H329.956a327.68 327.68 0 1 1 0-655.36z"}),k("path",{fill:"currentColor",d:"M329.956 621.227a109.227 109.227 0 1 0 0-218.454 109.227 109.227 0 0 0 0 218.454m0 72.817a182.044 182.044 0 1 1 0-364.088 182.044 182.044 0 0 1 0 364.088"})]))}}),PR=RR,LR=A({name:"Umbrella",__name:"umbrella",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M320 768a32 32 0 1 1 64 0 64 64 0 0 0 128 0V512H64a448 448 0 1 1 896 0H576v256a128 128 0 1 1-256 0m570.688-320a384.128 384.128 0 0 0-757.376 0z"})]))}}),VR=LR,BR=A({name:"Unlock",__name:"unlock",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M224 448a32 32 0 0 0-32 32v384a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V480a32 32 0 0 0-32-32zm0-64h576a96 96 0 0 1 96 96v384a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V480a96 96 0 0 1 96-96"}),k("path",{fill:"currentColor",d:"M512 544a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V576a32 32 0 0 1 32-32m178.304-295.296A192.064 192.064 0 0 0 320 320v64h352l96 38.4V448H256V320a256 256 0 0 1 493.76-95.104z"})]))}}),zR=BR,HR=A({name:"UploadFilled",__name:"upload-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6z"})]))}}),DR=HR,FR=A({name:"Upload",__name:"upload",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-578.304V704h-64V247.296L237.248 490.048 192 444.8 508.8 128l316.8 316.8-45.312 45.248z"})]))}}),KR=FR,WR=A({name:"UserFilled",__name:"user-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0m544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z"})]))}}),jR=WR,qR=A({name:"User",__name:"user",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 512a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512m320 320v-96a96 96 0 0 0-96-96H288a96 96 0 0 0-96 96v96a32 32 0 1 1-64 0v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 1 1-64 0"})]))}}),UR=qR,YR=A({name:"Van",__name:"van",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M128.896 736H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v96h164.544a32 32 0 0 1 31.616 27.136l54.144 352A32 32 0 0 1 922.688 736h-91.52a144 144 0 1 1-286.272 0H415.104a144 144 0 1 1-286.272 0zm23.36-64a143.872 143.872 0 0 1 239.488 0H568.32c17.088-25.6 42.24-45.376 71.744-55.808V256H128v416zm655.488 0h77.632l-19.648-128H704v64.896A144 144 0 0 1 807.744 672m48.128-192-14.72-96H704v96h151.872M688 832a80 80 0 1 0 0-160 80 80 0 0 0 0 160m-416 0a80 80 0 1 0 0-160 80 80 0 0 0 0 160"})]))}}),GR=YR,XR=A({name:"VideoCameraFilled",__name:"video-camera-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m768 576 192-64v320l-192-64v96a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V480a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zM192 768v64h384v-64zm192-480a160 160 0 0 1 320 0 160 160 0 0 1-320 0m64 0a96 96 0 1 0 192.064-.064A96 96 0 0 0 448 288m-320 32a128 128 0 1 1 256.064.064A128 128 0 0 1 128 320m64 0a64 64 0 1 0 128 0 64 64 0 0 0-128 0"})]))}}),JR=XR,ZR=A({name:"VideoCamera",__name:"video-camera",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M704 768V256H128v512zm64-416 192-96v512l-192-96v128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 71.552v176.896l128 64V359.552zM192 320h192v64H192z"})]))}}),QR=ZR,eP=A({name:"VideoPause",__name:"video-pause",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m-96-544q32 0 32 32v256q0 32-32 32t-32-32V384q0-32 32-32m192 0q32 0 32 32v256q0 32-32 32t-32-32V384q0-32 32-32"})]))}}),tP=eP,nP=A({name:"VideoPlay",__name:"video-play",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m-48-247.616L668.608 512 464 375.616zm10.624-342.656 249.472 166.336a48 48 0 0 1 0 79.872L474.624 718.272A48 48 0 0 1 400 678.336V345.6a48 48 0 0 1 74.624-39.936z"})]))}}),oP=nP,aP=A({name:"View",__name:"view",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),Xg=aP,rP=A({name:"WalletFilled",__name:"wallet-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M688 512a112 112 0 1 0 0 224h208v160H128V352h768v160zm32 160h-32a48 48 0 0 1 0-96h32a48 48 0 0 1 0 96m-80-544 128 160H384z"})]))}}),lP=rP,sP=A({name:"Wallet",__name:"wallet",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M640 288h-64V128H128v704h384v32a32 32 0 0 0 32 32H96a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h512a32 32 0 0 1 32 32z"}),k("path",{fill:"currentColor",d:"M128 320v512h768V320zm-32-64h832a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M704 640a64 64 0 1 1 0-128 64 64 0 0 1 0 128"})]))}}),iP=sP,uP=A({name:"WarnTriangleFilled",__name:"warn-triangle-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M928.99 755.83 574.6 203.25c-12.89-20.16-36.76-32.58-62.6-32.58s-49.71 12.43-62.6 32.58L95.01 755.83c-12.91 20.12-12.9 44.91.01 65.03 12.92 20.12 36.78 32.51 62.59 32.49h708.78c25.82.01 49.68-12.37 62.59-32.49 12.91-20.12 12.92-44.91.01-65.03M554.67 768h-85.33v-85.33h85.33zm0-426.67v298.66h-85.33V341.32z"})]))}}),cP=uP,dP=A({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ti=dP,fP=A({name:"Warning",__name:"warning",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0m-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"})]))}}),pP=fP,vP=A({name:"Watch",__name:"watch",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M512 768a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640"}),k("path",{fill:"currentColor",d:"M480 352a32 32 0 0 1 32 32v160a32 32 0 0 1-64 0V384a32 32 0 0 1 32-32"}),k("path",{fill:"currentColor",d:"M480 512h128q32 0 32 32t-32 32H480q-32 0-32-32t32-32m128-256V128H416v128h-64V64h320v192zM416 768v128h192V768h64v192H352V768z"})]))}}),hP=vP,mP=A({name:"Watermelon",__name:"watermelon",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m683.072 600.32-43.648 162.816-61.824-16.512 53.248-198.528L576 493.248l-158.4 158.4-45.248-45.248 158.4-158.4-55.616-55.616-198.528 53.248-16.512-61.824 162.816-43.648L282.752 200A384 384 0 0 0 824 741.248zm231.552 141.056a448 448 0 1 1-632-632l632 632"})]))}}),gP=mP,yP=A({name:"WindPower",__name:"wind-power",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"M160 64q32 0 32 32v832q0 32-32 32t-32-32V96q0-32 32-32m416 354.624 128-11.584V168.96l-128-11.52v261.12zm-64 5.824V151.552L320 134.08V160h-64V64l616.704 56.064A96 96 0 0 1 960 215.68v144.64a96 96 0 0 1-87.296 95.616L256 512V224h64v217.92zm256-23.232 98.88-8.96A32 32 0 0 0 896 360.32V215.68a32 32 0 0 0-29.12-31.872l-98.88-8.96z"})]))}}),_P=yP,bP=A({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),u2=bP,wP=A({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(y(),M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[k("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),Jg=wP;const CP=Object.freeze(Object.defineProperty({__proto__:null,AddLocation:_E,Aim:wE,AlarmClock:SE,Apple:EE,ArrowDown:Bo,ArrowDownBold:ME,ArrowLeft:aa,ArrowLeftBold:AE,ArrowRight:Sn,ArrowRightBold:IE,ArrowUp:Cc,ArrowUpBold:LE,Avatar:zE,Back:Og,Baseball:FE,Basketball:WE,Bell:YE,BellFilled:qE,Bicycle:XE,Bottom:nx,BottomLeft:ZE,BottomRight:ex,Bowl:ax,Box:lx,Briefcase:ix,Brush:fx,BrushFilled:cx,Burger:vx,Calendar:Ng,Camera:_x,CameraFilled:gx,CaretBottom:wx,CaretLeft:Sx,CaretRight:r2,CaretTop:Ig,Cellphone:Mx,ChatDotRound:Tx,ChatDotSquare:Ox,ChatLineRound:Ix,ChatLineSquare:Px,ChatRound:Vx,ChatSquare:zx,Check:Bl,Checked:Fx,Cherry:Wx,Chicken:qx,ChromeFilled:Yx,CircleCheck:Sc,CircleCheckFilled:Rg,CircleClose:fa,CircleCloseFilled:kc,CirclePlus:nM,CirclePlusFilled:eM,Clock:l2,Close:uo,CloseBold:rM,Cloudy:iM,Coffee:fM,CoffeeCup:cM,Coin:vM,ColdDrink:mM,Collection:bM,CollectionTag:yM,Comment:CM,Compass:kM,Connection:xM,Coordinate:$M,CopyDocument:AM,Cpu:NM,CreditCard:RM,Crop:LM,DArrowLeft:Mr,DArrowRight:$r,DCaret:HM,DataAnalysis:FM,DataBoard:WM,DataLine:qM,Delete:Pg,DeleteFilled:YM,DeleteLocation:XM,Dessert:QM,Discount:t$,Dish:r$,DishDot:o$,Document:Lg,DocumentAdd:s$,DocumentChecked:u$,DocumentCopy:d$,DocumentDelete:p$,DocumentRemove:h$,Download:y$,Drizzling:b$,Edit:k$,EditPen:C$,Eleme:$$,ElemeFilled:x$,ElementPlus:A$,Expand:N$,Failed:R$,Female:L$,Files:B$,Film:H$,Filter:F$,Finished:W$,FirstAidKit:q$,Flag:Y$,Fold:X$,Folder:iT,FolderAdd:Z$,FolderChecked:eT,FolderDelete:nT,FolderOpened:aT,FolderRemove:lT,Food:cT,Football:fT,ForkSpoon:vT,Fries:mT,FullScreen:Vg,Goblet:ET,GobletFull:_T,GobletSquare:ST,GobletSquareFull:wT,GoldMedal:MT,Goods:OT,GoodsFilled:TT,Grape:IT,Grid:PT,Guide:VT,Handbag:zT,Headset:DT,Help:jT,HelpFilled:KT,Hide:Bg,Histogram:YT,HomeFilled:XT,HotWater:ZT,House:eA,IceCream:lA,IceCreamRound:nA,IceCreamSquare:aA,IceDrink:iA,IceTea:cA,InfoFilled:Ec,Iphone:pA,Key:hA,KnifeFork:gA,Lightning:_A,Link:wA,List:SA,Loading:pa,Location:AA,LocationFilled:xA,LocationInformation:$A,Lock:NA,Lollipop:RA,MagicStick:LA,Magnet:BA,Male:HA,Management:FA,MapLocation:WA,Medal:qA,Memo:YA,Menu:XA,Message:eO,MessageBox:ZA,Mic:nO,Microphone:aO,MilkTea:lO,Minus:zg,Money:uO,Monitor:dO,Moon:hO,MoonNight:pO,More:Hg,MoreFilled:cf,MostlyCloudy:_O,Mouse:wO,Mug:SO,Mute:MO,MuteNotification:EO,NoSmoking:TO,Notebook:OO,Notification:IO,Odometer:PO,OfficeBuilding:VO,Open:zO,Operation:DO,Opportunity:KO,Orange:jO,Paperclip:UO,PartlyCloudy:GO,Pear:JO,Phone:tN,PhoneFilled:QO,Picture:lN,PictureFilled:Dg,PictureRounded:aN,PieChart:iN,Place:cN,Platform:fN,Plus:s2,Pointer:hN,Position:gN,Postcard:_N,Pouring:wN,Present:SN,PriceTag:EN,Printer:MN,Promotion:TN,QuartzWatch:ON,QuestionFilled:Fg,Rank:RN,Reading:BN,ReadingLamp:LN,Refresh:FN,RefreshLeft:Kg,RefreshRight:Wg,Refrigerator:WN,Remove:YN,RemoveFilled:qN,Right:XN,ScaleToOriginal:jg,School:QN,Scissor:tI,Search:qg,Select:aI,Sell:lI,SemiSelect:iI,Service:cI,SetUp:fI,Setting:vI,Share:mI,Ship:yI,Shop:bI,ShoppingBag:CI,ShoppingCart:xI,ShoppingCartFull:kI,ShoppingTrolley:$I,Smoking:AI,Soccer:NI,SoldOut:RI,Sort:BI,SortDown:Ug,SortUp:Yg,Stamp:HI,Star:Gg,StarFilled:Ql,Stopwatch:WI,SuccessFilled:i2,Sugar:UI,Suitcase:JI,SuitcaseLine:GI,Sunny:QI,Sunrise:tR,Sunset:oR,Switch:uR,SwitchButton:rR,SwitchFilled:sR,TakeawayBox:dR,Ticket:pR,Tickets:hR,Timer:gR,ToiletPaper:_R,Tools:wR,Top:MR,TopLeft:SR,TopRight:ER,TrendCharts:TR,Trophy:IR,TrophyBase:OR,TurnOff:PR,Umbrella:VR,Unlock:zR,Upload:KR,UploadFilled:DR,User:UR,UserFilled:jR,Van:GR,VideoCamera:QR,VideoCameraFilled:JR,VideoPause:tP,VideoPlay:oP,View:Xg,Wallet:iP,WalletFilled:lP,WarnTriangleFilled:cP,Warning:pP,WarningFilled:ti,Watch:hP,Watermelon:gP,WindPower:_P,ZoomIn:u2,ZoomOut:Jg},Symbol.toStringTag,{value:"Module"})),Zg="__epPropKey",X=e=>e,SP=e=>ct(e)&&!!e[Zg],So=(e,t)=>{if(!ct(e)||SP(e))return e;const{values:n,required:o,default:a,type:r,validator:l}=e,u={type:r,required:!!o,validator:n||l?d=>{let f=!1,c=[];if(n&&(c=Array.from(n),yt(e,"default")&&c.push(a),f||(f=c.includes(d))),l&&(f||(f=l(d))),!f&&c.length>0){const p=[...new Set(c)].map(h=>JSON.stringify(h)).join(", ");lw(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${p}], got value ${JSON.stringify(d)}.`)}return f}:void 0,[Zg]:!0};return yt(e,"default")&&(u.default=a),u},Ee=e=>Pu(Object.entries(e).map(([t,n])=>[t,So(n,t)])),$t=X([String,Object,Function]),c2={Close:uo},d2={Close:uo,SuccessFilled:i2,InfoFilled:Ec,WarningFilled:ti,CircleCloseFilled:kc},Ka={success:i2,warning:ti,error:kc,info:Ec},f2={validating:pa,success:Sc,error:fa},lt=(e,t)=>{if(e.install=n=>{for(const o of[e,...Object.values(t??{})])n.component(o.name,o)},t)for(const[n,o]of Object.entries(t))e[n]=o;return e},Qg=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),kP=(e,t)=>(e.install=n=>{n.directive(t,e)},e),Dt=e=>(e.install=Et,e),xc=(...e)=>t=>{e.forEach(n=>{Xe(n)?n(t):n.value=t})},Ke={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},EP=["year","years","month","date","dates","week","datetime","datetimerange","daterange","monthrange"],md=["sun","mon","tue","wed","thu","fri","sat"],it="update:modelValue",Bt="change",Tn="input",f1=Symbol("INSTALLED_KEY"),zo=["","default","small","large"],e6=e=>["",...zo].includes(e);var Zn=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Zn||{});function df(e){return zt(e)&&e.type===Fe}function xP(e){return zt(e)&&e.type===$n}function MP(e){return zt(e)&&!df(e)&&!xP(e)}const $P=e=>{if(!zt(e))return{};const t=e.props||{},n=(zt(e.type)?e.type.props:void 0)||{},o={};return Object.keys(n).forEach(a=>{yt(n[a],"default")&&(o[a]=n[a].default)}),Object.keys(t).forEach(a=>{o[lo(a)]=t[a]}),o},TP=e=>{if(!Ie(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},La=e=>{const t=Ie(e)?e:[e],n=[];return t.forEach(o=>{var a;Ie(o)?n.push(...La(o)):zt(o)&&Ie(o.children)?n.push(...La(o.children)):(n.push(o),zt(o)&&((a=o.component)!=null&&a.subTree)&&n.push(...La(o.component.subTree)))}),n},p1=e=>[...new Set(e)],jn=e=>!e&&e!==0?[]:Array.isArray(e)?e:[e],p2=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e),Ht=e=>e;function AP(e){let t=0;const n=(...o)=>{t&&xr(t),t=Fa(()=>{e(...o),t=0})};return n.cancel=()=>{xr(t),t=0},n}const OP=["class","style"],NP=/^on[A-Z]/,v2=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,o=S(()=>((n==null?void 0:n.value)||[]).concat(OP)),a=rt();return S(a?()=>{var r;return Pu(Object.entries((r=a.proxy)==null?void 0:r.$attrs).filter(([l])=>!o.value.includes(l)&&!(t&&NP.test(l))))}:()=>({}))},gr=({from:e,replacement:t,scope:n,version:o,ref:a,type:r="API"},l)=>{pe(()=>s(l),i=>{},{immediate:!0})},t6=(e,t,n,o)=>{let a={offsetX:0,offsetY:0};const r=u=>{const d=u.clientX,f=u.clientY,{offsetX:c,offsetY:p}=a,h=e.value.getBoundingClientRect(),m=h.left,v=h.top,_=h.width,g=h.height,w=document.documentElement.clientWidth,b=document.documentElement.clientHeight,C=-m+c,x=-v+p,E=w-m-_+c,O=b-v-g+p,T=L=>{let P=c+L.clientX-d,z=p+L.clientY-f;o!=null&&o.value||(P=Math.min(Math.max(P,C),E),z=Math.min(Math.max(z,x),O)),a={offsetX:P,offsetY:z},e.value&&(e.value.style.transform=`translate(${Xt(P)}, ${Xt(z)})`)},V=()=>{document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",V)};document.addEventListener("mousemove",T),document.addEventListener("mouseup",V)},l=()=>{t.value&&e.value&&t.value.addEventListener("mousedown",r)},i=()=>{t.value&&e.value&&t.value.removeEventListener("mousedown",r)};et(()=>{gn(()=>{n.value?l():i()})}),It(()=>{i()})};var IP={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const RP=e=>(t,n)=>PP(t,n,s(e)),PP=(e,t,n)=>Gt(n,e,e).replace(/\{(\w+)\}/g,(o,a)=>{var r;return`${(r=t==null?void 0:t[a])!=null?r:`{${a}}`}`}),LP=e=>{const t=S(()=>s(e).name),n=Pt(e)?e:R(e);return{lang:t,locale:n,t:RP(e)}},n6=Symbol("localeContextKey"),_t=e=>{const t=e||Pe(n6,R());return LP(S(()=>t.value||IP))},ds="el",VP="is-",Qa=(e,t,n,o,a)=>{let r=`${e}-${t}`;return n&&(r+=`-${n}`),o&&(r+=`__${o}`),a&&(r+=`--${a}`),r},o6=Symbol("namespaceContextKey"),h2=e=>{const t=e||(rt()?Pe(o6,R(ds)):R(ds));return S(()=>s(t)||ds)},me=(e,t)=>{const n=h2(t);return{namespace:n,b:(v="")=>Qa(n.value,e,v,"",""),e:v=>v?Qa(n.value,e,"",v,""):"",m:v=>v?Qa(n.value,e,"","",v):"",be:(v,_)=>v&&_?Qa(n.value,e,v,_,""):"",em:(v,_)=>v&&_?Qa(n.value,e,"",v,_):"",bm:(v,_)=>v&&_?Qa(n.value,e,v,"",_):"",bem:(v,_,g)=>v&&_&&g?Qa(n.value,e,v,_,g):"",is:(v,..._)=>{const g=_.length>=1?_[0]:!0;return v&&g?`${VP}${v}`:""},cssVar:v=>{const _={};for(const g in v)v[g]&&(_[`--${n.value}-${g}`]=v[g]);return _},cssVarName:v=>`--${n.value}-${v}`,cssVarBlock:v=>{const _={};for(const g in v)v[g]&&(_[`--${n.value}-${e}-${g}`]=v[g]);return _},cssVarBlockName:v=>`--${n.value}-${e}-${v}`}},m2=(e,t={})=>{Pt(e)||on("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||me("popup"),o=Vm(()=>n.bm("parent","hidden"));if(!gt||oo(document.body,o.value))return;let a=0,r=!1,l="0";const i=()=>{setTimeout(()=>{Cn(document==null?void 0:document.body,o.value),r&&document&&(document.body.style.width=l)},200)};pe(e,u=>{if(!u){i();return}r=!oo(document.body,o.value),r&&(l=document.body.style.width),a=Tg(n.namespace.value);const d=document.documentElement.clientHeight0&&(d||f==="scroll")&&r&&(document.body.style.width=`calc(100% - ${a}px)`),eo(document.body,o.value)}),Cm(()=>i())},BP=So({type:X(Boolean),default:null}),zP=So({type:X(Function)}),a6=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,o=[t],a={[e]:BP,[n]:zP};return{useModelToggle:({indicator:l,toggleReason:i,shouldHideWhenRouteChanges:u,shouldProceed:d,onShow:f,onHide:c})=>{const p=rt(),{emit:h}=p,m=p.props,v=S(()=>Xe(m[n])),_=S(()=>m[e]===null),g=O=>{l.value!==!0&&(l.value=!0,i&&(i.value=O),Xe(f)&&f(O))},w=O=>{l.value!==!1&&(l.value=!1,i&&(i.value=O),Xe(c)&&c(O))},b=O=>{if(m.disabled===!0||Xe(d)&&!d())return;const T=v.value&>T&&h(t,!0),(_.value||!T)&&g(O)},C=O=>{if(m.disabled===!0||!gt)return;const T=v.value&>T&&h(t,!1),(_.value||!T)&&w(O)},x=O=>{Qt(O)&&(m.disabled&&O?v.value&&h(t,!1):l.value!==O&&(O?g():w()))},E=()=>{l.value?C():b()};return pe(()=>m[e],x),u&&p.appContext.config.globalProperties.$route!==void 0&&pe(()=>({...p.proxy.$route}),()=>{u.value&&l.value&&C()}),et(()=>{x(m[e])}),{hide:C,show:b,toggle:E,hasUpdateHandler:v}},useModelToggleProps:a,useModelToggleEmits:o}};a6("modelValue");const r6=e=>{const t=rt();return S(()=>{var n,o;return(o=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:o[e]})};var Vn="top",co="bottom",fo="right",Bn="left",g2="auto",ni=[Vn,co,fo,Bn],_l="start",Os="end",HP="clippingParents",l6="viewport",ql="popper",DP="reference",v1=ni.reduce(function(e,t){return e.concat([t+"-"+_l,t+"-"+Os])},[]),Hr=[].concat(ni,[g2]).reduce(function(e,t){return e.concat([t,t+"-"+_l,t+"-"+Os])},[]),FP="beforeRead",KP="read",WP="afterRead",jP="beforeMain",qP="main",UP="afterMain",YP="beforeWrite",GP="write",XP="afterWrite",JP=[FP,KP,WP,jP,qP,UP,YP,GP,XP];function Po(e){return e?(e.nodeName||"").toLowerCase():null}function ko(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function bl(e){var t=ko(e).Element;return e instanceof t||e instanceof Element}function ao(e){var t=ko(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function y2(e){if(typeof ShadowRoot>"u")return!1;var t=ko(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function ZP(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var o=t.styles[n]||{},a=t.attributes[n]||{},r=t.elements[n];!ao(r)||!Po(r)||(Object.assign(r.style,o),Object.keys(a).forEach(function(l){var i=a[l];i===!1?r.removeAttribute(l):r.setAttribute(l,i===!0?"":i)}))})}function QP(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(o){var a=t.elements[o],r=t.attributes[o]||{},l=Object.keys(t.styles.hasOwnProperty(o)?t.styles[o]:n[o]),i=l.reduce(function(u,d){return u[d]="",u},{});!ao(a)||!Po(a)||(Object.assign(a.style,i),Object.keys(r).forEach(function(u){a.removeAttribute(u)}))})}}var s6={name:"applyStyles",enabled:!0,phase:"write",fn:ZP,effect:QP,requires:["computeStyles"]};function Io(e){return e.split("-")[0]}var yr=Math.max,Lu=Math.min,wl=Math.round;function Cl(e,t){t===void 0&&(t=!1);var n=e.getBoundingClientRect(),o=1,a=1;if(ao(e)&&t){var r=e.offsetHeight,l=e.offsetWidth;l>0&&(o=wl(n.width)/l||1),r>0&&(a=wl(n.height)/r||1)}return{width:n.width/o,height:n.height/a,top:n.top/a,right:n.right/o,bottom:n.bottom/a,left:n.left/o,x:n.left/o,y:n.top/a}}function _2(e){var t=Cl(e),n=e.offsetWidth,o=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-o)<=1&&(o=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:o}}function i6(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&y2(n)){var o=t;do{if(o&&e.isSameNode(o))return!0;o=o.parentNode||o.host}while(o)}return!1}function ra(e){return ko(e).getComputedStyle(e)}function eL(e){return["table","td","th"].indexOf(Po(e))>=0}function Ya(e){return((bl(e)?e.ownerDocument:e.document)||window.document).documentElement}function Mc(e){return Po(e)==="html"?e:e.assignedSlot||e.parentNode||(y2(e)?e.host:null)||Ya(e)}function h1(e){return!ao(e)||ra(e).position==="fixed"?null:e.offsetParent}function tL(e){var t=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,n=navigator.userAgent.indexOf("Trident")!==-1;if(n&&ao(e)){var o=ra(e);if(o.position==="fixed")return null}var a=Mc(e);for(y2(a)&&(a=a.host);ao(a)&&["html","body"].indexOf(Po(a))<0;){var r=ra(a);if(r.transform!=="none"||r.perspective!=="none"||r.contain==="paint"||["transform","perspective"].indexOf(r.willChange)!==-1||t&&r.willChange==="filter"||t&&r.filter&&r.filter!=="none")return a;a=a.parentNode}return null}function oi(e){for(var t=ko(e),n=h1(e);n&&eL(n)&&ra(n).position==="static";)n=h1(n);return n&&(Po(n)==="html"||Po(n)==="body"&&ra(n).position==="static")?t:n||tL(e)||t}function b2(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function fs(e,t,n){return yr(e,Lu(t,n))}function nL(e,t,n){var o=fs(e,t,n);return o>n?n:o}function u6(){return{top:0,right:0,bottom:0,left:0}}function c6(e){return Object.assign({},u6(),e)}function d6(e,t){return t.reduce(function(n,o){return n[o]=e,n},{})}var oL=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,c6(typeof e!="number"?e:d6(e,ni))};function aL(e){var t,n=e.state,o=e.name,a=e.options,r=n.elements.arrow,l=n.modifiersData.popperOffsets,i=Io(n.placement),u=b2(i),d=[Bn,fo].indexOf(i)>=0,f=d?"height":"width";if(!(!r||!l)){var c=oL(a.padding,n),p=_2(r),h=u==="y"?Vn:Bn,m=u==="y"?co:fo,v=n.rects.reference[f]+n.rects.reference[u]-l[u]-n.rects.popper[f],_=l[u]-n.rects.reference[u],g=oi(r),w=g?u==="y"?g.clientHeight||0:g.clientWidth||0:0,b=v/2-_/2,C=c[h],x=w-p[f]-c[m],E=w/2-p[f]/2+b,O=fs(C,E,x),T=u;n.modifiersData[o]=(t={},t[T]=O,t.centerOffset=O-E,t)}}function rL(e){var t=e.state,n=e.options,o=n.element,a=o===void 0?"[data-popper-arrow]":o;a!=null&&(typeof a=="string"&&(a=t.elements.popper.querySelector(a),!a)||!i6(t.elements.popper,a)||(t.elements.arrow=a))}var lL={name:"arrow",enabled:!0,phase:"main",fn:aL,effect:rL,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Sl(e){return e.split("-")[1]}var sL={top:"auto",right:"auto",bottom:"auto",left:"auto"};function iL(e){var t=e.x,n=e.y,o=window,a=o.devicePixelRatio||1;return{x:wl(t*a)/a||0,y:wl(n*a)/a||0}}function m1(e){var t,n=e.popper,o=e.popperRect,a=e.placement,r=e.variation,l=e.offsets,i=e.position,u=e.gpuAcceleration,d=e.adaptive,f=e.roundOffsets,c=e.isFixed,p=l.x,h=p===void 0?0:p,m=l.y,v=m===void 0?0:m,_=typeof f=="function"?f({x:h,y:v}):{x:h,y:v};h=_.x,v=_.y;var g=l.hasOwnProperty("x"),w=l.hasOwnProperty("y"),b=Bn,C=Vn,x=window;if(d){var E=oi(n),O="clientHeight",T="clientWidth";if(E===ko(n)&&(E=Ya(n),ra(E).position!=="static"&&i==="absolute"&&(O="scrollHeight",T="scrollWidth")),E=E,a===Vn||(a===Bn||a===fo)&&r===Os){C=co;var V=c&&E===x&&x.visualViewport?x.visualViewport.height:E[O];v-=V-o.height,v*=u?1:-1}if(a===Bn||(a===Vn||a===co)&&r===Os){b=fo;var L=c&&E===x&&x.visualViewport?x.visualViewport.width:E[T];h-=L-o.width,h*=u?1:-1}}var P=Object.assign({position:i},d&&sL),z=f===!0?iL({x:h,y:v}):{x:h,y:v};if(h=z.x,v=z.y,u){var j;return Object.assign({},P,(j={},j[C]=w?"0":"",j[b]=g?"0":"",j.transform=(x.devicePixelRatio||1)<=1?"translate("+h+"px, "+v+"px)":"translate3d("+h+"px, "+v+"px, 0)",j))}return Object.assign({},P,(t={},t[C]=w?v+"px":"",t[b]=g?h+"px":"",t.transform="",t))}function uL(e){var t=e.state,n=e.options,o=n.gpuAcceleration,a=o===void 0?!0:o,r=n.adaptive,l=r===void 0?!0:r,i=n.roundOffsets,u=i===void 0?!0:i,d={placement:Io(t.placement),variation:Sl(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:a,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,m1(Object.assign({},d,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:l,roundOffsets:u})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,m1(Object.assign({},d,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:u})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var f6={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:uL,data:{}},$i={passive:!0};function cL(e){var t=e.state,n=e.instance,o=e.options,a=o.scroll,r=a===void 0?!0:a,l=o.resize,i=l===void 0?!0:l,u=ko(t.elements.popper),d=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&d.forEach(function(f){f.addEventListener("scroll",n.update,$i)}),i&&u.addEventListener("resize",n.update,$i),function(){r&&d.forEach(function(f){f.removeEventListener("scroll",n.update,$i)}),i&&u.removeEventListener("resize",n.update,$i)}}var p6={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:cL,data:{}},dL={left:"right",right:"left",bottom:"top",top:"bottom"};function Ji(e){return e.replace(/left|right|bottom|top/g,function(t){return dL[t]})}var fL={start:"end",end:"start"};function g1(e){return e.replace(/start|end/g,function(t){return fL[t]})}function w2(e){var t=ko(e),n=t.pageXOffset,o=t.pageYOffset;return{scrollLeft:n,scrollTop:o}}function C2(e){return Cl(Ya(e)).left+w2(e).scrollLeft}function pL(e){var t=ko(e),n=Ya(e),o=t.visualViewport,a=n.clientWidth,r=n.clientHeight,l=0,i=0;return o&&(a=o.width,r=o.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(l=o.offsetLeft,i=o.offsetTop)),{width:a,height:r,x:l+C2(e),y:i}}function vL(e){var t,n=Ya(e),o=w2(e),a=(t=e.ownerDocument)==null?void 0:t.body,r=yr(n.scrollWidth,n.clientWidth,a?a.scrollWidth:0,a?a.clientWidth:0),l=yr(n.scrollHeight,n.clientHeight,a?a.scrollHeight:0,a?a.clientHeight:0),i=-o.scrollLeft+C2(e),u=-o.scrollTop;return ra(a||n).direction==="rtl"&&(i+=yr(n.clientWidth,a?a.clientWidth:0)-r),{width:r,height:l,x:i,y:u}}function S2(e){var t=ra(e),n=t.overflow,o=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+a+o)}function v6(e){return["html","body","#document"].indexOf(Po(e))>=0?e.ownerDocument.body:ao(e)&&S2(e)?e:v6(Mc(e))}function ps(e,t){var n;t===void 0&&(t=[]);var o=v6(e),a=o===((n=e.ownerDocument)==null?void 0:n.body),r=ko(o),l=a?[r].concat(r.visualViewport||[],S2(o)?o:[]):o,i=t.concat(l);return a?i:i.concat(ps(Mc(l)))}function ff(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function hL(e){var t=Cl(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}function y1(e,t){return t===l6?ff(pL(e)):bl(t)?hL(t):ff(vL(Ya(e)))}function mL(e){var t=ps(Mc(e)),n=["absolute","fixed"].indexOf(ra(e).position)>=0,o=n&&ao(e)?oi(e):e;return bl(o)?t.filter(function(a){return bl(a)&&i6(a,o)&&Po(a)!=="body"}):[]}function gL(e,t,n){var o=t==="clippingParents"?mL(e):[].concat(t),a=[].concat(o,[n]),r=a[0],l=a.reduce(function(i,u){var d=y1(e,u);return i.top=yr(d.top,i.top),i.right=Lu(d.right,i.right),i.bottom=Lu(d.bottom,i.bottom),i.left=yr(d.left,i.left),i},y1(e,r));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l}function h6(e){var t=e.reference,n=e.element,o=e.placement,a=o?Io(o):null,r=o?Sl(o):null,l=t.x+t.width/2-n.width/2,i=t.y+t.height/2-n.height/2,u;switch(a){case Vn:u={x:l,y:t.y-n.height};break;case co:u={x:l,y:t.y+t.height};break;case fo:u={x:t.x+t.width,y:i};break;case Bn:u={x:t.x-n.width,y:i};break;default:u={x:t.x,y:t.y}}var d=a?b2(a):null;if(d!=null){var f=d==="y"?"height":"width";switch(r){case _l:u[d]=u[d]-(t[f]/2-n[f]/2);break;case Os:u[d]=u[d]+(t[f]/2-n[f]/2);break}}return u}function Ns(e,t){t===void 0&&(t={});var n=t,o=n.placement,a=o===void 0?e.placement:o,r=n.boundary,l=r===void 0?HP:r,i=n.rootBoundary,u=i===void 0?l6:i,d=n.elementContext,f=d===void 0?ql:d,c=n.altBoundary,p=c===void 0?!1:c,h=n.padding,m=h===void 0?0:h,v=c6(typeof m!="number"?m:d6(m,ni)),_=f===ql?DP:ql,g=e.rects.popper,w=e.elements[p?_:f],b=gL(bl(w)?w:w.contextElement||Ya(e.elements.popper),l,u),C=Cl(e.elements.reference),x=h6({reference:C,element:g,strategy:"absolute",placement:a}),E=ff(Object.assign({},g,x)),O=f===ql?E:C,T={top:b.top-O.top+v.top,bottom:O.bottom-b.bottom+v.bottom,left:b.left-O.left+v.left,right:O.right-b.right+v.right},V=e.modifiersData.offset;if(f===ql&&V){var L=V[a];Object.keys(T).forEach(function(P){var z=[fo,co].indexOf(P)>=0?1:-1,j=[Vn,co].indexOf(P)>=0?"y":"x";T[P]+=L[j]*z})}return T}function yL(e,t){t===void 0&&(t={});var n=t,o=n.placement,a=n.boundary,r=n.rootBoundary,l=n.padding,i=n.flipVariations,u=n.allowedAutoPlacements,d=u===void 0?Hr:u,f=Sl(o),c=f?i?v1:v1.filter(function(m){return Sl(m)===f}):ni,p=c.filter(function(m){return d.indexOf(m)>=0});p.length===0&&(p=c);var h=p.reduce(function(m,v){return m[v]=Ns(e,{placement:v,boundary:a,rootBoundary:r,padding:l})[Io(v)],m},{});return Object.keys(h).sort(function(m,v){return h[m]-h[v]})}function _L(e){if(Io(e)===g2)return[];var t=Ji(e);return[g1(e),t,g1(t)]}function bL(e){var t=e.state,n=e.options,o=e.name;if(!t.modifiersData[o]._skip){for(var a=n.mainAxis,r=a===void 0?!0:a,l=n.altAxis,i=l===void 0?!0:l,u=n.fallbackPlacements,d=n.padding,f=n.boundary,c=n.rootBoundary,p=n.altBoundary,h=n.flipVariations,m=h===void 0?!0:h,v=n.allowedAutoPlacements,_=t.options.placement,g=Io(_),w=g===_,b=u||(w||!m?[Ji(_)]:_L(_)),C=[_].concat(b).reduce(function(se,_e){return se.concat(Io(_e)===g2?yL(t,{placement:_e,boundary:f,rootBoundary:c,padding:d,flipVariations:m,allowedAutoPlacements:v}):_e)},[]),x=t.rects.reference,E=t.rects.popper,O=new Map,T=!0,V=C[0],L=0;L=0,F=K?"width":"height",B=Ns(t,{placement:P,boundary:f,rootBoundary:c,altBoundary:p,padding:d}),I=K?j?fo:Bn:j?co:Vn;x[F]>E[F]&&(I=Ji(I));var H=Ji(I),N=[];if(r&&N.push(B[z]<=0),i&&N.push(B[I]<=0,B[H]<=0),N.every(function(se){return se})){V=P,T=!1;break}O.set(P,N)}if(T)for(var D=m?3:1,q=function(se){var _e=C.find(function(Q){var le=O.get(Q);if(le)return le.slice(0,se).every(function(ae){return ae})});if(_e)return V=_e,"break"},Y=D;Y>0;Y--){var J=q(Y);if(J==="break")break}t.placement!==V&&(t.modifiersData[o]._skip=!0,t.placement=V,t.reset=!0)}}var wL={name:"flip",enabled:!0,phase:"main",fn:bL,requiresIfExists:["offset"],data:{_skip:!1}};function _1(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function b1(e){return[Vn,fo,co,Bn].some(function(t){return e[t]>=0})}function CL(e){var t=e.state,n=e.name,o=t.rects.reference,a=t.rects.popper,r=t.modifiersData.preventOverflow,l=Ns(t,{elementContext:"reference"}),i=Ns(t,{altBoundary:!0}),u=_1(l,o),d=_1(i,a,r),f=b1(u),c=b1(d);t.modifiersData[n]={referenceClippingOffsets:u,popperEscapeOffsets:d,isReferenceHidden:f,hasPopperEscaped:c},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":f,"data-popper-escaped":c})}var SL={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:CL};function kL(e,t,n){var o=Io(e),a=[Bn,Vn].indexOf(o)>=0?-1:1,r=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,l=r[0],i=r[1];return l=l||0,i=(i||0)*a,[Bn,fo].indexOf(o)>=0?{x:i,y:l}:{x:l,y:i}}function EL(e){var t=e.state,n=e.options,o=e.name,a=n.offset,r=a===void 0?[0,0]:a,l=Hr.reduce(function(f,c){return f[c]=kL(c,t.rects,r),f},{}),i=l[t.placement],u=i.x,d=i.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=u,t.modifiersData.popperOffsets.y+=d),t.modifiersData[o]=l}var xL={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:EL};function ML(e){var t=e.state,n=e.name;t.modifiersData[n]=h6({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}var m6={name:"popperOffsets",enabled:!0,phase:"read",fn:ML,data:{}};function $L(e){return e==="x"?"y":"x"}function TL(e){var t=e.state,n=e.options,o=e.name,a=n.mainAxis,r=a===void 0?!0:a,l=n.altAxis,i=l===void 0?!1:l,u=n.boundary,d=n.rootBoundary,f=n.altBoundary,c=n.padding,p=n.tether,h=p===void 0?!0:p,m=n.tetherOffset,v=m===void 0?0:m,_=Ns(t,{boundary:u,rootBoundary:d,padding:c,altBoundary:f}),g=Io(t.placement),w=Sl(t.placement),b=!w,C=b2(g),x=$L(C),E=t.modifiersData.popperOffsets,O=t.rects.reference,T=t.rects.popper,V=typeof v=="function"?v(Object.assign({},t.rects,{placement:t.placement})):v,L=typeof V=="number"?{mainAxis:V,altAxis:V}:Object.assign({mainAxis:0,altAxis:0},V),P=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,z={x:0,y:0};if(E){if(r){var j,K=C==="y"?Vn:Bn,F=C==="y"?co:fo,B=C==="y"?"height":"width",I=E[C],H=I+_[K],N=I-_[F],D=h?-T[B]/2:0,q=w===_l?O[B]:T[B],Y=w===_l?-T[B]:-O[B],J=t.elements.arrow,se=h&&J?_2(J):{width:0,height:0},_e=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:u6(),Q=_e[K],le=_e[F],ae=fs(0,O[B],se[B]),Te=b?O[B]/2-D-ae-Q-L.mainAxis:q-ae-Q-L.mainAxis,ce=b?-O[B]/2+D+ae+le+L.mainAxis:Y+ae+le+L.mainAxis,ge=t.elements.arrow&&oi(t.elements.arrow),Ae=ge?C==="y"?ge.clientTop||0:ge.clientLeft||0:0,U=(j=P==null?void 0:P[C])!=null?j:0,te=I+Te-U-Ae,ve=I+ce-U,be=fs(h?Lu(H,te):H,I,h?yr(N,ve):N);E[C]=be,z[C]=be-I}if(i){var ue,ye=C==="x"?Vn:Bn,we=C==="x"?co:fo,Ce=E[x],he=x==="y"?"height":"width",Se=Ce+_[ye],Re=Ce-_[we],He=[Vn,Bn].indexOf(g)!==-1,de=(ue=P==null?void 0:P[x])!=null?ue:0,Le=He?Se:Ce-O[he]-T[he]-de+L.altAxis,Ue=He?Ce+O[he]+T[he]-de-L.altAxis:Re,ot=h&&He?nL(Le,Ce,Ue):fs(h?Le:Se,Ce,h?Ue:Re);E[x]=ot,z[x]=ot-Ce}t.modifiersData[o]=z}}var AL={name:"preventOverflow",enabled:!0,phase:"main",fn:TL,requiresIfExists:["offset"]};function OL(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function NL(e){return e===ko(e)||!ao(e)?w2(e):OL(e)}function IL(e){var t=e.getBoundingClientRect(),n=wl(t.width)/e.offsetWidth||1,o=wl(t.height)/e.offsetHeight||1;return n!==1||o!==1}function RL(e,t,n){n===void 0&&(n=!1);var o=ao(t),a=ao(t)&&IL(t),r=Ya(t),l=Cl(e,a),i={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(o||!o&&!n)&&((Po(t)!=="body"||S2(r))&&(i=NL(t)),ao(t)?(u=Cl(t,!0),u.x+=t.clientLeft,u.y+=t.clientTop):r&&(u.x=C2(r))),{x:l.left+i.scrollLeft-u.x,y:l.top+i.scrollTop-u.y,width:l.width,height:l.height}}function PL(e){var t=new Map,n=new Set,o=[];e.forEach(function(r){t.set(r.name,r)});function a(r){n.add(r.name);var l=[].concat(r.requires||[],r.requiresIfExists||[]);l.forEach(function(i){if(!n.has(i)){var u=t.get(i);u&&a(u)}}),o.push(r)}return e.forEach(function(r){n.has(r.name)||a(r)}),o}function LL(e){var t=PL(e);return JP.reduce(function(n,o){return n.concat(t.filter(function(a){return a.phase===o}))},[])}function VL(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function BL(e){var t=e.reduce(function(n,o){var a=n[o.name];return n[o.name]=a?Object.assign({},a,o,{options:Object.assign({},a.options,o.options),data:Object.assign({},a.data,o.data)}):o,n},{});return Object.keys(t).map(function(n){return t[n]})}var w1={placement:"bottom",modifiers:[],strategy:"absolute"};function C1(){for(var e=arguments.length,t=new Array(e),n=0;n{const o={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const d=KL(u);Object.assign(l.value,d)},requires:["computeStyles"]},a=S(()=>{const{onFirstUpdate:u,placement:d,strategy:f,modifiers:c}=s(n);return{onFirstUpdate:u,placement:d||"bottom",strategy:f||"absolute",modifiers:[...c||[],o,{name:"applyStyles",enabled:!1}]}}),r=Rt(),l=R({styles:{popper:{position:s(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{r.value&&(r.value.destroy(),r.value=void 0)};return pe(a,u=>{const d=s(r);d&&d.setOptions(u)},{deep:!0}),pe([e,t],([u,d])=>{i(),!(!u||!d)&&(r.value=DL(u,d,s(a)))}),It(()=>{i()}),{state:S(()=>{var u;return{...((u=s(r))==null?void 0:u.state)||{}}}),styles:S(()=>s(l).styles),attributes:S(()=>s(l).attributes),update:()=>{var u;return(u=s(r))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=s(r))==null?void 0:u.forceUpdate()},instanceRef:S(()=>s(r))}};function KL(e){const t=Object.keys(e.elements),n=Pu(t.map(a=>[a,e.styles[a]||{}])),o=Pu(t.map(a=>[a,e.attributes[a]]));return{styles:n,attributes:o}}const E2=e=>{if(!e)return{onClick:Et,onMousedown:Et,onMouseup:Et};let t=!1,n=!1;return{onClick:l=>{t&&n&&e(l),t=n=!1},onMousedown:l=>{t=l.target===l.currentTarget},onMouseup:l=>{n=l.target===l.currentTarget}}},WL=(e,t=0)=>{if(t===0)return e;const n=R(!1);let o=0;const a=()=>{o&&clearTimeout(o),o=window.setTimeout(()=>{n.value=e.value},t)};return et(a),pe(()=>e.value,r=>{r?a():n.value=r}),n};function S1(){let e;const t=(o,a)=>{n(),e=window.setTimeout(o,a)},n=()=>window.clearTimeout(e);return Xs(()=>n()),{registerTimeout:t,cancelTimeout:n}}const k1={prefix:Math.floor(Math.random()*1e4),current:0},jL=Symbol("elIdInjection"),x2=()=>rt()?Pe(jL,k1):k1,kn=e=>{const t=x2(),n=h2();return S(()=>s(e)||`${n.value}-id-${t.prefix}-${t.current++}`)};let Yr=[];const E1=e=>{const t=e;t.key===Ke.esc&&Yr.forEach(n=>n(t))},qL=e=>{et(()=>{Yr.length===0&&document.addEventListener("keydown",E1),gt&&Yr.push(e)}),It(()=>{Yr=Yr.filter(t=>t!==e),Yr.length===0&>&&document.removeEventListener("keydown",E1)})};let x1;const g6=()=>{const e=h2(),t=x2(),n=S(()=>`${e.value}-popper-container-${t.prefix}`),o=S(()=>`#${n.value}`);return{id:n,selector:o}},UL=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},YL=()=>{const{id:e,selector:t}=g6();return cc(()=>{gt&&!x1&&!document.body.querySelector(t.value)&&(x1=UL(e.value))}),{id:e,selector:t}},GL=Ee({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),XL=({showAfter:e,hideAfter:t,autoClose:n,open:o,close:a})=>{const{registerTimeout:r}=S1(),{registerTimeout:l,cancelTimeout:i}=S1();return{onOpen:f=>{r(()=>{o(f);const c=s(n);Ye(c)&&c>0&&l(()=>{a(f)},c)},s(e))},onClose:f=>{i(),r(()=>{a(f)},s(t))}}},y6=Symbol("elForwardRef"),JL=e=>{pt(y6,{setForwardRef:n=>{e.value=n}})},ZL=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),M1={current:0},$1=R(0),_6=2e3,T1=Symbol("elZIndexContextKey"),b6=Symbol("zIndexContextKey"),zl=e=>{const t=rt()?Pe(T1,M1):M1,n=e||(rt()?Pe(b6,void 0):void 0),o=S(()=>{const l=s(n);return Ye(l)?l:_6}),a=S(()=>o.value+$1.value),r=()=>(t.current++,$1.value=t.current,a.value);return!gt&&Pe(T1),{initialZIndex:o,currentZIndex:a,nextZIndex:r}},kl=Math.min,_r=Math.max,Vu=Math.round,Ti=Math.floor,Wa=e=>({x:e,y:e}),QL={left:"right",right:"left",bottom:"top",top:"bottom"},eV={start:"end",end:"start"};function pf(e,t,n){return _r(e,kl(t,n))}function ai(e,t){return typeof e=="function"?e(t):e}function Tr(e){return e.split("-")[0]}function ri(e){return e.split("-")[1]}function w6(e){return e==="x"?"y":"x"}function M2(e){return e==="y"?"height":"width"}function $c(e){return["top","bottom"].includes(Tr(e))?"y":"x"}function $2(e){return w6($c(e))}function tV(e,t,n){n===void 0&&(n=!1);const o=ri(e),a=$2(e),r=M2(a);let l=a==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[r]>t.floating[r]&&(l=Bu(l)),[l,Bu(l)]}function nV(e){const t=Bu(e);return[vf(e),t,vf(t)]}function vf(e){return e.replace(/start|end/g,t=>eV[t])}function oV(e,t,n){const o=["left","right"],a=["right","left"],r=["top","bottom"],l=["bottom","top"];switch(e){case"top":case"bottom":return n?t?a:o:t?o:a;case"left":case"right":return t?r:l;default:return[]}}function aV(e,t,n,o){const a=ri(e);let r=oV(Tr(e),n==="start",o);return a&&(r=r.map(l=>l+"-"+a),t&&(r=r.concat(r.map(vf)))),r}function Bu(e){return e.replace(/left|right|bottom|top/g,t=>QL[t])}function rV(e){return{top:0,right:0,bottom:0,left:0,...e}}function C6(e){return typeof e!="number"?rV(e):{top:e,right:e,bottom:e,left:e}}function zu(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function A1(e,t,n){let{reference:o,floating:a}=e;const r=$c(t),l=$2(t),i=M2(l),u=Tr(t),d=r==="y",f=o.x+o.width/2-a.width/2,c=o.y+o.height/2-a.height/2,p=o[i]/2-a[i]/2;let h;switch(u){case"top":h={x:f,y:o.y-a.height};break;case"bottom":h={x:f,y:o.y+o.height};break;case"right":h={x:o.x+o.width,y:c};break;case"left":h={x:o.x-a.width,y:c};break;default:h={x:o.x,y:o.y}}switch(ri(t)){case"start":h[l]-=p*(n&&d?-1:1);break;case"end":h[l]+=p*(n&&d?-1:1);break}return h}const lV=async(e,t,n)=>{const{placement:o="bottom",strategy:a="absolute",middleware:r=[],platform:l}=n,i=r.filter(Boolean),u=await(l.isRTL==null?void 0:l.isRTL(t));let d=await l.getElementRects({reference:e,floating:t,strategy:a}),{x:f,y:c}=A1(d,o,u),p=o,h={},m=0;for(let v=0;v({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:a,rects:r,platform:l,elements:i,middlewareData:u}=t,{element:d,padding:f=0}=ai(e,t)||{};if(d==null)return{};const c=C6(f),p={x:n,y:o},h=$2(a),m=M2(h),v=await l.getDimensions(d),_=h==="y",g=_?"top":"left",w=_?"bottom":"right",b=_?"clientHeight":"clientWidth",C=r.reference[m]+r.reference[h]-p[h]-r.floating[m],x=p[h]-r.reference[h],E=await(l.getOffsetParent==null?void 0:l.getOffsetParent(d));let O=E?E[b]:0;(!O||!await(l.isElement==null?void 0:l.isElement(E)))&&(O=i.floating[b]||r.floating[m]);const T=C/2-x/2,V=O/2-v[m]/2-1,L=kl(c[g],V),P=kl(c[w],V),z=L,j=O-v[m]-P,K=O/2-v[m]/2+T,F=pf(z,K,j),B=!u.arrow&&ri(a)!=null&&K!==F&&r.reference[m]/2-(Kz<=0)){var V,L;const z=(((V=r.flip)==null?void 0:V.index)||0)+1,j=x[z];if(j)return{data:{index:z,overflows:T},reset:{placement:j}};let K=(L=T.filter(F=>F.overflows[0]<=0).sort((F,B)=>F.overflows[1]-B.overflows[1])[0])==null?void 0:L.placement;if(!K)switch(h){case"bestFit":{var P;const F=(P=T.map(B=>[B.placement,B.overflows.filter(I=>I>0).reduce((I,H)=>I+H,0)]).sort((B,I)=>B[1]-I[1])[0])==null?void 0:P[0];F&&(K=F);break}case"initialPlacement":K=i;break}if(a!==K)return{reset:{placement:K}}}return{}}}};async function uV(e,t){const{placement:n,platform:o,elements:a}=e,r=await(o.isRTL==null?void 0:o.isRTL(a.floating)),l=Tr(n),i=ri(n),u=$c(n)==="y",d=["left","top"].includes(l)?-1:1,f=r&&u?-1:1,c=ai(t,e);let{mainAxis:p,crossAxis:h,alignmentAxis:m}=typeof c=="number"?{mainAxis:c,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...c};return i&&typeof m=="number"&&(h=i==="end"?m*-1:m),u?{x:h*f,y:p*d}:{x:p*d,y:h*f}}const S6=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:a,y:r,placement:l,middlewareData:i}=t,u=await uV(t,e);return l===((n=i.offset)==null?void 0:n.placement)&&(o=i.arrow)!=null&&o.alignmentOffset?{}:{x:a+u.x,y:r+u.y,data:{...u,placement:l}}}}},cV=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:a}=t,{mainAxis:r=!0,crossAxis:l=!1,limiter:i={fn:_=>{let{x:g,y:w}=_;return{x:g,y:w}}},...u}=ai(e,t),d={x:n,y:o},f=await T2(t,u),c=$c(Tr(a)),p=w6(c);let h=d[p],m=d[c];if(r){const _=p==="y"?"top":"left",g=p==="y"?"bottom":"right",w=h+f[_],b=h-f[g];h=pf(w,h,b)}if(l){const _=c==="y"?"top":"left",g=c==="y"?"bottom":"right",w=m+f[_],b=m-f[g];m=pf(w,m,b)}const v=i.fn({...t,[p]:h,[c]:m});return{...v,data:{x:v.x-n,y:v.y-o}}}}};function ja(e){return k6(e)?(e.nodeName||"").toLowerCase():"#document"}function Gn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function va(e){var t;return(t=(k6(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function k6(e){return e instanceof Node||e instanceof Gn(e).Node}function la(e){return e instanceof Element||e instanceof Gn(e).Element}function Lo(e){return e instanceof HTMLElement||e instanceof Gn(e).HTMLElement}function O1(e){return typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof Gn(e).ShadowRoot}function li(e){const{overflow:t,overflowX:n,overflowY:o,display:a}=po(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&!["inline","contents"].includes(a)}function dV(e){return["table","td","th"].includes(ja(e))}function A2(e){const t=O2(),n=po(e);return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(o=>(n.willChange||"").includes(o))||["paint","layout","strict","content"].some(o=>(n.contain||"").includes(o))}function fV(e){let t=El(e);for(;Lo(t)&&!Tc(t);){if(A2(t))return t;t=El(t)}return null}function O2(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Tc(e){return["html","body","#document"].includes(ja(e))}function po(e){return Gn(e).getComputedStyle(e)}function Ac(e){return la(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function El(e){if(ja(e)==="html")return e;const t=e.assignedSlot||e.parentNode||O1(e)&&e.host||va(e);return O1(t)?t.host:t}function E6(e){const t=El(e);return Tc(t)?e.ownerDocument?e.ownerDocument.body:e.body:Lo(t)&&li(t)?t:E6(t)}function Is(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const a=E6(e),r=a===((o=e.ownerDocument)==null?void 0:o.body),l=Gn(a);return r?t.concat(l,l.visualViewport||[],li(a)?a:[],l.frameElement&&n?Is(l.frameElement):[]):t.concat(a,Is(a,[],n))}function x6(e){const t=po(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const a=Lo(e),r=a?e.offsetWidth:n,l=a?e.offsetHeight:o,i=Vu(n)!==r||Vu(o)!==l;return i&&(n=r,o=l),{width:n,height:o,$:i}}function N2(e){return la(e)?e:e.contextElement}function sl(e){const t=N2(e);if(!Lo(t))return Wa(1);const n=t.getBoundingClientRect(),{width:o,height:a,$:r}=x6(t);let l=(r?Vu(n.width):n.width)/o,i=(r?Vu(n.height):n.height)/a;return(!l||!Number.isFinite(l))&&(l=1),(!i||!Number.isFinite(i))&&(i=1),{x:l,y:i}}const pV=Wa(0);function M6(e){const t=Gn(e);return!O2()||!t.visualViewport?pV:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function vV(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==Gn(e)?!1:t}function Ar(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const a=e.getBoundingClientRect(),r=N2(e);let l=Wa(1);t&&(o?la(o)&&(l=sl(o)):l=sl(e));const i=vV(r,n,o)?M6(r):Wa(0);let u=(a.left+i.x)/l.x,d=(a.top+i.y)/l.y,f=a.width/l.x,c=a.height/l.y;if(r){const p=Gn(r),h=o&&la(o)?Gn(o):o;let m=p,v=m.frameElement;for(;v&&o&&h!==m;){const _=sl(v),g=v.getBoundingClientRect(),w=po(v),b=g.left+(v.clientLeft+parseFloat(w.paddingLeft))*_.x,C=g.top+(v.clientTop+parseFloat(w.paddingTop))*_.y;u*=_.x,d*=_.y,f*=_.x,c*=_.y,u+=b,d+=C,m=Gn(v),v=m.frameElement}}return zu({width:f,height:c,x:u,y:d})}const hV=[":popover-open",":modal"];function $6(e){return hV.some(t=>{try{return e.matches(t)}catch{return!1}})}function mV(e){let{elements:t,rect:n,offsetParent:o,strategy:a}=e;const r=a==="fixed",l=va(o),i=t?$6(t.floating):!1;if(o===l||i&&r)return n;let u={scrollLeft:0,scrollTop:0},d=Wa(1);const f=Wa(0),c=Lo(o);if((c||!c&&!r)&&((ja(o)!=="body"||li(l))&&(u=Ac(o)),Lo(o))){const p=Ar(o);d=sl(o),f.x=p.x+o.clientLeft,f.y=p.y+o.clientTop}return{width:n.width*d.x,height:n.height*d.y,x:n.x*d.x-u.scrollLeft*d.x+f.x,y:n.y*d.y-u.scrollTop*d.y+f.y}}function gV(e){return Array.from(e.getClientRects())}function T6(e){return Ar(va(e)).left+Ac(e).scrollLeft}function yV(e){const t=va(e),n=Ac(e),o=e.ownerDocument.body,a=_r(t.scrollWidth,t.clientWidth,o.scrollWidth,o.clientWidth),r=_r(t.scrollHeight,t.clientHeight,o.scrollHeight,o.clientHeight);let l=-n.scrollLeft+T6(e);const i=-n.scrollTop;return po(o).direction==="rtl"&&(l+=_r(t.clientWidth,o.clientWidth)-a),{width:a,height:r,x:l,y:i}}function _V(e,t){const n=Gn(e),o=va(e),a=n.visualViewport;let r=o.clientWidth,l=o.clientHeight,i=0,u=0;if(a){r=a.width,l=a.height;const d=O2();(!d||d&&t==="fixed")&&(i=a.offsetLeft,u=a.offsetTop)}return{width:r,height:l,x:i,y:u}}function bV(e,t){const n=Ar(e,!0,t==="fixed"),o=n.top+e.clientTop,a=n.left+e.clientLeft,r=Lo(e)?sl(e):Wa(1),l=e.clientWidth*r.x,i=e.clientHeight*r.y,u=a*r.x,d=o*r.y;return{width:l,height:i,x:u,y:d}}function N1(e,t,n){let o;if(t==="viewport")o=_V(e,n);else if(t==="document")o=yV(va(e));else if(la(t))o=bV(t,n);else{const a=M6(e);o={...t,x:t.x-a.x,y:t.y-a.y}}return zu(o)}function A6(e,t){const n=El(e);return n===t||!la(n)||Tc(n)?!1:po(n).position==="fixed"||A6(n,t)}function wV(e,t){const n=t.get(e);if(n)return n;let o=Is(e,[],!1).filter(i=>la(i)&&ja(i)!=="body"),a=null;const r=po(e).position==="fixed";let l=r?El(e):e;for(;la(l)&&!Tc(l);){const i=po(l),u=A2(l);!u&&i.position==="fixed"&&(a=null),(r?!u&&!a:!u&&i.position==="static"&&!!a&&["absolute","fixed"].includes(a.position)||li(l)&&!u&&A6(e,l))?o=o.filter(f=>f!==l):a=i,l=El(l)}return t.set(e,o),o}function CV(e){let{element:t,boundary:n,rootBoundary:o,strategy:a}=e;const l=[...n==="clippingAncestors"?wV(t,this._c):[].concat(n),o],i=l[0],u=l.reduce((d,f)=>{const c=N1(t,f,a);return d.top=_r(c.top,d.top),d.right=kl(c.right,d.right),d.bottom=kl(c.bottom,d.bottom),d.left=_r(c.left,d.left),d},N1(t,i,a));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}}function SV(e){const{width:t,height:n}=x6(e);return{width:t,height:n}}function kV(e,t,n){const o=Lo(t),a=va(t),r=n==="fixed",l=Ar(e,!0,r,t);let i={scrollLeft:0,scrollTop:0};const u=Wa(0);if(o||!o&&!r)if((ja(t)!=="body"||li(a))&&(i=Ac(t)),o){const c=Ar(t,!0,r,t);u.x=c.x+t.clientLeft,u.y=c.y+t.clientTop}else a&&(u.x=T6(a));const d=l.left+i.scrollLeft-u.x,f=l.top+i.scrollTop-u.y;return{x:d,y:f,width:l.width,height:l.height}}function I1(e,t){return!Lo(e)||po(e).position==="fixed"?null:t?t(e):e.offsetParent}function O6(e,t){const n=Gn(e);if(!Lo(e)||$6(e))return n;let o=I1(e,t);for(;o&&dV(o)&&po(o).position==="static";)o=I1(o,t);return o&&(ja(o)==="html"||ja(o)==="body"&&po(o).position==="static"&&!A2(o))?n:o||fV(e)||n}const EV=async function(e){const t=this.getOffsetParent||O6,n=this.getDimensions;return{reference:kV(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,...await n(e.floating)}}};function xV(e){return po(e).direction==="rtl"}const MV={convertOffsetParentRelativeRectToViewportRelativeRect:mV,getDocumentElement:va,getClippingRect:CV,getOffsetParent:O6,getElementRects:EV,getClientRects:gV,getDimensions:SV,getScale:sl,isElement:la,isRTL:xV};function $V(e,t){let n=null,o;const a=va(e);function r(){var i;clearTimeout(o),(i=n)==null||i.disconnect(),n=null}function l(i,u){i===void 0&&(i=!1),u===void 0&&(u=1),r();const{left:d,top:f,width:c,height:p}=e.getBoundingClientRect();if(i||t(),!c||!p)return;const h=Ti(f),m=Ti(a.clientWidth-(d+c)),v=Ti(a.clientHeight-(f+p)),_=Ti(d),w={rootMargin:-h+"px "+-m+"px "+-v+"px "+-_+"px",threshold:_r(0,kl(1,u))||1};let b=!0;function C(x){const E=x[0].intersectionRatio;if(E!==u){if(!b)return l();E?l(!1,E):o=setTimeout(()=>{l(!1,1e-7)},100)}b=!1}try{n=new IntersectionObserver(C,{...w,root:a.ownerDocument})}catch{n=new IntersectionObserver(C,w)}n.observe(e)}return l(!0),r}function TV(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:a=!0,ancestorResize:r=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:u=!1}=o,d=N2(e),f=a||r?[...d?Is(d):[],...Is(t)]:[];f.forEach(g=>{a&&g.addEventListener("scroll",n,{passive:!0}),r&&g.addEventListener("resize",n)});const c=d&&i?$V(d,n):null;let p=-1,h=null;l&&(h=new ResizeObserver(g=>{let[w]=g;w&&w.target===d&&h&&(h.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var b;(b=h)==null||b.observe(t)})),n()}),d&&!u&&h.observe(d),h.observe(t));let m,v=u?Ar(e):null;u&&_();function _(){const g=Ar(e);v&&(g.x!==v.x||g.y!==v.y||g.width!==v.width||g.height!==v.height)&&n(),v=g,m=requestAnimationFrame(_)}return n(),()=>{var g;f.forEach(w=>{a&&w.removeEventListener("scroll",n),r&&w.removeEventListener("resize",n)}),c==null||c(),(g=h)==null||g.disconnect(),h=null,u&&cancelAnimationFrame(m)}}const AV=cV,OV=iV,N6=sV,I6=(e,t,n)=>{const o=new Map,a={platform:MV,...n},r={...a.platform,_c:o};return lV(e,t,{...a,platform:r})};Ee({});const NV=e=>{if(!gt)return;if(!e)return e;const t=Ln(e);return t||(Pt(e)?t:e)},IV=({middleware:e,placement:t,strategy:n})=>{const o=R(),a=R(),r=R(),l=R(),i=R({}),u={x:r,y:l,placement:t,strategy:n,middlewareData:i},d=async()=>{if(!gt)return;const f=NV(o),c=Ln(a);if(!f||!c)return;const p=await I6(f,c,{placement:s(t),strategy:s(n),middleware:s(e)});yl(u).forEach(h=>{u[h].value=p[h]})};return et(()=>{gn(()=>{d()})}),{...u,update:d,referenceRef:o,contentRef:a}},RV=({arrowRef:e,padding:t})=>({name:"arrow",options:{element:e,padding:t},fn(n){const o=s(e);return o?N6({element:o,padding:t}).fn(n):{}}});function PV(e){const t=R();function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:r,value:l}=e.value;if(a==null||r==null)return;const i=l.slice(0,Math.max(0,a)),u=l.slice(Math.max(0,r));t.value={selectionStart:a,selectionEnd:r,value:l,beforeTxt:i,afterTxt:u}}function o(){if(e.value==null||t.value==null)return;const{value:a}=e.value,{beforeTxt:r,afterTxt:l,selectionStart:i}=t.value;if(r==null||l==null||i==null)return;let u=a.length;if(a.endsWith(l))u=a.length-l.length;else if(a.startsWith(r))u=r.length;else{const d=r[i-1],f=a.indexOf(d,i-1);f!==-1&&(u=f+1)}e.value.setSelectionRange(u,u)}return[n,o]}const LV=(e,t,n)=>La(e.subTree).filter(r=>{var l;return zt(r)&&((l=r.type)==null?void 0:l.name)===t&&!!r.component}).map(r=>r.component.uid).map(r=>n[r]).filter(r=>!!r),I2=(e,t)=>{const n={},o=Rt([]);return{children:o,addChild:l=>{n[l.uid]=l,o.value=LV(e,t,n)},removeChild:l=>{delete n[l],o.value=o.value.filter(i=>i.uid!==l)}}},cn=So({type:String,values:zo,required:!1}),R6=Symbol("size"),VV=()=>{const e=Pe(R6,{});return S(()=>s(e.size)||"")};function Oc(e,{afterFocus:t,beforeBlur:n,afterBlur:o}={}){const a=rt(),{emit:r}=a,l=Rt(),i=R(!1),u=c=>{i.value||(i.value=!0,r("focus",c),t==null||t())},d=c=>{var p;Xe(n)&&n(c)||c.relatedTarget&&((p=l.value)!=null&&p.contains(c.relatedTarget))||(i.value=!1,r("blur",c),o==null||o())},f=()=>{var c;(c=e.value)==null||c.focus()};return pe(l,c=>{c&&c.setAttribute("tabindex","-1")}),Vt(l,"click",f),{wrapperRef:l,isFocused:i,handleFocus:u,handleBlur:d}}const P6=Symbol(),Hu=R();function Nc(e,t=void 0){const n=rt()?Pe(P6,Hu):Hu;return e?S(()=>{var o,a;return(a=(o=n.value)==null?void 0:o[e])!=null?a:t}):n}function Ic(e,t){const n=Nc(),o=me(e,S(()=>{var i;return((i=n.value)==null?void 0:i.namespace)||ds})),a=_t(S(()=>{var i;return(i=n.value)==null?void 0:i.locale})),r=zl(S(()=>{var i;return((i=n.value)==null?void 0:i.zIndex)||_6})),l=S(()=>{var i;return s(t)||((i=n.value)==null?void 0:i.size)||""});return R2(S(()=>s(n)||{})),{ns:o,locale:a,zIndex:r,size:l}}const R2=(e,t,n=!1)=>{var o;const a=!!rt(),r=a?Nc():void 0,l=(o=t==null?void 0:t.provide)!=null?o:a?pt:void 0;if(!l)return;const i=S(()=>{const u=s(e);return r!=null&&r.value?BV(r.value,u):u});return l(P6,i),l(n6,S(()=>i.value.locale)),l(o6,S(()=>i.value.namespace)),l(b6,S(()=>i.value.zIndex)),l(R6,{size:S(()=>i.value.size||"")}),(n||!Hu.value)&&(Hu.value=i.value),i},BV=(e,t)=>{var n;const o=[...new Set([...yl(e),...yl(t)])],a={};for(const r of o)a[r]=(n=t[r])!=null?n:e[r];return a},zV=Ee({a11y:{type:Boolean,default:!0},locale:{type:X(Object)},size:cn,button:{type:X(Object)},experimentalFeatures:{type:X(Object)},keyboardNavigation:{type:Boolean,default:!0},message:{type:X(Object)},zIndex:Number,namespace:{type:String,default:"el"}}),hf={},HV=A({name:"ElConfigProvider",props:zV,setup(e,{slots:t}){pe(()=>e.message,o=>{Object.assign(hf,o??{})},{immediate:!0,deep:!0});const n=R2(e);return()=>re(t,"default",{config:n==null?void 0:n.value})}}),DV=lt(HV),FV="2.6.3",KV=(e=[])=>({version:FV,install:(n,o)=>{n[f1]||(n[f1]=!0,e.forEach(a=>n.use(a)),o&&R2(o,n,!0))}}),WV=Ee({zIndex:{type:X([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),jV={scroll:({scrollTop:e,fixed:t})=>Ye(e)&&Qt(t),[Bt]:e=>Qt(e)};var xe=(e,t)=>{const n=e.__vccOpts||e;for(const[o,a]of t)n[o]=a;return n};const L6="ElAffix",qV=A({name:L6}),UV=A({...qV,props:WV,emits:jV,setup(e,{expose:t,emit:n}){const o=e,a=me("affix"),r=Rt(),l=Rt(),i=Rt(),{height:u}=T5(),{height:d,width:f,top:c,bottom:p,update:h}=Mv(l,{windowScroll:!1}),m=Mv(r),v=R(!1),_=R(0),g=R(0),w=S(()=>({height:v.value?`${d.value}px`:"",width:v.value?`${f.value}px`:""})),b=S(()=>{if(!v.value)return{};const E=o.offset?Xt(o.offset):0;return{height:`${d.value}px`,width:`${f.value}px`,top:o.position==="top"?E:"",bottom:o.position==="bottom"?E:"",transform:g.value?`translateY(${g.value}px)`:"",zIndex:o.zIndex}}),C=()=>{if(i.value)if(_.value=i.value instanceof Window?document.documentElement.scrollTop:i.value.scrollTop||0,o.position==="top")if(o.target){const E=m.bottom.value-o.offset-d.value;v.value=o.offset>c.value&&m.bottom.value>0,g.value=E<0?E:0}else v.value=o.offset>c.value;else if(o.target){const E=u.value-m.top.value-o.offset-d.value;v.value=u.value-o.offsetm.top.value,g.value=E<0?-E:0}else v.value=u.value-o.offset{h(),n("scroll",{scrollTop:_.value,fixed:v.value})};return pe(v,E=>n("change",E)),et(()=>{var E;o.target?(r.value=(E=document.querySelector(o.target))!=null?E:void 0,r.value||on(L6,`Target is not existed: ${o.target}`)):r.value=document.documentElement,i.value=a2(l.value,!0),h()}),Vt(i,"scroll",x),gn(C),t({update:C,updateRoot:h}),(E,O)=>(y(),M("div",{ref_key:"root",ref:l,class:$(s(a).b()),style:De(s(w))},[k("div",{class:$({[s(a).m("fixed")]:v.value}),style:De(s(b))},[re(E.$slots,"default")],6)],6))}});var YV=xe(UV,[["__file","affix.vue"]]);const GV=lt(YV),XV=Ee({size:{type:X([Number,String])},color:{type:String}}),JV=A({name:"ElIcon",inheritAttrs:!1}),ZV=A({...JV,props:XV,setup(e){const t=e,n=me("icon"),o=S(()=>{const{size:a,color:r}=t;return!a&&!r?{}:{fontSize:Zt(a)?void 0:Xt(a),"--color":r}});return(a,r)=>(y(),M("i",ft({class:s(n).b(),style:s(o)},a.$attrs),[re(a.$slots,"default")],16))}});var QV=xe(ZV,[["__file","icon.vue"]]);const Be=lt(QV),eB=["light","dark"],tB=Ee({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:yl(Ka),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:eB,default:"light"}}),nB={close:e=>e instanceof MouseEvent},oB=A({name:"ElAlert"}),aB=A({...oB,props:tB,emits:nB,setup(e,{emit:t}){const n=e,{Close:o}=d2,a=fn(),r=me("alert"),l=R(!0),i=S(()=>Ka[n.type]),u=S(()=>[r.e("icon"),{[r.is("big")]:!!n.description||!!a.default}]),d=S(()=>({"with-description":n.description||a.default})),f=c=>{l.value=!1,t("close",c)};return(c,p)=>(y(),oe(nn,{name:s(r).b("fade"),persisted:""},{default:G(()=>[Qe(k("div",{class:$([s(r).b(),s(r).m(c.type),s(r).is("center",c.center),s(r).is(c.effect)]),role:"alert"},[c.showIcon&&s(i)?(y(),oe(s(Be),{key:0,class:$(s(u))},{default:G(()=>[(y(),oe(ut(s(i))))]),_:1},8,["class"])):Z("v-if",!0),k("div",{class:$(s(r).e("content"))},[c.title||c.$slots.title?(y(),M("span",{key:0,class:$([s(r).e("title"),s(d)])},[re(c.$slots,"title",{},()=>[vt(Me(c.title),1)])],2)):Z("v-if",!0),c.$slots.default||c.description?(y(),M("p",{key:1,class:$(s(r).e("description"))},[re(c.$slots,"default",{},()=>[vt(Me(c.description),1)])],2)):Z("v-if",!0),c.closable?(y(),M(Fe,{key:2},[c.closeText?(y(),M("div",{key:0,class:$([s(r).e("close-btn"),s(r).is("customed")]),onClick:f},Me(c.closeText),3)):(y(),oe(s(Be),{key:1,class:$(s(r).e("close-btn")),onClick:f},{default:G(()=>[W(s(o))]),_:1},8,["class"]))],64)):Z("v-if",!0)],2)],2),[[bt,l.value]])]),_:3},8,["name"]))}});var rB=xe(aB,[["__file","alert.vue"]]);const lB=lt(rB),Dr=Symbol("formContextKey"),Vo=Symbol("formItemContextKey"),an=(e,t={})=>{const n=R(void 0),o=t.prop?n:r6("size"),a=t.global?n:VV(),r=t.form?{size:void 0}:Pe(Dr,void 0),l=t.formItem?{size:void 0}:Pe(Vo,void 0);return S(()=>o.value||s(e)||(l==null?void 0:l.size)||(r==null?void 0:r.size)||a.value||"")},Dn=e=>{const t=r6("disabled"),n=Pe(Dr,void 0);return S(()=>t.value||s(e)||(n==null?void 0:n.disabled)||!1)},Nn=()=>{const e=Pe(Dr,void 0),t=Pe(Vo,void 0);return{form:e,formItem:t}},Ho=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:o})=>{n||(n=R(!1)),o||(o=R(!1));const a=R();let r;const l=S(()=>{var i;return!!(!e.label&&t&&t.inputIds&&((i=t.inputIds)==null?void 0:i.length)<=1)});return et(()=>{r=pe([At(e,"id"),n],([i,u])=>{const d=i??(u?void 0:kn().value);d!==a.value&&(t!=null&&t.removeInputId&&(a.value&&t.removeInputId(a.value),!(o!=null&&o.value)&&!u&&d&&t.addInputId(d)),a.value=d)},{immediate:!0})}),Ua(()=>{r&&r(),t!=null&&t.removeInputId&&a.value&&t.removeInputId(a.value)}),{isLabeledByFormItem:l,inputId:a}},sB=Ee({size:{type:String,values:zo},disabled:Boolean}),iB=Ee({...sB,model:Object,rules:{type:X(Object)},labelPosition:{type:String,values:["left","right","top"],default:"right"},requireAsteriskPosition:{type:String,values:["left","right"],default:"left"},labelWidth:{type:[String,Number],default:""},labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:Boolean,scrollToError:Boolean,scrollIntoViewOptions:{type:[Object,Boolean]}}),uB={validate:(e,t,n)=>(Ie(e)||Ze(e))&&Qt(t)&&Ze(n)};function cB(){const e=R([]),t=S(()=>{if(!e.value.length)return"0";const r=Math.max(...e.value);return r?`${r}px`:""});function n(r){const l=e.value.indexOf(r);return l===-1&&t.value,l}function o(r,l){if(r&&l){const i=n(l);e.value.splice(i,1,r)}else r&&e.value.push(r)}function a(r){const l=n(r);l>-1&&e.value.splice(l,1)}return{autoLabelWidth:t,registerLabelWidth:o,deregisterLabelWidth:a}}const Ai=(e,t)=>{const n=kr(t);return n.length>0?e.filter(o=>o.prop&&n.includes(o.prop)):e},dB="ElForm",fB=A({name:dB}),pB=A({...fB,props:iB,emits:uB,setup(e,{expose:t,emit:n}){const o=e,a=[],r=an(),l=me("form"),i=S(()=>{const{labelPosition:b,inline:C}=o;return[l.b(),l.m(r.value||"default"),{[l.m(`label-${b}`)]:b,[l.m("inline")]:C}]}),u=b=>a.find(C=>C.prop===b),d=b=>{a.push(b)},f=b=>{b.prop&&a.splice(a.indexOf(b),1)},c=(b=[])=>{o.model&&Ai(a,b).forEach(C=>C.resetField())},p=(b=[])=>{Ai(a,b).forEach(C=>C.clearValidate())},h=S(()=>!!o.model),m=b=>{if(a.length===0)return[];const C=Ai(a,b);return C.length?C:[]},v=async b=>g(void 0,b),_=async(b=[])=>{if(!h.value)return!1;const C=m(b);if(C.length===0)return!0;let x={};for(const E of C)try{await E.validate("")}catch(O){x={...x,...O}}return Object.keys(x).length===0?!0:Promise.reject(x)},g=async(b=[],C)=>{const x=!Xe(C);try{const E=await _(b);return E===!0&&(C==null||C(E)),E}catch(E){if(E instanceof Error)throw E;const O=E;return o.scrollToError&&w(Object.keys(O)[0]),C==null||C(!1,O),x&&Promise.reject(O)}},w=b=>{var C;const x=Ai(a,b)[0];x&&((C=x.$el)==null||C.scrollIntoView(o.scrollIntoViewOptions))};return pe(()=>o.rules,()=>{o.validateOnRuleChange&&v().catch(b=>void 0)},{deep:!0}),pt(Dr,wt({...un(o),emit:n,resetFields:c,clearValidate:p,validateField:g,getField:u,addField:d,removeField:f,...cB()})),t({validate:v,validateField:g,resetFields:c,clearValidate:p,scrollToField:w}),(b,C)=>(y(),M("form",{class:$(s(i))},[re(b.$slots,"default")],2))}});var vB=xe(pB,[["__file","form.vue"]]);function sr(){return sr=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Zi(e,t,n){return mB()?Zi=Reflect.construct.bind():Zi=function(a,r,l){var i=[null];i.push.apply(i,r);var u=Function.bind.apply(a,i),d=new u;return l&&Rs(d,l.prototype),d},Zi.apply(null,arguments)}function gB(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function gf(e){var t=typeof Map=="function"?new Map:void 0;return gf=function(o){if(o===null||!gB(o))return o;if(typeof o!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(o))return t.get(o);t.set(o,a)}function a(){return Zi(o,arguments,mf(this).constructor)}return a.prototype=Object.create(o.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),Rs(a,o)},gf(e)}var yB=/%[sdj%]/g,_B=function(){};function yf(e){if(!e||!e.length)return null;var t={};return e.forEach(function(n){var o=n.field;t[o]=t[o]||[],t[o].push(n)}),t}function qn(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=r)return i;switch(i){case"%s":return String(n[a++]);case"%d":return Number(n[a++]);case"%j":try{return JSON.stringify(n[a++])}catch{return"[Circular]"}break;default:return i}});return l}return e}function bB(e){return e==="string"||e==="url"||e==="hex"||e==="email"||e==="date"||e==="pattern"}function dn(e,t){return!!(e==null||t==="array"&&Array.isArray(e)&&!e.length||bB(t)&&typeof e=="string"&&!e)}function wB(e,t,n){var o=[],a=0,r=e.length;function l(i){o.push.apply(o,i||[]),a++,a===r&&n(o)}e.forEach(function(i){t(i,l)})}function R1(e,t,n){var o=0,a=e.length;function r(l){if(l&&l.length){n(l);return}var i=o;o=o+1,i()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},es={integer:function(t){return es.number(t)&&parseInt(t,10)===t},float:function(t){return es.number(t)&&!es.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch{return!1}},date:function(t){return typeof t.getTime=="function"&&typeof t.getMonth=="function"&&typeof t.getYear=="function"&&!isNaN(t.getTime())},number:function(t){return isNaN(t)?!1:typeof t=="number"},object:function(t){return typeof t=="object"&&!es.array(t)},method:function(t){return typeof t=="function"},email:function(t){return typeof t=="string"&&t.length<=320&&!!t.match(B1.email)},url:function(t){return typeof t=="string"&&t.length<=2048&&!!t.match(MB())},hex:function(t){return typeof t=="string"&&!!t.match(B1.hex)}},$B=function(t,n,o,a,r){if(t.required&&n===void 0){V6(t,n,o,a,r);return}var l=["integer","float","array","regexp","object","method","email","number","date","url","hex"],i=t.type;l.indexOf(i)>-1?es[i](n)||a.push(qn(r.messages.types[i],t.fullField,t.type)):i&&typeof n!==t.type&&a.push(qn(r.messages.types[i],t.fullField,t.type))},TB=function(t,n,o,a,r){var l=typeof t.len=="number",i=typeof t.min=="number",u=typeof t.max=="number",d=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=n,c=null,p=typeof n=="number",h=typeof n=="string",m=Array.isArray(n);if(p?c="number":h?c="string":m&&(c="array"),!c)return!1;m&&(f=n.length),h&&(f=n.replace(d,"_").length),l?f!==t.len&&a.push(qn(r.messages[c].len,t.fullField,t.len)):i&&!u&&ft.max?a.push(qn(r.messages[c].max,t.fullField,t.max)):i&&u&&(ft.max)&&a.push(qn(r.messages[c].range,t.fullField,t.min,t.max))},Kr="enum",AB=function(t,n,o,a,r){t[Kr]=Array.isArray(t[Kr])?t[Kr]:[],t[Kr].indexOf(n)===-1&&a.push(qn(r.messages[Kr],t.fullField,t[Kr].join(", ")))},OB=function(t,n,o,a,r){if(t.pattern){if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(n)||a.push(qn(r.messages.pattern.mismatch,t.fullField,n,t.pattern));else if(typeof t.pattern=="string"){var l=new RegExp(t.pattern);l.test(n)||a.push(qn(r.messages.pattern.mismatch,t.fullField,n,t.pattern))}}},Tt={required:V6,whitespace:xB,type:$B,range:TB,enum:AB,pattern:OB},NB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n,"string")&&!t.required)return o();Tt.required(t,n,a,l,r,"string"),dn(n,"string")||(Tt.type(t,n,a,l,r),Tt.range(t,n,a,l,r),Tt.pattern(t,n,a,l,r),t.whitespace===!0&&Tt.whitespace(t,n,a,l,r))}o(l)},IB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r),n!==void 0&&Tt.type(t,n,a,l,r)}o(l)},RB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(n===""&&(n=void 0),dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r),n!==void 0&&(Tt.type(t,n,a,l,r),Tt.range(t,n,a,l,r))}o(l)},PB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r),n!==void 0&&Tt.type(t,n,a,l,r)}o(l)},LB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r),dn(n)||Tt.type(t,n,a,l,r)}o(l)},VB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r),n!==void 0&&(Tt.type(t,n,a,l,r),Tt.range(t,n,a,l,r))}o(l)},BB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r),n!==void 0&&(Tt.type(t,n,a,l,r),Tt.range(t,n,a,l,r))}o(l)},zB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(n==null&&!t.required)return o();Tt.required(t,n,a,l,r,"array"),n!=null&&(Tt.type(t,n,a,l,r),Tt.range(t,n,a,l,r))}o(l)},HB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r),n!==void 0&&Tt.type(t,n,a,l,r)}o(l)},DB="enum",FB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r),n!==void 0&&Tt[DB](t,n,a,l,r)}o(l)},KB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n,"string")&&!t.required)return o();Tt.required(t,n,a,l,r),dn(n,"string")||Tt.pattern(t,n,a,l,r)}o(l)},WB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n,"date")&&!t.required)return o();if(Tt.required(t,n,a,l,r),!dn(n,"date")){var u;n instanceof Date?u=n:u=new Date(n),Tt.type(t,u,a,l,r),u&&Tt.range(t,u.getTime(),a,l,r)}}o(l)},jB=function(t,n,o,a,r){var l=[],i=Array.isArray(n)?"array":typeof n;Tt.required(t,n,a,l,r,i),o(l)},gd=function(t,n,o,a,r){var l=t.type,i=[],u=t.required||!t.required&&a.hasOwnProperty(t.field);if(u){if(dn(n,l)&&!t.required)return o();Tt.required(t,n,a,i,r,l),dn(n,l)||Tt.type(t,n,a,i,r)}o(i)},qB=function(t,n,o,a,r){var l=[],i=t.required||!t.required&&a.hasOwnProperty(t.field);if(i){if(dn(n)&&!t.required)return o();Tt.required(t,n,a,l,r)}o(l)},vs={string:NB,method:IB,number:RB,boolean:PB,regexp:LB,integer:VB,float:BB,array:zB,object:HB,enum:FB,pattern:KB,date:WB,url:gd,hex:gd,email:gd,required:jB,any:qB};function _f(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var bf=_f(),si=function(){function e(n){this.rules=null,this._messages=bf,this.define(n)}var t=e.prototype;return t.define=function(o){var a=this;if(!o)throw new Error("Cannot configure a schema with no rules");if(typeof o!="object"||Array.isArray(o))throw new Error("Rules must be an object");this.rules={},Object.keys(o).forEach(function(r){var l=o[r];a.rules[r]=Array.isArray(l)?l:[l]})},t.messages=function(o){return o&&(this._messages=V1(_f(),o)),this._messages},t.validate=function(o,a,r){var l=this;a===void 0&&(a={}),r===void 0&&(r=function(){});var i=o,u=a,d=r;if(typeof u=="function"&&(d=u,u={}),!this.rules||Object.keys(this.rules).length===0)return d&&d(null,i),Promise.resolve(i);function f(v){var _=[],g={};function w(C){if(Array.isArray(C)){var x;_=(x=_).concat.apply(x,C)}else _.push(C)}for(var b=0;b");const a=me("form"),r=R(),l=R(0),i=()=>{var f;if((f=r.value)!=null&&f.firstElementChild){const c=window.getComputedStyle(r.value.firstElementChild).width;return Math.ceil(Number.parseFloat(c))}else return 0},u=(f="update")=>{We(()=>{t.default&&e.isAutoWidth&&(f==="update"?l.value=i():f==="remove"&&(n==null||n.deregisterLabelWidth(l.value)))})},d=()=>u("update");return et(()=>{d()}),It(()=>{u("remove")}),ua(()=>d()),pe(l,(f,c)=>{e.updateAll&&(n==null||n.registerLabelWidth(f,c))}),Kt(S(()=>{var f,c;return(c=(f=r.value)==null?void 0:f.firstElementChild)!=null?c:null}),d),()=>{var f,c;if(!t)return null;const{isAutoWidth:p}=e;if(p){const h=n==null?void 0:n.autoLabelWidth,m=o==null?void 0:o.hasLabel,v={};if(m&&h&&h!=="auto"){const _=Math.max(0,Number.parseInt(h,10)-l.value),g=n.labelPosition==="left"?"marginRight":"marginLeft";_&&(v[g]=`${_}px`)}return W("div",{ref:r,class:[a.be("item","label-wrap")],style:v},[(f=t.default)==null?void 0:f.call(t)])}else return W(Fe,{ref:r},[(c=t.default)==null?void 0:c.call(t)])}}});const XB=["role","aria-labelledby"],JB=A({name:"ElFormItem"}),ZB=A({...JB,props:YB,setup(e,{expose:t}){const n=e,o=fn(),a=Pe(Dr,void 0),r=Pe(Vo,void 0),l=an(void 0,{formItem:!1}),i=me("form-item"),u=kn().value,d=R([]),f=R(""),c=f5(f,100),p=R(""),h=R();let m,v=!1;const _=S(()=>{if((a==null?void 0:a.labelPosition)==="top")return{};const le=Xt(n.labelWidth||(a==null?void 0:a.labelWidth)||"");return le?{width:le}:{}}),g=S(()=>{if((a==null?void 0:a.labelPosition)==="top"||a!=null&&a.inline)return{};if(!n.label&&!n.labelWidth&&V)return{};const le=Xt(n.labelWidth||(a==null?void 0:a.labelWidth)||"");return!n.label&&!o.label?{marginLeft:le}:{}}),w=S(()=>[i.b(),i.m(l.value),i.is("error",f.value==="error"),i.is("validating",f.value==="validating"),i.is("success",f.value==="success"),i.is("required",K.value||n.required),i.is("no-asterisk",a==null?void 0:a.hideRequiredAsterisk),(a==null?void 0:a.requireAsteriskPosition)==="right"?"asterisk-right":"asterisk-left",{[i.m("feedback")]:a==null?void 0:a.statusIcon}]),b=S(()=>Qt(n.inlineMessage)?n.inlineMessage:(a==null?void 0:a.inlineMessage)||!1),C=S(()=>[i.e("error"),{[i.em("error","inline")]:b.value}]),x=S(()=>n.prop?Ze(n.prop)?n.prop:n.prop.join("."):""),E=S(()=>!!(n.label||o.label)),O=S(()=>n.for||(d.value.length===1?d.value[0]:void 0)),T=S(()=>!O.value&&E.value),V=!!r,L=S(()=>{const le=a==null?void 0:a.model;if(!(!le||!n.prop))return Xi(le,n.prop).value}),P=S(()=>{const{required:le}=n,ae=[];n.rules&&ae.push(...kr(n.rules));const Te=a==null?void 0:a.rules;if(Te&&n.prop){const ce=Xi(Te,n.prop).value;ce&&ae.push(...kr(ce))}if(le!==void 0){const ce=ae.map((ge,Ae)=>[ge,Ae]).filter(([ge])=>Object.keys(ge).includes("required"));if(ce.length>0)for(const[ge,Ae]of ce)ge.required!==le&&(ae[Ae]={...ge,required:le});else ae.push({required:le})}return ae}),z=S(()=>P.value.length>0),j=le=>P.value.filter(Te=>!Te.trigger||!le?!0:Array.isArray(Te.trigger)?Te.trigger.includes(le):Te.trigger===le).map(({trigger:Te,...ce})=>ce),K=S(()=>P.value.some(le=>le.required)),F=S(()=>{var le;return c.value==="error"&&n.showMessage&&((le=a==null?void 0:a.showMessage)!=null?le:!0)}),B=S(()=>`${n.label||""}${(a==null?void 0:a.labelSuffix)||""}`),I=le=>{f.value=le},H=le=>{var ae,Te;const{errors:ce,fields:ge}=le;(!ce||!ge)&&console.error(le),I("error"),p.value=ce?(Te=(ae=ce==null?void 0:ce[0])==null?void 0:ae.message)!=null?Te:`${n.prop} is required`:"",a==null||a.emit("validate",n.prop,!1,p.value)},N=()=>{I("success"),a==null||a.emit("validate",n.prop,!0,"")},D=async le=>{const ae=x.value;return new si({[ae]:le}).validate({[ae]:L.value},{firstFields:!0}).then(()=>(N(),!0)).catch(ce=>(H(ce),Promise.reject(ce)))},q=async(le,ae)=>{if(v||!n.prop)return!1;const Te=Xe(ae);if(!z.value)return ae==null||ae(!1),!1;const ce=j(le);return ce.length===0?(ae==null||ae(!0),!0):(I("validating"),D(ce).then(()=>(ae==null||ae(!0),!0)).catch(ge=>{const{fields:Ae}=ge;return ae==null||ae(!1,Ae),Te?!1:Promise.reject(Ae)}))},Y=()=>{I(""),p.value="",v=!1},J=async()=>{const le=a==null?void 0:a.model;if(!le||!n.prop)return;const ae=Xi(le,n.prop);v=!0,ae.value=r1(m),await We(),Y(),v=!1},se=le=>{d.value.includes(le)||d.value.push(le)},_e=le=>{d.value=d.value.filter(ae=>ae!==le)};pe(()=>n.error,le=>{p.value=le||"",I(le?"error":"")},{immediate:!0}),pe(()=>n.validateStatus,le=>I(le||""));const Q=wt({...un(n),$el:h,size:l,validateState:f,labelId:u,inputIds:d,isGroup:T,hasLabel:E,fieldValue:L,addInputId:se,removeInputId:_e,resetField:J,clearValidate:Y,validate:q});return pt(Vo,Q),et(()=>{n.prop&&(a==null||a.addField(Q),m=r1(L.value))}),It(()=>{a==null||a.removeField(Q)}),t({size:l,validateMessage:p,validateState:f,validate:q,clearValidate:Y,resetField:J}),(le,ae)=>{var Te;return y(),M("div",{ref_key:"formItemRef",ref:h,class:$(s(w)),role:s(T)?"group":void 0,"aria-labelledby":s(T)?s(u):void 0},[W(s(GB),{"is-auto-width":s(_).width==="auto","update-all":((Te=s(a))==null?void 0:Te.labelWidth)==="auto"},{default:G(()=>[s(E)?(y(),oe(ut(s(O)?"label":"div"),{key:0,id:s(u),for:s(O),class:$(s(i).e("label")),style:De(s(_))},{default:G(()=>[re(le.$slots,"label",{label:s(B)},()=>[vt(Me(s(B)),1)])]),_:3},8,["id","for","class","style"])):Z("v-if",!0)]),_:3},8,["is-auto-width","update-all"]),k("div",{class:$(s(i).e("content")),style:De(s(g))},[re(le.$slots,"default"),W(M4,{name:`${s(i).namespace.value}-zoom-in-top`},{default:G(()=>[s(F)?re(le.$slots,"error",{key:0,error:p.value},()=>[k("div",{class:$(s(C))},Me(p.value),3)]):Z("v-if",!0)]),_:3},8,["name"])],6)],10,XB)}}});var B6=xe(ZB,[["__file","form-item.vue"]]);const QB=lt(vB,{FormItem:B6}),ez=Dt(B6);let mo;const tz=` + height:0 !important; + visibility:hidden !important; + ${D4()?"":"overflow:hidden !important;"} + position:absolute !important; + z-index:-1000 !important; + top:0 !important; + right:0 !important; +`,nz=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function oz(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),o=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:nz.map(l=>`${l}:${t.getPropertyValue(l)}`).join(";"),paddingSize:o,borderSize:a,boxSizing:n}}function H1(e,t=1,n){var o;mo||(mo=document.createElement("textarea"),document.body.appendChild(mo));const{paddingSize:a,borderSize:r,boxSizing:l,contextStyle:i}=oz(e);mo.setAttribute("style",`${i};${tz}`),mo.value=e.value||e.placeholder||"";let u=mo.scrollHeight;const d={};l==="border-box"?u=u+r:l==="content-box"&&(u=u-a),mo.value="";const f=mo.scrollHeight-a;if(Ye(t)){let c=f*t;l==="border-box"&&(c=c+a+r),u=Math.max(c,u),d.minHeight=`${c}px`}if(Ye(n)){let c=f*n;l==="border-box"&&(c=c+a+r),u=Math.min(c,u)}return d.height=`${u}px`,(o=mo.parentNode)==null||o.removeChild(mo),mo=void 0,d}const az=Ee({id:{type:String,default:void 0},size:cn,disabled:Boolean,modelValue:{type:X([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:X([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},suffixIcon:{type:$t},prefixIcon:{type:$t},containerRole:{type:String,default:void 0},label:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:X([Object,Array,String]),default:()=>Ht({})},autofocus:{type:Boolean,default:!1}}),rz={[it]:e=>Ze(e),input:e=>Ze(e),change:e=>Ze(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},lz=["role"],sz=["id","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus"],iz=["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus"],uz=A({name:"ElInput",inheritAttrs:!1}),cz=A({...uz,props:az,emits:rz,setup(e,{expose:t,emit:n}){const o=e,a=Pr(),r=fn(),l=S(()=>{const de={};return o.containerRole==="combobox"&&(de["aria-haspopup"]=a["aria-haspopup"],de["aria-owns"]=a["aria-owns"],de["aria-expanded"]=a["aria-expanded"]),de}),i=S(()=>[o.type==="textarea"?_.b():v.b(),v.m(h.value),v.is("disabled",m.value),v.is("exceed",se.value),{[v.b("group")]:r.prepend||r.append,[v.bm("group","append")]:r.append,[v.bm("group","prepend")]:r.prepend,[v.m("prefix")]:r.prefix||o.prefixIcon,[v.m("suffix")]:r.suffix||o.suffixIcon||o.clearable||o.showPassword,[v.bm("suffix","password-clear")]:D.value&&q.value,[v.b("hidden")]:o.type==="hidden"},a.class]),u=S(()=>[v.e("wrapper"),v.is("focus",L.value)]),d=v2({excludeKeys:S(()=>Object.keys(l.value))}),{form:f,formItem:c}=Nn(),{inputId:p}=Ho(o,{formItemContext:c}),h=an(),m=Dn(),v=me("input"),_=me("textarea"),g=Rt(),w=Rt(),b=R(!1),C=R(!1),x=R(!1),E=R(),O=Rt(o.inputStyle),T=S(()=>g.value||w.value),{wrapperRef:V,isFocused:L,handleFocus:P,handleBlur:z}=Oc(T,{afterBlur(){var de;o.validateEvent&&((de=c==null?void 0:c.validate)==null||de.call(c,"blur").catch(Le=>void 0))}}),j=S(()=>{var de;return(de=f==null?void 0:f.statusIcon)!=null?de:!1}),K=S(()=>(c==null?void 0:c.validateState)||""),F=S(()=>K.value&&f2[K.value]),B=S(()=>x.value?Xg:Bg),I=S(()=>[a.style]),H=S(()=>[o.inputStyle,O.value,{resize:o.resize}]),N=S(()=>tn(o.modelValue)?"":String(o.modelValue)),D=S(()=>o.clearable&&!m.value&&!o.readonly&&!!N.value&&(L.value||b.value)),q=S(()=>o.showPassword&&!m.value&&!o.readonly&&!!N.value&&(!!N.value||L.value)),Y=S(()=>o.showWordLimit&&!!o.maxlength&&(o.type==="text"||o.type==="textarea")&&!m.value&&!o.readonly&&!o.showPassword),J=S(()=>N.value.length),se=S(()=>!!Y.value&&J.value>Number(o.maxlength)),_e=S(()=>!!r.suffix||!!o.suffixIcon||D.value||o.showPassword||Y.value||!!K.value&&j.value),[Q,le]=PV(g);Kt(w,de=>{if(ce(),!Y.value||o.resize!=="both")return;const Le=de[0],{width:Ue}=Le.contentRect;E.value={right:`calc(100% - ${Ue+15+6}px)`}});const ae=()=>{const{type:de,autosize:Le}=o;if(!(!gt||de!=="textarea"||!w.value))if(Le){const Ue=ct(Le)?Le.minRows:void 0,ot=ct(Le)?Le.maxRows:void 0,dt=H1(w.value,Ue,ot);O.value={overflowY:"hidden",...dt},We(()=>{w.value.offsetHeight,O.value=dt})}else O.value={minHeight:H1(w.value).minHeight}},ce=(de=>{let Le=!1;return()=>{var Ue;if(Le||!o.autosize)return;((Ue=w.value)==null?void 0:Ue.offsetParent)===null||(de(),Le=!0)}})(ae),ge=()=>{const de=T.value,Le=o.formatter?o.formatter(N.value):N.value;!de||de.value===Le||(de.value=Le)},Ae=async de=>{Q();let{value:Le}=de.target;if(o.formatter&&(Le=o.parser?o.parser(Le):Le),!C.value){if(Le===N.value){ge();return}n(it,Le),n("input",Le),await We(),ge(),le()}},U=de=>{n("change",de.target.value)},te=de=>{n("compositionstart",de),C.value=!0},ve=de=>{var Le;n("compositionupdate",de);const Ue=(Le=de.target)==null?void 0:Le.value,ot=Ue[Ue.length-1]||"";C.value=!p2(ot)},be=de=>{n("compositionend",de),C.value&&(C.value=!1,Ae(de))},ue=()=>{x.value=!x.value,ye()},ye=async()=>{var de;await We(),(de=T.value)==null||de.focus()},we=()=>{var de;return(de=T.value)==null?void 0:de.blur()},Ce=de=>{b.value=!1,n("mouseleave",de)},he=de=>{b.value=!0,n("mouseenter",de)},Se=de=>{n("keydown",de)},Re=()=>{var de;(de=T.value)==null||de.select()},He=()=>{n(it,""),n("change",""),n("clear"),n("input","")};return pe(()=>o.modelValue,()=>{var de;We(()=>ae()),o.validateEvent&&((de=c==null?void 0:c.validate)==null||de.call(c,"change").catch(Le=>void 0))}),pe(N,()=>ge()),pe(()=>o.type,async()=>{await We(),ge(),ae()}),et(()=>{!o.formatter&&o.parser,ge(),We(ae)}),t({input:g,textarea:w,ref:T,textareaStyle:H,autosize:At(o,"autosize"),focus:ye,blur:we,select:Re,clear:He,resizeTextarea:ae}),(de,Le)=>(y(),M("div",ft(s(l),{class:s(i),style:s(I),role:de.containerRole,onMouseenter:he,onMouseleave:Ce}),[Z(" input "),de.type!=="textarea"?(y(),M(Fe,{key:0},[Z(" prepend slot "),de.$slots.prepend?(y(),M("div",{key:0,class:$(s(v).be("group","prepend"))},[re(de.$slots,"prepend")],2)):Z("v-if",!0),k("div",{ref_key:"wrapperRef",ref:V,class:$(s(u))},[Z(" prefix slot "),de.$slots.prefix||de.prefixIcon?(y(),M("span",{key:0,class:$(s(v).e("prefix"))},[k("span",{class:$(s(v).e("prefix-inner"))},[re(de.$slots,"prefix"),de.prefixIcon?(y(),oe(s(Be),{key:0,class:$(s(v).e("icon"))},{default:G(()=>[(y(),oe(ut(de.prefixIcon)))]),_:1},8,["class"])):Z("v-if",!0)],2)],2)):Z("v-if",!0),k("input",ft({id:s(p),ref_key:"input",ref:g,class:s(v).e("inner")},s(d),{minlength:de.minlength,maxlength:de.maxlength,type:de.showPassword?x.value?"text":"password":de.type,disabled:s(m),readonly:de.readonly,autocomplete:de.autocomplete,tabindex:de.tabindex,"aria-label":de.label,placeholder:de.placeholder,style:de.inputStyle,form:de.form,autofocus:de.autofocus,onCompositionstart:te,onCompositionupdate:ve,onCompositionend:be,onInput:Ae,onFocus:Le[0]||(Le[0]=(...Ue)=>s(P)&&s(P)(...Ue)),onBlur:Le[1]||(Le[1]=(...Ue)=>s(z)&&s(z)(...Ue)),onChange:U,onKeydown:Se}),null,16,sz),Z(" suffix slot "),s(_e)?(y(),M("span",{key:1,class:$(s(v).e("suffix"))},[k("span",{class:$(s(v).e("suffix-inner"))},[!s(D)||!s(q)||!s(Y)?(y(),M(Fe,{key:0},[re(de.$slots,"suffix"),de.suffixIcon?(y(),oe(s(Be),{key:0,class:$(s(v).e("icon"))},{default:G(()=>[(y(),oe(ut(de.suffixIcon)))]),_:1},8,["class"])):Z("v-if",!0)],64)):Z("v-if",!0),s(D)?(y(),oe(s(Be),{key:1,class:$([s(v).e("icon"),s(v).e("clear")]),onMousedown:Ge(s(Et),["prevent"]),onClick:He},{default:G(()=>[W(s(fa))]),_:1},8,["class","onMousedown"])):Z("v-if",!0),s(q)?(y(),oe(s(Be),{key:2,class:$([s(v).e("icon"),s(v).e("password")]),onClick:ue},{default:G(()=>[(y(),oe(ut(s(B))))]),_:1},8,["class"])):Z("v-if",!0),s(Y)?(y(),M("span",{key:3,class:$(s(v).e("count"))},[k("span",{class:$(s(v).e("count-inner"))},Me(s(J))+" / "+Me(de.maxlength),3)],2)):Z("v-if",!0),s(K)&&s(F)&&s(j)?(y(),oe(s(Be),{key:4,class:$([s(v).e("icon"),s(v).e("validateIcon"),s(v).is("loading",s(K)==="validating")])},{default:G(()=>[(y(),oe(ut(s(F))))]),_:1},8,["class"])):Z("v-if",!0)],2)],2)):Z("v-if",!0)],2),Z(" append slot "),de.$slots.append?(y(),M("div",{key:1,class:$(s(v).be("group","append"))},[re(de.$slots,"append")],2)):Z("v-if",!0)],64)):(y(),M(Fe,{key:1},[Z(" textarea "),k("textarea",ft({id:s(p),ref_key:"textarea",ref:w,class:s(_).e("inner")},s(d),{minlength:de.minlength,maxlength:de.maxlength,tabindex:de.tabindex,disabled:s(m),readonly:de.readonly,autocomplete:de.autocomplete,style:s(H),"aria-label":de.label,placeholder:de.placeholder,form:de.form,autofocus:de.autofocus,onCompositionstart:te,onCompositionupdate:ve,onCompositionend:be,onInput:Ae,onFocus:Le[2]||(Le[2]=(...Ue)=>s(P)&&s(P)(...Ue)),onBlur:Le[3]||(Le[3]=(...Ue)=>s(z)&&s(z)(...Ue)),onChange:U,onKeydown:Se}),null,16,iz),s(Y)?(y(),M("span",{key:0,style:De(E.value),class:$(s(v).e("count"))},Me(s(J))+" / "+Me(de.maxlength),7)):Z("v-if",!0)],64))],16,lz))}});var dz=xe(cz,[["__file","input.vue"]]);const mn=lt(dz),Wr=4,z6={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},fz=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),P2=Symbol("scrollbarContextKey"),pz=Ee({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),vz="Thumb",hz=A({__name:"thumb",props:pz,setup(e){const t=e,n=Pe(P2),o=me("scrollbar");n||on(vz,"can not inject scrollbar context");const a=R(),r=R(),l=R({}),i=R(!1);let u=!1,d=!1,f=gt?document.onselectstart:null;const c=S(()=>z6[t.vertical?"vertical":"horizontal"]),p=S(()=>fz({size:t.size,move:t.move,bar:c.value})),h=S(()=>a.value[c.value.offset]**2/n.wrapElement[c.value.scrollSize]/t.ratio/r.value[c.value.offset]),m=E=>{var O;if(E.stopPropagation(),E.ctrlKey||[1,2].includes(E.button))return;(O=window.getSelection())==null||O.removeAllRanges(),_(E);const T=E.currentTarget;T&&(l.value[c.value.axis]=T[c.value.offset]-(E[c.value.client]-T.getBoundingClientRect()[c.value.direction]))},v=E=>{if(!r.value||!a.value||!n.wrapElement)return;const O=Math.abs(E.target.getBoundingClientRect()[c.value.direction]-E[c.value.client]),T=r.value[c.value.offset]/2,V=(O-T)*100*h.value/a.value[c.value.offset];n.wrapElement[c.value.scroll]=V*n.wrapElement[c.value.scrollSize]/100},_=E=>{E.stopImmediatePropagation(),u=!0,document.addEventListener("mousemove",g),document.addEventListener("mouseup",w),f=document.onselectstart,document.onselectstart=()=>!1},g=E=>{if(!a.value||!r.value||u===!1)return;const O=l.value[c.value.axis];if(!O)return;const T=(a.value.getBoundingClientRect()[c.value.direction]-E[c.value.client])*-1,V=r.value[c.value.offset]-O,L=(T-V)*100*h.value/a.value[c.value.offset];n.wrapElement[c.value.scroll]=L*n.wrapElement[c.value.scrollSize]/100},w=()=>{u=!1,l.value[c.value.axis]=0,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",w),x(),d&&(i.value=!1)},b=()=>{d=!1,i.value=!!t.size},C=()=>{d=!0,i.value=u};It(()=>{x(),document.removeEventListener("mouseup",w)});const x=()=>{document.onselectstart!==f&&(document.onselectstart=f)};return Vt(At(n,"scrollbarElement"),"mousemove",b),Vt(At(n,"scrollbarElement"),"mouseleave",C),(E,O)=>(y(),oe(nn,{name:s(o).b("fade"),persisted:""},{default:G(()=>[Qe(k("div",{ref_key:"instance",ref:a,class:$([s(o).e("bar"),s(o).is(s(c).key)]),onMousedown:v},[k("div",{ref_key:"thumb",ref:r,class:$(s(o).e("thumb")),style:De(s(p)),onMousedown:m},null,38)],34),[[bt,E.always||i.value]])]),_:1},8,["name"]))}});var D1=xe(hz,[["__file","thumb.vue"]]);const mz=Ee({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),gz=A({__name:"bar",props:mz,setup(e,{expose:t}){const n=e,o=Pe(P2),a=R(0),r=R(0),l=R(""),i=R(""),u=R(1),d=R(1);return t({handleScroll:p=>{if(p){const h=p.offsetHeight-Wr,m=p.offsetWidth-Wr;r.value=p.scrollTop*100/h*u.value,a.value=p.scrollLeft*100/m*d.value}},update:()=>{const p=o==null?void 0:o.wrapElement;if(!p)return;const h=p.offsetHeight-Wr,m=p.offsetWidth-Wr,v=h**2/p.scrollHeight,_=m**2/p.scrollWidth,g=Math.max(v,n.minSize),w=Math.max(_,n.minSize);u.value=v/(h-v)/(g/(h-g)),d.value=_/(m-_)/(w/(m-w)),i.value=g+Wr(y(),M(Fe,null,[W(D1,{move:a.value,ratio:d.value,size:l.value,always:p.always},null,8,["move","ratio","size","always"]),W(D1,{move:r.value,ratio:u.value,size:i.value,vertical:"",always:p.always},null,8,["move","ratio","size","always"])],64))}});var yz=xe(gz,[["__file","bar.vue"]]);const _z=Ee({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:{type:Boolean,default:!1},wrapStyle:{type:X([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},id:String,role:String,ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical"]}}),bz={scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Ye)},wz="ElScrollbar",Cz=A({name:wz}),Sz=A({...Cz,props:_z,emits:bz,setup(e,{expose:t,emit:n}){const o=e,a=me("scrollbar");let r,l;const i=R(),u=R(),d=R(),f=R(),c=S(()=>{const b={};return o.height&&(b.height=Xt(o.height)),o.maxHeight&&(b.maxHeight=Xt(o.maxHeight)),[o.wrapStyle,b]}),p=S(()=>[o.wrapClass,a.e("wrap"),{[a.em("wrap","hidden-default")]:!o.native}]),h=S(()=>[a.e("view"),o.viewClass]),m=()=>{var b;u.value&&((b=f.value)==null||b.handleScroll(u.value),n("scroll",{scrollTop:u.value.scrollTop,scrollLeft:u.value.scrollLeft}))};function v(b,C){ct(b)?u.value.scrollTo(b):Ye(b)&&Ye(C)&&u.value.scrollTo(b,C)}const _=b=>{Ye(b)&&(u.value.scrollTop=b)},g=b=>{Ye(b)&&(u.value.scrollLeft=b)},w=()=>{var b;(b=f.value)==null||b.update()};return pe(()=>o.noresize,b=>{b?(r==null||r(),l==null||l()):({stop:r}=Kt(d,w),l=Vt("resize",w))},{immediate:!0}),pe(()=>[o.maxHeight,o.height],()=>{o.native||We(()=>{var b;w(),u.value&&((b=f.value)==null||b.handleScroll(u.value))})}),pt(P2,wt({scrollbarElement:i,wrapElement:u})),et(()=>{o.native||We(()=>{w()})}),ua(()=>w()),t({wrapRef:u,update:w,scrollTo:v,setScrollTop:_,setScrollLeft:g,handleScroll:m}),(b,C)=>(y(),M("div",{ref_key:"scrollbarRef",ref:i,class:$(s(a).b())},[k("div",{ref_key:"wrapRef",ref:u,class:$(s(p)),style:De(s(c)),onScroll:m},[(y(),oe(ut(b.tag),{id:b.id,ref_key:"resizeRef",ref:d,class:$(s(h)),style:De(b.viewStyle),role:b.role,"aria-label":b.ariaLabel,"aria-orientation":b.ariaOrientation},{default:G(()=>[re(b.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],38),b.native?Z("v-if",!0):(y(),oe(yz,{key:0,ref_key:"barRef",ref:f,always:b.always,"min-size":b.minSize},null,8,["always","min-size"]))],2))}});var kz=xe(Sz,[["__file","scrollbar.vue"]]);const ha=lt(kz),L2=Symbol("popper"),H6=Symbol("popperContent"),Ez=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],D6=Ee({role:{type:String,values:Ez,default:"tooltip"}}),xz=A({name:"ElPopper",inheritAttrs:!1}),Mz=A({...xz,props:D6,setup(e,{expose:t}){const n=e,o=R(),a=R(),r=R(),l=R(),i=S(()=>n.role),u={triggerRef:o,popperInstanceRef:a,contentRef:r,referenceRef:l,role:i};return t(u),pt(L2,u),(d,f)=>re(d.$slots,"default")}});var $z=xe(Mz,[["__file","popper.vue"]]);const F6=Ee({arrowOffset:{type:Number,default:5}}),Tz=A({name:"ElPopperArrow",inheritAttrs:!1}),Az=A({...Tz,props:F6,setup(e,{expose:t}){const n=e,o=me("popper"),{arrowOffset:a,arrowRef:r,arrowStyle:l}=Pe(H6,void 0);return pe(()=>n.arrowOffset,i=>{a.value=i}),It(()=>{r.value=void 0}),t({arrowRef:r}),(i,u)=>(y(),M("span",{ref_key:"arrowRef",ref:r,class:$(s(o).e("arrow")),style:De(s(l)),"data-popper-arrow":""},null,6))}});var Oz=xe(Az,[["__file","arrow.vue"]]);const Nz="ElOnlyChild",K6=A({name:Nz,setup(e,{slots:t,attrs:n}){var o;const a=Pe(y6),r=ZL((o=a==null?void 0:a.setForwardRef)!=null?o:Et);return()=>{var l;const i=(l=t.default)==null?void 0:l.call(t,n);if(!i||i.length>1)return null;const u=W6(i);return u?Qe(oa(u,n),[[r]]):null}}});function W6(e){if(!e)return null;const t=e;for(const n of t){if(ct(n))switch(n.type){case $n:continue;case Il:case"svg":return F1(n);case Fe:return W6(n.children);default:return n}return F1(n)}return null}function F1(e){const t=me("only-child");return W("span",{class:t.e("content")},[e])}const j6=Ee({virtualRef:{type:X(Object)},virtualTriggering:Boolean,onMouseenter:{type:X(Function)},onMouseleave:{type:X(Function)},onClick:{type:X(Function)},onKeydown:{type:X(Function)},onFocus:{type:X(Function)},onBlur:{type:X(Function)},onContextmenu:{type:X(Function)},id:String,open:Boolean}),Iz=A({name:"ElPopperTrigger",inheritAttrs:!1}),Rz=A({...Iz,props:j6,setup(e,{expose:t}){const n=e,{role:o,triggerRef:a}=Pe(L2,void 0);JL(a);const r=S(()=>i.value?n.id:void 0),l=S(()=>{if(o&&o.value==="tooltip")return n.open&&n.id?n.id:void 0}),i=S(()=>{if(o&&o.value!=="tooltip")return o.value}),u=S(()=>i.value?`${n.open}`:void 0);let d;return et(()=>{pe(()=>n.virtualRef,f=>{f&&(a.value=Ln(f))},{immediate:!0}),pe(a,(f,c)=>{d==null||d(),d=void 0,io(f)&&(["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"].forEach(p=>{var h;const m=n[p];m&&(f.addEventListener(p.slice(2).toLowerCase(),m),(h=c==null?void 0:c.removeEventListener)==null||h.call(c,p.slice(2).toLowerCase(),m))}),d=pe([r,l,i,u],p=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((h,m)=>{tn(p[m])?f.removeAttribute(h):f.setAttribute(h,p[m])})},{immediate:!0})),io(c)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(p=>c.removeAttribute(p))},{immediate:!0})}),It(()=>{d==null||d(),d=void 0}),t({triggerRef:a}),(f,c)=>f.virtualTriggering?Z("v-if",!0):(y(),oe(s(K6),ft({key:0},f.$attrs,{"aria-controls":s(r),"aria-describedby":s(l),"aria-expanded":s(u),"aria-haspopup":s(i)}),{default:G(()=>[re(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var Pz=xe(Rz,[["__file","trigger.vue"]]);const yd="focus-trap.focus-after-trapped",_d="focus-trap.focus-after-released",Lz="focus-trap.focusout-prevented",K1={cancelable:!0,bubbles:!1},Vz={cancelable:!0,bubbles:!1},W1="focusAfterTrapped",j1="focusAfterReleased",V2=Symbol("elFocusTrap"),B2=R(),Rc=R(0),z2=R(0);let Ni=0;const q6=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const a=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||a?NodeFilter.FILTER_SKIP:o.tabIndex>=0||o===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},q1=(e,t)=>{for(const n of e)if(!Bz(n,t))return n},Bz=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},zz=e=>{const t=q6(e),n=q1(t,e),o=q1(t.reverse(),e);return[n,o]},Hz=e=>e instanceof HTMLInputElement&&"select"in e,Sa=(e,t)=>{if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),z2.value=window.performance.now(),e!==n&&Hz(e)&&t&&e.select()}};function U1(e,t){const n=[...e],o=e.indexOf(t);return o!==-1&&n.splice(o,1),n}const Dz=()=>{let e=[];return{push:o=>{const a=e[0];a&&o!==a&&a.pause(),e=U1(e,o),e.unshift(o)},remove:o=>{var a,r;e=U1(e,o),(r=(a=e[0])==null?void 0:a.resume)==null||r.call(a)}}},Fz=(e,t=!1)=>{const n=document.activeElement;for(const o of e)if(Sa(o,t),document.activeElement!==n)return},Y1=Dz(),Kz=()=>Rc.value>z2.value,Ii=()=>{B2.value="pointer",Rc.value=window.performance.now()},G1=()=>{B2.value="keyboard",Rc.value=window.performance.now()},Wz=()=>(et(()=>{Ni===0&&(document.addEventListener("mousedown",Ii),document.addEventListener("touchstart",Ii),document.addEventListener("keydown",G1)),Ni++}),It(()=>{Ni--,Ni<=0&&(document.removeEventListener("mousedown",Ii),document.removeEventListener("touchstart",Ii),document.removeEventListener("keydown",G1))}),{focusReason:B2,lastUserFocusTimestamp:Rc,lastAutomatedFocusTimestamp:z2}),Ri=e=>new CustomEvent(Lz,{...Vz,detail:e}),jz=A({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[W1,j1,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=R();let o,a;const{focusReason:r}=Wz();qL(m=>{e.trapped&&!l.paused&&t("release-requested",m)});const l={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},i=m=>{if(!e.loop&&!e.trapped||l.paused)return;const{key:v,altKey:_,ctrlKey:g,metaKey:w,currentTarget:b,shiftKey:C}=m,{loop:x}=e,E=v===Ke.tab&&!_&&!g&&!w,O=document.activeElement;if(E&&O){const T=b,[V,L]=zz(T);if(V&&L){if(!C&&O===L){const z=Ri({focusReason:r.value});t("focusout-prevented",z),z.defaultPrevented||(m.preventDefault(),x&&Sa(V,!0))}else if(C&&[V,T].includes(O)){const z=Ri({focusReason:r.value});t("focusout-prevented",z),z.defaultPrevented||(m.preventDefault(),x&&Sa(L,!0))}}else if(O===T){const z=Ri({focusReason:r.value});t("focusout-prevented",z),z.defaultPrevented||m.preventDefault()}}};pt(V2,{focusTrapRef:n,onKeydown:i}),pe(()=>e.focusTrapEl,m=>{m&&(n.value=m)},{immediate:!0}),pe([n],([m],[v])=>{m&&(m.addEventListener("keydown",i),m.addEventListener("focusin",f),m.addEventListener("focusout",c)),v&&(v.removeEventListener("keydown",i),v.removeEventListener("focusin",f),v.removeEventListener("focusout",c))});const u=m=>{t(W1,m)},d=m=>t(j1,m),f=m=>{const v=s(n);if(!v)return;const _=m.target,g=m.relatedTarget,w=_&&v.contains(_);e.trapped||g&&v.contains(g)||(o=g),w&&t("focusin",m),!l.paused&&e.trapped&&(w?a=_:Sa(a,!0))},c=m=>{const v=s(n);if(!(l.paused||!v))if(e.trapped){const _=m.relatedTarget;!tn(_)&&!v.contains(_)&&setTimeout(()=>{if(!l.paused&&e.trapped){const g=Ri({focusReason:r.value});t("focusout-prevented",g),g.defaultPrevented||Sa(a,!0)}},0)}else{const _=m.target;_&&v.contains(_)||t("focusout",m)}};async function p(){await We();const m=s(n);if(m){Y1.push(l);const v=m.contains(document.activeElement)?o:document.activeElement;if(o=v,!m.contains(v)){const g=new Event(yd,K1);m.addEventListener(yd,u),m.dispatchEvent(g),g.defaultPrevented||We(()=>{let w=e.focusStartEl;Ze(w)||(Sa(w),document.activeElement!==w&&(w="first")),w==="first"&&Fz(q6(m),!0),(document.activeElement===v||w==="container")&&Sa(m)})}}}function h(){const m=s(n);if(m){m.removeEventListener(yd,u);const v=new CustomEvent(_d,{...K1,detail:{focusReason:r.value}});m.addEventListener(_d,d),m.dispatchEvent(v),!v.defaultPrevented&&(r.value=="keyboard"||!Kz()||m.contains(document.activeElement))&&Sa(o??document.body),m.removeEventListener(_d,d),Y1.remove(l)}}return et(()=>{e.trapped&&p(),pe(()=>e.trapped,m=>{m?p():h()})}),It(()=>{e.trapped&&h()}),{onKeydown:i}}});function qz(e,t,n,o,a,r){return re(e.$slots,"default",{handleKeydown:e.onKeydown})}var ii=xe(jz,[["render",qz],["__file","focus-trap.vue"]]);const Uz=["fixed","absolute"],Yz=Ee({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:X(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Hr,default:"bottom"},popperOptions:{type:X(Object),default:()=>({})},strategy:{type:String,values:Uz,default:"absolute"}}),U6=Ee({...Yz,id:String,style:{type:X([String,Array,Object])},className:{type:X([String,Array,Object])},effect:{type:String,default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:{type:Boolean,default:!1},trapping:{type:Boolean,default:!1},popperClass:{type:X([String,Array,Object])},popperStyle:{type:X([String,Array,Object])},referenceEl:{type:X(Object)},triggerTargetEl:{type:X(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},ariaLabel:{type:String,default:void 0},virtualTriggering:Boolean,zIndex:Number}),Gz={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},Xz=(e,t=[])=>{const{placement:n,strategy:o,popperOptions:a}=e,r={placement:n,strategy:o,...a,modifiers:[...Zz(e),...t]};return Qz(r,a==null?void 0:a.modifiers),r},Jz=e=>{if(gt)return Ln(e)};function Zz(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:o}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:o}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function Qz(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const eH=0,tH=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:o,role:a}=Pe(L2,void 0),r=R(),l=R(),i=S(()=>({name:"eventListeners",enabled:!!e.visible})),u=S(()=>{var g;const w=s(r),b=(g=s(l))!=null?g:eH;return{name:"arrow",enabled:!xg(w),options:{element:w,padding:b}}}),d=S(()=>({onFirstUpdate:()=>{m()},...Xz(e,[s(u),s(i)])})),f=S(()=>Jz(e.referenceEl)||s(o)),{attributes:c,state:p,styles:h,update:m,forceUpdate:v,instanceRef:_}=FL(f,n,d);return pe(_,g=>t.value=g),et(()=>{pe(()=>{var g;return(g=s(f))==null?void 0:g.getBoundingClientRect()},()=>{m()})}),{attributes:c,arrowRef:r,contentRef:n,instanceRef:_,state:p,styles:h,role:a,forceUpdate:v,update:m}},nH=(e,{attributes:t,styles:n,role:o})=>{const{nextZIndex:a}=zl(),r=me("popper"),l=S(()=>s(t).popper),i=R(Ye(e.zIndex)?e.zIndex:a()),u=S(()=>[r.b(),r.is("pure",e.pure),r.is(e.effect),e.popperClass]),d=S(()=>[{zIndex:s(i)},s(n).popper,e.popperStyle||{}]),f=S(()=>o.value==="dialog"?"false":void 0),c=S(()=>s(n).arrow||{});return{ariaModal:f,arrowStyle:c,contentAttrs:l,contentClass:u,contentStyle:d,contentZIndex:i,updateZIndex:()=>{i.value=Ye(e.zIndex)?e.zIndex:a()}}},oH=(e,t)=>{const n=R(!1),o=R();return{focusStartRef:o,trapped:n,onFocusAfterReleased:d=>{var f;((f=d.detail)==null?void 0:f.focusReason)!=="pointer"&&(o.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:d=>{e.visible&&!n.value&&(d.target&&(o.value=d.target),n.value=!0)},onFocusoutPrevented:d=>{e.trapping||(d.detail.focusReason==="pointer"&&d.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},aH=A({name:"ElPopperContent"}),rH=A({...aH,props:U6,emits:Gz,setup(e,{expose:t,emit:n}){const o=e,{focusStartRef:a,trapped:r,onFocusAfterReleased:l,onFocusAfterTrapped:i,onFocusInTrap:u,onFocusoutPrevented:d,onReleaseRequested:f}=oH(o,n),{attributes:c,arrowRef:p,contentRef:h,styles:m,instanceRef:v,role:_,update:g}=tH(o),{ariaModal:w,arrowStyle:b,contentAttrs:C,contentClass:x,contentStyle:E,updateZIndex:O}=nH(o,{styles:m,attributes:c,role:_}),T=Pe(Vo,void 0),V=R();pt(H6,{arrowStyle:b,arrowRef:p,arrowOffset:V}),T&&(T.addInputId||T.removeInputId)&&pt(Vo,{...T,addInputId:Et,removeInputId:Et});let L;const P=(j=!0)=>{g(),j&&O()},z=()=>{P(!1),o.visible&&o.focusOnShow?r.value=!0:o.visible===!1&&(r.value=!1)};return et(()=>{pe(()=>o.triggerTargetEl,(j,K)=>{L==null||L(),L=void 0;const F=s(j||h.value),B=s(K||h.value);io(F)&&(L=pe([_,()=>o.ariaLabel,w,()=>o.id],I=>{["role","aria-label","aria-modal","id"].forEach((H,N)=>{tn(I[N])?F.removeAttribute(H):F.setAttribute(H,I[N])})},{immediate:!0})),B!==F&&io(B)&&["role","aria-label","aria-modal","id"].forEach(I=>{B.removeAttribute(I)})},{immediate:!0}),pe(()=>o.visible,z,{immediate:!0})}),It(()=>{L==null||L(),L=void 0}),t({popperContentRef:h,popperInstanceRef:v,updatePopper:P,contentStyle:E}),(j,K)=>(y(),M("div",ft({ref_key:"contentRef",ref:h},s(C),{style:s(E),class:s(x),tabindex:"-1",onMouseenter:K[0]||(K[0]=F=>j.$emit("mouseenter",F)),onMouseleave:K[1]||(K[1]=F=>j.$emit("mouseleave",F))}),[W(s(ii),{trapped:s(r),"trap-on-focus-in":!0,"focus-trap-el":s(h),"focus-start-el":s(a),onFocusAfterTrapped:s(i),onFocusAfterReleased:s(l),onFocusin:s(u),onFocusoutPrevented:s(d),onReleaseRequested:s(f)},{default:G(()=>[re(j.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16))}});var lH=xe(rH,[["__file","content.vue"]]);const Y6=lt($z),Pc=Symbol("elTooltip"),pn=Ee({...GL,...U6,appendTo:{type:X([String,Object])},content:{type:String,default:""},rawContent:{type:Boolean,default:!1},persistent:Boolean,ariaLabel:String,visible:{type:X(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean}),Ps=Ee({...j6,disabled:Boolean,trigger:{type:X([String,Array]),default:"hover"},triggerKeys:{type:X(Array),default:()=>[Ke.enter,Ke.space]}}),{useModelToggleProps:sH,useModelToggleEmits:iH,useModelToggle:uH}=a6("visible"),cH=Ee({...D6,...sH,...pn,...Ps,...F6,showArrow:{type:Boolean,default:!0}}),dH=[...iH,"before-show","before-hide","show","hide","open","close"],fH=(e,t)=>Ie(e)?e.includes(t):e===t,jr=(e,t,n)=>o=>{fH(s(e),t)&&n(o)},pH=A({name:"ElTooltipTrigger"}),vH=A({...pH,props:Ps,setup(e,{expose:t}){const n=e,o=me("tooltip"),{controlled:a,id:r,open:l,onOpen:i,onClose:u,onToggle:d}=Pe(Pc,void 0),f=R(null),c=()=>{if(s(a)||n.disabled)return!0},p=At(n,"trigger"),h=jt(c,jr(p,"hover",i)),m=jt(c,jr(p,"hover",u)),v=jt(c,jr(p,"click",C=>{C.button===0&&d(C)})),_=jt(c,jr(p,"focus",i)),g=jt(c,jr(p,"focus",u)),w=jt(c,jr(p,"contextmenu",C=>{C.preventDefault(),d(C)})),b=jt(c,C=>{const{code:x}=C;n.triggerKeys.includes(x)&&(C.preventDefault(),d(C))});return t({triggerRef:f}),(C,x)=>(y(),oe(s(Pz),{id:s(r),"virtual-ref":C.virtualRef,open:s(l),"virtual-triggering":C.virtualTriggering,class:$(s(o).e("trigger")),onBlur:s(g),onClick:s(v),onContextmenu:s(w),onFocus:s(_),onMouseenter:s(h),onMouseleave:s(m),onKeydown:s(b)},{default:G(()=>[re(C.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var hH=xe(vH,[["__file","trigger.vue"]]);const mH=A({name:"ElTooltipContent",inheritAttrs:!1}),gH=A({...mH,props:pn,setup(e,{expose:t}){const n=e,{selector:o}=g6(),a=me("tooltip"),r=R(null),l=R(!1),{controlled:i,id:u,open:d,trigger:f,onClose:c,onOpen:p,onShow:h,onHide:m,onBeforeShow:v,onBeforeHide:_}=Pe(Pc,void 0),g=S(()=>n.transition||`${a.namespace.value}-fade-in-linear`),w=S(()=>n.persistent);It(()=>{l.value=!0});const b=S(()=>s(w)?!0:s(d)),C=S(()=>n.disabled?!1:s(d)),x=S(()=>n.appendTo||o.value),E=S(()=>{var I;return(I=n.style)!=null?I:{}}),O=S(()=>!s(d)),T=()=>{m()},V=()=>{if(s(i))return!0},L=jt(V,()=>{n.enterable&&s(f)==="hover"&&p()}),P=jt(V,()=>{s(f)==="hover"&&c()}),z=()=>{var I,H;(H=(I=r.value)==null?void 0:I.updatePopper)==null||H.call(I),v==null||v()},j=()=>{_==null||_()},K=()=>{h(),B=H0(S(()=>{var I;return(I=r.value)==null?void 0:I.popperContentRef}),()=>{if(s(i))return;s(f)!=="hover"&&c()})},F=()=>{n.virtualTriggering||c()};let B;return pe(()=>s(d),I=>{I||B==null||B()},{flush:"post"}),pe(()=>n.content,()=>{var I,H;(H=(I=r.value)==null?void 0:I.updatePopper)==null||H.call(I)}),t({contentRef:r}),(I,H)=>(y(),oe(Nl,{disabled:!I.teleported,to:s(x)},[W(nn,{name:s(g),onAfterLeave:T,onBeforeEnter:z,onAfterEnter:K,onBeforeLeave:j},{default:G(()=>[s(b)?Qe((y(),oe(s(lH),ft({key:0,id:s(u),ref_key:"contentRef",ref:r},I.$attrs,{"aria-label":I.ariaLabel,"aria-hidden":s(O),"boundaries-padding":I.boundariesPadding,"fallback-placements":I.fallbackPlacements,"gpu-acceleration":I.gpuAcceleration,offset:I.offset,placement:I.placement,"popper-options":I.popperOptions,strategy:I.strategy,effect:I.effect,enterable:I.enterable,pure:I.pure,"popper-class":I.popperClass,"popper-style":[I.popperStyle,s(E)],"reference-el":I.referenceEl,"trigger-target-el":I.triggerTargetEl,visible:s(C),"z-index":I.zIndex,onMouseenter:s(L),onMouseleave:s(P),onBlur:F,onClose:s(c)}),{default:G(()=>[l.value?Z("v-if",!0):re(I.$slots,"default",{key:0})]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[bt,s(C)]]):Z("v-if",!0)]),_:3},8,["name"])],8,["disabled","to"]))}});var yH=xe(gH,[["__file","content.vue"]]);const _H=["innerHTML"],bH={key:1},wH=A({name:"ElTooltip"}),CH=A({...wH,props:cH,emits:dH,setup(e,{expose:t,emit:n}){const o=e;YL();const a=kn(),r=R(),l=R(),i=()=>{var g;const w=s(r);w&&((g=w.popperInstanceRef)==null||g.update())},u=R(!1),d=R(),{show:f,hide:c,hasUpdateHandler:p}=uH({indicator:u,toggleReason:d}),{onOpen:h,onClose:m}=XL({showAfter:At(o,"showAfter"),hideAfter:At(o,"hideAfter"),autoClose:At(o,"autoClose"),open:f,close:c}),v=S(()=>Qt(o.visible)&&!p.value);pt(Pc,{controlled:v,id:a,open:Ol(u),trigger:At(o,"trigger"),onOpen:g=>{h(g)},onClose:g=>{m(g)},onToggle:g=>{s(u)?m(g):h(g)},onShow:()=>{n("show",d.value)},onHide:()=>{n("hide",d.value)},onBeforeShow:()=>{n("before-show",d.value)},onBeforeHide:()=>{n("before-hide",d.value)},updatePopper:i}),pe(()=>o.disabled,g=>{g&&u.value&&(u.value=!1)});const _=g=>{var w,b;const C=(b=(w=l.value)==null?void 0:w.contentRef)==null?void 0:b.popperContentRef,x=(g==null?void 0:g.relatedTarget)||document.activeElement;return C&&C.contains(x)};return e4(()=>u.value&&c()),t({popperRef:r,contentRef:l,isFocusInsideContent:_,updatePopper:i,onOpen:h,onClose:m,hide:c}),(g,w)=>(y(),oe(s(Y6),{ref_key:"popperRef",ref:r,role:g.role},{default:G(()=>[W(hH,{disabled:g.disabled,trigger:g.trigger,"trigger-keys":g.triggerKeys,"virtual-ref":g.virtualRef,"virtual-triggering":g.virtualTriggering},{default:G(()=>[g.$slots.default?re(g.$slots,"default",{key:0}):Z("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),W(yH,{ref_key:"contentRef",ref:l,"aria-label":g.ariaLabel,"boundaries-padding":g.boundariesPadding,content:g.content,disabled:g.disabled,effect:g.effect,enterable:g.enterable,"fallback-placements":g.fallbackPlacements,"hide-after":g.hideAfter,"gpu-acceleration":g.gpuAcceleration,offset:g.offset,persistent:g.persistent,"popper-class":g.popperClass,"popper-style":g.popperStyle,placement:g.placement,"popper-options":g.popperOptions,pure:g.pure,"raw-content":g.rawContent,"reference-el":g.referenceEl,"trigger-target-el":g.triggerTargetEl,"show-after":g.showAfter,strategy:g.strategy,teleported:g.teleported,transition:g.transition,"virtual-triggering":g.virtualTriggering,"z-index":g.zIndex,"append-to":g.appendTo},{default:G(()=>[re(g.$slots,"content",{},()=>[g.rawContent?(y(),M("span",{key:0,innerHTML:g.content},null,8,_H)):(y(),M("span",bH,Me(g.content),1))]),g.showArrow?(y(),oe(s(Oz),{key:0,"arrow-offset":g.arrowOffset},null,8,["arrow-offset"])):Z("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var SH=xe(CH,[["__file","tooltip.vue"]]);const En=lt(SH),kH=Ee({valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:X(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:X([Function,Array]),default:Et},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:{type:Boolean,default:!1},hideLoading:{type:Boolean,default:!1},label:{type:String},teleported:pn.teleported,highlightFirstItem:{type:Boolean,default:!1},fitInputWidth:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},name:String}),EH={[it]:e=>Ze(e),[Tn]:e=>Ze(e),[Bt]:e=>Ze(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>ct(e)},xH=["aria-expanded","aria-owns"],MH={key:0},$H=["id","aria-selected","onClick"],G6="ElAutocomplete",TH=A({name:G6,inheritAttrs:!1}),AH=A({...TH,props:kH,emits:EH,setup(e,{expose:t,emit:n}){const o=e,a=v2(),r=Pr(),l=Dn(),i=me("autocomplete"),u=R(),d=R(),f=R(),c=R();let p=!1,h=!1;const m=R([]),v=R(-1),_=R(""),g=R(!1),w=R(!1),b=R(!1),C=kn(),x=S(()=>r.style),E=S(()=>(m.value.length>0||b.value)&&g.value),O=S(()=>!o.hideLoading&&b.value),T=S(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),V=()=>{E.value&&(_.value=`${u.value.$el.offsetWidth}px`)},L=()=>{v.value=-1},z=Hn(async Q=>{if(w.value)return;const le=ae=>{b.value=!1,!w.value&&(Ie(ae)?(m.value=ae,v.value=o.highlightFirstItem?0:-1):on(G6,"autocomplete suggestions must be an array"))};if(b.value=!0,Ie(o.fetchSuggestions))le(o.fetchSuggestions);else{const ae=await o.fetchSuggestions(Q,le);Ie(ae)&&le(ae)}},o.debounce),j=Q=>{const le=!!Q;if(n(Tn,Q),n(it,Q),w.value=!1,g.value||(g.value=le),!o.triggerOnFocus&&!Q){w.value=!0,m.value=[];return}z(Q)},K=Q=>{var le;l.value||(((le=Q.target)==null?void 0:le.tagName)!=="INPUT"||T.value.includes(document.activeElement))&&(g.value=!0)},F=Q=>{n(Bt,Q)},B=Q=>{h?h=!1:(g.value=!0,n("focus",Q),o.triggerOnFocus&&!p&&z(String(o.modelValue)))},I=Q=>{setTimeout(()=>{var le;if((le=f.value)!=null&&le.isFocusInsideContent()){h=!0;return}g.value&&q(),n("blur",Q)})},H=()=>{g.value=!1,n(it,""),n("clear")},N=async()=>{E.value&&v.value>=0&&v.value{E.value&&(Q.preventDefault(),Q.stopPropagation(),q())},q=()=>{g.value=!1},Y=()=>{var Q;(Q=u.value)==null||Q.focus()},J=()=>{var Q;(Q=u.value)==null||Q.blur()},se=async Q=>{n(Tn,Q[o.valueKey]),n(it,Q[o.valueKey]),n("select",Q),m.value=[],v.value=-1},_e=Q=>{if(!E.value||b.value)return;if(Q<0){v.value=-1;return}Q>=m.value.length&&(Q=m.value.length-1);const le=d.value.querySelector(`.${i.be("suggestion","wrap")}`),Te=le.querySelectorAll(`.${i.be("suggestion","list")} li`)[Q],ce=le.scrollTop,{offsetTop:ge,scrollHeight:Ae}=Te;ge+Ae>ce+le.clientHeight&&(le.scrollTop+=Ae),ge{E.value&&q()}),et(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${C.value}-item-${v.value}`),p=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:v,activated:g,loading:b,inputRef:u,popperRef:f,suggestions:m,handleSelect:se,handleKeyEnter:N,focus:Y,blur:J,close:q,highlight:_e}),(Q,le)=>(y(),oe(s(En),{ref_key:"popperRef",ref:f,visible:s(E),placement:Q.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[s(i).e("popper"),Q.popperClass],teleported:Q.teleported,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${s(i).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:V,onHide:L},{content:G(()=>[k("div",{ref_key:"regionRef",ref:d,class:$([s(i).b("suggestion"),s(i).is("loading",s(O))]),style:De({[Q.fitInputWidth?"width":"minWidth"]:_.value,outline:"none"}),role:"region"},[W(s(ha),{id:s(C),tag:"ul","wrap-class":s(i).be("suggestion","wrap"),"view-class":s(i).be("suggestion","list"),role:"listbox"},{default:G(()=>[s(O)?(y(),M("li",MH,[re(Q.$slots,"loading",{},()=>[W(s(Be),{class:$(s(i).is("loading"))},{default:G(()=>[W(s(pa))]),_:1},8,["class"])])])):(y(!0),M(Fe,{key:1},mt(m.value,(ae,Te)=>(y(),M("li",{id:`${s(C)}-item-${Te}`,key:Te,class:$({highlighted:v.value===Te}),role:"option","aria-selected":v.value===Te,onClick:ce=>se(ae)},[re(Q.$slots,"default",{item:ae},()=>[vt(Me(ae[Q.valueKey]),1)])],10,$H))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:G(()=>[k("div",{ref_key:"listboxRef",ref:c,class:$([s(i).b(),Q.$attrs.class]),style:De(s(x)),role:"combobox","aria-haspopup":"listbox","aria-expanded":s(E),"aria-owns":s(C)},[W(s(mn),ft({ref_key:"inputRef",ref:u},s(a),{clearable:Q.clearable,disabled:s(l),name:Q.name,"model-value":Q.modelValue,onInput:j,onChange:F,onFocus:B,onBlur:I,onClear:H,onKeydown:[le[0]||(le[0]=Mt(Ge(ae=>_e(v.value-1),["prevent"]),["up"])),le[1]||(le[1]=Mt(Ge(ae=>_e(v.value+1),["prevent"]),["down"])),Mt(N,["enter"]),Mt(q,["tab"]),Mt(D,["esc"])],onMousedown:K}),na({_:2},[Q.$slots.prepend?{name:"prepend",fn:G(()=>[re(Q.$slots,"prepend")])}:void 0,Q.$slots.append?{name:"append",fn:G(()=>[re(Q.$slots,"append")])}:void 0,Q.$slots.prefix?{name:"prefix",fn:G(()=>[re(Q.$slots,"prefix")])}:void 0,Q.$slots.suffix?{name:"suffix",fn:G(()=>[re(Q.$slots,"suffix")])}:void 0]),1040,["clearable","disabled","name","model-value","onKeydown"])],14,xH)]),_:3},8,["visible","placement","popper-class","teleported","transition"]))}});var OH=xe(AH,[["__file","autocomplete.vue"]]);const NH=lt(OH),IH=Ee({size:{type:[Number,String],values:zo,default:"",validator:e=>Ye(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:$t},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:X(String),default:"cover"}}),RH={error:e=>e instanceof Event},PH=["src","alt","srcset"],LH=A({name:"ElAvatar"}),VH=A({...LH,props:IH,emits:RH,setup(e,{emit:t}){const n=e,o=me("avatar"),a=R(!1),r=S(()=>{const{size:d,icon:f,shape:c}=n,p=[o.b()];return Ze(d)&&p.push(o.m(d)),f&&p.push(o.m("icon")),c&&p.push(o.m(c)),p}),l=S(()=>{const{size:d}=n;return Ye(d)?o.cssVarBlock({size:Xt(d)||""}):void 0}),i=S(()=>({objectFit:n.fit}));pe(()=>n.src,()=>a.value=!1);function u(d){a.value=!0,t("error",d)}return(d,f)=>(y(),M("span",{class:$(s(r)),style:De(s(l))},[(d.src||d.srcSet)&&!a.value?(y(),M("img",{key:0,src:d.src,alt:d.alt,srcset:d.srcSet,style:De(s(i)),onError:u},null,44,PH)):d.icon?(y(),oe(s(Be),{key:1},{default:G(()=>[(y(),oe(ut(d.icon)))]),_:1})):re(d.$slots,"default",{key:2})],6))}});var BH=xe(VH,[["__file","avatar.vue"]]);const zH=lt(BH),HH={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},DH={click:e=>e instanceof MouseEvent},FH=(e,t,n)=>{const o=Rt(),a=Rt(),r=R(!1),l=()=>{o.value&&(r.value=o.value.scrollTop>=e.visibilityHeight)},i=d=>{var f;(f=o.value)==null||f.scrollTo({top:0,behavior:"smooth"}),t("click",d)},u=V4(l,300,!0);return Vt(a,"scroll",u),et(()=>{var d;a.value=document,o.value=document.documentElement,e.target&&(o.value=(d=document.querySelector(e.target))!=null?d:void 0,o.value||on(n,`target does not exist: ${e.target}`),a.value=o.value),l()}),{visible:r,handleClick:i}},X6="ElBacktop",KH=A({name:X6}),WH=A({...KH,props:HH,emits:DH,setup(e,{emit:t}){const n=e,o=me("backtop"),{handleClick:a,visible:r}=FH(n,t,X6),l=S(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(i,u)=>(y(),oe(nn,{name:`${s(o).namespace.value}-fade-in`},{default:G(()=>[s(r)?(y(),M("div",{key:0,style:De(s(l)),class:$(s(o).b()),onClick:u[0]||(u[0]=Ge((...d)=>s(a)&&s(a)(...d),["stop"]))},[re(i.$slots,"default",{},()=>[W(s(Be),{class:$(s(o).e("icon"))},{default:G(()=>[W(s(Ig))]),_:1},8,["class"])])],6)):Z("v-if",!0)]),_:3},8,["name"]))}});var jH=xe(WH,[["__file","backtop.vue"]]);const qH=lt(jH),UH=Ee({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String}),YH=["textContent"],GH=A({name:"ElBadge"}),XH=A({...GH,props:UH,setup(e,{expose:t}){const n=e,o=me("badge"),a=S(()=>n.isDot?"":Ye(n.value)&&Ye(n.max)?n.max(y(),M("div",{class:$(s(o).b())},[re(r.$slots,"default"),W(nn,{name:`${s(o).namespace.value}-zoom-in-center`,persisted:""},{default:G(()=>[Qe(k("sup",{class:$([s(o).e("content"),s(o).em("content",r.type),s(o).is("fixed",!!r.$slots.default),s(o).is("dot",r.isDot)]),style:De({backgroundColor:r.color}),textContent:Me(s(a))},null,14,YH),[[bt,!r.hidden&&(s(a)||r.isDot)]])]),_:1},8,["name"])],2))}});var JH=xe(XH,[["__file","badge.vue"]]);const J6=lt(JH),Z6=Symbol("breadcrumbKey"),ZH=Ee({separator:{type:String,default:"/"},separatorIcon:{type:$t}}),QH=["aria-label"],eD=A({name:"ElBreadcrumb"}),tD=A({...eD,props:ZH,setup(e){const t=e,{t:n}=_t(),o=me("breadcrumb"),a=R();return pt(Z6,t),et(()=>{const r=a.value.querySelectorAll(`.${o.e("item")}`);r.length&&r[r.length-1].setAttribute("aria-current","page")}),(r,l)=>(y(),M("div",{ref_key:"breadcrumb",ref:a,class:$(s(o).b()),"aria-label":s(n)("el.breadcrumb.label"),role:"navigation"},[re(r.$slots,"default")],10,QH))}});var nD=xe(tD,[["__file","breadcrumb.vue"]]);const oD=Ee({to:{type:X([String,Object]),default:""},replace:{type:Boolean,default:!1}}),aD=A({name:"ElBreadcrumbItem"}),rD=A({...aD,props:oD,setup(e){const t=e,n=rt(),o=Pe(Z6,void 0),a=me("breadcrumb"),r=n.appContext.config.globalProperties.$router,l=R(),i=()=>{!t.to||!r||(t.replace?r.replace(t.to):r.push(t.to))};return(u,d)=>{var f,c;return y(),M("span",{class:$(s(a).e("item"))},[k("span",{ref_key:"link",ref:l,class:$([s(a).e("inner"),s(a).is("link",!!u.to)]),role:"link",onClick:i},[re(u.$slots,"default")],2),(f=s(o))!=null&&f.separatorIcon?(y(),oe(s(Be),{key:0,class:$(s(a).e("separator"))},{default:G(()=>[(y(),oe(ut(s(o).separatorIcon)))]),_:1},8,["class"])):(y(),M("span",{key:1,class:$(s(a).e("separator")),role:"presentation"},Me((c=s(o))==null?void 0:c.separator),3))],2)}}});var Q6=xe(rD,[["__file","breadcrumb-item.vue"]]);const lD=lt(nD,{BreadcrumbItem:Q6}),sD=Dt(Q6),e3=Symbol("buttonGroupContextKey"),iD=(e,t)=>{gr({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},S(()=>e.type==="text"));const n=Pe(e3,void 0),o=Nc("button"),{form:a}=Nn(),r=an(S(()=>n==null?void 0:n.size)),l=Dn(),i=R(),u=fn(),d=S(()=>e.type||(n==null?void 0:n.type)||""),f=S(()=>{var m,v,_;return(_=(v=e.autoInsertSpace)!=null?v:(m=o.value)==null?void 0:m.autoInsertSpace)!=null?_:!1}),c=S(()=>e.tag==="button"?{ariaDisabled:l.value||e.loading,disabled:l.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),p=S(()=>{var m;const v=(m=u.default)==null?void 0:m.call(u);if(f.value&&(v==null?void 0:v.length)===1){const _=v[0];if((_==null?void 0:_.type)===Il){const g=_.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(g.trim())}}return!1});return{_disabled:l,_size:r,_type:d,_ref:i,_props:c,shouldAddSpace:p,handleClick:m=>{e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",m)}}},wf=["default","primary","success","warning","info","danger","text",""],uD=["button","submit","reset"],Cf=Ee({size:cn,disabled:Boolean,type:{type:String,values:wf,default:""},icon:{type:$t},nativeType:{type:String,values:uD,default:"button"},loading:Boolean,loadingIcon:{type:$t,default:()=>pa},plain:Boolean,text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:X([String,Object]),default:"button"}}),cD={click:e=>e instanceof MouseEvent};function yn(e,t){dD(e)&&(e="100%");var n=fD(e);return e=t===360?e:Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(String(e*t),10)/100),Math.abs(e-t)<1e-6?1:(t===360?e=(e<0?e%t+t:e%t)/parseFloat(String(t)):e=e%t/parseFloat(String(t)),e)}function Pi(e){return Math.min(1,Math.max(0,e))}function dD(e){return typeof e=="string"&&e.indexOf(".")!==-1&&parseFloat(e)===1}function fD(e){return typeof e=="string"&&e.indexOf("%")!==-1}function t3(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function Li(e){return e<=1?"".concat(Number(e)*100,"%"):e}function ir(e){return e.length===1?"0"+e:String(e)}function pD(e,t,n){return{r:yn(e,255)*255,g:yn(t,255)*255,b:yn(n,255)*255}}function X1(e,t,n){e=yn(e,255),t=yn(t,255),n=yn(n,255);var o=Math.max(e,t,n),a=Math.min(e,t,n),r=0,l=0,i=(o+a)/2;if(o===a)l=0,r=0;else{var u=o-a;switch(l=i>.5?u/(2-o-a):u/(o+a),o){case e:r=(t-n)/u+(t1&&(n-=1),n<1/6?e+(t-e)*(6*n):n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function vD(e,t,n){var o,a,r;if(e=yn(e,360),t=yn(t,100),n=yn(n,100),t===0)a=n,r=n,o=n;else{var l=n<.5?n*(1+t):n+t-n*t,i=2*n-l;o=bd(i,l,e+1/3),a=bd(i,l,e),r=bd(i,l,e-1/3)}return{r:o*255,g:a*255,b:r*255}}function J1(e,t,n){e=yn(e,255),t=yn(t,255),n=yn(n,255);var o=Math.max(e,t,n),a=Math.min(e,t,n),r=0,l=o,i=o-a,u=o===0?0:i/o;if(o===a)r=0;else{switch(o){case e:r=(t-n)/i+(t>16,g:(e&65280)>>8,b:e&255}}var Sf={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function _D(e){var t={r:0,g:0,b:0},n=1,o=null,a=null,r=null,l=!1,i=!1;return typeof e=="string"&&(e=CD(e)),typeof e=="object"&&(Uo(e.r)&&Uo(e.g)&&Uo(e.b)?(t=pD(e.r,e.g,e.b),l=!0,i=String(e.r).substr(-1)==="%"?"prgb":"rgb"):Uo(e.h)&&Uo(e.s)&&Uo(e.v)?(o=Li(e.s),a=Li(e.v),t=hD(e.h,o,a),l=!0,i="hsv"):Uo(e.h)&&Uo(e.s)&&Uo(e.l)&&(o=Li(e.s),r=Li(e.l),t=vD(e.h,o,r),l=!0,i="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(n=e.a)),n=t3(n),{ok:l,format:e.format||i,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}var bD="[-\\+]?\\d+%?",wD="[-\\+]?\\d*\\.\\d+%?",Na="(?:".concat(wD,")|(?:").concat(bD,")"),wd="[\\s|\\(]+(".concat(Na,")[,|\\s]+(").concat(Na,")[,|\\s]+(").concat(Na,")\\s*\\)?"),Cd="[\\s|\\(]+(".concat(Na,")[,|\\s]+(").concat(Na,")[,|\\s]+(").concat(Na,")[,|\\s]+(").concat(Na,")\\s*\\)?"),go={CSS_UNIT:new RegExp(Na),rgb:new RegExp("rgb"+wd),rgba:new RegExp("rgba"+Cd),hsl:new RegExp("hsl"+wd),hsla:new RegExp("hsla"+Cd),hsv:new RegExp("hsv"+wd),hsva:new RegExp("hsva"+Cd),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function CD(e){if(e=e.trim().toLowerCase(),e.length===0)return!1;var t=!1;if(Sf[e])e=Sf[e],t=!0;else if(e==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var n=go.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=go.rgba.exec(e),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=go.hsl.exec(e),n?{h:n[1],s:n[2],l:n[3]}:(n=go.hsla.exec(e),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=go.hsv.exec(e),n?{h:n[1],s:n[2],v:n[3]}:(n=go.hsva.exec(e),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=go.hex8.exec(e),n?{r:Kn(n[1]),g:Kn(n[2]),b:Kn(n[3]),a:Q1(n[4]),format:t?"name":"hex8"}:(n=go.hex6.exec(e),n?{r:Kn(n[1]),g:Kn(n[2]),b:Kn(n[3]),format:t?"name":"hex"}:(n=go.hex4.exec(e),n?{r:Kn(n[1]+n[1]),g:Kn(n[2]+n[2]),b:Kn(n[3]+n[3]),a:Q1(n[4]+n[4]),format:t?"name":"hex8"}:(n=go.hex3.exec(e),n?{r:Kn(n[1]+n[1]),g:Kn(n[2]+n[2]),b:Kn(n[3]+n[3]),format:t?"name":"hex"}:!1)))))))))}function Uo(e){return!!go.CSS_UNIT.exec(String(e))}var n3=function(){function e(t,n){t===void 0&&(t=""),n===void 0&&(n={});var o;if(t instanceof e)return t;typeof t=="number"&&(t=yD(t)),this.originalInput=t;var a=_D(t);this.originalInput=t,this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a,this.roundA=Math.round(100*this.a)/100,this.format=(o=n.format)!==null&&o!==void 0?o:a.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=a.ok}return e.prototype.isDark=function(){return this.getBrightness()<128},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},e.prototype.getLuminance=function(){var t=this.toRgb(),n,o,a,r=t.r/255,l=t.g/255,i=t.b/255;return r<=.03928?n=r/12.92:n=Math.pow((r+.055)/1.055,2.4),l<=.03928?o=l/12.92:o=Math.pow((l+.055)/1.055,2.4),i<=.03928?a=i/12.92:a=Math.pow((i+.055)/1.055,2.4),.2126*n+.7152*o+.0722*a},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(t){return this.a=t3(t),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){var t=this.toHsl().s;return t===0},e.prototype.toHsv=function(){var t=J1(this.r,this.g,this.b);return{h:t.h*360,s:t.s,v:t.v,a:this.a}},e.prototype.toHsvString=function(){var t=J1(this.r,this.g,this.b),n=Math.round(t.h*360),o=Math.round(t.s*100),a=Math.round(t.v*100);return this.a===1?"hsv(".concat(n,", ").concat(o,"%, ").concat(a,"%)"):"hsva(".concat(n,", ").concat(o,"%, ").concat(a,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var t=X1(this.r,this.g,this.b);return{h:t.h*360,s:t.s,l:t.l,a:this.a}},e.prototype.toHslString=function(){var t=X1(this.r,this.g,this.b),n=Math.round(t.h*360),o=Math.round(t.s*100),a=Math.round(t.l*100);return this.a===1?"hsl(".concat(n,", ").concat(o,"%, ").concat(a,"%)"):"hsla(".concat(n,", ").concat(o,"%, ").concat(a,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(t){return t===void 0&&(t=!1),Z1(this.r,this.g,this.b,t)},e.prototype.toHexString=function(t){return t===void 0&&(t=!1),"#"+this.toHex(t)},e.prototype.toHex8=function(t){return t===void 0&&(t=!1),mD(this.r,this.g,this.b,this.a,t)},e.prototype.toHex8String=function(t){return t===void 0&&(t=!1),"#"+this.toHex8(t)},e.prototype.toHexShortString=function(t){return t===void 0&&(t=!1),this.a===1?this.toHexString(t):this.toHex8String(t)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var t=Math.round(this.r),n=Math.round(this.g),o=Math.round(this.b);return this.a===1?"rgb(".concat(t,", ").concat(n,", ").concat(o,")"):"rgba(".concat(t,", ").concat(n,", ").concat(o,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var t=function(n){return"".concat(Math.round(yn(n,255)*100),"%")};return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var t=function(n){return Math.round(yn(n,255)*100)};return this.a===1?"rgb(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%)"):"rgba(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var t="#"+Z1(this.r,this.g,this.b,!1),n=0,o=Object.entries(Sf);n=0,r=!n&&a&&(t.startsWith("hex")||t==="name");return r?t==="name"&&this.a===0?this.toName():this.toRgbString():(t==="rgb"&&(o=this.toRgbString()),t==="prgb"&&(o=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(o=this.toHexString()),t==="hex3"&&(o=this.toHexString(!0)),t==="hex4"&&(o=this.toHex8String(!0)),t==="hex8"&&(o=this.toHex8String()),t==="name"&&(o=this.toName()),t==="hsl"&&(o=this.toHslString()),t==="hsv"&&(o=this.toHsvString()),o||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.l+=t/100,n.l=Pi(n.l),new e(n)},e.prototype.brighten=function(t){t===void 0&&(t=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(t/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(t/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(t/100)))),new e(n)},e.prototype.darken=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.l-=t/100,n.l=Pi(n.l),new e(n)},e.prototype.tint=function(t){return t===void 0&&(t=10),this.mix("white",t)},e.prototype.shade=function(t){return t===void 0&&(t=10),this.mix("black",t)},e.prototype.desaturate=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.s-=t/100,n.s=Pi(n.s),new e(n)},e.prototype.saturate=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.s+=t/100,n.s=Pi(n.s),new e(n)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var n=this.toHsl(),o=(n.h+t)%360;return n.h=o<0?360+o:o,new e(n)},e.prototype.mix=function(t,n){n===void 0&&(n=50);var o=this.toRgb(),a=new e(t).toRgb(),r=n/100,l={r:(a.r-o.r)*r+o.r,g:(a.g-o.g)*r+o.g,b:(a.b-o.b)*r+o.b,a:(a.a-o.a)*r+o.a};return new e(l)},e.prototype.analogous=function(t,n){t===void 0&&(t=6),n===void 0&&(n=30);var o=this.toHsl(),a=360/n,r=[this];for(o.h=(o.h-(a*t>>1)+720)%360;--t;)o.h=(o.h+a)%360,r.push(new e(o));return r},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){t===void 0&&(t=6);for(var n=this.toHsv(),o=n.h,a=n.s,r=n.v,l=[],i=1/t;t--;)l.push(new e({h:o,s:a,v:r})),r=(r+i)%1;return l},e.prototype.splitcomplement=function(){var t=this.toHsl(),n=t.h;return[this,new e({h:(n+72)%360,s:t.s,l:t.l}),new e({h:(n+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var n=this.toRgb(),o=new e(t).toRgb(),a=n.a+o.a*(1-n.a);return new e({r:(n.r*n.a+o.r*o.a*(1-n.a))/a,g:(n.g*n.a+o.g*o.a*(1-n.a))/a,b:(n.b*n.a+o.b*o.a*(1-n.a))/a,a})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var n=this.toHsl(),o=n.h,a=[this],r=360/t,l=1;l{let o={};const a=e.color;if(a){const r=new n3(a),l=e.dark?r.tint(20).toString():ba(r,20);if(e.plain)o=n.cssVarBlock({"bg-color":e.dark?ba(r,90):r.tint(90).toString(),"text-color":a,"border-color":e.dark?ba(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":l,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":l}),t.value&&(o[n.cssVarBlockName("disabled-bg-color")]=e.dark?ba(r,90):r.tint(90).toString(),o[n.cssVarBlockName("disabled-text-color")]=e.dark?ba(r,50):r.tint(50).toString(),o[n.cssVarBlockName("disabled-border-color")]=e.dark?ba(r,80):r.tint(80).toString());else{const i=e.dark?ba(r,30):r.tint(30).toString(),u=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(o=n.cssVarBlock({"bg-color":a,"text-color":u,"border-color":a,"hover-bg-color":i,"hover-text-color":u,"hover-border-color":i,"active-bg-color":l,"active-border-color":l}),t.value){const d=e.dark?ba(r,50):r.tint(50).toString();o[n.cssVarBlockName("disabled-bg-color")]=d,o[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,o[n.cssVarBlockName("disabled-border-color")]=d}}}return o})}const kD=A({name:"ElButton"}),ED=A({...kD,props:Cf,emits:cD,setup(e,{expose:t,emit:n}){const o=e,a=SD(o),r=me("button"),{_ref:l,_size:i,_type:u,_disabled:d,_props:f,shouldAddSpace:c,handleClick:p}=iD(o,n);return t({ref:l,size:i,type:u,disabled:d,shouldAddSpace:c}),(h,m)=>(y(),oe(ut(h.tag),ft({ref_key:"_ref",ref:l},s(f),{class:[s(r).b(),s(r).m(s(u)),s(r).m(s(i)),s(r).is("disabled",s(d)),s(r).is("loading",h.loading),s(r).is("plain",h.plain),s(r).is("round",h.round),s(r).is("circle",h.circle),s(r).is("text",h.text),s(r).is("link",h.link),s(r).is("has-bg",h.bg)],style:s(a),onClick:s(p)}),{default:G(()=>[h.loading?(y(),M(Fe,{key:0},[h.$slots.loading?re(h.$slots,"loading",{key:0}):(y(),oe(s(Be),{key:1,class:$(s(r).is("loading"))},{default:G(()=>[(y(),oe(ut(h.loadingIcon)))]),_:1},8,["class"]))],64)):h.icon||h.$slots.icon?(y(),oe(s(Be),{key:1},{default:G(()=>[h.icon?(y(),oe(ut(h.icon),{key:0})):re(h.$slots,"icon",{key:1})]),_:3})):Z("v-if",!0),h.$slots.default?(y(),M("span",{key:2,class:$({[s(r).em("text","expand")]:s(c)})},[re(h.$slots,"default")],2)):Z("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var xD=xe(ED,[["__file","button.vue"]]);const MD={size:Cf.size,type:Cf.type},$D=A({name:"ElButtonGroup"}),TD=A({...$D,props:MD,setup(e){const t=e;pt(e3,wt({size:At(t,"size"),type:At(t,"type")}));const n=me("button");return(o,a)=>(y(),M("div",{class:$(`${s(n).b("group")}`)},[re(o.$slots,"default")],2))}});var o3=xe(TD,[["__file","button-group.vue"]]);const rn=lt(xD,{ButtonGroup:o3}),a3=Dt(o3);var ma=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ga(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var r3={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(ma,function(){var n=1e3,o=6e4,a=36e5,r="millisecond",l="second",i="minute",u="hour",d="day",f="week",c="month",p="quarter",h="year",m="date",v="Invalid Date",_=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,w={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(K){var F=["th","st","nd","rd"],B=K%100;return"["+K+(F[(B-20)%10]||F[B]||F[0])+"]"}},b=function(K,F,B){var I=String(K);return!I||I.length>=F?K:""+Array(F+1-I.length).join(B)+K},C={s:b,z:function(K){var F=-K.utcOffset(),B=Math.abs(F),I=Math.floor(B/60),H=B%60;return(F<=0?"+":"-")+b(I,2,"0")+":"+b(H,2,"0")},m:function K(F,B){if(F.date()1)return K(D[0])}else{var q=F.name;E[q]=F,H=q}return!I&&H&&(x=H),H||!I&&x},L=function(K,F){if(T(K))return K.clone();var B=typeof F=="object"?F:{};return B.date=K,B.args=arguments,new z(B)},P=C;P.l=V,P.i=T,P.w=function(K,F){return L(K,{locale:F.$L,utc:F.$u,x:F.$x,$offset:F.$offset})};var z=function(){function K(B){this.$L=V(B.locale,null,!0),this.parse(B),this.$x=this.$x||B.x||{},this[O]=!0}var F=K.prototype;return F.parse=function(B){this.$d=function(I){var H=I.date,N=I.utc;if(H===null)return new Date(NaN);if(P.u(H))return new Date;if(H instanceof Date)return new Date(H);if(typeof H=="string"&&!/Z$/i.test(H)){var D=H.match(_);if(D){var q=D[2]-1||0,Y=(D[7]||"0").substring(0,3);return N?new Date(Date.UTC(D[1],q,D[3]||1,D[4]||0,D[5]||0,D[6]||0,Y)):new Date(D[1],q,D[3]||1,D[4]||0,D[5]||0,D[6]||0,Y)}}return new Date(H)}(B),this.init()},F.init=function(){var B=this.$d;this.$y=B.getFullYear(),this.$M=B.getMonth(),this.$D=B.getDate(),this.$W=B.getDay(),this.$H=B.getHours(),this.$m=B.getMinutes(),this.$s=B.getSeconds(),this.$ms=B.getMilliseconds()},F.$utils=function(){return P},F.isValid=function(){return this.$d.toString()!==v},F.isSame=function(B,I){var H=L(B);return this.startOf(I)<=H&&H<=this.endOf(I)},F.isAfter=function(B,I){return L(B)68?1900:2e3)},d=function(v){return function(_){this[v]=+_}},f=[/[+-]\d\d:?(\d\d)?|Z/,function(v){(this.zone||(this.zone={})).offset=function(_){if(!_||_==="Z")return 0;var g=_.match(/([+-]|\d\d)/g),w=60*g[1]+(+g[2]||0);return w===0?0:g[0]==="+"?-w:w}(v)}],c=function(v){var _=i[v];return _&&(_.indexOf?_:_.s.concat(_.f))},p=function(v,_){var g,w=i.meridiem;if(w){for(var b=1;b<=24;b+=1)if(v.indexOf(w(b,0,_))>-1){g=b>12;break}}else g=v===(_?"pm":"PM");return g},h={A:[l,function(v){this.afternoon=p(v,!1)}],a:[l,function(v){this.afternoon=p(v,!0)}],S:[/\d/,function(v){this.milliseconds=100*+v}],SS:[a,function(v){this.milliseconds=10*+v}],SSS:[/\d{3}/,function(v){this.milliseconds=+v}],s:[r,d("seconds")],ss:[r,d("seconds")],m:[r,d("minutes")],mm:[r,d("minutes")],H:[r,d("hours")],h:[r,d("hours")],HH:[r,d("hours")],hh:[r,d("hours")],D:[r,d("day")],DD:[a,d("day")],Do:[l,function(v){var _=i.ordinal,g=v.match(/\d+/);if(this.day=g[0],_)for(var w=1;w<=31;w+=1)_(w).replace(/\[|\]/g,"")===v&&(this.day=w)}],M:[r,d("month")],MM:[a,d("month")],MMM:[l,function(v){var _=c("months"),g=(c("monthsShort")||_.map(function(w){return w.slice(0,3)})).indexOf(v)+1;if(g<1)throw new Error;this.month=g%12||g}],MMMM:[l,function(v){var _=c("months").indexOf(v)+1;if(_<1)throw new Error;this.month=_%12||_}],Y:[/[+-]?\d+/,d("year")],YY:[a,function(v){this.year=u(v)}],YYYY:[/\d{4}/,d("year")],Z:f,ZZ:f};function m(v){var _,g;_=v,g=i&&i.formats;for(var w=(v=_.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(V,L,P){var z=P&&P.toUpperCase();return L||g[P]||n[P]||g[z].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(j,K,F){return K||F.slice(1)})})).match(o),b=w.length,C=0;C-1)return new Date((I==="X"?1e3:1)*B);var N=m(I)(B),D=N.year,q=N.month,Y=N.day,J=N.hours,se=N.minutes,_e=N.seconds,Q=N.milliseconds,le=N.zone,ae=new Date,Te=Y||(D||q?1:ae.getDate()),ce=D||ae.getFullYear(),ge=0;D&&!q||(ge=q>0?q-1:ae.getMonth());var Ae=J||0,U=se||0,te=_e||0,ve=Q||0;return le?new Date(Date.UTC(ce,ge,Te,Ae,U,te,ve+60*le.offset*1e3)):H?new Date(Date.UTC(ce,ge,Te,Ae,U,te,ve)):new Date(ce,ge,Te,Ae,U,te,ve)}catch{return new Date("")}}(x,T,E),this.init(),z&&z!==!0&&(this.$L=this.locale(z).$L),P&&x!=this.format(T)&&(this.$d=new Date("")),i={}}else if(T instanceof Array)for(var j=T.length,K=1;K<=j;K+=1){O[1]=T[K-1];var F=g.apply(this,O);if(F.isValid()){this.$d=F.$d,this.$L=F.$L,this.init();break}K===j&&(this.$d=new Date(""))}else b.call(this,C)}}})})(l3);var OD=l3.exports;const H2=ga(OD),eh=["hours","minutes","seconds"],kf="HH:mm:ss",Gr="YYYY-MM-DD",ND={date:Gr,dates:Gr,week:"gggg[w]ww",year:"YYYY",years:"YYYY",month:"YYYY-MM",datetime:`${Gr} ${kf}`,monthrange:"YYYY-MM",daterange:Gr,datetimerange:`${Gr} ${kf}`},Sd=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),s3=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),i3=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),th=function(e,t){const n=wr(e),o=wr(t);return n&&o?e.getTime()===t.getTime():!n&&!o?e===t:!1},nh=function(e,t){const n=Ie(e),o=Ie(t);return n&&o?e.length!==t.length?!1:e.every((a,r)=>th(a,t[r])):!n&&!o?th(e,t):!1},oh=function(e,t,n){const o=Qn(t)||t==="x"?at(e).locale(n):at(e,t).locale(n);return o.isValid()?o:void 0},ah=function(e,t,n){return Qn(t)?e:t==="x"?+e:at(e).locale(n).format(t)},kd=(e,t)=>{var n;const o=[],a=t==null?void 0:t();for(let r=0;r({})},modelValue:{type:X([Date,Array,String,Number]),default:""},rangeSeparator:{type:String,default:"-"},startPlaceholder:String,endPlaceholder:String,defaultValue:{type:X([Date,Array])},defaultTime:{type:X([Date,Array])},isRange:Boolean,...u3,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,label:{type:String,default:void 0},tabindex:{type:X([String,Number]),default:0},validateEvent:{type:Boolean,default:!0},unlinkPanels:Boolean}),ID=["id","name","placeholder","value","disabled","readonly"],RD=["id","name","placeholder","value","disabled","readonly"],PD=A({name:"Picker"}),LD=A({...PD,props:D2,emits:["update:modelValue","change","focus","blur","calendar-change","panel-change","visible-change","keydown"],setup(e,{expose:t,emit:n}){const o=e,a=Pr(),{lang:r}=_t(),l=me("date"),i=me("input"),u=me("range"),{form:d,formItem:f}=Nn(),c=Pe("ElPopperOptions",{}),p=R(),h=R(),m=R(!1),v=R(!1),_=R(null);let g=!1,w=!1;const b=S(()=>[l.b("editor"),l.bm("editor",o.type),i.e("wrapper"),l.is("disabled",Y.value),l.is("active",m.value),u.b("editor"),ye?u.bm("editor",ye.value):"",a.class]),C=S(()=>[i.e("icon"),u.e("close-icon"),ce.value?"":u.e("close-icon--hidden")]);pe(m,ne=>{ne?We(()=>{ne&&(_.value=o.modelValue)}):(he.value=null,We(()=>{x(o.modelValue)}))});const x=(ne,ze)=>{(ze||!nh(ne,_.value))&&(n("change",ne),o.validateEvent&&(f==null||f.validate("change").catch(tt=>void 0)))},E=ne=>{if(!nh(o.modelValue,ne)){let ze;Ie(ne)?ze=ne.map(tt=>ah(tt,o.valueFormat,r.value)):ne&&(ze=ah(ne,o.valueFormat,r.value)),n("update:modelValue",ne&&ze,r.value)}},O=ne=>{n("keydown",ne)},T=S(()=>{if(h.value){const ne=ue.value?h.value:h.value.$el;return Array.from(ne.querySelectorAll("input"))}return[]}),V=(ne,ze,tt)=>{const St=T.value;St.length&&(!tt||tt==="min"?(St[0].setSelectionRange(ne,ze),St[0].focus()):tt==="max"&&(St[1].setSelectionRange(ne,ze),St[1].focus()))},L=()=>{H(!0,!0),We(()=>{w=!1})},P=(ne="",ze=!1)=>{ze||(w=!0),m.value=ze;let tt;Ie(ne)?tt=ne.map(St=>St.toDate()):tt=ne&&ne.toDate(),he.value=null,E(tt)},z=()=>{v.value=!0},j=()=>{n("visible-change",!0)},K=ne=>{(ne==null?void 0:ne.key)===Ke.esc&&H(!0,!0)},F=()=>{v.value=!1,m.value=!1,w=!1,n("visible-change",!1)},B=()=>{m.value=!0},I=()=>{m.value=!1},H=(ne=!0,ze=!1)=>{w=ze;const[tt,St]=s(T);let Ot=tt;!ne&&ue.value&&(Ot=St),Ot&&Ot.focus()},N=ne=>{o.readonly||Y.value||m.value||w||(m.value=!0,n("focus",ne))};let D;const q=ne=>{const ze=async()=>{setTimeout(()=>{var tt;D===ze&&(!((tt=p.value)!=null&&tt.isFocusInsideContent()&&!g)&&T.value.filter(St=>St.contains(document.activeElement)).length===0&&(Se(),m.value=!1,n("blur",ne),o.validateEvent&&(f==null||f.validate("blur").catch(St=>void 0))),g=!1)},0)};D=ze,ze()},Y=S(()=>o.disabled||(d==null?void 0:d.disabled)),J=S(()=>{let ne;if(Ae.value?$e.value.getDefaultValue&&(ne=$e.value.getDefaultValue()):Ie(o.modelValue)?ne=o.modelValue.map(ze=>oh(ze,o.valueFormat,r.value)):ne=oh(o.modelValue,o.valueFormat,r.value),$e.value.getRangeAvailableTime){const ze=$e.value.getRangeAvailableTime(ne);wn(ze,ne)||(ne=ze,E(Ie(ne)?ne.map(tt=>tt.toDate()):ne.toDate()))}return Ie(ne)&&ne.some(ze=>!ze)&&(ne=[]),ne}),se=S(()=>{if(!$e.value.panelReady)return"";const ne=He(J.value);return Ie(he.value)?[he.value[0]||ne&&ne[0]||"",he.value[1]||ne&&ne[1]||""]:he.value!==null?he.value:!Q.value&&Ae.value||!m.value&&Ae.value?"":ne?le.value||ae.value?ne.join(", "):ne:""}),_e=S(()=>o.type.includes("time")),Q=S(()=>o.type.startsWith("time")),le=S(()=>o.type==="dates"),ae=S(()=>o.type==="years"),Te=S(()=>o.prefixIcon||(_e.value?l2:Ng)),ce=R(!1),ge=ne=>{o.readonly||Y.value||ce.value&&(ne.stopPropagation(),L(),E(null),x(null,!0),ce.value=!1,m.value=!1,$e.value.handleClear&&$e.value.handleClear())},Ae=S(()=>{const{modelValue:ne}=o;return!ne||Ie(ne)&&!ne.filter(Boolean).length}),U=async ne=>{var ze;o.readonly||Y.value||(((ze=ne.target)==null?void 0:ze.tagName)!=="INPUT"||T.value.includes(document.activeElement))&&(m.value=!0)},te=()=>{o.readonly||Y.value||!Ae.value&&o.clearable&&(ce.value=!0)},ve=()=>{ce.value=!1},be=ne=>{var ze;o.readonly||Y.value||(((ze=ne.touches[0].target)==null?void 0:ze.tagName)!=="INPUT"||T.value.includes(document.activeElement))&&(m.value=!0)},ue=S(()=>o.type.includes("range")),ye=an(),we=S(()=>{var ne,ze;return(ze=(ne=s(p))==null?void 0:ne.popperRef)==null?void 0:ze.contentRef}),Ce=S(()=>{var ne;return s(ue)?s(h):(ne=s(h))==null?void 0:ne.$el});H0(Ce,ne=>{const ze=s(we),tt=s(Ce);ze&&(ne.target===ze||ne.composedPath().includes(ze))||ne.target===tt||ne.composedPath().includes(tt)||(m.value=!1)});const he=R(null),Se=()=>{if(he.value){const ne=Re(se.value);ne&&de(ne)&&(E(Ie(ne)?ne.map(ze=>ze.toDate()):ne.toDate()),he.value=null)}he.value===""&&(E(null),x(null),he.value=null)},Re=ne=>ne?$e.value.parseUserInput(ne):null,He=ne=>ne?$e.value.formatToString(ne):null,de=ne=>$e.value.isValidValue(ne),Le=async ne=>{if(o.readonly||Y.value)return;const{code:ze}=ne;if(O(ne),ze===Ke.esc){m.value===!0&&(m.value=!1,ne.preventDefault(),ne.stopPropagation());return}if(ze===Ke.down&&($e.value.handleFocusPicker&&(ne.preventDefault(),ne.stopPropagation()),m.value===!1&&(m.value=!0,await We()),$e.value.handleFocusPicker)){$e.value.handleFocusPicker();return}if(ze===Ke.tab){g=!0;return}if(ze===Ke.enter||ze===Ke.numpadEnter){(he.value===null||he.value===""||de(Re(se.value)))&&(Se(),m.value=!1),ne.stopPropagation();return}if(he.value){ne.stopPropagation();return}$e.value.handleKeydownInput&&$e.value.handleKeydownInput(ne)},Ue=ne=>{he.value=ne,m.value||(m.value=!0)},ot=ne=>{const ze=ne.target;he.value?he.value=[ze.value,he.value[1]]:he.value=[ze.value,null]},dt=ne=>{const ze=ne.target;he.value?he.value=[he.value[0],ze.value]:he.value=[null,ze.value]},je=()=>{var ne;const ze=he.value,tt=Re(ze&&ze[0]),St=s(J);if(tt&&tt.isValid()){he.value=[He(tt),((ne=se.value)==null?void 0:ne[1])||null];const Ot=[tt,St&&(St[1]||null)];de(Ot)&&(E(Ot),he.value=null)}},fe=()=>{var ne;const ze=s(he),tt=Re(ze&&ze[1]),St=s(J);if(tt&&tt.isValid()){he.value=[((ne=s(se))==null?void 0:ne[0])||null,He(tt)];const Ot=[St&&St[0],tt];de(Ot)&&(E(Ot),he.value=null)}},$e=R({}),ee=ne=>{$e.value[ne[0]]=ne[1],$e.value.panelReady=!0},ie=ne=>{n("calendar-change",ne)},ke=(ne,ze,tt)=>{n("panel-change",ne,ze,tt)};return pt("EP_PICKER_BASE",{props:o}),t({focus:H,handleFocusInput:N,handleBlurInput:q,handleOpen:B,handleClose:I,onPick:P}),(ne,ze)=>(y(),oe(s(En),ft({ref_key:"refPopper",ref:p,visible:m.value,effect:"light",pure:"",trigger:"click"},ne.$attrs,{role:"dialog",teleported:"",transition:`${s(l).namespace.value}-zoom-in-top`,"popper-class":[`${s(l).namespace.value}-picker__popper`,ne.popperClass],"popper-options":s(c),"fallback-placements":["bottom","top","right","left"],"gpu-acceleration":!1,"stop-popper-mouse-event":!1,"hide-after":0,persistent:"",onBeforeShow:z,onShow:j,onHide:F}),{default:G(()=>[s(ue)?(y(),M("div",{key:1,ref_key:"inputRef",ref:h,class:$(s(b)),style:De(ne.$attrs.style),onClick:N,onMouseenter:te,onMouseleave:ve,onTouchstart:be,onKeydown:Le},[s(Te)?(y(),oe(s(Be),{key:0,class:$([s(i).e("icon"),s(u).e("icon")]),onMousedown:Ge(U,["prevent"]),onTouchstart:be},{default:G(()=>[(y(),oe(ut(s(Te))))]),_:1},8,["class","onMousedown"])):Z("v-if",!0),k("input",{id:ne.id&&ne.id[0],autocomplete:"off",name:ne.name&&ne.name[0],placeholder:ne.startPlaceholder,value:s(se)&&s(se)[0],disabled:s(Y),readonly:!ne.editable||ne.readonly,class:$(s(u).b("input")),onMousedown:U,onInput:ot,onChange:je,onFocus:N,onBlur:q},null,42,ID),re(ne.$slots,"range-separator",{},()=>[k("span",{class:$(s(u).b("separator"))},Me(ne.rangeSeparator),3)]),k("input",{id:ne.id&&ne.id[1],autocomplete:"off",name:ne.name&&ne.name[1],placeholder:ne.endPlaceholder,value:s(se)&&s(se)[1],disabled:s(Y),readonly:!ne.editable||ne.readonly,class:$(s(u).b("input")),onMousedown:U,onFocus:N,onBlur:q,onInput:dt,onChange:fe},null,42,RD),ne.clearIcon?(y(),oe(s(Be),{key:1,class:$(s(C)),onClick:ge},{default:G(()=>[(y(),oe(ut(ne.clearIcon)))]),_:1},8,["class"])):Z("v-if",!0)],38)):(y(),oe(s(mn),{key:0,id:ne.id,ref_key:"inputRef",ref:h,"container-role":"combobox","model-value":s(se),name:ne.name,size:s(ye),disabled:s(Y),placeholder:ne.placeholder,class:$([s(l).b("editor"),s(l).bm("editor",ne.type),ne.$attrs.class]),style:De(ne.$attrs.style),readonly:!ne.editable||ne.readonly||s(le)||s(ae)||ne.type==="week",label:ne.label,tabindex:ne.tabindex,"validate-event":!1,onInput:Ue,onFocus:N,onBlur:q,onKeydown:Le,onChange:Se,onMousedown:U,onMouseenter:te,onMouseleave:ve,onTouchstart:be,onClick:ze[0]||(ze[0]=Ge(()=>{},["stop"]))},{prefix:G(()=>[s(Te)?(y(),oe(s(Be),{key:0,class:$(s(i).e("icon")),onMousedown:Ge(U,["prevent"]),onTouchstart:be},{default:G(()=>[(y(),oe(ut(s(Te))))]),_:1},8,["class","onMousedown"])):Z("v-if",!0)]),suffix:G(()=>[ce.value&&ne.clearIcon?(y(),oe(s(Be),{key:0,class:$(`${s(i).e("icon")} clear-icon`),onClick:Ge(ge,["stop"])},{default:G(()=>[(y(),oe(ut(ne.clearIcon)))]),_:1},8,["class","onClick"])):Z("v-if",!0)]),_:1},8,["id","model-value","name","size","disabled","placeholder","class","style","readonly","label","tabindex","onKeydown"]))]),content:G(()=>[re(ne.$slots,"default",{visible:m.value,actualVisible:v.value,parsedValue:s(J),format:ne.format,dateFormat:ne.dateFormat,timeFormat:ne.timeFormat,unlinkPanels:ne.unlinkPanels,type:ne.type,defaultValue:ne.defaultValue,onPick:P,onSelectRange:V,onSetPickerOption:ee,onCalendarChange:ie,onPanelChange:ke,onKeydown:K,onMousedown:ze[1]||(ze[1]=Ge(()=>{},["stop"]))})]),_:3},16,["visible","transition","popper-class","popper-options"]))}});var d3=xe(LD,[["__file","picker.vue"]]);const VD=Ee({...c3,datetimeRole:String,parsedValue:{type:X(Object)}}),f3=({getAvailableHours:e,getAvailableMinutes:t,getAvailableSeconds:n})=>{const o=(l,i,u,d)=>{const f={hour:e,minute:t,second:n};let c=l;return["hour","minute","second"].forEach(p=>{if(f[p]){let h;const m=f[p];switch(p){case"minute":{h=m(c.hour(),i,d);break}case"second":{h=m(c.hour(),c.minute(),i,d);break}default:{h=m(i,d);break}}if(h!=null&&h.length&&!h.includes(c[p]())){const v=u?0:h.length-1;c=c[p](h[v])}}}),c},a={};return{timePickerOptions:a,getAvailableTime:o,onSetOption:([l,i])=>{a[l]=i}}},Ed=e=>{const t=(o,a)=>o||a,n=o=>o!==!0;return e.map(t).filter(n)},p3=(e,t,n)=>({getHoursList:(l,i)=>kd(24,e&&(()=>e==null?void 0:e(l,i))),getMinutesList:(l,i,u)=>kd(60,t&&(()=>t==null?void 0:t(l,i,u))),getSecondsList:(l,i,u,d)=>kd(60,n&&(()=>n==null?void 0:n(l,i,u,d)))}),v3=(e,t,n)=>{const{getHoursList:o,getMinutesList:a,getSecondsList:r}=p3(e,t,n);return{getAvailableHours:(d,f)=>Ed(o(d,f)),getAvailableMinutes:(d,f,c)=>Ed(a(d,f,c)),getAvailableSeconds:(d,f,c,p)=>Ed(r(d,f,c,p))}},h3=e=>{const t=R(e.parsedValue);return pe(()=>e.visible,n=>{n||(t.value=e.parsedValue)}),t},ka=new Map;let rh;gt&&(document.addEventListener("mousedown",e=>rh=e),document.addEventListener("mouseup",e=>{for(const t of ka.values())for(const{documentHandler:n}of t)n(e,rh)}));function lh(e,t){let n=[];return Array.isArray(t.arg)?n=t.arg:io(t.arg)&&n.push(t.arg),function(o,a){const r=t.instance.popperRef,l=o.target,i=a==null?void 0:a.target,u=!t||!t.instance,d=!l||!i,f=e.contains(l)||e.contains(i),c=e===l,p=n.length&&n.some(m=>m==null?void 0:m.contains(l))||n.length&&n.includes(i),h=r&&(r.contains(l)||r.contains(i));u||d||f||c||p||h||t.value(o,a)}}const sa={beforeMount(e,t){ka.has(e)||ka.set(e,[]),ka.get(e).push({documentHandler:lh(e,t),bindingFn:t.value})},updated(e,t){ka.has(e)||ka.set(e,[]);const n=ka.get(e),o=n.findIndex(r=>r.bindingFn===t.oldValue),a={documentHandler:lh(e,t),bindingFn:t.value};o>=0?n.splice(o,1,a):n.push(a)},unmounted(e){ka.delete(e)}},BD=100,zD=600,Du={beforeMount(e,t){const n=t.value,{interval:o=BD,delay:a=zD}=Xe(n)?{}:n;let r,l;const i=()=>Xe(n)?n():n.handler(),u=()=>{l&&(clearTimeout(l),l=void 0),r&&(clearInterval(r),r=void 0)};e.addEventListener("mousedown",d=>{d.button===0&&(u(),i(),document.addEventListener("mouseup",()=>u(),{once:!0}),l=setTimeout(()=>{r=setInterval(()=>{i()},o)},a))})}},Ef="_trap-focus-children",ur=[],sh=e=>{if(ur.length===0)return;const t=ur[ur.length-1][Ef];if(t.length>0&&e.code===Ke.tab){if(t.length===1){e.preventDefault(),document.activeElement!==t[0]&&t[0].focus();return}const n=e.shiftKey,o=e.target===t[0],a=e.target===t[t.length-1];o&&n&&(e.preventDefault(),t[t.length-1].focus()),a&&!n&&(e.preventDefault(),t[0].focus())}},HD={beforeMount(e){e[Ef]=gv(e),ur.push(e),ur.length<=1&&document.addEventListener("keydown",sh)},updated(e){We(()=>{e[Ef]=gv(e)})},unmounted(){ur.shift(),ur.length===0&&document.removeEventListener("keydown",sh)}};var ih=!1,ar,xf,Mf,Qi,eu,m3,tu,$f,Tf,Af,g3,Of,Nf,y3,_3;function Rn(){if(!ih){ih=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),n=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(Of=/\b(iPhone|iP[ao]d)/.exec(e),Nf=/\b(iP[ao]d)/.exec(e),Af=/Android/i.exec(e),y3=/FBAN\/\w+;/i.exec(e),_3=/Mobile/i.exec(e),g3=!!/Win64/.exec(e),t){ar=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,ar&&document&&document.documentMode&&(ar=document.documentMode);var o=/(?:Trident\/(\d+.\d+))/.exec(e);m3=o?parseFloat(o[1])+4:ar,xf=t[2]?parseFloat(t[2]):NaN,Mf=t[3]?parseFloat(t[3]):NaN,Qi=t[4]?parseFloat(t[4]):NaN,Qi?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),eu=t&&t[1]?parseFloat(t[1]):NaN):eu=NaN}else ar=xf=Mf=eu=Qi=NaN;if(n){if(n[1]){var a=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);tu=a?parseFloat(a[1].replace("_",".")):!0}else tu=!1;$f=!!n[2],Tf=!!n[3]}else tu=$f=Tf=!1}}var If={ie:function(){return Rn()||ar},ieCompatibilityMode:function(){return Rn()||m3>ar},ie64:function(){return If.ie()&&g3},firefox:function(){return Rn()||xf},opera:function(){return Rn()||Mf},webkit:function(){return Rn()||Qi},safari:function(){return If.webkit()},chrome:function(){return Rn()||eu},windows:function(){return Rn()||$f},osx:function(){return Rn()||tu},linux:function(){return Rn()||Tf},iphone:function(){return Rn()||Of},mobile:function(){return Rn()||Of||Nf||Af||_3},nativeApp:function(){return Rn()||y3},android:function(){return Rn()||Af},ipad:function(){return Rn()||Nf}},DD=If,Vi=!!(typeof window<"u"&&window.document&&window.document.createElement),FD={canUseDOM:Vi,canUseWorkers:typeof Worker<"u",canUseEventListeners:Vi&&!!(window.addEventListener||window.attachEvent),canUseViewport:Vi&&!!window.screen,isInWorker:!Vi},b3=FD,w3;b3.canUseDOM&&(w3=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function KD(e,t){if(!b3.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var a=document.createElement("div");a.setAttribute(n,"return;"),o=typeof a[n]=="function"}return!o&&w3&&e==="wheel"&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}var WD=KD,uh=10,ch=40,dh=800;function C3(e){var t=0,n=0,o=0,a=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),o=t*uh,a=n*uh,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(o=e.deltaX),(o||a)&&e.deltaMode&&(e.deltaMode==1?(o*=ch,a*=ch):(o*=dh,a*=dh)),o&&!t&&(t=o<1?-1:1),a&&!n&&(n=a<1?-1:1),{spinX:t,spinY:n,pixelX:o,pixelY:a}}C3.getEventType=function(){return DD.firefox()?"DOMMouseScroll":WD("wheel")?"wheel":"mousewheel"};var jD=C3;/** +* Checks if an event is supported in the current execution environment. +* +* NOTE: This will not work correctly for non-generic events such as `change`, +* `reset`, `load`, `error`, and `select`. +* +* Borrows from Modernizr. +* +* @param {string} eventNameSuffix Event name, e.g. "click". +* @param {?boolean} capture Check if the capture phase is supported. +* @return {boolean} True if the event is supported. +* @internal +* @license Modernizr 3.0.0pre (Custom Build) | MIT +*/const qD=function(e,t){if(e&&e.addEventListener){const n=function(o){const a=jD(o);t&&Reflect.apply(t,this,[o,a])};e.addEventListener("wheel",n,{passive:!0})}},UD={beforeMount(e,t){qD(e,t.value)}},YD=Ee({role:{type:String,required:!0},spinnerDate:{type:X(Object),required:!0},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:X(String),default:""},...u3}),GD=["onClick"],XD=["onMouseenter"],JD=A({__name:"basic-time-spinner",props:YD,emits:["change","select-range","set-option"],setup(e,{emit:t}){const n=e,o=me("time"),{getHoursList:a,getMinutesList:r,getSecondsList:l}=p3(n.disabledHours,n.disabledMinutes,n.disabledSeconds);let i=!1;const u=R(),d=R(),f=R(),c=R(),p={hours:d,minutes:f,seconds:c},h=S(()=>n.showSeconds?eh:eh.slice(0,2)),m=S(()=>{const{spinnerDate:N}=n,D=N.hour(),q=N.minute(),Y=N.second();return{hours:D,minutes:q,seconds:Y}}),v=S(()=>{const{hours:N,minutes:D}=s(m);return{hours:a(n.role),minutes:r(N,n.role),seconds:l(N,D,n.role)}}),_=S(()=>{const{hours:N,minutes:D,seconds:q}=s(m);return{hours:Sd(N,23),minutes:Sd(D,59),seconds:Sd(q,59)}}),g=Hn(N=>{i=!1,C(N)},200),w=N=>{if(!!!n.amPmMode)return"";const q=n.amPmMode==="A";let Y=N<12?" am":" pm";return q&&(Y=Y.toUpperCase()),Y},b=N=>{let D;switch(N){case"hours":D=[0,2];break;case"minutes":D=[3,5];break;case"seconds":D=[6,8];break}const[q,Y]=D;t("select-range",q,Y),u.value=N},C=N=>{O(N,s(m)[N])},x=()=>{C("hours"),C("minutes"),C("seconds")},E=N=>N.querySelector(`.${o.namespace.value}-scrollbar__wrap`),O=(N,D)=>{if(n.arrowControl)return;const q=s(p[N]);q&&q.$el&&(E(q.$el).scrollTop=Math.max(0,D*T(N)))},T=N=>{const D=s(p[N]),q=D==null?void 0:D.$el.querySelector("li");return q&&Number.parseFloat(Oa(q,"height"))||0},V=()=>{P(1)},L=()=>{P(-1)},P=N=>{u.value||b("hours");const D=u.value,q=s(m)[D],Y=u.value==="hours"?24:60,J=z(D,q,N,Y);j(D,J),O(D,J),We(()=>b(D))},z=(N,D,q,Y)=>{let J=(D+q+Y)%Y;const se=s(v)[N];for(;se[J]&&J!==D;)J=(J+q+Y)%Y;return J},j=(N,D)=>{if(s(v)[N][D])return;const{hours:J,minutes:se,seconds:_e}=s(m);let Q;switch(N){case"hours":Q=n.spinnerDate.hour(D).minute(se).second(_e);break;case"minutes":Q=n.spinnerDate.hour(J).minute(D).second(_e);break;case"seconds":Q=n.spinnerDate.hour(J).minute(se).second(D);break}t("change",Q)},K=(N,{value:D,disabled:q})=>{q||(j(N,D),b(N),O(N,D))},F=N=>{i=!0,g(N);const D=Math.min(Math.round((E(s(p[N]).$el).scrollTop-(B(N)*.5-10)/T(N)+3)/T(N)),N==="hours"?23:59);j(N,D)},B=N=>s(p[N]).$el.offsetHeight,I=()=>{const N=D=>{const q=s(p[D]);q&&q.$el&&(E(q.$el).onscroll=()=>{F(D)})};N("hours"),N("minutes"),N("seconds")};et(()=>{We(()=>{!n.arrowControl&&I(),x(),n.role==="start"&&b("hours")})});const H=(N,D)=>{p[D].value=N};return t("set-option",[`${n.role}_scrollDown`,P]),t("set-option",[`${n.role}_emitSelectRange`,b]),pe(()=>n.spinnerDate,()=>{i||x()}),(N,D)=>(y(),M("div",{class:$([s(o).b("spinner"),{"has-seconds":N.showSeconds}])},[N.arrowControl?Z("v-if",!0):(y(!0),M(Fe,{key:0},mt(s(h),q=>(y(),oe(s(ha),{key:q,ref_for:!0,ref:Y=>H(Y,q),class:$(s(o).be("spinner","wrapper")),"wrap-style":"max-height: inherit;","view-class":s(o).be("spinner","list"),noresize:"",tag:"ul",onMouseenter:Y=>b(q),onMousemove:Y=>C(q)},{default:G(()=>[(y(!0),M(Fe,null,mt(s(v)[q],(Y,J)=>(y(),M("li",{key:J,class:$([s(o).be("spinner","item"),s(o).is("active",J===s(m)[q]),s(o).is("disabled",Y)]),onClick:se=>K(q,{value:J,disabled:Y})},[q==="hours"?(y(),M(Fe,{key:0},[vt(Me(("0"+(N.amPmMode?J%12||12:J)).slice(-2))+Me(w(J)),1)],64)):(y(),M(Fe,{key:1},[vt(Me(("0"+J).slice(-2)),1)],64))],10,GD))),128))]),_:2},1032,["class","view-class","onMouseenter","onMousemove"]))),128)),N.arrowControl?(y(!0),M(Fe,{key:1},mt(s(h),q=>(y(),M("div",{key:q,class:$([s(o).be("spinner","wrapper"),s(o).is("arrow")]),onMouseenter:Y=>b(q)},[Qe((y(),oe(s(Be),{class:$(["arrow-up",s(o).be("spinner","arrow")])},{default:G(()=>[W(s(Cc))]),_:1},8,["class"])),[[s(Du),L]]),Qe((y(),oe(s(Be),{class:$(["arrow-down",s(o).be("spinner","arrow")])},{default:G(()=>[W(s(Bo))]),_:1},8,["class"])),[[s(Du),V]]),k("ul",{class:$(s(o).be("spinner","list"))},[(y(!0),M(Fe,null,mt(s(_)[q],(Y,J)=>(y(),M("li",{key:J,class:$([s(o).be("spinner","item"),s(o).is("active",Y===s(m)[q]),s(o).is("disabled",s(v)[q][Y])])},[typeof Y=="number"?(y(),M(Fe,{key:0},[q==="hours"?(y(),M(Fe,{key:0},[vt(Me(("0"+(N.amPmMode?Y%12||12:Y)).slice(-2))+Me(w(Y)),1)],64)):(y(),M(Fe,{key:1},[vt(Me(("0"+Y).slice(-2)),1)],64))],64)):Z("v-if",!0)],2))),128))],2)],42,XD))),128)):Z("v-if",!0)],2))}});var Rf=xe(JD,[["__file","basic-time-spinner.vue"]]);const ZD=A({__name:"panel-time-pick",props:VD,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,o=Pe("EP_PICKER_BASE"),{arrowControl:a,disabledHours:r,disabledMinutes:l,disabledSeconds:i,defaultValue:u}=o.props,{getAvailableHours:d,getAvailableMinutes:f,getAvailableSeconds:c}=v3(r,l,i),p=me("time"),{t:h,lang:m}=_t(),v=R([0,2]),_=h3(n),g=S(()=>Zt(n.actualVisible)?`${p.namespace.value}-zoom-in-top`:""),w=S(()=>n.format.includes("ss")),b=S(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),C=H=>{const N=at(H).locale(m.value),D=K(N);return N.isSame(D)},x=()=>{t("pick",_.value,!1)},E=(H=!1,N=!1)=>{N||t("pick",n.parsedValue,H)},O=H=>{if(!n.visible)return;const N=K(H).millisecond(0);t("pick",N,!0)},T=(H,N)=>{t("select-range",H,N),v.value=[H,N]},V=H=>{const N=[0,3].concat(w.value?[6]:[]),D=["hours","minutes"].concat(w.value?["seconds"]:[]),Y=(N.indexOf(v.value[0])+H+N.length)%N.length;P.start_emitSelectRange(D[Y])},L=H=>{const N=H.code,{left:D,right:q,up:Y,down:J}=Ke;if([D,q].includes(N)){V(N===D?-1:1),H.preventDefault();return}if([Y,J].includes(N)){const se=N===Y?-1:1;P.start_scrollDown(se),H.preventDefault();return}},{timePickerOptions:P,onSetOption:z,getAvailableTime:j}=f3({getAvailableHours:d,getAvailableMinutes:f,getAvailableSeconds:c}),K=H=>j(H,n.datetimeRole||"",!0),F=H=>H?at(H,n.format).locale(m.value):null,B=H=>H?H.format(n.format):null,I=()=>at(u).locale(m.value);return t("set-picker-option",["isValidValue",C]),t("set-picker-option",["formatToString",B]),t("set-picker-option",["parseUserInput",F]),t("set-picker-option",["handleKeydownInput",L]),t("set-picker-option",["getRangeAvailableTime",K]),t("set-picker-option",["getDefaultValue",I]),(H,N)=>(y(),oe(nn,{name:s(g)},{default:G(()=>[H.actualVisible||H.visible?(y(),M("div",{key:0,class:$(s(p).b("panel"))},[k("div",{class:$([s(p).be("panel","content"),{"has-seconds":s(w)}])},[W(Rf,{ref:"spinner",role:H.datetimeRole||"start","arrow-control":s(a),"show-seconds":s(w),"am-pm-mode":s(b),"spinner-date":H.parsedValue,"disabled-hours":s(r),"disabled-minutes":s(l),"disabled-seconds":s(i),onChange:O,onSetOption:s(z),onSelectRange:T},null,8,["role","arrow-control","show-seconds","am-pm-mode","spinner-date","disabled-hours","disabled-minutes","disabled-seconds","onSetOption"])],2),k("div",{class:$(s(p).be("panel","footer"))},[k("button",{type:"button",class:$([s(p).be("panel","btn"),"cancel"]),onClick:x},Me(s(h)("el.datepicker.cancel")),3),k("button",{type:"button",class:$([s(p).be("panel","btn"),"confirm"]),onClick:N[0]||(N[0]=D=>E())},Me(s(h)("el.datepicker.confirm")),3)],2)],2)):Z("v-if",!0)]),_:1},8,["name"]))}});var Fu=xe(ZD,[["__file","panel-time-pick.vue"]]);const QD=Ee({...c3,parsedValue:{type:X(Array)}}),eF=["disabled"],tF=A({__name:"panel-time-range",props:QD,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,o=(ge,Ae)=>{const U=[];for(let te=ge;te<=Ae;te++)U.push(te);return U},{t:a,lang:r}=_t(),l=me("time"),i=me("picker"),u=Pe("EP_PICKER_BASE"),{arrowControl:d,disabledHours:f,disabledMinutes:c,disabledSeconds:p,defaultValue:h}=u.props,m=S(()=>[l.be("range-picker","body"),l.be("panel","content"),l.is("arrow",d),C.value?"has-seconds":""]),v=S(()=>[l.be("range-picker","body"),l.be("panel","content"),l.is("arrow",d),C.value?"has-seconds":""]),_=S(()=>n.parsedValue[0]),g=S(()=>n.parsedValue[1]),w=h3(n),b=()=>{t("pick",w.value,!1)},C=S(()=>n.format.includes("ss")),x=S(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),E=(ge=!1)=>{t("pick",[_.value,g.value],ge)},O=ge=>{L(ge.millisecond(0),g.value)},T=ge=>{L(_.value,ge.millisecond(0))},V=ge=>{const Ae=ge.map(te=>at(te).locale(r.value)),U=q(Ae);return Ae[0].isSame(U[0])&&Ae[1].isSame(U[1])},L=(ge,Ae)=>{t("pick",[ge,Ae],!0)},P=S(()=>_.value>g.value),z=R([0,2]),j=(ge,Ae)=>{t("select-range",ge,Ae,"min"),z.value=[ge,Ae]},K=S(()=>C.value?11:8),F=(ge,Ae)=>{t("select-range",ge,Ae,"max");const U=s(K);z.value=[ge+U,Ae+U]},B=ge=>{const Ae=C.value?[0,3,6,11,14,17]:[0,3,8,11],U=["hours","minutes"].concat(C.value?["seconds"]:[]),ve=(Ae.indexOf(z.value[0])+ge+Ae.length)%Ae.length,be=Ae.length/2;ve{const Ae=ge.code,{left:U,right:te,up:ve,down:be}=Ke;if([U,te].includes(Ae)){B(Ae===U?-1:1),ge.preventDefault();return}if([ve,be].includes(Ae)){const ue=Ae===ve?-1:1,ye=z.value[0]{const U=f?f(ge):[],te=ge==="start",be=(Ae||(te?g.value:_.value)).hour(),ue=te?o(be+1,23):o(0,be-1);return hd(U,ue)},N=(ge,Ae,U)=>{const te=c?c(ge,Ae):[],ve=Ae==="start",be=U||(ve?g.value:_.value),ue=be.hour();if(ge!==ue)return te;const ye=be.minute(),we=ve?o(ye+1,59):o(0,ye-1);return hd(te,we)},D=(ge,Ae,U,te)=>{const ve=p?p(ge,Ae,U):[],be=U==="start",ue=te||(be?g.value:_.value),ye=ue.hour(),we=ue.minute();if(ge!==ye||Ae!==we)return ve;const Ce=ue.second(),he=be?o(Ce+1,59):o(0,Ce-1);return hd(ve,he)},q=([ge,Ae])=>[Q(ge,"start",!0,Ae),Q(Ae,"end",!1,ge)],{getAvailableHours:Y,getAvailableMinutes:J,getAvailableSeconds:se}=v3(H,N,D),{timePickerOptions:_e,getAvailableTime:Q,onSetOption:le}=f3({getAvailableHours:Y,getAvailableMinutes:J,getAvailableSeconds:se}),ae=ge=>ge?Ie(ge)?ge.map(Ae=>at(Ae,n.format).locale(r.value)):at(ge,n.format).locale(r.value):null,Te=ge=>ge?Ie(ge)?ge.map(Ae=>Ae.format(n.format)):ge.format(n.format):null,ce=()=>{if(Ie(h))return h.map(Ae=>at(Ae).locale(r.value));const ge=at(h).locale(r.value);return[ge,ge.add(60,"m")]};return t("set-picker-option",["formatToString",Te]),t("set-picker-option",["parseUserInput",ae]),t("set-picker-option",["isValidValue",V]),t("set-picker-option",["handleKeydownInput",I]),t("set-picker-option",["getDefaultValue",ce]),t("set-picker-option",["getRangeAvailableTime",q]),(ge,Ae)=>ge.actualVisible?(y(),M("div",{key:0,class:$([s(l).b("range-picker"),s(i).b("panel")])},[k("div",{class:$(s(l).be("range-picker","content"))},[k("div",{class:$(s(l).be("range-picker","cell"))},[k("div",{class:$(s(l).be("range-picker","header"))},Me(s(a)("el.datepicker.startTime")),3),k("div",{class:$(s(m))},[W(Rf,{ref:"minSpinner",role:"start","show-seconds":s(C),"am-pm-mode":s(x),"arrow-control":s(d),"spinner-date":s(_),"disabled-hours":H,"disabled-minutes":N,"disabled-seconds":D,onChange:O,onSetOption:s(le),onSelectRange:j},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2),k("div",{class:$(s(l).be("range-picker","cell"))},[k("div",{class:$(s(l).be("range-picker","header"))},Me(s(a)("el.datepicker.endTime")),3),k("div",{class:$(s(v))},[W(Rf,{ref:"maxSpinner",role:"end","show-seconds":s(C),"am-pm-mode":s(x),"arrow-control":s(d),"spinner-date":s(g),"disabled-hours":H,"disabled-minutes":N,"disabled-seconds":D,onChange:T,onSetOption:s(le),onSelectRange:F},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2)],2),k("div",{class:$(s(l).be("panel","footer"))},[k("button",{type:"button",class:$([s(l).be("panel","btn"),"cancel"]),onClick:Ae[0]||(Ae[0]=U=>b())},Me(s(a)("el.datepicker.cancel")),3),k("button",{type:"button",class:$([s(l).be("panel","btn"),"confirm"]),disabled:s(P),onClick:Ae[1]||(Ae[1]=U=>E())},Me(s(a)("el.datepicker.confirm")),11,eF)],2)],2)):Z("v-if",!0)}});var nF=xe(tF,[["__file","panel-time-range.vue"]]);at.extend(H2);var oF=A({name:"ElTimePicker",install:null,props:{...D2,isRange:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,t){const n=R(),[o,a]=e.isRange?["timerange",nF]:["time",Fu],r=l=>t.emit("update:modelValue",l);return pt("ElPopperOptions",e.popperOptions),t.expose({focus:l=>{var i;(i=n.value)==null||i.handleFocusInput(l)},blur:l=>{var i;(i=n.value)==null||i.handleBlurInput(l)},handleOpen:()=>{var l;(l=n.value)==null||l.handleOpen()},handleClose:()=>{var l;(l=n.value)==null||l.handleClose()}}),()=>{var l;const i=(l=e.format)!=null?l:kf;return W(d3,ft(e,{ref:n,type:o,format:i,"onUpdate:modelValue":r}),{default:u=>W(a,u,null)})}}});const nu=oF;nu.install=e=>{e.component(nu.name,nu)};const aF=nu,rF=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Va(t).map((o,a)=>n-(t-a-1))},lF=e=>{const t=e.daysInMonth();return Va(t).map((n,o)=>o+1)},sF=e=>Va(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),iF=Ee({selectedDay:{type:X(Object)},range:{type:X(Array)},date:{type:X(Object),required:!0},hideHeader:{type:Boolean}}),uF={pick:e=>ct(e)};var S3={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(ma,function(){return function(n,o,a){var r=o.prototype,l=function(c){return c&&(c.indexOf?c:c.s)},i=function(c,p,h,m,v){var _=c.name?c:c.$locale(),g=l(_[p]),w=l(_[h]),b=g||w.map(function(x){return x.slice(0,m)});if(!v)return b;var C=_.weekStart;return b.map(function(x,E){return b[(E+(C||0))%7]})},u=function(){return a.Ls[a.locale()]},d=function(c,p){return c.formats[p]||function(h){return h.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(m,v,_){return v||_.slice(1)})}(c.formats[p.toUpperCase()])},f=function(){var c=this;return{months:function(p){return p?p.format("MMMM"):i(c,"months")},monthsShort:function(p){return p?p.format("MMM"):i(c,"monthsShort","months",3)},firstDayOfWeek:function(){return c.$locale().weekStart||0},weekdays:function(p){return p?p.format("dddd"):i(c,"weekdays")},weekdaysMin:function(p){return p?p.format("dd"):i(c,"weekdaysMin","weekdays",2)},weekdaysShort:function(p){return p?p.format("ddd"):i(c,"weekdaysShort","weekdays",3)},longDateFormat:function(p){return d(c.$locale(),p)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return f.bind(this)()},a.localeData=function(){var c=u();return{firstDayOfWeek:function(){return c.weekStart||0},weekdays:function(){return a.weekdays()},weekdaysShort:function(){return a.weekdaysShort()},weekdaysMin:function(){return a.weekdaysMin()},months:function(){return a.months()},monthsShort:function(){return a.monthsShort()},longDateFormat:function(p){return d(c,p)},meridiem:c.meridiem,ordinal:c.ordinal}},a.months=function(){return i(u(),"months")},a.monthsShort=function(){return i(u(),"monthsShort","months",3)},a.weekdays=function(c){return i(u(),"weekdays",null,null,c)},a.weekdaysShort=function(c){return i(u(),"weekdaysShort","weekdays",3,c)},a.weekdaysMin=function(c){return i(u(),"weekdaysMin","weekdays",2,c)}}})})(S3);var cF=S3.exports;const k3=ga(cF),dF=(e,t)=>{at.extend(k3);const n=at.localeData().firstDayOfWeek(),{t:o,lang:a}=_t(),r=at().locale(a.value),l=S(()=>!!e.range&&!!e.range.length),i=S(()=>{let p=[];if(l.value){const[h,m]=e.range,v=Va(m.date()-h.date()+1).map(w=>({text:h.date()+w,type:"current"}));let _=v.length%7;_=_===0?0:7-_;const g=Va(_).map((w,b)=>({text:b+1,type:"next"}));p=v.concat(g)}else{const h=e.date.startOf("month").day(),m=rF(e.date,(h-n+7)%7).map(w=>({text:w,type:"prev"})),v=lF(e.date).map(w=>({text:w,type:"current"}));p=[...m,...v];const _=7-(p.length%7||7),g=Va(_).map((w,b)=>({text:b+1,type:"next"}));p=p.concat(g)}return sF(p)}),u=S(()=>{const p=n;return p===0?md.map(h=>o(`el.datepicker.weeks.${h}`)):md.slice(p).concat(md.slice(0,p)).map(h=>o(`el.datepicker.weeks.${h}`))}),d=(p,h)=>{switch(h){case"prev":return e.date.startOf("month").subtract(1,"month").date(p);case"next":return e.date.startOf("month").add(1,"month").date(p);case"current":return e.date.date(p)}};return{now:r,isInRange:l,rows:i,weekDays:u,getFormattedDate:d,handlePickDay:({text:p,type:h})=>{const m=d(p,h);t("pick",m)},getSlotData:({text:p,type:h})=>{const m=d(p,h);return{isSelected:m.isSame(e.selectedDay),type:`${h}-month`,day:m.format("YYYY-MM-DD"),date:m.toDate()}}}},fF={key:0},pF=["onClick"],vF=A({name:"DateTable"}),hF=A({...vF,props:iF,emits:uF,setup(e,{expose:t,emit:n}){const o=e,{isInRange:a,now:r,rows:l,weekDays:i,getFormattedDate:u,handlePickDay:d,getSlotData:f}=dF(o,n),c=me("calendar-table"),p=me("calendar-day"),h=({text:m,type:v})=>{const _=[v];if(v==="current"){const g=u(m,v);g.isSame(o.selectedDay,"day")&&_.push(p.is("selected")),g.isSame(r,"day")&&_.push(p.is("today"))}return _};return t({getFormattedDate:u}),(m,v)=>(y(),M("table",{class:$([s(c).b(),s(c).is("range",s(a))]),cellspacing:"0",cellpadding:"0"},[m.hideHeader?Z("v-if",!0):(y(),M("thead",fF,[(y(!0),M(Fe,null,mt(s(i),_=>(y(),M("th",{key:_},Me(_),1))),128))])),k("tbody",null,[(y(!0),M(Fe,null,mt(s(l),(_,g)=>(y(),M("tr",{key:g,class:$({[s(c).e("row")]:!0,[s(c).em("row","hide-border")]:g===0&&m.hideHeader})},[(y(!0),M(Fe,null,mt(_,(w,b)=>(y(),M("td",{key:b,class:$(h(w)),onClick:C=>s(d)(w)},[k("div",{class:$(s(p).b())},[re(m.$slots,"date-cell",{data:s(f)(w)},()=>[k("span",null,Me(w.text),1)])],2)],10,pF))),128))],2))),128))])],2))}});var fh=xe(hF,[["__file","date-table.vue"]]);const mF=(e,t)=>{const n=e.endOf("month"),o=t.startOf("month"),r=n.isSame(o,"week")?o.add(1,"week"):o;return[[e,n],[r.startOf("week"),t]]},gF=(e,t)=>{const n=e.endOf("month"),o=e.add(1,"month").startOf("month"),a=n.isSame(o,"week")?o.add(1,"week"):o,r=a.endOf("month"),l=t.startOf("month"),i=r.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[a.startOf("week"),r],[i.startOf("week"),t]]},yF=(e,t,n)=>{const{lang:o}=_t(),a=R(),r=at().locale(o.value),l=S({get(){return e.modelValue?u.value:a.value},set(_){if(!_)return;a.value=_;const g=_.toDate();t(Tn,g),t(it,g)}}),i=S(()=>{if(!e.range)return[];const _=e.range.map(b=>at(b).locale(o.value)),[g,w]=_;return g.isAfter(w)?[]:g.isSame(w,"month")?h(g,w):g.add(1,"month").month()!==w.month()?[]:h(g,w)}),u=S(()=>e.modelValue?at(e.modelValue).locale(o.value):l.value||(i.value.length?i.value[0][0]:r)),d=S(()=>u.value.subtract(1,"month").date(1)),f=S(()=>u.value.add(1,"month").date(1)),c=S(()=>u.value.subtract(1,"year").date(1)),p=S(()=>u.value.add(1,"year").date(1)),h=(_,g)=>{const w=_.startOf("week"),b=g.endOf("week"),C=w.get("month"),x=b.get("month");return C===x?[[w,b]]:(C+1)%12===x?mF(w,b):C+2===x||(C+1)%11===x?gF(w,b):[]},m=_=>{l.value=_};return{calculateValidatedDateRange:h,date:u,realSelectedDay:l,pickDay:m,selectDate:_=>{const w={"prev-month":d.value,"next-month":f.value,"prev-year":c.value,"next-year":p.value,today:r}[_];w.isSame(u.value,"day")||m(w)},validatedRange:i}},_F=e=>Ie(e)&&e.length===2&&e.every(t=>wr(t)),bF=Ee({modelValue:{type:Date},range:{type:X(Array),validator:_F}}),wF={[it]:e=>wr(e),[Tn]:e=>wr(e)},CF="ElCalendar",SF=A({name:CF}),kF=A({...SF,props:bF,emits:wF,setup(e,{expose:t,emit:n}){const o=e,a=me("calendar"),{calculateValidatedDateRange:r,date:l,pickDay:i,realSelectedDay:u,selectDate:d,validatedRange:f}=yF(o,n),{t:c}=_t(),p=S(()=>{const h=`el.datepicker.month${l.value.format("M")}`;return`${l.value.year()} ${c("el.datepicker.year")} ${c(h)}`});return t({selectedDay:u,pickDay:i,selectDate:d,calculateValidatedDateRange:r}),(h,m)=>(y(),M("div",{class:$(s(a).b())},[k("div",{class:$(s(a).e("header"))},[re(h.$slots,"header",{date:s(p)},()=>[k("div",{class:$(s(a).e("title"))},Me(s(p)),3),s(f).length===0?(y(),M("div",{key:0,class:$(s(a).e("button-group"))},[W(s(a3),null,{default:G(()=>[W(s(rn),{size:"small",onClick:m[0]||(m[0]=v=>s(d)("prev-month"))},{default:G(()=>[vt(Me(s(c)("el.datepicker.prevMonth")),1)]),_:1}),W(s(rn),{size:"small",onClick:m[1]||(m[1]=v=>s(d)("today"))},{default:G(()=>[vt(Me(s(c)("el.datepicker.today")),1)]),_:1}),W(s(rn),{size:"small",onClick:m[2]||(m[2]=v=>s(d)("next-month"))},{default:G(()=>[vt(Me(s(c)("el.datepicker.nextMonth")),1)]),_:1})]),_:1})],2)):Z("v-if",!0)])],2),s(f).length===0?(y(),M("div",{key:0,class:$(s(a).e("body"))},[W(fh,{date:s(l),"selected-day":s(u),onPick:s(i)},na({_:2},[h.$slots["date-cell"]?{name:"date-cell",fn:G(v=>[re(h.$slots,"date-cell",Jo(pl(v)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(y(),M("div",{key:1,class:$(s(a).e("body"))},[(y(!0),M(Fe,null,mt(s(f),(v,_)=>(y(),oe(fh,{key:_,date:v[0],"selected-day":s(u),range:v,"hide-header":_!==0,onPick:s(i)},na({_:2},[h.$slots["date-cell"]?{name:"date-cell",fn:G(g=>[re(h.$slots,"date-cell",Jo(pl(g)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var EF=xe(kF,[["__file","calendar.vue"]]);const xF=lt(EF),MF=Ee({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:X([String,Object,Array]),default:""},bodyClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),$F=A({name:"ElCard"}),TF=A({...$F,props:MF,setup(e){const t=me("card");return(n,o)=>(y(),M("div",{class:$([s(t).b(),s(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(y(),M("div",{key:0,class:$(s(t).e("header"))},[re(n.$slots,"header",{},()=>[vt(Me(n.header),1)])],2)):Z("v-if",!0),k("div",{class:$([s(t).e("body"),n.bodyClass]),style:De(n.bodyStyle)},[re(n.$slots,"default")],6),n.$slots.footer||n.footer?(y(),M("div",{key:1,class:$(s(t).e("footer"))},[re(n.$slots,"footer",{},()=>[vt(Me(n.footer),1)])],2)):Z("v-if",!0)],2))}});var AF=xe(TF,[["__file","card.vue"]]);const OF=lt(AF),NF=Ee({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:{type:Boolean,default:!1}}),IF={change:(e,t)=>[e,t].every(Ye)},E3=Symbol("carouselContextKey"),ph=300,RF=(e,t,n)=>{const{children:o,addChild:a,removeChild:r}=I2(rt(),"ElCarouselItem"),l=fn(),i=R(-1),u=R(null),d=R(!1),f=R(),c=R(0),p=R(!0),h=R(!0),m=R(!1),v=S(()=>e.arrow!=="never"&&!s(w)),_=S(()=>o.value.some(Q=>Q.props.label.toString().length>0)),g=S(()=>e.type==="card"),w=S(()=>e.direction==="vertical"),b=S(()=>e.height!=="auto"?{height:e.height}:{height:`${c.value}px`,overflow:"hidden"}),C=mr(Q=>{L(Q)},ph,{trailing:!0}),x=mr(Q=>{N(Q)},ph),E=Q=>p.value?i.value<=1?Q<=1:Q>1:!0;function O(){u.value&&(clearInterval(u.value),u.value=null)}function T(){e.interval<=0||!e.autoplay||u.value||(u.value=setInterval(()=>V(),e.interval))}const V=()=>{h.value||(m.value=!0),h.value=!1,i.valuece.props.name===Q);Te.length>0&&(Q=o.value.indexOf(Te[0]))}if(Q=Number(Q),Number.isNaN(Q)||Q!==Math.floor(Q))return;const le=o.value.length,ae=i.value;Q<0?i.value=e.loop?le-1:0:Q>=le?i.value=e.loop?0:le-1:i.value=Q,ae===i.value&&P(ae),Y()}function P(Q){o.value.forEach((le,ae)=>{le.translateItem(ae,i.value,Q)})}function z(Q,le){var ae,Te,ce,ge;const Ae=s(o),U=Ae.length;if(U===0||!Q.states.inStage)return!1;const te=le+1,ve=le-1,be=U-1,ue=Ae[be].states.active,ye=Ae[0].states.active,we=(Te=(ae=Ae[te])==null?void 0:ae.states)==null?void 0:Te.active,Ce=(ge=(ce=Ae[ve])==null?void 0:ce.states)==null?void 0:ge.active;return le===be&&ye||we?"left":le===0&&ue||Ce?"right":!1}function j(){d.value=!0,e.pauseOnHover&&O()}function K(){d.value=!1,T()}function F(){m.value=!1}function B(Q){s(w)||o.value.forEach((le,ae)=>{Q===z(le,ae)&&(le.states.hover=!0)})}function I(){s(w)||o.value.forEach(Q=>{Q.states.hover=!1})}function H(Q){Q!==i.value&&(h.value||(m.value=!0)),i.value=Q}function N(Q){e.trigger==="hover"&&Q!==i.value&&(i.value=Q,h.value||(m.value=!0))}function D(){L(i.value-1)}function q(){L(i.value+1)}function Y(){O(),e.pauseOnHover||T()}function J(Q){e.height==="auto"&&(c.value=Q)}function se(){var Q;const le=(Q=l.default)==null?void 0:Q.call(l);if(!le)return null;const ae=La(le),Te="ElCarouselItem",ce=ae.filter(ge=>zt(ge)&&ge.type.name===Te);return(ce==null?void 0:ce.length)===2&&e.loop&&!g.value?(p.value=!0,ce):(p.value=!1,null)}pe(()=>i.value,(Q,le)=>{P(le),p.value&&(Q=Q%2,le=le%2),le>-1&&t("change",Q,le)}),pe(()=>e.autoplay,Q=>{Q?T():O()}),pe(()=>e.loop,()=>{L(i.value)}),pe(()=>e.interval,()=>{Y()});const _e=Rt();return et(()=>{pe(()=>o.value,()=>{o.value.length>0&&L(e.initialIndex)},{immediate:!0}),_e.value=Kt(f.value,()=>{P()}),T()}),It(()=>{O(),f.value&&_e.value&&_e.value.stop()}),pt(E3,{root:f,isCardType:g,isVertical:w,items:o,loop:e.loop,addItem:a,removeItem:r,setActiveItem:L,setContainerHeight:J}),{root:f,activeIndex:i,arrowDisplay:v,hasLabel:_,hover:d,isCardType:g,isTransitioning:m,items:o,isVertical:w,containerStyle:b,isItemsTwoLength:p,handleButtonEnter:B,handleTransitionEnd:F,handleButtonLeave:I,handleIndicatorClick:H,handleMouseEnter:j,handleMouseLeave:K,setActiveItem:L,prev:D,next:q,PlaceholderItem:se,isTwoLengthShow:E,throttledArrowClick:C,throttledIndicatorHover:x}},PF=["aria-label"],LF=["aria-label"],VF=["onMouseenter","onClick"],BF=["aria-label"],zF={key:0},HF={key:3,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},DF=k("defs",null,[k("filter",{id:"elCarouselHorizontal"},[k("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),k("filter",{id:"elCarouselVertical"},[k("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])],-1),FF=[DF],KF="ElCarousel",WF=A({name:KF}),jF=A({...WF,props:NF,emits:IF,setup(e,{expose:t,emit:n}){const o=e,{root:a,activeIndex:r,arrowDisplay:l,hasLabel:i,hover:u,isCardType:d,items:f,isVertical:c,containerStyle:p,handleButtonEnter:h,handleButtonLeave:m,isTransitioning:v,handleIndicatorClick:_,handleMouseEnter:g,handleMouseLeave:w,handleTransitionEnd:b,setActiveItem:C,prev:x,next:E,PlaceholderItem:O,isTwoLengthShow:T,throttledArrowClick:V,throttledIndicatorHover:L}=RF(o,n),P=me("carousel"),{t:z}=_t(),j=S(()=>{const B=[P.b(),P.m(o.direction)];return s(d)&&B.push(P.m("card")),B}),K=S(()=>{const B=[P.e("container")];return o.motionBlur&&s(v)&&B.push(s(c)?`${P.namespace.value}-transitioning-vertical`:`${P.namespace.value}-transitioning`),B}),F=S(()=>{const B=[P.e("indicators"),P.em("indicators",o.direction)];return s(i)&&B.push(P.em("indicators","labels")),o.indicatorPosition==="outside"&&B.push(P.em("indicators","outside")),s(c)&&B.push(P.em("indicators","right")),B});return t({setActiveItem:C,prev:x,next:E}),(B,I)=>(y(),M("div",{ref_key:"root",ref:a,class:$(s(j)),onMouseenter:I[7]||(I[7]=Ge((...H)=>s(g)&&s(g)(...H),["stop"])),onMouseleave:I[8]||(I[8]=Ge((...H)=>s(w)&&s(w)(...H),["stop"]))},[s(l)?(y(),oe(nn,{key:0,name:"carousel-arrow-left",persisted:""},{default:G(()=>[Qe(k("button",{type:"button",class:$([s(P).e("arrow"),s(P).em("arrow","left")]),"aria-label":s(z)("el.carousel.leftArrow"),onMouseenter:I[0]||(I[0]=H=>s(h)("left")),onMouseleave:I[1]||(I[1]=(...H)=>s(m)&&s(m)(...H)),onClick:I[2]||(I[2]=Ge(H=>s(V)(s(r)-1),["stop"]))},[W(s(Be),null,{default:G(()=>[W(s(aa))]),_:1})],42,PF),[[bt,(B.arrow==="always"||s(u))&&(o.loop||s(r)>0)]])]),_:1})):Z("v-if",!0),s(l)?(y(),oe(nn,{key:1,name:"carousel-arrow-right",persisted:""},{default:G(()=>[Qe(k("button",{type:"button",class:$([s(P).e("arrow"),s(P).em("arrow","right")]),"aria-label":s(z)("el.carousel.rightArrow"),onMouseenter:I[3]||(I[3]=H=>s(h)("right")),onMouseleave:I[4]||(I[4]=(...H)=>s(m)&&s(m)(...H)),onClick:I[5]||(I[5]=Ge(H=>s(V)(s(r)+1),["stop"]))},[W(s(Be),null,{default:G(()=>[W(s(Sn))]),_:1})],42,LF),[[bt,(B.arrow==="always"||s(u))&&(o.loop||s(r)s(b)&&s(b)(...H))},[W(s(O)),re(B.$slots,"default")],38),B.indicatorPosition!=="none"?(y(),M("ul",{key:2,class:$(s(F))},[(y(!0),M(Fe,null,mt(s(f),(H,N)=>Qe((y(),M("li",{key:N,class:$([s(P).e("indicator"),s(P).em("indicator",B.direction),s(P).is("active",N===s(r))]),onMouseenter:D=>s(L)(N),onClick:Ge(D=>s(_)(N),["stop"])},[k("button",{class:$(s(P).e("button")),"aria-label":s(z)("el.carousel.indicator",{index:N+1})},[s(i)?(y(),M("span",zF,Me(H.props.label),1)):Z("v-if",!0)],10,BF)],42,VF)),[[bt,s(T)(N)]])),128))],2)):Z("v-if",!0),o.motionBlur?(y(),M("svg",HF,FF)):Z("v-if",!0)],34))}});var qF=xe(jF,[["__file","carousel.vue"]]);const UF=Ee({name:{type:String,default:""},label:{type:[String,Number],default:""}}),YF=(e,t)=>{const n=Pe(E3),o=rt(),a=.83,r=R(),l=R(!1),i=R(0),u=R(1),d=R(!1),f=R(!1),c=R(!1),p=R(!1),{isCardType:h,isVertical:m}=n;function v(C,x,E){const O=E-1,T=x-1,V=x+1,L=E/2;return x===0&&C===O?-1:x===O&&C===0?E:C=L?E+1:C>V&&C-x>=L?-2:C}function _(C,x){var E,O;const T=s(m)?((E=n.root.value)==null?void 0:E.offsetHeight)||0:((O=n.root.value)==null?void 0:O.offsetWidth)||0;return c.value?T*((2-a)*(C-x)+1)/4:C{var O;const T=s(h),V=(O=n.items.value.length)!=null?O:Number.NaN,L=C===x;!T&&!Zt(E)&&(p.value=L||C===E),!L&&V>2&&n.loop&&(C=v(C,x,V));const P=s(m);d.value=L,T?(c.value=Math.round(Math.abs(C-x))<=1,i.value=_(C,x),u.value=s(d)?1:a):i.value=g(C,x,P),f.value=!0,L&&r.value&&n.setContainerHeight(r.value.offsetHeight)};function b(){if(n&&s(h)){const C=n.items.value.findIndex(({uid:x})=>x===o.uid);n.setActiveItem(C)}}return et(()=>{n.addItem({props:e,states:wt({hover:l,translate:i,scale:u,active:d,ready:f,inStage:c,animating:p}),uid:o.uid,translateItem:w})}),Ua(()=>{n.removeItem(o.uid)}),{carouselItemRef:r,active:d,animating:p,hover:l,inStage:c,isVertical:m,translate:i,isCardType:h,scale:u,ready:f,handleItemClick:b}},GF=A({name:"ElCarouselItem"}),XF=A({...GF,props:UF,setup(e){const t=e,n=me("carousel"),{carouselItemRef:o,active:a,animating:r,hover:l,inStage:i,isVertical:u,translate:d,isCardType:f,scale:c,ready:p,handleItemClick:h}=YF(t),m=S(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",i.value),n.is("hover",l.value),n.is("animating",r.value),{[n.em("item","card")]:f.value,[n.em("item","card-vertical")]:f.value&&u.value}]),v=S(()=>{const g=`${`translate${s(u)?"Y":"X"}`}(${s(d)}px)`,w=`scale(${s(c)})`;return{transform:[g,w].join(" ")}});return(_,g)=>Qe((y(),M("div",{ref_key:"carouselItemRef",ref:o,class:$(s(m)),style:De(s(v)),onClick:g[0]||(g[0]=(...w)=>s(h)&&s(h)(...w))},[s(f)?Qe((y(),M("div",{key:0,class:$(s(n).e("mask"))},null,2)),[[bt,!s(a)]]):Z("v-if",!0),re(_.$slots,"default")],6)),[[bt,s(p)]])}});var x3=xe(XF,[["__file","carousel-item.vue"]]);const JF=lt(qF,{CarouselItem:x3}),ZF=Dt(x3),M3={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},controls:{type:String,default:void 0},border:Boolean,size:cn,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0}},$3={[it]:e=>Ze(e)||Ye(e)||Qt(e),change:e=>Ze(e)||Ye(e)||Qt(e)},Hl=Symbol("checkboxGroupContextKey"),QF=({model:e,isChecked:t})=>{const n=Pe(Hl,void 0),o=S(()=>{var r,l;const i=(r=n==null?void 0:n.max)==null?void 0:r.value,u=(l=n==null?void 0:n.min)==null?void 0:l.value;return!Zt(i)&&e.value.length>=i&&!t.value||!Zt(u)&&e.value.length<=u&&t.value});return{isDisabled:Dn(S(()=>(n==null?void 0:n.disabled.value)||o.value)),isLimitDisabled:o}},eK=(e,{model:t,isLimitExceeded:n,hasOwnLabel:o,isDisabled:a,isLabeledByFormItem:r})=>{const l=Pe(Hl,void 0),{formItem:i}=Nn(),{emit:u}=rt();function d(m){var v,_,g,w;return[!0,e.trueValue,e.trueLabel].includes(m)?(_=(v=e.trueValue)!=null?v:e.trueLabel)!=null?_:!0:(w=(g=e.falseValue)!=null?g:e.falseLabel)!=null?w:!1}function f(m,v){u("change",d(m),v)}function c(m){if(n.value)return;const v=m.target;u("change",d(v.checked),m)}async function p(m){n.value||!o.value&&!a.value&&r.value&&(m.composedPath().some(g=>g.tagName==="LABEL")||(t.value=d([!1,e.falseValue,e.falseLabel].includes(t.value)),await We(),f(t.value,m)))}const h=S(()=>(l==null?void 0:l.validateEvent)||e.validateEvent);return pe(()=>e.modelValue,()=>{h.value&&(i==null||i.validate("change").catch(m=>void 0))}),{handleChange:c,onClickRoot:p}},tK=e=>{const t=R(!1),{emit:n}=rt(),o=Pe(Hl,void 0),a=S(()=>Zt(o)===!1),r=R(!1),l=S({get(){var i,u;return a.value?(i=o==null?void 0:o.modelValue)==null?void 0:i.value:(u=e.modelValue)!=null?u:t.value},set(i){var u,d;a.value&&Ie(i)?(r.value=((u=o==null?void 0:o.max)==null?void 0:u.value)!==void 0&&i.length>(o==null?void 0:o.max.value)&&i.length>l.value.length,r.value===!1&&((d=o==null?void 0:o.changeEvent)==null||d.call(o,i))):(n(it,i),t.value=i)}});return{model:l,isGroup:a,isLimitExceeded:r}},nK=(e,t,{model:n})=>{const o=Pe(Hl,void 0),a=R(!1),r=S(()=>Er(e.value)?e.label:e.value),l=S(()=>{const f=n.value;return Qt(f)?f:Ie(f)?ct(r.value)?f.map(xt).some(c=>wn(c,r.value)):f.map(xt).includes(r.value):f!=null?f===e.trueValue||f===e.trueLabel:!!f}),i=an(S(()=>{var f;return(f=o==null?void 0:o.size)==null?void 0:f.value}),{prop:!0}),u=an(S(()=>{var f;return(f=o==null?void 0:o.size)==null?void 0:f.value})),d=S(()=>!!t.default||!Er(r.value));return{checkboxButtonSize:i,isChecked:l,isFocused:a,checkboxSize:u,hasOwnLabel:d,actualValue:r}},T3=(e,t)=>{const{formItem:n}=Nn(),{model:o,isGroup:a,isLimitExceeded:r}=tK(e),{isFocused:l,isChecked:i,checkboxButtonSize:u,checkboxSize:d,hasOwnLabel:f,actualValue:c}=nK(e,t,{model:o}),{isDisabled:p}=QF({model:o,isChecked:i}),{inputId:h,isLabeledByFormItem:m}=Ho(e,{formItemContext:n,disableIdGeneration:f,disableIdManagement:a}),{handleChange:v,onClickRoot:_}=eK(e,{model:o,isLimitExceeded:r,hasOwnLabel:f,isDisabled:p,isLabeledByFormItem:m});return(()=>{function w(){var b,C;Ie(o.value)&&!o.value.includes(c.value)?o.value.push(c.value):o.value=(C=(b=e.trueValue)!=null?b:e.trueLabel)!=null?C:!0}e.checked&&w()})(),gr({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},S(()=>a.value&&Er(e.value))),gr({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},S(()=>!!e.trueLabel)),gr({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},S(()=>!!e.falseLabel)),{inputId:h,isLabeledByFormItem:m,isChecked:i,isDisabled:p,isFocused:l,checkboxButtonSize:u,checkboxSize:d,hasOwnLabel:f,model:o,actualValue:c,handleChange:v,onClickRoot:_}},oK=["id","indeterminate","name","tabindex","disabled","true-value","false-value"],aK=["id","indeterminate","disabled","value","name","tabindex"],rK=A({name:"ElCheckbox"}),lK=A({...rK,props:M3,emits:$3,setup(e){const t=e,n=fn(),{inputId:o,isLabeledByFormItem:a,isChecked:r,isDisabled:l,isFocused:i,checkboxSize:u,hasOwnLabel:d,model:f,actualValue:c,handleChange:p,onClickRoot:h}=T3(t,n),m=me("checkbox"),v=S(()=>[m.b(),m.m(u.value),m.is("disabled",l.value),m.is("bordered",t.border),m.is("checked",r.value)]),_=S(()=>[m.e("input"),m.is("disabled",l.value),m.is("checked",r.value),m.is("indeterminate",t.indeterminate),m.is("focus",i.value)]);return(g,w)=>(y(),oe(ut(!s(d)&&s(a)?"span":"label"),{class:$(s(v)),"aria-controls":g.indeterminate?g.controls:null,onClick:s(h)},{default:G(()=>{var b,C;return[k("span",{class:$(s(_))},[g.trueValue||g.falseValue||g.trueLabel||g.falseLabel?Qe((y(),M("input",{key:0,id:s(o),"onUpdate:modelValue":w[0]||(w[0]=x=>Pt(f)?f.value=x:null),class:$(s(m).e("original")),type:"checkbox",indeterminate:g.indeterminate,name:g.name,tabindex:g.tabindex,disabled:s(l),"true-value":(b=g.trueValue)!=null?b:g.trueLabel,"false-value":(C=g.falseValue)!=null?C:g.falseLabel,onChange:w[1]||(w[1]=(...x)=>s(p)&&s(p)(...x)),onFocus:w[2]||(w[2]=x=>i.value=!0),onBlur:w[3]||(w[3]=x=>i.value=!1),onClick:w[4]||(w[4]=Ge(()=>{},["stop"]))},null,42,oK)),[[Ou,s(f)]]):Qe((y(),M("input",{key:1,id:s(o),"onUpdate:modelValue":w[5]||(w[5]=x=>Pt(f)?f.value=x:null),class:$(s(m).e("original")),type:"checkbox",indeterminate:g.indeterminate,disabled:s(l),value:s(c),name:g.name,tabindex:g.tabindex,onChange:w[6]||(w[6]=(...x)=>s(p)&&s(p)(...x)),onFocus:w[7]||(w[7]=x=>i.value=!0),onBlur:w[8]||(w[8]=x=>i.value=!1),onClick:w[9]||(w[9]=Ge(()=>{},["stop"]))},null,42,aK)),[[Ou,s(f)]]),k("span",{class:$(s(m).e("inner"))},null,2)],2),s(d)?(y(),M("span",{key:0,class:$(s(m).e("label"))},[re(g.$slots,"default"),g.$slots.default?Z("v-if",!0):(y(),M(Fe,{key:0},[vt(Me(g.label),1)],64))],2)):Z("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var sK=xe(lK,[["__file","checkbox.vue"]]);const iK=["name","tabindex","disabled","true-value","false-value"],uK=["name","tabindex","disabled","value"],cK=A({name:"ElCheckboxButton"}),dK=A({...cK,props:M3,emits:$3,setup(e){const t=e,n=fn(),{isFocused:o,isChecked:a,isDisabled:r,checkboxButtonSize:l,model:i,actualValue:u,handleChange:d}=T3(t,n),f=Pe(Hl,void 0),c=me("checkbox"),p=S(()=>{var m,v,_,g;const w=(v=(m=f==null?void 0:f.fill)==null?void 0:m.value)!=null?v:"";return{backgroundColor:w,borderColor:w,color:(g=(_=f==null?void 0:f.textColor)==null?void 0:_.value)!=null?g:"",boxShadow:w?`-1px 0 0 0 ${w}`:void 0}}),h=S(()=>[c.b("button"),c.bm("button",l.value),c.is("disabled",r.value),c.is("checked",a.value),c.is("focus",o.value)]);return(m,v)=>{var _,g;return y(),M("label",{class:$(s(h))},[m.trueValue||m.falseValue||m.trueLabel||m.falseLabel?Qe((y(),M("input",{key:0,"onUpdate:modelValue":v[0]||(v[0]=w=>Pt(i)?i.value=w:null),class:$(s(c).be("button","original")),type:"checkbox",name:m.name,tabindex:m.tabindex,disabled:s(r),"true-value":(_=m.trueValue)!=null?_:m.trueLabel,"false-value":(g=m.falseValue)!=null?g:m.falseLabel,onChange:v[1]||(v[1]=(...w)=>s(d)&&s(d)(...w)),onFocus:v[2]||(v[2]=w=>o.value=!0),onBlur:v[3]||(v[3]=w=>o.value=!1),onClick:v[4]||(v[4]=Ge(()=>{},["stop"]))},null,42,iK)),[[Ou,s(i)]]):Qe((y(),M("input",{key:1,"onUpdate:modelValue":v[5]||(v[5]=w=>Pt(i)?i.value=w:null),class:$(s(c).be("button","original")),type:"checkbox",name:m.name,tabindex:m.tabindex,disabled:s(r),value:s(u),onChange:v[6]||(v[6]=(...w)=>s(d)&&s(d)(...w)),onFocus:v[7]||(v[7]=w=>o.value=!0),onBlur:v[8]||(v[8]=w=>o.value=!1),onClick:v[9]||(v[9]=Ge(()=>{},["stop"]))},null,42,uK)),[[Ou,s(i)]]),m.$slots.default||m.label?(y(),M("span",{key:2,class:$(s(c).be("button","inner")),style:De(s(a)?s(p):void 0)},[re(m.$slots,"default",{},()=>[vt(Me(m.label),1)])],6)):Z("v-if",!0)],2)}}});var A3=xe(dK,[["__file","checkbox-button.vue"]]);const fK=Ee({modelValue:{type:X(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:cn,label:String,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0}}),pK={[it]:e=>Ie(e),change:e=>Ie(e)},vK=A({name:"ElCheckboxGroup"}),hK=A({...vK,props:fK,emits:pK,setup(e,{emit:t}){const n=e,o=me("checkbox"),{formItem:a}=Nn(),{inputId:r,isLabeledByFormItem:l}=Ho(n,{formItemContext:a}),i=async d=>{t(it,d),await We(),t("change",d)},u=S({get(){return n.modelValue},set(d){i(d)}});return pt(Hl,{...Zo(un(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:i}),pe(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(d=>void 0))}),(d,f)=>{var c;return y(),oe(ut(d.tag),{id:s(r),class:$(s(o).b("group")),role:"group","aria-label":s(l)?void 0:d.label||"checkbox-group","aria-labelledby":s(l)?(c=s(a))==null?void 0:c.labelId:void 0},{default:G(()=>[re(d.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var O3=xe(hK,[["__file","checkbox-group.vue"]]);const vo=lt(sK,{CheckboxButton:A3,CheckboxGroup:O3}),mK=Dt(A3),N3=Dt(O3),I3=Ee({modelValue:{type:[String,Number,Boolean],default:void 0},size:cn,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),gK=Ee({...I3,border:Boolean}),R3={[it]:e=>Ze(e)||Ye(e)||Qt(e),[Bt]:e=>Ze(e)||Ye(e)||Qt(e)},P3=Symbol("radioGroupKey"),L3=(e,t)=>{const n=R(),o=Pe(P3,void 0),a=S(()=>!!o),r=S(()=>Er(e.value)?e.label:e.value),l=S({get(){return a.value?o.modelValue:e.modelValue},set(c){a.value?o.changeEvent(c):t&&t(it,c),n.value.checked=e.modelValue===r.value}}),i=an(S(()=>o==null?void 0:o.size)),u=Dn(S(()=>o==null?void 0:o.disabled)),d=R(!1),f=S(()=>u.value||a.value&&l.value!==r.value?-1:0);return gr({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},S(()=>a.value&&Er(e.value))),{radioRef:n,isGroup:a,radioGroup:o,focus:d,size:i,disabled:u,tabIndex:f,modelValue:l,actualValue:r}},yK=["value","name","disabled"],_K=A({name:"ElRadio"}),bK=A({..._K,props:gK,emits:R3,setup(e,{emit:t}){const n=e,o=me("radio"),{radioRef:a,radioGroup:r,focus:l,size:i,disabled:u,modelValue:d,actualValue:f}=L3(n,t);function c(){We(()=>t("change",d.value))}return(p,h)=>{var m;return y(),M("label",{class:$([s(o).b(),s(o).is("disabled",s(u)),s(o).is("focus",s(l)),s(o).is("bordered",p.border),s(o).is("checked",s(d)===s(f)),s(o).m(s(i))])},[k("span",{class:$([s(o).e("input"),s(o).is("disabled",s(u)),s(o).is("checked",s(d)===s(f))])},[Qe(k("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":h[0]||(h[0]=v=>Pt(d)?d.value=v:null),class:$(s(o).e("original")),value:s(f),name:p.name||((m=s(r))==null?void 0:m.name),disabled:s(u),type:"radio",onFocus:h[1]||(h[1]=v=>l.value=!0),onBlur:h[2]||(h[2]=v=>l.value=!1),onChange:c,onClick:h[3]||(h[3]=Ge(()=>{},["stop"]))},null,42,yK),[[$4,s(d)]]),k("span",{class:$(s(o).e("inner"))},null,2)],2),k("span",{class:$(s(o).e("label")),onKeydown:h[4]||(h[4]=Ge(()=>{},["stop"]))},[re(p.$slots,"default",{},()=>[vt(Me(p.label),1)])],34)],2)}}});var wK=xe(bK,[["__file","radio.vue"]]);const CK=Ee({...I3}),SK=["value","name","disabled"],kK=A({name:"ElRadioButton"}),EK=A({...kK,props:CK,setup(e){const t=e,n=me("radio"),{radioRef:o,focus:a,size:r,disabled:l,modelValue:i,radioGroup:u,actualValue:d}=L3(t),f=S(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(c,p)=>{var h;return y(),M("label",{class:$([s(n).b("button"),s(n).is("active",s(i)===s(d)),s(n).is("disabled",s(l)),s(n).is("focus",s(a)),s(n).bm("button",s(r))])},[Qe(k("input",{ref_key:"radioRef",ref:o,"onUpdate:modelValue":p[0]||(p[0]=m=>Pt(i)?i.value=m:null),class:$(s(n).be("button","original-radio")),value:s(d),type:"radio",name:c.name||((h=s(u))==null?void 0:h.name),disabled:s(l),onFocus:p[1]||(p[1]=m=>a.value=!0),onBlur:p[2]||(p[2]=m=>a.value=!1),onClick:p[3]||(p[3]=Ge(()=>{},["stop"]))},null,42,SK),[[$4,s(i)]]),k("span",{class:$(s(n).be("button","inner")),style:De(s(i)===s(d)?s(f):{}),onKeydown:p[4]||(p[4]=Ge(()=>{},["stop"]))},[re(c.$slots,"default",{},()=>[vt(Me(c.label),1)])],38)],2)}}});var V3=xe(EK,[["__file","radio-button.vue"]]);const xK=Ee({id:{type:String,default:void 0},size:cn,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},label:{type:String,default:void 0},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0}}),MK=R3,$K=["id","aria-label","aria-labelledby"],TK=A({name:"ElRadioGroup"}),AK=A({...TK,props:xK,emits:MK,setup(e,{emit:t}){const n=e,o=me("radio"),a=kn(),r=R(),{formItem:l}=Nn(),{inputId:i,isLabeledByFormItem:u}=Ho(n,{formItemContext:l}),d=c=>{t(it,c),We(()=>t("change",c))};et(()=>{const c=r.value.querySelectorAll("[type=radio]"),p=c[0];!Array.from(c).some(h=>h.checked)&&p&&(p.tabIndex=0)});const f=S(()=>n.name||a.value);return pt(P3,wt({...un(n),changeEvent:d,name:f})),pe(()=>n.modelValue,()=>{n.validateEvent&&(l==null||l.validate("change").catch(c=>void 0))}),(c,p)=>(y(),M("div",{id:s(i),ref_key:"radioGroupRef",ref:r,class:$(s(o).b("group")),role:"radiogroup","aria-label":s(u)?void 0:c.label||"radio-group","aria-labelledby":s(u)?s(l).labelId:void 0},[re(c.$slots,"default")],10,$K))}});var B3=xe(AK,[["__file","radio-group.vue"]]);const z3=lt(wK,{RadioButton:V3,RadioGroup:B3}),OK=Dt(B3),NK=Dt(V3);var IK=A({name:"NodeContent",setup(){return{ns:me("cascader-node")}},render(){const{ns:e}=this,{node:t,panel:n}=this.$parent,{data:o,label:a}=t,{renderLabelFn:r}=n;return qe("span",{class:e.e("label")},r?r({node:t,data:o}):a)}});const F2=Symbol(),RK=A({name:"ElCascaderNode",components:{ElCheckbox:vo,ElRadio:z3,NodeContent:IK,ElIcon:Be,Check:Bl,Loading:pa,ArrowRight:Sn},props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=Pe(F2),o=me("cascader-node"),a=S(()=>n.isHoverMenu),r=S(()=>n.config.multiple),l=S(()=>n.config.checkStrictly),i=S(()=>{var E;return(E=n.checkedNodes[0])==null?void 0:E.uid}),u=S(()=>e.node.isDisabled),d=S(()=>e.node.isLeaf),f=S(()=>l.value&&!d.value||!u.value),c=S(()=>h(n.expandingNode)),p=S(()=>l.value&&n.checkedNodes.some(h)),h=E=>{var O;const{level:T,uid:V}=e.node;return((O=E==null?void 0:E.pathNodes[T-1])==null?void 0:O.uid)===V},m=()=>{c.value||n.expandNode(e.node)},v=E=>{const{node:O}=e;E!==O.checked&&n.handleCheckChange(O,E)},_=()=>{n.lazyLoad(e.node,()=>{d.value||m()})},g=E=>{a.value&&(w(),!d.value&&t("expand",E))},w=()=>{const{node:E}=e;!f.value||E.loading||(E.loaded?m():_())},b=()=>{a.value&&!d.value||(d.value&&!u.value&&!l.value&&!r.value?x(!0):w())},C=E=>{l.value?(v(E),e.node.loaded&&m()):x(E)},x=E=>{e.node.loaded?(v(E),!l.value&&m()):_()};return{panel:n,isHoverMenu:a,multiple:r,checkStrictly:l,checkedNodeId:i,isDisabled:u,isLeaf:d,expandable:f,inExpandingPath:c,inCheckedPath:p,ns:o,handleHoverExpand:g,handleExpand:w,handleClick:b,handleCheck:x,handleSelectCheck:C}}}),PK=["id","aria-haspopup","aria-owns","aria-expanded","tabindex"],LK=k("span",null,null,-1);function VK(e,t,n,o,a,r){const l=nt("el-checkbox"),i=nt("el-radio"),u=nt("check"),d=nt("el-icon"),f=nt("node-content"),c=nt("loading"),p=nt("arrow-right");return y(),M("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!e.isLeaf,"aria-owns":e.isLeaf?null:e.menuId,"aria-expanded":e.inExpandingPath,tabindex:e.expandable?-1:void 0,class:$([e.ns.b(),e.ns.is("selectable",e.checkStrictly),e.ns.is("active",e.node.checked),e.ns.is("disabled",!e.expandable),e.inExpandingPath&&"in-active-path",e.inCheckedPath&&"in-checked-path"]),onMouseenter:t[2]||(t[2]=(...h)=>e.handleHoverExpand&&e.handleHoverExpand(...h)),onFocus:t[3]||(t[3]=(...h)=>e.handleHoverExpand&&e.handleHoverExpand(...h)),onClick:t[4]||(t[4]=(...h)=>e.handleClick&&e.handleClick(...h))},[Z(" prefix "),e.multiple?(y(),oe(l,{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:e.isDisabled,onClick:t[0]||(t[0]=Ge(()=>{},["stop"])),"onUpdate:modelValue":e.handleSelectCheck},null,8,["model-value","indeterminate","disabled","onUpdate:modelValue"])):e.checkStrictly?(y(),oe(i,{key:1,"model-value":e.checkedNodeId,label:e.node.uid,disabled:e.isDisabled,"onUpdate:modelValue":e.handleSelectCheck,onClick:t[1]||(t[1]=Ge(()=>{},["stop"]))},{default:G(()=>[Z(` + Add an empty element to avoid render label, + do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485 + `),LK]),_:1},8,["model-value","label","disabled","onUpdate:modelValue"])):e.isLeaf&&e.node.checked?(y(),oe(d,{key:2,class:$(e.ns.e("prefix"))},{default:G(()=>[W(u)]),_:1},8,["class"])):Z("v-if",!0),Z(" content "),W(f),Z(" postfix "),e.isLeaf?Z("v-if",!0):(y(),M(Fe,{key:3},[e.node.loading?(y(),oe(d,{key:0,class:$([e.ns.is("loading"),e.ns.e("postfix")])},{default:G(()=>[W(c)]),_:1},8,["class"])):(y(),oe(d,{key:1,class:$(["arrow-right",e.ns.e("postfix")])},{default:G(()=>[W(p)]),_:1},8,["class"]))],64))],42,PK)}var BK=xe(RK,[["render",VK],["__file","node.vue"]]);const zK=A({name:"ElCascaderMenu",components:{Loading:pa,ElIcon:Be,ElScrollbar:ha,ElCascaderNode:BK},props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0}},setup(e){const t=rt(),n=me("cascader-menu"),{t:o}=_t(),a=kn();let r=null,l=null;const i=Pe(F2),u=R(null),d=S(()=>!e.nodes.length),f=S(()=>!i.initialLoaded),c=S(()=>`${a.value}-${e.index}`),p=_=>{r=_.target},h=_=>{if(!(!i.isHoverMenu||!r||!u.value))if(r.contains(_.target)){m();const g=t.vnode.el,{left:w}=g.getBoundingClientRect(),{offsetWidth:b,offsetHeight:C}=g,x=_.clientX-w,E=r.offsetTop,O=E+r.offsetHeight;u.value.innerHTML=` + + + `}else l||(l=window.setTimeout(v,i.config.hoverThreshold))},m=()=>{l&&(clearTimeout(l),l=null)},v=()=>{u.value&&(u.value.innerHTML="",m())};return{ns:n,panel:i,hoverZone:u,isEmpty:d,isLoading:f,menuId:c,t:o,handleExpand:p,handleMouseMove:h,clearHoverZone:v}}});function HK(e,t,n,o,a,r){const l=nt("el-cascader-node"),i=nt("loading"),u=nt("el-icon"),d=nt("el-scrollbar");return y(),oe(d,{key:e.menuId,tag:"ul",role:"menu",class:$(e.ns.b()),"wrap-class":e.ns.e("wrap"),"view-class":[e.ns.e("list"),e.ns.is("empty",e.isEmpty)],onMousemove:e.handleMouseMove,onMouseleave:e.clearHoverZone},{default:G(()=>{var f;return[(y(!0),M(Fe,null,mt(e.nodes,c=>(y(),oe(l,{key:c.uid,node:c,"menu-id":e.menuId,onExpand:e.handleExpand},null,8,["node","menu-id","onExpand"]))),128)),e.isLoading?(y(),M("div",{key:0,class:$(e.ns.e("empty-text"))},[W(u,{size:"14",class:$(e.ns.is("loading"))},{default:G(()=>[W(i)]),_:1},8,["class"]),vt(" "+Me(e.t("el.cascader.loading")),1)],2)):e.isEmpty?(y(),M("div",{key:1,class:$(e.ns.e("empty-text"))},Me(e.t("el.cascader.noData")),3)):(f=e.panel)!=null&&f.isHoverMenu?(y(),M("svg",{key:2,ref:"hoverZone",class:$(e.ns.e("hover-zone"))},null,2)):Z("v-if",!0)]}),_:1},8,["class","wrap-class","view-class","onMousemove","onMouseleave"])}var DK=xe(zK,[["render",HK],["__file","menu.vue"]]);let FK=0;const KK=e=>{const t=[e];let{parent:n}=e;for(;n;)t.unshift(n),n=n.parent;return t};let Pf=class Lf{constructor(t,n,o,a=!1){this.data=t,this.config=n,this.parent=o,this.root=a,this.uid=FK++,this.checked=!1,this.indeterminate=!1,this.loading=!1;const{value:r,label:l,children:i}=n,u=t[i],d=KK(this);this.level=a?0:o?o.level+1:1,this.value=t[r],this.label=t[l],this.pathNodes=d,this.pathValues=d.map(f=>f.value),this.pathLabels=d.map(f=>f.label),this.childrenData=u,this.children=(u||[]).map(f=>new Lf(f,n,this)),this.loaded=!n.lazy||this.isLeaf||!Qn(u)}get isDisabled(){const{data:t,parent:n,config:o}=this,{disabled:a,checkStrictly:r}=o;return(Xe(a)?a(t,this):!!t[a])||!r&&(n==null?void 0:n.isDisabled)}get isLeaf(){const{data:t,config:n,childrenData:o,loaded:a}=this,{lazy:r,leaf:l}=n,i=Xe(l)?l(t,this):t[l];return Zt(i)?r&&!a?!1:!(Array.isArray(o)&&o.length):!!i}get valueByOption(){return this.config.emitPath?this.pathValues:this.value}appendChild(t){const{childrenData:n,children:o}=this,a=new Lf(t,this.config,this);return Array.isArray(n)?n.push(t):this.childrenData=[t],o.push(a),a}calcText(t,n){const o=t?this.pathLabels.join(n):this.label;return this.text=o,o}broadcast(t,...n){const o=`onParent${Ao(t)}`;this.children.forEach(a=>{a&&(a.broadcast(t,...n),a[o]&&a[o](...n))})}emit(t,...n){const{parent:o}=this,a=`onChild${Ao(t)}`;o&&(o[a]&&o[a](...n),o.emit(t,...n))}onParentCheck(t){this.isDisabled||this.setCheckState(t)}onChildCheck(){const{children:t}=this,n=t.filter(a=>!a.isDisabled),o=n.length?n.every(a=>a.checked):!1;this.setCheckState(o)}setCheckState(t){const n=this.children.length,o=this.children.reduce((a,r)=>{const l=r.checked?1:r.indeterminate?.5:0;return a+l},0);this.checked=this.loaded&&this.children.filter(a=>!a.isDisabled).every(a=>a.loaded&&a.checked)&&t,this.indeterminate=this.loaded&&o!==n&&o>0}doCheck(t){if(this.checked===t)return;const{checkStrictly:n,multiple:o}=this.config;n||!o?this.checked=t:(this.broadcast("check",t),this.setCheckState(t),this.emit("check"))}};const Vf=(e,t)=>e.reduce((n,o)=>(o.isLeaf?n.push(o):(!t&&n.push(o),n=n.concat(Vf(o.children,t))),n),[]);class vh{constructor(t,n){this.config=n;const o=(t||[]).map(a=>new Pf(a,this.config));this.nodes=o,this.allNodes=Vf(o,!1),this.leafNodes=Vf(o,!0)}getNodes(){return this.nodes}getFlattedNodes(t){return t?this.leafNodes:this.allNodes}appendNode(t,n){const o=n?n.appendChild(t):new Pf(t,this.config);n||this.nodes.push(o),this.allNodes.push(o),o.isLeaf&&this.leafNodes.push(o)}appendNodes(t,n){t.forEach(o=>this.appendNode(o,n))}getNodeByValue(t,n=!1){return!t&&t!==0?null:this.getFlattedNodes(n).find(a=>wn(a.value,t)||wn(a.pathValues,t))||null}getSameNode(t){return t&&this.getFlattedNodes(!1).find(({value:o,level:a})=>wn(t.value,o)&&t.level===a)||null}}const H3=Ee({modelValue:{type:X([Number,String,Array])},options:{type:X(Array),default:()=>[]},props:{type:X(Object),default:()=>({})}}),WK={expandTrigger:"click",multiple:!1,checkStrictly:!1,emitPath:!0,lazy:!1,lazyLoad:Et,value:"value",label:"label",children:"children",leaf:"leaf",disabled:"disabled",hoverThreshold:500},jK=e=>S(()=>({...WK,...e.props})),hh=e=>{if(!e)return 0;const t=e.id.split("-");return Number(t[t.length-2])},qK=e=>{if(!e)return;const t=e.querySelector("input");t?t.click():R4(e)&&e.click()},UK=(e,t)=>{const n=t.slice(0),o=n.map(r=>r.uid),a=e.reduce((r,l)=>{const i=o.indexOf(l.uid);return i>-1&&(r.push(l),n.splice(i,1),o.splice(i,1)),r},[]);return a.push(...n),a},YK=A({name:"ElCascaderPanel",components:{ElCascaderMenu:DK},props:{...H3,border:{type:Boolean,default:!0},renderLabel:Function},emits:[it,Bt,"close","expand-change"],setup(e,{emit:t,slots:n}){let o=!1;const a=me("cascader"),r=jK(e);let l=null;const i=R(!0),u=R([]),d=R(null),f=R([]),c=R(null),p=R([]),h=S(()=>r.value.expandTrigger==="hover"),m=S(()=>e.renderLabel||n.default),v=()=>{const{options:z}=e,j=r.value;o=!1,l=new vh(z,j),f.value=[l.getNodes()],j.lazy&&Qn(e.options)?(i.value=!1,_(void 0,K=>{K&&(l=new vh(K,j),f.value=[l.getNodes()]),i.value=!0,T(!1,!0)})):T(!1,!0)},_=(z,j)=>{const K=r.value;z=z||new Pf({},K,void 0,!0),z.loading=!0;const F=B=>{const I=z,H=I.root?null:I;B&&(l==null||l.appendNodes(B,H)),I.loading=!1,I.loaded=!0,I.childrenData=I.childrenData||[],j&&j(B)};K.lazyLoad(z,F)},g=(z,j)=>{var K;const{level:F}=z,B=f.value.slice(0,F);let I;z.isLeaf?I=z.pathNodes[F-2]:(I=z,B.push(z.children)),((K=c.value)==null?void 0:K.uid)!==(I==null?void 0:I.uid)&&(c.value=z,f.value=B,!j&&t("expand-change",(z==null?void 0:z.pathValues)||[]))},w=(z,j,K=!0)=>{const{checkStrictly:F,multiple:B}=r.value,I=p.value[0];o=!0,!B&&(I==null||I.doCheck(!1)),z.doCheck(j),O(),K&&!B&&!F&&t("close"),!K&&!B&&!F&&b(z)},b=z=>{z&&(z=z.parent,b(z),z&&g(z))},C=z=>l==null?void 0:l.getFlattedNodes(z),x=z=>{var j;return(j=C(z))==null?void 0:j.filter(K=>K.checked!==!1)},E=()=>{p.value.forEach(z=>z.doCheck(!1)),O(),f.value=f.value.slice(0,1),c.value=null,t("expand-change",[])},O=()=>{var z;const{checkStrictly:j,multiple:K}=r.value,F=p.value,B=x(!j),I=UK(F,B),H=I.map(N=>N.valueByOption);p.value=I,d.value=K?H:(z=H[0])!=null?z:null},T=(z=!1,j=!1)=>{const{modelValue:K}=e,{lazy:F,multiple:B,checkStrictly:I}=r.value,H=!I;if(!(!i.value||o||!j&&wn(K,d.value)))if(F&&!z){const D=p1(Gk(jn(K))).map(q=>l==null?void 0:l.getNodeByValue(q)).filter(q=>!!q&&!q.loaded&&!q.loading);D.length?D.forEach(q=>{_(q,()=>T(!1,j))}):T(!0,j)}else{const N=B?jn(K):[K],D=p1(N.map(q=>l==null?void 0:l.getNodeByValue(q,H)));V(D,j),d.value=Ru(K)}},V=(z,j=!0)=>{const{checkStrictly:K}=r.value,F=p.value,B=z.filter(N=>!!N&&(K||N.isLeaf)),I=l==null?void 0:l.getSameNode(c.value),H=j&&I||B[0];H?H.pathNodes.forEach(N=>g(N,!0)):c.value=null,F.forEach(N=>N.doCheck(!1)),wt(B).forEach(N=>N.doCheck(!0)),p.value=B,We(L)},L=()=>{gt&&u.value.forEach(z=>{const j=z==null?void 0:z.$el;if(j){const K=j.querySelector(`.${a.namespace.value}-scrollbar__wrap`),F=j.querySelector(`.${a.b("node")}.${a.is("active")}`)||j.querySelector(`.${a.b("node")}.in-active-path`);Ag(K,F)}})},P=z=>{const j=z.target,{code:K}=z;switch(K){case Ke.up:case Ke.down:{z.preventDefault();const F=K===Ke.up?-1:1;Gi(P4(j,F,`.${a.b("node")}[tabindex="-1"]`));break}case Ke.left:{z.preventDefault();const F=u.value[hh(j)-1],B=F==null?void 0:F.$el.querySelector(`.${a.b("node")}[aria-expanded="true"]`);Gi(B);break}case Ke.right:{z.preventDefault();const F=u.value[hh(j)+1],B=F==null?void 0:F.$el.querySelector(`.${a.b("node")}[tabindex="-1"]`);Gi(B);break}case Ke.enter:qK(j);break}};return pt(F2,wt({config:r,expandingNode:c,checkedNodes:p,isHoverMenu:h,initialLoaded:i,renderLabelFn:m,lazyLoad:_,expandNode:g,handleCheckChange:w})),pe([r,()=>e.options],v,{deep:!0,immediate:!0}),pe(()=>e.modelValue,()=>{o=!1,T()},{deep:!0}),pe(()=>d.value,z=>{wn(z,e.modelValue)||(t(it,z),t(Bt,z))}),n4(()=>u.value=[]),et(()=>!Qn(e.modelValue)&&T()),{ns:a,menuList:u,menus:f,checkedNodes:p,handleKeyDown:P,handleCheckChange:w,getFlattedNodes:C,getCheckedNodes:x,clearCheckedNodes:E,calculateCheckedValue:O,scrollToExpandingNode:L}}});function GK(e,t,n,o,a,r){const l=nt("el-cascader-menu");return y(),M("div",{class:$([e.ns.b("panel"),e.ns.is("bordered",e.border)]),onKeydown:t[0]||(t[0]=(...i)=>e.handleKeyDown&&e.handleKeyDown(...i))},[(y(!0),M(Fe,null,mt(e.menus,(i,u)=>(y(),oe(l,{key:u,ref_for:!0,ref:d=>e.menuList[u]=d,index:u,nodes:[...i]},null,8,["index","nodes"]))),128))],34)}var ou=xe(YK,[["render",GK],["__file","index.vue"]]);ou.install=e=>{e.component(ou.name,ou)};const D3=ou,XK=D3,Lc=Ee({type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:String,size:{type:String,values:zo},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),JK={close:e=>e instanceof MouseEvent,click:e=>e instanceof MouseEvent},ZK=A({name:"ElTag"}),QK=A({...ZK,props:Lc,emits:JK,setup(e,{emit:t}){const n=e,o=an(),a=me("tag"),r=S(()=>{const{type:u,hit:d,effect:f,closable:c,round:p}=n;return[a.b(),a.is("closable",c),a.m(u||"primary"),a.m(o.value),a.m(f),a.is("hit",d),a.is("round",p)]}),l=u=>{t("close",u)},i=u=>{t("click",u)};return(u,d)=>u.disableTransitions?(y(),M("span",{key:0,class:$(s(r)),style:De({backgroundColor:u.color}),onClick:i},[k("span",{class:$(s(a).e("content"))},[re(u.$slots,"default")],2),u.closable?(y(),oe(s(Be),{key:0,class:$(s(a).e("close")),onClick:Ge(l,["stop"])},{default:G(()=>[W(s(uo))]),_:1},8,["class","onClick"])):Z("v-if",!0)],6)):(y(),oe(nn,{key:1,name:`${s(a).namespace.value}-zoom-in-center`,appear:""},{default:G(()=>[k("span",{class:$(s(r)),style:De({backgroundColor:u.color}),onClick:i},[k("span",{class:$(s(a).e("content"))},[re(u.$slots,"default")],2),u.closable?(y(),oe(s(Be),{key:0,class:$(s(a).e("close")),onClick:Ge(l,["stop"])},{default:G(()=>[W(s(uo))]),_:1},8,["class","onClick"])):Z("v-if",!0)],6)]),_:3},8,["name"]))}});var eW=xe(QK,[["__file","tag.vue"]]);const Ls=lt(eW),tW=Ee({...H3,size:cn,placeholder:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:{type:X(Function),default:(e,t)=>e.text.includes(t)},separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,maxCollapseTags:{type:Number,default:1},collapseTagsTooltip:{type:Boolean,default:!1},debounce:{type:Number,default:300},beforeFilter:{type:X(Function),default:()=>!0},popperClass:{type:String,default:""},teleported:pn.teleported,tagType:{...Lc.type,default:"info"},validateEvent:{type:Boolean,default:!0}}),nW={[it]:e=>!!e||e===null,[Bt]:e=>!!e||e===null,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,visibleChange:e=>Qt(e),expandChange:e=>!!e,removeTag:e=>!!e},oW={key:0},aW=["placeholder","onKeydown"],rW=["onClick"],lW="ElCascader",sW=A({name:lW}),iW=A({...sW,props:tW,emits:nW,setup(e,{expose:t,emit:n}){const o=e,a={modifiers:[{name:"arrowPosition",enabled:!0,phase:"main",fn:({state:ee})=>{const{modifiersData:ie,placement:ke}=ee;["right","left","bottom","top"].includes(ke)||(ie.arrow.x=35)},requires:["arrow"]}]},r=Pr();let l=0,i=0;const u=me("cascader"),d=me("input"),{t:f}=_t(),{form:c,formItem:p}=Nn(),h=R(null),m=R(null),v=R(null),_=R(null),g=R(null),w=R(!1),b=R(!1),C=R(!1),x=R(!1),E=R(""),O=R(""),T=R([]),V=R([]),L=R([]),P=R(!1),z=S(()=>r.style),j=S(()=>o.disabled||(c==null?void 0:c.disabled)),K=S(()=>o.placeholder||f("el.cascader.placeholder")),F=S(()=>O.value||T.value.length>0||P.value?"":K.value),B=an(),I=S(()=>["small"].includes(B.value)?"small":"default"),H=S(()=>!!o.props.multiple),N=S(()=>!o.filterable||H.value),D=S(()=>H.value?O.value:E.value),q=S(()=>{var ee;return((ee=_.value)==null?void 0:ee.checkedNodes)||[]}),Y=S(()=>!o.clearable||j.value||C.value||!b.value?!1:!!q.value.length),J=S(()=>{const{showAllLevels:ee,separator:ie}=o,ke=q.value;return ke.length?H.value?"":ke[0].calcText(ee,ie):""}),se=S(()=>(p==null?void 0:p.validateState)||""),_e=S({get(){return Ru(o.modelValue)},set(ee){n(it,ee),n(Bt,ee),o.validateEvent&&(p==null||p.validate("change").catch(ie=>void 0))}}),Q=S(()=>[u.b(),u.m(B.value),u.is("disabled",j.value),r.class]),le=S(()=>[d.e("icon"),"icon-arrow-down",u.is("reverse",w.value)]),ae=S(()=>u.is("focus",w.value||x.value)),Te=S(()=>{var ee,ie;return(ie=(ee=h.value)==null?void 0:ee.popperRef)==null?void 0:ie.contentRef}),ce=ee=>{var ie,ke,ne;j.value||(ee=ee??!w.value,ee!==w.value&&(w.value=ee,(ke=(ie=m.value)==null?void 0:ie.input)==null||ke.setAttribute("aria-expanded",`${ee}`),ee?(ge(),We((ne=_.value)==null?void 0:ne.scrollToExpandingNode)):o.filterable&&He(),n("visibleChange",ee)))},ge=()=>{We(()=>{var ee;(ee=h.value)==null||ee.updatePopper()})},Ae=()=>{C.value=!1},U=ee=>{const{showAllLevels:ie,separator:ke}=o;return{node:ee,key:ee.uid,text:ee.calcText(ie,ke),hitState:!1,closable:!j.value&&!ee.isDisabled,isCollapseTag:!1}},te=ee=>{var ie;const ke=ee.node;ke.doCheck(!1),(ie=_.value)==null||ie.calculateCheckedValue(),n("removeTag",ke.valueByOption)},ve=()=>{if(!H.value)return;const ee=q.value,ie=[],ke=[];if(ee.forEach(ne=>ke.push(U(ne))),V.value=ke,ee.length){ee.slice(0,o.maxCollapseTags).forEach(tt=>ie.push(U(tt)));const ne=ee.slice(o.maxCollapseTags),ze=ne.length;ze&&(o.collapseTags?ie.push({key:-1,text:`+ ${ze}`,closable:!1,isCollapseTag:!0}):ne.forEach(tt=>ie.push(U(tt))))}T.value=ie},be=()=>{var ee,ie;const{filterMethod:ke,showAllLevels:ne,separator:ze}=o,tt=(ie=(ee=_.value)==null?void 0:ee.getFlattedNodes(!o.props.checkStrictly))==null?void 0:ie.filter(St=>St.isDisabled?!1:(St.calcText(ne,ze),ke(St,D.value)));H.value&&(T.value.forEach(St=>{St.hitState=!1}),V.value.forEach(St=>{St.hitState=!1})),C.value=!0,L.value=tt,ge()},ue=()=>{var ee;let ie;C.value&&g.value?ie=g.value.$el.querySelector(`.${u.e("suggestion-item")}`):ie=(ee=_.value)==null?void 0:ee.$el.querySelector(`.${u.b("node")}[tabindex="-1"]`),ie&&(ie.focus(),!C.value&&ie.click())},ye=()=>{var ee,ie;const ke=(ee=m.value)==null?void 0:ee.input,ne=v.value,ze=(ie=g.value)==null?void 0:ie.$el;if(!(!gt||!ke)){if(ze){const tt=ze.querySelector(`.${u.e("suggestion-list")}`);tt.style.minWidth=`${ke.offsetWidth}px`}if(ne){const{offsetHeight:tt}=ne,St=T.value.length>0?`${Math.max(tt+6,l)}px`:`${l}px`;ke.style.height=St,ge()}}},we=ee=>{var ie;return(ie=_.value)==null?void 0:ie.getCheckedNodes(ee)},Ce=ee=>{ge(),n("expandChange",ee)},he=ee=>{var ie;const ke=(ie=ee.target)==null?void 0:ie.value;if(ee.type==="compositionend")P.value=!1,We(()=>fe(ke));else{const ne=ke[ke.length-1]||"";P.value=!p2(ne)}},Se=ee=>{if(!P.value)switch(ee.code){case Ke.enter:ce();break;case Ke.down:ce(!0),We(ue),ee.preventDefault();break;case Ke.esc:w.value===!0&&(ee.preventDefault(),ee.stopPropagation(),ce(!1));break;case Ke.tab:ce(!1);break}},Re=()=>{var ee;(ee=_.value)==null||ee.clearCheckedNodes(),!w.value&&o.filterable&&He(),ce(!1)},He=()=>{const{value:ee}=J;E.value=ee,O.value=ee},de=ee=>{var ie,ke;const{checked:ne}=ee;H.value?(ie=_.value)==null||ie.handleCheckChange(ee,!ne,!1):(!ne&&((ke=_.value)==null||ke.handleCheckChange(ee,!0,!1)),ce(!1))},Le=ee=>{const ie=ee.target,{code:ke}=ee;switch(ke){case Ke.up:case Ke.down:{const ne=ke===Ke.up?-1:1;Gi(P4(ie,ne,`.${u.e("suggestion-item")}[tabindex="-1"]`));break}case Ke.enter:ie.click();break}},Ue=()=>{const ee=T.value,ie=ee[ee.length-1];i=O.value?0:i+1,!(!ie||!i||o.collapseTags&&ee.length>1)&&(ie.hitState?te(ie):ie.hitState=!0)},ot=ee=>{const ie=ee.target,ke=u.e("search-input");ie.className===ke&&(x.value=!0),n("focus",ee)},dt=ee=>{x.value=!1,n("blur",ee)},je=Hn(()=>{const{value:ee}=D;if(!ee)return;const ie=o.beforeFilter(ee);ys(ie)?ie.then(be).catch(()=>{}):ie!==!1?be():Ae()},o.debounce),fe=(ee,ie)=>{!w.value&&ce(!0),!(ie!=null&&ie.isComposing)&&(ee?je():Ae())},$e=ee=>Number.parseFloat(h5(d.cssVarName("input-height"),ee).value)-2;return pe(C,ge),pe([q,j],ve),pe(T,()=>{We(()=>ye())}),pe(B,async()=>{await We();const ee=m.value.input;l=$e(ee)||l,ye()}),pe(J,He,{immediate:!0}),et(()=>{const ee=m.value.input,ie=$e(ee);l=ee.offsetHeight||ie,Kt(ee,ye)}),t({getCheckedNodes:we,cascaderPanelRef:_,togglePopperVisible:ce,contentRef:Te}),(ee,ie)=>(y(),oe(s(En),{ref_key:"tooltipRef",ref:h,visible:w.value,teleported:ee.teleported,"popper-class":[s(u).e("dropdown"),ee.popperClass],"popper-options":a,"fallback-placements":["bottom-start","bottom","top-start","top","right","left"],"stop-popper-mouse-event":!1,"gpu-acceleration":!1,placement:"bottom-start",transition:`${s(u).namespace.value}-zoom-in-top`,effect:"light",pure:"",persistent:"",onHide:Ae},{default:G(()=>[Qe((y(),M("div",{class:$(s(Q)),style:De(s(z)),onClick:ie[5]||(ie[5]=()=>ce(s(N)?void 0:!0)),onKeydown:Se,onMouseenter:ie[6]||(ie[6]=ke=>b.value=!0),onMouseleave:ie[7]||(ie[7]=ke=>b.value=!1)},[W(s(mn),{ref_key:"input",ref:m,modelValue:E.value,"onUpdate:modelValue":ie[1]||(ie[1]=ke=>E.value=ke),placeholder:s(F),readonly:s(N),disabled:s(j),"validate-event":!1,size:s(B),class:$(s(ae)),tabindex:s(H)&&ee.filterable&&!s(j)?-1:void 0,onCompositionstart:he,onCompositionupdate:he,onCompositionend:he,onFocus:ot,onBlur:dt,onInput:fe},{suffix:G(()=>[s(Y)?(y(),oe(s(Be),{key:"clear",class:$([s(d).e("icon"),"icon-circle-close"]),onClick:Ge(Re,["stop"])},{default:G(()=>[W(s(fa))]),_:1},8,["class","onClick"])):(y(),oe(s(Be),{key:"arrow-down",class:$(s(le)),onClick:ie[0]||(ie[0]=Ge(ke=>ce(),["stop"]))},{default:G(()=>[W(s(Bo))]),_:1},8,["class"]))]),_:1},8,["modelValue","placeholder","readonly","disabled","size","class","tabindex"]),s(H)?(y(),M("div",{key:0,ref_key:"tagWrapper",ref:v,class:$([s(u).e("tags"),s(u).is("validate",!!s(se))])},[(y(!0),M(Fe,null,mt(T.value,ke=>(y(),oe(s(Ls),{key:ke.key,type:ee.tagType,size:s(I),hit:ke.hitState,closable:ke.closable,"disable-transitions":"",onClose:ne=>te(ke)},{default:G(()=>[ke.isCollapseTag===!1?(y(),M("span",oW,Me(ke.text),1)):(y(),oe(s(En),{key:1,disabled:w.value||!ee.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],placement:"bottom",effect:"light"},{default:G(()=>[k("span",null,Me(ke.text),1)]),content:G(()=>[k("div",{class:$(s(u).e("collapse-tags"))},[(y(!0),M(Fe,null,mt(V.value.slice(ee.maxCollapseTags),(ne,ze)=>(y(),M("div",{key:ze,class:$(s(u).e("collapse-tag"))},[(y(),oe(s(Ls),{key:ne.key,class:"in-tooltip",type:ee.tagType,size:s(I),hit:ne.hitState,closable:ne.closable,"disable-transitions":"",onClose:tt=>te(ne)},{default:G(()=>[k("span",null,Me(ne.text),1)]),_:2},1032,["type","size","hit","closable","onClose"]))],2))),128))],2)]),_:2},1032,["disabled"]))]),_:2},1032,["type","size","hit","closable","onClose"]))),128)),ee.filterable&&!s(j)?Qe((y(),M("input",{key:0,"onUpdate:modelValue":ie[2]||(ie[2]=ke=>O.value=ke),type:"text",class:$(s(u).e("search-input")),placeholder:s(J)?"":s(K),onInput:ie[3]||(ie[3]=ke=>fe(O.value,ke)),onClick:ie[4]||(ie[4]=Ge(ke=>ce(!0),["stop"])),onKeydown:Mt(Ue,["delete"]),onCompositionstart:he,onCompositionupdate:he,onCompositionend:he,onFocus:ot,onBlur:dt},null,42,aW)),[[B0,O.value]]):Z("v-if",!0)],2)):Z("v-if",!0)],38)),[[s(sa),()=>ce(!1),s(Te)]])]),content:G(()=>[Qe(W(s(D3),{ref_key:"cascaderPanelRef",ref:_,modelValue:s(_e),"onUpdate:modelValue":ie[8]||(ie[8]=ke=>Pt(_e)?_e.value=ke:null),options:ee.options,props:o.props,border:!1,"render-label":ee.$slots.default,onExpandChange:Ce,onClose:ie[9]||(ie[9]=ke=>ee.$nextTick(()=>ce(!1)))},null,8,["modelValue","options","props","render-label"]),[[bt,!C.value]]),ee.filterable?Qe((y(),oe(s(ha),{key:0,ref_key:"suggestionPanel",ref:g,tag:"ul",class:$(s(u).e("suggestion-panel")),"view-class":s(u).e("suggestion-list"),onKeydown:Le},{default:G(()=>[L.value.length?(y(!0),M(Fe,{key:0},mt(L.value,ke=>(y(),M("li",{key:ke.uid,class:$([s(u).e("suggestion-item"),s(u).is("checked",ke.checked)]),tabindex:-1,onClick:ne=>de(ke)},[k("span",null,Me(ke.text),1),ke.checked?(y(),oe(s(Be),{key:0},{default:G(()=>[W(s(Bl))]),_:1})):Z("v-if",!0)],10,rW))),128)):re(ee.$slots,"empty",{key:1},()=>[k("li",{class:$(s(u).e("empty-text"))},Me(s(f)("el.cascader.noMatch")),3)])]),_:3},8,["class","view-class"])),[[bt,C.value]]):Z("v-if",!0)]),_:3},8,["visible","teleported","popper-class","transition"]))}});var au=xe(iW,[["__file","cascader.vue"]]);au.install=e=>{e.component(au.name,au)};const uW=au,cW=uW,dW=Ee({checked:{type:Boolean,default:!1},type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"}}),fW={"update:checked":e=>Qt(e),[Bt]:e=>Qt(e)},pW=A({name:"ElCheckTag"}),vW=A({...pW,props:dW,emits:fW,setup(e,{emit:t}){const n=e,o=me("check-tag"),a=S(()=>[o.b(),o.is("checked",n.checked),o.m(n.type||"primary")]),r=()=>{const l=!n.checked;t(Bt,l),t("update:checked",l)};return(l,i)=>(y(),M("span",{class:$(s(a)),onClick:r},[re(l.$slots,"default")],2))}});var hW=xe(vW,[["__file","check-tag.vue"]]);const mW=lt(hW),F3=Symbol("rowContextKey"),gW=["start","center","end","space-around","space-between","space-evenly"],yW=["top","middle","bottom"],_W=Ee({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:gW,default:"start"},align:{type:String,values:yW}}),bW=A({name:"ElRow"}),wW=A({...bW,props:_W,setup(e){const t=e,n=me("row"),o=S(()=>t.gutter);pt(F3,{gutter:o});const a=S(()=>{const l={};return t.gutter&&(l.marginRight=l.marginLeft=`-${t.gutter/2}px`),l}),r=S(()=>[n.b(),n.is(`justify-${t.justify}`,t.justify!=="start"),n.is(`align-${t.align}`,!!t.align)]);return(l,i)=>(y(),oe(ut(l.tag),{class:$(s(r)),style:De(s(a))},{default:G(()=>[re(l.$slots,"default")]),_:3},8,["class","style"]))}});var CW=xe(wW,[["__file","row.vue"]]);const SW=lt(CW),kW=Ee({tag:{type:String,default:"div"},span:{type:Number,default:24},offset:{type:Number,default:0},pull:{type:Number,default:0},push:{type:Number,default:0},xs:{type:X([Number,Object]),default:()=>Ht({})},sm:{type:X([Number,Object]),default:()=>Ht({})},md:{type:X([Number,Object]),default:()=>Ht({})},lg:{type:X([Number,Object]),default:()=>Ht({})},xl:{type:X([Number,Object]),default:()=>Ht({})}}),EW=A({name:"ElCol"}),xW=A({...EW,props:kW,setup(e){const t=e,{gutter:n}=Pe(F3,{gutter:S(()=>0)}),o=me("col"),a=S(()=>{const l={};return n.value&&(l.paddingLeft=l.paddingRight=`${n.value/2}px`),l}),r=S(()=>{const l=[];return["span","offset","pull","push"].forEach(d=>{const f=t[d];Ye(f)&&(d==="span"?l.push(o.b(`${t[d]}`)):f>0&&l.push(o.b(`${d}-${t[d]}`)))}),["xs","sm","md","lg","xl"].forEach(d=>{Ye(t[d])?l.push(o.b(`${d}-${t[d]}`)):ct(t[d])&&Object.entries(t[d]).forEach(([f,c])=>{l.push(f!=="span"?o.b(`${d}-${f}-${c}`):o.b(`${d}-${c}`))})}),n.value&&l.push(o.is("guttered")),[o.b(),l]});return(l,i)=>(y(),oe(ut(l.tag),{class:$(s(r)),style:De(s(a))},{default:G(()=>[re(l.$slots,"default")]),_:3},8,["class","style"]))}});var MW=xe(xW,[["__file","col.vue"]]);const $W=lt(MW),mh=e=>Ye(e)||Ze(e)||Ie(e),TW=Ee({accordion:Boolean,modelValue:{type:X([Array,String,Number]),default:()=>Ht([])}}),AW={[it]:mh,[Bt]:mh},K3=Symbol("collapseContextKey"),OW=(e,t)=>{const n=R(kr(e.modelValue)),o=r=>{n.value=r;const l=e.accordion?n.value[0]:n.value;t(it,l),t(Bt,l)},a=r=>{if(e.accordion)o([n.value[0]===r?"":r]);else{const l=[...n.value],i=l.indexOf(r);i>-1?l.splice(i,1):l.push(r),o(l)}};return pe(()=>e.modelValue,()=>n.value=kr(e.modelValue),{deep:!0}),pt(K3,{activeNames:n,handleItemClick:a}),{activeNames:n,setActiveNames:o}},NW=()=>{const e=me("collapse");return{rootKls:S(()=>e.b())}},IW=A({name:"ElCollapse"}),RW=A({...IW,props:TW,emits:AW,setup(e,{expose:t,emit:n}){const o=e,{activeNames:a,setActiveNames:r}=OW(o,n),{rootKls:l}=NW();return t({activeNames:a,setActiveNames:r}),(i,u)=>(y(),M("div",{class:$(s(l))},[re(i.$slots,"default")],2))}});var PW=xe(RW,[["__file","collapse.vue"]]);const LW=A({name:"ElCollapseTransition"}),VW=A({...LW,setup(e){const t=me("collapse-transition"),n=a=>{a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom},o={beforeEnter(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.style.height&&(a.dataset.elExistsHeight=a.style.height),a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0},enter(a){requestAnimationFrame(()=>{a.dataset.oldOverflow=a.style.overflow,a.dataset.elExistsHeight?a.style.maxHeight=a.dataset.elExistsHeight:a.scrollHeight!==0?a.style.maxHeight=`${a.scrollHeight}px`:a.style.maxHeight=0,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom,a.style.overflow="hidden"})},afterEnter(a){a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow},enterCancelled(a){n(a)},beforeLeave(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.dataset.oldOverflow=a.style.overflow,a.style.maxHeight=`${a.scrollHeight}px`,a.style.overflow="hidden"},leave(a){a.scrollHeight!==0&&(a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0)},afterLeave(a){n(a)},leaveCancelled(a){n(a)}};return(a,r)=>(y(),oe(nn,ft({name:s(t).b()},$b(o)),{default:G(()=>[re(a.$slots,"default")]),_:3},16,["name"]))}});var ru=xe(VW,[["__file","collapse-transition.vue"]]);ru.install=e=>{e.component(ru.name,ru)};const Vc=ru,BW=Vc,zW=Ee({title:{type:String,default:""},name:{type:X([String,Number]),default:void 0},disabled:Boolean}),HW=e=>{const t=Pe(K3),{namespace:n}=me("collapse"),o=R(!1),a=R(!1),r=x2(),l=S(()=>r.current++),i=S(()=>{var p;return(p=e.name)!=null?p:`${n.value}-id-${r.prefix}-${s(l)}`}),u=S(()=>t==null?void 0:t.activeNames.value.includes(s(i)));return{focusing:o,id:l,isActive:u,handleFocus:()=>{setTimeout(()=>{a.value?a.value=!1:o.value=!0},50)},handleHeaderClick:()=>{e.disabled||(t==null||t.handleItemClick(s(i)),o.value=!1,a.value=!0)},handleEnterClick:()=>{t==null||t.handleItemClick(s(i))}}},DW=(e,{focusing:t,isActive:n,id:o})=>{const a=me("collapse"),r=S(()=>[a.b("item"),a.is("active",s(n)),a.is("disabled",e.disabled)]),l=S(()=>[a.be("item","header"),a.is("active",s(n)),{focusing:s(t)&&!e.disabled}]),i=S(()=>[a.be("item","arrow"),a.is("active",s(n))]),u=S(()=>a.be("item","wrap")),d=S(()=>a.be("item","content")),f=S(()=>a.b(`content-${s(o)}`)),c=S(()=>a.b(`head-${s(o)}`));return{arrowKls:i,headKls:l,rootKls:r,itemWrapperKls:u,itemContentKls:d,scopedContentId:f,scopedHeadId:c}},FW=["id","aria-expanded","aria-controls","aria-describedby","tabindex"],KW=["id","aria-hidden","aria-labelledby"],WW=A({name:"ElCollapseItem"}),jW=A({...WW,props:zW,setup(e,{expose:t}){const n=e,{focusing:o,id:a,isActive:r,handleFocus:l,handleHeaderClick:i,handleEnterClick:u}=HW(n),{arrowKls:d,headKls:f,rootKls:c,itemWrapperKls:p,itemContentKls:h,scopedContentId:m,scopedHeadId:v}=DW(n,{focusing:o,isActive:r,id:a});return t({isActive:r}),(_,g)=>(y(),M("div",{class:$(s(c))},[k("button",{id:s(v),class:$(s(f)),"aria-expanded":s(r),"aria-controls":s(m),"aria-describedby":s(m),tabindex:_.disabled?-1:0,type:"button",onClick:g[0]||(g[0]=(...w)=>s(i)&&s(i)(...w)),onKeydown:g[1]||(g[1]=Mt(Ge((...w)=>s(u)&&s(u)(...w),["stop","prevent"]),["space","enter"])),onFocus:g[2]||(g[2]=(...w)=>s(l)&&s(l)(...w)),onBlur:g[3]||(g[3]=w=>o.value=!1)},[re(_.$slots,"title",{},()=>[vt(Me(_.title),1)]),W(s(Be),{class:$(s(d))},{default:G(()=>[W(s(Sn))]),_:1},8,["class"])],42,FW),W(s(Vc),null,{default:G(()=>[Qe(k("div",{id:s(m),role:"region",class:$(s(p)),"aria-hidden":!s(r),"aria-labelledby":s(v)},[k("div",{class:$(s(h))},[re(_.$slots,"default")],2)],10,KW),[[bt,s(r)]])]),_:3})],2))}});var W3=xe(jW,[["__file","collapse-item.vue"]]);const qW=lt(PW,{CollapseItem:W3}),UW=Dt(W3),YW=Ee({color:{type:X(Object),required:!0},vertical:{type:Boolean,default:!1}});let xd=!1;function Vs(e,t){if(!gt)return;const n=function(r){var l;(l=t.drag)==null||l.call(t,r)},o=function(r){var l;document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",o),document.removeEventListener("touchmove",n),document.removeEventListener("touchend",o),document.onselectstart=null,document.ondragstart=null,xd=!1,(l=t.end)==null||l.call(t,r)},a=function(r){var l;xd||(r.preventDefault(),document.onselectstart=()=>!1,document.ondragstart=()=>!1,document.addEventListener("mousemove",n),document.addEventListener("mouseup",o),document.addEventListener("touchmove",n),document.addEventListener("touchend",o),xd=!0,(l=t.start)==null||l.call(t,r))};e.addEventListener("mousedown",a),e.addEventListener("touchstart",a)}const GW=e=>{const t=rt(),n=Rt(),o=Rt();function a(l){l.target!==n.value&&r(l)}function r(l){if(!o.value||!n.value)return;const u=t.vnode.el.getBoundingClientRect(),{clientX:d,clientY:f}=D0(l);if(e.vertical){let c=f-u.top;c=Math.max(n.value.offsetHeight/2,c),c=Math.min(c,u.height-n.value.offsetHeight/2),e.color.set("alpha",Math.round((c-n.value.offsetHeight/2)/(u.height-n.value.offsetHeight)*100))}else{let c=d-u.left;c=Math.max(n.value.offsetWidth/2,c),c=Math.min(c,u.width-n.value.offsetWidth/2),e.color.set("alpha",Math.round((c-n.value.offsetWidth/2)/(u.width-n.value.offsetWidth)*100))}}return{thumb:n,bar:o,handleDrag:r,handleClick:a}},XW=(e,{bar:t,thumb:n,handleDrag:o})=>{const a=rt(),r=me("color-alpha-slider"),l=R(0),i=R(0),u=R();function d(){if(!n.value||e.vertical)return 0;const w=a.vnode.el,b=e.color.get("alpha");return w?Math.round(b*(w.offsetWidth-n.value.offsetWidth/2)/100):0}function f(){if(!n.value)return 0;const w=a.vnode.el;if(!e.vertical)return 0;const b=e.color.get("alpha");return w?Math.round(b*(w.offsetHeight-n.value.offsetHeight/2)/100):0}function c(){if(e.color&&e.color.value){const{r:w,g:b,b:C}=e.color.toRgb();return`linear-gradient(to right, rgba(${w}, ${b}, ${C}, 0) 0%, rgba(${w}, ${b}, ${C}, 1) 100%)`}return""}function p(){l.value=d(),i.value=f(),u.value=c()}et(()=>{if(!t.value||!n.value)return;const w={drag:b=>{o(b)},end:b=>{o(b)}};Vs(t.value,w),Vs(n.value,w),p()}),pe(()=>e.color.get("alpha"),()=>p()),pe(()=>e.color.value,()=>p());const h=S(()=>[r.b(),r.is("vertical",e.vertical)]),m=S(()=>r.e("bar")),v=S(()=>r.e("thumb")),_=S(()=>({background:u.value})),g=S(()=>({left:Xt(l.value),top:Xt(i.value)}));return{rootKls:h,barKls:m,barStyle:_,thumbKls:v,thumbStyle:g,update:p}},JW="ElColorAlphaSlider",ZW=A({name:JW}),QW=A({...ZW,props:YW,setup(e,{expose:t}){const n=e,{bar:o,thumb:a,handleDrag:r,handleClick:l}=GW(n),{rootKls:i,barKls:u,barStyle:d,thumbKls:f,thumbStyle:c,update:p}=XW(n,{bar:o,thumb:a,handleDrag:r});return t({update:p,bar:o,thumb:a}),(h,m)=>(y(),M("div",{class:$(s(i))},[k("div",{ref_key:"bar",ref:o,class:$(s(u)),style:De(s(d)),onClick:m[0]||(m[0]=(...v)=>s(l)&&s(l)(...v))},null,6),k("div",{ref_key:"thumb",ref:a,class:$(s(f)),style:De(s(c))},null,6)],2))}});var ej=xe(QW,[["__file","alpha-slider.vue"]]);const tj=A({name:"ElColorHueSlider",props:{color:{type:Object,required:!0},vertical:Boolean},setup(e){const t=me("color-hue-slider"),n=rt(),o=R(),a=R(),r=R(0),l=R(0),i=S(()=>e.color.get("hue"));pe(()=>i.value,()=>{p()});function u(h){h.target!==o.value&&d(h)}function d(h){if(!a.value||!o.value)return;const v=n.vnode.el.getBoundingClientRect(),{clientX:_,clientY:g}=D0(h);let w;if(e.vertical){let b=g-v.top;b=Math.min(b,v.height-o.value.offsetHeight/2),b=Math.max(o.value.offsetHeight/2,b),w=Math.round((b-o.value.offsetHeight/2)/(v.height-o.value.offsetHeight)*360)}else{let b=_-v.left;b=Math.min(b,v.width-o.value.offsetWidth/2),b=Math.max(o.value.offsetWidth/2,b),w=Math.round((b-o.value.offsetWidth/2)/(v.width-o.value.offsetWidth)*360)}e.color.set("hue",w)}function f(){if(!o.value)return 0;const h=n.vnode.el;if(e.vertical)return 0;const m=e.color.get("hue");return h?Math.round(m*(h.offsetWidth-o.value.offsetWidth/2)/360):0}function c(){if(!o.value)return 0;const h=n.vnode.el;if(!e.vertical)return 0;const m=e.color.get("hue");return h?Math.round(m*(h.offsetHeight-o.value.offsetHeight/2)/360):0}function p(){r.value=f(),l.value=c()}return et(()=>{if(!a.value||!o.value)return;const h={drag:m=>{d(m)},end:m=>{d(m)}};Vs(a.value,h),Vs(o.value,h),p()}),{bar:a,thumb:o,thumbLeft:r,thumbTop:l,hueValue:i,handleClick:u,update:p,ns:t}}});function nj(e,t,n,o,a,r){return y(),M("div",{class:$([e.ns.b(),e.ns.is("vertical",e.vertical)])},[k("div",{ref:"bar",class:$(e.ns.e("bar")),onClick:t[0]||(t[0]=(...l)=>e.handleClick&&e.handleClick(...l))},null,2),k("div",{ref:"thumb",class:$(e.ns.e("thumb")),style:De({left:e.thumbLeft+"px",top:e.thumbTop+"px"})},null,6)],2)}var oj=xe(tj,[["render",nj],["__file","hue-slider.vue"]]);const aj=Ee({modelValue:String,id:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:cn,popperClass:{type:String,default:""},label:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},predefine:{type:X(Array)},validateEvent:{type:Boolean,default:!0}}),rj={[it]:e=>Ze(e)||tn(e),[Bt]:e=>Ze(e)||tn(e),activeChange:e=>Ze(e)||tn(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent},j3=Symbol("colorPickerContextKey"),gh=function(e,t,n){return[e,t*n/((e=(2-t)*n)<1?e:2-e)||0,e/2]},lj=function(e){return typeof e=="string"&&e.includes(".")&&Number.parseFloat(e)===1},sj=function(e){return typeof e=="string"&&e.includes("%")},il=function(e,t){lj(e)&&(e="100%");const n=sj(e);return e=Math.min(t,Math.max(0,Number.parseFloat(`${e}`))),n&&(e=Number.parseInt(`${e*t}`,10)/100),Math.abs(e-t)<1e-6?1:e%t/Number.parseFloat(t)},yh={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"},lu=e=>{e=Math.min(Math.round(e),255);const t=Math.floor(e/16),n=e%16;return`${yh[t]||t}${yh[n]||n}`},_h=function({r:e,g:t,b:n}){return Number.isNaN(+e)||Number.isNaN(+t)||Number.isNaN(+n)?"":`#${lu(e)}${lu(t)}${lu(n)}`},Md={A:10,B:11,C:12,D:13,E:14,F:15},er=function(e){return e.length===2?(Md[e[0].toUpperCase()]||+e[0])*16+(Md[e[1].toUpperCase()]||+e[1]):Md[e[1].toUpperCase()]||+e[1]},ij=function(e,t,n){t=t/100,n=n/100;let o=t;const a=Math.max(n,.01);n*=2,t*=n<=1?n:2-n,o*=a<=1?a:2-a;const r=(n+t)/2,l=n===0?2*o/(a+o):2*t/(n+t);return{h:e,s:l*100,v:r*100}},bh=(e,t,n)=>{e=il(e,255),t=il(t,255),n=il(n,255);const o=Math.max(e,t,n),a=Math.min(e,t,n);let r;const l=o,i=o-a,u=o===0?0:i/o;if(o===a)r=0;else{switch(o){case e:{r=(t-n)/i+(t{this._hue=Math.max(0,Math.min(360,o)),this._saturation=Math.max(0,Math.min(100,a)),this._value=Math.max(0,Math.min(100,r)),this.doOnChange()};if(t.includes("hsl")){const o=t.replace(/hsla|hsl|\(|\)/gm,"").split(/\s|,/g).filter(a=>a!=="").map((a,r)=>r>2?Number.parseFloat(a):Number.parseInt(a,10));if(o.length===4?this._alpha=Number.parseFloat(o[3])*100:o.length===3&&(this._alpha=100),o.length>=3){const{h:a,s:r,v:l}=ij(o[0],o[1],o[2]);n(a,r,l)}}else if(t.includes("hsv")){const o=t.replace(/hsva|hsv|\(|\)/gm,"").split(/\s|,/g).filter(a=>a!=="").map((a,r)=>r>2?Number.parseFloat(a):Number.parseInt(a,10));o.length===4?this._alpha=Number.parseFloat(o[3])*100:o.length===3&&(this._alpha=100),o.length>=3&&n(o[0],o[1],o[2])}else if(t.includes("rgb")){const o=t.replace(/rgba|rgb|\(|\)/gm,"").split(/\s|,/g).filter(a=>a!=="").map((a,r)=>r>2?Number.parseFloat(a):Number.parseInt(a,10));if(o.length===4?this._alpha=Number.parseFloat(o[3])*100:o.length===3&&(this._alpha=100),o.length>=3){const{h:a,s:r,v:l}=bh(o[0],o[1],o[2]);n(a,r,l)}}else if(t.includes("#")){const o=t.replace("#","").trim();if(!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$|^[0-9a-fA-F]{8}$/.test(o))return;let a,r,l;o.length===3?(a=er(o[0]+o[0]),r=er(o[1]+o[1]),l=er(o[2]+o[2])):(o.length===6||o.length===8)&&(a=er(o.slice(0,2)),r=er(o.slice(2,4)),l=er(o.slice(4,6))),o.length===8?this._alpha=er(o.slice(6))/255*100:(o.length===3||o.length===6)&&(this._alpha=100);const{h:i,s:u,v:d}=bh(a,r,l);n(i,u,d)}}compare(t){return Math.abs(t._hue-this._hue)<2&&Math.abs(t._saturation-this._saturation)<1&&Math.abs(t._value-this._value)<1&&Math.abs(t._alpha-this._alpha)<1}doOnChange(){const{_hue:t,_saturation:n,_value:o,_alpha:a,format:r}=this;if(this.enableAlpha)switch(r){case"hsl":{const l=gh(t,n/100,o/100);this.value=`hsla(${t}, ${Math.round(l[1]*100)}%, ${Math.round(l[2]*100)}%, ${this.get("alpha")/100})`;break}case"hsv":{this.value=`hsva(${t}, ${Math.round(n)}%, ${Math.round(o)}%, ${this.get("alpha")/100})`;break}case"hex":{this.value=`${_h(Ul(t,n,o))}${lu(a*255/100)}`;break}default:{const{r:l,g:i,b:u}=Ul(t,n,o);this.value=`rgba(${l}, ${i}, ${u}, ${this.get("alpha")/100})`}}else switch(r){case"hsl":{const l=gh(t,n/100,o/100);this.value=`hsl(${t}, ${Math.round(l[1]*100)}%, ${Math.round(l[2]*100)}%)`;break}case"hsv":{this.value=`hsv(${t}, ${Math.round(n)}%, ${Math.round(o)}%)`;break}case"rgb":{const{r:l,g:i,b:u}=Ul(t,n,o);this.value=`rgb(${l}, ${i}, ${u})`;break}default:this.value=_h(Ul(t,n,o))}}}const uj=A({props:{colors:{type:Array,required:!0},color:{type:Object,required:!0}},setup(e){const t=me("color-predefine"),{currentColor:n}=Pe(j3),o=R(r(e.colors,e.color));pe(()=>n.value,l=>{const i=new hs;i.fromString(l),o.value.forEach(u=>{u.selected=i.compare(u)})}),gn(()=>{o.value=r(e.colors,e.color)});function a(l){e.color.fromString(e.colors[l])}function r(l,i){return l.map(u=>{const d=new hs;return d.enableAlpha=!0,d.format="rgba",d.fromString(u),d.selected=d.value===i.value,d})}return{rgbaColors:o,handleSelect:a,ns:t}}}),cj=["onClick"];function dj(e,t,n,o,a,r){return y(),M("div",{class:$(e.ns.b())},[k("div",{class:$(e.ns.e("colors"))},[(y(!0),M(Fe,null,mt(e.rgbaColors,(l,i)=>(y(),M("div",{key:e.colors[i],class:$([e.ns.e("color-selector"),e.ns.is("alpha",l._alpha<100),{selected:l.selected}]),onClick:u=>e.handleSelect(i)},[k("div",{style:De({backgroundColor:l.value})},null,4)],10,cj))),128))],2)],2)}var fj=xe(uj,[["render",dj],["__file","predefine.vue"]]);const pj=A({name:"ElSlPanel",props:{color:{type:Object,required:!0}},setup(e){const t=me("color-svpanel"),n=rt(),o=R(0),a=R(0),r=R("hsl(0, 100%, 50%)"),l=S(()=>{const d=e.color.get("hue"),f=e.color.get("value");return{hue:d,value:f}});function i(){const d=e.color.get("saturation"),f=e.color.get("value"),c=n.vnode.el,{clientWidth:p,clientHeight:h}=c;a.value=d*p/100,o.value=(100-f)*h/100,r.value=`hsl(${e.color.get("hue")}, 100%, 50%)`}function u(d){const c=n.vnode.el.getBoundingClientRect(),{clientX:p,clientY:h}=D0(d);let m=p-c.left,v=h-c.top;m=Math.max(0,m),m=Math.min(m,c.width),v=Math.max(0,v),v=Math.min(v,c.height),a.value=m,o.value=v,e.color.set({saturation:m/c.width*100,value:100-v/c.height*100})}return pe(()=>l.value,()=>{i()}),et(()=>{Vs(n.vnode.el,{drag:d=>{u(d)},end:d=>{u(d)}}),i()}),{cursorTop:o,cursorLeft:a,background:r,colorValue:l,handleDrag:u,update:i,ns:t}}}),vj=k("div",null,null,-1),hj=[vj];function mj(e,t,n,o,a,r){return y(),M("div",{class:$(e.ns.b()),style:De({backgroundColor:e.background})},[k("div",{class:$(e.ns.e("white"))},null,2),k("div",{class:$(e.ns.e("black"))},null,2),k("div",{class:$(e.ns.e("cursor")),style:De({top:e.cursorTop+"px",left:e.cursorLeft+"px"})},hj,6)],6)}var gj=xe(pj,[["render",mj],["__file","sv-panel.vue"]]);const yj=["onKeydown"],_j=["id","aria-label","aria-labelledby","aria-description","aria-disabled","tabindex"],bj=A({name:"ElColorPicker"}),wj=A({...bj,props:aj,emits:rj,setup(e,{expose:t,emit:n}){const o=e,{t:a}=_t(),r=me("color"),{formItem:l}=Nn(),i=an(),u=Dn(),{inputId:d,isLabeledByFormItem:f}=Ho(o,{formItemContext:l}),c=R(),p=R(),h=R(),m=R(),v=R(),_=R(),{isFocused:g,handleFocus:w,handleBlur:b}=Oc(v,{beforeBlur(ce){var ge;return(ge=m.value)==null?void 0:ge.isFocusInsideContent(ce)},afterBlur(){B(!1),D()}}),C=ce=>{if(u.value)return Te();w(ce)};let x=!0;const E=wt(new hs({enableAlpha:o.showAlpha,format:o.colorFormat||"",value:o.modelValue})),O=R(!1),T=R(!1),V=R(""),L=S(()=>!o.modelValue&&!T.value?"transparent":F(E,o.showAlpha)),P=S(()=>!o.modelValue&&!T.value?"":E.value),z=S(()=>f.value?void 0:o.label||a("el.colorpicker.defaultLabel")),j=S(()=>f.value?l==null?void 0:l.labelId:void 0),K=S(()=>[r.b("picker"),r.is("disabled",u.value),r.bm("picker",i.value),r.is("focused",g.value)]);function F(ce,ge){if(!(ce instanceof hs))throw new TypeError("color should be instance of _color Class");const{r:Ae,g:U,b:te}=ce.toRgb();return ge?`rgba(${Ae}, ${U}, ${te}, ${ce.get("alpha")/100})`:`rgb(${Ae}, ${U}, ${te})`}function B(ce){O.value=ce}const I=Hn(B,100,{leading:!0});function H(){u.value||B(!0)}function N(){I(!1),D()}function D(){We(()=>{o.modelValue?E.fromString(o.modelValue):(E.value="",We(()=>{T.value=!1}))})}function q(){u.value||I(!O.value)}function Y(){E.fromString(V.value)}function J(){const ce=E.value;n(it,ce),n("change",ce),o.validateEvent&&(l==null||l.validate("change").catch(ge=>void 0)),I(!1),We(()=>{const ge=new hs({enableAlpha:o.showAlpha,format:o.colorFormat||"",value:o.modelValue});E.compare(ge)||D()})}function se(){I(!1),n(it,null),n("change",null),o.modelValue!==null&&o.validateEvent&&(l==null||l.validate("change").catch(ce=>void 0)),D()}function _e(ce){if(O.value&&(N(),g.value)){const ge=new FocusEvent("focus",ce);b(ge)}}function Q(ce){ce.preventDefault(),ce.stopPropagation(),B(!1),D()}function le(ce){switch(ce.code){case Ke.enter:case Ke.space:ce.preventDefault(),ce.stopPropagation(),H(),_.value.focus();break;case Ke.esc:Q(ce);break}}function ae(){v.value.focus()}function Te(){v.value.blur()}return et(()=>{o.modelValue&&(V.value=P.value)}),pe(()=>o.modelValue,ce=>{ce?ce&&ce!==E.value&&(x=!1,E.fromString(ce)):T.value=!1}),pe(()=>P.value,ce=>{V.value=ce,x&&n("activeChange",ce),x=!0}),pe(()=>E.value,()=>{!o.modelValue&&!T.value&&(T.value=!0)}),pe(()=>O.value,()=>{We(()=>{var ce,ge,Ae;(ce=c.value)==null||ce.update(),(ge=p.value)==null||ge.update(),(Ae=h.value)==null||Ae.update()})}),pt(j3,{currentColor:P}),t({color:E,show:H,hide:N,focus:ae,blur:Te}),(ce,ge)=>(y(),oe(s(En),{ref_key:"popper",ref:m,visible:O.value,"show-arrow":!1,"fallback-placements":["bottom","top","right","left"],offset:0,"gpu-acceleration":!1,"popper-class":[s(r).be("picker","panel"),s(r).b("dropdown"),ce.popperClass],"stop-popper-mouse-event":!1,effect:"light",trigger:"click",transition:`${s(r).namespace.value}-zoom-in-top`,persistent:"",onHide:ge[2]||(ge[2]=Ae=>B(!1))},{content:G(()=>[Qe((y(),M("div",{onKeydown:Mt(Q,["esc"])},[k("div",{class:$(s(r).be("dropdown","main-wrapper"))},[W(oj,{ref_key:"hue",ref:c,class:"hue-slider",color:s(E),vertical:""},null,8,["color"]),W(gj,{ref_key:"sv",ref:p,color:s(E)},null,8,["color"])],2),ce.showAlpha?(y(),oe(ej,{key:0,ref_key:"alpha",ref:h,color:s(E)},null,8,["color"])):Z("v-if",!0),ce.predefine?(y(),oe(fj,{key:1,ref:"predefine",color:s(E),colors:ce.predefine},null,8,["color","colors"])):Z("v-if",!0),k("div",{class:$(s(r).be("dropdown","btns"))},[k("span",{class:$(s(r).be("dropdown","value"))},[W(s(mn),{ref_key:"inputRef",ref:_,modelValue:V.value,"onUpdate:modelValue":ge[0]||(ge[0]=Ae=>V.value=Ae),"validate-event":!1,size:"small",onKeyup:Mt(Y,["enter"]),onBlur:Y},null,8,["modelValue","onKeyup"])],2),W(s(rn),{class:$(s(r).be("dropdown","link-btn")),text:"",size:"small",onClick:se},{default:G(()=>[vt(Me(s(a)("el.colorpicker.clear")),1)]),_:1},8,["class"]),W(s(rn),{plain:"",size:"small",class:$(s(r).be("dropdown","btn")),onClick:J},{default:G(()=>[vt(Me(s(a)("el.colorpicker.confirm")),1)]),_:1},8,["class"])],2)],40,yj)),[[s(sa),_e]])]),default:G(()=>[k("div",{id:s(d),ref_key:"triggerRef",ref:v,class:$(s(K)),role:"button","aria-label":s(z),"aria-labelledby":s(j),"aria-description":s(a)("el.colorpicker.description",{color:ce.modelValue||""}),"aria-disabled":s(u),tabindex:s(u)?-1:ce.tabindex,onKeydown:le,onFocus:C,onBlur:ge[1]||(ge[1]=(...Ae)=>s(b)&&s(b)(...Ae))},[s(u)?(y(),M("div",{key:0,class:$(s(r).be("picker","mask"))},null,2)):Z("v-if",!0),k("div",{class:$(s(r).be("picker","trigger")),onClick:q},[k("span",{class:$([s(r).be("picker","color"),s(r).is("alpha",ce.showAlpha)])},[k("span",{class:$(s(r).be("picker","color-inner")),style:De({backgroundColor:s(L)})},[Qe(W(s(Be),{class:$([s(r).be("picker","icon"),s(r).is("icon-arrow-down")])},{default:G(()=>[W(s(Bo))]),_:1},8,["class"]),[[bt,ce.modelValue||T.value]]),Qe(W(s(Be),{class:$([s(r).be("picker","empty"),s(r).is("icon-close")])},{default:G(()=>[W(s(uo))]),_:1},8,["class"]),[[bt,!ce.modelValue&&!T.value]])],6)],2)],2)],42,_j)]),_:1},8,["visible","popper-class","transition"]))}});var Cj=xe(wj,[["__file","color-picker.vue"]]);const Sj=lt(Cj),kj=A({name:"ElContainer"}),Ej=A({...kj,props:{direction:{type:String}},setup(e){const t=e,n=fn(),o=me("container"),a=S(()=>t.direction==="vertical"?!0:t.direction==="horizontal"?!1:n&&n.default?n.default().some(l=>{const i=l.type.name;return i==="ElHeader"||i==="ElFooter"}):!1);return(r,l)=>(y(),M("section",{class:$([s(o).b(),s(o).is("vertical",s(a))])},[re(r.$slots,"default")],2))}});var xj=xe(Ej,[["__file","container.vue"]]);const Mj=A({name:"ElAside"}),$j=A({...Mj,props:{width:{type:String,default:null}},setup(e){const t=e,n=me("aside"),o=S(()=>t.width?n.cssVarBlock({width:t.width}):{});return(a,r)=>(y(),M("aside",{class:$(s(n).b()),style:De(s(o))},[re(a.$slots,"default")],6))}});var q3=xe($j,[["__file","aside.vue"]]);const Tj=A({name:"ElFooter"}),Aj=A({...Tj,props:{height:{type:String,default:null}},setup(e){const t=e,n=me("footer"),o=S(()=>t.height?n.cssVarBlock({height:t.height}):{});return(a,r)=>(y(),M("footer",{class:$(s(n).b()),style:De(s(o))},[re(a.$slots,"default")],6))}});var U3=xe(Aj,[["__file","footer.vue"]]);const Oj=A({name:"ElHeader"}),Nj=A({...Oj,props:{height:{type:String,default:null}},setup(e){const t=e,n=me("header"),o=S(()=>t.height?n.cssVarBlock({height:t.height}):{});return(a,r)=>(y(),M("header",{class:$(s(n).b()),style:De(s(o))},[re(a.$slots,"default")],6))}});var Y3=xe(Nj,[["__file","header.vue"]]);const Ij=A({name:"ElMain"}),Rj=A({...Ij,setup(e){const t=me("main");return(n,o)=>(y(),M("main",{class:$(s(t).b())},[re(n.$slots,"default")],2))}});var G3=xe(Rj,[["__file","main.vue"]]);const Pj=lt(xj,{Aside:q3,Footer:U3,Header:Y3,Main:G3}),Lj=Dt(q3),Vj=Dt(U3),Bj=Dt(Y3),zj=Dt(G3);var X3={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(ma,function(){return function(n,o){var a=o.prototype,r=a.format;a.format=function(l){var i=this,u=this.$locale();if(!this.isValid())return r.bind(this)(l);var d=this.$utils(),f=(l||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(c){switch(c){case"Q":return Math.ceil((i.$M+1)/3);case"Do":return u.ordinal(i.$D);case"gggg":return i.weekYear();case"GGGG":return i.isoWeekYear();case"wo":return u.ordinal(i.week(),"W");case"w":case"ww":return d.s(i.week(),c==="w"?1:2,"0");case"W":case"WW":return d.s(i.isoWeek(),c==="W"?1:2,"0");case"k":case"kk":return d.s(String(i.$H===0?24:i.$H),c==="k"?1:2,"0");case"X":return Math.floor(i.$d.getTime()/1e3);case"x":return i.$d.getTime();case"z":return"["+i.offsetName()+"]";case"zzz":return"["+i.offsetName("long")+"]";default:return c}});return r.bind(this)(f)}}})})(X3);var Hj=X3.exports;const Dj=ga(Hj);var J3={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(ma,function(){var n="week",o="year";return function(a,r,l){var i=r.prototype;i.week=function(u){if(u===void 0&&(u=null),u!==null)return this.add(7*(u-this.week()),"day");var d=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var f=l(this).startOf(o).add(1,o).date(d),c=l(this).endOf(n);if(f.isBefore(c))return 1}var p=l(this).startOf(o).date(d).startOf(n).subtract(1,"millisecond"),h=this.diff(p,n,!0);return h<0?l(this).startOf("week").week():Math.ceil(h)},i.weeks=function(u){return u===void 0&&(u=null),this.week(u)}}})})(J3);var Fj=J3.exports;const Kj=ga(Fj);var Z3={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(ma,function(){return function(n,o){o.prototype.weekYear=function(){var a=this.month(),r=this.week(),l=this.year();return r===1&&a===11?l+1:a===0&&r>=52?l-1:l}}})})(Z3);var Wj=Z3.exports;const jj=ga(Wj);var Q3={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(ma,function(){return function(n,o,a){o.prototype.dayOfYear=function(r){var l=Math.round((a(this).startOf("day")-a(this).startOf("year"))/864e5)+1;return r==null?l:this.add(r-l,"day")}}})})(Q3);var qj=Q3.exports;const Uj=ga(qj);var e8={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(ma,function(){return function(n,o){o.prototype.isSameOrAfter=function(a,r){return this.isSame(a,r)||this.isAfter(a,r)}}})})(e8);var Yj=e8.exports;const Gj=ga(Yj);var t8={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(ma,function(){return function(n,o){o.prototype.isSameOrBefore=function(a,r){return this.isSame(a,r)||this.isBefore(a,r)}}})})(t8);var Xj=t8.exports;const Jj=ga(Xj),K2=Symbol(),Zj=Ee({...D2,type:{type:X(String),default:"date"}}),Qj=["date","dates","year","years","month","week","range"],W2=Ee({disabledDate:{type:X(Function)},date:{type:X(Object),required:!0},minDate:{type:X(Object)},maxDate:{type:X(Object)},parsedValue:{type:X([Object,Array])},rangeState:{type:X(Object),default:()=>({endDate:null,selecting:!1})}}),n8=Ee({type:{type:X(String),required:!0,values:EP},dateFormat:String,timeFormat:String}),o8=Ee({unlinkPanels:Boolean,parsedValue:{type:X(Array)}}),j2=e=>({type:String,values:Qj,default:e}),eq=Ee({...n8,parsedValue:{type:X([Object,Array])},visible:{type:Boolean},format:{type:String,default:""}}),tq=Ee({...W2,cellClassName:{type:X(Function)},showWeekNumber:Boolean,selectionMode:j2("date")}),nq=["changerange","pick","select"],Bf=e=>{if(!Ie(e))return!1;const[t,n]=e;return at.isDayjs(t)&&at.isDayjs(n)&&t.isSameOrBefore(n)},a8=(e,{lang:t,unit:n,unlinkPanels:o})=>{let a;if(Ie(e)){let[r,l]=e.map(i=>at(i).locale(t));return o||(l=r.add(1,n)),[r,l]}else e?a=at(e):a=at();return a=a.locale(t),[a,a.add(1,n)]},oq=(e,t,{columnIndexOffset:n,startDate:o,nextEndDate:a,now:r,unit:l,relativeDateGetter:i,setCellMetadata:u,setRowMetadata:d})=>{for(let f=0;f["normal","today"].includes(e),aq=(e,t)=>{const{lang:n}=_t(),o=R(),a=R(),r=R(),l=R(),i=R([[],[],[],[],[],[]]);let u=!1;const d=e.date.$locale().weekStart||7,f=e.date.locale("en").localeData().weekdaysShort().map(N=>N.toLowerCase()),c=S(()=>d>3?7-d:-d),p=S(()=>{const N=e.date.startOf("month");return N.subtract(N.day()||7,"day")}),h=S(()=>f.concat(f).slice(d,d+7)),m=S(()=>tg(s(C)).some(N=>N.isCurrent)),v=S(()=>{const N=e.date.startOf("month"),D=N.day()||7,q=N.daysInMonth(),Y=N.subtract(1,"month").daysInMonth();return{startOfMonthDay:D,dateCountOfMonth:q,dateCountOfLastMonth:Y}}),_=S(()=>e.selectionMode==="dates"?jn(e.parsedValue):[]),g=(N,{count:D,rowIndex:q,columnIndex:Y})=>{const{startOfMonthDay:J,dateCountOfMonth:se,dateCountOfLastMonth:_e}=s(v),Q=s(c);if(q>=0&&q<=1){const le=J+Q<0?7+J+Q:J+Q;if(Y+q*7>=le)return N.text=D,!0;N.text=_e-(le-Y%7)+1+q*7,N.type="prev-month"}else return D<=se?N.text=D:(N.text=D-se,N.type="next-month"),!0;return!1},w=(N,{columnIndex:D,rowIndex:q},Y)=>{const{disabledDate:J,cellClassName:se}=e,_e=s(_),Q=g(N,{count:Y,rowIndex:q,columnIndex:D}),le=N.dayjs.toDate();return N.selected=_e.find(ae=>ae.isSame(N.dayjs,"day")),N.isSelected=!!N.selected,N.isCurrent=E(N),N.disabled=J==null?void 0:J(le),N.customClass=se==null?void 0:se(le),Q},b=N=>{if(e.selectionMode==="week"){const[D,q]=e.showWeekNumber?[1,7]:[0,6],Y=H(N[D+1]);N[D].inRange=Y,N[D].start=Y,N[q].inRange=Y,N[q].end=Y}},C=S(()=>{const{minDate:N,maxDate:D,rangeState:q,showWeekNumber:Y}=e,J=s(c),se=s(i),_e="day";let Q=1;if(Y)for(let le=0;le<6;le++)se[le][0]||(se[le][0]={type:"week",text:s(p).add(le*7+1,_e).week()});return oq({row:6,column:7},se,{startDate:N,columnIndexOffset:Y?1:0,nextEndDate:q.endDate||D||q.selecting&&N||null,now:at().locale(s(n)).startOf(_e),unit:_e,relativeDateGetter:le=>s(p).add(le-J,_e),setCellMetadata:(...le)=>{w(...le,Q)&&(Q+=1)},setRowMetadata:b}),se});pe(()=>e.date,async()=>{var N;(N=s(o))!=null&&N.contains(document.activeElement)&&(await We(),await x())});const x=async()=>{var N;return(N=s(a))==null?void 0:N.focus()},E=N=>e.selectionMode==="date"&&zf(N.type)&&O(N,e.parsedValue),O=(N,D)=>D?at(D).locale(s(n)).isSame(e.date.date(Number(N.text)),"day"):!1,T=(N,D)=>{const q=N*7+(D-(e.showWeekNumber?1:0))-s(c);return s(p).add(q,"day")},V=N=>{var D;if(!e.rangeState.selecting)return;let q=N.target;if(q.tagName==="SPAN"&&(q=(D=q.parentNode)==null?void 0:D.parentNode),q.tagName==="DIV"&&(q=q.parentNode),q.tagName!=="TD")return;const Y=q.parentNode.rowIndex-1,J=q.cellIndex;s(C)[Y][J].disabled||(Y!==s(r)||J!==s(l))&&(r.value=Y,l.value=J,t("changerange",{selecting:!0,endDate:T(Y,J)}))},L=N=>!s(m)&&(N==null?void 0:N.text)===1&&N.type==="normal"||N.isCurrent,P=N=>{u||s(m)||e.selectionMode!=="date"||I(N,!0)},z=N=>{N.target.closest("td")&&(u=!0)},j=N=>{N.target.closest("td")&&(u=!1)},K=N=>{!e.rangeState.selecting||!e.minDate?(t("pick",{minDate:N,maxDate:null}),t("select",!0)):(N>=e.minDate?t("pick",{minDate:e.minDate,maxDate:N}):t("pick",{minDate:N,maxDate:e.minDate}),t("select",!1))},F=N=>{const D=N.week(),q=`${N.year()}w${D}`;t("pick",{year:N.year(),week:D,value:q,date:N.startOf("week")})},B=(N,D)=>{const q=D?jn(e.parsedValue).filter(Y=>(Y==null?void 0:Y.valueOf())!==N.valueOf()):jn(e.parsedValue).concat([N]);t("pick",q)},I=(N,D=!1)=>{const q=N.target.closest("td");if(!q)return;const Y=q.parentNode.rowIndex-1,J=q.cellIndex,se=s(C)[Y][J];if(se.disabled||se.type==="week")return;const _e=T(Y,J);switch(e.selectionMode){case"range":{K(_e);break}case"date":{t("pick",_e,D);break}case"week":{F(_e);break}case"dates":{B(_e,!!se.selected);break}}},H=N=>{if(e.selectionMode!=="week")return!1;let D=e.date.startOf("day");if(N.type==="prev-month"&&(D=D.subtract(1,"month")),N.type==="next-month"&&(D=D.add(1,"month")),D=D.date(Number.parseInt(N.text,10)),e.parsedValue&&!Array.isArray(e.parsedValue)){const q=(e.parsedValue.day()-d+7)%7-1;return e.parsedValue.subtract(q,"day").isSame(D,"day")}return!1};return{WEEKS:h,rows:C,tbodyRef:o,currentCellRef:a,focus:x,isCurrent:E,isWeekActive:H,isSelectedCell:L,handlePickDate:I,handleMouseUp:j,handleMouseDown:z,handleMouseMove:V,handleFocus:P}},rq=(e,{isCurrent:t,isWeekActive:n})=>{const o=me("date-table"),{t:a}=_t(),r=S(()=>[o.b(),{"is-week-mode":e.selectionMode==="week"}]),l=S(()=>a("el.datepicker.dateTablePrompt")),i=S(()=>a("el.datepicker.week"));return{tableKls:r,tableLabel:l,weekLabel:i,getCellClasses:f=>{const c=[];return zf(f.type)&&!f.disabled?(c.push("available"),f.type==="today"&&c.push("today")):c.push(f.type),t(f)&&c.push("current"),f.inRange&&(zf(f.type)||e.selectionMode==="week")&&(c.push("in-range"),f.start&&c.push("start-date"),f.end&&c.push("end-date")),f.disabled&&c.push("disabled"),f.selected&&c.push("selected"),f.customClass&&c.push(f.customClass),c.join(" ")},getRowKls:f=>[o.e("row"),{current:n(f)}],t:a}},lq=Ee({cell:{type:X(Object)}});var sq=A({name:"ElDatePickerCell",props:lq,setup(e){const t=me("date-table-cell"),{slots:n}=Pe(K2);return()=>{const{cell:o}=e;return re(n,"default",{...o},()=>[W("div",{class:t.b()},[W("span",{class:t.e("text")},[o==null?void 0:o.text])])])}}});const iq=["aria-label"],uq={key:0,scope:"col"},cq=["aria-label"],dq=["aria-current","aria-selected","tabindex"],fq=A({__name:"basic-date-table",props:tq,emits:nq,setup(e,{expose:t,emit:n}){const o=e,{WEEKS:a,rows:r,tbodyRef:l,currentCellRef:i,focus:u,isCurrent:d,isWeekActive:f,isSelectedCell:c,handlePickDate:p,handleMouseUp:h,handleMouseDown:m,handleMouseMove:v,handleFocus:_}=aq(o,n),{tableLabel:g,tableKls:w,weekLabel:b,getCellClasses:C,getRowKls:x,t:E}=rq(o,{isCurrent:d,isWeekActive:f});return t({focus:u}),(O,T)=>(y(),M("table",{"aria-label":s(g),class:$(s(w)),cellspacing:"0",cellpadding:"0",role:"grid",onClick:T[1]||(T[1]=(...V)=>s(p)&&s(p)(...V)),onMousemove:T[2]||(T[2]=(...V)=>s(v)&&s(v)(...V)),onMousedown:T[3]||(T[3]=Ge((...V)=>s(m)&&s(m)(...V),["prevent"])),onMouseup:T[4]||(T[4]=(...V)=>s(h)&&s(h)(...V))},[k("tbody",{ref_key:"tbodyRef",ref:l},[k("tr",null,[O.showWeekNumber?(y(),M("th",uq,Me(s(b)),1)):Z("v-if",!0),(y(!0),M(Fe,null,mt(s(a),(V,L)=>(y(),M("th",{key:L,"aria-label":s(E)("el.datepicker.weeksFull."+V),scope:"col"},Me(s(E)("el.datepicker.weeks."+V)),9,cq))),128))]),(y(!0),M(Fe,null,mt(s(r),(V,L)=>(y(),M("tr",{key:L,class:$(s(x)(V[1]))},[(y(!0),M(Fe,null,mt(V,(P,z)=>(y(),M("td",{key:`${L}.${z}`,ref_for:!0,ref:j=>s(c)(P)&&(i.value=j),class:$(s(C)(P)),"aria-current":P.isCurrent?"date":void 0,"aria-selected":P.isCurrent,tabindex:s(c)(P)?0:-1,onFocus:T[0]||(T[0]=(...j)=>s(_)&&s(_)(...j))},[W(s(sq),{cell:P},null,8,["cell"])],42,dq))),128))],2))),128))],512)],42,iq))}});var Hf=xe(fq,[["__file","basic-date-table.vue"]]);const pq=Ee({...W2,selectionMode:j2("month")}),vq=["aria-label"],hq=["aria-selected","aria-label","tabindex","onKeydown"],mq={class:"cell"},gq=A({__name:"basic-month-table",props:pq,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const o=e,a=(C,x,E)=>{const O=at().locale(E).startOf("month").month(x).year(C),T=O.daysInMonth();return Va(T).map(V=>O.add(V,"day").toDate())},r=me("month-table"),{t:l,lang:i}=_t(),u=R(),d=R(),f=R(o.date.locale("en").localeData().monthsShort().map(C=>C.toLowerCase())),c=R([[],[],[]]),p=R(),h=R(),m=S(()=>{var C,x;const E=c.value,O=at().locale(i.value).startOf("month");for(let T=0;T<3;T++){const V=E[T];for(let L=0;L<4;L++){const P=V[L]||(V[L]={row:T,column:L,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1});P.type="normal";const z=T*4+L,j=o.date.startOf("year").month(z),K=o.rangeState.endDate||o.maxDate||o.rangeState.selecting&&o.minDate||null;P.inRange=!!(o.minDate&&j.isSameOrAfter(o.minDate,"month")&&K&&j.isSameOrBefore(K,"month"))||!!(o.minDate&&j.isSameOrBefore(o.minDate,"month")&&K&&j.isSameOrAfter(K,"month")),(C=o.minDate)!=null&&C.isSameOrAfter(K)?(P.start=!!(K&&j.isSame(K,"month")),P.end=o.minDate&&j.isSame(o.minDate,"month")):(P.start=!!(o.minDate&&j.isSame(o.minDate,"month")),P.end=!!(K&&j.isSame(K,"month"))),O.isSame(j)&&(P.type="today"),P.text=z,P.disabled=((x=o.disabledDate)==null?void 0:x.call(o,j.toDate()))||!1}}return E}),v=()=>{var C;(C=d.value)==null||C.focus()},_=C=>{const x={},E=o.date.year(),O=new Date,T=C.text;return x.disabled=o.disabledDate?a(E,T,i.value).every(o.disabledDate):!1,x.current=jn(o.parsedValue).findIndex(V=>at.isDayjs(V)&&V.year()===E&&V.month()===T)>=0,x.today=O.getFullYear()===E&&O.getMonth()===T,C.inRange&&(x["in-range"]=!0,C.start&&(x["start-date"]=!0),C.end&&(x["end-date"]=!0)),x},g=C=>{const x=o.date.year(),E=C.text;return jn(o.date).findIndex(O=>O.year()===x&&O.month()===E)>=0},w=C=>{var x;if(!o.rangeState.selecting)return;let E=C.target;if(E.tagName==="SPAN"&&(E=(x=E.parentNode)==null?void 0:x.parentNode),E.tagName==="DIV"&&(E=E.parentNode),E.tagName!=="TD")return;const O=E.parentNode.rowIndex,T=E.cellIndex;m.value[O][T].disabled||(O!==p.value||T!==h.value)&&(p.value=O,h.value=T,n("changerange",{selecting:!0,endDate:o.date.startOf("year").month(O*4+T)}))},b=C=>{var x;const E=(x=C.target)==null?void 0:x.closest("td");if((E==null?void 0:E.tagName)!=="TD"||oo(E,"disabled"))return;const O=E.cellIndex,V=E.parentNode.rowIndex*4+O,L=o.date.startOf("year").month(V);o.selectionMode==="range"?o.rangeState.selecting?(o.minDate&&L>=o.minDate?n("pick",{minDate:o.minDate,maxDate:L}):n("pick",{minDate:L,maxDate:o.minDate}),n("select",!1)):(n("pick",{minDate:L,maxDate:null}),n("select",!0)):n("pick",V)};return pe(()=>o.date,async()=>{var C,x;(C=u.value)!=null&&C.contains(document.activeElement)&&(await We(),(x=d.value)==null||x.focus())}),t({focus:v}),(C,x)=>(y(),M("table",{role:"grid","aria-label":s(l)("el.datepicker.monthTablePrompt"),class:$(s(r).b()),onClick:b,onMousemove:w},[k("tbody",{ref_key:"tbodyRef",ref:u},[(y(!0),M(Fe,null,mt(s(m),(E,O)=>(y(),M("tr",{key:O},[(y(!0),M(Fe,null,mt(E,(T,V)=>(y(),M("td",{key:V,ref_for:!0,ref:L=>g(T)&&(d.value=L),class:$(_(T)),"aria-selected":`${g(T)}`,"aria-label":s(l)(`el.datepicker.month${+T.text+1}`),tabindex:g(T)?0:-1,onKeydown:[Mt(Ge(b,["prevent","stop"]),["space"]),Mt(Ge(b,["prevent","stop"]),["enter"])]},[k("div",null,[k("span",mq,Me(s(l)("el.datepicker.months."+f.value[T.text])),1)])],42,hq))),128))]))),128))],512)],42,vq))}});var Df=xe(gq,[["__file","basic-month-table.vue"]]);const{date:yq,disabledDate:_q,parsedValue:bq}=W2,wq=Ee({date:yq,disabledDate:_q,parsedValue:bq,selectionMode:j2("year")}),Cq=["aria-label"],Sq=["aria-selected","tabindex","onKeydown"],kq={class:"cell"},Eq={key:1},xq=A({__name:"basic-year-table",props:wq,emits:["pick"],setup(e,{expose:t,emit:n}){const o=e,a=(v,_)=>{const g=at(String(v)).locale(_).startOf("year"),b=g.endOf("year").dayOfYear();return Va(b).map(C=>g.add(C,"day").toDate())},r=me("year-table"),{t:l,lang:i}=_t(),u=R(),d=R(),f=S(()=>Math.floor(o.date.year()/10)*10),c=()=>{var v;(v=d.value)==null||v.focus()},p=v=>{const _={},g=at().locale(i.value);return _.disabled=o.disabledDate?a(v,i.value).every(o.disabledDate):!1,_.current=jn(o.parsedValue).findIndex(w=>w.year()===v)>=0,_.today=g.year()===v,_},h=v=>v===f.value&&o.date.year()f.value+9||jn(o.date).findIndex(_=>_.year()===v)>=0||jn(o.parsedValue).findIndex(_=>(_==null?void 0:_.year())===v)>=0,m=v=>{const g=v.target.closest("td");if(g&&g.textContent){if(oo(g,"disabled"))return;const w=g.textContent||g.innerText;if(o.selectionMode==="years"){if(v.type==="keydown"){n("pick",jn(o.parsedValue),!1);return}const b=oo(g,"current")?jn(o.parsedValue).filter(C=>(C==null?void 0:C.year())!==Number(w)):jn(o.parsedValue).concat([at(w)]);n("pick",b)}else n("pick",Number(w))}};return pe(()=>o.date,async()=>{var v,_;(v=u.value)!=null&&v.contains(document.activeElement)&&(await We(),(_=d.value)==null||_.focus())}),t({focus:c}),(v,_)=>(y(),M("table",{role:"grid","aria-label":s(l)("el.datepicker.yearTablePrompt"),class:$(s(r).b()),onClick:m},[k("tbody",{ref_key:"tbodyRef",ref:u},[(y(),M(Fe,null,mt(3,(g,w)=>k("tr",{key:w},[(y(),M(Fe,null,mt(4,(b,C)=>(y(),M(Fe,{key:w+"_"+C},[w*4+C<10?(y(),M("td",{key:0,ref_for:!0,ref:x=>h(s(f)+w*4+C)&&(d.value=x),class:$(["available",p(s(f)+w*4+C)]),"aria-selected":`${h(s(f)+w*4+C)}`,tabindex:h(s(f)+w*4+C)?0:-1,onKeydown:[Mt(Ge(m,["prevent","stop"]),["space"]),Mt(Ge(m,["prevent","stop"]),["enter"])]},[k("div",null,[k("span",kq,Me(s(f)+w*4+C),1)])],42,Sq)):(y(),M("td",Eq))],64))),64))])),64))],512)],10,Cq))}});var Mq=xe(xq,[["__file","basic-year-table.vue"]]);const $q=["onClick"],Tq=["aria-label"],Aq=["aria-label"],Oq=["aria-label"],Nq=["aria-label"],Iq=A({__name:"panel-date-pick",props:eq,emits:["pick","set-picker-option","panel-change"],setup(e,{emit:t}){const n=e,o=(fe,$e,ee)=>!0,a=me("picker-panel"),r=me("date-picker"),l=Pr(),i=fn(),{t:u,lang:d}=_t(),f=Pe("EP_PICKER_BASE"),c=Pe(Pc),{shortcuts:p,disabledDate:h,cellClassName:m,defaultTime:v}=f.props,_=At(f.props,"defaultValue"),g=R(),w=R(at().locale(d.value)),b=R(!1);let C=!1;const x=S(()=>at(v).locale(d.value)),E=S(()=>w.value.month()),O=S(()=>w.value.year()),T=R([]),V=R(null),L=R(null),P=fe=>T.value.length>0?o(fe,T.value,n.format||"HH:mm:ss"):!0,z=fe=>v&&!te.value&&!b.value&&!C?x.value.year(fe.year()).month(fe.month()).date(fe.date()):Q.value?fe.millisecond(0):fe.startOf("day"),j=(fe,...$e)=>{if(!fe)t("pick",fe,...$e);else if(Ie(fe)){const ee=fe.map(z);t("pick",ee,...$e)}else t("pick",z(fe),...$e);V.value=null,L.value=null,b.value=!1,C=!1},K=async(fe,$e)=>{if(D.value==="date"){fe=fe;let ee=n.parsedValue?n.parsedValue.year(fe.year()).month(fe.month()).date(fe.date()):fe;P(ee)||(ee=T.value[0][0].year(fe.year()).month(fe.month()).date(fe.date())),w.value=ee,j(ee,Q.value||$e),n.type==="datetime"&&(await We(),Ue())}else D.value==="week"?j(fe.date):D.value==="dates"&&j(fe,!0)},F=fe=>{const $e=fe?"add":"subtract";w.value=w.value[$e](1,"month"),je("month")},B=fe=>{const $e=w.value,ee=fe?"add":"subtract";w.value=I.value==="year"?$e[ee](10,"year"):$e[ee](1,"year"),je("year")},I=R("date"),H=S(()=>{const fe=u("el.datepicker.year");if(I.value==="year"){const $e=Math.floor(O.value/10)*10;return fe?`${$e} ${fe} - ${$e+9} ${fe}`:`${$e} - ${$e+9}`}return`${O.value} ${fe}`}),N=fe=>{const $e=Xe(fe.value)?fe.value():fe.value;if($e){C=!0,j(at($e).locale(d.value));return}fe.onClick&&fe.onClick({attrs:l,slots:i,emit:t})},D=S(()=>{const{type:fe}=n;return["week","month","year","years","dates"].includes(fe)?fe:"date"}),q=S(()=>D.value==="date"?I.value:D.value),Y=S(()=>!!p.length),J=async fe=>{w.value=w.value.startOf("month").month(fe),D.value==="month"?j(w.value,!1):(I.value="date",["month","year","date","week"].includes(D.value)&&(j(w.value,!0),await We(),Ue())),je("month")},se=async(fe,$e)=>{D.value==="year"?(w.value=w.value.startOf("year").year(fe),j(w.value,!1)):D.value==="years"?j(fe,$e??!0):(w.value=w.value.year(fe),I.value="month",["month","year","date","week"].includes(D.value)&&(j(w.value,!0),await We(),Ue())),je("year")},_e=async fe=>{I.value=fe,await We(),Ue()},Q=S(()=>n.type==="datetime"||n.type==="datetimerange"),le=S(()=>{const fe=Q.value||D.value==="dates",$e=D.value==="years",ee=I.value==="date",ie=I.value==="year";return fe&&ee||$e&&ie}),ae=S(()=>h?n.parsedValue?Ie(n.parsedValue)?h(n.parsedValue[0].toDate()):h(n.parsedValue.toDate()):!0:!1),Te=()=>{if(D.value==="dates"||D.value==="years")j(n.parsedValue);else{let fe=n.parsedValue;if(!fe){const $e=at(v).locale(d.value),ee=Le();fe=$e.year(ee.year()).month(ee.month()).date(ee.date())}w.value=fe,j(fe)}},ce=S(()=>h?h(at().locale(d.value).toDate()):!1),ge=()=>{const $e=at().locale(d.value).toDate();b.value=!0,(!h||!h($e))&&P($e)&&(w.value=at().locale(d.value),j(w.value))},Ae=S(()=>n.timeFormat||i3(n.format)),U=S(()=>n.dateFormat||s3(n.format)),te=S(()=>{if(L.value)return L.value;if(!(!n.parsedValue&&!_.value))return(n.parsedValue||w.value).format(Ae.value)}),ve=S(()=>{if(V.value)return V.value;if(!(!n.parsedValue&&!_.value))return(n.parsedValue||w.value).format(U.value)}),be=R(!1),ue=()=>{be.value=!0},ye=()=>{be.value=!1},we=fe=>({hour:fe.hour(),minute:fe.minute(),second:fe.second(),year:fe.year(),month:fe.month(),date:fe.date()}),Ce=(fe,$e,ee)=>{const{hour:ie,minute:ke,second:ne}=we(fe),ze=n.parsedValue?n.parsedValue.hour(ie).minute(ke).second(ne):fe;w.value=ze,j(w.value,!0),ee||(be.value=$e)},he=fe=>{const $e=at(fe,Ae.value).locale(d.value);if($e.isValid()&&P($e)){const{year:ee,month:ie,date:ke}=we(w.value);w.value=$e.year(ee).month(ie).date(ke),L.value=null,be.value=!1,j(w.value,!0)}},Se=fe=>{const $e=at(fe,U.value).locale(d.value);if($e.isValid()){if(h&&h($e.toDate()))return;const{hour:ee,minute:ie,second:ke}=we(w.value);w.value=$e.hour(ee).minute(ie).second(ke),V.value=null,j(w.value,!0)}},Re=fe=>at.isDayjs(fe)&&fe.isValid()&&(h?!h(fe.toDate()):!0),He=fe=>Ie(fe)?fe.map($e=>$e.format(n.format)):fe.format(n.format),de=fe=>at(fe,n.format).locale(d.value),Le=()=>{const fe=at(_.value).locale(d.value);if(!_.value){const $e=x.value;return at().hour($e.hour()).minute($e.minute()).second($e.second()).locale(d.value)}return fe},Ue=async()=>{var fe;["week","month","year","date"].includes(D.value)&&((fe=g.value)==null||fe.focus(),D.value==="week"&&dt(Ke.down))},ot=fe=>{const{code:$e}=fe;[Ke.up,Ke.down,Ke.left,Ke.right,Ke.home,Ke.end,Ke.pageUp,Ke.pageDown].includes($e)&&(dt($e),fe.stopPropagation(),fe.preventDefault()),[Ke.enter,Ke.space,Ke.numpadEnter].includes($e)&&V.value===null&&L.value===null&&(fe.preventDefault(),j(w.value,!1))},dt=fe=>{var $e;const{up:ee,down:ie,left:ke,right:ne,home:ze,end:tt,pageUp:St,pageDown:Ot}=Ke,ho={year:{[ee]:-4,[ie]:4,[ke]:-1,[ne]:1,offset:(kt,Ft)=>kt.setFullYear(kt.getFullYear()+Ft)},month:{[ee]:-4,[ie]:4,[ke]:-1,[ne]:1,offset:(kt,Ft)=>kt.setMonth(kt.getMonth()+Ft)},week:{[ee]:-1,[ie]:1,[ke]:-1,[ne]:1,offset:(kt,Ft)=>kt.setDate(kt.getDate()+Ft*7)},date:{[ee]:-7,[ie]:7,[ke]:-1,[ne]:1,[ze]:kt=>-kt.getDay(),[tt]:kt=>-kt.getDay()+6,[St]:kt=>-new Date(kt.getFullYear(),kt.getMonth(),0).getDate(),[Ot]:kt=>new Date(kt.getFullYear(),kt.getMonth()+1,0).getDate(),offset:(kt,Ft)=>kt.setDate(kt.getDate()+Ft)}},qt=w.value.toDate();for(;Math.abs(w.value.diff(qt,"year",!0))<1;){const kt=ho[q.value];if(!kt)return;if(kt.offset(qt,Xe(kt[fe])?kt[fe](qt):($e=kt[fe])!=null?$e:0),h&&h(qt))break;const Ft=at(qt).locale(d.value);w.value=Ft,t("pick",Ft,!0);break}},je=fe=>{t("panel-change",w.value.toDate(),fe,I.value)};return pe(()=>D.value,fe=>{if(["month","year"].includes(fe)){I.value=fe;return}else if(fe==="years"){I.value="year";return}I.value="date"},{immediate:!0}),pe(()=>I.value,()=>{c==null||c.updatePopper()}),pe(()=>_.value,fe=>{fe&&(w.value=Le())},{immediate:!0}),pe(()=>n.parsedValue,fe=>{if(fe){if(D.value==="dates"||D.value==="years"||Array.isArray(fe))return;w.value=fe}else w.value=Le()},{immediate:!0}),t("set-picker-option",["isValidValue",Re]),t("set-picker-option",["formatToString",He]),t("set-picker-option",["parseUserInput",de]),t("set-picker-option",["handleFocusPicker",Ue]),(fe,$e)=>(y(),M("div",{class:$([s(a).b(),s(r).b(),{"has-sidebar":fe.$slots.sidebar||s(Y),"has-time":s(Q)}])},[k("div",{class:$(s(a).e("body-wrapper"))},[re(fe.$slots,"sidebar",{class:$(s(a).e("sidebar"))}),s(Y)?(y(),M("div",{key:0,class:$(s(a).e("sidebar"))},[(y(!0),M(Fe,null,mt(s(p),(ee,ie)=>(y(),M("button",{key:ie,type:"button",class:$(s(a).e("shortcut")),onClick:ke=>N(ee)},Me(ee.text),11,$q))),128))],2)):Z("v-if",!0),k("div",{class:$(s(a).e("body"))},[s(Q)?(y(),M("div",{key:0,class:$(s(r).e("time-header"))},[k("span",{class:$(s(r).e("editor-wrap"))},[W(s(mn),{placeholder:s(u)("el.datepicker.selectDate"),"model-value":s(ve),size:"small","validate-event":!1,onInput:$e[0]||($e[0]=ee=>V.value=ee),onChange:Se},null,8,["placeholder","model-value"])],2),Qe((y(),M("span",{class:$(s(r).e("editor-wrap"))},[W(s(mn),{placeholder:s(u)("el.datepicker.selectTime"),"model-value":s(te),size:"small","validate-event":!1,onFocus:ue,onInput:$e[1]||($e[1]=ee=>L.value=ee),onChange:he},null,8,["placeholder","model-value"]),W(s(Fu),{visible:be.value,format:s(Ae),"parsed-value":w.value,onPick:Ce},null,8,["visible","format","parsed-value"])],2)),[[s(sa),ye]])],2)):Z("v-if",!0),Qe(k("div",{class:$([s(r).e("header"),(I.value==="year"||I.value==="month")&&s(r).e("header--bordered")])},[k("span",{class:$(s(r).e("prev-btn"))},[k("button",{type:"button","aria-label":s(u)("el.datepicker.prevYear"),class:$(["d-arrow-left",s(a).e("icon-btn")]),onClick:$e[2]||($e[2]=ee=>B(!1))},[W(s(Be),null,{default:G(()=>[W(s(Mr))]),_:1})],10,Tq),Qe(k("button",{type:"button","aria-label":s(u)("el.datepicker.prevMonth"),class:$([s(a).e("icon-btn"),"arrow-left"]),onClick:$e[3]||($e[3]=ee=>F(!1))},[W(s(Be),null,{default:G(()=>[W(s(aa))]),_:1})],10,Aq),[[bt,I.value==="date"]])],2),k("span",{role:"button",class:$(s(r).e("header-label")),"aria-live":"polite",tabindex:"0",onKeydown:$e[4]||($e[4]=Mt(ee=>_e("year"),["enter"])),onClick:$e[5]||($e[5]=ee=>_e("year"))},Me(s(H)),35),Qe(k("span",{role:"button","aria-live":"polite",tabindex:"0",class:$([s(r).e("header-label"),{active:I.value==="month"}]),onKeydown:$e[6]||($e[6]=Mt(ee=>_e("month"),["enter"])),onClick:$e[7]||($e[7]=ee=>_e("month"))},Me(s(u)(`el.datepicker.month${s(E)+1}`)),35),[[bt,I.value==="date"]]),k("span",{class:$(s(r).e("next-btn"))},[Qe(k("button",{type:"button","aria-label":s(u)("el.datepicker.nextMonth"),class:$([s(a).e("icon-btn"),"arrow-right"]),onClick:$e[8]||($e[8]=ee=>F(!0))},[W(s(Be),null,{default:G(()=>[W(s(Sn))]),_:1})],10,Oq),[[bt,I.value==="date"]]),k("button",{type:"button","aria-label":s(u)("el.datepicker.nextYear"),class:$([s(a).e("icon-btn"),"d-arrow-right"]),onClick:$e[9]||($e[9]=ee=>B(!0))},[W(s(Be),null,{default:G(()=>[W(s($r))]),_:1})],10,Nq)],2)],2),[[bt,I.value!=="time"]]),k("div",{class:$(s(a).e("content")),onKeydown:ot},[I.value==="date"?(y(),oe(Hf,{key:0,ref_key:"currentViewRef",ref:g,"selection-mode":s(D),date:w.value,"parsed-value":fe.parsedValue,"disabled-date":s(h),"cell-class-name":s(m),onPick:K},null,8,["selection-mode","date","parsed-value","disabled-date","cell-class-name"])):Z("v-if",!0),I.value==="year"?(y(),oe(Mq,{key:1,ref_key:"currentViewRef",ref:g,"selection-mode":s(D),date:w.value,"disabled-date":s(h),"parsed-value":fe.parsedValue,onPick:se},null,8,["selection-mode","date","disabled-date","parsed-value"])):Z("v-if",!0),I.value==="month"?(y(),oe(Df,{key:2,ref_key:"currentViewRef",ref:g,date:w.value,"parsed-value":fe.parsedValue,"disabled-date":s(h),onPick:J},null,8,["date","parsed-value","disabled-date"])):Z("v-if",!0)],34)],2)],2),Qe(k("div",{class:$(s(a).e("footer"))},[Qe(W(s(rn),{text:"",size:"small",class:$(s(a).e("link-btn")),disabled:s(ce),onClick:ge},{default:G(()=>[vt(Me(s(u)("el.datepicker.now")),1)]),_:1},8,["class","disabled"]),[[bt,s(D)!=="dates"&&s(D)!=="years"]]),W(s(rn),{plain:"",size:"small",class:$(s(a).e("link-btn")),disabled:s(ae),onClick:Te},{default:G(()=>[vt(Me(s(u)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])],2),[[bt,s(le)]])],2))}});var Rq=xe(Iq,[["__file","panel-date-pick.vue"]]);const Pq=Ee({...n8,...o8}),Lq=e=>{const{emit:t}=rt(),n=Pr(),o=fn();return r=>{const l=Xe(r.value)?r.value():r.value;if(l){t("pick",[at(l[0]).locale(e.value),at(l[1]).locale(e.value)]);return}r.onClick&&r.onClick({attrs:n,slots:o,emit:t})}},r8=(e,{defaultValue:t,leftDate:n,rightDate:o,unit:a,onParsedValueChanged:r})=>{const{emit:l}=rt(),{pickerNs:i}=Pe(K2),u=me("date-range-picker"),{t:d,lang:f}=_t(),c=Lq(f),p=R(),h=R(),m=R({endDate:null,selecting:!1}),v=b=>{m.value=b},_=(b=!1)=>{const C=s(p),x=s(h);Bf([C,x])&&l("pick",[C,x],b)},g=b=>{m.value.selecting=b,b||(m.value.endDate=null)},w=()=>{const[b,C]=a8(s(t),{lang:s(f),unit:a,unlinkPanels:e.unlinkPanels});p.value=void 0,h.value=void 0,n.value=b,o.value=C};return pe(t,b=>{b&&w()},{immediate:!0}),pe(()=>e.parsedValue,b=>{if(Ie(b)&&b.length===2){const[C,x]=b;p.value=C,n.value=C,h.value=x,r(s(p),s(h))}else w()},{immediate:!0}),{minDate:p,maxDate:h,rangeState:m,lang:f,ppNs:i,drpNs:u,handleChangeRange:v,handleRangeConfirm:_,handleShortcutClick:c,onSelect:g,t:d}},Vq=["onClick"],Bq=["aria-label"],zq=["aria-label"],Hq=["disabled","aria-label"],Dq=["disabled","aria-label"],Fq=["disabled","aria-label"],Kq=["disabled","aria-label"],Wq=["aria-label"],jq=["aria-label"],Bi="month",qq=A({__name:"panel-date-range",props:Pq,emits:["pick","set-picker-option","calendar-change","panel-change"],setup(e,{emit:t}){const n=e,o=Pe("EP_PICKER_BASE"),{disabledDate:a,cellClassName:r,format:l,defaultTime:i,clearable:u}=o.props,d=At(o.props,"shortcuts"),f=At(o.props,"defaultValue"),{lang:c}=_t(),p=R(at().locale(c.value)),h=R(at().locale(c.value).add(1,Bi)),{minDate:m,maxDate:v,rangeState:_,ppNs:g,drpNs:w,handleChangeRange:b,handleRangeConfirm:C,handleShortcutClick:x,onSelect:E,t:O}=r8(n,{defaultValue:f,leftDate:p,rightDate:h,unit:Bi,onParsedValueChanged:$e}),T=R({min:null,max:null}),V=R({min:null,max:null}),L=S(()=>`${p.value.year()} ${O("el.datepicker.year")} ${O(`el.datepicker.month${p.value.month()+1}`)}`),P=S(()=>`${h.value.year()} ${O("el.datepicker.year")} ${O(`el.datepicker.month${h.value.month()+1}`)}`),z=S(()=>p.value.year()),j=S(()=>p.value.month()),K=S(()=>h.value.year()),F=S(()=>h.value.month()),B=S(()=>!!d.value.length),I=S(()=>T.value.min!==null?T.value.min:m.value?m.value.format(Y.value):""),H=S(()=>T.value.max!==null?T.value.max:v.value||m.value?(v.value||m.value).format(Y.value):""),N=S(()=>V.value.min!==null?V.value.min:m.value?m.value.format(q.value):""),D=S(()=>V.value.max!==null?V.value.max:v.value||m.value?(v.value||m.value).format(q.value):""),q=S(()=>n.timeFormat||i3(l)),Y=S(()=>n.dateFormat||s3(l)),J=ee=>Bf(ee)&&(a?!a(ee[0].toDate())&&!a(ee[1].toDate()):!0),se=()=>{p.value=p.value.subtract(1,"year"),n.unlinkPanels||(h.value=p.value.add(1,"month")),Ae("year")},_e=()=>{p.value=p.value.subtract(1,"month"),n.unlinkPanels||(h.value=p.value.add(1,"month")),Ae("month")},Q=()=>{n.unlinkPanels?h.value=h.value.add(1,"year"):(p.value=p.value.add(1,"year"),h.value=p.value.add(1,"month")),Ae("year")},le=()=>{n.unlinkPanels?h.value=h.value.add(1,"month"):(p.value=p.value.add(1,"month"),h.value=p.value.add(1,"month")),Ae("month")},ae=()=>{p.value=p.value.add(1,"year"),Ae("year")},Te=()=>{p.value=p.value.add(1,"month"),Ae("month")},ce=()=>{h.value=h.value.subtract(1,"year"),Ae("year")},ge=()=>{h.value=h.value.subtract(1,"month"),Ae("month")},Ae=ee=>{t("panel-change",[p.value.toDate(),h.value.toDate()],ee)},U=S(()=>{const ee=(j.value+1)%12,ie=j.value+1>=12?1:0;return n.unlinkPanels&&new Date(z.value+ie,ee)n.unlinkPanels&&K.value*12+F.value-(z.value*12+j.value+1)>=12),ve=S(()=>!(m.value&&v.value&&!_.value.selecting&&Bf([m.value,v.value]))),be=S(()=>n.type==="datetime"||n.type==="datetimerange"),ue=(ee,ie)=>{if(ee)return i?at(i[ie]||i).locale(c.value).year(ee.year()).month(ee.month()).date(ee.date()):ee},ye=(ee,ie=!0)=>{const ke=ee.minDate,ne=ee.maxDate,ze=ue(ke,0),tt=ue(ne,1);v.value===tt&&m.value===ze||(t("calendar-change",[ke.toDate(),ne&&ne.toDate()]),v.value=tt,m.value=ze,!(!ie||be.value)&&C())},we=R(!1),Ce=R(!1),he=()=>{we.value=!1},Se=()=>{Ce.value=!1},Re=(ee,ie)=>{T.value[ie]=ee;const ke=at(ee,Y.value).locale(c.value);if(ke.isValid()){if(a&&a(ke.toDate()))return;ie==="min"?(p.value=ke,m.value=(m.value||p.value).year(ke.year()).month(ke.month()).date(ke.date()),!n.unlinkPanels&&(!v.value||v.value.isBefore(m.value))&&(h.value=ke.add(1,"month"),v.value=m.value.add(1,"month"))):(h.value=ke,v.value=(v.value||h.value).year(ke.year()).month(ke.month()).date(ke.date()),!n.unlinkPanels&&(!m.value||m.value.isAfter(v.value))&&(p.value=ke.subtract(1,"month"),m.value=v.value.subtract(1,"month")))}},He=(ee,ie)=>{T.value[ie]=null},de=(ee,ie)=>{V.value[ie]=ee;const ke=at(ee,q.value).locale(c.value);ke.isValid()&&(ie==="min"?(we.value=!0,m.value=(m.value||p.value).hour(ke.hour()).minute(ke.minute()).second(ke.second()),(!v.value||v.value.isBefore(m.value))&&(v.value=m.value)):(Ce.value=!0,v.value=(v.value||h.value).hour(ke.hour()).minute(ke.minute()).second(ke.second()),h.value=v.value,v.value&&v.value.isBefore(m.value)&&(m.value=v.value)))},Le=(ee,ie)=>{V.value[ie]=null,ie==="min"?(p.value=m.value,we.value=!1):(h.value=v.value,Ce.value=!1)},Ue=(ee,ie,ke)=>{V.value.min||(ee&&(p.value=ee,m.value=(m.value||p.value).hour(ee.hour()).minute(ee.minute()).second(ee.second())),ke||(we.value=ie),(!v.value||v.value.isBefore(m.value))&&(v.value=m.value,h.value=ee))},ot=(ee,ie,ke)=>{V.value.max||(ee&&(h.value=ee,v.value=(v.value||h.value).hour(ee.hour()).minute(ee.minute()).second(ee.second())),ke||(Ce.value=ie),v.value&&v.value.isBefore(m.value)&&(m.value=v.value))},dt=()=>{p.value=a8(s(f),{lang:s(c),unit:"month",unlinkPanels:n.unlinkPanels})[0],h.value=p.value.add(1,"month"),v.value=void 0,m.value=void 0,t("pick",null)},je=ee=>Ie(ee)?ee.map(ie=>ie.format(l)):ee.format(l),fe=ee=>Ie(ee)?ee.map(ie=>at(ie,l).locale(c.value)):at(ee,l).locale(c.value);function $e(ee,ie){if(n.unlinkPanels&&ie){const ke=(ee==null?void 0:ee.year())||0,ne=(ee==null?void 0:ee.month())||0,ze=ie.year(),tt=ie.month();h.value=ke===ze&&ne===tt?ie.add(1,Bi):ie}else h.value=p.value.add(1,Bi),ie&&(h.value=h.value.hour(ie.hour()).minute(ie.minute()).second(ie.second()))}return t("set-picker-option",["isValidValue",J]),t("set-picker-option",["parseUserInput",fe]),t("set-picker-option",["formatToString",je]),t("set-picker-option",["handleClear",dt]),(ee,ie)=>(y(),M("div",{class:$([s(g).b(),s(w).b(),{"has-sidebar":ee.$slots.sidebar||s(B),"has-time":s(be)}])},[k("div",{class:$(s(g).e("body-wrapper"))},[re(ee.$slots,"sidebar",{class:$(s(g).e("sidebar"))}),s(B)?(y(),M("div",{key:0,class:$(s(g).e("sidebar"))},[(y(!0),M(Fe,null,mt(s(d),(ke,ne)=>(y(),M("button",{key:ne,type:"button",class:$(s(g).e("shortcut")),onClick:ze=>s(x)(ke)},Me(ke.text),11,Vq))),128))],2)):Z("v-if",!0),k("div",{class:$(s(g).e("body"))},[s(be)?(y(),M("div",{key:0,class:$(s(w).e("time-header"))},[k("span",{class:$(s(w).e("editors-wrap"))},[k("span",{class:$(s(w).e("time-picker-wrap"))},[W(s(mn),{size:"small",disabled:s(_).selecting,placeholder:s(O)("el.datepicker.startDate"),class:$(s(w).e("editor")),"model-value":s(I),"validate-event":!1,onInput:ie[0]||(ie[0]=ke=>Re(ke,"min")),onChange:ie[1]||(ie[1]=ke=>He(ke,"min"))},null,8,["disabled","placeholder","class","model-value"])],2),Qe((y(),M("span",{class:$(s(w).e("time-picker-wrap"))},[W(s(mn),{size:"small",class:$(s(w).e("editor")),disabled:s(_).selecting,placeholder:s(O)("el.datepicker.startTime"),"model-value":s(N),"validate-event":!1,onFocus:ie[2]||(ie[2]=ke=>we.value=!0),onInput:ie[3]||(ie[3]=ke=>de(ke,"min")),onChange:ie[4]||(ie[4]=ke=>Le(ke,"min"))},null,8,["class","disabled","placeholder","model-value"]),W(s(Fu),{visible:we.value,format:s(q),"datetime-role":"start","parsed-value":p.value,onPick:Ue},null,8,["visible","format","parsed-value"])],2)),[[s(sa),he]])],2),k("span",null,[W(s(Be),null,{default:G(()=>[W(s(Sn))]),_:1})]),k("span",{class:$([s(w).e("editors-wrap"),"is-right"])},[k("span",{class:$(s(w).e("time-picker-wrap"))},[W(s(mn),{size:"small",class:$(s(w).e("editor")),disabled:s(_).selecting,placeholder:s(O)("el.datepicker.endDate"),"model-value":s(H),readonly:!s(m),"validate-event":!1,onInput:ie[5]||(ie[5]=ke=>Re(ke,"max")),onChange:ie[6]||(ie[6]=ke=>He(ke,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"])],2),Qe((y(),M("span",{class:$(s(w).e("time-picker-wrap"))},[W(s(mn),{size:"small",class:$(s(w).e("editor")),disabled:s(_).selecting,placeholder:s(O)("el.datepicker.endTime"),"model-value":s(D),readonly:!s(m),"validate-event":!1,onFocus:ie[7]||(ie[7]=ke=>s(m)&&(Ce.value=!0)),onInput:ie[8]||(ie[8]=ke=>de(ke,"max")),onChange:ie[9]||(ie[9]=ke=>Le(ke,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"]),W(s(Fu),{"datetime-role":"end",visible:Ce.value,format:s(q),"parsed-value":h.value,onPick:ot},null,8,["visible","format","parsed-value"])],2)),[[s(sa),Se]])],2)],2)):Z("v-if",!0),k("div",{class:$([[s(g).e("content"),s(w).e("content")],"is-left"])},[k("div",{class:$(s(w).e("header"))},[k("button",{type:"button",class:$([s(g).e("icon-btn"),"d-arrow-left"]),"aria-label":s(O)("el.datepicker.prevYear"),onClick:se},[W(s(Be),null,{default:G(()=>[W(s(Mr))]),_:1})],10,Bq),k("button",{type:"button",class:$([s(g).e("icon-btn"),"arrow-left"]),"aria-label":s(O)("el.datepicker.prevMonth"),onClick:_e},[W(s(Be),null,{default:G(()=>[W(s(aa))]),_:1})],10,zq),ee.unlinkPanels?(y(),M("button",{key:0,type:"button",disabled:!s(te),class:$([[s(g).e("icon-btn"),{"is-disabled":!s(te)}],"d-arrow-right"]),"aria-label":s(O)("el.datepicker.nextYear"),onClick:ae},[W(s(Be),null,{default:G(()=>[W(s($r))]),_:1})],10,Hq)):Z("v-if",!0),ee.unlinkPanels?(y(),M("button",{key:1,type:"button",disabled:!s(U),class:$([[s(g).e("icon-btn"),{"is-disabled":!s(U)}],"arrow-right"]),"aria-label":s(O)("el.datepicker.nextMonth"),onClick:Te},[W(s(Be),null,{default:G(()=>[W(s(Sn))]),_:1})],10,Dq)):Z("v-if",!0),k("div",null,Me(s(L)),1)],2),W(Hf,{"selection-mode":"range",date:p.value,"min-date":s(m),"max-date":s(v),"range-state":s(_),"disabled-date":s(a),"cell-class-name":s(r),onChangerange:s(b),onPick:ye,onSelect:s(E)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","onChangerange","onSelect"])],2),k("div",{class:$([[s(g).e("content"),s(w).e("content")],"is-right"])},[k("div",{class:$(s(w).e("header"))},[ee.unlinkPanels?(y(),M("button",{key:0,type:"button",disabled:!s(te),class:$([[s(g).e("icon-btn"),{"is-disabled":!s(te)}],"d-arrow-left"]),"aria-label":s(O)("el.datepicker.prevYear"),onClick:ce},[W(s(Be),null,{default:G(()=>[W(s(Mr))]),_:1})],10,Fq)):Z("v-if",!0),ee.unlinkPanels?(y(),M("button",{key:1,type:"button",disabled:!s(U),class:$([[s(g).e("icon-btn"),{"is-disabled":!s(U)}],"arrow-left"]),"aria-label":s(O)("el.datepicker.prevMonth"),onClick:ge},[W(s(Be),null,{default:G(()=>[W(s(aa))]),_:1})],10,Kq)):Z("v-if",!0),k("button",{type:"button","aria-label":s(O)("el.datepicker.nextYear"),class:$([s(g).e("icon-btn"),"d-arrow-right"]),onClick:Q},[W(s(Be),null,{default:G(()=>[W(s($r))]),_:1})],10,Wq),k("button",{type:"button",class:$([s(g).e("icon-btn"),"arrow-right"]),"aria-label":s(O)("el.datepicker.nextMonth"),onClick:le},[W(s(Be),null,{default:G(()=>[W(s(Sn))]),_:1})],10,jq),k("div",null,Me(s(P)),1)],2),W(Hf,{"selection-mode":"range",date:h.value,"min-date":s(m),"max-date":s(v),"range-state":s(_),"disabled-date":s(a),"cell-class-name":s(r),onChangerange:s(b),onPick:ye,onSelect:s(E)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","onChangerange","onSelect"])],2)],2)],2),s(be)?(y(),M("div",{key:0,class:$(s(g).e("footer"))},[s(u)?(y(),oe(s(rn),{key:0,text:"",size:"small",class:$(s(g).e("link-btn")),onClick:dt},{default:G(()=>[vt(Me(s(O)("el.datepicker.clear")),1)]),_:1},8,["class"])):Z("v-if",!0),W(s(rn),{plain:"",size:"small",class:$(s(g).e("link-btn")),disabled:s(ve),onClick:ie[10]||(ie[10]=ke=>s(C)(!1))},{default:G(()=>[vt(Me(s(O)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])],2)):Z("v-if",!0)],2))}});var Uq=xe(qq,[["__file","panel-date-range.vue"]]);const Yq=Ee({...o8}),Gq=["pick","set-picker-option","calendar-change"],Xq=({unlinkPanels:e,leftDate:t,rightDate:n})=>{const{t:o}=_t(),a=()=>{t.value=t.value.subtract(1,"year"),e.value||(n.value=n.value.subtract(1,"year"))},r=()=>{e.value||(t.value=t.value.add(1,"year")),n.value=n.value.add(1,"year")},l=()=>{t.value=t.value.add(1,"year")},i=()=>{n.value=n.value.subtract(1,"year")},u=S(()=>`${t.value.year()} ${o("el.datepicker.year")}`),d=S(()=>`${n.value.year()} ${o("el.datepicker.year")}`),f=S(()=>t.value.year()),c=S(()=>n.value.year()===t.value.year()?t.value.year()+1:n.value.year());return{leftPrevYear:a,rightNextYear:r,leftNextYear:l,rightPrevYear:i,leftLabel:u,rightLabel:d,leftYear:f,rightYear:c}},Jq=["onClick"],Zq=["disabled"],Qq=["disabled"],zi="year",eU=A({name:"DatePickerMonthRange"}),tU=A({...eU,props:Yq,emits:Gq,setup(e,{emit:t}){const n=e,{lang:o}=_t(),a=Pe("EP_PICKER_BASE"),{shortcuts:r,disabledDate:l,format:i}=a.props,u=At(a.props,"defaultValue"),d=R(at().locale(o.value)),f=R(at().locale(o.value).add(1,zi)),{minDate:c,maxDate:p,rangeState:h,ppNs:m,drpNs:v,handleChangeRange:_,handleRangeConfirm:g,handleShortcutClick:w,onSelect:b}=r8(n,{defaultValue:u,leftDate:d,rightDate:f,unit:zi,onParsedValueChanged:B}),C=S(()=>!!r.length),{leftPrevYear:x,rightNextYear:E,leftNextYear:O,rightPrevYear:T,leftLabel:V,rightLabel:L,leftYear:P,rightYear:z}=Xq({unlinkPanels:At(n,"unlinkPanels"),leftDate:d,rightDate:f}),j=S(()=>n.unlinkPanels&&z.value>P.value+1),K=(I,H=!0)=>{const N=I.minDate,D=I.maxDate;p.value===D&&c.value===N||(t("calendar-change",[N.toDate(),D&&D.toDate()]),p.value=D,c.value=N,H&&g())},F=I=>I.map(H=>H.format(i));function B(I,H){if(n.unlinkPanels&&H){const N=(I==null?void 0:I.year())||0,D=H.year();f.value=N===D?H.add(1,zi):H}else f.value=d.value.add(1,zi)}return t("set-picker-option",["formatToString",F]),(I,H)=>(y(),M("div",{class:$([s(m).b(),s(v).b(),{"has-sidebar":!!I.$slots.sidebar||s(C)}])},[k("div",{class:$(s(m).e("body-wrapper"))},[re(I.$slots,"sidebar",{class:$(s(m).e("sidebar"))}),s(C)?(y(),M("div",{key:0,class:$(s(m).e("sidebar"))},[(y(!0),M(Fe,null,mt(s(r),(N,D)=>(y(),M("button",{key:D,type:"button",class:$(s(m).e("shortcut")),onClick:q=>s(w)(N)},Me(N.text),11,Jq))),128))],2)):Z("v-if",!0),k("div",{class:$(s(m).e("body"))},[k("div",{class:$([[s(m).e("content"),s(v).e("content")],"is-left"])},[k("div",{class:$(s(v).e("header"))},[k("button",{type:"button",class:$([s(m).e("icon-btn"),"d-arrow-left"]),onClick:H[0]||(H[0]=(...N)=>s(x)&&s(x)(...N))},[W(s(Be),null,{default:G(()=>[W(s(Mr))]),_:1})],2),I.unlinkPanels?(y(),M("button",{key:0,type:"button",disabled:!s(j),class:$([[s(m).e("icon-btn"),{[s(m).is("disabled")]:!s(j)}],"d-arrow-right"]),onClick:H[1]||(H[1]=(...N)=>s(O)&&s(O)(...N))},[W(s(Be),null,{default:G(()=>[W(s($r))]),_:1})],10,Zq)):Z("v-if",!0),k("div",null,Me(s(V)),1)],2),W(Df,{"selection-mode":"range",date:d.value,"min-date":s(c),"max-date":s(p),"range-state":s(h),"disabled-date":s(l),onChangerange:s(_),onPick:K,onSelect:s(b)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2),k("div",{class:$([[s(m).e("content"),s(v).e("content")],"is-right"])},[k("div",{class:$(s(v).e("header"))},[I.unlinkPanels?(y(),M("button",{key:0,type:"button",disabled:!s(j),class:$([[s(m).e("icon-btn"),{"is-disabled":!s(j)}],"d-arrow-left"]),onClick:H[2]||(H[2]=(...N)=>s(T)&&s(T)(...N))},[W(s(Be),null,{default:G(()=>[W(s(Mr))]),_:1})],10,Qq)):Z("v-if",!0),k("button",{type:"button",class:$([s(m).e("icon-btn"),"d-arrow-right"]),onClick:H[3]||(H[3]=(...N)=>s(E)&&s(E)(...N))},[W(s(Be),null,{default:G(()=>[W(s($r))]),_:1})],2),k("div",null,Me(s(L)),1)],2),W(Df,{"selection-mode":"range",date:f.value,"min-date":s(c),"max-date":s(p),"range-state":s(h),"disabled-date":s(l),onChangerange:s(_),onPick:K,onSelect:s(b)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2)],2)],2)],2))}});var nU=xe(tU,[["__file","panel-month-range.vue"]]);const oU=function(e){switch(e){case"daterange":case"datetimerange":return Uq;case"monthrange":return nU;default:return Rq}};at.extend(k3);at.extend(Dj);at.extend(H2);at.extend(Kj);at.extend(jj);at.extend(Uj);at.extend(Gj);at.extend(Jj);var aU=A({name:"ElDatePicker",install:null,props:Zj,emits:["update:modelValue"],setup(e,{expose:t,emit:n,slots:o}){const a=me("picker-panel");pt("ElPopperOptions",wt(At(e,"popperOptions"))),pt(K2,{slots:o,pickerNs:a});const r=R();t({focus:(u=!0)=>{var d;(d=r.value)==null||d.focus(u)},handleOpen:()=>{var u;(u=r.value)==null||u.handleOpen()},handleClose:()=>{var u;(u=r.value)==null||u.handleClose()}});const i=u=>{n("update:modelValue",u)};return()=>{var u;const d=(u=e.format)!=null?u:ND[e.type]||Gr,f=oU(e.type);return W(d3,ft(e,{format:d,type:e.type,ref:r,"onUpdate:modelValue":i}),{default:c=>W(f,c,null),"range-separator":o["range-separator"]})}}});const su=aU;su.install=e=>{e.component(su.name,su)};const rU=su,q2=Symbol("elDescriptions");var Yl=A({name:"ElDescriptionsCell",props:{cell:{type:Object},tag:{type:String,default:"td"},type:{type:String}},setup(){return{descriptions:Pe(q2,{})}},render(){var e,t,n,o,a,r,l;const i=$P(this.cell),u=(((e=this.cell)==null?void 0:e.dirs)||[]).map(x=>{const{dir:E,arg:O,modifiers:T,value:V}=x;return[E,V,O,T]}),{border:d,direction:f}=this.descriptions,c=f==="vertical",p=((o=(n=(t=this.cell)==null?void 0:t.children)==null?void 0:n.label)==null?void 0:o.call(n))||i.label,h=(l=(r=(a=this.cell)==null?void 0:a.children)==null?void 0:r.default)==null?void 0:l.call(r),m=i.span,v=i.align?`is-${i.align}`:"",_=i.labelAlign?`is-${i.labelAlign}`:v,g=i.className,w=i.labelClassName,b={width:Xt(i.width),minWidth:Xt(i.minWidth)},C=me("descriptions");switch(this.type){case"label":return Qe(qe(this.tag,{style:b,class:[C.e("cell"),C.e("label"),C.is("bordered-label",d),C.is("vertical-label",c),_,w],colSpan:c?m:1},p),u);case"content":return Qe(qe(this.tag,{style:b,class:[C.e("cell"),C.e("content"),C.is("bordered-content",d),C.is("vertical-content",c),v,g],colSpan:c?m:m*2-1},h),u);default:return Qe(qe("td",{style:b,class:[C.e("cell"),v],colSpan:m},[tn(p)?void 0:qe("span",{class:[C.e("label"),w]},p),qe("span",{class:[C.e("content"),g]},h)]),u)}}});const lU=Ee({row:{type:X(Array),default:()=>[]}}),sU={key:1},iU=A({name:"ElDescriptionsRow"}),uU=A({...iU,props:lU,setup(e){const t=Pe(q2,{});return(n,o)=>s(t).direction==="vertical"?(y(),M(Fe,{key:0},[k("tr",null,[(y(!0),M(Fe,null,mt(n.row,(a,r)=>(y(),oe(s(Yl),{key:`tr1-${r}`,cell:a,tag:"th",type:"label"},null,8,["cell"]))),128))]),k("tr",null,[(y(!0),M(Fe,null,mt(n.row,(a,r)=>(y(),oe(s(Yl),{key:`tr2-${r}`,cell:a,tag:"td",type:"content"},null,8,["cell"]))),128))])],64)):(y(),M("tr",sU,[(y(!0),M(Fe,null,mt(n.row,(a,r)=>(y(),M(Fe,{key:`tr3-${r}`},[s(t).border?(y(),M(Fe,{key:0},[W(s(Yl),{cell:a,tag:"td",type:"label"},null,8,["cell"]),W(s(Yl),{cell:a,tag:"td",type:"content"},null,8,["cell"])],64)):(y(),oe(s(Yl),{key:1,cell:a,tag:"td",type:"both"},null,8,["cell"]))],64))),128))]))}});var cU=xe(uU,[["__file","descriptions-row.vue"]]);const dU=Ee({border:{type:Boolean,default:!1},column:{type:Number,default:3},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},size:cn,title:{type:String,default:""},extra:{type:String,default:""}}),fU=A({name:"ElDescriptions"}),pU=A({...fU,props:dU,setup(e){const t=e,n=me("descriptions"),o=an(),a=fn();pt(q2,t);const r=S(()=>[n.b(),n.m(o.value)]),l=(u,d,f,c=!1)=>(u.props||(u.props={}),d>f&&(u.props.span=f),c&&(u.props.span=d),u),i=()=>{if(!a.default)return[];const u=La(a.default()).filter(h=>{var m;return((m=h==null?void 0:h.type)==null?void 0:m.name)==="ElDescriptionsItem"}),d=[];let f=[],c=t.column,p=0;return u.forEach((h,m)=>{var v;const _=((v=h.props)==null?void 0:v.span)||1;if(mc?c:_),m===u.length-1){const g=t.column-p%t.column;f.push(l(h,g,c,!0)),d.push(f);return}_(y(),M("div",{class:$(s(r))},[u.title||u.extra||u.$slots.title||u.$slots.extra?(y(),M("div",{key:0,class:$(s(n).e("header"))},[k("div",{class:$(s(n).e("title"))},[re(u.$slots,"title",{},()=>[vt(Me(u.title),1)])],2),k("div",{class:$(s(n).e("extra"))},[re(u.$slots,"extra",{},()=>[vt(Me(u.extra),1)])],2)],2)):Z("v-if",!0),k("div",{class:$(s(n).e("body"))},[k("table",{class:$([s(n).e("table"),s(n).is("bordered",u.border)])},[k("tbody",null,[(y(!0),M(Fe,null,mt(i(),(f,c)=>(y(),oe(cU,{key:c,row:f},null,8,["row"]))),128))])],2)],2)],2))}});var vU=xe(pU,[["__file","description.vue"]]);const hU=Ee({label:{type:String,default:""},span:{type:Number,default:1},width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},align:{type:String,default:"left"},labelAlign:{type:String,default:""},className:{type:String,default:""},labelClassName:{type:String,default:""}}),l8=A({name:"ElDescriptionsItem",props:hU}),mU=lt(vU,{DescriptionsItem:l8}),gU=Dt(l8),yU=Ee({mask:{type:Boolean,default:!0},customMaskEvent:{type:Boolean,default:!1},overlayClass:{type:X([String,Array,Object])},zIndex:{type:X([String,Number])}}),_U={click:e=>e instanceof MouseEvent},bU="overlay";var wU=A({name:"ElOverlay",props:yU,emits:_U,setup(e,{slots:t,emit:n}){const o=me(bU),a=u=>{n("click",u)},{onClick:r,onMousedown:l,onMouseup:i}=E2(e.customMaskEvent?void 0:a);return()=>e.mask?W("div",{class:[o.b(),e.overlayClass],style:{zIndex:e.zIndex},onClick:r,onMousedown:l,onMouseup:i},[re(t,"default")],Zn.STYLE|Zn.CLASS|Zn.PROPS,["onClick","onMouseup","onMousedown"]):qe("div",{class:e.overlayClass,style:{zIndex:e.zIndex,position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}},[re(t,"default")])}});const U2=wU,s8=Symbol("dialogInjectionKey"),i8=Ee({center:Boolean,alignCenter:Boolean,closeIcon:{type:$t},draggable:Boolean,overflow:Boolean,fullscreen:Boolean,showClose:{type:Boolean,default:!0},title:{type:String,default:""},ariaLevel:{type:String,default:"2"}}),CU={close:()=>!0},SU=["aria-level"],kU=["aria-label"],EU=["id"],xU=A({name:"ElDialogContent"}),MU=A({...xU,props:i8,emits:CU,setup(e){const t=e,{t:n}=_t(),{Close:o}=c2,{dialogRef:a,headerRef:r,bodyId:l,ns:i,style:u}=Pe(s8),{focusTrapRef:d}=Pe(V2),f=S(()=>[i.b(),i.is("fullscreen",t.fullscreen),i.is("draggable",t.draggable),i.is("align-center",t.alignCenter),{[i.m("center")]:t.center}]),c=xc(d,a),p=S(()=>t.draggable),h=S(()=>t.overflow);return t6(a,r,p,h),(m,v)=>(y(),M("div",{ref:s(c),class:$(s(f)),style:De(s(u)),tabindex:"-1"},[k("header",{ref_key:"headerRef",ref:r,class:$([s(i).e("header"),{"show-close":m.showClose}])},[re(m.$slots,"header",{},()=>[k("span",{role:"heading","aria-level":m.ariaLevel,class:$(s(i).e("title"))},Me(m.title),11,SU)]),m.showClose?(y(),M("button",{key:0,"aria-label":s(n)("el.dialog.close"),class:$(s(i).e("headerbtn")),type:"button",onClick:v[0]||(v[0]=_=>m.$emit("close"))},[W(s(Be),{class:$(s(i).e("close"))},{default:G(()=>[(y(),oe(ut(m.closeIcon||s(o))))]),_:1},8,["class"])],10,kU)):Z("v-if",!0)],2),k("div",{id:s(l),class:$(s(i).e("body"))},[re(m.$slots,"default")],10,EU),m.$slots.footer?(y(),M("footer",{key:0,class:$(s(i).e("footer"))},[re(m.$slots,"footer")],2)):Z("v-if",!0)],6))}});var $U=xe(MU,[["__file","dialog-content.vue"]]);const u8=Ee({...i8,appendToBody:Boolean,appendTo:{type:X(String),default:"body"},beforeClose:{type:X(Function)},destroyOnClose:Boolean,closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:0},top:{type:String},modelValue:Boolean,modalClass:String,width:{type:[String,Number]},zIndex:{type:Number},trapFocus:{type:Boolean,default:!1},headerAriaLevel:{type:String,default:"2"}}),c8={open:()=>!0,opened:()=>!0,close:()=>!0,closed:()=>!0,[it]:e=>Qt(e),openAutoFocus:()=>!0,closeAutoFocus:()=>!0},d8=(e,t)=>{var n;const a=rt().emit,{nextZIndex:r}=zl();let l="";const i=kn(),u=kn(),d=R(!1),f=R(!1),c=R(!1),p=R((n=e.zIndex)!=null?n:r());let h,m;const v=Nc("namespace",ds),_=S(()=>{const F={},B=`--${v.value}-dialog`;return e.fullscreen||(e.top&&(F[`${B}-margin-top`]=e.top),e.width&&(F[`${B}-width`]=Xt(e.width))),F}),g=S(()=>e.alignCenter?{display:"flex"}:{});function w(){a("opened")}function b(){a("closed"),a(it,!1),e.destroyOnClose&&(c.value=!1)}function C(){a("close")}function x(){m==null||m(),h==null||h(),e.openDelay&&e.openDelay>0?{stop:h}=Cr(()=>V(),e.openDelay):V()}function E(){h==null||h(),m==null||m(),e.closeDelay&&e.closeDelay>0?{stop:m}=Cr(()=>L(),e.closeDelay):L()}function O(){function F(B){B||(f.value=!0,d.value=!1)}e.beforeClose?e.beforeClose(F):E()}function T(){e.closeOnClickModal&&O()}function V(){gt&&(d.value=!0)}function L(){d.value=!1}function P(){a("openAutoFocus")}function z(){a("closeAutoFocus")}function j(F){var B;((B=F.detail)==null?void 0:B.focusReason)==="pointer"&&F.preventDefault()}e.lockScroll&&m2(d);function K(){e.closeOnPressEscape&&O()}return pe(()=>e.modelValue,F=>{F?(f.value=!1,x(),c.value=!0,p.value=xg(e.zIndex)?r():p.value++,We(()=>{a("open"),t.value&&(t.value.scrollTop=0)})):d.value&&E()}),pe(()=>e.fullscreen,F=>{t.value&&(F?(l=t.value.style.transform,t.value.style.transform=""):t.value.style.transform=l)}),et(()=>{e.modelValue&&(d.value=!0,c.value=!0,x())}),{afterEnter:w,afterLeave:b,beforeLeave:C,handleClose:O,onModalClick:T,close:E,doClose:L,onOpenAutoFocus:P,onCloseAutoFocus:z,onCloseRequested:K,onFocusoutPrevented:j,titleId:i,bodyId:u,closed:f,style:_,overlayDialogStyle:g,rendered:c,visible:d,zIndex:p}},TU=["aria-label","aria-labelledby","aria-describedby"],AU=A({name:"ElDialog",inheritAttrs:!1}),OU=A({...AU,props:u8,emits:c8,setup(e,{expose:t}){const n=e,o=fn();gr({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},S(()=>!!o.title));const a=me("dialog"),r=R(),l=R(),i=R(),{visible:u,titleId:d,bodyId:f,style:c,overlayDialogStyle:p,rendered:h,zIndex:m,afterEnter:v,afterLeave:_,beforeLeave:g,handleClose:w,onModalClick:b,onOpenAutoFocus:C,onCloseAutoFocus:x,onCloseRequested:E,onFocusoutPrevented:O}=d8(n,r);pt(s8,{dialogRef:r,headerRef:l,bodyId:f,ns:a,rendered:h,style:c});const T=E2(b),V=S(()=>n.draggable&&!n.fullscreen);return t({visible:u,dialogContentRef:i}),(L,P)=>(y(),oe(Nl,{to:L.appendTo,disabled:L.appendTo!=="body"?!1:!L.appendToBody},[W(nn,{name:"dialog-fade",onAfterEnter:s(v),onAfterLeave:s(_),onBeforeLeave:s(g),persisted:""},{default:G(()=>[Qe(W(s(U2),{"custom-mask-event":"",mask:L.modal,"overlay-class":L.modalClass,"z-index":s(m)},{default:G(()=>[k("div",{role:"dialog","aria-modal":"true","aria-label":L.title||void 0,"aria-labelledby":L.title?void 0:s(d),"aria-describedby":s(f),class:$(`${s(a).namespace.value}-overlay-dialog`),style:De(s(p)),onClick:P[0]||(P[0]=(...z)=>s(T).onClick&&s(T).onClick(...z)),onMousedown:P[1]||(P[1]=(...z)=>s(T).onMousedown&&s(T).onMousedown(...z)),onMouseup:P[2]||(P[2]=(...z)=>s(T).onMouseup&&s(T).onMouseup(...z))},[W(s(ii),{loop:"",trapped:s(u),"focus-start-el":"container",onFocusAfterTrapped:s(C),onFocusAfterReleased:s(x),onFocusoutPrevented:s(O),onReleaseRequested:s(E)},{default:G(()=>[s(h)?(y(),oe($U,ft({key:0,ref_key:"dialogContentRef",ref:i},L.$attrs,{center:L.center,"align-center":L.alignCenter,"close-icon":L.closeIcon,draggable:s(V),overflow:L.overflow,fullscreen:L.fullscreen,"show-close":L.showClose,title:L.title,"aria-level":L.headerAriaLevel,onClose:s(w)}),na({header:G(()=>[L.$slots.title?re(L.$slots,"title",{key:1}):re(L.$slots,"header",{key:0,close:s(w),titleId:s(d),titleClass:s(a).e("title")})]),default:G(()=>[re(L.$slots,"default")]),_:2},[L.$slots.footer?{name:"footer",fn:G(()=>[re(L.$slots,"footer")])}:void 0]),1040,["center","align-center","close-icon","draggable","overflow","fullscreen","show-close","title","aria-level","onClose"])):Z("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,TU)]),_:3},8,["mask","overlay-class","z-index"]),[[bt,s(u)]])]),_:3},8,["onAfterEnter","onAfterLeave","onBeforeLeave"])],8,["to","disabled"]))}});var NU=xe(OU,[["__file","dialog.vue"]]);const IU=lt(NU),RU=Ee({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:X(String),default:"solid"}}),PU=A({name:"ElDivider"}),LU=A({...PU,props:RU,setup(e){const t=e,n=me("divider"),o=S(()=>n.cssVar({"border-style":t.borderStyle}));return(a,r)=>(y(),M("div",{class:$([s(n).b(),s(n).m(a.direction)]),style:De(s(o)),role:"separator"},[a.$slots.default&&a.direction!=="vertical"?(y(),M("div",{key:0,class:$([s(n).e("text"),s(n).is(a.contentPosition)])},[re(a.$slots,"default")],2)):Z("v-if",!0)],6))}});var VU=xe(LU,[["__file","divider.vue"]]);const f8=lt(VU),BU=Ee({...u8,direction:{type:String,default:"rtl",values:["ltr","rtl","ttb","btt"]},size:{type:[String,Number],default:"30%"},withHeader:{type:Boolean,default:!0},modalFade:{type:Boolean,default:!0},headerAriaLevel:{type:String,default:"2"}}),zU=c8,HU=["aria-label","aria-labelledby","aria-describedby"],DU=["id","aria-level"],FU=["aria-label"],KU=["id"],WU=A({name:"ElDrawer",inheritAttrs:!1}),jU=A({...WU,props:BU,emits:zU,setup(e,{expose:t}){const n=e,o=fn();gr({scope:"el-drawer",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/drawer.html#slots"},S(()=>!!o.title));const a=R(),r=R(),l=me("drawer"),{t:i}=_t(),{afterEnter:u,afterLeave:d,beforeLeave:f,visible:c,rendered:p,titleId:h,bodyId:m,zIndex:v,onModalClick:_,onOpenAutoFocus:g,onCloseAutoFocus:w,onFocusoutPrevented:b,onCloseRequested:C,handleClose:x}=d8(n,a),E=S(()=>n.direction==="rtl"||n.direction==="ltr"),O=S(()=>Xt(n.size));return t({handleClose:x,afterEnter:u,afterLeave:d}),(T,V)=>(y(),oe(Nl,{to:"body",disabled:!T.appendToBody},[W(nn,{name:s(l).b("fade"),onAfterEnter:s(u),onAfterLeave:s(d),onBeforeLeave:s(f),persisted:""},{default:G(()=>[Qe(W(s(U2),{mask:T.modal,"overlay-class":T.modalClass,"z-index":s(v),onClick:s(_)},{default:G(()=>[W(s(ii),{loop:"",trapped:s(c),"focus-trap-el":a.value,"focus-start-el":r.value,onFocusAfterTrapped:s(g),onFocusAfterReleased:s(w),onFocusoutPrevented:s(b),onReleaseRequested:s(C)},{default:G(()=>[k("div",ft({ref_key:"drawerRef",ref:a,"aria-modal":"true","aria-label":T.title||void 0,"aria-labelledby":T.title?void 0:s(h),"aria-describedby":s(m)},T.$attrs,{class:[s(l).b(),T.direction,s(c)&&"open"],style:s(E)?"width: "+s(O):"height: "+s(O),role:"dialog",onClick:V[1]||(V[1]=Ge(()=>{},["stop"]))}),[k("span",{ref_key:"focusStartRef",ref:r,class:$(s(l).e("sr-focus")),tabindex:"-1"},null,2),T.withHeader?(y(),M("header",{key:0,class:$(s(l).e("header"))},[T.$slots.title?re(T.$slots,"title",{key:1},()=>[Z(" DEPRECATED SLOT ")]):re(T.$slots,"header",{key:0,close:s(x),titleId:s(h),titleClass:s(l).e("title")},()=>[T.$slots.title?Z("v-if",!0):(y(),M("span",{key:0,id:s(h),role:"heading","aria-level":T.headerAriaLevel,class:$(s(l).e("title"))},Me(T.title),11,DU))]),T.showClose?(y(),M("button",{key:2,"aria-label":s(i)("el.drawer.close"),class:$(s(l).e("close-btn")),type:"button",onClick:V[0]||(V[0]=(...L)=>s(x)&&s(x)(...L))},[W(s(Be),{class:$(s(l).e("close"))},{default:G(()=>[W(s(uo))]),_:1},8,["class"])],10,FU)):Z("v-if",!0)],2)):Z("v-if",!0),s(p)?(y(),M("div",{key:1,id:s(m),class:$(s(l).e("body"))},[re(T.$slots,"default")],10,KU)):Z("v-if",!0),T.$slots.footer?(y(),M("div",{key:2,class:$(s(l).e("footer"))},[re(T.$slots,"footer")],2)):Z("v-if",!0)],16,HU)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])]),_:3},8,["mask","overlay-class","z-index","onClick"]),[[bt,s(c)]])]),_:3},8,["name","onAfterEnter","onAfterLeave","onBeforeLeave"])],8,["disabled"]))}});var qU=xe(jU,[["__file","drawer.vue"]]);const UU=lt(qU),YU=A({inheritAttrs:!1});function GU(e,t,n,o,a,r){return re(e.$slots,"default")}var XU=xe(YU,[["render",GU],["__file","collection.vue"]]);const JU=A({name:"ElCollectionItem",inheritAttrs:!1});function ZU(e,t,n,o,a,r){return re(e.$slots,"default")}var QU=xe(JU,[["render",ZU],["__file","collection-item.vue"]]);const p8="data-el-collection-item",v8=e=>{const t=`El${e}Collection`,n=`${t}Item`,o=Symbol(t),a=Symbol(n),r={...XU,name:t,setup(){const i=R(null),u=new Map;pt(o,{itemMap:u,getItems:()=>{const f=s(i);if(!f)return[];const c=Array.from(f.querySelectorAll(`[${p8}]`));return[...u.values()].sort((h,m)=>c.indexOf(h.ref)-c.indexOf(m.ref))},collectionRef:i})}},l={...QU,name:n,setup(i,{attrs:u}){const d=R(null),f=Pe(o,void 0);pt(a,{collectionItemRef:d}),et(()=>{const c=s(d);c&&f.itemMap.set(c,{ref:c,...u})}),It(()=>{const c=s(d);f.itemMap.delete(c)})}};return{COLLECTION_INJECTION_KEY:o,COLLECTION_ITEM_INJECTION_KEY:a,ElCollection:r,ElCollectionItem:l}},eY=Ee({style:{type:X([String,Array,Object])},currentTabId:{type:X(String)},defaultCurrentTabId:String,loop:Boolean,dir:{type:String,values:["ltr","rtl"],default:"ltr"},orientation:{type:X(String)},onBlur:Function,onFocus:Function,onMousedown:Function}),{ElCollection:tY,ElCollectionItem:nY,COLLECTION_INJECTION_KEY:Y2,COLLECTION_ITEM_INJECTION_KEY:oY}=v8("RovingFocusGroup"),G2=Symbol("elRovingFocusGroup"),h8=Symbol("elRovingFocusGroupItem"),aY={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"},rY=(e,t)=>{if(t!=="rtl")return e;switch(e){case Ke.right:return Ke.left;case Ke.left:return Ke.right;default:return e}},lY=(e,t,n)=>{const o=rY(e.key,n);if(!(t==="vertical"&&[Ke.left,Ke.right].includes(o))&&!(t==="horizontal"&&[Ke.up,Ke.down].includes(o)))return aY[o]},sY=(e,t)=>e.map((n,o)=>e[(o+t)%e.length]),X2=e=>{const{activeElement:t}=document;for(const n of e)if(n===t||(n.focus(),t!==document.activeElement))return},wh="currentTabIdChange",Ch="rovingFocusGroup.entryFocus",iY={bubbles:!1,cancelable:!0},uY=A({name:"ElRovingFocusGroupImpl",inheritAttrs:!1,props:eY,emits:[wh,"entryFocus"],setup(e,{emit:t}){var n;const o=R((n=e.currentTabId||e.defaultCurrentTabId)!=null?n:null),a=R(!1),r=R(!1),l=R(null),{getItems:i}=Pe(Y2,void 0),u=S(()=>[{outline:"none"},e.style]),d=v=>{t(wh,v)},f=()=>{a.value=!0},c=jt(v=>{var _;(_=e.onMousedown)==null||_.call(e,v)},()=>{r.value=!0}),p=jt(v=>{var _;(_=e.onFocus)==null||_.call(e,v)},v=>{const _=!s(r),{target:g,currentTarget:w}=v;if(g===w&&_&&!s(a)){const b=new Event(Ch,iY);if(w==null||w.dispatchEvent(b),!b.defaultPrevented){const C=i().filter(V=>V.focusable),x=C.find(V=>V.active),E=C.find(V=>V.id===s(o)),T=[x,E,...C].filter(Boolean).map(V=>V.ref);X2(T)}}r.value=!1}),h=jt(v=>{var _;(_=e.onBlur)==null||_.call(e,v)},()=>{a.value=!1}),m=(...v)=>{t("entryFocus",...v)};pt(G2,{currentTabbedId:Ol(o),loop:At(e,"loop"),tabIndex:S(()=>s(a)?-1:0),rovingFocusGroupRef:l,rovingFocusGroupRootStyle:u,orientation:At(e,"orientation"),dir:At(e,"dir"),onItemFocus:d,onItemShiftTab:f,onBlur:h,onFocus:p,onMousedown:c}),pe(()=>e.currentTabId,v=>{o.value=v??null}),Vt(l,Ch,m)}});function cY(e,t,n,o,a,r){return re(e.$slots,"default")}var dY=xe(uY,[["render",cY],["__file","roving-focus-group-impl.vue"]]);const fY=A({name:"ElRovingFocusGroup",components:{ElFocusGroupCollection:tY,ElRovingFocusGroupImpl:dY}});function pY(e,t,n,o,a,r){const l=nt("el-roving-focus-group-impl"),i=nt("el-focus-group-collection");return y(),oe(i,null,{default:G(()=>[W(l,Jo(pl(e.$attrs)),{default:G(()=>[re(e.$slots,"default")]),_:3},16)]),_:3})}var vY=xe(fY,[["render",pY],["__file","roving-focus-group.vue"]]);const hY=A({components:{ElRovingFocusCollectionItem:nY},props:{focusable:{type:Boolean,default:!0},active:{type:Boolean,default:!1}},emits:["mousedown","focus","keydown"],setup(e,{emit:t}){const{currentTabbedId:n,loop:o,onItemFocus:a,onItemShiftTab:r}=Pe(G2,void 0),{getItems:l}=Pe(Y2,void 0),i=kn(),u=R(null),d=jt(h=>{t("mousedown",h)},h=>{e.focusable?a(s(i)):h.preventDefault()}),f=jt(h=>{t("focus",h)},()=>{a(s(i))}),c=jt(h=>{t("keydown",h)},h=>{const{key:m,shiftKey:v,target:_,currentTarget:g}=h;if(m===Ke.tab&&v){r();return}if(_!==g)return;const w=lY(h);if(w){h.preventDefault();let C=l().filter(x=>x.focusable).map(x=>x.ref);switch(w){case"last":{C.reverse();break}case"prev":case"next":{w==="prev"&&C.reverse();const x=C.indexOf(g);C=o.value?sY(C,x+1):C.slice(x+1);break}}We(()=>{X2(C)})}}),p=S(()=>n.value===s(i));return pt(h8,{rovingFocusGroupItemRef:u,tabIndex:S(()=>s(p)?0:-1),handleMousedown:d,handleFocus:f,handleKeydown:c}),{id:i,handleKeydown:c,handleFocus:f,handleMousedown:d}}});function mY(e,t,n,o,a,r){const l=nt("el-roving-focus-collection-item");return y(),oe(l,{id:e.id,focusable:e.focusable,active:e.active},{default:G(()=>[re(e.$slots,"default")]),_:3},8,["id","focusable","active"])}var gY=xe(hY,[["render",mY],["__file","roving-focus-item.vue"]]);const iu=Ee({trigger:Ps.trigger,effect:{...pn.effect,default:"light"},type:{type:X(String)},placement:{type:X(String),default:"bottom"},popperOptions:{type:X(Object),default:()=>({})},id:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},showTimeout:{type:Number,default:150},hideTimeout:{type:Number,default:150},tabindex:{type:X([Number,String]),default:0},maxHeight:{type:X([Number,String]),default:""},popperClass:{type:String,default:""},disabled:{type:Boolean,default:!1},role:{type:String,default:"menu"},buttonProps:{type:X(Object)},teleported:pn.teleported}),m8=Ee({command:{type:[Object,String,Number],default:()=>({})},disabled:Boolean,divided:Boolean,textValue:String,icon:{type:$t}}),yY=Ee({onKeydown:{type:X(Function)}}),_Y=[Ke.down,Ke.pageDown,Ke.home],g8=[Ke.up,Ke.pageUp,Ke.end],bY=[..._Y,...g8],{ElCollection:wY,ElCollectionItem:CY,COLLECTION_INJECTION_KEY:SY,COLLECTION_ITEM_INJECTION_KEY:kY}=v8("Dropdown"),Bc=Symbol("elDropdown"),{ButtonGroup:EY}=rn,xY=A({name:"ElDropdown",components:{ElButton:rn,ElButtonGroup:EY,ElScrollbar:ha,ElDropdownCollection:wY,ElTooltip:En,ElRovingFocusGroup:vY,ElOnlyChild:K6,ElIcon:Be,ArrowDown:Bo},props:iu,emits:["visible-change","click","command"],setup(e,{emit:t}){const n=rt(),o=me("dropdown"),{t:a}=_t(),r=R(),l=R(),i=R(null),u=R(null),d=R(null),f=R(null),c=R(!1),p=[Ke.enter,Ke.space,Ke.down],h=S(()=>({maxHeight:Xt(e.maxHeight)})),m=S(()=>[o.m(x.value)]),v=S(()=>kr(e.trigger)),_=kn().value,g=S(()=>e.id||_);pe([r,v],([I,H],[N])=>{var D,q,Y;(D=N==null?void 0:N.$el)!=null&&D.removeEventListener&&N.$el.removeEventListener("pointerenter",O),(q=I==null?void 0:I.$el)!=null&&q.removeEventListener&&I.$el.removeEventListener("pointerenter",O),(Y=I==null?void 0:I.$el)!=null&&Y.addEventListener&&H.includes("hover")&&I.$el.addEventListener("pointerenter",O)},{immediate:!0}),It(()=>{var I,H;(H=(I=r.value)==null?void 0:I.$el)!=null&&H.removeEventListener&&r.value.$el.removeEventListener("pointerenter",O)});function w(){b()}function b(){var I;(I=i.value)==null||I.onClose()}function C(){var I;(I=i.value)==null||I.onOpen()}const x=an();function E(...I){t("command",...I)}function O(){var I,H;(H=(I=r.value)==null?void 0:I.$el)==null||H.focus()}function T(){}function V(){const I=s(u);v.value.includes("hover")&&(I==null||I.focus()),f.value=null}function L(I){f.value=I}function P(I){c.value||(I.preventDefault(),I.stopImmediatePropagation())}function z(){t("visible-change",!0)}function j(I){(I==null?void 0:I.type)==="keydown"&&u.value.focus()}function K(){t("visible-change",!1)}return pt(Bc,{contentRef:u,role:S(()=>e.role),triggerId:g,isUsingKeyboard:c,onItemEnter:T,onItemLeave:V}),pt("elDropdown",{instance:n,dropdownSize:x,handleClick:w,commandHandler:E,trigger:At(e,"trigger"),hideOnClick:At(e,"hideOnClick")}),{t:a,ns:o,scrollbar:d,wrapStyle:h,dropdownTriggerKls:m,dropdownSize:x,triggerId:g,triggerKeys:p,currentTabId:f,handleCurrentTabIdChange:L,handlerMainButtonClick:I=>{t("click",I)},handleEntryFocus:P,handleClose:b,handleOpen:C,handleBeforeShowTooltip:z,handleShowTooltip:j,handleBeforeHideTooltip:K,onFocusAfterTrapped:I=>{var H,N;I.preventDefault(),(N=(H=u.value)==null?void 0:H.focus)==null||N.call(H,{preventScroll:!0})},popperRef:i,contentRef:u,triggeringElementRef:r,referenceElementRef:l}}});function MY(e,t,n,o,a,r){var l;const i=nt("el-dropdown-collection"),u=nt("el-roving-focus-group"),d=nt("el-scrollbar"),f=nt("el-only-child"),c=nt("el-tooltip"),p=nt("el-button"),h=nt("arrow-down"),m=nt("el-icon"),v=nt("el-button-group");return y(),M("div",{class:$([e.ns.b(),e.ns.is("disabled",e.disabled)])},[W(c,{ref:"popperRef",role:e.role,effect:e.effect,"fallback-placements":["bottom","top"],"popper-options":e.popperOptions,"gpu-acceleration":!1,"hide-after":e.trigger==="hover"?e.hideTimeout:0,"manual-mode":!0,placement:e.placement,"popper-class":[e.ns.e("popper"),e.popperClass],"reference-element":(l=e.referenceElementRef)==null?void 0:l.$el,trigger:e.trigger,"trigger-keys":e.triggerKeys,"trigger-target-el":e.contentRef,"show-after":e.trigger==="hover"?e.showTimeout:0,"stop-popper-mouse-event":!1,"virtual-ref":e.triggeringElementRef,"virtual-triggering":e.splitButton,disabled:e.disabled,transition:`${e.ns.namespace.value}-zoom-in-top`,teleported:e.teleported,pure:"",persistent:"",onBeforeShow:e.handleBeforeShowTooltip,onShow:e.handleShowTooltip,onBeforeHide:e.handleBeforeHideTooltip},na({content:G(()=>[W(d,{ref:"scrollbar","wrap-style":e.wrapStyle,tag:"div","view-class":e.ns.e("list")},{default:G(()=>[W(u,{loop:e.loop,"current-tab-id":e.currentTabId,orientation:"horizontal",onCurrentTabIdChange:e.handleCurrentTabIdChange,onEntryFocus:e.handleEntryFocus},{default:G(()=>[W(i,null,{default:G(()=>[re(e.$slots,"dropdown")]),_:3})]),_:3},8,["loop","current-tab-id","onCurrentTabIdChange","onEntryFocus"])]),_:3},8,["wrap-style","view-class"])]),_:2},[e.splitButton?void 0:{name:"default",fn:G(()=>[W(f,{id:e.triggerId,ref:"triggeringElementRef",role:"button",tabindex:e.tabindex},{default:G(()=>[re(e.$slots,"default")]),_:3},8,["id","tabindex"])])}]),1032,["role","effect","popper-options","hide-after","placement","popper-class","reference-element","trigger","trigger-keys","trigger-target-el","show-after","virtual-ref","virtual-triggering","disabled","transition","teleported","onBeforeShow","onShow","onBeforeHide"]),e.splitButton?(y(),oe(v,{key:0},{default:G(()=>[W(p,ft({ref:"referenceElementRef"},e.buttonProps,{size:e.dropdownSize,type:e.type,disabled:e.disabled,tabindex:e.tabindex,onClick:e.handlerMainButtonClick}),{default:G(()=>[re(e.$slots,"default")]),_:3},16,["size","type","disabled","tabindex","onClick"]),W(p,ft({id:e.triggerId,ref:"triggeringElementRef"},e.buttonProps,{role:"button",size:e.dropdownSize,type:e.type,class:e.ns.e("caret-button"),disabled:e.disabled,tabindex:e.tabindex,"aria-label":e.t("el.dropdown.toggleDropdown")}),{default:G(()=>[W(m,{class:$(e.ns.e("icon"))},{default:G(()=>[W(h)]),_:1},8,["class"])]),_:1},16,["id","size","type","class","disabled","tabindex","aria-label"])]),_:3})):Z("v-if",!0)],2)}var $Y=xe(xY,[["render",MY],["__file","dropdown.vue"]]);const TY=A({name:"DropdownItemImpl",components:{ElIcon:Be},props:m8,emits:["pointermove","pointerleave","click","clickimpl"],setup(e,{emit:t}){const n=me("dropdown"),{role:o}=Pe(Bc,void 0),{collectionItemRef:a}=Pe(kY,void 0),{collectionItemRef:r}=Pe(oY,void 0),{rovingFocusGroupItemRef:l,tabIndex:i,handleFocus:u,handleKeydown:d,handleMousedown:f}=Pe(h8,void 0),c=xc(a,r,l),p=S(()=>o.value==="menu"?"menuitem":o.value==="navigation"?"link":"button"),h=jt(m=>{const{code:v}=m;if(v===Ke.enter||v===Ke.space)return m.preventDefault(),m.stopImmediatePropagation(),t("clickimpl",m),!0},d);return{ns:n,itemRef:c,dataset:{[p8]:""},role:p,tabIndex:i,handleFocus:u,handleKeydown:h,handleMousedown:f}}}),AY=["aria-disabled","tabindex","role"];function OY(e,t,n,o,a,r){const l=nt("el-icon");return y(),M(Fe,null,[e.divided?(y(),M("li",ft({key:0,role:"separator",class:e.ns.bem("menu","item","divided")},e.$attrs),null,16)):Z("v-if",!0),k("li",ft({ref:e.itemRef},{...e.dataset,...e.$attrs},{"aria-disabled":e.disabled,class:[e.ns.be("menu","item"),e.ns.is("disabled",e.disabled)],tabindex:e.tabIndex,role:e.role,onClick:t[0]||(t[0]=i=>e.$emit("clickimpl",i)),onFocus:t[1]||(t[1]=(...i)=>e.handleFocus&&e.handleFocus(...i)),onKeydown:t[2]||(t[2]=Ge((...i)=>e.handleKeydown&&e.handleKeydown(...i),["self"])),onMousedown:t[3]||(t[3]=(...i)=>e.handleMousedown&&e.handleMousedown(...i)),onPointermove:t[4]||(t[4]=i=>e.$emit("pointermove",i)),onPointerleave:t[5]||(t[5]=i=>e.$emit("pointerleave",i))}),[e.icon?(y(),oe(l,{key:0},{default:G(()=>[(y(),oe(ut(e.icon)))]),_:1})):Z("v-if",!0),re(e.$slots,"default")],16,AY)],64)}var NY=xe(TY,[["render",OY],["__file","dropdown-item-impl.vue"]]);const y8=()=>{const e=Pe("elDropdown",{}),t=S(()=>e==null?void 0:e.dropdownSize);return{elDropdown:e,_elDropdownSize:t}},IY=A({name:"ElDropdownItem",components:{ElDropdownCollectionItem:CY,ElRovingFocusItem:gY,ElDropdownItemImpl:NY},inheritAttrs:!1,props:m8,emits:["pointermove","pointerleave","click"],setup(e,{emit:t,attrs:n}){const{elDropdown:o}=y8(),a=rt(),r=R(null),l=S(()=>{var h,m;return(m=(h=s(r))==null?void 0:h.textContent)!=null?m:""}),{onItemEnter:i,onItemLeave:u}=Pe(Bc,void 0),d=jt(h=>(t("pointermove",h),h.defaultPrevented),yv(h=>{if(e.disabled){u(h);return}const m=h.currentTarget;m===document.activeElement||m.contains(document.activeElement)||(i(h),h.defaultPrevented||m==null||m.focus())})),f=jt(h=>(t("pointerleave",h),h.defaultPrevented),yv(h=>{u(h)})),c=jt(h=>{if(!e.disabled)return t("click",h),h.type!=="keydown"&&h.defaultPrevented},h=>{var m,v,_;if(e.disabled){h.stopImmediatePropagation();return}(m=o==null?void 0:o.hideOnClick)!=null&&m.value&&((v=o.handleClick)==null||v.call(o)),(_=o.commandHandler)==null||_.call(o,e.command,a,h)}),p=S(()=>({...e,...n}));return{handleClick:c,handlePointerMove:d,handlePointerLeave:f,textContent:l,propsAndAttrs:p}}});function RY(e,t,n,o,a,r){var l;const i=nt("el-dropdown-item-impl"),u=nt("el-roving-focus-item"),d=nt("el-dropdown-collection-item");return y(),oe(d,{disabled:e.disabled,"text-value":(l=e.textValue)!=null?l:e.textContent},{default:G(()=>[W(u,{focusable:!e.disabled},{default:G(()=>[W(i,ft(e.propsAndAttrs,{onPointerleave:e.handlePointerLeave,onPointermove:e.handlePointerMove,onClickimpl:e.handleClick}),{default:G(()=>[re(e.$slots,"default")]),_:3},16,["onPointerleave","onPointermove","onClickimpl"])]),_:3},8,["focusable"])]),_:3},8,["disabled","text-value"])}var _8=xe(IY,[["render",RY],["__file","dropdown-item.vue"]]);const PY=A({name:"ElDropdownMenu",props:yY,setup(e){const t=me("dropdown"),{_elDropdownSize:n}=y8(),o=n.value,{focusTrapRef:a,onKeydown:r}=Pe(V2,void 0),{contentRef:l,role:i,triggerId:u}=Pe(Bc,void 0),{collectionRef:d,getItems:f}=Pe(SY,void 0),{rovingFocusGroupRef:c,rovingFocusGroupRootStyle:p,tabIndex:h,onBlur:m,onFocus:v,onMousedown:_}=Pe(G2,void 0),{collectionRef:g}=Pe(Y2,void 0),w=S(()=>[t.b("menu"),t.bm("menu",o==null?void 0:o.value)]),b=xc(l,d,a,c,g),C=jt(E=>{var O;(O=e.onKeydown)==null||O.call(e,E)},E=>{const{currentTarget:O,code:T,target:V}=E;if(O.contains(V),Ke.tab===T&&E.stopImmediatePropagation(),E.preventDefault(),V!==s(l)||!bY.includes(T))return;const P=f().filter(z=>!z.disabled).map(z=>z.ref);g8.includes(T)&&P.reverse(),X2(P)});return{size:o,rovingFocusGroupRootStyle:p,tabIndex:h,dropdownKls:w,role:i,triggerId:u,dropdownListWrapperRef:b,handleKeydown:E=>{C(E),r(E)},onBlur:m,onFocus:v,onMousedown:_}}}),LY=["role","aria-labelledby"];function VY(e,t,n,o,a,r){return y(),M("ul",{ref:e.dropdownListWrapperRef,class:$(e.dropdownKls),style:De(e.rovingFocusGroupRootStyle),tabindex:-1,role:e.role,"aria-labelledby":e.triggerId,onBlur:t[0]||(t[0]=(...l)=>e.onBlur&&e.onBlur(...l)),onFocus:t[1]||(t[1]=(...l)=>e.onFocus&&e.onFocus(...l)),onKeydown:t[2]||(t[2]=Ge((...l)=>e.handleKeydown&&e.handleKeydown(...l),["self"])),onMousedown:t[3]||(t[3]=Ge((...l)=>e.onMousedown&&e.onMousedown(...l),["self"]))},[re(e.$slots,"default")],46,LY)}var b8=xe(PY,[["render",VY],["__file","dropdown-menu.vue"]]);const BY=lt($Y,{DropdownItem:_8,DropdownMenu:b8}),zY=Dt(_8),HY=Dt(b8),DY={viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},FY=["id"],KY=["stop-color"],WY=["stop-color"],jY=["id"],qY=["stop-color"],UY=["stop-color"],YY=["id"],GY={id:"Illustrations",stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},XY={id:"B-type",transform:"translate(-1268.000000, -535.000000)"},JY={id:"Group-2",transform:"translate(1268.000000, 535.000000)"},ZY=["fill"],QY=["fill"],eG={id:"Group-Copy",transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"},tG=["fill"],nG=["fill"],oG=["fill"],aG=["fill"],rG=["fill"],lG={id:"Rectangle-Copy-17",transform:"translate(53.000000, 45.000000)"},sG=["fill","xlink:href"],iG=["fill","mask"],uG=["fill"],cG=A({name:"ImgEmpty"}),dG=A({...cG,setup(e){const t=me("empty"),n=kn();return(o,a)=>(y(),M("svg",DY,[k("defs",null,[k("linearGradient",{id:`linearGradient-1-${s(n)}`,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"},[k("stop",{"stop-color":`var(${s(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,KY),k("stop",{"stop-color":`var(${s(t).cssVarBlockName("fill-color-4")})`,offset:"100%"},null,8,WY)],8,FY),k("linearGradient",{id:`linearGradient-2-${s(n)}`,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"},[k("stop",{"stop-color":`var(${s(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,qY),k("stop",{"stop-color":`var(${s(t).cssVarBlockName("fill-color-6")})`,offset:"100%"},null,8,UY)],8,jY),k("rect",{id:`path-3-${s(n)}`,x:"0",y:"0",width:"17",height:"36"},null,8,YY)]),k("g",GY,[k("g",XY,[k("g",JY,[k("path",{id:"Oval-Copy-2",d:"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",fill:`var(${s(t).cssVarBlockName("fill-color-3")})`},null,8,ZY),k("polygon",{id:"Rectangle-Copy-14",fill:`var(${s(t).cssVarBlockName("fill-color-7")})`,transform:"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",points:"13 58 53 58 42 45 2 45"},null,8,QY),k("g",eG,[k("polygon",{id:"Rectangle-Copy-10",fill:`var(${s(t).cssVarBlockName("fill-color-7")})`,transform:"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",points:"2.84078316e-14 3 18 3 23 7 5 7"},null,8,tG),k("polygon",{id:"Rectangle-Copy-11",fill:`var(${s(t).cssVarBlockName("fill-color-5")})`,points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"},null,8,nG),k("rect",{id:"Rectangle-Copy-12",fill:`url(#linearGradient-1-${s(n)})`,transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"},null,8,oG),k("polygon",{id:"Rectangle-Copy-13",fill:`var(${s(t).cssVarBlockName("fill-color-2")})`,transform:"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",points:"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"},null,8,aG)]),k("rect",{id:"Rectangle-Copy-15",fill:`url(#linearGradient-2-${s(n)})`,x:"13",y:"45",width:"40",height:"36"},null,8,rG),k("g",lG,[k("use",{id:"Mask",fill:`var(${s(t).cssVarBlockName("fill-color-8")})`,transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":`#path-3-${s(n)}`},null,8,sG),k("polygon",{id:"Rectangle-Copy",fill:`var(${s(t).cssVarBlockName("fill-color-9")})`,mask:`url(#mask-4-${s(n)})`,transform:"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",points:"7 0 24 0 20 18 7 16.5"},null,8,iG)]),k("polygon",{id:"Rectangle-Copy-18",fill:`var(${s(t).cssVarBlockName("fill-color-2")})`,transform:"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",points:"62 45 79 45 70 58 53 58"},null,8,uG)])])])]))}});var fG=xe(dG,[["__file","img-empty.vue"]]);const pG=Ee({image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}}),vG=["src"],hG={key:1},mG=A({name:"ElEmpty"}),gG=A({...mG,props:pG,setup(e){const t=e,{t:n}=_t(),o=me("empty"),a=S(()=>t.description||n("el.table.emptyText")),r=S(()=>({width:Xt(t.imageSize)}));return(l,i)=>(y(),M("div",{class:$(s(o).b())},[k("div",{class:$(s(o).e("image")),style:De(s(r))},[l.image?(y(),M("img",{key:0,src:l.image,ondragstart:"return false"},null,8,vG)):re(l.$slots,"image",{key:1},()=>[W(fG)])],6),k("div",{class:$(s(o).e("description"))},[l.$slots.description?re(l.$slots,"description",{key:0}):(y(),M("p",hG,Me(s(a)),1))],2),l.$slots.default?(y(),M("div",{key:0,class:$(s(o).e("bottom"))},[re(l.$slots,"default")],2)):Z("v-if",!0)],2))}});var yG=xe(gG,[["__file","empty.vue"]]);const w8=lt(yG),_G=Ee({urlList:{type:X(Array),default:()=>Ht([])},zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},hideOnClickModal:Boolean,teleported:Boolean,closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},crossorigin:{type:X(String)}}),bG={close:()=>!0,switch:e=>Ye(e),rotate:e=>Ye(e)},wG=["src","crossorigin"],CG=A({name:"ElImageViewer"}),SG=A({...CG,props:_G,emits:bG,setup(e,{expose:t,emit:n}){var o;const a=e,r={CONTAIN:{name:"contain",icon:hr(Vg)},ORIGINAL:{name:"original",icon:hr(jg)}},{t:l}=_t(),i=me("image-viewer"),{nextZIndex:u}=zl(),d=R(),f=R([]),c=N_(),p=R(!0),h=R(a.initialIndex),m=Rt(r.CONTAIN),v=R({scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}),_=R((o=a.zIndex)!=null?o:u()),g=S(()=>{const{urlList:D}=a;return D.length<=1}),w=S(()=>h.value===0),b=S(()=>h.value===a.urlList.length-1),C=S(()=>a.urlList[h.value]),x=S(()=>[i.e("btn"),i.e("prev"),i.is("disabled",!a.infinite&&w.value)]),E=S(()=>[i.e("btn"),i.e("next"),i.is("disabled",!a.infinite&&b.value)]),O=S(()=>{const{scale:D,deg:q,offsetX:Y,offsetY:J,enableTransition:se}=v.value;let _e=Y/D,Q=J/D;switch(q%360){case 90:case-270:[_e,Q]=[Q,-_e];break;case 180:case-180:[_e,Q]=[-_e,-Q];break;case 270:case-90:[_e,Q]=[-Q,_e];break}const le={transform:`scale(${D}) rotate(${q}deg) translate(${_e}px, ${Q}px)`,transition:se?"transform .3s":""};return m.value.name===r.CONTAIN.name&&(le.maxWidth=le.maxHeight="100%"),le});function T(){L(),n("close")}function V(){const D=mr(Y=>{switch(Y.code){case Ke.esc:a.closeOnPressEscape&&T();break;case Ke.space:F();break;case Ke.left:I();break;case Ke.up:N("zoomIn");break;case Ke.right:H();break;case Ke.down:N("zoomOut");break}}),q=mr(Y=>{const J=Y.deltaY||Y.deltaX;N(J<0?"zoomIn":"zoomOut",{zoomRate:a.zoomRate,enableTransition:!1})});c.run(()=>{Vt(document,"keydown",D),Vt(document,"wheel",q)})}function L(){c.stop()}function P(){p.value=!1}function z(D){p.value=!1,D.target.alt=l("el.image.error")}function j(D){if(p.value||D.button!==0||!d.value)return;v.value.enableTransition=!1;const{offsetX:q,offsetY:Y}=v.value,J=D.pageX,se=D.pageY,_e=mr(le=>{v.value={...v.value,offsetX:q+le.pageX-J,offsetY:Y+le.pageY-se}}),Q=Vt(document,"mousemove",_e);Vt(document,"mouseup",()=>{Q()}),D.preventDefault()}function K(){v.value={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}}function F(){if(p.value)return;const D=yl(r),q=Object.values(r),Y=m.value.name,se=(q.findIndex(_e=>_e.name===Y)+1)%D.length;m.value=r[D[se]],K()}function B(D){const q=a.urlList.length;h.value=(D+q)%q}function I(){w.value&&!a.infinite||B(h.value-1)}function H(){b.value&&!a.infinite||B(h.value+1)}function N(D,q={}){if(p.value)return;const{minScale:Y,maxScale:J}=a,{zoomRate:se,rotateDeg:_e,enableTransition:Q}={zoomRate:a.zoomRate,rotateDeg:90,enableTransition:!0,...q};switch(D){case"zoomOut":v.value.scale>Y&&(v.value.scale=Number.parseFloat((v.value.scale/se).toFixed(3)));break;case"zoomIn":v.value.scale{We(()=>{const D=f.value[0];D!=null&&D.complete||(p.value=!0)})}),pe(h,D=>{K(),n("switch",D)}),et(()=>{var D,q;V(),(q=(D=d.value)==null?void 0:D.focus)==null||q.call(D)}),t({setActiveItem:B}),(D,q)=>(y(),oe(Nl,{to:"body",disabled:!D.teleported},[W(nn,{name:"viewer-fade",appear:""},{default:G(()=>[k("div",{ref_key:"wrapper",ref:d,tabindex:-1,class:$(s(i).e("wrapper")),style:De({zIndex:_.value})},[k("div",{class:$(s(i).e("mask")),onClick:q[0]||(q[0]=Ge(Y=>D.hideOnClickModal&&T(),["self"]))},null,2),Z(" CLOSE "),k("span",{class:$([s(i).e("btn"),s(i).e("close")]),onClick:T},[W(s(Be),null,{default:G(()=>[W(s(uo))]),_:1})],2),Z(" ARROW "),s(g)?Z("v-if",!0):(y(),M(Fe,{key:0},[k("span",{class:$(s(x)),onClick:I},[W(s(Be),null,{default:G(()=>[W(s(aa))]),_:1})],2),k("span",{class:$(s(E)),onClick:H},[W(s(Be),null,{default:G(()=>[W(s(Sn))]),_:1})],2)],64)),Z(" ACTIONS "),k("div",{class:$([s(i).e("btn"),s(i).e("actions")])},[k("div",{class:$(s(i).e("actions__inner"))},[W(s(Be),{onClick:q[1]||(q[1]=Y=>N("zoomOut"))},{default:G(()=>[W(s(Jg))]),_:1}),W(s(Be),{onClick:q[2]||(q[2]=Y=>N("zoomIn"))},{default:G(()=>[W(s(u2))]),_:1}),k("i",{class:$(s(i).e("actions__divider"))},null,2),W(s(Be),{onClick:F},{default:G(()=>[(y(),oe(ut(s(m).icon)))]),_:1}),k("i",{class:$(s(i).e("actions__divider"))},null,2),W(s(Be),{onClick:q[3]||(q[3]=Y=>N("anticlockwise"))},{default:G(()=>[W(s(Kg))]),_:1}),W(s(Be),{onClick:q[4]||(q[4]=Y=>N("clockwise"))},{default:G(()=>[W(s(Wg))]),_:1})],2)],2),Z(" CANVAS "),k("div",{class:$(s(i).e("canvas"))},[(y(!0),M(Fe,null,mt(D.urlList,(Y,J)=>Qe((y(),M("img",{ref_for:!0,ref:se=>f.value[J]=se,key:Y,src:Y,style:De(s(O)),class:$(s(i).e("img")),crossorigin:D.crossorigin,onLoad:P,onError:z,onMousedown:j},null,46,wG)),[[bt,J===h.value]])),128))],2),re(D.$slots,"default")],6)]),_:3})],8,["disabled"]))}});var kG=xe(SG,[["__file","image-viewer.vue"]]);const C8=lt(kG),EG=Ee({hideOnClickModal:Boolean,src:{type:String,default:""},fit:{type:String,values:["","contain","cover","fill","none","scale-down"],default:""},loading:{type:String,values:["eager","lazy"]},lazy:Boolean,scrollContainer:{type:X([String,Object])},previewSrcList:{type:X(Array),default:()=>Ht([])},previewTeleported:Boolean,zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},crossorigin:{type:X(String)}}),xG={load:e=>e instanceof Event,error:e=>e instanceof Event,switch:e=>Ye(e),close:()=>!0,show:()=>!0},MG=["src","loading","crossorigin"],$G={key:0},TG=A({name:"ElImage",inheritAttrs:!1}),AG=A({...TG,props:EG,emits:xG,setup(e,{emit:t}){const n=e;let o="";const{t:a}=_t(),r=me("image"),l=Pr(),i=v2(),u=R(),d=R(!1),f=R(!0),c=R(!1),p=R(),h=R(),m=gt&&"loading"in HTMLImageElement.prototype;let v,_;const g=S(()=>[r.e("inner"),C.value&&r.e("preview"),f.value&&r.is("loading")]),w=S(()=>l.style),b=S(()=>{const{fit:H}=n;return gt&&H?{objectFit:H}:{}}),C=S(()=>{const{previewSrcList:H}=n;return Array.isArray(H)&&H.length>0}),x=S(()=>{const{previewSrcList:H,initialIndex:N}=n;let D=N;return N>H.length-1&&(D=0),D}),E=S(()=>n.loading==="eager"?!1:!m&&n.loading==="lazy"||n.lazy),O=()=>{gt&&(f.value=!0,d.value=!1,u.value=n.src)};function T(H){f.value=!1,d.value=!1,t("load",H)}function V(H){f.value=!1,d.value=!0,t("error",H)}function L(){A5(p.value,h.value)&&(O(),j())}const P=V4(L,200,!0);async function z(){var H;if(!gt)return;await We();const{scrollContainer:N}=n;io(N)?h.value=N:Ze(N)&&N!==""?h.value=(H=document.querySelector(N))!=null?H:void 0:p.value&&(h.value=a2(p.value)),h.value&&(v=Vt(h,"scroll",P),setTimeout(()=>L(),100))}function j(){!gt||!h.value||!P||(v==null||v(),h.value=void 0)}function K(H){if(H.ctrlKey){if(H.deltaY<0)return H.preventDefault(),!1;if(H.deltaY>0)return H.preventDefault(),!1}}function F(){C.value&&(_=Vt("wheel",K,{passive:!1}),o=document.body.style.overflow,document.body.style.overflow="hidden",c.value=!0,t("show"))}function B(){_==null||_(),document.body.style.overflow=o,c.value=!1,t("close")}function I(H){t("switch",H)}return pe(()=>n.src,()=>{E.value?(f.value=!0,d.value=!1,j(),z()):O()}),et(()=>{E.value?z():O()}),(H,N)=>(y(),M("div",{ref_key:"container",ref:p,class:$([s(r).b(),H.$attrs.class]),style:De(s(w))},[d.value?re(H.$slots,"error",{key:0},()=>[k("div",{class:$(s(r).e("error"))},Me(s(a)("el.image.error")),3)]):(y(),M(Fe,{key:1},[u.value!==void 0?(y(),M("img",ft({key:0},s(i),{src:u.value,loading:H.loading,style:s(b),class:s(g),crossorigin:H.crossorigin,onClick:F,onLoad:T,onError:V}),null,16,MG)):Z("v-if",!0),f.value?(y(),M("div",{key:1,class:$(s(r).e("wrapper"))},[re(H.$slots,"placeholder",{},()=>[k("div",{class:$(s(r).e("placeholder"))},null,2)])],2)):Z("v-if",!0)],64)),s(C)?(y(),M(Fe,{key:2},[c.value?(y(),oe(s(C8),{key:0,"z-index":H.zIndex,"initial-index":s(x),infinite:H.infinite,"zoom-rate":H.zoomRate,"min-scale":H.minScale,"max-scale":H.maxScale,"url-list":H.previewSrcList,"hide-on-click-modal":H.hideOnClickModal,teleported:H.previewTeleported,"close-on-press-escape":H.closeOnPressEscape,onClose:B,onSwitch:I},{default:G(()=>[H.$slots.viewer?(y(),M("div",$G,[re(H.$slots,"viewer")])):Z("v-if",!0)]),_:3},8,["z-index","initial-index","infinite","zoom-rate","min-scale","max-scale","url-list","hide-on-click-modal","teleported","close-on-press-escape"])):Z("v-if",!0)],64)):Z("v-if",!0)],6))}});var OG=xe(AG,[["__file","image.vue"]]);const NG=lt(OG),IG=Ee({id:{type:String,default:void 0},step:{type:Number,default:1},stepStrictly:Boolean,max:{type:Number,default:Number.POSITIVE_INFINITY},min:{type:Number,default:Number.NEGATIVE_INFINITY},modelValue:Number,readonly:Boolean,disabled:Boolean,size:cn,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:"",values:["","right"]},valueOnClear:{type:[String,Number,null],validator:e=>e===null||Ye(e)||["min","max"].includes(e),default:null},name:String,label:String,placeholder:String,precision:{type:Number,validator:e=>e>=0&&e===Number.parseInt(`${e}`,10)},validateEvent:{type:Boolean,default:!0}}),RG={[Bt]:(e,t)=>t!==e,blur:e=>e instanceof FocusEvent,focus:e=>e instanceof FocusEvent,[Tn]:e=>Ye(e)||tn(e),[it]:e=>Ye(e)||tn(e)},PG=["aria-label","onKeydown"],LG=["aria-label","onKeydown"],VG=A({name:"ElInputNumber"}),BG=A({...VG,props:IG,emits:RG,setup(e,{expose:t,emit:n}){const o=e,{t:a}=_t(),r=me("input-number"),l=R(),i=wt({currentValue:o.modelValue,userInput:null}),{formItem:u}=Nn(),d=S(()=>Ye(o.modelValue)&&o.modelValue<=o.min),f=S(()=>Ye(o.modelValue)&&o.modelValue>=o.max),c=S(()=>{const F=g(o.step);return Zt(o.precision)?Math.max(g(o.modelValue),F):(F>o.precision,o.precision)}),p=S(()=>o.controls&&o.controlsPosition==="right"),h=an(),m=Dn(),v=S(()=>{if(i.userInput!==null)return i.userInput;let F=i.currentValue;if(tn(F))return"";if(Ye(F)){if(Number.isNaN(F))return"";Zt(o.precision)||(F=F.toFixed(o.precision))}return F}),_=(F,B)=>{if(Zt(B)&&(B=c.value),B===0)return Math.round(F);let I=String(F);const H=I.indexOf(".");if(H===-1||!I.replace(".","").split("")[H+B])return F;const q=I.length;return I.charAt(q-1)==="5"&&(I=`${I.slice(0,Math.max(0,q-1))}6`),Number.parseFloat(Number(I).toFixed(B))},g=F=>{if(tn(F))return 0;const B=F.toString(),I=B.indexOf(".");let H=0;return I!==-1&&(H=B.length-I-1),H},w=(F,B=1)=>Ye(F)?_(F+o.step*B):i.currentValue,b=()=>{if(o.readonly||m.value||f.value)return;const F=Number(v.value)||0,B=w(F);E(B),n(Tn,i.currentValue),j()},C=()=>{if(o.readonly||m.value||d.value)return;const F=Number(v.value)||0,B=w(F,-1);E(B),n(Tn,i.currentValue),j()},x=(F,B)=>{const{max:I,min:H,step:N,precision:D,stepStrictly:q,valueOnClear:Y}=o;II||JI?I:H,B&&n(it,J)),J},E=(F,B=!0)=>{var I;const H=i.currentValue,N=x(F);if(!B){n(it,N);return}H===N&&F||(i.userInput=null,n(it,N),H!==N&&n(Bt,N,H),o.validateEvent&&((I=u==null?void 0:u.validate)==null||I.call(u,"change").catch(D=>void 0)),i.currentValue=N)},O=F=>{i.userInput=F;const B=F===""?null:Number(F);n(Tn,B),E(B,!1)},T=F=>{const B=F!==""?Number(F):"";(Ye(B)&&!Number.isNaN(B)||F==="")&&E(B),j(),i.userInput=null},V=()=>{var F,B;(B=(F=l.value)==null?void 0:F.focus)==null||B.call(F)},L=()=>{var F,B;(B=(F=l.value)==null?void 0:F.blur)==null||B.call(F)},P=F=>{n("focus",F)},z=F=>{var B;i.userInput=null,n("blur",F),o.validateEvent&&((B=u==null?void 0:u.validate)==null||B.call(u,"blur").catch(I=>void 0))},j=()=>{i.currentValue!==o.modelValue&&(i.currentValue=o.modelValue)},K=F=>{document.activeElement===F.target&&F.preventDefault()};return pe(()=>o.modelValue,(F,B)=>{const I=x(F,!0);i.userInput===null&&I!==B&&(i.currentValue=I)},{immediate:!0}),et(()=>{var F;const{min:B,max:I,modelValue:H}=o,N=(F=l.value)==null?void 0:F.input;if(N.setAttribute("role","spinbutton"),Number.isFinite(I)?N.setAttribute("aria-valuemax",String(I)):N.removeAttribute("aria-valuemax"),Number.isFinite(B)?N.setAttribute("aria-valuemin",String(B)):N.removeAttribute("aria-valuemin"),N.setAttribute("aria-valuenow",i.currentValue||i.currentValue===0?String(i.currentValue):""),N.setAttribute("aria-disabled",String(m.value)),!Ye(H)&&H!=null){let D=Number(H);Number.isNaN(D)&&(D=null),n(it,D)}}),ua(()=>{var F,B;const I=(F=l.value)==null?void 0:F.input;I==null||I.setAttribute("aria-valuenow",`${(B=i.currentValue)!=null?B:""}`)}),t({focus:V,blur:L}),(F,B)=>(y(),M("div",{class:$([s(r).b(),s(r).m(s(h)),s(r).is("disabled",s(m)),s(r).is("without-controls",!F.controls),s(r).is("controls-right",s(p))]),onDragstart:B[0]||(B[0]=Ge(()=>{},["prevent"]))},[F.controls?Qe((y(),M("span",{key:0,role:"button","aria-label":s(a)("el.inputNumber.decrease"),class:$([s(r).e("decrease"),s(r).is("disabled",s(d))]),onKeydown:Mt(C,["enter"])},[re(F.$slots,"decrease-icon",{},()=>[W(s(Be),null,{default:G(()=>[s(p)?(y(),oe(s(Bo),{key:0})):(y(),oe(s(zg),{key:1}))]),_:1})])],42,PG)),[[s(Du),C]]):Z("v-if",!0),F.controls?Qe((y(),M("span",{key:1,role:"button","aria-label":s(a)("el.inputNumber.increase"),class:$([s(r).e("increase"),s(r).is("disabled",s(f))]),onKeydown:Mt(b,["enter"])},[re(F.$slots,"increase-icon",{},()=>[W(s(Be),null,{default:G(()=>[s(p)?(y(),oe(s(Cc),{key:0})):(y(),oe(s(s2),{key:1}))]),_:1})])],42,LG)),[[s(Du),b]]):Z("v-if",!0),W(s(mn),{id:F.id,ref_key:"input",ref:l,type:"number",step:F.step,"model-value":s(v),placeholder:F.placeholder,readonly:F.readonly,disabled:s(m),size:s(h),max:F.max,min:F.min,name:F.name,label:F.label,"validate-event":!1,onWheel:K,onKeydown:[Mt(Ge(b,["prevent"]),["up"]),Mt(Ge(C,["prevent"]),["down"])],onBlur:z,onFocus:P,onInput:O,onChange:T},null,8,["id","step","model-value","placeholder","readonly","disabled","size","max","min","name","label","onKeydown"])],34))}});var zG=xe(BG,[["__file","input-number.vue"]]);const S8=lt(zG),HG=Ee({type:{type:String,values:["primary","success","warning","info","danger","default"],default:"default"},underline:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},href:{type:String,default:""},target:{type:String,default:"_self"},icon:{type:$t}}),DG={click:e=>e instanceof MouseEvent},FG=["href","target"],KG=A({name:"ElLink"}),WG=A({...KG,props:HG,emits:DG,setup(e,{emit:t}){const n=e,o=me("link"),a=S(()=>[o.b(),o.m(n.type),o.is("disabled",n.disabled),o.is("underline",n.underline&&!n.disabled)]);function r(l){n.disabled||t("click",l)}return(l,i)=>(y(),M("a",{class:$(s(a)),href:l.disabled||!l.href?void 0:l.href,target:l.disabled||!l.href?void 0:l.target,onClick:r},[l.icon?(y(),oe(s(Be),{key:0},{default:G(()=>[(y(),oe(ut(l.icon)))]),_:1})):Z("v-if",!0),l.$slots.default?(y(),M("span",{key:1,class:$(s(o).e("inner"))},[re(l.$slots,"default")],2)):Z("v-if",!0),l.$slots.icon?re(l.$slots,"icon",{key:2}):Z("v-if",!0)],10,FG))}});var jG=xe(WG,[["__file","link.vue"]]);const qG=lt(jG);let UG=class{constructor(t,n){this.parent=t,this.domNode=n,this.subIndex=0,this.subIndex=0,this.init()}init(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(t){t===this.subMenuItems.length?t=0:t<0&&(t=this.subMenuItems.length-1),this.subMenuItems[t].focus(),this.subIndex=t}addListeners(){const t=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,n=>{n.addEventListener("keydown",o=>{let a=!1;switch(o.code){case Ke.down:{this.gotoSubIndex(this.subIndex+1),a=!0;break}case Ke.up:{this.gotoSubIndex(this.subIndex-1),a=!0;break}case Ke.tab:{Yi(t,"mouseleave");break}case Ke.enter:case Ke.space:{a=!0,o.currentTarget.click();break}}return a&&(o.preventDefault(),o.stopPropagation()),!1})})}},YG=class{constructor(t,n){this.domNode=t,this.submenu=null,this.submenu=null,this.init(n)}init(t){this.domNode.setAttribute("tabindex","0");const n=this.domNode.querySelector(`.${t}-menu`);n&&(this.submenu=new UG(this,n)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",t=>{let n=!1;switch(t.code){case Ke.down:{Yi(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(0),n=!0;break}case Ke.up:{Yi(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(this.submenu.subMenuItems.length-1),n=!0;break}case Ke.tab:{Yi(t.currentTarget,"mouseleave");break}case Ke.enter:case Ke.space:{n=!0,t.currentTarget.click();break}}n&&t.preventDefault()})}},GG=class{constructor(t,n){this.domNode=t,this.init(n)}init(t){const n=this.domNode.childNodes;Array.from(n).forEach(o=>{o.nodeType===1&&new YG(o,t)})}};const XG=A({name:"ElMenuCollapseTransition",setup(){const e=me("menu");return{listeners:{onBeforeEnter:n=>n.style.opacity="0.2",onEnter(n,o){eo(n,`${e.namespace.value}-opacity-transition`),n.style.opacity="1",o()},onAfterEnter(n){Cn(n,`${e.namespace.value}-opacity-transition`),n.style.opacity=""},onBeforeLeave(n){n.dataset||(n.dataset={}),oo(n,e.m("collapse"))?(Cn(n,e.m("collapse")),n.dataset.oldOverflow=n.style.overflow,n.dataset.scrollWidth=n.clientWidth.toString(),eo(n,e.m("collapse"))):(eo(n,e.m("collapse")),n.dataset.oldOverflow=n.style.overflow,n.dataset.scrollWidth=n.clientWidth.toString(),Cn(n,e.m("collapse"))),n.style.width=`${n.scrollWidth}px`,n.style.overflow="hidden"},onLeave(n){eo(n,"horizontal-collapse-transition"),n.style.width=`${n.dataset.scrollWidth}px`}}}}});function JG(e,t,n,o,a,r){return y(),oe(nn,ft({mode:"out-in"},e.listeners),{default:G(()=>[re(e.$slots,"default")]),_:3},16)}var ZG=xe(XG,[["render",JG],["__file","menu-collapse-transition.vue"]]);function k8(e,t){const n=S(()=>{let a=e.parent;const r=[t.value];for(;a.type.name!=="ElMenu";)a.props.index&&r.unshift(a.props.index),a=a.parent;return r});return{parentMenu:S(()=>{let a=e.parent;for(;a&&!["ElMenu","ElSubMenu"].includes(a.type.name);)a=a.parent;return a}),indexPath:n}}function QG(e){return S(()=>{const n=e.backgroundColor;return n?new n3(n).shade(20).toString():""})}const E8=(e,t)=>{const n=me("menu");return S(()=>n.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":QG(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},eX=Ee({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,disabled:Boolean,teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:$t},expandOpenIcon:{type:$t},collapseCloseIcon:{type:$t},collapseOpenIcon:{type:$t}}),$d="ElSubMenu";var J2=A({name:$d,props:eX,setup(e,{slots:t,expose:n}){const o=rt(),{indexPath:a,parentMenu:r}=k8(o,S(()=>e.index)),l=me("menu"),i=me("sub-menu"),u=Pe("rootMenu");u||on($d,"can not inject root menu");const d=Pe(`subMenu:${r.value.uid}`);d||on($d,"can not inject sub menu");const f=R({}),c=R({});let p;const h=R(!1),m=R(),v=R(null),_=S(()=>T.value==="horizontal"&&w.value?"bottom-start":"right-start"),g=S(()=>T.value==="horizontal"&&w.value||T.value==="vertical"&&!u.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?E.value?e.expandOpenIcon:e.expandCloseIcon:Bo:e.collapseCloseIcon&&e.collapseOpenIcon?E.value?e.collapseOpenIcon:e.collapseCloseIcon:Sn),w=S(()=>d.level===0),b=S(()=>{const D=e.teleported;return D===void 0?w.value:D}),C=S(()=>u.props.collapse?`${l.namespace.value}-zoom-in-left`:`${l.namespace.value}-zoom-in-top`),x=S(()=>T.value==="horizontal"&&w.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),E=S(()=>u.openedMenus.includes(e.index)),O=S(()=>{let D=!1;return Object.values(f.value).forEach(q=>{q.active&&(D=!0)}),Object.values(c.value).forEach(q=>{q.active&&(D=!0)}),D}),T=S(()=>u.props.mode),V=wt({index:e.index,indexPath:a,active:O}),L=E8(u.props,d.level+1),P=S(()=>{var D;return(D=e.popperOffset)!=null?D:u.props.popperOffset}),z=S(()=>{var D;return(D=e.popperClass)!=null?D:u.props.popperClass}),j=S(()=>{var D;return(D=e.showTimeout)!=null?D:u.props.showTimeout}),K=S(()=>{var D;return(D=e.hideTimeout)!=null?D:u.props.hideTimeout}),F=()=>{var D,q,Y;return(Y=(q=(D=v.value)==null?void 0:D.popperRef)==null?void 0:q.popperInstanceRef)==null?void 0:Y.destroy()},B=D=>{D||F()},I=()=>{u.props.menuTrigger==="hover"&&u.props.mode==="horizontal"||u.props.collapse&&u.props.mode==="vertical"||e.disabled||u.handleSubMenuClick({index:e.index,indexPath:a.value,active:O.value})},H=(D,q=j.value)=>{var Y;if(D.type!=="focus"){if(u.props.menuTrigger==="click"&&u.props.mode==="horizontal"||!u.props.collapse&&u.props.mode==="vertical"||e.disabled){d.mouseInChild.value=!0;return}d.mouseInChild.value=!0,p==null||p(),{stop:p}=Cr(()=>{u.openMenu(e.index,a.value)},q),b.value&&((Y=r.value.vnode.el)==null||Y.dispatchEvent(new MouseEvent("mouseenter")))}},N=(D=!1)=>{var q;if(u.props.menuTrigger==="click"&&u.props.mode==="horizontal"||!u.props.collapse&&u.props.mode==="vertical"){d.mouseInChild.value=!1;return}p==null||p(),d.mouseInChild.value=!1,{stop:p}=Cr(()=>!h.value&&u.closeMenu(e.index,a.value),K.value),b.value&&D&&((q=d.handleMouseleave)==null||q.call(d,!0))};pe(()=>u.props.collapse,D=>B(!!D));{const D=Y=>{c.value[Y.index]=Y},q=Y=>{delete c.value[Y.index]};pt(`subMenu:${o.uid}`,{addSubMenu:D,removeSubMenu:q,handleMouseleave:N,mouseInChild:h,level:d.level+1})}return n({opened:E}),et(()=>{u.addSubMenu(V),d.addSubMenu(V)}),It(()=>{d.removeSubMenu(V),u.removeSubMenu(V)}),()=>{var D;const q=[(D=t.title)==null?void 0:D.call(t),qe(Be,{class:i.e("icon-arrow"),style:{transform:E.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&u.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>Ze(g.value)?qe(o.appContext.components[g.value]):qe(g.value)})],Y=u.isMenuPopup?qe(En,{ref:v,visible:E.value,effect:"light",pure:!0,offset:P.value,showArrow:!1,persistent:!0,popperClass:z.value,placement:_.value,teleported:b.value,fallbackPlacements:x.value,transition:C.value,gpuAcceleration:!1},{content:()=>{var J;return qe("div",{class:[l.m(T.value),l.m("popup-container"),z.value],onMouseenter:se=>H(se,100),onMouseleave:()=>N(!0),onFocus:se=>H(se,100)},[qe("ul",{class:[l.b(),l.m("popup"),l.m(`popup-${_.value}`)],style:L.value},[(J=t.default)==null?void 0:J.call(t)])])},default:()=>qe("div",{class:i.e("title"),onClick:I},q)}):qe(Fe,{},[qe("div",{class:i.e("title"),ref:m,onClick:I},q),qe(Vc,{},{default:()=>{var J;return Qe(qe("ul",{role:"menu",class:[l.b(),l.m("inline")],style:L.value},[(J=t.default)==null?void 0:J.call(t)]),[[bt,E.value]])}})]);return qe("li",{class:[i.b(),i.is("active",O.value),i.is("opened",E.value),i.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:E.value,onMouseenter:H,onMouseleave:()=>N(),onFocus:H},[Y])}}});const tX=Ee({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:X(Array),default:()=>Ht([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:$t,default:()=>Hg},popperEffect:{type:String,values:["dark","light"],default:"dark"},popperClass:String,showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300}}),Td=e=>Array.isArray(e)&&e.every(t=>Ze(t)),nX={close:(e,t)=>Ze(e)&&Td(t),open:(e,t)=>Ze(e)&&Td(t),select:(e,t,n,o)=>Ze(e)&&Td(t)&&ct(n)&&(o===void 0||o instanceof Promise)};var oX=A({name:"ElMenu",props:tX,emits:nX,setup(e,{emit:t,slots:n,expose:o}){const a=rt(),r=a.appContext.config.globalProperties.$router,l=R(),i=me("menu"),u=me("sub-menu"),d=R(-1),f=R(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),c=R(e.defaultActive),p=R({}),h=R({}),m=S(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),v=()=>{const K=c.value&&p.value[c.value];if(!K||e.mode==="horizontal"||e.collapse)return;K.indexPath.forEach(B=>{const I=h.value[B];I&&_(B,I.indexPath)})},_=(K,F)=>{f.value.includes(K)||(e.uniqueOpened&&(f.value=f.value.filter(B=>F.includes(B))),f.value.push(K),t("open",K,F))},g=K=>{const F=f.value.indexOf(K);F!==-1&&f.value.splice(F,1)},w=(K,F)=>{g(K),t("close",K,F)},b=({index:K,indexPath:F})=>{f.value.includes(K)?w(K,F):_(K,F)},C=K=>{(e.mode==="horizontal"||e.collapse)&&(f.value=[]);const{index:F,indexPath:B}=K;if(!(tn(F)||tn(B)))if(e.router&&r){const I=K.route||F,H=r.push(I).then(N=>(N||(c.value=F),N));t("select",F,B,{index:F,indexPath:B,route:I},H)}else c.value=F,t("select",F,B,{index:F,indexPath:B})},x=K=>{const F=p.value,B=F[K]||c.value&&F[c.value]||F[e.defaultActive];B?c.value=B.index:c.value=K},E=K=>{const F=getComputedStyle(K),B=Number.parseInt(F.marginLeft,10),I=Number.parseInt(F.marginRight,10);return K.offsetWidth+B+I||0},O=()=>{var K,F;if(!l.value)return-1;const B=Array.from((F=(K=l.value)==null?void 0:K.childNodes)!=null?F:[]).filter(se=>se.nodeName!=="#comment"&&(se.nodeName!=="#text"||se.nodeValue)),I=64,H=getComputedStyle(l.value),N=Number.parseInt(H.paddingLeft,10),D=Number.parseInt(H.paddingRight,10),q=l.value.clientWidth-N-D;let Y=0,J=0;return B.forEach((se,_e)=>{Y+=E(se),Y<=q-I&&(J=_e+1)}),J===B.length?-1:J},T=K=>h.value[K].indexPath,V=(K,F=33.34)=>{let B;return()=>{B&&clearTimeout(B),B=setTimeout(()=>{K()},F)}};let L=!0;const P=()=>{if(d.value===O())return;const K=()=>{d.value=-1,We(()=>{d.value=O()})};L?K():V(K)(),L=!1};pe(()=>e.defaultActive,K=>{p.value[K]||(c.value=""),x(K)}),pe(()=>e.collapse,K=>{K&&(f.value=[])}),pe(p.value,v);let z;gn(()=>{e.mode==="horizontal"&&e.ellipsis?z=Kt(l,P).stop:z==null||z()});const j=R(!1);{const K=H=>{h.value[H.index]=H},F=H=>{delete h.value[H.index]};pt("rootMenu",wt({props:e,openedMenus:f,items:p,subMenus:h,activeIndex:c,isMenuPopup:m,addMenuItem:H=>{p.value[H.index]=H},removeMenuItem:H=>{delete p.value[H.index]},addSubMenu:K,removeSubMenu:F,openMenu:_,closeMenu:w,handleMenuItemClick:C,handleSubMenuClick:b})),pt(`subMenu:${a.uid}`,{addSubMenu:K,removeSubMenu:F,mouseInChild:j,level:0})}return et(()=>{e.mode==="horizontal"&&new GG(a.vnode.el,i.namespace.value)}),o({open:F=>{const{indexPath:B}=h.value[F];B.forEach(I=>_(I,B))},close:g,handleResize:P}),()=>{var K,F;let B=(F=(K=n.default)==null?void 0:K.call(n))!=null?F:[];const I=[];if(e.mode==="horizontal"&&l.value){const q=La(B),Y=d.value===-1?q:q.slice(0,d.value),J=d.value===-1?[]:q.slice(d.value);J!=null&&J.length&&e.ellipsis&&(B=Y,I.push(qe(J2,{index:"sub-menu-more",class:u.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>qe(Be,{class:u.e("icon-more")},{default:()=>qe(e.ellipsisIcon)}),default:()=>J})))}const H=E8(e,0),N=e.closeOnClickOutside?[[sa,()=>{f.value.length&&(j.value||(f.value.forEach(q=>t("close",q,T(q))),f.value=[]))}]]:[],D=Qe(qe("ul",{key:String(e.collapse),role:"menubar",ref:l,style:H.value,class:{[i.b()]:!0,[i.m(e.mode)]:!0,[i.m("collapse")]:e.collapse}},[...B,...I]),N);return e.collapseTransition&&e.mode==="vertical"?qe(ZG,()=>D):D}}});const aX=Ee({index:{type:X([String,null]),default:null},route:{type:X([String,Object])},disabled:Boolean}),rX={click:e=>Ze(e.index)&&Array.isArray(e.indexPath)},Ad="ElMenuItem",lX=A({name:Ad,components:{ElTooltip:En},props:aX,emits:rX,setup(e,{emit:t}){const n=rt(),o=Pe("rootMenu"),a=me("menu"),r=me("menu-item");o||on(Ad,"can not inject root menu");const{parentMenu:l,indexPath:i}=k8(n,At(e,"index")),u=Pe(`subMenu:${l.value.uid}`);u||on(Ad,"can not inject sub menu");const d=S(()=>e.index===o.activeIndex),f=wt({index:e.index,indexPath:i,active:d}),c=()=>{e.disabled||(o.handleMenuItemClick({index:e.index,indexPath:i.value,route:e.route}),t("click",f))};return et(()=>{u.addSubMenu(f),o.addMenuItem(f)}),It(()=>{u.removeSubMenu(f),o.removeMenuItem(f)}),{parentMenu:l,rootMenu:o,active:d,nsMenu:a,nsMenuItem:r,handleClick:c}}});function sX(e,t,n,o,a,r){const l=nt("el-tooltip");return y(),M("li",{class:$([e.nsMenuItem.b(),e.nsMenuItem.is("active",e.active),e.nsMenuItem.is("disabled",e.disabled)]),role:"menuitem",tabindex:"-1",onClick:t[0]||(t[0]=(...i)=>e.handleClick&&e.handleClick(...i))},[e.parentMenu.type.name==="ElMenu"&&e.rootMenu.props.collapse&&e.$slots.title?(y(),oe(l,{key:0,effect:e.rootMenu.props.popperEffect,placement:"right","fallback-placements":["left"],persistent:""},{content:G(()=>[re(e.$slots,"title")]),default:G(()=>[k("div",{class:$(e.nsMenu.be("tooltip","trigger"))},[re(e.$slots,"default")],2)]),_:3},8,["effect"])):(y(),M(Fe,{key:1},[re(e.$slots,"default"),re(e.$slots,"title")],64))],2)}var x8=xe(lX,[["render",sX],["__file","menu-item.vue"]]);const iX={title:String},uX="ElMenuItemGroup",cX=A({name:uX,props:iX,setup(){return{ns:me("menu-item-group")}}});function dX(e,t,n,o,a,r){return y(),M("li",{class:$(e.ns.b())},[k("div",{class:$(e.ns.e("title"))},[e.$slots.title?re(e.$slots,"title",{key:1}):(y(),M(Fe,{key:0},[vt(Me(e.title),1)],64))],2),k("ul",null,[re(e.$slots,"default")])],2)}var M8=xe(cX,[["render",dX],["__file","menu-item-group.vue"]]);const fX=lt(oX,{MenuItem:x8,MenuItemGroup:M8,SubMenu:J2}),pX=Dt(x8),vX=Dt(M8),hX=Dt(J2),mX=Ee({icon:{type:$t,default:()=>Og},title:String,content:{type:String,default:""}}),gX={back:()=>!0},yX=["aria-label"],_X=A({name:"ElPageHeader"}),bX=A({..._X,props:mX,emits:gX,setup(e,{emit:t}){const n=fn(),{t:o}=_t(),a=me("page-header"),r=S(()=>[a.b(),{[a.m("has-breadcrumb")]:!!n.breadcrumb,[a.m("has-extra")]:!!n.extra,[a.is("contentful")]:!!n.default}]);function l(){t("back")}return(i,u)=>(y(),M("div",{class:$(s(r))},[i.$slots.breadcrumb?(y(),M("div",{key:0,class:$(s(a).e("breadcrumb"))},[re(i.$slots,"breadcrumb")],2)):Z("v-if",!0),k("div",{class:$(s(a).e("header"))},[k("div",{class:$(s(a).e("left"))},[k("div",{class:$(s(a).e("back")),role:"button",tabindex:"0",onClick:l},[i.icon||i.$slots.icon?(y(),M("div",{key:0,"aria-label":i.title||s(o)("el.pageHeader.title"),class:$(s(a).e("icon"))},[re(i.$slots,"icon",{},()=>[i.icon?(y(),oe(s(Be),{key:0},{default:G(()=>[(y(),oe(ut(i.icon)))]),_:1})):Z("v-if",!0)])],10,yX)):Z("v-if",!0),k("div",{class:$(s(a).e("title"))},[re(i.$slots,"title",{},()=>[vt(Me(i.title||s(o)("el.pageHeader.title")),1)])],2)],2),W(s(f8),{direction:"vertical"}),k("div",{class:$(s(a).e("content"))},[re(i.$slots,"content",{},()=>[vt(Me(i.content),1)])],2)],2),i.$slots.extra?(y(),M("div",{key:0,class:$(s(a).e("extra"))},[re(i.$slots,"extra")],2)):Z("v-if",!0)],2),i.$slots.default?(y(),M("div",{key:1,class:$(s(a).e("main"))},[re(i.$slots,"default")],2)):Z("v-if",!0)],2))}});var wX=xe(bX,[["__file","page-header.vue"]]);const CX=lt(wX),$8=Symbol("elPaginationKey"),SX=Ee({disabled:Boolean,currentPage:{type:Number,default:1},prevText:{type:String},prevIcon:{type:$t}}),kX={click:e=>e instanceof MouseEvent},EX=["disabled","aria-label","aria-disabled"],xX={key:0},MX=A({name:"ElPaginationPrev"}),$X=A({...MX,props:SX,emits:kX,setup(e){const t=e,{t:n}=_t(),o=S(()=>t.disabled||t.currentPage<=1);return(a,r)=>(y(),M("button",{type:"button",class:"btn-prev",disabled:s(o),"aria-label":a.prevText||s(n)("el.pagination.prev"),"aria-disabled":s(o),onClick:r[0]||(r[0]=l=>a.$emit("click",l))},[a.prevText?(y(),M("span",xX,Me(a.prevText),1)):(y(),oe(s(Be),{key:1},{default:G(()=>[(y(),oe(ut(a.prevIcon)))]),_:1}))],8,EX))}});var TX=xe($X,[["__file","prev.vue"]]);const AX=Ee({disabled:Boolean,currentPage:{type:Number,default:1},pageCount:{type:Number,default:50},nextText:{type:String},nextIcon:{type:$t}}),OX=["disabled","aria-label","aria-disabled"],NX={key:0},IX=A({name:"ElPaginationNext"}),RX=A({...IX,props:AX,emits:["click"],setup(e){const t=e,{t:n}=_t(),o=S(()=>t.disabled||t.currentPage===t.pageCount||t.pageCount===0);return(a,r)=>(y(),M("button",{type:"button",class:"btn-next",disabled:s(o),"aria-label":a.nextText||s(n)("el.pagination.next"),"aria-disabled":s(o),onClick:r[0]||(r[0]=l=>a.$emit("click",l))},[a.nextText?(y(),M("span",NX,Me(a.nextText),1)):(y(),oe(s(Be),{key:1},{default:G(()=>[(y(),oe(ut(a.nextIcon)))]),_:1}))],8,OX))}});var PX=xe(RX,[["__file","next.vue"]]);const T8=Symbol("ElSelectGroup"),ui=Symbol("ElSelect");function LX(e,t){const n=Pe(ui),o=Pe(T8,{disabled:!1}),a=S(()=>n.props.multiple?f(n.props.modelValue,e.value):f([n.props.modelValue],e.value)),r=S(()=>{if(n.props.multiple){const h=n.props.modelValue||[];return!a.value&&h.length>=n.props.multipleLimit&&n.props.multipleLimit>0}else return!1}),l=S(()=>e.label||(ct(e.value)?"":e.value)),i=S(()=>e.value||e.label||""),u=S(()=>e.disabled||t.groupDisabled||r.value),d=rt(),f=(h=[],m)=>{if(ct(e.value)){const v=n.props.valueKey;return h&&h.some(_=>xt(Gt(_,v))===Gt(m,v))}else return h&&h.includes(m)},c=()=>{!e.disabled&&!o.disabled&&(n.states.hoveringIndex=n.optionsArray.indexOf(d.proxy))},p=h=>{const m=new RegExp(o2(h),"i");t.visible=m.test(l.value)||e.created};return pe(()=>l.value,()=>{!e.created&&!n.props.remote&&n.setSelected()}),pe(()=>e.value,(h,m)=>{const{remote:v,valueKey:_}=n.props;if(wn(h,m)||(n.onOptionDestroy(m,d.proxy),n.onOptionCreate(d.proxy)),!e.created&&!v){if(_&&ct(h)&&ct(m)&&h[_]===m[_])return;n.setSelected()}}),pe(()=>o.disabled,()=>{t.groupDisabled=o.disabled},{immediate:!0}),{select:n,currentLabel:l,currentValue:i,itemSelected:a,isDisabled:u,hoverItem:c,updateOption:p}}const VX=A({name:"ElOption",componentName:"ElOption",props:{value:{required:!0,type:[String,Number,Boolean,Object]},label:[String,Number],created:Boolean,disabled:Boolean},setup(e){const t=me("select"),n=kn(),o=S(()=>[t.be("dropdown","item"),t.is("disabled",s(i)),t.is("selected",s(l)),t.is("hovering",s(p))]),a=wt({index:-1,groupDisabled:!1,visible:!0,hover:!1}),{currentLabel:r,itemSelected:l,isDisabled:i,select:u,hoverItem:d,updateOption:f}=LX(e,a),{visible:c,hover:p}=un(a),h=rt().proxy;u.onOptionCreate(h),It(()=>{const v=h.value,{selected:_}=u.states,w=(u.props.multiple?_:[_]).some(b=>b.value===h.value);We(()=>{u.states.cachedOptions.get(v)===h&&!w&&u.states.cachedOptions.delete(v)}),u.onOptionDestroy(v,h)});function m(){e.disabled!==!0&&a.groupDisabled!==!0&&u.handleOptionSelect(h)}return{ns:t,id:n,containerKls:o,currentLabel:r,itemSelected:l,isDisabled:i,select:u,hoverItem:d,updateOption:f,visible:c,hover:p,selectOptionClick:m,states:a}}}),BX=["id","aria-disabled","aria-selected"];function zX(e,t,n,o,a,r){return Qe((y(),M("li",{id:e.id,class:$(e.containerKls),role:"option","aria-disabled":e.isDisabled||void 0,"aria-selected":e.itemSelected,onMouseenter:t[0]||(t[0]=(...l)=>e.hoverItem&&e.hoverItem(...l)),onClick:t[1]||(t[1]=Ge((...l)=>e.selectOptionClick&&e.selectOptionClick(...l),["stop"]))},[re(e.$slots,"default",{},()=>[k("span",null,Me(e.currentLabel),1)])],42,BX)),[[bt,e.visible]])}var Z2=xe(VX,[["render",zX],["__file","option.vue"]]);const HX=A({name:"ElSelectDropdown",componentName:"ElSelectDropdown",setup(){const e=Pe(ui),t=me("select"),n=S(()=>e.props.popperClass),o=S(()=>e.props.multiple),a=S(()=>e.props.fitInputWidth),r=R("");function l(){var i;r.value=`${(i=e.selectRef)==null?void 0:i.offsetWidth}px`}return et(()=>{l(),Kt(e.selectRef,l)}),{ns:t,minWidth:r,popperClass:n,isMultiple:o,isFitInputWidth:a}}});function DX(e,t,n,o,a,r){return y(),M("div",{class:$([e.ns.b("dropdown"),e.ns.is("multiple",e.isMultiple),e.popperClass]),style:De({[e.isFitInputWidth?"width":"minWidth"]:e.minWidth})},[e.$slots.header?(y(),M("div",{key:0,class:$(e.ns.be("dropdown","header"))},[re(e.$slots,"header")],2)):Z("v-if",!0),re(e.$slots,"default"),e.$slots.footer?(y(),M("div",{key:1,class:$(e.ns.be("dropdown","footer"))},[re(e.$slots,"footer")],2)):Z("v-if",!0)],6)}var FX=xe(HX,[["render",DX],["__file","select-dropdown.vue"]]);function A8(e){const t=R(!1);return{handleCompositionStart:()=>{t.value=!0},handleCompositionUpdate:r=>{const l=r.target.value,i=l[l.length-1]||"";t.value=!p2(i)},handleCompositionEnd:r=>{t.value&&(t.value=!1,Xe(e)&&e(r))}}}const KX=11,WX=(e,t)=>{const{t:n}=_t(),o=kn(),a=me("select"),r=me("input"),l=wt({inputValue:"",options:new Map,cachedOptions:new Map,disabledOptions:new Map,optionValues:[],selected:e.multiple?[]:{},selectionWidth:0,calculatorWidth:0,collapseItemWidth:0,selectedLabel:"",hoveringIndex:-1,previousQuery:null,inputHovering:!1,menuVisibleOnFocus:!1,isBeforeHide:!1}),i=R(null),u=R(null),d=R(null),f=R(null),c=R(null),p=R(null),h=R(null),m=R(null),v=R(null),_=R(null),g=R(null),w=R(null),{wrapperRef:b,isFocused:C,handleFocus:x,handleBlur:E}=Oc(c,{afterFocus(){e.automaticDropdown&&!O.value&&(O.value=!0,l.menuVisibleOnFocus=!0)},beforeBlur(Ne){var Je,Lt;return((Je=d.value)==null?void 0:Je.isFocusInsideContent(Ne))||((Lt=f.value)==null?void 0:Lt.isFocusInsideContent(Ne))},afterBlur(){O.value=!1,l.menuVisibleOnFocus=!1}}),O=R(!1),T=R(),{form:V,formItem:L}=Nn(),{inputId:P}=Ho(e,{formItemContext:L}),z=S(()=>e.disabled||(V==null?void 0:V.disabled)),j=S(()=>J.value.some(Ne=>Ne.value==="")),K=S(()=>e.multiple?Ie(e.modelValue)&&e.modelValue.length>0:!tn(e.modelValue)&&(e.modelValue!==""||j.value)),F=S(()=>e.clearable&&!z.value&&l.inputHovering&&K.value),B=S(()=>e.remote&&e.filterable&&!e.remoteShowSuffix?"":e.suffixIcon),I=S(()=>a.is("reverse",B.value&&O.value)),H=S(()=>(L==null?void 0:L.validateState)||""),N=S(()=>f2[H.value]),D=S(()=>e.remote?300:0),q=S(()=>e.loading?e.loadingText||n("el.select.loading"):e.remote&&!l.inputValue&&l.options.size===0?!1:e.filterable&&l.inputValue&&l.options.size>0&&Y.value===0?e.noMatchText||n("el.select.noMatch"):l.options.size===0?e.noDataText||n("el.select.noData"):null),Y=S(()=>J.value.filter(Ne=>Ne.visible).length),J=S(()=>{const Ne=Array.from(l.options.values()),Je=[];return l.optionValues.forEach(Lt=>{const Jt=Ne.findIndex(Eo=>Eo.value===Lt);Jt>-1&&Je.push(Ne[Jt])}),Je.length>=Ne.length?Je:Ne}),se=S(()=>Array.from(l.cachedOptions.values())),_e=S(()=>{const Ne=J.value.filter(Je=>!Je.created).some(Je=>Je.currentLabel===l.inputValue);return e.filterable&&e.allowCreate&&l.inputValue!==""&&!Ne}),Q=()=>{e.filterable&&Xe(e.filterMethod)||e.filterable&&e.remote&&Xe(e.remoteMethod)||J.value.forEach(Ne=>{var Je;(Je=Ne.updateOption)==null||Je.call(Ne,l.inputValue)})},le=an(),ae=S(()=>["small"].includes(le.value)?"small":"default"),Te=S({get(){return O.value&&q.value!==!1},set(Ne){O.value=Ne}}),ce=S(()=>Ie(e.modelValue)?e.modelValue.length===0&&!l.inputValue:e.filterable?!l.inputValue:!0),ge=S(()=>{var Ne;const Je=(Ne=e.placeholder)!=null?Ne:n("el.select.placeholder");return e.multiple||!K.value?Je:l.selectedLabel});pe(()=>e.modelValue,(Ne,Je)=>{e.multiple&&e.filterable&&!e.reserveKeyword&&(l.inputValue="",Ae("")),te(),!wn(Ne,Je)&&e.validateEvent&&(L==null||L.validate("change").catch(Lt=>void 0))},{flush:"post",deep:!0}),pe(()=>O.value,Ne=>{Ne?Ae(l.inputValue):(l.inputValue="",l.previousQuery=null,l.isBeforeHide=!0),t("visible-change",Ne)}),pe(()=>l.options.entries(),()=>{var Ne;if(!gt)return;const Je=((Ne=i.value)==null?void 0:Ne.querySelectorAll("input"))||[];(!e.filterable&&!e.defaultFirstOption&&!Zt(e.modelValue)||!Array.from(Je).includes(document.activeElement))&&te(),e.defaultFirstOption&&(e.filterable||e.remote)&&Y.value&&U()},{flush:"post"}),pe(()=>l.hoveringIndex,Ne=>{Ye(Ne)&&Ne>-1?T.value=J.value[Ne]||{}:T.value={},J.value.forEach(Je=>{Je.hover=T.value===Je})}),gn(()=>{l.isBeforeHide||Q()});const Ae=Ne=>{l.previousQuery!==Ne&&(l.previousQuery=Ne,e.filterable&&Xe(e.filterMethod)?e.filterMethod(Ne):e.filterable&&e.remote&&Xe(e.remoteMethod)&&e.remoteMethod(Ne),e.defaultFirstOption&&(e.filterable||e.remote)&&Y.value?We(U):We(be))},U=()=>{const Ne=J.value.filter(Jt=>Jt.visible&&!Jt.disabled&&!Jt.states.groupDisabled),Je=Ne.find(Jt=>Jt.created),Lt=Ne[0];l.hoveringIndex=fe(J.value,Je||Lt)},te=()=>{if(e.multiple)l.selectedLabel="";else{const Je=ve(e.modelValue);l.selectedLabel=Je.currentLabel,l.selected=Je;return}const Ne=[];Ie(e.modelValue)&&e.modelValue.forEach(Je=>{Ne.push(ve(Je))}),l.selected=Ne},ve=Ne=>{let Je;const Lt=Fi(Ne).toLowerCase()==="object",Jt=Fi(Ne).toLowerCase()==="null",Eo=Fi(Ne).toLowerCase()==="undefined";for(let jo=l.cachedOptions.size-1;jo>=0;jo--){const In=se.value[jo];if(Lt?Gt(In.value,e.valueKey)===Gt(Ne,e.valueKey):In.value===Ne){Je={value:Ne,currentLabel:In.currentLabel,isDisabled:In.isDisabled};break}}if(Je)return Je;const Wo=Lt?Ne.label:!Jt&&!Eo?Ne:"";return{value:Ne,currentLabel:Wo}},be=()=>{e.multiple?l.hoveringIndex=J.value.findIndex(Ne=>l.selected.some(Je=>Ko(Je)===Ko(Ne))):l.hoveringIndex=J.value.findIndex(Ne=>Ko(Ne)===Ko(l.selected))},ue=()=>{l.selectionWidth=u.value.getBoundingClientRect().width},ye=()=>{l.calculatorWidth=p.value.getBoundingClientRect().width},we=()=>{l.collapseItemWidth=g.value.getBoundingClientRect().width},Ce=()=>{var Ne,Je;(Je=(Ne=d.value)==null?void 0:Ne.updatePopper)==null||Je.call(Ne)},he=()=>{var Ne,Je;(Je=(Ne=f.value)==null?void 0:Ne.updatePopper)==null||Je.call(Ne)},Se=()=>{l.inputValue.length>0&&!O.value&&(O.value=!0),Ae(l.inputValue)},Re=Ne=>{if(l.inputValue=Ne.target.value,e.remote)He();else return Se()},He=Hn(()=>{Se()},D.value),de=Ne=>{wn(e.modelValue,Ne)||t(Bt,Ne)},Le=Ne=>Eg(Ne,Je=>!l.disabledOptions.has(Je)),Ue=Ne=>{if(e.multiple&&Ne.code!==Ke.delete&&Ne.target.value.length<=0){const Je=e.modelValue.slice(),Lt=Le(Je);if(Lt<0)return;Je.splice(Lt,1),t(it,Je),de(Je)}},ot=(Ne,Je)=>{const Lt=l.selected.indexOf(Je);if(Lt>-1&&!z.value){const Jt=e.modelValue.slice();Jt.splice(Lt,1),t(it,Jt),de(Jt),t("remove-tag",Je.value)}Ne.stopPropagation(),Ot()},dt=Ne=>{Ne.stopPropagation();const Je=e.multiple?[]:void 0;if(e.multiple)for(const Lt of l.selected)Lt.isDisabled&&Je.push(Lt.value);t(it,Je),de(Je),l.hoveringIndex=-1,O.value=!1,t("clear"),Ot()},je=Ne=>{if(e.multiple){const Je=(e.modelValue||[]).slice(),Lt=fe(Je,Ne.value);Lt>-1?Je.splice(Lt,1):(e.multipleLimit<=0||Je.length{$e(Ne)})},fe=(Ne=[],Je)=>{if(!ct(Je))return Ne.indexOf(Je);const Lt=e.valueKey;let Jt=-1;return Ne.some((Eo,Wo)=>xt(Gt(Eo,Lt))===Gt(Je,Lt)?(Jt=Wo,!0):!1),Jt},$e=Ne=>{var Je,Lt,Jt,Eo,Wo;const Fr=Ie(Ne)?Ne[0]:Ne;let jo=null;if(Fr!=null&&Fr.value){const In=J.value.filter(mi=>mi.value===Fr.value);In.length>0&&(jo=In[0].$el)}if(d.value&&jo){const In=(Eo=(Jt=(Lt=(Je=d.value)==null?void 0:Je.popperRef)==null?void 0:Lt.contentRef)==null?void 0:Jt.querySelector)==null?void 0:Eo.call(Jt,`.${a.be("dropdown","wrap")}`);In&&Ag(In,jo)}(Wo=w.value)==null||Wo.handleScroll()},ee=Ne=>{l.options.set(Ne.value,Ne),l.cachedOptions.set(Ne.value,Ne),Ne.disabled&&l.disabledOptions.set(Ne.value,Ne)},ie=(Ne,Je)=>{l.options.get(Ne)===Je&&l.options.delete(Ne)},{handleCompositionStart:ke,handleCompositionUpdate:ne,handleCompositionEnd:ze}=A8(Ne=>Re(Ne)),tt=S(()=>{var Ne,Je;return(Je=(Ne=d.value)==null?void 0:Ne.popperRef)==null?void 0:Je.contentRef}),St=()=>{We(()=>$e(l.selected))},Ot=()=>{var Ne;(Ne=c.value)==null||Ne.focus()},ho=()=>{kt()},qt=Ne=>{dt(Ne)},kt=Ne=>{if(O.value=!1,C.value){const Je=new FocusEvent("focus",Ne);We(()=>E(Je))}},Ft=()=>{l.inputValue.length>0?l.inputValue="":O.value=!1},Fn=()=>{z.value||(l.menuVisibleOnFocus?l.menuVisibleOnFocus=!1:O.value=!O.value)},Gc=()=>{O.value?J.value[l.hoveringIndex]&&je(J.value[l.hoveringIndex]):Fn()},Ko=Ne=>ct(Ne.value)?Gt(Ne.value,e.valueKey):Ne.value,vi=S(()=>J.value.filter(Ne=>Ne.visible).every(Ne=>Ne.disabled)),hi=S(()=>e.multiple?e.collapseTags?l.selected.slice(0,e.maxCollapseTags):l.selected:[]),Xc=S(()=>e.multiple?e.collapseTags?l.selected.slice(e.maxCollapseTags):[]:[]),Ga=Ne=>{if(!O.value){O.value=!0;return}if(!(l.options.size===0||Y.value===0)&&!vi.value){Ne==="next"?(l.hoveringIndex++,l.hoveringIndex===l.options.size&&(l.hoveringIndex=0)):Ne==="prev"&&(l.hoveringIndex--,l.hoveringIndex<0&&(l.hoveringIndex=l.options.size-1));const Je=J.value[l.hoveringIndex];(Je.disabled===!0||Je.states.groupDisabled===!0||!Je.visible)&&Ga(Ne),We(()=>$e(T.value))}},Jc=()=>{if(!u.value)return 0;const Ne=window.getComputedStyle(u.value);return Number.parseFloat(Ne.gap||"6px")},Zc=S(()=>{const Ne=Jc();return{maxWidth:`${g.value&&e.maxCollapseTags===1?l.selectionWidth-l.collapseItemWidth-Ne:l.selectionWidth}px`}}),Qc=S(()=>({maxWidth:`${l.selectionWidth}px`})),ed=S(()=>({width:`${Math.max(l.calculatorWidth,KX)}px`}));return e.multiple&&!Ie(e.modelValue)&&t(it,[]),!e.multiple&&Ie(e.modelValue)&&t(it,""),Kt(u,ue),Kt(p,ye),Kt(v,Ce),Kt(b,Ce),Kt(_,he),Kt(g,we),et(()=>{te()}),{inputId:P,contentId:o,nsSelect:a,nsInput:r,states:l,isFocused:C,expanded:O,optionsArray:J,hoverOption:T,selectSize:le,filteredOptionsCount:Y,resetCalculatorWidth:ye,updateTooltip:Ce,updateTagTooltip:he,debouncedOnInputChange:He,onInput:Re,deletePrevTag:Ue,deleteTag:ot,deleteSelected:dt,handleOptionSelect:je,scrollToOption:$e,hasModelValue:K,shouldShowPlaceholder:ce,currentPlaceholder:ge,showClose:F,iconComponent:B,iconReverse:I,validateState:H,validateIcon:N,showNewOption:_e,updateOptions:Q,collapseTagSize:ae,setSelected:te,selectDisabled:z,emptyText:q,handleCompositionStart:ke,handleCompositionUpdate:ne,handleCompositionEnd:ze,onOptionCreate:ee,onOptionDestroy:ie,handleMenuEnter:St,handleFocus:x,focus:Ot,blur:ho,handleBlur:E,handleClearClick:qt,handleClickOutside:kt,handleEsc:Ft,toggleMenu:Fn,selectOption:Gc,getValueKey:Ko,navigateOptions:Ga,dropdownMenuVisible:Te,showTagList:hi,collapseTagList:Xc,tagStyle:Zc,collapseTagStyle:Qc,inputStyle:ed,popperRef:tt,inputRef:c,tooltipRef:d,tagTooltipRef:f,calculatorRef:p,prefixRef:h,suffixRef:m,selectRef:i,wrapperRef:b,selectionRef:u,scrollbarRef:w,menuRef:v,tagMenuRef:_,collapseItemRef:g}};var jX=A({name:"ElOptions",setup(e,{slots:t}){const n=Pe(ui);let o=[];return()=>{var a,r;const l=(a=t.default)==null?void 0:a.call(t),i=[];function u(d){Ie(d)&&d.forEach(f=>{var c,p,h,m;const v=(c=(f==null?void 0:f.type)||{})==null?void 0:c.name;v==="ElOptionGroup"?u(!Ze(f.children)&&!Ie(f.children)&&Xe((p=f.children)==null?void 0:p.default)?(h=f.children)==null?void 0:h.default():f.children):v==="ElOption"?i.push((m=f.props)==null?void 0:m.value):Ie(f.children)&&u(f.children)})}return l.length&&u((r=l[0])==null?void 0:r.children),wn(i,o)||(o=i,n&&(n.states.optionValues=i)),l}}});const qX=Ee({name:String,id:String,modelValue:{type:[Array,String,Number,Boolean,Object],default:void 0},autocomplete:{type:String,default:"off"},automaticDropdown:Boolean,size:cn,effect:{type:X(String),default:"light"},disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:{type:String,default:""},popperOptions:{type:X(Object),default:()=>({})},remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String},defaultFirstOption:Boolean,reserveKeyword:{type:Boolean,default:!0},valueKey:{type:String,default:"value"},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},teleported:pn.teleported,persistent:{type:Boolean,default:!0},clearIcon:{type:$t,default:fa},fitInputWidth:Boolean,suffixIcon:{type:$t,default:Bo},tagType:{...Lc.type,default:"info"},validateEvent:{type:Boolean,default:!0},remoteShowSuffix:Boolean,placement:{type:X(String),values:Hr,default:"bottom-start"},fallbackPlacements:{type:X(Array),default:["bottom-start","top-start","right","left"]},ariaLabel:{type:String,default:void 0}}),Sh="ElSelect",UX=A({name:Sh,componentName:Sh,components:{ElInput:mn,ElSelectMenu:FX,ElOption:Z2,ElOptions:jX,ElTag:Ls,ElScrollbar:ha,ElTooltip:En,ElIcon:Be},directives:{ClickOutside:sa},props:qX,emits:[it,Bt,"remove-tag","clear","visible-change","focus","blur"],setup(e,{emit:t}){const n=WX(e,t);return pt(ui,wt({props:e,states:n.states,optionsArray:n.optionsArray,handleOptionSelect:n.handleOptionSelect,onOptionCreate:n.onOptionCreate,onOptionDestroy:n.onOptionDestroy,selectRef:n.selectRef,setSelected:n.setSelected})),{...n}}}),YX=["id","disabled","autocomplete","readonly","aria-activedescendant","aria-controls","aria-expanded","aria-label"],GX=["textContent"];function XX(e,t,n,o,a,r){const l=nt("el-tag"),i=nt("el-tooltip"),u=nt("el-icon"),d=nt("el-option"),f=nt("el-options"),c=nt("el-scrollbar"),p=nt("el-select-menu"),h=sc("click-outside");return Qe((y(),M("div",{ref:"selectRef",class:$([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),onMouseenter:t[16]||(t[16]=m=>e.states.inputHovering=!0),onMouseleave:t[17]||(t[17]=m=>e.states.inputHovering=!1),onClick:t[18]||(t[18]=Ge((...m)=>e.toggleMenu&&e.toggleMenu(...m),["prevent","stop"]))},[W(i,{ref:"tooltipRef",visible:e.dropdownMenuVisible,placement:e.placement,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,pure:"",trigger:"click",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,persistent:e.persistent,onBeforeShow:e.handleMenuEnter,onHide:t[15]||(t[15]=m=>e.states.isBeforeHide=!1)},{default:G(()=>{var m;return[k("div",{ref:"wrapperRef",class:$([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)])},[e.$slots.prefix?(y(),M("div",{key:0,ref:"prefixRef",class:$(e.nsSelect.e("prefix"))},[re(e.$slots,"prefix")],2)):Z("v-if",!0),k("div",{ref:"selectionRef",class:$([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.states.selected.length)])},[e.multiple?re(e.$slots,"tag",{key:0},()=>[(y(!0),M(Fe,null,mt(e.showTagList,v=>(y(),M("div",{key:e.getValueKey(v),class:$(e.nsSelect.e("selected-item"))},[W(l,{closable:!e.selectDisabled&&!v.isDisabled,size:e.collapseTagSize,type:e.tagType,"disable-transitions":"",style:De(e.tagStyle),onClose:_=>e.deleteTag(_,v)},{default:G(()=>[k("span",{class:$(e.nsSelect.e("tags-text"))},Me(v.currentLabel),3)]),_:2},1032,["closable","size","type","style","onClose"])],2))),128)),e.collapseTags&&e.states.selected.length>e.maxCollapseTags?(y(),oe(i,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom",teleported:e.teleported},{default:G(()=>[k("div",{ref:"collapseItemRef",class:$(e.nsSelect.e("selected-item"))},[W(l,{closable:!1,size:e.collapseTagSize,type:e.tagType,"disable-transitions":"",style:De(e.collapseTagStyle)},{default:G(()=>[k("span",{class:$(e.nsSelect.e("tags-text"))}," + "+Me(e.states.selected.length-e.maxCollapseTags),3)]),_:1},8,["size","type","style"])],2)]),content:G(()=>[k("div",{ref:"tagMenuRef",class:$(e.nsSelect.e("selection"))},[(y(!0),M(Fe,null,mt(e.collapseTagList,v=>(y(),M("div",{key:e.getValueKey(v),class:$(e.nsSelect.e("selected-item"))},[W(l,{class:"in-tooltip",closable:!e.selectDisabled&&!v.isDisabled,size:e.collapseTagSize,type:e.tagType,"disable-transitions":"",onClose:_=>e.deleteTag(_,v)},{default:G(()=>[k("span",{class:$(e.nsSelect.e("tags-text"))},Me(v.currentLabel),3)]),_:2},1032,["closable","size","type","onClose"])],2))),128))],2)]),_:1},8,["disabled","effect","teleported"])):Z("v-if",!0)]):Z("v-if",!0),e.selectDisabled?Z("v-if",!0):(y(),M("div",{key:1,class:$([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable)])},[Qe(k("input",{id:e.inputId,ref:"inputRef","onUpdate:modelValue":t[0]||(t[0]=v=>e.states.inputValue=v),type:"text",class:$([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,autocomplete:e.autocomplete,style:De(e.inputStyle),role:"combobox",readonly:!e.filterable,spellcheck:"false","aria-activedescendant":((m=e.hoverOption)==null?void 0:m.id)||"","aria-controls":e.contentId,"aria-expanded":e.dropdownMenuVisible,"aria-label":e.ariaLabel,"aria-autocomplete":"none","aria-haspopup":"listbox",onFocus:t[1]||(t[1]=(...v)=>e.handleFocus&&e.handleFocus(...v)),onBlur:t[2]||(t[2]=(...v)=>e.handleBlur&&e.handleBlur(...v)),onKeydown:[t[3]||(t[3]=Mt(Ge(v=>e.navigateOptions("next"),["stop","prevent"]),["down"])),t[4]||(t[4]=Mt(Ge(v=>e.navigateOptions("prev"),["stop","prevent"]),["up"])),t[5]||(t[5]=Mt(Ge((...v)=>e.handleEsc&&e.handleEsc(...v),["stop","prevent"]),["esc"])),t[6]||(t[6]=Mt(Ge((...v)=>e.selectOption&&e.selectOption(...v),["stop","prevent"]),["enter"])),t[7]||(t[7]=Mt(Ge((...v)=>e.deletePrevTag&&e.deletePrevTag(...v),["stop"]),["delete"]))],onCompositionstart:t[8]||(t[8]=(...v)=>e.handleCompositionStart&&e.handleCompositionStart(...v)),onCompositionupdate:t[9]||(t[9]=(...v)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...v)),onCompositionend:t[10]||(t[10]=(...v)=>e.handleCompositionEnd&&e.handleCompositionEnd(...v)),onInput:t[11]||(t[11]=(...v)=>e.onInput&&e.onInput(...v)),onClick:t[12]||(t[12]=Ge((...v)=>e.toggleMenu&&e.toggleMenu(...v),["stop"]))},null,46,YX),[[B0,e.states.inputValue]]),e.filterable?(y(),M("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:$(e.nsSelect.e("input-calculator")),textContent:Me(e.states.inputValue)},null,10,GX)):Z("v-if",!0)],2)),e.shouldShowPlaceholder?(y(),M("div",{key:2,class:$([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[k("span",null,Me(e.currentPlaceholder),1)],2)):Z("v-if",!0)],2),k("div",{ref:"suffixRef",class:$(e.nsSelect.e("suffix"))},[e.iconComponent&&!e.showClose?(y(),oe(u,{key:0,class:$([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.iconReverse])},{default:G(()=>[(y(),oe(ut(e.iconComponent)))]),_:1},8,["class"])):Z("v-if",!0),e.showClose&&e.clearIcon?(y(),oe(u,{key:1,class:$([e.nsSelect.e("caret"),e.nsSelect.e("icon")]),onClick:e.handleClearClick},{default:G(()=>[(y(),oe(ut(e.clearIcon)))]),_:1},8,["class","onClick"])):Z("v-if",!0),e.validateState&&e.validateIcon?(y(),oe(u,{key:2,class:$([e.nsInput.e("icon"),e.nsInput.e("validateIcon")])},{default:G(()=>[(y(),oe(ut(e.validateIcon)))]),_:1},8,["class"])):Z("v-if",!0)],2)],2)]}),content:G(()=>[W(p,{ref:"menuRef"},{default:G(()=>[e.$slots.header?(y(),M("div",{key:0,class:$(e.nsSelect.be("dropdown","header")),onClick:t[13]||(t[13]=Ge(()=>{},["stop"]))},[re(e.$slots,"header")],2)):Z("v-if",!0),Qe(W(c,{id:e.contentId,ref:"scrollbarRef",tag:"ul","wrap-class":e.nsSelect.be("dropdown","wrap"),"view-class":e.nsSelect.be("dropdown","list"),class:$([e.nsSelect.is("empty",e.filteredOptionsCount===0)]),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical"},{default:G(()=>[e.showNewOption?(y(),oe(d,{key:0,value:e.states.inputValue,created:!0},null,8,["value"])):Z("v-if",!0),W(f,null,{default:G(()=>[re(e.$slots,"default")]),_:3})]),_:3},8,["id","wrap-class","view-class","class","aria-label"]),[[bt,e.states.options.size>0&&!e.loading]]),e.$slots.loading&&e.loading?(y(),M("div",{key:1,class:$(e.nsSelect.be("dropdown","loading"))},[re(e.$slots,"loading")],2)):e.loading||e.filteredOptionsCount===0?(y(),M("div",{key:2,class:$(e.nsSelect.be("dropdown","empty"))},[re(e.$slots,"empty",{},()=>[k("span",null,Me(e.emptyText),1)])],2)):Z("v-if",!0),e.$slots.footer?(y(),M("div",{key:3,class:$(e.nsSelect.be("dropdown","footer")),onClick:t[14]||(t[14]=Ge(()=>{},["stop"]))},[re(e.$slots,"footer")],2)):Z("v-if",!0)]),_:3},512)]),_:3},8,["visible","placement","teleported","popper-class","popper-options","fallback-placements","effect","transition","persistent","onBeforeShow"])],34)),[[h,e.handleClickOutside,e.popperRef]])}var JX=xe(UX,[["render",XX],["__file","select.vue"]]);const ZX=A({name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:Boolean},setup(e){const t=me("select"),n=R(null),o=rt(),a=R([]);pt(T8,wt({...un(e)}));const r=S(()=>a.value.some(u=>u.visible===!0)),l=u=>{const d=[];return Ie(u.children)&&u.children.forEach(f=>{var c,p;f.type&&f.type.name==="ElOption"&&f.component&&f.component.proxy?d.push(f.component.proxy):(c=f.children)!=null&&c.length?d.push(...l(f)):(p=f.component)!=null&&p.subTree&&d.push(...l(f.component.subTree))}),d},i=()=>{a.value=l(o.subTree)};return et(()=>{i()}),z4(n,i,{attributes:!0,subtree:!0,childList:!0}),{groupRef:n,visible:r,ns:t}}});function QX(e,t,n,o,a,r){return Qe((y(),M("ul",{ref:"groupRef",class:$(e.ns.be("group","wrap"))},[k("li",{class:$(e.ns.be("group","title"))},Me(e.label),3),k("li",null,[k("ul",{class:$(e.ns.b("group"))},[re(e.$slots,"default")],2)])],2)),[[bt,e.visible]])}var O8=xe(ZX,[["render",QX],["__file","option-group.vue"]]);const Or=lt(JX,{Option:Z2,OptionGroup:O8}),Ku=Dt(Z2),eJ=Dt(O8),Q2=()=>Pe($8,{}),tJ=Ee({pageSize:{type:Number,required:!0},pageSizes:{type:X(Array),default:()=>Ht([10,20,30,40,50,100])},popperClass:{type:String},disabled:Boolean,teleported:Boolean,size:{type:String,values:zo}}),nJ=A({name:"ElPaginationSizes"}),oJ=A({...nJ,props:tJ,emits:["page-size-change"],setup(e,{emit:t}){const n=e,{t:o}=_t(),a=me("pagination"),r=Q2(),l=R(n.pageSize);pe(()=>n.pageSizes,(d,f)=>{if(!wn(d,f)&&Array.isArray(d)){const c=d.includes(n.pageSize)?n.pageSize:n.pageSizes[0];t("page-size-change",c)}}),pe(()=>n.pageSize,d=>{l.value=d});const i=S(()=>n.pageSizes);function u(d){var f;d!==l.value&&(l.value=d,(f=r.handleSizeChange)==null||f.call(r,Number(d)))}return(d,f)=>(y(),M("span",{class:$(s(a).e("sizes"))},[W(s(Or),{"model-value":l.value,disabled:d.disabled,"popper-class":d.popperClass,size:d.size,teleported:d.teleported,"validate-event":!1,onChange:u},{default:G(()=>[(y(!0),M(Fe,null,mt(s(i),c=>(y(),oe(s(Ku),{key:c,value:c,label:c+s(o)("el.pagination.pagesize")},null,8,["value","label"]))),128))]),_:1},8,["model-value","disabled","popper-class","size","teleported"])],2))}});var aJ=xe(oJ,[["__file","sizes.vue"]]);const rJ=Ee({size:{type:String,values:zo}}),lJ=["disabled"],sJ=A({name:"ElPaginationJumper"}),iJ=A({...sJ,props:rJ,setup(e){const{t}=_t(),n=me("pagination"),{pageCount:o,disabled:a,currentPage:r,changeEvent:l}=Q2(),i=R(),u=S(()=>{var c;return(c=i.value)!=null?c:r==null?void 0:r.value});function d(c){i.value=c?+c:""}function f(c){c=Math.trunc(+c),l==null||l(c),i.value=void 0}return(c,p)=>(y(),M("span",{class:$(s(n).e("jump")),disabled:s(a)},[k("span",{class:$([s(n).e("goto")])},Me(s(t)("el.pagination.goto")),3),W(s(mn),{size:c.size,class:$([s(n).e("editor"),s(n).is("in-pagination")]),min:1,max:s(o),disabled:s(a),"model-value":s(u),"validate-event":!1,label:s(t)("el.pagination.page"),type:"number","onUpdate:modelValue":d,onChange:f},null,8,["size","class","max","disabled","model-value","label"]),k("span",{class:$([s(n).e("classifier")])},Me(s(t)("el.pagination.pageClassifier")),3)],10,lJ))}});var uJ=xe(iJ,[["__file","jumper.vue"]]);const cJ=Ee({total:{type:Number,default:1e3}}),dJ=["disabled"],fJ=A({name:"ElPaginationTotal"}),pJ=A({...fJ,props:cJ,setup(e){const{t}=_t(),n=me("pagination"),{disabled:o}=Q2();return(a,r)=>(y(),M("span",{class:$(s(n).e("total")),disabled:s(o)},Me(s(t)("el.pagination.total",{total:a.total})),11,dJ))}});var vJ=xe(pJ,[["__file","total.vue"]]);const hJ=Ee({currentPage:{type:Number,default:1},pageCount:{type:Number,required:!0},pagerCount:{type:Number,default:7},disabled:Boolean}),mJ=["onKeyup"],gJ=["aria-current","aria-label","tabindex"],yJ=["tabindex","aria-label"],_J=["aria-current","aria-label","tabindex"],bJ=["tabindex","aria-label"],wJ=["aria-current","aria-label","tabindex"],CJ=A({name:"ElPaginationPager"}),SJ=A({...CJ,props:hJ,emits:["change"],setup(e,{emit:t}){const n=e,o=me("pager"),a=me("icon"),{t:r}=_t(),l=R(!1),i=R(!1),u=R(!1),d=R(!1),f=R(!1),c=R(!1),p=S(()=>{const C=n.pagerCount,x=(C-1)/2,E=Number(n.currentPage),O=Number(n.pageCount);let T=!1,V=!1;O>C&&(E>C-x&&(T=!0),E["more","btn-quickprev",a.b(),o.is("disabled",n.disabled)]),m=S(()=>["more","btn-quicknext",a.b(),o.is("disabled",n.disabled)]),v=S(()=>n.disabled?-1:0);gn(()=>{const C=(n.pagerCount-1)/2;l.value=!1,i.value=!1,n.pageCount>n.pagerCount&&(n.currentPage>n.pagerCount-C&&(l.value=!0),n.currentPageO&&(E=O)),E!==T&&t("change",E)}return(C,x)=>(y(),M("ul",{class:$(s(o).b()),onClick:b,onKeyup:Mt(w,["enter"])},[C.pageCount>0?(y(),M("li",{key:0,class:$([[s(o).is("active",C.currentPage===1),s(o).is("disabled",C.disabled)],"number"]),"aria-current":C.currentPage===1,"aria-label":s(r)("el.pagination.currentPage",{pager:1}),tabindex:s(v)}," 1 ",10,gJ)):Z("v-if",!0),l.value?(y(),M("li",{key:1,class:$(s(h)),tabindex:s(v),"aria-label":s(r)("el.pagination.prevPages",{pager:C.pagerCount-2}),onMouseenter:x[0]||(x[0]=E=>_(!0)),onMouseleave:x[1]||(x[1]=E=>u.value=!1),onFocus:x[2]||(x[2]=E=>g(!0)),onBlur:x[3]||(x[3]=E=>f.value=!1)},[(u.value||f.value)&&!C.disabled?(y(),oe(s(Mr),{key:0})):(y(),oe(s(cf),{key:1}))],42,yJ)):Z("v-if",!0),(y(!0),M(Fe,null,mt(s(p),E=>(y(),M("li",{key:E,class:$([[s(o).is("active",C.currentPage===E),s(o).is("disabled",C.disabled)],"number"]),"aria-current":C.currentPage===E,"aria-label":s(r)("el.pagination.currentPage",{pager:E}),tabindex:s(v)},Me(E),11,_J))),128)),i.value?(y(),M("li",{key:2,class:$(s(m)),tabindex:s(v),"aria-label":s(r)("el.pagination.nextPages",{pager:C.pagerCount-2}),onMouseenter:x[4]||(x[4]=E=>_()),onMouseleave:x[5]||(x[5]=E=>d.value=!1),onFocus:x[6]||(x[6]=E=>g()),onBlur:x[7]||(x[7]=E=>c.value=!1)},[(d.value||c.value)&&!C.disabled?(y(),oe(s($r),{key:0})):(y(),oe(s(cf),{key:1}))],42,bJ)):Z("v-if",!0),C.pageCount>1?(y(),M("li",{key:3,class:$([[s(o).is("active",C.currentPage===C.pageCount),s(o).is("disabled",C.disabled)],"number"]),"aria-current":C.currentPage===C.pageCount,"aria-label":s(r)("el.pagination.currentPage",{pager:C.pageCount}),tabindex:s(v)},Me(C.pageCount),11,wJ)):Z("v-if",!0)],42,mJ))}});var kJ=xe(SJ,[["__file","pager.vue"]]);const xn=e=>typeof e!="number",EJ=Ee({pageSize:Number,defaultPageSize:Number,total:Number,pageCount:Number,pagerCount:{type:Number,validator:e=>Ye(e)&&Math.trunc(e)===e&&e>4&&e<22&&e%2===1,default:7},currentPage:Number,defaultCurrentPage:Number,layout:{type:String,default:["prev","pager","next","jumper","->","total"].join(", ")},pageSizes:{type:X(Array),default:()=>Ht([10,20,30,40,50,100])},popperClass:{type:String,default:""},prevText:{type:String,default:""},prevIcon:{type:$t,default:()=>aa},nextText:{type:String,default:""},nextIcon:{type:$t,default:()=>Sn},teleported:{type:Boolean,default:!0},small:Boolean,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean}),xJ={"update:current-page":e=>Ye(e),"update:page-size":e=>Ye(e),"size-change":e=>Ye(e),change:(e,t)=>Ye(e)&&Ye(t),"current-change":e=>Ye(e),"prev-click":e=>Ye(e),"next-click":e=>Ye(e)},kh="ElPagination";var MJ=A({name:kh,props:EJ,emits:xJ,setup(e,{emit:t,slots:n}){const{t:o}=_t(),a=me("pagination"),r=rt().vnode.props||{},l="onUpdate:currentPage"in r||"onUpdate:current-page"in r||"onCurrentChange"in r,i="onUpdate:pageSize"in r||"onUpdate:page-size"in r||"onSizeChange"in r,u=S(()=>{if(xn(e.total)&&xn(e.pageCount)||!xn(e.currentPage)&&!l)return!1;if(e.layout.includes("sizes")){if(xn(e.pageCount)){if(!xn(e.total)&&!xn(e.pageSize)&&!i)return!1}else if(!i)return!1}return!0}),d=R(xn(e.defaultPageSize)?10:e.defaultPageSize),f=R(xn(e.defaultCurrentPage)?1:e.defaultCurrentPage),c=S({get(){return xn(e.pageSize)?d.value:e.pageSize},set(b){xn(e.pageSize)&&(d.value=b),i&&(t("update:page-size",b),t("size-change",b))}}),p=S(()=>{let b=0;return xn(e.pageCount)?xn(e.total)||(b=Math.max(1,Math.ceil(e.total/c.value))):b=e.pageCount,b}),h=S({get(){return xn(e.currentPage)?f.value:e.currentPage},set(b){let C=b;b<1?C=1:b>p.value&&(C=p.value),xn(e.currentPage)&&(f.value=C),l&&(t("update:current-page",C),t("current-change",C))}});pe(p,b=>{h.value>b&&(h.value=b)}),pe([h,c],b=>{t("change",...b)},{flush:"post"});function m(b){h.value=b}function v(b){c.value=b;const C=p.value;h.value>C&&(h.value=C)}function _(){e.disabled||(h.value-=1,t("prev-click",h.value))}function g(){e.disabled||(h.value+=1,t("next-click",h.value))}function w(b,C){b&&(b.props||(b.props={}),b.props.class=[b.props.class,C].join(" "))}return pt($8,{pageCount:p,disabled:S(()=>e.disabled),currentPage:h,changeEvent:m,handleSizeChange:v}),()=>{var b,C;if(!u.value)return o("el.pagination.deprecationWarning"),null;if(!e.layout||e.hideOnSinglePage&&p.value<=1)return null;const x=[],E=[],O=qe("div",{class:a.e("rightwrapper")},E),T={prev:qe(TX,{disabled:e.disabled,currentPage:h.value,prevText:e.prevText,prevIcon:e.prevIcon,onClick:_}),jumper:qe(uJ,{size:e.small?"small":"default"}),pager:qe(kJ,{currentPage:h.value,pageCount:p.value,pagerCount:e.pagerCount,onChange:m,disabled:e.disabled}),next:qe(PX,{disabled:e.disabled,currentPage:h.value,pageCount:p.value,nextText:e.nextText,nextIcon:e.nextIcon,onClick:g}),sizes:qe(aJ,{pageSize:c.value,pageSizes:e.pageSizes,popperClass:e.popperClass,disabled:e.disabled,teleported:e.teleported,size:e.small?"small":"default"}),slot:(C=(b=n==null?void 0:n.default)==null?void 0:b.call(n))!=null?C:null,total:qe(vJ,{total:xn(e.total)?0:e.total})},V=e.layout.split(",").map(P=>P.trim());let L=!1;return V.forEach(P=>{if(P==="->"){L=!0;return}L?E.push(T[P]):x.push(T[P])}),w(x[0],a.is("first")),w(x[x.length-1],a.is("last")),L&&E.length>0&&(w(E[0],a.is("first")),w(E[E.length-1],a.is("last")),x.push(O)),qe("div",{class:[a.b(),a.is("background",e.background),{[a.m("small")]:e.small}]},x)}}});const $J=lt(MJ),TJ=Ee({title:String,confirmButtonText:String,cancelButtonText:String,confirmButtonType:{type:String,values:wf,default:"primary"},cancelButtonType:{type:String,values:wf,default:"text"},icon:{type:$t,default:()=>Fg},iconColor:{type:String,default:"#f90"},hideIcon:{type:Boolean,default:!1},hideAfter:{type:Number,default:200},teleported:pn.teleported,persistent:pn.persistent,width:{type:[String,Number],default:150}}),AJ={confirm:e=>e instanceof MouseEvent,cancel:e=>e instanceof MouseEvent},OJ=A({name:"ElPopconfirm"}),NJ=A({...OJ,props:TJ,emits:AJ,setup(e,{emit:t}){const n=e,{t:o}=_t(),a=me("popconfirm"),r=R(),l=()=>{var p,h;(h=(p=r.value)==null?void 0:p.onClose)==null||h.call(p)},i=S(()=>({width:Xt(n.width)})),u=p=>{t("confirm",p),l()},d=p=>{t("cancel",p),l()},f=S(()=>n.confirmButtonText||o("el.popconfirm.confirmButtonText")),c=S(()=>n.cancelButtonText||o("el.popconfirm.cancelButtonText"));return(p,h)=>(y(),oe(s(En),ft({ref_key:"tooltipRef",ref:r,trigger:"click",effect:"light"},p.$attrs,{"popper-class":`${s(a).namespace.value}-popover`,"popper-style":s(i),teleported:p.teleported,"fallback-placements":["bottom","top","right","left"],"hide-after":p.hideAfter,persistent:p.persistent}),{content:G(()=>[k("div",{class:$(s(a).b())},[k("div",{class:$(s(a).e("main"))},[!p.hideIcon&&p.icon?(y(),oe(s(Be),{key:0,class:$(s(a).e("icon")),style:De({color:p.iconColor})},{default:G(()=>[(y(),oe(ut(p.icon)))]),_:1},8,["class","style"])):Z("v-if",!0),vt(" "+Me(p.title),1)],2),k("div",{class:$(s(a).e("action"))},[W(s(rn),{size:"small",type:p.cancelButtonType==="text"?"":p.cancelButtonType,text:p.cancelButtonType==="text",onClick:d},{default:G(()=>[vt(Me(s(c)),1)]),_:1},8,["type","text"]),W(s(rn),{size:"small",type:p.confirmButtonType==="text"?"":p.confirmButtonType,text:p.confirmButtonType==="text",onClick:u},{default:G(()=>[vt(Me(s(f)),1)]),_:1},8,["type","text"])],2)],2)]),default:G(()=>[p.$slots.reference?re(p.$slots,"reference",{key:0}):Z("v-if",!0)]),_:3},16,["popper-class","popper-style","teleported","hide-after","persistent"]))}});var IJ=xe(NJ,[["__file","popconfirm.vue"]]);const RJ=lt(IJ),PJ=Ee({trigger:Ps.trigger,placement:iu.placement,disabled:Ps.disabled,visible:pn.visible,transition:pn.transition,popperOptions:iu.popperOptions,tabindex:iu.tabindex,content:pn.content,popperStyle:pn.popperStyle,popperClass:pn.popperClass,enterable:{...pn.enterable,default:!0},effect:{...pn.effect,default:"light"},teleported:pn.teleported,title:String,width:{type:[String,Number],default:150},offset:{type:Number,default:void 0},showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0},showArrow:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},"onUpdate:visible":{type:Function}}),LJ={"update:visible":e=>Qt(e),"before-enter":()=>!0,"before-leave":()=>!0,"after-enter":()=>!0,"after-leave":()=>!0},VJ="onUpdate:visible",BJ=A({name:"ElPopover"}),zJ=A({...BJ,props:PJ,emits:LJ,setup(e,{expose:t,emit:n}){const o=e,a=S(()=>o[VJ]),r=me("popover"),l=R(),i=S(()=>{var _;return(_=s(l))==null?void 0:_.popperRef}),u=S(()=>[{width:Xt(o.width)},o.popperStyle]),d=S(()=>[r.b(),o.popperClass,{[r.m("plain")]:!!o.content}]),f=S(()=>o.transition===`${r.namespace.value}-fade-in-linear`),c=()=>{var _;(_=l.value)==null||_.hide()},p=()=>{n("before-enter")},h=()=>{n("before-leave")},m=()=>{n("after-enter")},v=()=>{n("update:visible",!1),n("after-leave")};return t({popperRef:i,hide:c}),(_,g)=>(y(),oe(s(En),ft({ref_key:"tooltipRef",ref:l},_.$attrs,{trigger:_.trigger,placement:_.placement,disabled:_.disabled,visible:_.visible,transition:_.transition,"popper-options":_.popperOptions,tabindex:_.tabindex,content:_.content,offset:_.offset,"show-after":_.showAfter,"hide-after":_.hideAfter,"auto-close":_.autoClose,"show-arrow":_.showArrow,"aria-label":_.title,effect:_.effect,enterable:_.enterable,"popper-class":s(d),"popper-style":s(u),teleported:_.teleported,persistent:_.persistent,"gpu-acceleration":s(f),"onUpdate:visible":s(a),onBeforeShow:p,onBeforeHide:h,onShow:m,onHide:v}),{content:G(()=>[_.title?(y(),M("div",{key:0,class:$(s(r).e("title")),role:"title"},Me(_.title),3)):Z("v-if",!0),re(_.$slots,"default",{},()=>[vt(Me(_.content),1)])]),default:G(()=>[_.$slots.reference?re(_.$slots,"reference",{key:0}):Z("v-if",!0)]),_:3},16,["trigger","placement","disabled","visible","transition","popper-options","tabindex","content","offset","show-after","hide-after","auto-close","show-arrow","aria-label","effect","enterable","popper-class","popper-style","teleported","persistent","gpu-acceleration","onUpdate:visible"]))}});var HJ=xe(zJ,[["__file","popover.vue"]]);const Eh=(e,t)=>{const n=t.arg||t.value,o=n==null?void 0:n.popperRef;o&&(o.triggerRef=e)};var DJ={mounted(e,t){Eh(e,t)},updated(e,t){Eh(e,t)}};const FJ="popover",N8=kP(DJ,FJ),KJ=lt(HJ,{directive:N8}),WJ=Ee({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:{type:Boolean,default:!1},duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:X(String),default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:X([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:X(Function),default:e=>`${e}%`}}),jJ=["aria-valuenow"],qJ={viewBox:"0 0 100 100"},UJ=["d","stroke","stroke-linecap","stroke-width"],YJ=["d","stroke","opacity","stroke-linecap","stroke-width"],GJ={key:0},XJ=A({name:"ElProgress"}),JJ=A({...XJ,props:WJ,setup(e){const t=e,n={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},o=me("progress"),a=S(()=>({width:`${t.percentage}%`,animationDuration:`${t.duration}s`,backgroundColor:w(t.percentage)})),r=S(()=>(t.strokeWidth/t.width*100).toFixed(1)),l=S(()=>["circle","dashboard"].includes(t.type)?Number.parseInt(`${50-Number.parseFloat(r.value)/2}`,10):0),i=S(()=>{const b=l.value,C=t.type==="dashboard";return` + M 50 50 + m 0 ${C?"":"-"}${b} + a ${b} ${b} 0 1 1 0 ${C?"-":""}${b*2} + a ${b} ${b} 0 1 1 0 ${C?"":"-"}${b*2} + `}),u=S(()=>2*Math.PI*l.value),d=S(()=>t.type==="dashboard"?.75:1),f=S(()=>`${-1*u.value*(1-d.value)/2}px`),c=S(()=>({strokeDasharray:`${u.value*d.value}px, ${u.value}px`,strokeDashoffset:f.value})),p=S(()=>({strokeDasharray:`${u.value*d.value*(t.percentage/100)}px, ${u.value}px`,strokeDashoffset:f.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),h=S(()=>{let b;return t.color?b=w(t.percentage):b=n[t.status]||n.default,b}),m=S(()=>t.status==="warning"?ti:t.type==="line"?t.status==="success"?Sc:fa:t.status==="success"?Bl:uo),v=S(()=>t.type==="line"?12+t.strokeWidth*.4:t.width*.111111+2),_=S(()=>t.format(t.percentage));function g(b){const C=100/b.length;return b.map((E,O)=>Ze(E)?{color:E,percentage:(O+1)*C}:E).sort((E,O)=>E.percentage-O.percentage)}const w=b=>{var C;const{color:x}=t;if(Xe(x))return x(b);if(Ze(x))return x;{const E=g(x);for(const O of E)if(O.percentage>b)return O.color;return(C=E[E.length-1])==null?void 0:C.color}};return(b,C)=>(y(),M("div",{class:$([s(o).b(),s(o).m(b.type),s(o).is(b.status),{[s(o).m("without-text")]:!b.showText,[s(o).m("text-inside")]:b.textInside}]),role:"progressbar","aria-valuenow":b.percentage,"aria-valuemin":"0","aria-valuemax":"100"},[b.type==="line"?(y(),M("div",{key:0,class:$(s(o).b("bar"))},[k("div",{class:$(s(o).be("bar","outer")),style:De({height:`${b.strokeWidth}px`})},[k("div",{class:$([s(o).be("bar","inner"),{[s(o).bem("bar","inner","indeterminate")]:b.indeterminate},{[s(o).bem("bar","inner","striped")]:b.striped},{[s(o).bem("bar","inner","striped-flow")]:b.stripedFlow}]),style:De(s(a))},[(b.showText||b.$slots.default)&&b.textInside?(y(),M("div",{key:0,class:$(s(o).be("bar","innerText"))},[re(b.$slots,"default",{percentage:b.percentage},()=>[k("span",null,Me(s(_)),1)])],2)):Z("v-if",!0)],6)],6)],2)):(y(),M("div",{key:1,class:$(s(o).b("circle")),style:De({height:`${b.width}px`,width:`${b.width}px`})},[(y(),M("svg",qJ,[k("path",{class:$(s(o).be("circle","track")),d:s(i),stroke:`var(${s(o).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":b.strokeLinecap,"stroke-width":s(r),fill:"none",style:De(s(c))},null,14,UJ),k("path",{class:$(s(o).be("circle","path")),d:s(i),stroke:s(h),fill:"none",opacity:b.percentage?1:0,"stroke-linecap":b.strokeLinecap,"stroke-width":s(r),style:De(s(p))},null,14,YJ)]))],6)),(b.showText||b.$slots.default)&&!b.textInside?(y(),M("div",{key:2,class:$(s(o).e("text")),style:De({fontSize:`${s(v)}px`})},[re(b.$slots,"default",{percentage:b.percentage},()=>[b.status?(y(),oe(s(Be),{key:1},{default:G(()=>[(y(),oe(ut(s(m))))]),_:1})):(y(),M("span",GJ,Me(s(_)),1))])],6)):Z("v-if",!0)],10,jJ))}});var ZJ=xe(JJ,[["__file","progress.vue"]]);const I8=lt(ZJ),QJ=Ee({modelValue:{type:Number,default:0},id:{type:String,default:void 0},lowThreshold:{type:Number,default:2},highThreshold:{type:Number,default:4},max:{type:Number,default:5},colors:{type:X([Array,Object]),default:()=>Ht(["","",""])},voidColor:{type:String,default:""},disabledVoidColor:{type:String,default:""},icons:{type:X([Array,Object]),default:()=>[Ql,Ql,Ql]},voidIcon:{type:$t,default:()=>Gg},disabledVoidIcon:{type:$t,default:()=>Ql},disabled:Boolean,allowHalf:Boolean,showText:Boolean,showScore:Boolean,textColor:{type:String,default:""},texts:{type:X(Array),default:()=>Ht(["Extremely bad","Disappointed","Fair","Satisfied","Surprise"])},scoreTemplate:{type:String,default:"{value}"},size:cn,label:{type:String,default:void 0},clearable:{type:Boolean,default:!1}}),eZ={[Bt]:e=>Ye(e),[it]:e=>Ye(e)},tZ=["id","aria-label","aria-labelledby","aria-valuenow","aria-valuetext","aria-valuemax"],nZ=["onMousemove","onClick"],oZ=A({name:"ElRate"}),aZ=A({...oZ,props:QJ,emits:eZ,setup(e,{expose:t,emit:n}){const o=e;function a(B,I){const H=q=>ct(q),N=Object.keys(I).map(q=>+q).filter(q=>{const Y=I[q];return(H(Y)?Y.excluded:!1)?Bq-Y),D=I[N[0]];return H(D)&&D.value||D}const r=Pe(Dr,void 0),l=Pe(Vo,void 0),i=an(),u=me("rate"),{inputId:d,isLabeledByFormItem:f}=Ho(o,{formItemContext:l}),c=R(o.modelValue),p=R(-1),h=R(!0),m=S(()=>[u.b(),u.m(i.value)]),v=S(()=>o.disabled||(r==null?void 0:r.disabled)),_=S(()=>u.cssVarBlock({"void-color":o.voidColor,"disabled-void-color":o.disabledVoidColor,"fill-color":C.value})),g=S(()=>{let B="";return o.showScore?B=o.scoreTemplate.replace(/\{\s*value\s*\}/,v.value?`${o.modelValue}`:`${c.value}`):o.showText&&(B=o.texts[Math.ceil(c.value)-1]),B}),w=S(()=>o.modelValue*100-Math.floor(o.modelValue)*100),b=S(()=>Ie(o.colors)?{[o.lowThreshold]:o.colors[0],[o.highThreshold]:{value:o.colors[1],excluded:!0},[o.max]:o.colors[2]}:o.colors),C=S(()=>{const B=a(c.value,b.value);return ct(B)?"":B}),x=S(()=>{let B="";return v.value?B=`${w.value}%`:o.allowHalf&&(B="50%"),{color:C.value,width:B}}),E=S(()=>{let B=Ie(o.icons)?[...o.icons]:{...o.icons};return B=hr(B),Ie(B)?{[o.lowThreshold]:B[0],[o.highThreshold]:{value:B[1],excluded:!0},[o.max]:B[2]}:B}),O=S(()=>a(o.modelValue,E.value)),T=S(()=>v.value?Ze(o.disabledVoidIcon)?o.disabledVoidIcon:hr(o.disabledVoidIcon):Ze(o.voidIcon)?o.voidIcon:hr(o.voidIcon)),V=S(()=>a(c.value,E.value));function L(B){const I=v.value&&w.value>0&&B-1o.modelValue,H=o.allowHalf&&h.value&&B-.5<=c.value&&B>c.value;return I||H}function P(B){o.clearable&&B===o.modelValue&&(B=0),n(it,B),o.modelValue!==B&&n("change",B)}function z(B){v.value||(o.allowHalf&&h.value?P(c.value):P(B))}function j(B){if(v.value)return;let I=c.value;const H=B.code;return H===Ke.up||H===Ke.right?(o.allowHalf?I+=.5:I+=1,B.stopPropagation(),B.preventDefault()):(H===Ke.left||H===Ke.down)&&(o.allowHalf?I-=.5:I-=1,B.stopPropagation(),B.preventDefault()),I=I<0?0:I,I=I>o.max?o.max:I,n(it,I),n("change",I),I}function K(B,I){if(!v.value){if(o.allowHalf&&I){let H=I.target;oo(H,u.e("item"))&&(H=H.querySelector(`.${u.e("icon")}`)),(H.clientWidth===0||oo(H,u.e("decimal")))&&(H=H.parentNode),h.value=I.offsetX*2<=H.clientWidth,c.value=h.value?B-.5:B}else c.value=B;p.value=B}}function F(){v.value||(o.allowHalf&&(h.value=o.modelValue!==Math.floor(o.modelValue)),c.value=o.modelValue,p.value=-1)}return pe(()=>o.modelValue,B=>{c.value=B,h.value=o.modelValue!==Math.floor(o.modelValue)}),o.modelValue||n(it,0),t({setCurrentValue:K,resetCurrentValue:F}),(B,I)=>{var H;return y(),M("div",{id:s(d),class:$([s(m),s(u).is("disabled",s(v))]),role:"slider","aria-label":s(f)?void 0:B.label||"rating","aria-labelledby":s(f)?(H=s(l))==null?void 0:H.labelId:void 0,"aria-valuenow":c.value,"aria-valuetext":s(g)||void 0,"aria-valuemin":"0","aria-valuemax":B.max,tabindex:"0",style:De(s(_)),onKeydown:j},[(y(!0),M(Fe,null,mt(B.max,(N,D)=>(y(),M("span",{key:D,class:$(s(u).e("item")),onMousemove:q=>K(N,q),onMouseleave:F,onClick:q=>z(N)},[W(s(Be),{class:$([s(u).e("icon"),{hover:p.value===N},s(u).is("active",N<=c.value)])},{default:G(()=>[L(N)?Z("v-if",!0):(y(),M(Fe,{key:0},[Qe((y(),oe(ut(s(V)),null,null,512)),[[bt,N<=c.value]]),Qe((y(),oe(ut(s(T)),null,null,512)),[[bt,!(N<=c.value)]])],64)),L(N)?(y(),M(Fe,{key:1},[(y(),oe(ut(s(T)),{class:$([s(u).em("decimal","box")])},null,8,["class"])),W(s(Be),{style:De(s(x)),class:$([s(u).e("icon"),s(u).e("decimal")])},{default:G(()=>[(y(),oe(ut(s(O))))]),_:1},8,["style","class"])],64)):Z("v-if",!0)]),_:2},1032,["class"])],42,nZ))),128)),B.showText||B.showScore?(y(),M("span",{key:0,class:$(s(u).e("text")),style:De({color:B.textColor})},Me(s(g)),7)):Z("v-if",!0)],46,tZ)}}});var rZ=xe(aZ,[["__file","rate.vue"]]);const lZ=lt(rZ),Zr={success:"icon-success",warning:"icon-warning",error:"icon-error",info:"icon-info"},xh={[Zr.success]:Rg,[Zr.warning]:ti,[Zr.error]:kc,[Zr.info]:Ec},sZ=Ee({title:{type:String,default:""},subTitle:{type:String,default:""},icon:{type:String,values:["success","warning","info","error"],default:"info"}}),iZ=A({name:"ElResult"}),uZ=A({...iZ,props:sZ,setup(e){const t=e,n=me("result"),o=S(()=>{const a=t.icon,r=a&&Zr[a]?Zr[a]:"icon-info",l=xh[r]||xh["icon-info"];return{class:r,component:l}});return(a,r)=>(y(),M("div",{class:$(s(n).b())},[k("div",{class:$(s(n).e("icon"))},[re(a.$slots,"icon",{},()=>[s(o).component?(y(),oe(ut(s(o).component),{key:0,class:$(s(o).class)},null,8,["class"])):Z("v-if",!0)])],2),a.title||a.$slots.title?(y(),M("div",{key:0,class:$(s(n).e("title"))},[re(a.$slots,"title",{},()=>[k("p",null,Me(a.title),1)])],2)):Z("v-if",!0),a.subTitle||a.$slots["sub-title"]?(y(),M("div",{key:1,class:$(s(n).e("subtitle"))},[re(a.$slots,"sub-title",{},()=>[k("p",null,Me(a.subTitle),1)])],2)):Z("v-if",!0),a.$slots.extra?(y(),M("div",{key:2,class:$(s(n).e("extra"))},[re(a.$slots,"extra")],2)):Z("v-if",!0)],2))}});var cZ=xe(uZ,[["__file","result.vue"]]);const dZ=lt(cZ);var Mh=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function fZ(e,t){return!!(e===t||Mh(e)&&Mh(t))}function pZ(e,t){if(e.length!==t.length)return!1;for(var n=0;n{const t=rt().proxy.$props;return S(()=>{const n=(o,a,r)=>({});return t.perfMode?yc(n):vZ(n)})},Ff=50,Wu="itemRendered",ju="scroll",Qr="forward",qu="backward",to="auto",zc="smart",Bs="start",Oo="center",zs="end",xl="horizontal",ep="vertical",hZ="ltr",ul="rtl",Hs="negative",tp="positive-ascending",np="positive-descending",mZ={[xl]:"left",[ep]:"top"},gZ=20,yZ={[xl]:"deltaX",[ep]:"deltaY"},_Z=({atEndEdge:e,atStartEdge:t,layout:n},o)=>{let a,r=0;const l=u=>u<0&&t.value||u>0&&e.value;return{hasReachedEdge:l,onWheel:u=>{xr(a);const d=u[yZ[n.value]];l(r)&&l(r+d)||(r+=d,D4()||u.preventDefault(),a=Fa(()=>{o(r),r=0}))}}},Kf=So({type:X([Number,Function]),required:!0}),Wf=So({type:Number}),jf=So({type:Number,default:2}),bZ=So({type:String,values:["ltr","rtl"],default:"ltr"}),qf=So({type:Number,default:0}),Uu=So({type:Number,required:!0}),P8=So({type:String,values:["horizontal","vertical"],default:ep}),L8=Ee({className:{type:String,default:""},containerElement:{type:X([String,Object]),default:"div"},data:{type:X(Array),default:()=>Ht([])},direction:bZ,height:{type:[String,Number],required:!0},innerElement:{type:[String,Object],default:"div"},style:{type:X([Object,String,Array])},useIsScrolling:{type:Boolean,default:!1},width:{type:[Number,String],required:!1},perfMode:{type:Boolean,default:!0},scrollbarAlwaysOn:{type:Boolean,default:!1}}),V8=Ee({cache:jf,estimatedItemSize:Wf,layout:P8,initScrollOffset:qf,total:Uu,itemSize:Kf,...L8}),Uf={type:Number,default:6},B8={type:Number,default:0},z8={type:Number,default:2},br=Ee({columnCache:jf,columnWidth:Kf,estimatedColumnWidth:Wf,estimatedRowHeight:Wf,initScrollLeft:qf,initScrollTop:qf,itemKey:{type:X(Function),default:({columnIndex:e,rowIndex:t})=>`${t}:${e}`},rowCache:jf,rowHeight:Kf,totalColumn:Uu,totalRow:Uu,hScrollbarSize:Uf,vScrollbarSize:Uf,scrollbarStartGap:B8,scrollbarEndGap:z8,role:String,...L8}),H8=Ee({alwaysOn:Boolean,class:String,layout:P8,total:Uu,ratio:{type:Number,required:!0},clientSize:{type:Number,required:!0},scrollFrom:{type:Number,required:!0},scrollbarSize:Uf,startGap:B8,endGap:z8,visible:Boolean}),cr=(e,t)=>ee===hZ||e===ul||e===xl,$h=e=>e===ul;let qr=null;function Yu(e=!1){if(qr===null||e){const t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";const o=document.createElement("div"),a=o.style;return a.width="100px",a.height="100px",t.appendChild(o),document.body.appendChild(t),t.scrollLeft>0?qr=np:(t.scrollLeft=1,t.scrollLeft===0?qr=Hs:qr=tp),document.body.removeChild(t),qr}return qr}function wZ({move:e,size:t,bar:n},o){const a={},r=`translate${n.axis}(${e}px)`;return a[n.size]=t,a.transform=r,a.msTransform=r,a.webkitTransform=r,o==="horizontal"?a.height="100%":a.width="100%",a}const Yf=A({name:"ElVirtualScrollBar",props:H8,emits:["scroll","start-move","stop-move"],setup(e,{emit:t}){const n=S(()=>e.startGap+e.endGap),o=me("virtual-scrollbar"),a=me("scrollbar"),r=R(),l=R();let i=null,u=null;const d=wt({isDragging:!1,traveled:0}),f=S(()=>z6[e.layout]),c=S(()=>e.clientSize-s(n)),p=S(()=>({position:"absolute",width:`${xl===e.layout?c.value:e.scrollbarSize}px`,height:`${xl===e.layout?e.scrollbarSize:c.value}px`,[mZ[e.layout]]:"2px",right:"2px",bottom:"2px",borderRadius:"4px"})),h=S(()=>{const E=e.ratio,O=e.clientSize;if(E>=100)return Number.POSITIVE_INFINITY;if(E>=50)return E*O/100;const T=O/3;return Math.floor(Math.min(Math.max(E*O,gZ),T))}),m=S(()=>{if(!Number.isFinite(h.value))return{display:"none"};const E=`${h.value}px`;return wZ({bar:f.value,size:E,move:d.traveled},e.layout)}),v=S(()=>Math.floor(e.clientSize-h.value-s(n))),_=()=>{window.addEventListener("mousemove",C),window.addEventListener("mouseup",b);const E=s(l);E&&(u=document.onselectstart,document.onselectstart=()=>!1,E.addEventListener("touchmove",C),E.addEventListener("touchend",b))},g=()=>{window.removeEventListener("mousemove",C),window.removeEventListener("mouseup",b),document.onselectstart=u,u=null;const E=s(l);E&&(E.removeEventListener("touchmove",C),E.removeEventListener("touchend",b))},w=E=>{E.stopImmediatePropagation(),!(E.ctrlKey||[1,2].includes(E.button))&&(d.isDragging=!0,d[f.value.axis]=E.currentTarget[f.value.offset]-(E[f.value.client]-E.currentTarget.getBoundingClientRect()[f.value.direction]),t("start-move"),_())},b=()=>{d.isDragging=!1,d[f.value.axis]=0,t("stop-move"),g()},C=E=>{const{isDragging:O}=d;if(!O||!l.value||!r.value)return;const T=d[f.value.axis];if(!T)return;xr(i);const V=(r.value.getBoundingClientRect()[f.value.direction]-E[f.value.client])*-1,L=l.value[f.value.offset]-T,P=V-L;i=Fa(()=>{d.traveled=Math.max(e.startGap,Math.min(P,v.value)),t("scroll",P,v.value)})},x=E=>{const O=Math.abs(E.target.getBoundingClientRect()[f.value.direction]-E[f.value.client]),T=l.value[f.value.offset]/2,V=O-T;d.traveled=Math.max(0,Math.min(V,v.value)),t("scroll",V,v.value)};return pe(()=>e.scrollFrom,E=>{d.isDragging||(d.traveled=Math.ceil(E*v.value))}),It(()=>{g()}),()=>qe("div",{role:"presentation",ref:r,class:[o.b(),e.class,(e.alwaysOn||d.isDragging)&&"always-on"],style:p.value,onMousedown:Ge(x,["stop","prevent"]),onTouchstartPrevent:w},qe("div",{ref:l,class:a.e("thumb"),style:m.value,onMousedown:w},[]))}}),D8=({name:e,getOffset:t,getItemSize:n,getItemOffset:o,getEstimatedTotalSize:a,getStartIndexForOffset:r,getStopIndexForStartIndex:l,initCache:i,clearCache:u,validateProps:d})=>A({name:e??"ElVirtualList",props:V8,emits:[Wu,ju],setup(f,{emit:c,expose:p}){d(f);const h=rt(),m=me("vl"),v=R(i(f,h)),_=R8(),g=R(),w=R(),b=R(),C=R({isScrolling:!1,scrollDir:"forward",scrollOffset:Ye(f.initScrollOffset)?f.initScrollOffset:0,updateRequested:!1,isScrollbarDragging:!1,scrollbarAlwaysOn:f.scrollbarAlwaysOn}),x=S(()=>{const{total:J,cache:se}=f,{isScrolling:_e,scrollDir:Q,scrollOffset:le}=s(C);if(J===0)return[0,0,0,0];const ae=r(f,le,s(v)),Te=l(f,ae,le,s(v)),ce=!_e||Q===qu?Math.max(1,se):1,ge=!_e||Q===Qr?Math.max(1,se):1;return[Math.max(0,ae-ce),Math.max(0,Math.min(J-1,Te+ge)),ae,Te]}),E=S(()=>a(f,s(v))),O=S(()=>Ds(f.layout)),T=S(()=>[{position:"relative",[`overflow-${O.value?"x":"y"}`]:"scroll",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:f.direction,height:Ye(f.height)?`${f.height}px`:f.height,width:Ye(f.width)?`${f.width}px`:f.width},f.style]),V=S(()=>{const J=s(E),se=s(O);return{height:se?"100%":`${J}px`,pointerEvents:s(C).isScrolling?"none":void 0,width:se?`${J}px`:"100%"}}),L=S(()=>O.value?f.width:f.height),{onWheel:P}=_Z({atStartEdge:S(()=>C.value.scrollOffset<=0),atEndEdge:S(()=>C.value.scrollOffset>=E.value),layout:S(()=>f.layout)},J=>{var se,_e;(_e=(se=b.value).onMouseUp)==null||_e.call(se),I(Math.min(C.value.scrollOffset+J,E.value-L.value))}),z=()=>{const{total:J}=f;if(J>0){const[le,ae,Te,ce]=s(x);c(Wu,le,ae,Te,ce)}const{scrollDir:se,scrollOffset:_e,updateRequested:Q}=s(C);c(ju,se,_e,Q)},j=J=>{const{clientHeight:se,scrollHeight:_e,scrollTop:Q}=J.currentTarget,le=s(C);if(le.scrollOffset===Q)return;const ae=Math.max(0,Math.min(Q,_e-se));C.value={...le,isScrolling:!0,scrollDir:cr(le.scrollOffset,ae),scrollOffset:ae,updateRequested:!1},We(D)},K=J=>{const{clientWidth:se,scrollLeft:_e,scrollWidth:Q}=J.currentTarget,le=s(C);if(le.scrollOffset===_e)return;const{direction:ae}=f;let Te=_e;if(ae===ul)switch(Yu()){case Hs:{Te=-_e;break}case np:{Te=Q-se-_e;break}}Te=Math.max(0,Math.min(Te,Q-se)),C.value={...le,isScrolling:!0,scrollDir:cr(le.scrollOffset,Te),scrollOffset:Te,updateRequested:!1},We(D)},F=J=>{s(O)?K(J):j(J),z()},B=(J,se)=>{const _e=(E.value-L.value)/se*J;I(Math.min(E.value-L.value,_e))},I=J=>{J=Math.max(J,0),J!==s(C).scrollOffset&&(C.value={...s(C),scrollOffset:J,scrollDir:cr(s(C).scrollOffset,J),updateRequested:!0},We(D))},H=(J,se=to)=>{const{scrollOffset:_e}=s(C);J=Math.max(0,Math.min(J,f.total-1)),I(t(f,J,se,_e,s(v)))},N=J=>{const{direction:se,itemSize:_e,layout:Q}=f,le=_.value(u&&_e,u&&Q,u&&se);let ae;if(yt(le,String(J)))ae=le[J];else{const Te=o(f,J,s(v)),ce=n(f,J,s(v)),ge=s(O),Ae=se===ul,U=ge?Te:0;le[J]=ae={position:"absolute",left:Ae?void 0:`${U}px`,right:Ae?`${U}px`:void 0,top:ge?0:`${Te}px`,height:ge?"100%":`${ce}px`,width:ge?`${ce}px`:"100%"}}return ae},D=()=>{C.value.isScrolling=!1,We(()=>{_.value(-1,null,null)})},q=()=>{const J=g.value;J&&(J.scrollTop=0)};et(()=>{if(!gt)return;const{initScrollOffset:J}=f,se=s(g);Ye(J)&&se&&(s(O)?se.scrollLeft=J:se.scrollTop=J),z()}),ua(()=>{const{direction:J,layout:se}=f,{scrollOffset:_e,updateRequested:Q}=s(C),le=s(g);if(Q&&le)if(se===xl)if(J===ul)switch(Yu()){case Hs:{le.scrollLeft=-_e;break}case tp:{le.scrollLeft=_e;break}default:{const{clientWidth:ae,scrollWidth:Te}=le;le.scrollLeft=Te-ae-_e;break}}else le.scrollLeft=_e;else le.scrollTop=_e});const Y={ns:m,clientSize:L,estimatedTotalSize:E,windowStyle:T,windowRef:g,innerRef:w,innerStyle:V,itemsToRender:x,scrollbarRef:b,states:C,getItemStyle:N,onScroll:F,onScrollbarScroll:B,onWheel:P,scrollTo:I,scrollToItem:H,resetScrollTop:q};return p({windowRef:g,innerRef:w,getItemStyleCache:_,scrollTo:I,scrollToItem:H,resetScrollTop:q,states:C}),Y},render(f){var c;const{$slots:p,className:h,clientSize:m,containerElement:v,data:_,getItemStyle:g,innerElement:w,itemsToRender:b,innerStyle:C,layout:x,total:E,onScroll:O,onScrollbarScroll:T,onWheel:V,states:L,useIsScrolling:P,windowStyle:z,ns:j}=f,[K,F]=b,B=ut(v),I=ut(w),H=[];if(E>0)for(let Y=K;Y<=F;Y++)H.push((c=p.default)==null?void 0:c.call(p,{data:_,key:Y,index:Y,isScrolling:P?L.isScrolling:void 0,style:g(Y)}));const N=[qe(I,{style:C,ref:"innerRef"},Ze(I)?H:{default:()=>H})],D=qe(Yf,{ref:"scrollbarRef",clientSize:m,layout:x,onScroll:T,ratio:m*100/this.estimatedTotalSize,scrollFrom:L.scrollOffset/(this.estimatedTotalSize-m),total:E}),q=qe(B,{class:[j.e("window"),h],style:z,onScroll:O,onWheel:V,ref:"windowRef",key:0},Ze(B)?[N]:{default:()=>[N]});return qe("div",{key:0,class:[j.e("wrapper"),L.scrollbarAlwaysOn?"always-on":""]},[q,D])}}),F8=D8({name:"ElFixedSizeList",getItemOffset:({itemSize:e},t)=>t*e,getItemSize:({itemSize:e})=>e,getEstimatedTotalSize:({total:e,itemSize:t})=>t*e,getOffset:({height:e,total:t,itemSize:n,layout:o,width:a},r,l,i)=>{const u=Ds(o)?a:e,d=Math.max(0,t*n-u),f=Math.min(d,r*n),c=Math.max(0,(r+1)*n-u);switch(l===zc&&(i>=c-u&&i<=f+u?l=to:l=Oo),l){case Bs:return f;case zs:return c;case Oo:{const p=Math.round(c+(f-c)/2);return pd+Math.floor(u/2)?d:p}case to:default:return i>=c&&i<=f?i:iMath.max(0,Math.min(e-1,Math.floor(n/t))),getStopIndexForStartIndex:({height:e,total:t,itemSize:n,layout:o,width:a},r,l)=>{const i=r*n,u=Ds(o)?a:e,d=Math.ceil((u+l-i)/n);return Math.max(0,Math.min(t-1,r+d-1))},initCache(){},clearCache:!0,validateProps(){}}),el=(e,t,n)=>{const{itemSize:o}=e,{items:a,lastVisitedIndex:r}=n;if(t>r){let l=0;if(r>=0){const i=a[r];l=i.offset+i.size}for(let i=r+1;i<=t;i++){const u=o(i);a[i]={offset:l,size:u},l+=u}n.lastVisitedIndex=t}return a[t]},CZ=(e,t,n)=>{const{items:o,lastVisitedIndex:a}=t;return(a>0?o[a].offset:0)>=n?K8(e,t,0,a,n):SZ(e,t,Math.max(0,a),n)},K8=(e,t,n,o,a)=>{for(;n<=o;){const r=n+Math.floor((o-n)/2),l=el(e,r,t).offset;if(l===a)return r;la&&(o=r-1)}return Math.max(0,n-1)},SZ=(e,t,n,o)=>{const{total:a}=e;let r=1;for(;n{let a=0;if(o>=e&&(o=e-1),o>=0){const i=t[o];a=i.offset+i.size}const l=(e-o-1)*n;return a+l},kZ=D8({name:"ElDynamicSizeList",getItemOffset:(e,t,n)=>el(e,t,n).offset,getItemSize:(e,t,{items:n})=>n[t].size,getEstimatedTotalSize:Th,getOffset:(e,t,n,o,a)=>{const{height:r,layout:l,width:i}=e,u=Ds(l)?i:r,d=el(e,t,a),f=Th(e,a),c=Math.max(0,Math.min(f-u,d.offset)),p=Math.max(0,d.offset-u+d.size);switch(n===zc&&(o>=p-u&&o<=c+u?n=to:n=Oo),n){case Bs:return c;case zs:return p;case Oo:return Math.round(p+(c-p)/2);case to:default:return o>=p&&o<=c?o:oCZ(e,n,t),getStopIndexForStartIndex:(e,t,n,o)=>{const{height:a,total:r,layout:l,width:i}=e,u=Ds(l)?i:a,d=el(e,t,o),f=n+u;let c=d.offset+d.size,p=t;for(;p{var r,l;n.lastVisitedIndex=Math.min(n.lastVisitedIndex,o-1),(r=t.exposed)==null||r.getItemStyleCache(-1),a&&((l=t.proxy)==null||l.$forceUpdate())},n},clearCache:!1,validateProps:({itemSize:e})=>{}}),EZ=({atXEndEdge:e,atXStartEdge:t,atYEndEdge:n,atYStartEdge:o},a)=>{let r=null,l=0,i=0;const u=(f,c)=>{const p=f<=0&&t.value||f>=0&&e.value,h=c<=0&&o.value||c>=0&&n.value;return p&&h};return{hasReachedEdge:u,onWheel:f=>{xr(r);let c=f.deltaX,p=f.deltaY;Math.abs(c)>Math.abs(p)?p=0:c=0,f.shiftKey&&p!==0&&(c=p,p=0),!(u(l,i)&&u(l+c,i+p))&&(l+=c,i+=p,f.preventDefault(),r=Fa(()=>{a(l,i),l=0,i=0}))}}},W8=({name:e,clearCache:t,getColumnPosition:n,getColumnStartIndexForOffset:o,getColumnStopIndexForStartIndex:a,getEstimatedTotalHeight:r,getEstimatedTotalWidth:l,getColumnOffset:i,getRowOffset:u,getRowPosition:d,getRowStartIndexForOffset:f,getRowStopIndexForStartIndex:c,initCache:p,injectToInstance:h,validateProps:m})=>A({name:e??"ElVirtualList",props:br,emits:[Wu,ju],setup(v,{emit:_,expose:g,slots:w}){const b=me("vl");m(v);const C=rt(),x=R(p(v,C));h==null||h(C,x);const E=R(),O=R(),T=R(),V=R(null),L=R({isScrolling:!1,scrollLeft:Ye(v.initScrollLeft)?v.initScrollLeft:0,scrollTop:Ye(v.initScrollTop)?v.initScrollTop:0,updateRequested:!1,xAxisScrollDir:Qr,yAxisScrollDir:Qr}),P=R8(),z=S(()=>Number.parseInt(`${v.height}`,10)),j=S(()=>Number.parseInt(`${v.width}`,10)),K=S(()=>{const{totalColumn:ue,totalRow:ye,columnCache:we}=v,{isScrolling:Ce,xAxisScrollDir:he,scrollLeft:Se}=s(L);if(ue===0||ye===0)return[0,0,0,0];const Re=o(v,Se,s(x)),He=a(v,Re,Se,s(x)),de=!Ce||he===qu?Math.max(1,we):1,Le=!Ce||he===Qr?Math.max(1,we):1;return[Math.max(0,Re-de),Math.max(0,Math.min(ue-1,He+Le)),Re,He]}),F=S(()=>{const{totalColumn:ue,totalRow:ye,rowCache:we}=v,{isScrolling:Ce,yAxisScrollDir:he,scrollTop:Se}=s(L);if(ue===0||ye===0)return[0,0,0,0];const Re=f(v,Se,s(x)),He=c(v,Re,Se,s(x)),de=!Ce||he===qu?Math.max(1,we):1,Le=!Ce||he===Qr?Math.max(1,we):1;return[Math.max(0,Re-de),Math.max(0,Math.min(ye-1,He+Le)),Re,He]}),B=S(()=>r(v,s(x))),I=S(()=>l(v,s(x))),H=S(()=>{var ue;return[{position:"relative",overflow:"hidden",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:v.direction,height:Ye(v.height)?`${v.height}px`:v.height,width:Ye(v.width)?`${v.width}px`:v.width},(ue=v.style)!=null?ue:{}]}),N=S(()=>{const ue=`${s(I)}px`;return{height:`${s(B)}px`,pointerEvents:s(L).isScrolling?"none":void 0,width:ue}}),D=()=>{const{totalColumn:ue,totalRow:ye}=v;if(ue>0&&ye>0){const[He,de,Le,Ue]=s(K),[ot,dt,je,fe]=s(F);_(Wu,{columnCacheStart:He,columnCacheEnd:de,rowCacheStart:ot,rowCacheEnd:dt,columnVisibleStart:Le,columnVisibleEnd:Ue,rowVisibleStart:je,rowVisibleEnd:fe})}const{scrollLeft:we,scrollTop:Ce,updateRequested:he,xAxisScrollDir:Se,yAxisScrollDir:Re}=s(L);_(ju,{xAxisScrollDir:Se,scrollLeft:we,yAxisScrollDir:Re,scrollTop:Ce,updateRequested:he})},q=ue=>{const{clientHeight:ye,clientWidth:we,scrollHeight:Ce,scrollLeft:he,scrollTop:Se,scrollWidth:Re}=ue.currentTarget,He=s(L);if(He.scrollTop===Se&&He.scrollLeft===he)return;let de=he;if($h(v.direction))switch(Yu()){case Hs:de=-he;break;case np:de=Re-we-he;break}L.value={...He,isScrolling:!0,scrollLeft:de,scrollTop:Math.max(0,Math.min(Se,Ce-ye)),updateRequested:!0,xAxisScrollDir:cr(He.scrollLeft,de),yAxisScrollDir:cr(He.scrollTop,Se)},We(()=>ae()),Te(),D()},Y=(ue,ye)=>{const we=s(z),Ce=(B.value-we)/ye*ue;_e({scrollTop:Math.min(B.value-we,Ce)})},J=(ue,ye)=>{const we=s(j),Ce=(I.value-we)/ye*ue;_e({scrollLeft:Math.min(I.value-we,Ce)})},{onWheel:se}=EZ({atXStartEdge:S(()=>L.value.scrollLeft<=0),atXEndEdge:S(()=>L.value.scrollLeft>=I.value-s(j)),atYStartEdge:S(()=>L.value.scrollTop<=0),atYEndEdge:S(()=>L.value.scrollTop>=B.value-s(z))},(ue,ye)=>{var we,Ce,he,Se;(Ce=(we=O.value)==null?void 0:we.onMouseUp)==null||Ce.call(we),(Se=(he=T.value)==null?void 0:he.onMouseUp)==null||Se.call(he);const Re=s(j),He=s(z);_e({scrollLeft:Math.min(L.value.scrollLeft+ue,I.value-Re),scrollTop:Math.min(L.value.scrollTop+ye,B.value-He)})}),_e=({scrollLeft:ue=L.value.scrollLeft,scrollTop:ye=L.value.scrollTop})=>{ue=Math.max(ue,0),ye=Math.max(ye,0);const we=s(L);ye===we.scrollTop&&ue===we.scrollLeft||(L.value={...we,xAxisScrollDir:cr(we.scrollLeft,ue),yAxisScrollDir:cr(we.scrollTop,ye),scrollLeft:ue,scrollTop:ye,updateRequested:!0},We(()=>ae()),Te(),D())},Q=(ue=0,ye=0,we=to)=>{const Ce=s(L);ye=Math.max(0,Math.min(ye,v.totalColumn-1)),ue=Math.max(0,Math.min(ue,v.totalRow-1));const he=Tg(b.namespace.value),Se=s(x),Re=r(v,Se),He=l(v,Se);_e({scrollLeft:i(v,ye,we,Ce.scrollLeft,Se,He>v.width?he:0),scrollTop:u(v,ue,we,Ce.scrollTop,Se,Re>v.height?he:0)})},le=(ue,ye)=>{const{columnWidth:we,direction:Ce,rowHeight:he}=v,Se=P.value(t&&we,t&&he,t&&Ce),Re=`${ue},${ye}`;if(yt(Se,Re))return Se[Re];{const[,He]=n(v,ye,s(x)),de=s(x),Le=$h(Ce),[Ue,ot]=d(v,ue,de),[dt]=n(v,ye,de);return Se[Re]={position:"absolute",left:Le?void 0:`${He}px`,right:Le?`${He}px`:void 0,top:`${ot}px`,height:`${Ue}px`,width:`${dt}px`},Se[Re]}},ae=()=>{L.value.isScrolling=!1,We(()=>{P.value(-1,null,null)})};et(()=>{if(!gt)return;const{initScrollLeft:ue,initScrollTop:ye}=v,we=s(E);we&&(Ye(ue)&&(we.scrollLeft=ue),Ye(ye)&&(we.scrollTop=ye)),D()});const Te=()=>{const{direction:ue}=v,{scrollLeft:ye,scrollTop:we,updateRequested:Ce}=s(L),he=s(E);if(Ce&&he){if(ue===ul)switch(Yu()){case Hs:{he.scrollLeft=-ye;break}case tp:{he.scrollLeft=ye;break}default:{const{clientWidth:Se,scrollWidth:Re}=he;he.scrollLeft=Re-Se-ye;break}}else he.scrollLeft=Math.max(0,ye);he.scrollTop=Math.max(0,we)}},{resetAfterColumnIndex:ce,resetAfterRowIndex:ge,resetAfter:Ae}=C.proxy;g({windowRef:E,innerRef:V,getItemStyleCache:P,scrollTo:_e,scrollToItem:Q,states:L,resetAfterColumnIndex:ce,resetAfterRowIndex:ge,resetAfter:Ae});const U=()=>{const{scrollbarAlwaysOn:ue,scrollbarStartGap:ye,scrollbarEndGap:we,totalColumn:Ce,totalRow:he}=v,Se=s(j),Re=s(z),He=s(I),de=s(B),{scrollLeft:Le,scrollTop:Ue}=s(L),ot=qe(Yf,{ref:O,alwaysOn:ue,startGap:ye,endGap:we,class:b.e("horizontal"),clientSize:Se,layout:"horizontal",onScroll:J,ratio:Se*100/He,scrollFrom:Le/(He-Se),total:he,visible:!0}),dt=qe(Yf,{ref:T,alwaysOn:ue,startGap:ye,endGap:we,class:b.e("vertical"),clientSize:Re,layout:"vertical",onScroll:Y,ratio:Re*100/de,scrollFrom:Ue/(de-Re),total:Ce,visible:!0});return{horizontalScrollbar:ot,verticalScrollbar:dt}},te=()=>{var ue;const[ye,we]=s(K),[Ce,he]=s(F),{data:Se,totalColumn:Re,totalRow:He,useIsScrolling:de,itemKey:Le}=v,Ue=[];if(He>0&&Re>0)for(let ot=Ce;ot<=he;ot++)for(let dt=ye;dt<=we;dt++)Ue.push((ue=w.default)==null?void 0:ue.call(w,{columnIndex:dt,data:Se,key:Le({columnIndex:dt,data:Se,rowIndex:ot}),isScrolling:de?s(L).isScrolling:void 0,style:le(ot,dt),rowIndex:ot}));return Ue},ve=()=>{const ue=ut(v.innerElement),ye=te();return[qe(ue,{style:s(N),ref:V},Ze(ue)?ye:{default:()=>ye})]};return()=>{const ue=ut(v.containerElement),{horizontalScrollbar:ye,verticalScrollbar:we}=U(),Ce=ve();return qe("div",{key:0,class:b.e("wrapper"),role:v.role},[qe(ue,{class:v.className,style:s(H),onScroll:q,onWheel:se,ref:E},Ze(ue)?Ce:{default:()=>Ce}),ye,we])}}}),xZ=W8({name:"ElFixedSizeGrid",getColumnPosition:({columnWidth:e},t)=>[e,t*e],getRowPosition:({rowHeight:e},t)=>[e,t*e],getEstimatedTotalHeight:({totalRow:e,rowHeight:t})=>t*e,getEstimatedTotalWidth:({totalColumn:e,columnWidth:t})=>t*e,getColumnOffset:({totalColumn:e,columnWidth:t,width:n},o,a,r,l,i)=>{n=Number(n);const u=Math.max(0,e*t-n),d=Math.min(u,o*t),f=Math.max(0,o*t-n+i+t);switch(a==="smart"&&(r>=f-n&&r<=d+n?a=to:a=Oo),a){case Bs:return d;case zs:return f;case Oo:{const c=Math.round(f+(d-f)/2);return cu+Math.floor(n/2)?u:c}case to:default:return r>=f&&r<=d?r:f>d||r{t=Number(t);const u=Math.max(0,n*e-t),d=Math.min(u,o*e),f=Math.max(0,o*e-t+i+e);switch(a===zc&&(r>=f-t&&r<=d+t?a=to:a=Oo),a){case Bs:return d;case zs:return f;case Oo:{const c=Math.round(f+(d-f)/2);return cu+Math.floor(t/2)?u:c}case to:default:return r>=f&&r<=d?r:f>d||rMath.max(0,Math.min(t-1,Math.floor(n/e))),getColumnStopIndexForStartIndex:({columnWidth:e,totalColumn:t,width:n},o,a)=>{const r=o*e,l=Math.ceil((n+a-r)/e);return Math.max(0,Math.min(t-1,o+l-1))},getRowStartIndexForOffset:({rowHeight:e,totalRow:t},n)=>Math.max(0,Math.min(t-1,Math.floor(n/e))),getRowStopIndexForStartIndex:({rowHeight:e,totalRow:t,height:n},o,a)=>{const r=o*e,l=Math.ceil((n+a-r)/e);return Math.max(0,Math.min(t-1,o+l-1))},initCache:()=>{},clearCache:!0,validateProps:({columnWidth:e,rowHeight:t})=>{}}),{max:Gu,min:j8,floor:q8}=Math,MZ={column:"columnWidth",row:"rowHeight"},Gf={column:"lastVisitedColumnIndex",row:"lastVisitedRowIndex"},Go=(e,t,n,o)=>{const[a,r,l]=[n[o],e[MZ[o]],n[Gf[o]]];if(t>l){let i=0;if(l>=0){const u=a[l];i=u.offset+u.size}for(let u=l+1;u<=t;u++){const d=r(u);a[u]={offset:i,size:d},i+=d}n[Gf[o]]=t}return a[t]},U8=(e,t,n,o,a,r)=>{for(;n<=o;){const l=n+q8((o-n)/2),i=Go(e,l,t,r).offset;if(i===a)return l;i{const r=a==="column"?e.totalColumn:e.totalRow;let l=1;for(;n{const[a,r]=[t[o],t[Gf[o]]];return(r>0?a[r].offset:0)>=n?U8(e,t,0,r,n,o):$Z(e,t,Gu(0,r),n,o)},Y8=({totalRow:e},{estimatedRowHeight:t,lastVisitedRowIndex:n,row:o})=>{let a=0;if(n>=e&&(n=e-1),n>=0){const i=o[n];a=i.offset+i.size}const l=(e-n-1)*t;return a+l},G8=({totalColumn:e},{column:t,estimatedColumnWidth:n,lastVisitedColumnIndex:o})=>{let a=0;if(o>e&&(o=e-1),o>=0){const i=t[o];a=i.offset+i.size}const l=(e-o-1)*n;return a+l},TZ={column:G8,row:Y8},Oh=(e,t,n,o,a,r,l)=>{const[i,u]=[r==="row"?e.height:e.width,TZ[r]],d=Go(e,t,a,r),f=u(e,a),c=Gu(0,j8(f-i,d.offset)),p=Gu(0,d.offset-i+l+d.size);switch(n===zc&&(o>=p-i&&o<=c+i?n=to:n=Oo),n){case Bs:return c;case zs:return p;case Oo:return Math.round(p+(c-p)/2);case to:default:return o>=p&&o<=c?o:p>c||o{const o=Go(e,t,n,"column");return[o.size,o.offset]},getRowPosition:(e,t,n)=>{const o=Go(e,t,n,"row");return[o.size,o.offset]},getColumnOffset:(e,t,n,o,a,r)=>Oh(e,t,n,o,a,"column",r),getRowOffset:(e,t,n,o,a,r)=>Oh(e,t,n,o,a,"row",r),getColumnStartIndexForOffset:(e,t,n)=>Ah(e,n,t,"column"),getColumnStopIndexForStartIndex:(e,t,n,o)=>{const a=Go(e,t,o,"column"),r=n+e.width;let l=a.offset+a.size,i=t;for(;iAh(e,n,t,"row"),getRowStopIndexForStartIndex:(e,t,n,o)=>{const{totalRow:a,height:r}=e,l=Go(e,t,o,"row"),i=n+r;let u=l.size+l.offset,d=t;for(;d{const n=({columnIndex:r,rowIndex:l},i)=>{var u,d;i=Zt(i)?!0:i,Ye(r)&&(t.value.lastVisitedColumnIndex=Math.min(t.value.lastVisitedColumnIndex,r-1)),Ye(l)&&(t.value.lastVisitedRowIndex=Math.min(t.value.lastVisitedRowIndex,l-1)),(u=e.exposed)==null||u.getItemStyleCache.value(-1,null,null),i&&((d=e.proxy)==null||d.$forceUpdate())},o=(r,l)=>{n({columnIndex:r},l)},a=(r,l)=>{n({rowIndex:r},l)};Object.assign(e.proxy,{resetAfterColumnIndex:o,resetAfterRowIndex:a,resetAfter:n})},initCache:({estimatedColumnWidth:e=Ff,estimatedRowHeight:t=Ff})=>({column:{},estimatedColumnWidth:e,estimatedRowHeight:t,lastVisitedColumnIndex:-1,lastVisitedRowIndex:-1,row:{}}),clearCache:!1,validateProps:({columnWidth:e,rowHeight:t})=>{}}),OZ=A({props:{item:{type:Object,required:!0},style:Object,height:Number},setup(){return{ns:me("select")}}});function NZ(e,t,n,o,a,r){return e.item.isTitle?(y(),M("div",{key:0,class:$(e.ns.be("group","title")),style:De([e.style,{lineHeight:`${e.height}px`}])},Me(e.item.label),7)):(y(),M("div",{key:1,class:$(e.ns.be("group","split")),style:De(e.style)},[k("span",{class:$(e.ns.be("group","split-dash")),style:De({top:`${e.height/2}px`})},null,6)],6))}var IZ=xe(OZ,[["render",NZ],["__file","group-item.vue"]]);function RZ(e,{emit:t}){return{hoverItem:()=>{e.disabled||t("hover",e.index)},selectOptionClick:()=>{e.disabled||t("select",e.item,e.index)}}}const X8={label:"label",value:"value",disabled:"disabled",options:"options"};function Hc(e){const t=S(()=>({...X8,...e.props}));return{aliasProps:t,getLabel:l=>Gt(l,t.value.label),getValue:l=>Gt(l,t.value.value),getDisabled:l=>Gt(l,t.value.disabled),getOptions:l=>Gt(l,t.value.options)}}const PZ=Ee({allowCreate:Boolean,autocomplete:{type:X(String),default:"none"},automaticDropdown:Boolean,clearable:Boolean,clearIcon:{type:$t,default:fa},effect:{type:X(String),default:"light"},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},defaultFirstOption:Boolean,disabled:Boolean,estimatedOptionHeight:{type:Number,default:void 0},filterable:Boolean,filterMethod:Function,height:{type:Number,default:274},itemHeight:{type:Number,default:34},id:String,loading:Boolean,loadingText:String,modelValue:{type:X([Array,String,Number,Boolean,Object])},multiple:Boolean,multipleLimit:{type:Number,default:0},name:String,noDataText:String,noMatchText:String,remoteMethod:Function,reserveKeyword:{type:Boolean,default:!0},options:{type:X(Array),required:!0},placeholder:{type:String},teleported:pn.teleported,persistent:{type:Boolean,default:!0},popperClass:{type:String,default:""},popperOptions:{type:X(Object),default:()=>({})},remote:Boolean,size:cn,props:{type:X(Object),default:()=>X8},valueKey:{type:String,default:"value"},scrollbarAlwaysOn:Boolean,validateEvent:{type:Boolean,default:!0},placement:{type:X(String),values:Hr,default:"bottom-start"},fallbackPlacements:{type:X(Array),default:["bottom-start","top-start","right","left"]},tagType:{...Lc.type,default:"info"},ariaLabel:{type:String,default:void 0}}),LZ=Ee({data:Array,disabled:Boolean,hovering:Boolean,item:{type:X(Object),required:!0},index:Number,style:Object,selected:Boolean,created:Boolean}),op=Symbol("ElSelectV2Injection"),VZ=A({props:LZ,emits:["select","hover"],setup(e,{emit:t}){const n=Pe(op),o=me("select"),{hoverItem:a,selectOptionClick:r}=RZ(e,{emit:t}),{getLabel:l}=Hc(n.props);return{ns:o,hoverItem:a,selectOptionClick:r,getLabel:l}}}),BZ=["aria-selected"];function zZ(e,t,n,o,a,r){return y(),M("li",{"aria-selected":e.selected,style:De(e.style),class:$([e.ns.be("dropdown","item"),e.ns.is("selected",e.selected),e.ns.is("disabled",e.disabled),e.ns.is("created",e.created),e.ns.is("hovering",e.hovering)]),onMouseenter:t[0]||(t[0]=(...l)=>e.hoverItem&&e.hoverItem(...l)),onClick:t[1]||(t[1]=Ge((...l)=>e.selectOptionClick&&e.selectOptionClick(...l),["stop"]))},[re(e.$slots,"default",{item:e.item,index:e.index,disabled:e.disabled},()=>[k("span",null,Me(e.getLabel(e.item)),1)])],46,BZ)}var HZ=xe(VZ,[["render",zZ],["__file","option-item.vue"]]),DZ=A({name:"ElSelectDropdown",props:{loading:Boolean,data:{type:Array,required:!0},hoveringIndex:Number,width:Number},setup(e,{slots:t,expose:n}){const o=Pe(op),a=me("select"),{getLabel:r,getValue:l,getDisabled:i}=Hc(o.props),u=R([]),d=R(),f=S(()=>e.data.length);pe(()=>f.value,()=>{var P,z;(z=(P=o.tooltipRef.value).updatePopper)==null||z.call(P)});const c=S(()=>Zt(o.props.estimatedOptionHeight)),p=S(()=>c.value?{itemSize:o.props.itemHeight}:{estimatedSize:o.props.estimatedOptionHeight,itemSize:P=>u.value[P]}),h=(P=[],z)=>{const{props:{valueKey:j}}=o;return ct(z)?P&&P.some(K=>xt(Gt(K,j))===Gt(z,j)):P.includes(z)},m=(P,z)=>{if(ct(z)){const{valueKey:j}=o.props;return Gt(P,j)===Gt(z,j)}else return P===z},v=(P,z)=>o.props.multiple?h(P,l(z)):m(P,l(z)),_=(P,z)=>{const{disabled:j,multiple:K,multipleLimit:F}=o.props;return j||!z&&(K?F>0&&P.length>=F:!1)},g=P=>e.hoveringIndex===P;n({listRef:d,isSized:c,isItemDisabled:_,isItemHovering:g,isItemSelected:v,scrollToItem:P=>{const z=d.value;z&&z.scrollToItem(P)},resetScrollTop:()=>{const P=d.value;P&&P.resetScrollTop()}});const C=P=>{const{index:z,data:j,style:K}=P,F=s(c),{itemSize:B,estimatedSize:I}=s(p),{modelValue:H}=o.props,{onSelect:N,onHover:D}=o,q=j[z];if(q.type==="Group")return W(IZ,{item:q,style:K,height:F?B:I},null);const Y=v(H,q),J=_(H,Y),se=g(z);return W(HZ,ft(P,{selected:Y,disabled:i(q)||J,created:!!q.created,hovering:se,item:q,onSelect:N,onHover:D}),{default:_e=>{var Q;return((Q=t.default)==null?void 0:Q.call(t,_e))||W("span",null,[r(q)])}})},{onKeyboardNavigate:x,onKeyboardSelect:E}=o,O=()=>{x("forward")},T=()=>{x("backward")},V=()=>{o.expanded=!1},L=P=>{const{code:z}=P,{tab:j,esc:K,down:F,up:B,enter:I}=Ke;switch(z!==j&&(P.preventDefault(),P.stopPropagation()),z){case j:case K:{V();break}case F:{O();break}case B:{T();break}case I:{E();break}}};return()=>{var P,z,j,K;const{data:F,width:B}=e,{height:I,multiple:H,scrollbarAlwaysOn:N}=o.props,D=s(c)?F8:kZ;return W("div",{class:[a.b("dropdown"),a.is("multiple",H)],style:{width:`${B}px`}},[(P=t.header)==null?void 0:P.call(t),((z=t.loading)==null?void 0:z.call(t))||((j=t.empty)==null?void 0:j.call(t))||W(D,ft({ref:d},s(p),{className:a.be("dropdown","list"),scrollbarAlwaysOn:N,data:F,height:I,width:B,total:F.length,onKeydown:L}),{default:q=>W(C,q,null)}),(K=t.footer)==null?void 0:K.call(t)])}}});function FZ(e,t){const{aliasProps:n,getLabel:o,getValue:a}=Hc(e),r=R(0),l=R(null),i=S(()=>e.allowCreate&&e.filterable);function u(h){const m=v=>a(v)===h;return e.options&&e.options.some(m)||t.createdOptions.some(m)}function d(h){i.value&&(e.multiple&&h.created?r.value++:l.value=h)}function f(h){if(i.value)if(h&&h.length>0){if(u(h))return;const m={[n.value.value]:h,[n.value.label]:h,created:!0,[n.value.disabled]:!1};t.createdOptions.length>=r.value?t.createdOptions[r.value]=m:t.createdOptions.push(m)}else if(e.multiple)t.createdOptions.length=r.value;else{const m=l.value;t.createdOptions.length=0,m&&m.created&&t.createdOptions.push(m)}}function c(h){if(!i.value||!h||!h.created||h.created&&e.reserveKeyword&&t.inputValue===o(h))return;const m=t.createdOptions.findIndex(v=>a(v)===a(h));~m&&(t.createdOptions.splice(m,1),r.value--)}function p(){i.value&&(t.createdOptions.length=0,r.value=0)}return{createNewOption:f,removeNewOption:c,selectNewOption:d,clearAllNewOption:p}}const KZ=11,WZ=(e,t)=>{const{t:n}=_t(),o=me("select"),a=me("input"),{form:r,formItem:l}=Nn(),{inputId:i}=Ho(e,{formItemContext:l}),{getLabel:u,getValue:d,getDisabled:f,getOptions:c}=Hc(e),p=wt({inputValue:"",cachedOptions:[],createdOptions:[],hoveringIndex:-1,inputHovering:!1,selectionWidth:0,calculatorWidth:0,collapseItemWidth:0,previousQuery:null,previousValue:void 0,selectedLabel:"",menuVisibleOnFocus:!1,isBeforeHide:!1}),h=R(-1),m=R(-1),v=R(null),_=R(null),g=R(null),w=R(null),b=R(null),C=R(null),x=R(null),E=R(null),O=R(null),T=R(null),V=R(null),{wrapperRef:L,isFocused:P,handleFocus:z,handleBlur:j}=Oc(b,{afterFocus(){e.automaticDropdown&&!B.value&&(B.value=!0,p.menuVisibleOnFocus=!0)},beforeBlur(Oe){var st,ht;return((st=g.value)==null?void 0:st.isFocusInsideContent(Oe))||((ht=w.value)==null?void 0:ht.isFocusInsideContent(Oe))},afterBlur(){B.value=!1,p.menuVisibleOnFocus=!1}}),K=R([]),F=R([]),B=R(!1),I=S(()=>e.disabled||(r==null?void 0:r.disabled)),H=S(()=>{const Oe=F.value.length*e.itemHeight;return Oe>e.height?e.height:Oe}),N=S(()=>K.value.some(Oe=>d(Oe)==="")),D=S(()=>e.multiple?Ie(e.modelValue)&&e.modelValue.length>0:!tn(e.modelValue)&&(e.modelValue!==""||N.value)),q=S(()=>e.clearable&&!I.value&&p.inputHovering&&D.value),Y=S(()=>e.remote&&e.filterable?"":Bo),J=S(()=>Y.value&&o.is("reverse",B.value)),se=S(()=>(l==null?void 0:l.validateState)||""),_e=S(()=>f2[se.value]),Q=S(()=>e.remote?300:0),le=S(()=>e.loading?e.loadingText||n("el.select.loading"):e.remote&&!p.inputValue&&K.value.length===0?!1:e.filterable&&p.inputValue&&K.value.length>0&&F.value.length===0?e.noMatchText||n("el.select.noMatch"):K.value.length===0?e.noDataText||n("el.select.noData"):null),ae=Oe=>{const st=ht=>{if(e.filterable&&Xe(e.filterMethod)||e.filterable&&e.remote&&Xe(e.remoteMethod))return!0;const Ct=new RegExp(o2(Oe),"i");return Oe?Ct.test(u(ht)||""):!0};return e.loading?[]:[...p.createdOptions,...e.options].reduce((ht,Ct)=>{const xo=c(Ct);if(Ie(xo)){const qo=xo.filter(st);qo.length>0&&ht.push({label:u(Ct),isTitle:!0,type:"Group"},...qo,{type:"Group"})}else(e.remote||st(Ct))&&ht.push(Ct);return ht},[])},Te=()=>{K.value=ae(""),F.value=ae(p.inputValue)},ce=S(()=>{const Oe=new Map;return K.value.forEach((st,ht)=>{Oe.set(qt(d(st)),{option:st,index:ht})}),Oe}),ge=S(()=>{const Oe=new Map;return F.value.forEach((st,ht)=>{Oe.set(qt(d(st)),{option:st,index:ht})}),Oe}),Ae=S(()=>F.value.every(Oe=>f(Oe))),U=an(),te=S(()=>U.value==="small"?"small":"default"),ve=()=>{var Oe;m.value=((Oe=v.value)==null?void 0:Oe.offsetWidth)||200},be=()=>{if(!_.value)return 0;const Oe=window.getComputedStyle(_.value);return Number.parseFloat(Oe.gap||"6px")},ue=S(()=>{const Oe=be();return{maxWidth:`${V.value&&e.maxCollapseTags===1?p.selectionWidth-p.collapseItemWidth-Oe:p.selectionWidth}px`}}),ye=S(()=>({maxWidth:`${p.selectionWidth}px`})),we=S(()=>({width:`${Math.max(p.calculatorWidth,KZ)}px`})),Ce=S(()=>Ie(e.modelValue)?e.modelValue.length===0&&!p.inputValue:e.filterable?!p.inputValue:!0),he=S(()=>{var Oe;const st=(Oe=e.placeholder)!=null?Oe:n("el.select.placeholder");return e.multiple||!D.value?st:p.selectedLabel}),Se=S(()=>{var Oe,st;return(st=(Oe=g.value)==null?void 0:Oe.popperRef)==null?void 0:st.contentRef}),Re=S(()=>{if(e.multiple){const Oe=e.modelValue.length;if(e.modelValue.length>0&&ge.value.has(e.modelValue[Oe-1])){const{index:st}=ge.value.get(e.modelValue[Oe-1]);return st}}else if(e.modelValue&&ge.value.has(e.modelValue)){const{index:Oe}=ge.value.get(e.modelValue);return Oe}return-1}),He=S({get(){return B.value&&le.value!==!1},set(Oe){B.value=Oe}}),de=S(()=>e.multiple?e.collapseTags?p.cachedOptions.slice(0,e.maxCollapseTags):p.cachedOptions:[]),Le=S(()=>e.multiple?e.collapseTags?p.cachedOptions.slice(e.maxCollapseTags):[]:[]),{createNewOption:Ue,removeNewOption:ot,selectNewOption:dt,clearAllNewOption:je}=FZ(e,p),{handleCompositionStart:fe,handleCompositionUpdate:$e,handleCompositionEnd:ee}=A8(Oe=>Wo(Oe)),ie=()=>{I.value||(p.menuVisibleOnFocus?p.menuVisibleOnFocus=!1:B.value=!B.value)},ke=()=>{p.inputValue.length>0&&!B.value&&(B.value=!0),Ue(p.inputValue),ze(p.inputValue)},ne=Hn(ke,Q.value),ze=Oe=>{p.previousQuery!==Oe&&(p.previousQuery=Oe,e.filterable&&Xe(e.filterMethod)?e.filterMethod(Oe):e.filterable&&e.remote&&Xe(e.remoteMethod)&&e.remoteMethod(Oe),e.defaultFirstOption&&(e.filterable||e.remote)&&F.value.length?We(tt):We(Eo))},tt=()=>{const Oe=F.value.filter(Ct=>!Ct.disabled&&Ct.type!=="Group"),st=Oe.find(Ct=>Ct.created),ht=Oe[0];p.hoveringIndex=ho(F.value,st||ht)},St=Oe=>{wn(e.modelValue,Oe)||t(Bt,Oe)},Ot=Oe=>{t(it,Oe),St(Oe),p.previousValue=String(Oe)},ho=(Oe=[],st)=>{if(!ct(st))return Oe.indexOf(st);const ht=e.valueKey;let Ct=-1;return Oe.some((xo,qo)=>Gt(xo,ht)===Gt(st,ht)?(Ct=qo,!0):!1),Ct},qt=Oe=>ct(Oe)?Gt(Oe,e.valueKey):Oe,kt=()=>{ve()},Ft=()=>{p.selectionWidth=_.value.getBoundingClientRect().width},Fn=()=>{p.calculatorWidth=C.value.getBoundingClientRect().width},Gc=()=>{p.collapseItemWidth=V.value.getBoundingClientRect().width},Ko=()=>{var Oe,st;(st=(Oe=g.value)==null?void 0:Oe.updatePopper)==null||st.call(Oe)},vi=()=>{var Oe,st;(st=(Oe=w.value)==null?void 0:Oe.updatePopper)==null||st.call(Oe)},hi=(Oe,st)=>{if(e.multiple){let ht=e.modelValue.slice();const Ct=ho(ht,d(Oe));Ct>-1?(ht=[...ht.slice(0,Ct),...ht.slice(Ct+1)],p.cachedOptions.splice(Ct,1),ot(Oe)):(e.multipleLimit<=0||ht.length{let ht=e.modelValue.slice();const Ct=ho(ht,d(st));Ct>-1&&!I.value&&(ht=[...e.modelValue.slice(0,Ct),...e.modelValue.slice(Ct+1)],p.cachedOptions.splice(Ct,1),Ot(ht),t("remove-tag",d(st)),ot(st)),Oe.stopPropagation(),Ga()},Ga=()=>{var Oe;(Oe=b.value)==null||Oe.focus()},Jc=()=>{var Oe;(Oe=b.value)==null||Oe.blur()},Zc=()=>{p.inputValue.length>0?p.inputValue="":B.value=!1},Qc=Oe=>Eg(Oe,st=>!p.cachedOptions.some(ht=>d(ht)===st&&f(ht))),ed=Oe=>{if(e.multiple&&Oe.code!==Ke.delete&&p.inputValue.length===0){Oe.preventDefault();const st=e.modelValue.slice(),ht=Qc(st);if(ht<0)return;st.splice(ht,1);const Ct=p.cachedOptions[ht];p.cachedOptions.splice(ht,1),ot(Ct),Ot(st)}},Ne=()=>{let Oe;Ie(e.modelValue)?Oe=[]:Oe=void 0,e.multiple?p.cachedOptions=[]:p.selectedLabel="",B.value=!1,Ot(Oe),t("clear"),je(),Ga()},Je=(Oe,st=void 0)=>{const ht=F.value;if(!["forward","backward"].includes(Oe)||I.value||ht.length<=0||Ae.value)return;if(!B.value)return ie();st===void 0&&(st=p.hoveringIndex);let Ct=-1;Oe==="forward"?(Ct=st+1,Ct>=ht.length&&(Ct=0)):Oe==="backward"&&(Ct=st-1,(Ct<0||Ct>=ht.length)&&(Ct=ht.length-1));const xo=ht[Ct];if(f(xo)||xo.type==="Group")return Je(Oe,Ct);p.hoveringIndex=Ct,In(Ct)},Lt=()=>{if(B.value)~p.hoveringIndex&&F.value[p.hoveringIndex]&&hi(F.value[p.hoveringIndex],p.hoveringIndex);else return ie()},Jt=Oe=>{p.hoveringIndex=Oe},Eo=()=>{e.multiple?p.hoveringIndex=F.value.findIndex(Oe=>e.modelValue.some(st=>qt(st)===qt(Oe))):p.hoveringIndex=F.value.findIndex(Oe=>qt(Oe)===qt(e.modelValue))},Wo=Oe=>{if(p.inputValue=Oe.target.value,e.remote)ne();else return ke()},Fr=Oe=>{if(B.value=!1,P.value){const st=new FocusEvent("focus",Oe);j(st)}},jo=()=>We(()=>{~Re.value&&In(p.hoveringIndex)}),In=Oe=>{O.value.scrollToItem(Oe)},mi=Oe=>{const st=qt(Oe);if(ce.value.has(st)){const{option:ht}=ce.value.get(st);return ht}return{value:Oe,label:Oe}},td=()=>{if(e.multiple)if(e.modelValue.length>0){p.cachedOptions.length=0,p.previousValue=e.modelValue.toString();for(const Oe of e.modelValue){const st=mi(Oe);p.cachedOptions.push(st)}}else p.cachedOptions=[],p.previousValue=void 0;else if(D.value){p.previousValue=e.modelValue;const Oe=F.value,st=Oe.findIndex(ht=>qt(d(ht))===qt(e.modelValue));~st?p.selectedLabel=u(Oe[st]):p.selectedLabel=qt(e.modelValue)}else p.selectedLabel="",p.previousValue=void 0;je(),ve()};return pe(B,Oe=>{Oe?ze(""):(p.inputValue="",p.previousQuery=null,p.isBeforeHide=!0,Ue("")),t("visible-change",Oe)}),pe(()=>e.modelValue,(Oe,st)=>{var ht;(!Oe||Oe.toString()!==p.previousValue)&&td(),!wn(Oe,st)&&e.validateEvent&&((ht=l==null?void 0:l.validate)==null||ht.call(l,"change").catch(Ct=>void 0))},{deep:!0}),pe(()=>e.options,()=>{const Oe=b.value;(!Oe||Oe&&document.activeElement!==Oe)&&td()},{deep:!0,flush:"post"}),pe(()=>F.value,()=>O.value&&We(O.value.resetScrollTop)),gn(()=>{p.isBeforeHide||Te()}),gn(()=>{const{valueKey:Oe,options:st}=e,ht=new Map;for(const Ct of st){const xo=d(Ct);let qo=xo;if(ct(qo)&&(qo=Gt(xo,Oe)),ht.get(qo))break;ht.set(qo,!0)}}),et(()=>{td()}),Kt(v,kt),Kt(_,Ft),Kt(C,Fn),Kt(O,Ko),Kt(L,Ko),Kt(T,vi),Kt(V,Gc),{inputId:i,collapseTagSize:te,currentPlaceholder:he,expanded:B,emptyText:le,popupHeight:H,debounce:Q,allOptions:K,filteredOptions:F,iconComponent:Y,iconReverse:J,tagStyle:ue,collapseTagStyle:ye,inputStyle:we,popperSize:m,dropdownMenuVisible:He,hasModelValue:D,shouldShowPlaceholder:Ce,selectDisabled:I,selectSize:U,showClearBtn:q,states:p,isFocused:P,nsSelect:o,nsInput:a,calculatorRef:C,inputRef:b,menuRef:O,tagMenuRef:T,tooltipRef:g,tagTooltipRef:w,selectRef:v,wrapperRef:L,selectionRef:_,prefixRef:x,suffixRef:E,collapseItemRef:V,popperRef:Se,validateState:se,validateIcon:_e,showTagList:de,collapseTagList:Le,debouncedOnInputChange:ne,deleteTag:Xc,getLabel:u,getValue:d,getDisabled:f,getValueKey:qt,handleBlur:j,handleClear:Ne,handleClickOutside:Fr,handleDel:ed,handleEsc:Zc,handleFocus:z,focus:Ga,blur:Jc,handleMenuEnter:jo,handleResize:kt,resetSelectionWidth:Ft,resetCalculatorWidth:Fn,updateTooltip:Ko,updateTagTooltip:vi,updateOptions:Te,toggleMenu:ie,scrollTo:In,onInput:Wo,onKeyboardNavigate:Je,onKeyboardSelect:Lt,onSelect:hi,onHover:Jt,handleCompositionStart:fe,handleCompositionEnd:ee,handleCompositionUpdate:$e}},jZ=A({name:"ElSelectV2",components:{ElSelectMenu:DZ,ElTag:Ls,ElTooltip:En,ElIcon:Be},directives:{ClickOutside:sa},props:PZ,emits:[it,Bt,"remove-tag","clear","visible-change","focus","blur"],setup(e,{emit:t}){const n=S(()=>{const{modelValue:a,multiple:r}=e,l=r?[]:void 0;return Ie(a)?r?a:l:r?l:a}),o=WZ(wt({...un(e),modelValue:n}),t);return pt(op,{props:wt({...un(e),height:o.popupHeight,modelValue:n}),tooltipRef:o.tooltipRef,onSelect:o.onSelect,onHover:o.onHover,onKeyboardNavigate:o.onKeyboardNavigate,onKeyboardSelect:o.onKeyboardSelect}),{...o,modelValue:n}}}),qZ=["id","autocomplete","aria-expanded","aria-label","disabled","readonly","name"],UZ=["textContent"];function YZ(e,t,n,o,a,r){const l=nt("el-tag"),i=nt("el-tooltip"),u=nt("el-icon"),d=nt("el-select-menu"),f=sc("click-outside");return Qe((y(),M("div",{ref:"selectRef",class:$([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),onMouseenter:t[14]||(t[14]=c=>e.states.inputHovering=!0),onMouseleave:t[15]||(t[15]=c=>e.states.inputHovering=!1),onClick:t[16]||(t[16]=Ge((...c)=>e.toggleMenu&&e.toggleMenu(...c),["prevent","stop"]))},[W(i,{ref:"tooltipRef",visible:e.dropdownMenuVisible,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"gpu-acceleration":!1,"stop-popper-mouse-event":!1,"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,placement:e.placement,pure:"",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,trigger:"click",persistent:e.persistent,onBeforeShow:e.handleMenuEnter,onHide:t[13]||(t[13]=c=>e.states.isBeforeHide=!1)},{default:G(()=>[k("div",{ref:"wrapperRef",class:$([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)])},[e.$slots.prefix?(y(),M("div",{key:0,ref:"prefixRef",class:$(e.nsSelect.e("prefix"))},[re(e.$slots,"prefix")],2)):Z("v-if",!0),k("div",{ref:"selectionRef",class:$([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.modelValue.length)])},[e.multiple?re(e.$slots,"tag",{key:0},()=>[(y(!0),M(Fe,null,mt(e.showTagList,c=>(y(),M("div",{key:e.getValueKey(e.getValue(c)),class:$(e.nsSelect.e("selected-item"))},[W(l,{closable:!e.selectDisabled&&!e.getDisabled(c),size:e.collapseTagSize,type:e.tagType,"disable-transitions":"",style:De(e.tagStyle),onClose:p=>e.deleteTag(p,c)},{default:G(()=>[k("span",{class:$(e.nsSelect.e("tags-text"))},Me(e.getLabel(c)),3)]),_:2},1032,["closable","size","type","style","onClose"])],2))),128)),e.collapseTags&&e.modelValue.length>e.maxCollapseTags?(y(),oe(i,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom",teleported:e.teleported},{default:G(()=>[k("div",{ref:"collapseItemRef",class:$(e.nsSelect.e("selected-item"))},[W(l,{closable:!1,size:e.collapseTagSize,type:e.tagType,style:De(e.collapseTagStyle),"disable-transitions":""},{default:G(()=>[k("span",{class:$(e.nsSelect.e("tags-text"))}," + "+Me(e.modelValue.length-e.maxCollapseTags),3)]),_:1},8,["size","type","style"])],2)]),content:G(()=>[k("div",{ref:"tagMenuRef",class:$(e.nsSelect.e("selection"))},[(y(!0),M(Fe,null,mt(e.collapseTagList,c=>(y(),M("div",{key:e.getValueKey(e.getValue(c)),class:$(e.nsSelect.e("selected-item"))},[W(l,{class:"in-tooltip",closable:!e.selectDisabled&&!e.getDisabled(c),size:e.collapseTagSize,type:e.tagType,"disable-transitions":"",onClose:p=>e.deleteTag(p,c)},{default:G(()=>[k("span",{class:$(e.nsSelect.e("tags-text"))},Me(e.getLabel(c)),3)]),_:2},1032,["closable","size","type","onClose"])],2))),128))],2)]),_:1},8,["disabled","effect","teleported"])):Z("v-if",!0)]):Z("v-if",!0),e.selectDisabled?Z("v-if",!0):(y(),M("div",{key:1,class:$([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable)])},[Qe(k("input",{id:e.inputId,ref:"inputRef","onUpdate:modelValue":t[0]||(t[0]=c=>e.states.inputValue=c),style:De(e.inputStyle),autocomplete:e.autocomplete,"aria-autocomplete":"list","aria-haspopup":"listbox",autocapitalize:"off","aria-expanded":e.expanded,"aria-label":e.ariaLabel,class:$([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,role:"combobox",readonly:!e.filterable,spellcheck:"false",type:"text",name:e.name,onFocus:t[1]||(t[1]=(...c)=>e.handleFocus&&e.handleFocus(...c)),onBlur:t[2]||(t[2]=(...c)=>e.handleBlur&&e.handleBlur(...c)),onInput:t[3]||(t[3]=(...c)=>e.onInput&&e.onInput(...c)),onCompositionstart:t[4]||(t[4]=(...c)=>e.handleCompositionStart&&e.handleCompositionStart(...c)),onCompositionupdate:t[5]||(t[5]=(...c)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...c)),onCompositionend:t[6]||(t[6]=(...c)=>e.handleCompositionEnd&&e.handleCompositionEnd(...c)),onKeydown:[t[7]||(t[7]=Mt(Ge(c=>e.onKeyboardNavigate("backward"),["stop","prevent"]),["up"])),t[8]||(t[8]=Mt(Ge(c=>e.onKeyboardNavigate("forward"),["stop","prevent"]),["down"])),t[9]||(t[9]=Mt(Ge((...c)=>e.onKeyboardSelect&&e.onKeyboardSelect(...c),["stop","prevent"]),["enter"])),t[10]||(t[10]=Mt(Ge((...c)=>e.handleEsc&&e.handleEsc(...c),["stop","prevent"]),["esc"])),t[11]||(t[11]=Mt(Ge((...c)=>e.handleDel&&e.handleDel(...c),["stop"]),["delete"]))],onClick:t[12]||(t[12]=Ge((...c)=>e.toggleMenu&&e.toggleMenu(...c),["stop"]))},null,46,qZ),[[B0,e.states.inputValue]]),e.filterable?(y(),M("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:$(e.nsSelect.e("input-calculator")),textContent:Me(e.states.inputValue)},null,10,UZ)):Z("v-if",!0)],2)),e.shouldShowPlaceholder?(y(),M("div",{key:2,class:$([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[k("span",null,Me(e.currentPlaceholder),1)],2)):Z("v-if",!0)],2),k("div",{ref:"suffixRef",class:$(e.nsSelect.e("suffix"))},[e.iconComponent?Qe((y(),oe(u,{key:0,class:$([e.nsSelect.e("caret"),e.nsInput.e("icon"),e.iconReverse])},{default:G(()=>[(y(),oe(ut(e.iconComponent)))]),_:1},8,["class"])),[[bt,!e.showClearBtn]]):Z("v-if",!0),e.showClearBtn&&e.clearIcon?(y(),oe(u,{key:1,class:$([e.nsSelect.e("caret"),e.nsInput.e("icon")]),onClick:Ge(e.handleClear,["prevent","stop"])},{default:G(()=>[(y(),oe(ut(e.clearIcon)))]),_:1},8,["class","onClick"])):Z("v-if",!0),e.validateState&&e.validateIcon?(y(),oe(u,{key:2,class:$([e.nsInput.e("icon"),e.nsInput.e("validateIcon")])},{default:G(()=>[(y(),oe(ut(e.validateIcon)))]),_:1},8,["class"])):Z("v-if",!0)],2)],2)]),content:G(()=>[W(d,{ref:"menuRef",data:e.filteredOptions,width:e.popperSize,"hovering-index":e.states.hoveringIndex,"scrollbar-always-on":e.scrollbarAlwaysOn},na({default:G(c=>[re(e.$slots,"default",Jo(pl(c)))]),_:2},[e.$slots.header?{name:"header",fn:G(()=>[k("div",{class:$(e.nsSelect.be("dropdown","header"))},[re(e.$slots,"header")],2)])}:void 0,e.$slots.loading&&e.loading?{name:"loading",fn:G(()=>[k("div",{class:$(e.nsSelect.be("dropdown","loading"))},[re(e.$slots,"loading")],2)])}:e.loading||e.filteredOptions.length===0?{name:"empty",fn:G(()=>[k("div",{class:$(e.nsSelect.be("dropdown","empty"))},[re(e.$slots,"empty",{},()=>[k("span",null,Me(e.emptyText),1)])],2)])}:void 0,e.$slots.footer?{name:"footer",fn:G(()=>[k("div",{class:$(e.nsSelect.be("dropdown","footer"))},[re(e.$slots,"footer")],2)])}:void 0]),1032,["data","width","hovering-index","scrollbar-always-on"])]),_:3},8,["visible","teleported","popper-class","popper-options","fallback-placements","effect","placement","transition","persistent","onBeforeShow"])],34)),[[f,e.handleClickOutside,e.popperRef]])}var uu=xe(jZ,[["render",YZ],["__file","select.vue"]]);uu.install=e=>{e.component(uu.name,uu)};const GZ=uu,XZ=GZ,JZ=Ee({animated:{type:Boolean,default:!1},count:{type:Number,default:1},rows:{type:Number,default:3},loading:{type:Boolean,default:!0},throttle:{type:Number}}),ZZ=Ee({variant:{type:String,values:["circle","rect","h1","h3","text","caption","p","image","button"],default:"text"}}),QZ=A({name:"ElSkeletonItem"}),eQ=A({...QZ,props:ZZ,setup(e){const t=me("skeleton");return(n,o)=>(y(),M("div",{class:$([s(t).e("item"),s(t).e(n.variant)])},[n.variant==="image"?(y(),oe(s(Dg),{key:0})):Z("v-if",!0)],2))}});var Xu=xe(eQ,[["__file","skeleton-item.vue"]]);const tQ=A({name:"ElSkeleton"}),nQ=A({...tQ,props:JZ,setup(e,{expose:t}){const n=e,o=me("skeleton"),a=WL(At(n,"loading"),n.throttle);return t({uiLoading:a}),(r,l)=>s(a)?(y(),M("div",ft({key:0,class:[s(o).b(),s(o).is("animated",r.animated)]},r.$attrs),[(y(!0),M(Fe,null,mt(r.count,i=>(y(),M(Fe,{key:i},[r.loading?re(r.$slots,"template",{key:i},()=>[W(Xu,{class:$(s(o).is("first")),variant:"p"},null,8,["class"]),(y(!0),M(Fe,null,mt(r.rows,u=>(y(),oe(Xu,{key:u,class:$([s(o).e("paragraph"),s(o).is("last",u===r.rows&&r.rows>1)]),variant:"p"},null,8,["class"]))),128))]):Z("v-if",!0)],64))),128))],16)):re(r.$slots,"default",Jo(ft({key:1},r.$attrs)))}});var oQ=xe(nQ,[["__file","skeleton.vue"]]);const aQ=lt(oQ,{SkeletonItem:Xu}),rQ=Dt(Xu),J8=Symbol("sliderContextKey"),lQ=Ee({modelValue:{type:X([Number,Array]),default:0},id:{type:String,default:void 0},min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},showInput:Boolean,showInputControls:{type:Boolean,default:!0},size:cn,inputSize:cn,showStops:Boolean,showTooltip:{type:Boolean,default:!0},formatTooltip:{type:X(Function),default:void 0},disabled:Boolean,range:Boolean,vertical:Boolean,height:String,debounce:{type:Number,default:300},label:{type:String,default:void 0},rangeStartLabel:{type:String,default:void 0},rangeEndLabel:{type:String,default:void 0},formatValueText:{type:X(Function),default:void 0},tooltipClass:{type:String,default:void 0},placement:{type:String,values:Hr,default:"top"},marks:{type:X(Object)},validateEvent:{type:Boolean,default:!0}}),Od=e=>Ye(e)||Ie(e)&&e.every(Ye),sQ={[it]:Od,[Tn]:Od,[Bt]:Od},iQ=(e,t,n)=>{const o=R();return et(async()=>{e.range?(Array.isArray(e.modelValue)?(t.firstValue=Math.max(e.min,e.modelValue[0]),t.secondValue=Math.min(e.max,e.modelValue[1])):(t.firstValue=e.min,t.secondValue=e.max),t.oldValue=[t.firstValue,t.secondValue]):(typeof e.modelValue!="number"||Number.isNaN(e.modelValue)?t.firstValue=e.min:t.firstValue=Math.min(e.max,Math.max(e.min,e.modelValue)),t.oldValue=t.firstValue),Vt(window,"resize",n),await We(),n()}),{sliderWrapper:o}},uQ=e=>S(()=>e.marks?Object.keys(e.marks).map(Number.parseFloat).sort((n,o)=>n-o).filter(n=>n<=e.max&&n>=e.min).map(n=>({point:n,position:(n-e.min)*100/(e.max-e.min),mark:e.marks[n]})):[]),cQ=(e,t,n)=>{const{form:o,formItem:a}=Nn(),r=Rt(),l=R(),i=R(),u={firstButton:l,secondButton:i},d=S(()=>e.disabled||(o==null?void 0:o.disabled)||!1),f=S(()=>Math.min(t.firstValue,t.secondValue)),c=S(()=>Math.max(t.firstValue,t.secondValue)),p=S(()=>e.range?`${100*(c.value-f.value)/(e.max-e.min)}%`:`${100*(t.firstValue-e.min)/(e.max-e.min)}%`),h=S(()=>e.range?`${100*(f.value-e.min)/(e.max-e.min)}%`:"0%"),m=S(()=>e.vertical?{height:e.height}:{}),v=S(()=>e.vertical?{height:p.value,bottom:h.value}:{width:p.value,left:h.value}),_=()=>{r.value&&(t.sliderSize=r.value[`client${e.vertical?"Height":"Width"}`])},g=P=>{const z=e.min+P*(e.max-e.min)/100;if(!e.range)return l;let j;return Math.abs(f.value-z)t.secondValue?"firstButton":"secondButton",u[j]},w=P=>{const z=g(P);return z.value.setPosition(P),z},b=P=>{t.firstValue=P,x(e.range?[f.value,c.value]:P)},C=P=>{t.secondValue=P,e.range&&x([f.value,c.value])},x=P=>{n(it,P),n(Tn,P)},E=async()=>{await We(),n(Bt,e.range?[f.value,c.value]:e.modelValue)},O=P=>{var z,j,K,F,B,I;if(d.value||t.dragging)return;_();let H=0;if(e.vertical){const N=(K=(j=(z=P.touches)==null?void 0:z.item(0))==null?void 0:j.clientY)!=null?K:P.clientY;H=(r.value.getBoundingClientRect().bottom-N)/t.sliderSize*100}else{const N=(I=(B=(F=P.touches)==null?void 0:F.item(0))==null?void 0:B.clientX)!=null?I:P.clientX,D=r.value.getBoundingClientRect().left;H=(N-D)/t.sliderSize*100}if(!(H<0||H>100))return w(H)};return{elFormItem:a,slider:r,firstButton:l,secondButton:i,sliderDisabled:d,minValue:f,maxValue:c,runwayStyle:m,barStyle:v,resetSize:_,setPosition:w,emitChange:E,onSliderWrapperPrevent:P=>{var z,j;((z=u.firstButton.value)!=null&&z.dragging||(j=u.secondButton.value)!=null&&j.dragging)&&P.preventDefault()},onSliderClick:P=>{O(P)&&E()},onSliderDown:async P=>{const z=O(P);z&&(await We(),z.value.onButtonDown(P))},setFirstValue:b,setSecondValue:C}},{left:dQ,down:fQ,right:pQ,up:vQ,home:hQ,end:mQ,pageUp:gQ,pageDown:yQ}=Ke,_Q=(e,t,n)=>{const o=R(),a=R(!1),r=S(()=>t.value instanceof Function),l=S(()=>r.value&&t.value(e.modelValue)||e.modelValue),i=Hn(()=>{n.value&&(a.value=!0)},50),u=Hn(()=>{n.value&&(a.value=!1)},50);return{tooltip:o,tooltipVisible:a,formatValue:l,displayTooltip:i,hideTooltip:u}},bQ=(e,t,n)=>{const{disabled:o,min:a,max:r,step:l,showTooltip:i,precision:u,sliderSize:d,formatTooltip:f,emitChange:c,resetSize:p,updateDragging:h}=Pe(J8),{tooltip:m,tooltipVisible:v,formatValue:_,displayTooltip:g,hideTooltip:w}=_Q(e,f,i),b=R(),C=S(()=>`${(e.modelValue-a.value)/(r.value-a.value)*100}%`),x=S(()=>e.vertical?{bottom:C.value}:{left:C.value}),E=()=>{t.hovering=!0,g()},O=()=>{t.hovering=!1,t.dragging||w()},T=Y=>{o.value||(Y.preventDefault(),H(Y),window.addEventListener("mousemove",N),window.addEventListener("touchmove",N),window.addEventListener("mouseup",D),window.addEventListener("touchend",D),window.addEventListener("contextmenu",D),b.value.focus())},V=Y=>{o.value||(t.newPosition=Number.parseFloat(C.value)+Y/(r.value-a.value)*100,q(t.newPosition),c())},L=()=>{V(-l.value)},P=()=>{V(l.value)},z=()=>{V(-l.value*4)},j=()=>{V(l.value*4)},K=()=>{o.value||(q(0),c())},F=()=>{o.value||(q(100),c())},B=Y=>{let J=!0;[dQ,fQ].includes(Y.key)?L():[pQ,vQ].includes(Y.key)?P():Y.key===hQ?K():Y.key===mQ?F():Y.key===yQ?z():Y.key===gQ?j():J=!1,J&&Y.preventDefault()},I=Y=>{let J,se;return Y.type.startsWith("touch")?(se=Y.touches[0].clientY,J=Y.touches[0].clientX):(se=Y.clientY,J=Y.clientX),{clientX:J,clientY:se}},H=Y=>{t.dragging=!0,t.isClick=!0;const{clientX:J,clientY:se}=I(Y);e.vertical?t.startY=se:t.startX=J,t.startPosition=Number.parseFloat(C.value),t.newPosition=t.startPosition},N=Y=>{if(t.dragging){t.isClick=!1,g(),p();let J;const{clientX:se,clientY:_e}=I(Y);e.vertical?(t.currentY=_e,J=(t.startY-t.currentY)/d.value*100):(t.currentX=se,J=(t.currentX-t.startX)/d.value*100),t.newPosition=t.startPosition+J,q(t.newPosition)}},D=()=>{t.dragging&&(setTimeout(()=>{t.dragging=!1,t.hovering||w(),t.isClick||q(t.newPosition),c()},0),window.removeEventListener("mousemove",N),window.removeEventListener("touchmove",N),window.removeEventListener("mouseup",D),window.removeEventListener("touchend",D),window.removeEventListener("contextmenu",D))},q=async Y=>{if(Y===null||Number.isNaN(+Y))return;Y<0?Y=0:Y>100&&(Y=100);const J=100/((r.value-a.value)/l.value);let _e=Math.round(Y/J)*J*(r.value-a.value)*.01+a.value;_e=Number.parseFloat(_e.toFixed(u.value)),_e!==e.modelValue&&n(it,_e),!t.dragging&&e.modelValue!==t.oldValue&&(t.oldValue=e.modelValue),await We(),t.dragging&&g(),m.value.updatePopper()};return pe(()=>t.dragging,Y=>{h(Y)}),{disabled:o,button:b,tooltip:m,tooltipVisible:v,showTooltip:i,wrapperStyle:x,formatValue:_,handleMouseEnter:E,handleMouseLeave:O,onButtonDown:T,onKeyDown:B,setPosition:q}},wQ=(e,t,n,o)=>({stops:S(()=>{if(!e.showStops||e.min>e.max)return[];if(e.step===0)return[];const l=(e.max-e.min)/e.step,i=100*e.step/(e.max-e.min),u=Array.from({length:l-1}).map((d,f)=>(f+1)*i);return e.range?u.filter(d=>d<100*(n.value-e.min)/(e.max-e.min)||d>100*(o.value-e.min)/(e.max-e.min)):u.filter(d=>d>100*(t.firstValue-e.min)/(e.max-e.min))}),getStopStyle:l=>e.vertical?{bottom:`${l}%`}:{left:`${l}%`}}),CQ=(e,t,n,o,a,r)=>{const l=d=>{a(it,d),a(Tn,d)},i=()=>e.range?![n.value,o.value].every((d,f)=>d===t.oldValue[f]):e.modelValue!==t.oldValue,u=()=>{var d,f;e.min>e.max&&on("Slider","min should not be greater than max.");const c=e.modelValue;e.range&&Array.isArray(c)?c[1]e.max?l([e.max,e.max]):c[0]e.max?l([c[0],e.max]):(t.firstValue=c[0],t.secondValue=c[1],i()&&(e.validateEvent&&((d=r==null?void 0:r.validate)==null||d.call(r,"change").catch(p=>void 0)),t.oldValue=c.slice())):!e.range&&typeof c=="number"&&!Number.isNaN(c)&&(ce.max?l(e.max):(t.firstValue=c,i()&&(e.validateEvent&&((f=r==null?void 0:r.validate)==null||f.call(r,"change").catch(p=>void 0)),t.oldValue=c)))};u(),pe(()=>t.dragging,d=>{d||u()}),pe(()=>e.modelValue,(d,f)=>{t.dragging||Array.isArray(d)&&Array.isArray(f)&&d.every((c,p)=>c===f[p])&&t.firstValue===d[0]&&t.secondValue===d[1]||u()},{deep:!0}),pe(()=>[e.min,e.max],()=>{u()})},SQ=Ee({modelValue:{type:Number,default:0},vertical:Boolean,tooltipClass:String,placement:{type:String,values:Hr,default:"top"}}),kQ={[it]:e=>Ye(e)},EQ=["tabindex"],xQ=A({name:"ElSliderButton"}),MQ=A({...xQ,props:SQ,emits:kQ,setup(e,{expose:t,emit:n}){const o=e,a=me("slider"),r=wt({hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:0,oldValue:o.modelValue}),{disabled:l,button:i,tooltip:u,showTooltip:d,tooltipVisible:f,wrapperStyle:c,formatValue:p,handleMouseEnter:h,handleMouseLeave:m,onButtonDown:v,onKeyDown:_,setPosition:g}=bQ(o,r,n),{hovering:w,dragging:b}=un(r);return t({onButtonDown:v,onKeyDown:_,setPosition:g,hovering:w,dragging:b}),(C,x)=>(y(),M("div",{ref_key:"button",ref:i,class:$([s(a).e("button-wrapper"),{hover:s(w),dragging:s(b)}]),style:De(s(c)),tabindex:s(l)?-1:0,onMouseenter:x[0]||(x[0]=(...E)=>s(h)&&s(h)(...E)),onMouseleave:x[1]||(x[1]=(...E)=>s(m)&&s(m)(...E)),onMousedown:x[2]||(x[2]=(...E)=>s(v)&&s(v)(...E)),onTouchstart:x[3]||(x[3]=(...E)=>s(v)&&s(v)(...E)),onFocus:x[4]||(x[4]=(...E)=>s(h)&&s(h)(...E)),onBlur:x[5]||(x[5]=(...E)=>s(m)&&s(m)(...E)),onKeydown:x[6]||(x[6]=(...E)=>s(_)&&s(_)(...E))},[W(s(En),{ref_key:"tooltip",ref:u,visible:s(f),placement:C.placement,"fallback-placements":["top","bottom","right","left"],"stop-popper-mouse-event":!1,"popper-class":C.tooltipClass,disabled:!s(d),persistent:""},{content:G(()=>[k("span",null,Me(s(p)),1)]),default:G(()=>[k("div",{class:$([s(a).e("button"),{hover:s(w),dragging:s(b)}])},null,2)]),_:1},8,["visible","placement","popper-class","disabled"])],46,EQ))}});var Nh=xe(MQ,[["__file","button.vue"]]);const $Q=Ee({mark:{type:X([String,Object]),default:void 0}});var TQ=A({name:"ElSliderMarker",props:$Q,setup(e){const t=me("slider"),n=S(()=>Ze(e.mark)?e.mark:e.mark.label),o=S(()=>Ze(e.mark)?void 0:e.mark.style);return()=>qe("div",{class:t.e("marks-text"),style:o.value},n.value)}});const AQ=["id","role","aria-label","aria-labelledby"],OQ={key:1},NQ=A({name:"ElSlider"}),IQ=A({...NQ,props:lQ,emits:sQ,setup(e,{expose:t,emit:n}){const o=e,a=me("slider"),{t:r}=_t(),l=wt({firstValue:0,secondValue:0,oldValue:0,dragging:!1,sliderSize:1}),{elFormItem:i,slider:u,firstButton:d,secondButton:f,sliderDisabled:c,minValue:p,maxValue:h,runwayStyle:m,barStyle:v,resetSize:_,emitChange:g,onSliderWrapperPrevent:w,onSliderClick:b,onSliderDown:C,setFirstValue:x,setSecondValue:E}=cQ(o,l,n),{stops:O,getStopStyle:T}=wQ(o,l,p,h),{inputId:V,isLabeledByFormItem:L}=Ho(o,{formItemContext:i}),P=an(),z=S(()=>o.inputSize||P.value),j=S(()=>o.label||r("el.slider.defaultLabel",{min:o.min,max:o.max})),K=S(()=>o.range?o.rangeStartLabel||r("el.slider.defaultRangeStartLabel"):j.value),F=S(()=>o.formatValueText?o.formatValueText(Y.value):`${Y.value}`),B=S(()=>o.rangeEndLabel||r("el.slider.defaultRangeEndLabel")),I=S(()=>o.formatValueText?o.formatValueText(J.value):`${J.value}`),H=S(()=>[a.b(),a.m(P.value),a.is("vertical",o.vertical),{[a.m("with-input")]:o.showInput}]),N=uQ(o);CQ(o,l,p,h,n,i);const D=S(()=>{const Q=[o.min,o.max,o.step].map(le=>{const ae=`${le}`.split(".")[1];return ae?ae.length:0});return Math.max.apply(null,Q)}),{sliderWrapper:q}=iQ(o,l,_),{firstValue:Y,secondValue:J,sliderSize:se}=un(l),_e=Q=>{l.dragging=Q};return pt(J8,{...un(o),sliderSize:se,disabled:c,precision:D,emitChange:g,resetSize:_,updateDragging:_e}),t({onSliderClick:b}),(Q,le)=>{var ae,Te;return y(),M("div",{id:Q.range?s(V):void 0,ref_key:"sliderWrapper",ref:q,class:$(s(H)),role:Q.range?"group":void 0,"aria-label":Q.range&&!s(L)?s(j):void 0,"aria-labelledby":Q.range&&s(L)?(ae=s(i))==null?void 0:ae.labelId:void 0,onTouchstart:le[2]||(le[2]=(...ce)=>s(w)&&s(w)(...ce)),onTouchmove:le[3]||(le[3]=(...ce)=>s(w)&&s(w)(...ce))},[k("div",{ref_key:"slider",ref:u,class:$([s(a).e("runway"),{"show-input":Q.showInput&&!Q.range},s(a).is("disabled",s(c))]),style:De(s(m)),onMousedown:le[0]||(le[0]=(...ce)=>s(C)&&s(C)(...ce)),onTouchstart:le[1]||(le[1]=(...ce)=>s(C)&&s(C)(...ce))},[k("div",{class:$(s(a).e("bar")),style:De(s(v))},null,6),W(Nh,{id:Q.range?void 0:s(V),ref_key:"firstButton",ref:d,"model-value":s(Y),vertical:Q.vertical,"tooltip-class":Q.tooltipClass,placement:Q.placement,role:"slider","aria-label":Q.range||!s(L)?s(K):void 0,"aria-labelledby":!Q.range&&s(L)?(Te=s(i))==null?void 0:Te.labelId:void 0,"aria-valuemin":Q.min,"aria-valuemax":Q.range?s(J):Q.max,"aria-valuenow":s(Y),"aria-valuetext":s(F),"aria-orientation":Q.vertical?"vertical":"horizontal","aria-disabled":s(c),"onUpdate:modelValue":s(x)},null,8,["id","model-value","vertical","tooltip-class","placement","aria-label","aria-labelledby","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"]),Q.range?(y(),oe(Nh,{key:0,ref_key:"secondButton",ref:f,"model-value":s(J),vertical:Q.vertical,"tooltip-class":Q.tooltipClass,placement:Q.placement,role:"slider","aria-label":s(B),"aria-valuemin":s(Y),"aria-valuemax":Q.max,"aria-valuenow":s(J),"aria-valuetext":s(I),"aria-orientation":Q.vertical?"vertical":"horizontal","aria-disabled":s(c),"onUpdate:modelValue":s(E)},null,8,["model-value","vertical","tooltip-class","placement","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"])):Z("v-if",!0),Q.showStops?(y(),M("div",OQ,[(y(!0),M(Fe,null,mt(s(O),(ce,ge)=>(y(),M("div",{key:ge,class:$(s(a).e("stop")),style:De(s(T)(ce))},null,6))),128))])):Z("v-if",!0),s(N).length>0?(y(),M(Fe,{key:2},[k("div",null,[(y(!0),M(Fe,null,mt(s(N),(ce,ge)=>(y(),M("div",{key:ge,style:De(s(T)(ce.position)),class:$([s(a).e("stop"),s(a).e("marks-stop")])},null,6))),128))]),k("div",{class:$(s(a).e("marks"))},[(y(!0),M(Fe,null,mt(s(N),(ce,ge)=>(y(),oe(s(TQ),{key:ge,mark:ce.mark,style:De(s(T)(ce.position))},null,8,["mark","style"]))),128))],2)],64)):Z("v-if",!0)],38),Q.showInput&&!Q.range?(y(),oe(s(S8),{key:0,ref:"input","model-value":s(Y),class:$(s(a).e("input")),step:Q.step,disabled:s(c),controls:Q.showInputControls,min:Q.min,max:Q.max,debounce:Q.debounce,size:s(z),"onUpdate:modelValue":s(x),onChange:s(g)},null,8,["model-value","class","step","disabled","controls","min","max","debounce","size","onUpdate:modelValue","onChange"])):Z("v-if",!0)],42,AQ)}}});var RQ=xe(IQ,[["__file","slider.vue"]]);const PQ=lt(RQ),LQ=Ee({prefixCls:{type:String}}),Ih=A({name:"ElSpaceItem",props:LQ,setup(e,{slots:t}){const n=me("space"),o=S(()=>`${e.prefixCls||n.b()}__item`);return()=>qe("div",{class:o.value},re(t,"default"))}}),Rh={small:8,default:12,large:16};function VQ(e){const t=me("space"),n=S(()=>[t.b(),t.m(e.direction),e.class]),o=R(0),a=R(0),r=S(()=>{const i=e.wrap||e.fill?{flexWrap:"wrap"}:{},u={alignItems:e.alignment},d={rowGap:`${a.value}px`,columnGap:`${o.value}px`};return[i,u,d,e.style]}),l=S(()=>e.fill?{flexGrow:1,minWidth:`${e.fillRatio}%`}:{});return gn(()=>{const{size:i="small",wrap:u,direction:d,fill:f}=e;if(Ie(i)){const[c=0,p=0]=i;o.value=c,a.value=p}else{let c;Ye(i)?c=i:c=Rh[i||"small"]||Rh.small,(u||f)&&d==="horizontal"?o.value=a.value=c:d==="horizontal"?(o.value=c,a.value=0):(a.value=c,o.value=0)}}),{classes:n,containerStyle:r,itemStyle:l}}const BQ=Ee({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},class:{type:X([String,Object,Array]),default:""},style:{type:X([String,Array,Object]),default:""},alignment:{type:X(String),default:"center"},prefixCls:{type:String},spacer:{type:X([Object,String,Number,Array]),default:null,validator:e=>zt(e)||Ye(e)||Ze(e)},wrap:Boolean,fill:Boolean,fillRatio:{type:Number,default:100},size:{type:[String,Array,Number],values:zo,validator:e=>Ye(e)||Ie(e)&&e.length===2&&e.every(Ye)}}),zQ=A({name:"ElSpace",props:BQ,setup(e,{slots:t}){const{classes:n,containerStyle:o,itemStyle:a}=VQ(e);function r(l,i="",u=[]){const{prefixCls:d}=e;return l.forEach((f,c)=>{df(f)?Ie(f.children)&&f.children.forEach((p,h)=>{df(p)&&Ie(p.children)?r(p.children,`${i+h}-`,u):u.push(W(Ih,{style:a.value,prefixCls:d,key:`nested-${i+h}`},{default:()=>[p]},Zn.PROPS|Zn.STYLE,["style","prefixCls"]))}):MP(f)&&u.push(W(Ih,{style:a.value,prefixCls:d,key:`LoopKey${i+c}`},{default:()=>[f]},Zn.PROPS|Zn.STYLE,["style","prefixCls"]))}),u}return()=>{var l;const{spacer:i,direction:u}=e,d=re(t,"default",{key:0},()=>[]);if(((l=d.children)!=null?l:[]).length===0)return null;if(Ie(d.children)){let f=r(d.children);if(i){const c=f.length-1;f=f.reduce((p,h,m)=>{const v=[...p,h];return m!==c&&v.push(W("span",{style:[a.value,u==="vertical"?"width: 100%":null],key:m},[zt(i)?i:vt(i,Zn.TEXT)],Zn.STYLE)),v},[])}return W("div",{class:n.value,style:o.value},f,Zn.STYLE|Zn.CLASS)}return d.children}}}),HQ=lt(zQ),DQ=Ee({decimalSeparator:{type:String,default:"."},groupSeparator:{type:String,default:","},precision:{type:Number,default:0},formatter:Function,value:{type:X([Number,Object]),default:0},prefix:String,suffix:String,title:String,valueStyle:{type:X([String,Object,Array])}}),FQ=A({name:"ElStatistic"}),KQ=A({...FQ,props:DQ,setup(e,{expose:t}){const n=e,o=me("statistic"),a=S(()=>{const{value:r,formatter:l,precision:i,decimalSeparator:u,groupSeparator:d}=n;if(Xe(l))return l(r);if(!Ye(r))return r;let[f,c=""]=String(r).split(".");return c=c.padEnd(i,"0").slice(0,i>0?i:0),f=f.replace(/\B(?=(\d{3})+(?!\d))/g,d),[f,c].join(c?u:"")});return t({displayValue:a}),(r,l)=>(y(),M("div",{class:$(s(o).b())},[r.$slots.title||r.title?(y(),M("div",{key:0,class:$(s(o).e("head"))},[re(r.$slots,"title",{},()=>[vt(Me(r.title),1)])],2)):Z("v-if",!0),k("div",{class:$(s(o).e("content"))},[r.$slots.prefix||r.prefix?(y(),M("div",{key:0,class:$(s(o).e("prefix"))},[re(r.$slots,"prefix",{},()=>[k("span",null,Me(r.prefix),1)])],2)):Z("v-if",!0),k("span",{class:$(s(o).e("number")),style:De(r.valueStyle)},Me(s(a)),7),r.$slots.suffix||r.suffix?(y(),M("div",{key:1,class:$(s(o).e("suffix"))},[re(r.$slots,"suffix",{},()=>[k("span",null,Me(r.suffix),1)])],2)):Z("v-if",!0)],2)],2))}});var WQ=xe(KQ,[["__file","statistic.vue"]]);const Z8=lt(WQ),jQ=Ee({format:{type:String,default:"HH:mm:ss"},prefix:String,suffix:String,title:String,value:{type:X([Number,Object]),default:0},valueStyle:{type:X([String,Object,Array])}}),qQ={finish:()=>!0,[Bt]:e=>Ye(e)},UQ=[["Y",1e3*60*60*24*365],["M",1e3*60*60*24*30],["D",1e3*60*60*24],["H",1e3*60*60],["m",1e3*60],["s",1e3],["S",1]],Ph=e=>Ye(e)?new Date(e).getTime():e.valueOf(),Lh=(e,t)=>{let n=e;const o=/\[([^\]]*)]/g;return UQ.reduce((r,[l,i])=>{const u=new RegExp(`${l}+(?![^\\[\\]]*\\])`,"g");if(u.test(r)){const d=Math.floor(n/i);return n-=d*i,r.replace(u,f=>String(d).padStart(f.length,"0"))}return r},t).replace(o,"$1")},YQ=A({name:"ElCountdown"}),GQ=A({...YQ,props:jQ,emits:qQ,setup(e,{expose:t,emit:n}){const o=e;let a;const r=R(Ph(o.value)-Date.now()),l=S(()=>Lh(r.value,o.format)),i=f=>Lh(f,o.format),u=()=>{a&&(xr(a),a=void 0)},d=()=>{const f=Ph(o.value),c=()=>{let p=f-Date.now();n("change",p),p<=0?(p=0,u(),n("finish")):a=Fa(c),r.value=p};a=Fa(c)};return pe(()=>[o.value,o.format],()=>{u(),d()},{immediate:!0}),It(()=>{u()}),t({displayValue:l}),(f,c)=>(y(),oe(s(Z8),{value:r.value,title:f.title,prefix:f.prefix,suffix:f.suffix,"value-style":f.valueStyle,formatter:i},na({_:2},[mt(f.$slots,(p,h)=>({name:h,fn:G(()=>[re(f.$slots,h)])}))]),1032,["value","title","prefix","suffix","value-style"]))}});var XQ=xe(GQ,[["__file","countdown.vue"]]);const JQ=lt(XQ),ZQ=Ee({space:{type:[Number,String],default:""},active:{type:Number,default:0},direction:{type:String,default:"horizontal",values:["horizontal","vertical"]},alignCenter:{type:Boolean},simple:{type:Boolean},finishStatus:{type:String,values:["wait","process","finish","error","success"],default:"finish"},processStatus:{type:String,values:["wait","process","finish","error","success"],default:"process"}}),QQ={[Bt]:(e,t)=>[e,t].every(Ye)},eee=A({name:"ElSteps"}),tee=A({...eee,props:ZQ,emits:QQ,setup(e,{emit:t}){const n=e,o=me("steps"),{children:a,addChild:r,removeChild:l}=I2(rt(),"ElStep");return pe(a,()=>{a.value.forEach((i,u)=>{i.setIndex(u)})}),pt("ElSteps",{props:n,steps:a,addStep:r,removeStep:l}),pe(()=>n.active,(i,u)=>{t(Bt,i,u)}),(i,u)=>(y(),M("div",{class:$([s(o).b(),s(o).m(i.simple?"simple":i.direction)])},[re(i.$slots,"default")],2))}});var nee=xe(tee,[["__file","steps.vue"]]);const oee=Ee({title:{type:String,default:""},icon:{type:$t},description:{type:String,default:""},status:{type:String,values:["","wait","process","finish","error","success"],default:""}}),aee=A({name:"ElStep"}),ree=A({...aee,props:oee,setup(e){const t=e,n=me("step"),o=R(-1),a=R({}),r=R(""),l=Pe("ElSteps"),i=rt();et(()=>{pe([()=>l.props.active,()=>l.props.processStatus,()=>l.props.finishStatus],([E])=>{C(E)},{immediate:!0})}),It(()=>{l.removeStep(x.uid)});const u=S(()=>t.status||r.value),d=S(()=>{const E=l.steps.value[o.value-1];return E?E.currentStatus:"wait"}),f=S(()=>l.props.alignCenter),c=S(()=>l.props.direction==="vertical"),p=S(()=>l.props.simple),h=S(()=>l.steps.value.length),m=S(()=>{var E;return((E=l.steps.value[h.value-1])==null?void 0:E.uid)===(i==null?void 0:i.uid)}),v=S(()=>p.value?"":l.props.space),_=S(()=>[n.b(),n.is(p.value?"simple":l.props.direction),n.is("flex",m.value&&!v.value&&!f.value),n.is("center",f.value&&!c.value&&!p.value)]),g=S(()=>{const E={flexBasis:Ye(v.value)?`${v.value}px`:v.value?v.value:`${100/(h.value-(f.value?0:1))}%`};return c.value||m.value&&(E.maxWidth=`${100/h.value}%`),E}),w=E=>{o.value=E},b=E=>{const O=E==="wait",T={transitionDelay:`${O?"-":""}${150*o.value}ms`},V=E===l.props.processStatus||O?0:100;T.borderWidth=V&&!p.value?"1px":0,T[l.props.direction==="vertical"?"height":"width"]=`${V}%`,a.value=T},C=E=>{E>o.value?r.value=l.props.finishStatus:E===o.value&&d.value!=="error"?r.value=l.props.processStatus:r.value="wait";const O=l.steps.value[o.value-1];O&&O.calcProgress(r.value)},x=wt({uid:i.uid,currentStatus:u,setIndex:w,calcProgress:b});return l.addStep(x),(E,O)=>(y(),M("div",{style:De(s(g)),class:$(s(_))},[Z(" icon & line "),k("div",{class:$([s(n).e("head"),s(n).is(s(u))])},[s(p)?Z("v-if",!0):(y(),M("div",{key:0,class:$(s(n).e("line"))},[k("i",{class:$(s(n).e("line-inner")),style:De(a.value)},null,6)],2)),k("div",{class:$([s(n).e("icon"),s(n).is(E.icon||E.$slots.icon?"icon":"text")])},[re(E.$slots,"icon",{},()=>[E.icon?(y(),oe(s(Be),{key:0,class:$(s(n).e("icon-inner"))},{default:G(()=>[(y(),oe(ut(E.icon)))]),_:1},8,["class"])):s(u)==="success"?(y(),oe(s(Be),{key:1,class:$([s(n).e("icon-inner"),s(n).is("status")])},{default:G(()=>[W(s(Bl))]),_:1},8,["class"])):s(u)==="error"?(y(),oe(s(Be),{key:2,class:$([s(n).e("icon-inner"),s(n).is("status")])},{default:G(()=>[W(s(uo))]),_:1},8,["class"])):s(p)?Z("v-if",!0):(y(),M("div",{key:3,class:$(s(n).e("icon-inner"))},Me(o.value+1),3))])],2)],2),Z(" title & description "),k("div",{class:$(s(n).e("main"))},[k("div",{class:$([s(n).e("title"),s(n).is(s(u))])},[re(E.$slots,"title",{},()=>[vt(Me(E.title),1)])],2),s(p)?(y(),M("div",{key:0,class:$(s(n).e("arrow"))},null,2)):(y(),M("div",{key:1,class:$([s(n).e("description"),s(n).is(s(u))])},[re(E.$slots,"description",{},()=>[vt(Me(E.description),1)])],2))],2)],6))}});var Q8=xe(ree,[["__file","item.vue"]]);const lee=lt(nee,{Step:Q8}),see=Dt(Q8),iee=Ee({modelValue:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},size:{type:String,validator:e6},width:{type:[String,Number],default:""},inlinePrompt:{type:Boolean,default:!1},inactiveActionIcon:{type:$t},activeActionIcon:{type:$t},activeIcon:{type:$t},inactiveIcon:{type:$t},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},beforeChange:{type:X(Function)},id:String,tabindex:{type:[String,Number]},label:{type:String,default:void 0}}),uee={[it]:e=>Qt(e)||Ze(e)||Ye(e),[Bt]:e=>Qt(e)||Ze(e)||Ye(e),[Tn]:e=>Qt(e)||Ze(e)||Ye(e)},cee=["onClick"],dee=["id","aria-checked","aria-disabled","aria-label","name","true-value","false-value","disabled","tabindex","onKeydown"],fee=["aria-hidden"],pee=["aria-hidden"],vee=["aria-hidden"],ey="ElSwitch",hee=A({name:ey}),mee=A({...hee,props:iee,emits:uee,setup(e,{expose:t,emit:n}){const o=e,{formItem:a}=Nn(),r=an(),l=me("switch"),{inputId:i}=Ho(o,{formItemContext:a}),u=Dn(S(()=>o.loading)),d=R(o.modelValue!==!1),f=R(),c=R(),p=S(()=>[l.b(),l.m(r.value),l.is("disabled",u.value),l.is("checked",g.value)]),h=S(()=>[l.e("label"),l.em("label","left"),l.is("active",!g.value)]),m=S(()=>[l.e("label"),l.em("label","right"),l.is("active",g.value)]),v=S(()=>({width:Xt(o.width)}));pe(()=>o.modelValue,()=>{d.value=!0});const _=S(()=>d.value?o.modelValue:!1),g=S(()=>_.value===o.activeValue);[o.activeValue,o.inactiveValue].includes(_.value)||(n(it,o.inactiveValue),n(Bt,o.inactiveValue),n(Tn,o.inactiveValue)),pe(g,x=>{var E;f.value.checked=x,o.validateEvent&&((E=a==null?void 0:a.validate)==null||E.call(a,"change").catch(O=>void 0))});const w=()=>{const x=g.value?o.inactiveValue:o.activeValue;n(it,x),n(Bt,x),n(Tn,x),We(()=>{f.value.checked=g.value})},b=()=>{if(u.value)return;const{beforeChange:x}=o;if(!x){w();return}const E=x();[ys(E),Qt(E)].includes(!0)||on(ey,"beforeChange must return type `Promise` or `boolean`"),ys(E)?E.then(T=>{T&&w()}).catch(T=>{}):E&&w()},C=()=>{var x,E;(E=(x=f.value)==null?void 0:x.focus)==null||E.call(x)};return et(()=>{f.value.checked=g.value}),t({focus:C,checked:g}),(x,E)=>(y(),M("div",{class:$(s(p)),onClick:Ge(b,["prevent"])},[k("input",{id:s(i),ref_key:"input",ref:f,class:$(s(l).e("input")),type:"checkbox",role:"switch","aria-checked":s(g),"aria-disabled":s(u),"aria-label":x.label,name:x.name,"true-value":x.activeValue,"false-value":x.inactiveValue,disabled:s(u),tabindex:x.tabindex,onChange:w,onKeydown:Mt(b,["enter"])},null,42,dee),!x.inlinePrompt&&(x.inactiveIcon||x.inactiveText)?(y(),M("span",{key:0,class:$(s(h))},[x.inactiveIcon?(y(),oe(s(Be),{key:0},{default:G(()=>[(y(),oe(ut(x.inactiveIcon)))]),_:1})):Z("v-if",!0),!x.inactiveIcon&&x.inactiveText?(y(),M("span",{key:1,"aria-hidden":s(g)},Me(x.inactiveText),9,fee)):Z("v-if",!0)],2)):Z("v-if",!0),k("span",{ref_key:"core",ref:c,class:$(s(l).e("core")),style:De(s(v))},[x.inlinePrompt?(y(),M("div",{key:0,class:$(s(l).e("inner"))},[x.activeIcon||x.inactiveIcon?(y(),oe(s(Be),{key:0,class:$(s(l).is("icon"))},{default:G(()=>[(y(),oe(ut(s(g)?x.activeIcon:x.inactiveIcon)))]),_:1},8,["class"])):x.activeText||x.inactiveText?(y(),M("span",{key:1,class:$(s(l).is("text")),"aria-hidden":!s(g)},Me(s(g)?x.activeText:x.inactiveText),11,pee)):Z("v-if",!0)],2)):Z("v-if",!0),k("div",{class:$(s(l).e("action"))},[x.loading?(y(),oe(s(Be),{key:0,class:$(s(l).is("loading"))},{default:G(()=>[W(s(pa))]),_:1},8,["class"])):s(g)?re(x.$slots,"active-action",{key:1},()=>[x.activeActionIcon?(y(),oe(s(Be),{key:0},{default:G(()=>[(y(),oe(ut(x.activeActionIcon)))]),_:1})):Z("v-if",!0)]):s(g)?Z("v-if",!0):re(x.$slots,"inactive-action",{key:2},()=>[x.inactiveActionIcon?(y(),oe(s(Be),{key:0},{default:G(()=>[(y(),oe(ut(x.inactiveActionIcon)))]),_:1})):Z("v-if",!0)])],2)],6),!x.inlinePrompt&&(x.activeIcon||x.activeText)?(y(),M("span",{key:1,class:$(s(m))},[x.activeIcon?(y(),oe(s(Be),{key:0},{default:G(()=>[(y(),oe(ut(x.activeIcon)))]),_:1})):Z("v-if",!0),!x.activeIcon&&x.activeText?(y(),M("span",{key:1,"aria-hidden":!s(g)},Me(x.activeText),9,vee)):Z("v-if",!0)],2)):Z("v-if",!0)],10,cee))}});var gee=xe(mee,[["__file","switch.vue"]]);const yee=lt(gee),Nd=function(e){var t;return(t=e.target)==null?void 0:t.closest("td")},_ee=function(e,t,n,o,a){if(!t&&!o&&(!a||Array.isArray(a)&&!a.length))return e;typeof n=="string"?n=n==="descending"?-1:1:n=n&&n<0?-1:1;const r=o?null:function(i,u){return a?(Array.isArray(a)||(a=[a]),a.map(d=>typeof d=="string"?Gt(i,d):d(i,u,e))):(t!=="$key"&&ct(i)&&"$value"in i&&(i=i.$value),[ct(i)?Gt(i,t):i])},l=function(i,u){if(o)return o(i.value,u.value);for(let d=0,f=i.key.length;du.key[d])return 1}return 0};return e.map((i,u)=>({value:i,index:u,key:r?r(i,u):null})).sort((i,u)=>{let d=l(i,u);return d||(d=i.index-u.index),d*+n}).map(i=>i.value)},ty=function(e,t){let n=null;return e.columns.forEach(o=>{o.id===t&&(n=o)}),n},bee=function(e,t){let n=null;for(let o=0;o{if(!e)throw new Error("Row is required when get row identity");if(typeof t=="string"){if(!t.includes("."))return`${e[t]}`;const n=t.split(".");let o=e;for(const a of n)o=o[a];return`${o}`}else if(typeof t=="function")return t.call(null,e)},dr=function(e,t){const n={};return(e||[]).forEach((o,a)=>{n[hn(o,t)]={row:o,index:a}}),n};function wee(e,t){const n={};let o;for(o in e)n[o]=e[o];for(o in t)if(yt(t,o)){const a=t[o];typeof a<"u"&&(n[o]=a)}return n}function ap(e){return e===""||e!==void 0&&(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function ny(e){return e===""||e!==void 0&&(e=ap(e),Number.isNaN(e)&&(e=80)),e}function Cee(e){return typeof e=="number"?e:typeof e=="string"?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function See(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...o)=>t(n(...o)))}function ms(e,t,n){let o=!1;const a=e.indexOf(t),r=a!==-1,l=i=>{i==="add"?e.push(t):e.splice(a,1),o=!0,Ie(t.children)&&t.children.forEach(u=>{ms(e,u,n??!r)})};return Qt(n)?n&&!r?l("add"):!n&&r&&l("remove"):l(r?"remove":"add"),o}function kee(e,t,n="children",o="hasChildren"){const a=l=>!(Array.isArray(l)&&l.length);function r(l,i,u){t(l,i,u),i.forEach(d=>{if(d[o]){t(d,null,u+1);return}const f=d[n];a(f)||r(d,f,u+1)})}e.forEach(l=>{if(l[o]){t(l,null,0);return}const i=l[n];a(i)||r(l,i,0)})}let Jn=null;function Eee(e,t,n,o){if((Jn==null?void 0:Jn.trigger)===n)return;Jn==null||Jn();const a=o==null?void 0:o.refs.tableWrapper,r=a==null?void 0:a.dataset.prefix,l={strategy:"fixed",...e.popperOptions},i=W(En,{content:t,virtualTriggering:!0,virtualRef:n,appendTo:a,placement:"top",transition:"none",offset:0,hideAfter:0,...e,popperOptions:l,onHide:()=>{Jn==null||Jn()}});i.appContext={...o.appContext,...o};const u=document.createElement("div");Ha(i,u),i.component.exposed.onOpen();const d=a==null?void 0:a.querySelector(`.${r}-scrollbar__wrap`);Jn=()=>{Ha(null,u),d==null||d.removeEventListener("scroll",Jn),Jn=null},Jn.trigger=n,d==null||d.addEventListener("scroll",Jn)}function oy(e){return e.children?Uk(e.children,oy):[e]}function Bh(e,t){return e+t.colSpan}const ay=(e,t,n,o)=>{let a=0,r=e;const l=n.states.columns.value;if(o){const u=oy(o[e]);a=l.slice(0,l.indexOf(u[0])).reduce(Bh,0),r=a+u.reduce(Bh,0)-1}else a=e;let i;switch(t){case"left":r=l.length-n.states.rightFixedLeafColumnsLength.value&&(i="right");break;default:r=l.length-n.states.rightFixedLeafColumnsLength.value&&(i="right")}return i?{direction:i,start:a,after:r}:{}},rp=(e,t,n,o,a,r=0)=>{const l=[],{direction:i,start:u,after:d}=ay(t,n,o,a);if(i){const f=i==="left";l.push(`${e}-fixed-column--${i}`),f&&d+r===o.states.fixedLeafColumnsLength.value-1?l.push("is-last-column"):!f&&u-r===o.states.columns.value.length-o.states.rightFixedLeafColumnsLength.value&&l.push("is-first-column")}return l};function zh(e,t){return e+(t.realWidth===null||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const lp=(e,t,n,o)=>{const{direction:a,start:r=0,after:l=0}=ay(e,t,n,o);if(!a)return;const i={},u=a==="left",d=n.states.columns.value;return u?i.left=d.slice(0,r).reduce(zh,0):i.right=d.slice(l+1).reverse().reduce(zh,0),i},Ml=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))};function xee(e){const t=rt(),n=R(!1),o=R([]);return{updateExpandRows:()=>{const u=e.data.value||[],d=e.rowKey.value;if(n.value)o.value=u.slice();else if(d){const f=dr(o.value,d);o.value=u.reduce((c,p)=>{const h=hn(p,d);return f[h]&&c.push(p),c},[])}else o.value=[]},toggleRowExpansion:(u,d)=>{ms(o.value,u,d)&&t.emit("expand-change",u,o.value.slice())},setExpandRowKeys:u=>{t.store.assertRowKey();const d=e.data.value||[],f=e.rowKey.value,c=dr(d,f);o.value=u.reduce((p,h)=>{const m=c[h];return m&&p.push(m.row),p},[])},isRowExpanded:u=>{const d=e.rowKey.value;return d?!!dr(o.value,d)[hn(u,d)]:o.value.includes(u)},states:{expandRows:o,defaultExpandAll:n}}}function Mee(e){const t=rt(),n=R(null),o=R(null),a=d=>{t.store.assertRowKey(),n.value=d,l(d)},r=()=>{n.value=null},l=d=>{const{data:f,rowKey:c}=e;let p=null;c.value&&(p=(s(f)||[]).find(h=>hn(h,c.value)===d)),o.value=p,t.emit("current-change",o.value,null)};return{setCurrentRowKey:a,restoreCurrentRowKey:r,setCurrentRowByKey:l,updateCurrentRow:d=>{const f=o.value;if(d&&d!==f){o.value=d,t.emit("current-change",o.value,f);return}!d&&f&&(o.value=null,t.emit("current-change",null,f))},updateCurrentRowData:()=>{const d=e.rowKey.value,f=e.data.value||[],c=o.value;if(!f.includes(c)&&c){if(d){const p=hn(c,d);l(p)}else o.value=null;o.value===null&&t.emit("current-change",null,c)}else n.value&&(l(n.value),r())},states:{_currentRowKey:n,currentRow:o}}}function $ee(e){const t=R([]),n=R({}),o=R(16),a=R(!1),r=R({}),l=R("hasChildren"),i=R("children"),u=rt(),d=S(()=>{if(!e.rowKey.value)return{};const g=e.data.value||[];return c(g)}),f=S(()=>{const g=e.rowKey.value,w=Object.keys(r.value),b={};return w.length&&w.forEach(C=>{if(r.value[C].length){const x={children:[]};r.value[C].forEach(E=>{const O=hn(E,g);x.children.push(O),E[l.value]&&!b[O]&&(b[O]={children:[]})}),b[C]=x}}),b}),c=g=>{const w=e.rowKey.value,b={};return kee(g,(C,x,E)=>{const O=hn(C,w);Array.isArray(x)?b[O]={children:x.map(T=>hn(T,w)),level:E}:a.value&&(b[O]={children:[],lazy:!0,level:E})},i.value,l.value),b},p=(g=!1,w=(b=>(b=u.store)==null?void 0:b.states.defaultExpandAll.value)())=>{var b;const C=d.value,x=f.value,E=Object.keys(C),O={};if(E.length){const T=s(n),V=[],L=(z,j)=>{if(g)return t.value?w||t.value.includes(j):!!(w||z!=null&&z.expanded);{const K=w||t.value&&t.value.includes(j);return!!(z!=null&&z.expanded||K)}};E.forEach(z=>{const j=T[z],K={...C[z]};if(K.expanded=L(j,z),K.lazy){const{loaded:F=!1,loading:B=!1}=j||{};K.loaded=!!F,K.loading=!!B,V.push(z)}O[z]=K});const P=Object.keys(x);a.value&&P.length&&V.length&&P.forEach(z=>{const j=T[z],K=x[z].children;if(V.includes(z)){if(O[z].children.length!==0)throw new Error("[ElTable]children must be an empty array.");O[z].children=K}else{const{loaded:F=!1,loading:B=!1}=j||{};O[z]={lazy:!0,loaded:!!F,loading:!!B,expanded:L(j,z),children:K,level:""}}})}n.value=O,(b=u.store)==null||b.updateTableScrollY()};pe(()=>t.value,()=>{p(!0)}),pe(()=>d.value,()=>{p()}),pe(()=>f.value,()=>{p()});const h=g=>{t.value=g,p()},m=(g,w)=>{u.store.assertRowKey();const b=e.rowKey.value,C=hn(g,b),x=C&&n.value[C];if(C&&x&&"expanded"in x){const E=x.expanded;w=typeof w>"u"?!x.expanded:w,n.value[C].expanded=w,E!==w&&u.emit("expand-change",g,w),u.store.updateTableScrollY()}},v=g=>{u.store.assertRowKey();const w=e.rowKey.value,b=hn(g,w),C=n.value[b];a.value&&C&&"loaded"in C&&!C.loaded?_(g,b,C):m(g,void 0)},_=(g,w,b)=>{const{load:C}=u.props;C&&!n.value[w].loaded&&(n.value[w].loading=!0,C(g,b,x=>{if(!Array.isArray(x))throw new TypeError("[ElTable] data must be an array");n.value[w].loading=!1,n.value[w].loaded=!0,n.value[w].expanded=!0,x.length&&(r.value[w]=x),u.emit("expand-change",g,!0)}))};return{loadData:_,loadOrToggle:v,toggleTreeExpansion:m,updateTreeExpandKeys:h,updateTreeData:p,normalize:c,states:{expandRowKeys:t,treeData:n,indent:o,lazy:a,lazyTreeNodeMap:r,lazyColumnIdentifier:l,childrenColumnName:i}}}const Tee=(e,t)=>{const n=t.sortingColumn;return!n||typeof n.sortable=="string"?e:_ee(e,t.sortProp,t.sortOrder,n.sortMethod,n.sortBy)},cu=e=>{const t=[];return e.forEach(n=>{n.children&&n.children.length>0?t.push.apply(t,cu(n.children)):t.push(n)}),t};function Aee(){var e;const t=rt(),{size:n}=un((e=t.proxy)==null?void 0:e.$props),o=R(null),a=R([]),r=R([]),l=R(!1),i=R([]),u=R([]),d=R([]),f=R([]),c=R([]),p=R([]),h=R([]),m=R([]),v=[],_=R(0),g=R(0),w=R(0),b=R(!1),C=R([]),x=R(!1),E=R(!1),O=R(null),T=R({}),V=R(null),L=R(null),P=R(null),z=R(null),j=R(null);pe(a,()=>t.state&&I(!1),{deep:!0});const K=()=>{if(!o.value)throw new Error("[ElTable] prop row-key is required")},F=je=>{var fe;(fe=je.children)==null||fe.forEach($e=>{$e.fixed=je.fixed,F($e)})},B=()=>{i.value.forEach(ie=>{F(ie)}),f.value=i.value.filter(ie=>ie.fixed===!0||ie.fixed==="left"),c.value=i.value.filter(ie=>ie.fixed==="right"),f.value.length>0&&i.value[0]&&i.value[0].type==="selection"&&!i.value[0].fixed&&(i.value[0].fixed=!0,f.value.unshift(i.value[0]));const je=i.value.filter(ie=>!ie.fixed);u.value=[].concat(f.value).concat(je).concat(c.value);const fe=cu(je),$e=cu(f.value),ee=cu(c.value);_.value=fe.length,g.value=$e.length,w.value=ee.length,d.value=[].concat($e).concat(fe).concat(ee),l.value=f.value.length>0||c.value.length>0},I=(je,fe=!1)=>{je&&B(),fe?t.state.doLayout():t.state.debouncedUpdateLayout()},H=je=>C.value.includes(je),N=()=>{b.value=!1,C.value.length&&(C.value=[],t.emit("selection-change",[]))},D=()=>{let je;if(o.value){je=[];const fe=dr(C.value,o.value),$e=dr(a.value,o.value);for(const ee in fe)yt(fe,ee)&&!$e[ee]&&je.push(fe[ee].row)}else je=C.value.filter(fe=>!a.value.includes(fe));if(je.length){const fe=C.value.filter($e=>!je.includes($e));C.value=fe,t.emit("selection-change",fe.slice())}},q=()=>(C.value||[]).slice(),Y=(je,fe=void 0,$e=!0)=>{if(ms(C.value,je,fe)){const ie=(C.value||[]).slice();$e&&t.emit("select",ie,je),t.emit("selection-change",ie)}},J=()=>{var je,fe;const $e=E.value?!b.value:!(b.value||C.value.length);b.value=$e;let ee=!1,ie=0;const ke=(fe=(je=t==null?void 0:t.store)==null?void 0:je.states)==null?void 0:fe.rowKey.value;a.value.forEach((ne,ze)=>{const tt=ze+ie;O.value?O.value.call(null,ne,tt)&&ms(C.value,ne,$e)&&(ee=!0):ms(C.value,ne,$e)&&(ee=!0),ie+=Q(hn(ne,ke))}),ee&&t.emit("selection-change",C.value?C.value.slice():[]),t.emit("select-all",C.value)},se=()=>{const je=dr(C.value,o.value);a.value.forEach(fe=>{const $e=hn(fe,o.value),ee=je[$e];ee&&(C.value[ee.index]=fe)})},_e=()=>{var je,fe,$e;if(((je=a.value)==null?void 0:je.length)===0){b.value=!1;return}let ee;o.value&&(ee=dr(C.value,o.value));const ie=function(tt){return ee?!!ee[hn(tt,o.value)]:C.value.includes(tt)};let ke=!0,ne=0,ze=0;for(let tt=0,St=(a.value||[]).length;tt{var fe;if(!t||!t.store)return 0;const{treeData:$e}=t.store.states;let ee=0;const ie=(fe=$e.value[je])==null?void 0:fe.children;return ie&&(ee+=ie.length,ie.forEach(ke=>{ee+=Q(ke)})),ee},le=(je,fe)=>{Array.isArray(je)||(je=[je]);const $e={};return je.forEach(ee=>{T.value[ee.id]=fe,$e[ee.columnKey||ee.id]=fe}),$e},ae=(je,fe,$e)=>{L.value&&L.value!==je&&(L.value.order=null),L.value=je,P.value=fe,z.value=$e},Te=()=>{let je=s(r);Object.keys(T.value).forEach(fe=>{const $e=T.value[fe];if(!$e||$e.length===0)return;const ee=ty({columns:d.value},fe);ee&&ee.filterMethod&&(je=je.filter(ie=>$e.some(ke=>ee.filterMethod.call(null,ke,ie,ee))))}),V.value=je},ce=()=>{a.value=Tee(V.value,{sortingColumn:L.value,sortProp:P.value,sortOrder:z.value})},ge=(je=void 0)=>{je&&je.filter||Te(),ce()},Ae=je=>{const{tableHeaderRef:fe}=t.refs;if(!fe)return;const $e=Object.assign({},fe.filterPanels),ee=Object.keys($e);if(ee.length)if(typeof je=="string"&&(je=[je]),Array.isArray(je)){const ie=je.map(ke=>bee({columns:d.value},ke));ee.forEach(ke=>{const ne=ie.find(ze=>ze.id===ke);ne&&(ne.filteredValue=[])}),t.store.commit("filterChange",{column:ie,values:[],silent:!0,multi:!0})}else ee.forEach(ie=>{const ke=d.value.find(ne=>ne.id===ie);ke&&(ke.filteredValue=[])}),T.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},U=()=>{L.value&&(ae(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:te,toggleRowExpansion:ve,updateExpandRows:be,states:ue,isRowExpanded:ye}=xee({data:a,rowKey:o}),{updateTreeExpandKeys:we,toggleTreeExpansion:Ce,updateTreeData:he,loadOrToggle:Se,states:Re}=$ee({data:a,rowKey:o}),{updateCurrentRowData:He,updateCurrentRow:de,setCurrentRowKey:Le,states:Ue}=Mee({data:a,rowKey:o});return{assertRowKey:K,updateColumns:B,scheduleLayout:I,isSelected:H,clearSelection:N,cleanSelection:D,getSelectionRows:q,toggleRowSelection:Y,_toggleAllSelection:J,toggleAllSelection:null,updateSelectionByRowKey:se,updateAllSelected:_e,updateFilters:le,updateCurrentRow:de,updateSort:ae,execFilter:Te,execSort:ce,execQuery:ge,clearFilter:Ae,clearSort:U,toggleRowExpansion:ve,setExpandRowKeysAdapter:je=>{te(je),we(je)},setCurrentRowKey:Le,toggleRowExpansionAdapter:(je,fe)=>{d.value.some(({type:ee})=>ee==="expand")?ve(je,fe):Ce(je,fe)},isRowExpanded:ye,updateExpandRows:be,updateCurrentRowData:He,loadOrToggle:Se,updateTreeData:he,states:{tableSize:n,rowKey:o,data:a,_data:r,isComplex:l,_columns:i,originColumns:u,columns:d,fixedColumns:f,rightFixedColumns:c,leafColumns:p,fixedLeafColumns:h,rightFixedLeafColumns:m,updateOrderFns:v,leafColumnsLength:_,fixedLeafColumnsLength:g,rightFixedLeafColumnsLength:w,isAllSelected:b,selection:C,reserveSelection:x,selectOnIndeterminate:E,selectable:O,filters:T,filteredData:V,sortingColumn:L,sortProp:P,sortOrder:z,hoverRow:j,...ue,...Re,...Ue}}}function Xf(e,t){return e.map(n=>{var o;return n.id===t.id?t:((o=n.children)!=null&&o.length&&(n.children=Xf(n.children,t)),n)})}function Jf(e){e.forEach(t=>{var n,o;t.no=(n=t.getColumnIndex)==null?void 0:n.call(t),(o=t.children)!=null&&o.length&&Jf(t.children)}),e.sort((t,n)=>t.no-n.no)}function Oee(){const e=rt(),t=Aee();return{ns:me("table"),...t,mutations:{setData(l,i){const u=s(l._data)!==i;l.data.value=i,l._data.value=i,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),s(l.reserveSelection)?(e.store.assertRowKey(),e.store.updateSelectionByRowKey()):u?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(l,i,u,d){const f=s(l._columns);let c=[];u?(u&&!u.children&&(u.children=[]),u.children.push(i),c=Xf(f,u)):(f.push(i),c=f),Jf(c),l._columns.value=c,l.updateOrderFns.push(d),i.type==="selection"&&(l.selectable.value=i.selectable,l.reserveSelection.value=i.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},updateColumnOrder(l,i){var u;((u=i.getColumnIndex)==null?void 0:u.call(i))!==i.no&&(Jf(l._columns.value),e.$ready&&e.store.updateColumns())},removeColumn(l,i,u,d){const f=s(l._columns)||[];if(u)u.children.splice(u.children.findIndex(p=>p.id===i.id),1),We(()=>{var p;((p=u.children)==null?void 0:p.length)===0&&delete u.children}),l._columns.value=Xf(f,u);else{const p=f.indexOf(i);p>-1&&(f.splice(p,1),l._columns.value=f)}const c=l.updateOrderFns.indexOf(d);c>-1&&l.updateOrderFns.splice(c,1),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(l,i){const{prop:u,order:d,init:f}=i;if(u){const c=s(l.columns).find(p=>p.property===u);c&&(c.order=d,e.store.updateSort(c,u,d),e.store.commit("changeSortCondition",{init:f}))}},changeSortCondition(l,i){const{sortingColumn:u,sortProp:d,sortOrder:f}=l,c=s(u),p=s(d),h=s(f);h===null&&(l.sortingColumn.value=null,l.sortProp.value=null);const m={filter:!0};e.store.execQuery(m),(!i||!(i.silent||i.init))&&e.emit("sort-change",{column:c,prop:p,order:h}),e.store.updateTableScrollY()},filterChange(l,i){const{column:u,values:d,silent:f}=i,c=e.store.updateFilters(u,d);e.store.execQuery(),f||e.emit("filter-change",c),e.store.updateTableScrollY()},toggleAllSelection(){e.store.toggleAllSelection()},rowSelectedChanged(l,i){e.store.toggleRowSelection(i),e.store.updateAllSelected()},setHoverRow(l,i){l.hoverRow.value=i},setCurrentRow(l,i){e.store.updateCurrentRow(i)}},commit:function(l,...i){const u=e.store.mutations;if(u[l])u[l].apply(e,[e.store.states].concat(i));else throw new Error(`Action not found: ${l}`)},updateTableScrollY:function(){We(()=>e.layout.updateScrollY.apply(e.layout))}}}const gs={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"}};function Nee(e,t){if(!e)throw new Error("Table is required.");const n=Oee();return n.toggleAllSelection=Hn(n._toggleAllSelection,10),Object.keys(gs).forEach(o=>{ry(ly(t,o),o,n)}),Iee(n,t),n}function Iee(e,t){Object.keys(gs).forEach(n=>{pe(()=>ly(t,n),o=>{ry(o,n,e)})})}function ry(e,t,n){let o=e,a=gs[t];typeof gs[t]=="object"&&(a=a.key,o=o||gs[t].default),n.states[a].value=o}function ly(e,t){if(t.includes(".")){const n=t.split(".");let o=e;return n.forEach(a=>{o=o[a]}),o}else return e[t]}class Ree{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=R(null),this.scrollX=R(!1),this.scrollY=R(!1),this.bodyWidth=R(null),this.fixedWidth=R(null),this.rightFixedWidth=R(null),this.gutterWidth=0;for(const n in t)yt(t,n)&&(Pt(this[n])?this[n].value=t[n]:this[n]=t[n]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){if(this.height.value===null)return!1;const n=this.table.refs.scrollBarRef;if(this.table.vnode.el&&(n!=null&&n.wrapRef)){let o=!0;const a=this.scrollY.value;return o=n.wrapRef.scrollHeight>n.wrapRef.clientHeight,this.scrollY.value=o,a!==o}return!1}setHeight(t,n="height"){if(!gt)return;const o=this.table.vnode.el;if(t=Cee(t),this.height.value=Number(t),!o&&(t||t===0))return We(()=>this.setHeight(t,n));typeof t=="number"?(o.style[n]=`${t}px`,this.updateElsHeight()):typeof t=="string"&&(o.style[n]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(o=>{o.isColumnGroup?t.push.apply(t,o.columns):t.push(o)}),t}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let n=t;for(;n.tagName!=="DIV";){if(getComputedStyle(n).display==="none")return!0;n=n.parentElement}return!1}updateColumnsWidth(){if(!gt)return;const t=this.fit,n=this.table.vnode.el.clientWidth;let o=0;const a=this.getFlattenColumns(),r=a.filter(u=>typeof u.width!="number");if(a.forEach(u=>{typeof u.width=="number"&&u.realWidth&&(u.realWidth=null)}),r.length>0&&t){if(a.forEach(u=>{o+=Number(u.width||u.minWidth||80)}),o<=n){this.scrollX.value=!1;const u=n-o;if(r.length===1)r[0].realWidth=Number(r[0].minWidth||80)+u;else{const d=r.reduce((p,h)=>p+Number(h.minWidth||80),0),f=u/d;let c=0;r.forEach((p,h)=>{if(h===0)return;const m=Math.floor(Number(p.minWidth||80)*f);c+=m,p.realWidth=Number(p.minWidth||80)+m}),r[0].realWidth=Number(r[0].minWidth||80)+u-c}}else this.scrollX.value=!0,r.forEach(u=>{u.realWidth=Number(u.minWidth)});this.bodyWidth.value=Math.max(o,n),this.table.state.resizeState.value.width=this.bodyWidth.value}else a.forEach(u=>{!u.width&&!u.minWidth?u.realWidth=80:u.realWidth=Number(u.width||u.minWidth),o+=u.realWidth}),this.scrollX.value=o>n,this.bodyWidth.value=o;const l=this.store.states.fixedColumns.value;if(l.length>0){let u=0;l.forEach(d=>{u+=Number(d.realWidth||d.width)}),this.fixedWidth.value=u}const i=this.store.states.rightFixedColumns.value;if(i.length>0){let u=0;i.forEach(d=>{u+=Number(d.realWidth||d.width)}),this.rightFixedWidth.value=u}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const n=this.observers.indexOf(t);n!==-1&&this.observers.splice(n,1)}notifyObservers(t){this.observers.forEach(o=>{var a,r;switch(t){case"columns":(a=o.state)==null||a.onColumnsChange(this);break;case"scrollable":(r=o.state)==null||r.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const{CheckboxGroup:Pee}=vo,Lee=A({name:"ElTableFilterPanel",components:{ElCheckbox:vo,ElCheckboxGroup:Pee,ElScrollbar:ha,ElTooltip:En,ElIcon:Be,ArrowDown:Bo,ArrowUp:Cc},directives:{ClickOutside:sa},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function}},setup(e){const t=rt(),{t:n}=_t(),o=me("table-filter"),a=t==null?void 0:t.parent;a.filterPanels.value[e.column.id]||(a.filterPanels.value[e.column.id]=t);const r=R(!1),l=R(null),i=S(()=>e.column&&e.column.filters),u=S(()=>e.column.filterClassName?`${o.b()} ${e.column.filterClassName}`:o.b()),d=S({get:()=>{var x;return(((x=e.column)==null?void 0:x.filteredValue)||[])[0]},set:x=>{f.value&&(typeof x<"u"&&x!==null?f.value.splice(0,1,x):f.value.splice(0,1))}}),f=S({get(){return e.column?e.column.filteredValue||[]:[]},set(x){e.column&&e.upDataColumn("filteredValue",x)}}),c=S(()=>e.column?e.column.filterMultiple:!0),p=x=>x.value===d.value,h=()=>{r.value=!1},m=x=>{x.stopPropagation(),r.value=!r.value},v=()=>{r.value=!1},_=()=>{b(f.value),h()},g=()=>{f.value=[],b(f.value),h()},w=x=>{d.value=x,b(typeof x<"u"&&x!==null?f.value:[]),h()},b=x=>{e.store.commit("filterChange",{column:e.column,values:x}),e.store.updateAllSelected()};pe(r,x=>{e.column&&e.upDataColumn("filterOpened",x)},{immediate:!0});const C=S(()=>{var x,E;return(E=(x=l.value)==null?void 0:x.popperRef)==null?void 0:E.contentRef});return{tooltipVisible:r,multiple:c,filterClassName:u,filteredValue:f,filterValue:d,filters:i,handleConfirm:_,handleReset:g,handleSelect:w,isActive:p,t:n,ns:o,showFilterPanel:m,hideFilterPanel:v,popperPaneRef:C,tooltip:l}}}),Vee={key:0},Bee=["disabled"],zee=["label","onClick"];function Hee(e,t,n,o,a,r){const l=nt("el-checkbox"),i=nt("el-checkbox-group"),u=nt("el-scrollbar"),d=nt("arrow-up"),f=nt("arrow-down"),c=nt("el-icon"),p=nt("el-tooltip"),h=sc("click-outside");return y(),oe(p,{ref:"tooltip",visible:e.tooltipVisible,offset:0,placement:e.placement,"show-arrow":!1,"stop-popper-mouse-event":!1,teleported:"",effect:"light",pure:"","popper-class":e.filterClassName,persistent:""},{content:G(()=>[e.multiple?(y(),M("div",Vee,[k("div",{class:$(e.ns.e("content"))},[W(u,{"wrap-class":e.ns.e("wrap")},{default:G(()=>[W(i,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=m=>e.filteredValue=m),class:$(e.ns.e("checkbox-group"))},{default:G(()=>[(y(!0),M(Fe,null,mt(e.filters,m=>(y(),oe(l,{key:m.value,value:m.value},{default:G(()=>[vt(Me(m.text),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),k("div",{class:$(e.ns.e("bottom"))},[k("button",{class:$({[e.ns.is("disabled")]:e.filteredValue.length===0}),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...m)=>e.handleConfirm&&e.handleConfirm(...m))},Me(e.t("el.table.confirmFilter")),11,Bee),k("button",{type:"button",onClick:t[2]||(t[2]=(...m)=>e.handleReset&&e.handleReset(...m))},Me(e.t("el.table.resetFilter")),1)],2)])):(y(),M("ul",{key:1,class:$(e.ns.e("list"))},[k("li",{class:$([e.ns.e("list-item"),{[e.ns.is("active")]:e.filterValue===void 0||e.filterValue===null}]),onClick:t[3]||(t[3]=m=>e.handleSelect(null))},Me(e.t("el.table.clearFilter")),3),(y(!0),M(Fe,null,mt(e.filters,m=>(y(),M("li",{key:m.value,class:$([e.ns.e("list-item"),e.ns.is("active",e.isActive(m))]),label:m.value,onClick:v=>e.handleSelect(m.value)},Me(m.text),11,zee))),128))],2))]),default:G(()=>[Qe((y(),M("span",{class:$([`${e.ns.namespace.value}-table__column-filter-trigger`,`${e.ns.namespace.value}-none-outline`]),onClick:t[4]||(t[4]=(...m)=>e.showFilterPanel&&e.showFilterPanel(...m))},[W(c,null,{default:G(()=>[e.column.filterOpened?(y(),oe(d,{key:0})):(y(),oe(f,{key:1}))]),_:1})],2)),[[h,e.hideFilterPanel,e.popperPaneRef]])]),_:1},8,["visible","placement","popper-class"])}var Dee=xe(Lee,[["render",Hee],["__file","filter-panel.vue"]]);function sy(e){const t=rt();cc(()=>{n.value.addObserver(t)}),et(()=>{o(n.value),a(n.value)}),ua(()=>{o(n.value),a(n.value)}),Ua(()=>{n.value.removeObserver(t)});const n=S(()=>{const r=e.layout;if(!r)throw new Error("Can not find table layout.");return r}),o=r=>{var l;const i=((l=e.vnode.el)==null?void 0:l.querySelectorAll("colgroup > col"))||[];if(!i.length)return;const u=r.getFlattenColumns(),d={};u.forEach(f=>{d[f.id]=f});for(let f=0,c=i.length;f{var l,i;const u=((l=e.vnode.el)==null?void 0:l.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let f=0,c=u.length;f{v.stopPropagation()},r=(v,_)=>{!_.filters&&_.sortable?m(v,_,!1):_.filterable&&!_.sortable&&a(v),o==null||o.emit("header-click",_,v)},l=(v,_)=>{o==null||o.emit("header-contextmenu",_,v)},i=R(null),u=R(!1),d=R({}),f=(v,_)=>{if(gt&&!(_.children&&_.children.length>0)&&i.value&&e.border){u.value=!0;const g=o;t("set-drag-visible",!0);const b=(g==null?void 0:g.vnode.el).getBoundingClientRect().left,C=n.vnode.el.querySelector(`th.${_.id}`),x=C.getBoundingClientRect(),E=x.left-b+30;eo(C,"noclick"),d.value={startMouseLeft:v.clientX,startLeft:x.right-b,startColumnLeft:x.left-b,tableLeft:b};const O=g==null?void 0:g.refs.resizeProxy;O.style.left=`${d.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const T=L=>{const P=L.clientX-d.value.startMouseLeft,z=d.value.startLeft+P;O.style.left=`${Math.max(E,z)}px`},V=()=>{if(u.value){const{startColumnLeft:L,startLeft:P}=d.value,j=Number.parseInt(O.style.left,10)-L;_.width=_.realWidth=j,g==null||g.emit("header-dragend",_.width,P-L,_,v),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",u.value=!1,i.value=null,d.value={},t("set-drag-visible",!1)}document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",V),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{Cn(C,"noclick")},0)};document.addEventListener("mousemove",T),document.addEventListener("mouseup",V)}},c=(v,_)=>{if(_.children&&_.children.length>0)return;const g=v.target;if(!io(g))return;const w=g==null?void 0:g.closest("th");if(!(!_||!_.resizable)&&!u.value&&e.border){const b=w.getBoundingClientRect(),C=document.body.style;b.width>12&&b.right-v.pageX<8?(C.cursor="col-resize",oo(w,"is-sortable")&&(w.style.cursor="col-resize"),i.value=_):u.value||(C.cursor="",oo(w,"is-sortable")&&(w.style.cursor="pointer"),i.value=null)}},p=()=>{gt&&(document.body.style.cursor="")},h=({order:v,sortOrders:_})=>{if(v==="")return _[0];const g=_.indexOf(v||null);return _[g>_.length-2?0:g+1]},m=(v,_,g)=>{var w;v.stopPropagation();const b=_.order===g?null:g||h(_),C=(w=v.target)==null?void 0:w.closest("th");if(C&&oo(C,"noclick")){Cn(C,"noclick");return}if(!_.sortable)return;const x=e.store.states;let E=x.sortProp.value,O;const T=x.sortingColumn.value;(T!==_||T===_&&T.order===null)&&(T&&(T.order=null),x.sortingColumn.value=_,E=_.property),b?O=_.order=b:O=_.order=null,x.sortProp.value=E,x.sortOrder.value=O,o==null||o.store.commit("changeSortCondition")};return{handleHeaderClick:r,handleHeaderContextMenu:l,handleMouseDown:f,handleMouseMove:c,handleMouseOut:p,handleSortClick:m,handleFilterClick:a}}function Kee(e){const t=Pe(Do),n=me("table");return{getHeaderRowStyle:i=>{const u=t==null?void 0:t.props.headerRowStyle;return typeof u=="function"?u.call(null,{rowIndex:i}):u},getHeaderRowClass:i=>{const u=[],d=t==null?void 0:t.props.headerRowClassName;return typeof d=="string"?u.push(d):typeof d=="function"&&u.push(d.call(null,{rowIndex:i})),u.join(" ")},getHeaderCellStyle:(i,u,d,f)=>{var c;let p=(c=t==null?void 0:t.props.headerCellStyle)!=null?c:{};typeof p=="function"&&(p=p.call(null,{rowIndex:i,columnIndex:u,row:d,column:f}));const h=lp(u,f.fixed,e.store,d);return Ml(h,"left"),Ml(h,"right"),Object.assign({},p,h)},getHeaderCellClass:(i,u,d,f)=>{const c=rp(n.b(),u,f.fixed,e.store,d),p=[f.id,f.order,f.headerAlign,f.className,f.labelClassName,...c];f.children||p.push("is-leaf"),f.sortable&&p.push("is-sortable");const h=t==null?void 0:t.props.headerCellClassName;return typeof h=="string"?p.push(h):typeof h=="function"&&p.push(h.call(null,{rowIndex:i,columnIndex:u,row:d,column:f})),p.push(n.e("cell")),p.filter(m=>!!m).join(" ")}}}const iy=e=>{const t=[];return e.forEach(n=>{n.children?(t.push(n),t.push.apply(t,iy(n.children))):t.push(n)}),t},Wee=e=>{let t=1;const n=(r,l)=>{if(l&&(r.level=l.level+1,t{n(u,r),i+=u.colSpan}),r.colSpan=i}else r.colSpan=1};e.forEach(r=>{r.level=1,n(r,void 0)});const o=[];for(let r=0;r{r.children?(r.rowSpan=1,r.children.forEach(l=>l.isSubColumn=!0)):r.rowSpan=t-r.level+1,o[r.level-1].push(r)}),o};function jee(e){const t=Pe(Do),n=S(()=>Wee(e.store.states.originColumns.value));return{isGroup:S(()=>{const r=n.value.length>1;return r&&t&&(t.state.isGroup.value=!0),r}),toggleAllSelection:r=>{r.stopPropagation(),t==null||t.store.commit("toggleAllSelection")},columnRows:n}}var qee=A({name:"ElTableHeader",components:{ElCheckbox:vo},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e,{emit:t}){const n=rt(),o=Pe(Do),a=me("table"),r=R({}),{onColumnsChange:l,onScrollableChange:i}=sy(o);et(async()=>{await We(),await We();const{prop:E,order:O}=e.defaultSort;o==null||o.store.commit("sort",{prop:E,order:O,init:!0})});const{handleHeaderClick:u,handleHeaderContextMenu:d,handleMouseDown:f,handleMouseMove:c,handleMouseOut:p,handleSortClick:h,handleFilterClick:m}=Fee(e,t),{getHeaderRowStyle:v,getHeaderRowClass:_,getHeaderCellStyle:g,getHeaderCellClass:w}=Kee(e),{isGroup:b,toggleAllSelection:C,columnRows:x}=jee(e);return n.state={onColumnsChange:l,onScrollableChange:i},n.filterPanels=r,{ns:a,filterPanels:r,onColumnsChange:l,onScrollableChange:i,columnRows:x,getHeaderRowClass:_,getHeaderRowStyle:v,getHeaderCellClass:w,getHeaderCellStyle:g,handleHeaderClick:u,handleHeaderContextMenu:d,handleMouseDown:f,handleMouseMove:c,handleMouseOut:p,handleSortClick:h,handleFilterClick:m,isGroup:b,toggleAllSelection:C}},render(){const{ns:e,isGroup:t,columnRows:n,getHeaderCellStyle:o,getHeaderCellClass:a,getHeaderRowClass:r,getHeaderRowStyle:l,handleHeaderClick:i,handleHeaderContextMenu:u,handleMouseDown:d,handleMouseMove:f,handleSortClick:c,handleMouseOut:p,store:h,$parent:m}=this;let v=1;return qe("thead",{class:{[e.is("group")]:t}},n.map((_,g)=>qe("tr",{class:r(g),key:g,style:l(g)},_.map((w,b)=>(w.rowSpan>v&&(v=w.rowSpan),qe("th",{class:a(g,b,_,w),colspan:w.colSpan,key:`${w.id}-thead`,rowspan:w.rowSpan,style:o(g,b,_,w),onClick:C=>i(C,w),onContextmenu:C=>u(C,w),onMousedown:C=>d(C,w),onMousemove:C=>f(C,w),onMouseout:p},[qe("div",{class:["cell",w.filteredValue&&w.filteredValue.length>0?"highlight":""]},[w.renderHeader?w.renderHeader({column:w,$index:b,store:h,_self:m}):w.label,w.sortable&&qe("span",{onClick:C=>c(C,w),class:"caret-wrapper"},[qe("i",{onClick:C=>c(C,w,"ascending"),class:"sort-caret ascending"}),qe("i",{onClick:C=>c(C,w,"descending"),class:"sort-caret descending"})]),w.filterable&&qe(Dee,{store:h,placement:w.filterPlacement||"bottom-start",column:w,upDataColumn:(C,x)=>{w[C]=x}})])]))))))}});function Uee(e){const t=Pe(Do),n=R(""),o=R(qe("div")),a=(m,v,_)=>{var g;const w=t,b=Nd(m);let C;const x=(g=w==null?void 0:w.vnode.el)==null?void 0:g.dataset.prefix;b&&(C=Vh({columns:e.store.states.columns.value},b,x),C&&(w==null||w.emit(`cell-${_}`,v,C,b,m))),w==null||w.emit(`row-${_}`,v,C,m)},r=(m,v)=>{a(m,v,"dblclick")},l=(m,v)=>{e.store.commit("setCurrentRow",v),a(m,v,"click")},i=(m,v)=>{a(m,v,"contextmenu")},u=Hn(m=>{e.store.commit("setHoverRow",m)},30),d=Hn(()=>{e.store.commit("setHoverRow",null)},30),f=m=>{const v=window.getComputedStyle(m,null),_=Number.parseInt(v.paddingLeft,10)||0,g=Number.parseInt(v.paddingRight,10)||0,w=Number.parseInt(v.paddingTop,10)||0,b=Number.parseInt(v.paddingBottom,10)||0;return{left:_,right:g,top:w,bottom:b}},c=(m,v,_)=>{let g=v.target.parentNode;for(;m>1&&(g=g==null?void 0:g.nextSibling,!(!g||g.nodeName!=="TR"));)_(g,"hover-row hover-fixed-row"),m--};return{handleDoubleClick:r,handleClick:l,handleContextMenu:i,handleMouseEnter:u,handleMouseLeave:d,handleCellMouseEnter:(m,v,_)=>{var g;const w=t,b=Nd(m),C=(g=w==null?void 0:w.vnode.el)==null?void 0:g.dataset.prefix;if(b){const I=Vh({columns:e.store.states.columns.value},b,C);b.rowSpan>1&&c(b.rowSpan,m,eo);const H=w.hoverState={cell:b,column:I,row:v};w==null||w.emit("cell-mouse-enter",H.row,H.column,H.cell,m)}if(!_)return;const x=m.target.querySelector(".cell");if(!(oo(x,`${C}-tooltip`)&&x.childNodes.length))return;const E=document.createRange();E.setStart(x,0),E.setEnd(x,x.childNodes.length);let O=E.getBoundingClientRect().width,T=E.getBoundingClientRect().height;O-Math.floor(O)<.001&&(O=Math.floor(O)),T-Math.floor(T)<.001&&(T=Math.floor(T));const{top:P,left:z,right:j,bottom:K}=f(x),F=z+j,B=P+K;(O+F>x.offsetWidth||T+B>x.offsetHeight||x.scrollWidth>x.offsetWidth)&&Eee(_,b.innerText||b.textContent,b,w)},handleCellMouseLeave:m=>{const v=Nd(m);if(!v)return;v.rowSpan>1&&c(v.rowSpan,m,Cn);const _=t==null?void 0:t.hoverState;t==null||t.emit("cell-mouse-leave",_==null?void 0:_.row,_==null?void 0:_.column,_==null?void 0:_.cell,m)},tooltipContent:n,tooltipTrigger:o}}function Yee(e){const t=Pe(Do),n=me("table");return{getRowStyle:(d,f)=>{const c=t==null?void 0:t.props.rowStyle;return typeof c=="function"?c.call(null,{row:d,rowIndex:f}):c||null},getRowClass:(d,f)=>{const c=[n.e("row")];t!=null&&t.props.highlightCurrentRow&&d===e.store.states.currentRow.value&&c.push("current-row"),e.stripe&&f%2===1&&c.push(n.em("row","striped"));const p=t==null?void 0:t.props.rowClassName;return typeof p=="string"?c.push(p):typeof p=="function"&&c.push(p.call(null,{row:d,rowIndex:f})),c},getCellStyle:(d,f,c,p)=>{const h=t==null?void 0:t.props.cellStyle;let m=h??{};typeof h=="function"&&(m=h.call(null,{rowIndex:d,columnIndex:f,row:c,column:p}));const v=lp(f,e==null?void 0:e.fixed,e.store);return Ml(v,"left"),Ml(v,"right"),Object.assign({},m,v)},getCellClass:(d,f,c,p,h)=>{const m=rp(n.b(),f,e==null?void 0:e.fixed,e.store,void 0,h),v=[p.id,p.align,p.className,...m],_=t==null?void 0:t.props.cellClassName;return typeof _=="string"?v.push(_):typeof _=="function"&&v.push(_.call(null,{rowIndex:d,columnIndex:f,row:c,column:p})),v.push(n.e("cell")),v.filter(g=>!!g).join(" ")},getSpan:(d,f,c,p)=>{let h=1,m=1;const v=t==null?void 0:t.props.spanMethod;if(typeof v=="function"){const _=v({row:d,column:f,rowIndex:c,columnIndex:p});Array.isArray(_)?(h=_[0],m=_[1]):typeof _=="object"&&(h=_.rowspan,m=_.colspan)}return{rowspan:h,colspan:m}},getColspanRealWidth:(d,f,c)=>{if(f<1)return d[c].realWidth;const p=d.map(({realWidth:h,width:m})=>h||m).slice(c,c+f);return Number(p.reduce((h,m)=>Number(h)+Number(m),-1))}}}function Gee(e){const t=Pe(Do),n=me("table"),{handleDoubleClick:o,handleClick:a,handleContextMenu:r,handleMouseEnter:l,handleMouseLeave:i,handleCellMouseEnter:u,handleCellMouseLeave:d,tooltipContent:f,tooltipTrigger:c}=Uee(e),{getRowStyle:p,getRowClass:h,getCellStyle:m,getCellClass:v,getSpan:_,getColspanRealWidth:g}=Yee(e),w=S(()=>e.store.states.columns.value.findIndex(({type:O})=>O==="default")),b=(O,T)=>{const V=t.props.rowKey;return V?hn(O,V):T},C=(O,T,V,L=!1)=>{const{tooltipEffect:P,tooltipOptions:z,store:j}=e,{indent:K,columns:F}=j.states,B=h(O,T);let I=!0;return V&&(B.push(n.em("row",`level-${V.level}`)),I=V.display),qe("tr",{style:[I?null:{display:"none"},p(O,T)],class:B,key:b(O,T),onDblclick:N=>o(N,O),onClick:N=>a(N,O),onContextmenu:N=>r(N,O),onMouseenter:()=>l(T),onMouseleave:i},F.value.map((N,D)=>{const{rowspan:q,colspan:Y}=_(O,N,T,D);if(!q||!Y)return null;const J=Object.assign({},N);J.realWidth=g(F.value,Y,D);const se={store:e.store,_self:e.context||t,column:J,row:O,$index:T,cellIndex:D,expanded:L};D===w.value&&V&&(se.treeNode={indent:V.level*K.value,level:V.level},typeof V.expanded=="boolean"&&(se.treeNode.expanded=V.expanded,"loading"in V&&(se.treeNode.loading=V.loading),"noLazyChildren"in V&&(se.treeNode.noLazyChildren=V.noLazyChildren)));const _e=`${T},${D}`,Q=J.columnKey||J.rawColumnKey||"",le=x(D,N,se),ae=N.showOverflowTooltip&&Zk({effect:P},z,N.showOverflowTooltip);return qe("td",{style:m(T,D,O,N),class:v(T,D,O,N,Y-1),key:`${Q}${_e}`,rowspan:q,colspan:Y,onMouseenter:Te=>u(Te,O,ae),onMouseleave:d},[le])}))},x=(O,T,V)=>T.renderCell(V);return{wrappedRowRender:(O,T)=>{const V=e.store,{isRowExpanded:L,assertRowKey:P}=V,{treeData:z,lazyTreeNodeMap:j,childrenColumnName:K,rowKey:F}=V.states,B=V.states.columns.value;if(B.some(({type:H})=>H==="expand")){const H=L(O),N=C(O,T,void 0,H),D=t.renderExpanded;return H?D?[[N,qe("tr",{key:`expanded-row__${N.key}`},[qe("td",{colspan:B.length,class:`${n.e("cell")} ${n.e("expanded-cell")}`},[D({row:O,$index:T,store:V,expanded:H})])])]]:(console.error("[Element Error]renderExpanded is required."),N):[[N]]}else if(Object.keys(z.value).length){P();const H=hn(O,F.value);let N=z.value[H],D=null;N&&(D={expanded:N.expanded,level:N.level,display:!0},typeof N.lazy=="boolean"&&(typeof N.loaded=="boolean"&&N.loaded&&(D.noLazyChildren=!(N.children&&N.children.length)),D.loading=N.loading));const q=[C(O,T,D)];if(N){let Y=0;const J=(_e,Q)=>{_e&&_e.length&&Q&&_e.forEach(le=>{const ae={display:Q.display&&Q.expanded,level:Q.level+1,expanded:!1,noLazyChildren:!1,loading:!1},Te=hn(le,F.value);if(Te==null)throw new Error("For nested data item, row-key is required.");if(N={...z.value[Te]},N&&(ae.expanded=N.expanded,N.level=N.level||ae.level,N.display=!!(N.expanded&&ae.display),typeof N.lazy=="boolean"&&(typeof N.loaded=="boolean"&&N.loaded&&(ae.noLazyChildren=!(N.children&&N.children.length)),ae.loading=N.loading)),Y++,q.push(C(le,T+Y,ae)),N){const ce=j.value[Te]||le[K.value];J(ce,N)}})};N.display=!0;const se=j.value[H]||O[K.value];J(se,N)}return q}else return C(O,T,void 0)},tooltipContent:f,tooltipTrigger:c}}const Xee={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,tooltipOptions:{type:Object},context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var Jee=A({name:"ElTableBody",props:Xee,setup(e){const t=rt(),n=Pe(Do),o=me("table"),{wrappedRowRender:a,tooltipContent:r,tooltipTrigger:l}=Gee(e),{onColumnsChange:i,onScrollableChange:u}=sy(n),d=[];return pe(e.store.states.hoverRow,(f,c)=>{var p;const h=t==null?void 0:t.vnode.el,m=Array.from((h==null?void 0:h.children)||[]).filter(g=>g==null?void 0:g.classList.contains(`${o.e("row")}`));let v=f;const _=(p=m[v])==null?void 0:p.childNodes;_!=null&&_.length?Array.from(_).reduce((w,b,C)=>{var x,E;const O=((x=_[C-1])==null?void 0:x.colSpan)>1,T=((E=_[C+1])==null?void 0:E.colSpan)>1;return b.nodeName!=="TD"&&!O&&!T&&w.push(C),w},[]).forEach(w=>{for(var b;v>0;){const C=(b=m[v-1])==null?void 0:b.childNodes;if(C[w]&&C[w].nodeName==="TD"){eo(C[w],"hover-cell"),d.push(C[w]);break}v--}}):(d.forEach(g=>Cn(g,"hover-cell")),d.length=0),!(!e.store.states.isComplex.value||!gt)&&Fa(()=>{const g=m[c],w=m[f];g&&!g.classList.contains("hover-fixed-row")&&Cn(g,"hover-row"),w&&eo(w,"hover-row")})}),Ua(()=>{var f;(f=Jn)==null||f()}),{ns:o,onColumnsChange:i,onScrollableChange:u,wrappedRowRender:a,tooltipContent:r,tooltipTrigger:l}},render(){const{wrappedRowRender:e,store:t}=this,n=t.states.data.value||[];return qe("tbody",{tabIndex:-1},[n.reduce((o,a)=>o.concat(e(a,o.length)),[])])}});function Zee(){const e=Pe(Do),t=e==null?void 0:e.store,n=S(()=>t.states.fixedLeafColumnsLength.value),o=S(()=>t.states.rightFixedColumns.value.length),a=S(()=>t.states.columns.value.length),r=S(()=>t.states.fixedColumns.value.length),l=S(()=>t.states.rightFixedColumns.value.length);return{leftFixedLeafCount:n,rightFixedLeafCount:o,columnsCount:a,leftFixedCount:r,rightFixedCount:l,columns:t.states.columns}}function Qee(e){const{columns:t}=Zee(),n=me("table");return{getCellClasses:(r,l)=>{const i=r[l],u=[n.e("cell"),i.id,i.align,i.labelClassName,...rp(n.b(),l,i.fixed,e.store)];return i.className&&u.push(i.className),i.children||u.push(n.is("leaf")),u},getCellStyles:(r,l)=>{const i=lp(l,r.fixed,e.store);return Ml(i,"left"),Ml(i,"right"),i},columns:t}}var ete=A({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const{getCellClasses:t,getCellStyles:n,columns:o}=Qee(e);return{ns:me("table"),getCellClasses:t,getCellStyles:n,columns:o}},render(){const{columns:e,getCellStyles:t,getCellClasses:n,summaryMethod:o,sumText:a}=this,r=this.store.states.data.value;let l=[];return o?l=o({columns:e,data:r}):e.forEach((i,u)=>{if(u===0){l[u]=a;return}const d=r.map(h=>Number(h[i.property])),f=[];let c=!0;d.forEach(h=>{if(!Number.isNaN(+h)){c=!1;const m=`${h}`.split(".")[1];f.push(m?m.length:0)}});const p=Math.max.apply(null,f);c?l[u]="":l[u]=d.reduce((h,m)=>{const v=Number(m);return Number.isNaN(+v)?h:Number.parseFloat((h+m).toFixed(Math.min(p,20)))},0)}),qe(qe("tfoot",[qe("tr",{},[...e.map((i,u)=>qe("td",{key:u,colspan:i.colSpan,rowspan:i.rowSpan,class:n(e,u),style:t(i,u)},[qe("div",{class:["cell",i.labelClassName]},[l[u]])]))])]))}});function tte(e){return{setCurrentRow:f=>{e.commit("setCurrentRow",f)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(f,c)=>{e.toggleRowSelection(f,c,!1),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:f=>{e.clearFilter(f)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(f,c)=>{e.toggleRowExpansionAdapter(f,c)},clearSort:()=>{e.clearSort()},sort:(f,c)=>{e.commit("sort",{prop:f,order:c})}}}function nte(e,t,n,o){const a=R(!1),r=R(null),l=R(!1),i=N=>{l.value=N},u=R({width:null,height:null,headerHeight:null}),d=R(!1),f={display:"inline-block",verticalAlign:"middle"},c=R(),p=R(0),h=R(0),m=R(0),v=R(0),_=R(0);gn(()=>{t.setHeight(e.height)}),gn(()=>{t.setMaxHeight(e.maxHeight)}),pe(()=>[e.currentRowKey,n.states.rowKey],([N,D])=>{!s(D)||!s(N)||n.setCurrentRowKey(`${N}`)},{immediate:!0}),pe(()=>e.data,N=>{o.store.commit("setData",N)},{immediate:!0,deep:!0}),gn(()=>{e.expandRowKeys&&n.setExpandRowKeysAdapter(e.expandRowKeys)});const g=()=>{o.store.commit("setHoverRow",null),o.hoverState&&(o.hoverState=null)},w=(N,D)=>{const{pixelX:q,pixelY:Y}=D;Math.abs(q)>=Math.abs(Y)&&(o.refs.bodyWrapper.scrollLeft+=D.pixelX/5)},b=S(()=>e.height||e.maxHeight||n.states.fixedColumns.value.length>0||n.states.rightFixedColumns.value.length>0),C=S(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),x=()=>{b.value&&t.updateElsHeight(),t.updateColumnsWidth(),requestAnimationFrame(V)};et(async()=>{await We(),n.updateColumns(),L(),requestAnimationFrame(x);const N=o.vnode.el,D=o.refs.headerWrapper;e.flexible&&N&&N.parentElement&&(N.parentElement.style.minWidth="0"),u.value={width:c.value=N.offsetWidth,height:N.offsetHeight,headerHeight:e.showHeader&&D?D.offsetHeight:null},n.states.columns.value.forEach(q=>{q.filteredValue&&q.filteredValue.length&&o.store.commit("filterChange",{column:q,values:q.filteredValue,silent:!0})}),o.$ready=!0});const E=(N,D)=>{if(!N)return;const q=Array.from(N.classList).filter(Y=>!Y.startsWith("is-scrolling-"));q.push(t.scrollX.value?D:"is-scrolling-none"),N.className=q.join(" ")},O=N=>{const{tableWrapper:D}=o.refs;E(D,N)},T=N=>{const{tableWrapper:D}=o.refs;return!!(D&&D.classList.contains(N))},V=function(){if(!o.refs.scrollBarRef)return;if(!t.scrollX.value){const Q="is-scrolling-none";T(Q)||O(Q);return}const N=o.refs.scrollBarRef.wrapRef;if(!N)return;const{scrollLeft:D,offsetWidth:q,scrollWidth:Y}=N,{headerWrapper:J,footerWrapper:se}=o.refs;J&&(J.scrollLeft=D),se&&(se.scrollLeft=D);const _e=Y-q-1;D>=_e?O("is-scrolling-right"):O(D===0?"is-scrolling-left":"is-scrolling-middle")},L=()=>{o.refs.scrollBarRef&&(o.refs.scrollBarRef.wrapRef&&Vt(o.refs.scrollBarRef.wrapRef,"scroll",V,{passive:!0}),e.fit?Kt(o.vnode.el,P):Vt(window,"resize",P),Kt(o.refs.bodyWrapper,()=>{var N,D;P(),(D=(N=o.refs)==null?void 0:N.scrollBarRef)==null||D.update()}))},P=()=>{var N,D,q,Y;const J=o.vnode.el;if(!o.$ready||!J)return;let se=!1;const{width:_e,height:Q,headerHeight:le}=u.value,ae=c.value=J.offsetWidth;_e!==ae&&(se=!0);const Te=J.offsetHeight;(e.height||b.value)&&Q!==Te&&(se=!0);const ce=e.tableLayout==="fixed"?o.refs.headerWrapper:(N=o.refs.tableHeaderRef)==null?void 0:N.$el;e.showHeader&&(ce==null?void 0:ce.offsetHeight)!==le&&(se=!0),p.value=((D=o.refs.tableWrapper)==null?void 0:D.scrollHeight)||0,m.value=(ce==null?void 0:ce.scrollHeight)||0,v.value=((q=o.refs.footerWrapper)==null?void 0:q.offsetHeight)||0,_.value=((Y=o.refs.appendWrapper)==null?void 0:Y.offsetHeight)||0,h.value=p.value-m.value-v.value-_.value,se&&(u.value={width:ae,height:Te,headerHeight:e.showHeader&&(ce==null?void 0:ce.offsetHeight)||0},x())},z=an(),j=S(()=>{const{bodyWidth:N,scrollY:D,gutterWidth:q}=t;return N.value?`${N.value-(D.value?q:0)}px`:""}),K=S(()=>e.maxHeight?"fixed":e.tableLayout),F=S(()=>{if(e.data&&e.data.length)return null;let N="100%";e.height&&h.value&&(N=`${h.value}px`);const D=c.value;return{width:D?`${D}px`:"",height:N}}),B=S(()=>e.height?{height:Number.isNaN(Number(e.height))?e.height:`${e.height}px`}:e.maxHeight?{maxHeight:Number.isNaN(Number(e.maxHeight))?e.maxHeight:`${e.maxHeight}px`}:{}),I=S(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${m.value+v.value}px)`}:{maxHeight:`${e.maxHeight-m.value-v.value}px`}:{});return{isHidden:a,renderExpanded:r,setDragVisible:i,isGroup:d,handleMouseLeave:g,handleHeaderFooterMousewheel:w,tableSize:z,emptyBlockStyle:F,handleFixedMousewheel:(N,D)=>{const q=o.refs.bodyWrapper;if(Math.abs(D.spinY)>0){const Y=q.scrollTop;D.pixelY<0&&Y!==0&&N.preventDefault(),D.pixelY>0&&q.scrollHeight-q.clientHeight>Y&&N.preventDefault(),q.scrollTop+=Math.ceil(D.pixelY/5)}else q.scrollLeft+=Math.ceil(D.pixelX/5)},resizeProxyVisible:l,bodyWidth:j,resizeState:u,doLayout:x,tableBodyStyles:C,tableLayout:K,scrollbarViewStyle:f,tableInnerStyle:B,scrollbarStyle:I}}function ote(e){const t=R(),n=()=>{const a=e.vnode.el.querySelector(".hidden-columns"),r={childList:!0,subtree:!0},l=e.store.states.updateOrderFns;t.value=new MutationObserver(()=>{l.forEach(i=>i())}),t.value.observe(a,r)};et(()=>{n()}),Ua(()=>{var o;(o=t.value)==null||o.disconnect()})}var ate={data:{type:Array,default:()=>[]},size:cn,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children"})},lazy:Boolean,load:Function,style:{type:Object,default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:Boolean,flexible:Boolean,showOverflowTooltip:[Boolean,Object]};function uy(e){const t=e.tableLayout==="auto";let n=e.columns||[];t&&n.every(a=>a.width===void 0)&&(n=[]);const o=a=>{const r={key:`${e.tableLayout}_${a.id}`,style:{},name:void 0};return t?r.style={width:`${a.width}px`}:r.name=a.id,r};return qe("colgroup",{},n.map(a=>qe("col",o(a))))}uy.props=["columns","tableLayout"];const rte=()=>{const e=R(),t=(r,l)=>{const i=e.value;i&&i.scrollTo(r,l)},n=(r,l)=>{const i=e.value;i&&Ye(l)&&["Top","Left"].includes(r)&&i[`setScroll${r}`](l)};return{scrollBarRef:e,scrollTo:t,setScrollTop:r=>n("Top",r),setScrollLeft:r=>n("Left",r)}};let lte=1;const ste=A({name:"ElTable",directives:{Mousewheel:UD},components:{TableHeader:qee,TableBody:Jee,TableFooter:ete,ElScrollbar:ha,hColgroup:uy},props:ate,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],setup(e){const{t}=_t(),n=me("table"),o=rt();pt(Do,o);const a=Nee(o,e);o.store=a;const r=new Ree({store:o.store,table:o,fit:e.fit,showHeader:e.showHeader});o.layout=r;const l=S(()=>(a.states.data.value||[]).length===0),{setCurrentRow:i,getSelectionRows:u,toggleRowSelection:d,clearSelection:f,clearFilter:c,toggleAllSelection:p,toggleRowExpansion:h,clearSort:m,sort:v}=tte(a),{isHidden:_,renderExpanded:g,setDragVisible:w,isGroup:b,handleMouseLeave:C,handleHeaderFooterMousewheel:x,tableSize:E,emptyBlockStyle:O,handleFixedMousewheel:T,resizeProxyVisible:V,bodyWidth:L,resizeState:P,doLayout:z,tableBodyStyles:j,tableLayout:K,scrollbarViewStyle:F,tableInnerStyle:B,scrollbarStyle:I}=nte(e,r,a,o),{scrollBarRef:H,scrollTo:N,setScrollLeft:D,setScrollTop:q}=rte(),Y=Hn(z,50),J=`${n.namespace.value}-table_${lte++}`;o.tableId=J,o.state={isGroup:b,resizeState:P,doLayout:z,debouncedUpdateLayout:Y};const se=S(()=>e.sumText||t("el.table.sumText")),_e=S(()=>e.emptyText||t("el.table.emptyText"));return ote(o),{ns:n,layout:r,store:a,handleHeaderFooterMousewheel:x,handleMouseLeave:C,tableId:J,tableSize:E,isHidden:_,isEmpty:l,renderExpanded:g,resizeProxyVisible:V,resizeState:P,isGroup:b,bodyWidth:L,tableBodyStyles:j,emptyBlockStyle:O,debouncedUpdateLayout:Y,handleFixedMousewheel:T,setCurrentRow:i,getSelectionRows:u,toggleRowSelection:d,clearSelection:f,clearFilter:c,toggleAllSelection:p,toggleRowExpansion:h,clearSort:m,doLayout:z,sort:v,t,setDragVisible:w,context:o,computedSumText:se,computedEmptyText:_e,tableLayout:K,scrollbarViewStyle:F,tableInnerStyle:B,scrollbarStyle:I,scrollBarRef:H,scrollTo:N,setScrollLeft:D,setScrollTop:q}}}),ite=["data-prefix"],ute={ref:"hiddenColumns",class:"hidden-columns"};function cte(e,t,n,o,a,r){const l=nt("hColgroup"),i=nt("table-header"),u=nt("table-body"),d=nt("table-footer"),f=nt("el-scrollbar"),c=sc("mousewheel");return y(),M("div",{ref:"tableWrapper",class:$([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:De(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:t[0]||(t[0]=(...p)=>e.handleMouseLeave&&e.handleMouseLeave(...p))},[k("div",{class:$(e.ns.e("inner-wrapper")),style:De(e.tableInnerStyle)},[k("div",ute,[re(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?Qe((y(),M("div",{key:0,ref:"headerWrapper",class:$(e.ns.e("header-wrapper"))},[k("table",{ref:"tableHeader",class:$(e.ns.e("header")),style:De(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[W(l,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),W(i,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])],6)],2)),[[c,e.handleHeaderFooterMousewheel]]):Z("v-if",!0),k("div",{ref:"bodyWrapper",class:$(e.ns.e("body-wrapper"))},[W(f,{ref:"scrollBarRef","view-style":e.scrollbarViewStyle,"wrap-style":e.scrollbarStyle,always:e.scrollbarAlwaysOn},{default:G(()=>[k("table",{ref:"tableBody",class:$(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:De({width:e.bodyWidth,tableLayout:e.tableLayout})},[W(l,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(y(),oe(i,{key:0,ref:"tableHeaderRef",class:$(e.ns.e("body-header")),border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["class","border","default-sort","store","onSetDragVisible"])):Z("v-if",!0),W(u,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"tooltip-options":e.tooltipOptions,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&e.tableLayout==="auto"?(y(),oe(d,{key:1,class:$(e.ns.e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):Z("v-if",!0)],6),e.isEmpty?(y(),M("div",{key:0,ref:"emptyBlock",style:De(e.emptyBlockStyle),class:$(e.ns.e("empty-block"))},[k("span",{class:$(e.ns.e("empty-text"))},[re(e.$slots,"empty",{},()=>[vt(Me(e.computedEmptyText),1)])],2)],6)):Z("v-if",!0),e.$slots.append?(y(),M("div",{key:1,ref:"appendWrapper",class:$(e.ns.e("append-wrapper"))},[re(e.$slots,"append")],2)):Z("v-if",!0)]),_:3},8,["view-style","wrap-style","always"])],2),e.showSummary&&e.tableLayout==="fixed"?Qe((y(),M("div",{key:1,ref:"footerWrapper",class:$(e.ns.e("footer-wrapper"))},[k("table",{class:$(e.ns.e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:De(e.tableBodyStyles)},[W(l,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),W(d,{border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[bt,!e.isEmpty],[c,e.handleHeaderFooterMousewheel]]):Z("v-if",!0),e.border||e.isGroup?(y(),M("div",{key:2,class:$(e.ns.e("border-left-patch"))},null,2)):Z("v-if",!0)],6),Qe(k("div",{ref:"resizeProxy",class:$(e.ns.e("column-resize-proxy"))},null,2),[[bt,e.resizeProxyVisible]])],46,ite)}var dte=xe(ste,[["render",cte],["__file","table.vue"]]);const fte={selection:"table-column--selection",expand:"table__expand-column"},pte={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},vte=e=>fte[e]||"",hte={selection:{renderHeader({store:e,column:t}){function n(){return e.states.data.value&&e.states.data.value.length===0}return qe(vo,{disabled:n(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection,modelValue:e.states.isAllSelected.value,ariaLabel:t.label})},renderCell({row:e,column:t,store:n,$index:o}){return qe(vo,{disabled:t.selectable?!t.selectable.call(null,e,o):!1,size:n.states.tableSize.value,onChange:()=>{n.commit("rowSelectedChanged",e)},onClick:a=>a.stopPropagation(),modelValue:n.isSelected(e),ariaLabel:t.label})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let n=t+1;const o=e.index;return typeof o=="number"?n=t+o:typeof o=="function"&&(n=o(t)),qe("div",{},[n])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({row:e,store:t,expanded:n}){const{ns:o}=t,a=[o.e("expand-icon")];return n&&a.push(o.em("expand-icon","expanded")),qe("div",{class:a,onClick:function(l){l.stopPropagation(),t.toggleRowExpansion(e)}},{default:()=>[qe(Be,null,{default:()=>[qe(Sn)]})]})},sortable:!1,resizable:!1}};function mte({row:e,column:t,$index:n}){var o;const a=t.property,r=a&&Xi(e,a).value;return t&&t.formatter?t.formatter(e,t,r,n):((o=r==null?void 0:r.toString)==null?void 0:o.call(r))||""}function gte({row:e,treeNode:t,store:n},o=!1){const{ns:a}=n;if(!t)return o?[qe("span",{class:a.e("placeholder")})]:null;const r=[],l=function(i){i.stopPropagation(),!t.loading&&n.loadOrToggle(e)};if(t.indent&&r.push(qe("span",{class:a.e("indent"),style:{"padding-left":`${t.indent}px`}})),typeof t.expanded=="boolean"&&!t.noLazyChildren){const i=[a.e("expand-icon"),t.expanded?a.em("expand-icon","expanded"):""];let u=Sn;t.loading&&(u=pa),r.push(qe("div",{class:i,onClick:l},{default:()=>[qe(Be,{class:{[a.is("loading")]:t.loading}},{default:()=>[qe(u)]})]}))}else r.push(qe("span",{class:a.e("placeholder")}));return r}function Hh(e,t){return e.reduce((n,o)=>(n[o]=o,n),t)}function yte(e,t){const n=rt();return{registerComplexWatchers:()=>{const r=["fixed"],l={realWidth:"width",realMinWidth:"minWidth"},i=Hh(r,l);Object.keys(i).forEach(u=>{const d=l[u];yt(t,d)&&pe(()=>t[d],f=>{let c=f;d==="width"&&u==="realWidth"&&(c=ap(f)),d==="minWidth"&&u==="realMinWidth"&&(c=ny(f)),n.columnConfig.value[d]=c,n.columnConfig.value[u]=c;const p=d==="fixed";e.value.store.scheduleLayout(p)})})},registerNormalWatchers:()=>{const r=["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip"],l={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},i=Hh(r,l);Object.keys(i).forEach(u=>{const d=l[u];yt(t,d)&&pe(()=>t[d],f=>{n.columnConfig.value[u]=f})})}}}function _te(e,t,n){const o=rt(),a=R(""),r=R(!1),l=R(),i=R(),u=me("table");gn(()=>{l.value=e.align?`is-${e.align}`:null,l.value}),gn(()=>{i.value=e.headerAlign?`is-${e.headerAlign}`:l.value,i.value});const d=S(()=>{let C=o.vnode.vParent||o.parent;for(;C&&!C.tableId&&!C.columnId;)C=C.vnode.vParent||C.parent;return C}),f=S(()=>{const{store:C}=o.parent;if(!C)return!1;const{treeData:x}=C.states,E=x.value;return E&&Object.keys(E).length>0}),c=R(ap(e.width)),p=R(ny(e.minWidth)),h=C=>(c.value&&(C.width=c.value),p.value&&(C.minWidth=p.value),!c.value&&p.value&&(C.width=void 0),C.minWidth||(C.minWidth=80),C.realWidth=Number(C.width===void 0?C.minWidth:C.width),C),m=C=>{const x=C.type,E=hte[x]||{};Object.keys(E).forEach(T=>{const V=E[T];T!=="className"&&V!==void 0&&(C[T]=V)});const O=vte(x);if(O){const T=`${s(u.namespace)}-${O}`;C.className=C.className?`${C.className} ${T}`:T}return C},v=C=>{Array.isArray(C)?C.forEach(E=>x(E)):x(C);function x(E){var O;((O=E==null?void 0:E.type)==null?void 0:O.name)==="ElTableColumn"&&(E.vParent=o)}};return{columnId:a,realAlign:l,isSubColumn:r,realHeaderAlign:i,columnOrTableParent:d,setColumnWidth:h,setColumnForcedProps:m,setColumnRenders:C=>{e.renderHeader||C.type!=="selection"&&(C.renderHeader=E=>(o.columnConfig.value.label,re(t,"header",E,()=>[C.label])));let x=C.renderCell;return C.type==="expand"?(C.renderCell=E=>qe("div",{class:"cell"},[x(E)]),n.value.renderExpanded=E=>t.default?t.default(E):t.default):(x=x||mte,C.renderCell=E=>{let O=null;if(t.default){const j=t.default(E);O=j.some(K=>K.type!==$n)?j:x(E)}else O=x(E);const{columns:T}=n.value.store.states,V=T.value.findIndex(j=>j.type==="default"),L=f.value&&E.cellIndex===V,P=gte(E,L),z={class:"cell",style:{}};return C.showOverflowTooltip&&(z.class=`${z.class} ${s(u.namespace)}-tooltip`,z.style={width:`${(E.column.realWidth||Number(E.column.width))-1}px`}),v(O),qe("div",z,[P,O])}),C},getPropsData:(...C)=>C.reduce((x,E)=>(Array.isArray(E)&&E.forEach(O=>{x[O]=e[O]}),x),{}),getColumnElIndex:(C,x)=>Array.prototype.indexOf.call(C,x),updateColumnOrder:()=>{n.value.store.commit("updateColumnOrder",o.columnConfig.value)}}}var bte={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showOverflowTooltip:{type:[Boolean,Object],default:void 0},fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let wte=1;var cy=A({name:"ElTableColumn",components:{ElCheckbox:vo},props:bte,setup(e,{slots:t}){const n=rt(),o=R({}),a=S(()=>{let b=n.parent;for(;b&&!b.tableId;)b=b.parent;return b}),{registerNormalWatchers:r,registerComplexWatchers:l}=yte(a,e),{columnId:i,isSubColumn:u,realHeaderAlign:d,columnOrTableParent:f,setColumnWidth:c,setColumnForcedProps:p,setColumnRenders:h,getPropsData:m,getColumnElIndex:v,realAlign:_,updateColumnOrder:g}=_te(e,t,a),w=f.value;i.value=`${w.tableId||w.columnId}_column_${wte++}`,cc(()=>{u.value=a.value!==w;const b=e.type||"default",C=e.sortable===""?!0:e.sortable,x=Zt(e.showOverflowTooltip)?w.props.showOverflowTooltip:e.showOverflowTooltip,E={...pte[b],id:i.value,type:b,property:e.prop||e.property,align:_,headerAlign:d,showOverflowTooltip:x,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:C,index:e.index,rawColumnKey:n.vnode.key};let P=m(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);P=wee(E,P),P=See(h,c,p)(P),o.value=P,r(),l()}),et(()=>{var b;const C=f.value,x=u.value?C.vnode.el.children:(b=C.refs.hiddenColumns)==null?void 0:b.children,E=()=>v(x||[],n.vnode.el);o.value.getColumnIndex=E,E()>-1&&a.value.store.commit("insertColumn",o.value,u.value?C.columnConfig.value:null,g)}),It(()=>{a.value.store.commit("removeColumn",o.value,u.value?w.columnConfig.value:null,g)}),n.columnId=i.value,n.columnConfig=o},render(){var e,t,n;try{const o=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),a=[];if(Array.isArray(o))for(const l of o)((n=l.type)==null?void 0:n.name)==="ElTableColumn"||l.shapeFlag&2?a.push(l):l.type===Fe&&Array.isArray(l.children)&&l.children.forEach(i=>{(i==null?void 0:i.patchFlag)!==1024&&!Ze(i==null?void 0:i.children)&&a.push(i)});return qe("div",a)}catch{return qe("div",[])}}});const dy=lt(dte,{TableColumn:cy}),fy=Dt(cy);var Fs=(e=>(e.ASC="asc",e.DESC="desc",e))(Fs||{}),Ks=(e=>(e.CENTER="center",e.RIGHT="right",e))(Ks||{}),py=(e=>(e.LEFT="left",e.RIGHT="right",e))(py||{});const Zf={asc:"desc",desc:"asc"},Ws=Symbol("placeholder"),Cte=(e,t,n)=>{var o;const a={flexGrow:0,flexShrink:0,...n?{}:{flexGrow:e.flexGrow||0,flexShrink:e.flexShrink||1}};n||(a.flexShrink=1);const r={...(o=e.style)!=null?o:{},...a,flexBasis:"auto",width:e.width};return t||(e.maxWidth&&(r.maxWidth=e.maxWidth),e.minWidth&&(r.minWidth=e.minWidth)),r};function Ste(e,t,n){const o=S(()=>s(t).filter(v=>!v.hidden)),a=S(()=>s(o).filter(v=>v.fixed==="left"||v.fixed===!0)),r=S(()=>s(o).filter(v=>v.fixed==="right")),l=S(()=>s(o).filter(v=>!v.fixed)),i=S(()=>{const v=[];return s(a).forEach(_=>{v.push({..._,placeholderSign:Ws})}),s(l).forEach(_=>{v.push(_)}),s(r).forEach(_=>{v.push({..._,placeholderSign:Ws})}),v}),u=S(()=>s(a).length||s(r).length),d=S(()=>s(t).reduce((_,g)=>(_[g.key]=Cte(g,s(n),e.fixed),_),{})),f=S(()=>s(o).reduce((v,_)=>v+_.width,0)),c=v=>s(t).find(_=>_.key===v),p=v=>s(d)[v],h=(v,_)=>{v.width=_};function m(v){var _;const{key:g}=v.currentTarget.dataset;if(!g)return;const{sortState:w,sortBy:b}=e;let C=Fs.ASC;ct(w)?C=Zf[w[g]]:C=Zf[b.order],(_=e.onColumnSort)==null||_.call(e,{column:c(g),key:g,order:C})}return{columns:t,columnsStyles:d,columnsTotalWidth:f,fixedColumnsOnLeft:a,fixedColumnsOnRight:r,hasFixedColumns:u,mainColumns:i,normalColumns:l,visibleColumns:o,getColumn:c,getColumnStyle:p,updateColumnWidth:h,onColumnSorted:m}}const kte=(e,{mainTableRef:t,leftTableRef:n,rightTableRef:o,onMaybeEndReached:a})=>{const r=R({scrollLeft:0,scrollTop:0});function l(h){var m,v,_;const{scrollTop:g}=h;(m=t.value)==null||m.scrollTo(h),(v=n.value)==null||v.scrollToTop(g),(_=o.value)==null||_.scrollToTop(g)}function i(h){r.value=h,l(h)}function u(h){r.value.scrollTop=h,l(s(r))}function d(h){var m,v;r.value.scrollLeft=h,(v=(m=t.value)==null?void 0:m.scrollTo)==null||v.call(m,s(r))}function f(h){var m;i(h),(m=e.onScroll)==null||m.call(e,h)}function c({scrollTop:h}){const{scrollTop:m}=s(r);h!==m&&u(h)}function p(h,m="auto"){var v;(v=t.value)==null||v.scrollToRow(h,m)}return pe(()=>s(r).scrollTop,(h,m)=>{h>m&&a()}),{scrollPos:r,scrollTo:i,scrollToLeft:d,scrollToTop:u,scrollToRow:p,onScroll:f,onVerticalScroll:c}},Ete=(e,{mainTableRef:t,leftTableRef:n,rightTableRef:o})=>{const a=rt(),{emit:r}=a,l=Rt(!1),i=Rt(null),u=R(e.defaultExpandedRowKeys||[]),d=R(-1),f=Rt(null),c=R({}),p=R({}),h=Rt({}),m=Rt({}),v=Rt({}),_=S(()=>Ye(e.estimatedRowHeight));function g(T){var V;(V=e.onRowsRendered)==null||V.call(e,T),T.rowCacheEnd>s(d)&&(d.value=T.rowCacheEnd)}function w({hovered:T,rowKey:V}){i.value=T?V:null}function b({expanded:T,rowData:V,rowIndex:L,rowKey:P}){var z,j;const K=[...s(u)],F=K.indexOf(P);T?F===-1&&K.push(P):F>-1&&K.splice(F,1),u.value=K,r("update:expandedRowKeys",K),(z=e.onRowExpand)==null||z.call(e,{expanded:T,rowData:V,rowIndex:L,rowKey:P}),(j=e.onExpandedRowsChange)==null||j.call(e,K)}const C=Hn(()=>{var T,V,L,P;l.value=!0,c.value={...s(c),...s(p)},x(s(f),!1),p.value={},f.value=null,(T=t.value)==null||T.forceUpdate(),(V=n.value)==null||V.forceUpdate(),(L=o.value)==null||L.forceUpdate(),(P=a.proxy)==null||P.$forceUpdate(),l.value=!1},0);function x(T,V=!1){s(_)&&[t,n,o].forEach(L=>{const P=s(L);P&&P.resetAfterRowIndex(T,V)})}function E(T,V,L){const P=s(f);(P===null||P>L)&&(f.value=L),p.value[T]=V}function O({rowKey:T,height:V,rowIndex:L},P){P?P===py.RIGHT?v.value[T]=V:h.value[T]=V:m.value[T]=V;const z=Math.max(...[h,v,m].map(j=>j.value[T]||0));s(c)[T]!==z&&(E(T,z,L),C())}return{hoveringRowKey:i,expandedRowKeys:u,lastRenderedRowIndex:d,isDynamic:_,isResetting:l,rowHeights:c,resetAfterIndex:x,onRowExpanded:b,onRowHovered:w,onRowsRendered:g,onRowHeightChange:O}},xte=(e,{expandedRowKeys:t,lastRenderedRowIndex:n,resetAfterIndex:o})=>{const a=R({}),r=S(()=>{const i={},{data:u,rowKey:d}=e,f=s(t);if(!f||!f.length)return u;const c=[],p=new Set;f.forEach(m=>p.add(m));let h=u.slice();for(h.forEach(m=>i[m[d]]=0);h.length>0;){const m=h.shift();c.push(m),p.has(m[d])&&Array.isArray(m.children)&&m.children.length>0&&(h=[...m.children,...h],m.children.forEach(v=>i[v[d]]=i[m[d]]+1))}return a.value=i,c}),l=S(()=>{const{data:i,expandColumnKey:u}=e;return u?s(r):i});return pe(l,(i,u)=>{i!==u&&(n.value=-1,o(0,!0))}),{data:l,depthMap:a}},Mte=(e,t)=>e+t,du=e=>Ie(e)?e.reduce(Mte,0):e,Nr=(e,t,n={})=>Xe(e)?e(t):e??n,Ia=e=>(["width","maxWidth","minWidth","height"].forEach(t=>{e[t]=Xt(e[t])}),e),vy=e=>zt(e)?t=>qe(e,t):e,$te=(e,{columnsTotalWidth:t,data:n,fixedColumnsOnLeft:o,fixedColumnsOnRight:a})=>{const r=S(()=>{const{fixed:b,width:C,vScrollbarSize:x}=e,E=C-x;return b?Math.max(Math.round(s(t)),E):E}),l=S(()=>s(r)+e.vScrollbarSize),i=S(()=>{const{height:b=0,maxHeight:C=0,footerHeight:x,hScrollbarSize:E}=e;if(C>0){const O=s(m),T=s(u),L=s(h)+O+T+E;return Math.min(L,C-x)}return b-x}),u=S(()=>{const{rowHeight:b,estimatedRowHeight:C}=e,x=s(n);return Ye(C)?x.length*C:x.length*b}),d=S(()=>{const{maxHeight:b}=e,C=s(i);if(Ye(b)&&b>0)return C;const x=s(u)+s(h)+s(m);return Math.min(C,x)}),f=b=>b.width,c=S(()=>du(s(o).map(f))),p=S(()=>du(s(a).map(f))),h=S(()=>du(e.headerHeight)),m=S(()=>{var b;return(((b=e.fixedData)==null?void 0:b.length)||0)*e.rowHeight}),v=S(()=>s(i)-s(h)-s(m)),_=S(()=>{const{style:b={},height:C,width:x}=e;return Ia({...b,height:C,width:x})}),g=S(()=>Ia({height:e.footerHeight})),w=S(()=>({top:Xt(s(h)),bottom:Xt(e.footerHeight),width:Xt(e.width)}));return{bodyWidth:r,fixedTableHeight:d,mainTableHeight:i,leftTableWidth:c,rightTableWidth:p,headerWidth:l,rowsHeight:u,windowHeight:v,footerHeight:g,emptyStyle:w,rootStyle:_,headerHeight:h}},Tte=e=>{const t=R(),n=R(0),o=R(0);let a;return et(()=>{a=Kt(t,([r])=>{const{width:l,height:i}=r.contentRect,{paddingLeft:u,paddingRight:d,paddingTop:f,paddingBottom:c}=getComputedStyle(r.target),p=Number.parseInt(u)||0,h=Number.parseInt(d)||0,m=Number.parseInt(f)||0,v=Number.parseInt(c)||0;n.value=l-p-h,o.value=i-m-v}).stop}),It(()=>{a==null||a()}),pe([n,o],([r,l])=>{var i;(i=e.onResize)==null||i.call(e,{width:r,height:l})}),{sizer:t,width:n,height:o}};function Ate(e){const t=R(),n=R(),o=R(),{columns:a,columnsStyles:r,columnsTotalWidth:l,fixedColumnsOnLeft:i,fixedColumnsOnRight:u,hasFixedColumns:d,mainColumns:f,onColumnSorted:c}=Ste(e,At(e,"columns"),At(e,"fixed")),{scrollTo:p,scrollToLeft:h,scrollToTop:m,scrollToRow:v,onScroll:_,onVerticalScroll:g,scrollPos:w}=kte(e,{mainTableRef:t,leftTableRef:n,rightTableRef:o,onMaybeEndReached:Ae}),{expandedRowKeys:b,hoveringRowKey:C,lastRenderedRowIndex:x,isDynamic:E,isResetting:O,rowHeights:T,resetAfterIndex:V,onRowExpanded:L,onRowHeightChange:P,onRowHovered:z,onRowsRendered:j}=Ete(e,{mainTableRef:t,leftTableRef:n,rightTableRef:o}),{data:K,depthMap:F}=xte(e,{expandedRowKeys:b,lastRenderedRowIndex:x,resetAfterIndex:V}),{bodyWidth:B,fixedTableHeight:I,mainTableHeight:H,leftTableWidth:N,rightTableWidth:D,headerWidth:q,rowsHeight:Y,windowHeight:J,footerHeight:se,emptyStyle:_e,rootStyle:Q,headerHeight:le}=$te(e,{columnsTotalWidth:l,data:K,fixedColumnsOnLeft:i,fixedColumnsOnRight:u}),ae=Rt(!1),Te=R(),ce=S(()=>{const U=s(K).length===0;return Ie(e.fixedData)?e.fixedData.length===0&&U:U});function ge(U){const{estimatedRowHeight:te,rowHeight:ve,rowKey:be}=e;return te?s(T)[s(K)[U][be]]||te:ve}function Ae(){const{onEndReached:U}=e;if(!U)return;const{scrollTop:te}=s(w),ve=s(Y),be=s(J),ue=ve-(te+be)+e.hScrollbarSize;s(x)>=0&&ve===te+s(H)-s(le)&&U(ue)}return pe(()=>e.expandedRowKeys,U=>b.value=U,{deep:!0}),{columns:a,containerRef:Te,mainTableRef:t,leftTableRef:n,rightTableRef:o,isDynamic:E,isResetting:O,isScrolling:ae,hoveringRowKey:C,hasFixedColumns:d,columnsStyles:r,columnsTotalWidth:l,data:K,expandedRowKeys:b,depthMap:F,fixedColumnsOnLeft:i,fixedColumnsOnRight:u,mainColumns:f,bodyWidth:B,emptyStyle:_e,rootStyle:Q,headerWidth:q,footerHeight:se,mainTableHeight:H,fixedTableHeight:I,leftTableWidth:N,rightTableWidth:D,showEmpty:ce,getRowHeight:ge,onColumnSorted:c,onRowHovered:z,onRowExpanded:L,onRowsRendered:j,onRowHeightChange:P,scrollTo:p,scrollToLeft:h,scrollToTop:m,scrollToRow:v,onScroll:_,onVerticalScroll:g}}const sp=Symbol("tableV2"),hy=String,ci={type:X(Array),required:!0},ip={type:X(Array)},my={...ip,required:!0},Ote=String,Dh={type:X(Array),default:()=>Ht([])},rr={type:Number,required:!0},gy={type:X([String,Number,Symbol]),default:"id"},Fh={type:X(Object)},fr=Ee({class:String,columns:ci,columnsStyles:{type:X(Object),required:!0},depth:Number,expandColumnKey:Ote,estimatedRowHeight:{...br.estimatedRowHeight,default:void 0},isScrolling:Boolean,onRowExpand:{type:X(Function)},onRowHover:{type:X(Function)},onRowHeightChange:{type:X(Function)},rowData:{type:X(Object),required:!0},rowEventHandlers:{type:X(Object)},rowIndex:{type:Number,required:!0},rowKey:gy,style:{type:X(Object)}}),Id={type:Number,required:!0},up=Ee({class:String,columns:ci,fixedHeaderData:{type:X(Array)},headerData:{type:X(Array),required:!0},headerHeight:{type:X([Number,Array]),default:50},rowWidth:Id,rowHeight:{type:Number,default:50},height:Id,width:Id}),fu=Ee({columns:ci,data:my,fixedData:ip,estimatedRowHeight:fr.estimatedRowHeight,width:rr,height:rr,headerWidth:rr,headerHeight:up.headerHeight,bodyWidth:rr,rowHeight:rr,cache:V8.cache,useIsScrolling:Boolean,scrollbarAlwaysOn:br.scrollbarAlwaysOn,scrollbarStartGap:br.scrollbarStartGap,scrollbarEndGap:br.scrollbarEndGap,class:hy,style:Fh,containerStyle:Fh,getRowHeight:{type:X(Function),required:!0},rowKey:fr.rowKey,onRowsRendered:{type:X(Function)},onScroll:{type:X(Function)}}),Nte=Ee({cache:fu.cache,estimatedRowHeight:fr.estimatedRowHeight,rowKey:gy,headerClass:{type:X([String,Function])},headerProps:{type:X([Object,Function])},headerCellProps:{type:X([Object,Function])},headerHeight:up.headerHeight,footerHeight:{type:Number,default:0},rowClass:{type:X([String,Function])},rowProps:{type:X([Object,Function])},rowHeight:{type:Number,default:50},cellProps:{type:X([Object,Function])},columns:ci,data:my,dataGetter:{type:X(Function)},fixedData:ip,expandColumnKey:fr.expandColumnKey,expandedRowKeys:Dh,defaultExpandedRowKeys:Dh,class:hy,fixed:Boolean,style:{type:X(Object)},width:rr,height:rr,maxHeight:Number,useIsScrolling:Boolean,indentSize:{type:Number,default:12},iconSize:{type:Number,default:12},hScrollbarSize:br.hScrollbarSize,vScrollbarSize:br.vScrollbarSize,scrollbarAlwaysOn:H8.alwaysOn,sortBy:{type:X(Object),default:()=>({})},sortState:{type:X(Object),default:void 0},onColumnSort:{type:X(Function)},onExpandedRowsChange:{type:X(Function)},onEndReached:{type:X(Function)},onRowExpand:fr.onRowExpand,onScroll:fu.onScroll,onRowsRendered:fu.onRowsRendered,rowEventHandlers:fr.rowEventHandlers}),cp=(e,{slots:t})=>{var n;const{cellData:o,style:a}=e,r=((n=o==null?void 0:o.toString)==null?void 0:n.call(o))||"",l=re(t,"default",e,()=>[r]);return W("div",{class:e.class,title:r,style:a},[l])};cp.displayName="ElTableV2Cell";cp.inheritAttrs=!1;const dp=(e,{slots:t})=>re(t,"default",e,()=>{var n,o;return[W("div",{class:e.class,title:(n=e.column)==null?void 0:n.title},[(o=e.column)==null?void 0:o.title])]});dp.displayName="ElTableV2HeaderCell";dp.inheritAttrs=!1;const Ite=Ee({class:String,columns:ci,columnsStyles:{type:X(Object),required:!0},headerIndex:Number,style:{type:X(Object)}}),Rte=A({name:"ElTableV2HeaderRow",props:Ite,setup(e,{slots:t}){return()=>{const{columns:n,columnsStyles:o,headerIndex:a,style:r}=e;let l=n.map((i,u)=>t.cell({columns:n,column:i,columnIndex:u,headerIndex:a,style:o[i.key]}));return t.header&&(l=t.header({cells:l.map(i=>Ie(i)&&i.length===1?i[0]:i),columns:n,headerIndex:a})),W("div",{class:e.class,style:r,role:"row"},[l])}}}),Pte="ElTableV2Header",Lte=A({name:Pte,props:up,setup(e,{slots:t,expose:n}){const o=me("table-v2"),a=R(),r=S(()=>Ia({width:e.width,height:e.height})),l=S(()=>Ia({width:e.rowWidth,height:e.height})),i=S(()=>kr(s(e.headerHeight))),u=c=>{const p=s(a);We(()=>{p!=null&&p.scroll&&p.scroll({left:c})})},d=()=>{const c=o.e("fixed-header-row"),{columns:p,fixedHeaderData:h,rowHeight:m}=e;return h==null?void 0:h.map((v,_)=>{var g;const w=Ia({height:m,width:"100%"});return(g=t.fixed)==null?void 0:g.call(t,{class:c,columns:p,rowData:v,rowIndex:-(_+1),style:w})})},f=()=>{const c=o.e("dynamic-header-row"),{columns:p}=e;return s(i).map((h,m)=>{var v;const _=Ia({width:"100%",height:h});return(v=t.dynamic)==null?void 0:v.call(t,{class:c,columns:p,headerIndex:m,style:_})})};return n({scrollToLeft:u}),()=>{if(!(e.height<=0))return W("div",{ref:a,class:e.class,style:s(r),role:"rowgroup"},[W("div",{style:s(l),class:o.e("header")},[f(),d()])])}}}),Vte=e=>{const{isScrolling:t}=Pe(sp),n=R(!1),o=R(),a=S(()=>Ye(e.estimatedRowHeight)&&e.rowIndex>=0),r=(u=!1)=>{const d=s(o);if(!d)return;const{columns:f,onRowHeightChange:c,rowKey:p,rowIndex:h,style:m}=e,{height:v}=d.getBoundingClientRect();n.value=!0,We(()=>{if(u||v!==Number.parseInt(m.height)){const _=f[0],g=(_==null?void 0:_.placeholderSign)===Ws;c==null||c({rowKey:p,height:v,rowIndex:h},_&&!g&&_.fixed)}})},l=S(()=>{const{rowData:u,rowIndex:d,rowKey:f,onRowHover:c}=e,p=e.rowEventHandlers||{},h={};return Object.entries(p).forEach(([m,v])=>{Xe(v)&&(h[m]=_=>{v({event:_,rowData:u,rowIndex:d,rowKey:f})})}),c&&[{name:"onMouseleave",hovered:!1},{name:"onMouseenter",hovered:!0}].forEach(({name:m,hovered:v})=>{const _=h[m];h[m]=g=>{c({event:g,hovered:v,rowData:u,rowIndex:d,rowKey:f}),_==null||_(g)}}),h}),i=u=>{const{onRowExpand:d,rowData:f,rowIndex:c,rowKey:p}=e;d==null||d({expanded:u,rowData:f,rowIndex:c,rowKey:p})};return et(()=>{s(a)&&r(!0)}),{isScrolling:t,measurable:a,measured:n,rowRef:o,eventHandlers:l,onExpand:i}},Bte="ElTableV2TableRow",zte=A({name:Bte,props:fr,setup(e,{expose:t,slots:n,attrs:o}){const{eventHandlers:a,isScrolling:r,measurable:l,measured:i,rowRef:u,onExpand:d}=Vte(e);return t({onExpand:d}),()=>{const{columns:f,columnsStyles:c,expandColumnKey:p,depth:h,rowData:m,rowIndex:v,style:_}=e;let g=f.map((w,b)=>{const C=Ie(m.children)&&m.children.length>0&&w.key===p;return n.cell({column:w,columns:f,columnIndex:b,depth:h,style:c[w.key],rowData:m,rowIndex:v,isScrolling:s(r),expandIconProps:C?{rowData:m,rowIndex:v,onExpand:d}:void 0})});if(n.row&&(g=n.row({cells:g.map(w=>Ie(w)&&w.length===1?w[0]:w),style:_,columns:f,depth:h,rowData:m,rowIndex:v,isScrolling:s(r)})),s(l)){const{height:w,...b}=_||{},C=s(i);return W("div",ft({ref:u,class:e.class,style:C?_:b,role:"row"},o,s(a)),[g])}return W("div",ft(o,{ref:u,class:e.class,style:_,role:"row"},s(a)),[g])}}}),Hte=e=>{const{sortOrder:t}=e;return W(Be,{size:14,class:e.class},{default:()=>[t===Fs.ASC?W(Yg,null,null):W(Ug,null,null)]})},Dte=e=>{const{expanded:t,expandable:n,onExpand:o,style:a,size:r}=e,l={onClick:n?()=>o(!t):void 0,class:e.class};return W(Be,ft(l,{size:r,style:a}),{default:()=>[W(Sn,null,null)]})},Fte="ElTableV2Grid",Kte=e=>{const t=R(),n=R(),o=S(()=>{const{data:v,rowHeight:_,estimatedRowHeight:g}=e;if(!g)return v.length*_}),a=S(()=>{const{fixedData:v,rowHeight:_}=e;return((v==null?void 0:v.length)||0)*_}),r=S(()=>du(e.headerHeight)),l=S(()=>{const{height:v}=e;return Math.max(0,v-s(r)-s(a))}),i=S(()=>s(r)+s(a)>0),u=({data:v,rowIndex:_})=>v[_][e.rowKey];function d({rowCacheStart:v,rowCacheEnd:_,rowVisibleStart:g,rowVisibleEnd:w}){var b;(b=e.onRowsRendered)==null||b.call(e,{rowCacheStart:v,rowCacheEnd:_,rowVisibleStart:g,rowVisibleEnd:w})}function f(v,_){var g;(g=n.value)==null||g.resetAfterRowIndex(v,_)}function c(v,_){const g=s(t),w=s(n);!g||!w||(ct(v)?(g.scrollToLeft(v.scrollLeft),w.scrollTo(v)):(g.scrollToLeft(v),w.scrollTo({scrollLeft:v,scrollTop:_})))}function p(v){var _;(_=s(n))==null||_.scrollTo({scrollTop:v})}function h(v,_){var g;(g=s(n))==null||g.scrollToItem(v,1,_)}function m(){var v,_;(v=s(n))==null||v.$forceUpdate(),(_=s(t))==null||_.$forceUpdate()}return{bodyRef:n,forceUpdate:m,fixedRowHeight:a,gridHeight:l,hasHeader:i,headerHeight:r,headerRef:t,totalHeight:o,itemKey:u,onItemRendered:d,resetAfterRowIndex:f,scrollTo:c,scrollToTop:p,scrollToRow:h}},fp=A({name:Fte,props:fu,setup(e,{slots:t,expose:n}){const{ns:o}=Pe(sp),{bodyRef:a,fixedRowHeight:r,gridHeight:l,hasHeader:i,headerRef:u,headerHeight:d,totalHeight:f,forceUpdate:c,itemKey:p,onItemRendered:h,resetAfterRowIndex:m,scrollTo:v,scrollToTop:_,scrollToRow:g}=Kte(e);n({forceUpdate:c,totalHeight:f,scrollTo:v,scrollToTop:_,scrollToRow:g,resetAfterRowIndex:m});const w=()=>e.bodyWidth;return()=>{const{cache:b,columns:C,data:x,fixedData:E,useIsScrolling:O,scrollbarAlwaysOn:T,scrollbarEndGap:V,scrollbarStartGap:L,style:P,rowHeight:z,bodyWidth:j,estimatedRowHeight:K,headerWidth:F,height:B,width:I,getRowHeight:H,onScroll:N}=e,D=Ye(K),q=D?AZ:xZ,Y=s(d);return W("div",{role:"table",class:[o.e("table"),e.class],style:P},[W(q,{ref:a,data:x,useIsScrolling:O,itemKey:p,columnCache:0,columnWidth:D?w:j,totalColumn:1,totalRow:x.length,rowCache:b,rowHeight:D?H:z,width:I,height:s(l),class:o.e("body"),role:"rowgroup",scrollbarStartGap:L,scrollbarEndGap:V,scrollbarAlwaysOn:T,onScroll:N,onItemRendered:h,perfMode:!1},{default:J=>{var se;const _e=x[J.rowIndex];return(se=t.row)==null?void 0:se.call(t,{...J,columns:C,rowData:_e})}}),s(i)&&W(Lte,{ref:u,class:o.e("header-wrapper"),columns:C,headerData:x,headerHeight:e.headerHeight,fixedHeaderData:E,rowWidth:F,rowHeight:z,width:I,height:Math.min(Y+s(r),B)},{dynamic:t.header,fixed:t.row})])}}});function Wte(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!zt(e)}const jte=(e,{slots:t})=>{const{mainTableRef:n,...o}=e;return W(fp,ft({ref:n},o),Wte(t)?t:{default:()=>[t]})};function qte(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!zt(e)}const Ute=(e,{slots:t})=>{if(!e.columns.length)return;const{leftTableRef:n,...o}=e;return W(fp,ft({ref:n},o),qte(t)?t:{default:()=>[t]})};function Yte(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!zt(e)}const Gte=(e,{slots:t})=>{if(!e.columns.length)return;const{rightTableRef:n,...o}=e;return W(fp,ft({ref:n},o),Yte(t)?t:{default:()=>[t]})};function Xte(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!zt(e)}const Jte=(e,{slots:t})=>{const{columns:n,columnsStyles:o,depthMap:a,expandColumnKey:r,expandedRowKeys:l,estimatedRowHeight:i,hasFixedColumns:u,hoveringRowKey:d,rowData:f,rowIndex:c,style:p,isScrolling:h,rowProps:m,rowClass:v,rowKey:_,rowEventHandlers:g,ns:w,onRowHovered:b,onRowExpanded:C}=e,x=Nr(v,{columns:n,rowData:f,rowIndex:c},""),E=Nr(m,{columns:n,rowData:f,rowIndex:c}),O=f[_],T=a[O]||0,V=!!r,L=c<0,P=[w.e("row"),x,{[w.e(`row-depth-${T}`)]:V&&c>=0,[w.is("expanded")]:V&&l.includes(O),[w.is("hovered")]:!h&&O===d,[w.is("fixed")]:!T&&L,[w.is("customized")]:!!t.row}],z=u?b:void 0,j={...E,columns:n,columnsStyles:o,class:P,depth:T,expandColumnKey:r,estimatedRowHeight:L?void 0:i,isScrolling:h,rowIndex:c,rowData:f,rowKey:O,rowEventHandlers:g,style:p};return W(zte,ft(j,{onRowHover:z,onRowExpand:C}),Xte(t)?t:{default:()=>[t]})},Qf=({columns:e,column:t,columnIndex:n,depth:o,expandIconProps:a,isScrolling:r,rowData:l,rowIndex:i,style:u,expandedRowKeys:d,ns:f,cellProps:c,expandColumnKey:p,indentSize:h,iconSize:m,rowKey:v},{slots:_})=>{const g=Ia(u);if(t.placeholderSign===Ws)return W("div",{class:f.em("row-cell","placeholder"),style:g},null);const{cellRenderer:w,dataKey:b,dataGetter:C}=t,x=Xe(C)?C({columns:e,column:t,columnIndex:n,rowData:l,rowIndex:i}):Gt(l,b??""),E=Nr(c,{cellData:x,columns:e,column:t,columnIndex:n,rowIndex:i,rowData:l}),O={class:f.e("cell-text"),columns:e,column:t,columnIndex:n,cellData:x,isScrolling:r,rowData:l,rowIndex:i},T=vy(w),V=T?T(O):re(_,"default",O,()=>[W(cp,O,null)]),L=[f.e("row-cell"),t.class,t.align===Ks.CENTER&&f.is("align-center"),t.align===Ks.RIGHT&&f.is("align-right")],P=i>=0&&p&&t.key===p,z=i>=0&&d.includes(l[v]);let j;const K=`margin-inline-start: ${o*h}px;`;return P&&(ct(a)?j=W(Dte,ft(a,{class:[f.e("expand-icon"),f.is("expanded",z)],size:m,expanded:z,style:K,expandable:!0}),null):j=W("div",{style:[K,`width: ${m}px; height: ${m}px;`].join(" ")},null)),W("div",ft({class:L,style:g},E,{role:"cell"}),[j,V])};Qf.inheritAttrs=!1;function Zte(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!zt(e)}const Qte=({columns:e,columnsStyles:t,headerIndex:n,style:o,headerClass:a,headerProps:r,ns:l},{slots:i})=>{const u={columns:e,headerIndex:n},d=[l.e("header-row"),Nr(a,u,""),{[l.is("customized")]:!!i.header}],f={...Nr(r,u),columnsStyles:t,class:d,columns:e,headerIndex:n,style:o};return W(Rte,f,Zte(i)?i:{default:()=>[i]})},Kh=(e,{slots:t})=>{const{column:n,ns:o,style:a,onColumnSorted:r}=e,l=Ia(a);if(n.placeholderSign===Ws)return W("div",{class:o.em("header-row-cell","placeholder"),style:l},null);const{headerCellRenderer:i,headerClass:u,sortable:d}=n,f={...e,class:o.e("header-cell-text")},c=vy(i),p=c?c(f):re(t,"default",f,()=>[W(dp,f,null)]),{sortBy:h,sortState:m,headerCellProps:v}=e;let _,g;if(m){const C=m[n.key];_=!!Zf[C],g=_?C:Fs.ASC}else _=n.key===h.key,g=_?h.order:Fs.ASC;const w=[o.e("header-cell"),Nr(u,e,""),n.align===Ks.CENTER&&o.is("align-center"),n.align===Ks.RIGHT&&o.is("align-right"),d&&o.is("sortable")],b={...Nr(v,e),onClick:n.sortable?r:void 0,class:w,style:l,"data-key":n.key};return W("div",ft(b,{role:"columnheader"}),[p,d&&W(Hte,{class:[o.e("sort-icon"),_&&o.is("sorting")],sortOrder:g},null)])},yy=(e,{slots:t})=>{var n;return W("div",{class:e.class,style:e.style},[(n=t.default)==null?void 0:n.call(t)])};yy.displayName="ElTableV2Footer";const _y=(e,{slots:t})=>{const n=re(t,"default",{},()=>[W(w8,null,null)]);return W("div",{class:e.class,style:e.style},[n])};_y.displayName="ElTableV2Empty";const by=(e,{slots:t})=>{var n;return W("div",{class:e.class,style:e.style},[(n=t.default)==null?void 0:n.call(t)])};by.displayName="ElTableV2Overlay";function Gl(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!zt(e)}const ene="ElTableV2",tne=A({name:ene,props:Nte,setup(e,{slots:t,expose:n}){const o=me("table-v2"),{columnsStyles:a,fixedColumnsOnLeft:r,fixedColumnsOnRight:l,mainColumns:i,mainTableHeight:u,fixedTableHeight:d,leftTableWidth:f,rightTableWidth:c,data:p,depthMap:h,expandedRowKeys:m,hasFixedColumns:v,hoveringRowKey:_,mainTableRef:g,leftTableRef:w,rightTableRef:b,isDynamic:C,isResetting:x,isScrolling:E,bodyWidth:O,emptyStyle:T,rootStyle:V,headerWidth:L,footerHeight:P,showEmpty:z,scrollTo:j,scrollToLeft:K,scrollToTop:F,scrollToRow:B,getRowHeight:I,onColumnSorted:H,onRowHeightChange:N,onRowHovered:D,onRowExpanded:q,onRowsRendered:Y,onScroll:J,onVerticalScroll:se}=Ate(e);return n({scrollTo:j,scrollToLeft:K,scrollToTop:F,scrollToRow:B}),pt(sp,{ns:o,isResetting:x,hoveringRowKey:_,isScrolling:E}),()=>{const{cache:_e,cellProps:Q,estimatedRowHeight:le,expandColumnKey:ae,fixedData:Te,headerHeight:ce,headerClass:ge,headerProps:Ae,headerCellProps:U,sortBy:te,sortState:ve,rowHeight:be,rowClass:ue,rowEventHandlers:ye,rowKey:we,rowProps:Ce,scrollbarAlwaysOn:he,indentSize:Se,iconSize:Re,useIsScrolling:He,vScrollbarSize:de,width:Le}=e,Ue=s(p),ot={cache:_e,class:o.e("main"),columns:s(i),data:Ue,fixedData:Te,estimatedRowHeight:le,bodyWidth:s(O)+de,headerHeight:ce,headerWidth:s(L),height:s(u),mainTableRef:g,rowKey:we,rowHeight:be,scrollbarAlwaysOn:he,scrollbarStartGap:2,scrollbarEndGap:de,useIsScrolling:He,width:Le,getRowHeight:I,onRowsRendered:Y,onScroll:J},dt=s(f),je=s(d),fe={cache:_e,class:o.e("left"),columns:s(r),data:Ue,estimatedRowHeight:le,leftTableRef:w,rowHeight:be,bodyWidth:dt,headerWidth:dt,headerHeight:ce,height:je,rowKey:we,scrollbarAlwaysOn:he,scrollbarStartGap:2,scrollbarEndGap:de,useIsScrolling:He,width:dt,getRowHeight:I,onScroll:se},ee=s(c)+de,ie={cache:_e,class:o.e("right"),columns:s(l),data:Ue,estimatedRowHeight:le,rightTableRef:b,rowHeight:be,bodyWidth:ee,headerWidth:ee,headerHeight:ce,height:je,rowKey:we,scrollbarAlwaysOn:he,scrollbarStartGap:2,scrollbarEndGap:de,width:ee,style:`--${s(o.namespace)}-table-scrollbar-size: ${de}px`,useIsScrolling:He,getRowHeight:I,onScroll:se},ke=s(a),ne={ns:o,depthMap:s(h),columnsStyles:ke,expandColumnKey:ae,expandedRowKeys:s(m),estimatedRowHeight:le,hasFixedColumns:s(v),hoveringRowKey:s(_),rowProps:Ce,rowClass:ue,rowKey:we,rowEventHandlers:ye,onRowHovered:D,onRowExpanded:q,onRowHeightChange:N},ze={cellProps:Q,expandColumnKey:ae,indentSize:Se,iconSize:Re,rowKey:we,expandedRowKeys:s(m),ns:o},tt={ns:o,headerClass:ge,headerProps:Ae,columnsStyles:ke},St={ns:o,sortBy:te,sortState:ve,headerCellProps:U,onColumnSorted:H},Ot={row:kt=>W(Jte,ft(kt,ne),{row:t.row,cell:Ft=>{let Fn;return t.cell?W(Qf,ft(Ft,ze,{style:ke[Ft.column.key]}),Gl(Fn=t.cell(Ft))?Fn:{default:()=>[Fn]}):W(Qf,ft(Ft,ze,{style:ke[Ft.column.key]}),null)}}),header:kt=>W(Qte,ft(kt,tt),{header:t.header,cell:Ft=>{let Fn;return t["header-cell"]?W(Kh,ft(Ft,St,{style:ke[Ft.column.key]}),Gl(Fn=t["header-cell"](Ft))?Fn:{default:()=>[Fn]}):W(Kh,ft(Ft,St,{style:ke[Ft.column.key]}),null)}})},ho=[e.class,o.b(),o.e("root"),{[o.is("dynamic")]:s(C)}],qt={class:o.e("footer"),style:s(P)};return W("div",{class:ho,style:s(V)},[W(jte,ot,Gl(Ot)?Ot:{default:()=>[Ot]}),W(Ute,fe,Gl(Ot)?Ot:{default:()=>[Ot]}),W(Gte,ie,Gl(Ot)?Ot:{default:()=>[Ot]}),t.footer&&W(yy,qt,{default:t.footer}),s(z)&&W(_y,{class:o.e("empty"),style:s(T)},{default:t.empty}),t.overlay&&W(by,{class:o.e("overlay")},{default:t.overlay})])}}}),nne=Ee({disableWidth:Boolean,disableHeight:Boolean,onResize:{type:X(Function)}}),one=A({name:"ElAutoResizer",props:nne,setup(e,{slots:t}){const n=me("auto-resizer"),{height:o,width:a,sizer:r}=Tte(e),l={width:"100%",height:"100%"};return()=>{var i;return W("div",{ref:r,class:n.b(),style:l},[(i=t.default)==null?void 0:i.call(t,{height:o.value,width:a.value})])}}}),ane=lt(tne),rne=lt(one),Dc=Symbol("tabsRootContextKey"),lne=Ee({tabs:{type:X(Array),default:()=>Ht([])}}),wy="ElTabBar",sne=A({name:wy}),ine=A({...sne,props:lne,setup(e,{expose:t}){const n=e,o=rt(),a=Pe(Dc);a||on(wy,"");const r=me("tabs"),l=R(),i=R(),u=()=>{let f=0,c=0;const p=["top","bottom"].includes(a.props.tabPosition)?"width":"height",h=p==="width"?"x":"y",m=h==="x"?"left":"top";return n.tabs.every(v=>{var _,g;const w=(g=(_=o.parent)==null?void 0:_.refs)==null?void 0:g[`tab-${v.uid}`];if(!w)return!1;if(!v.active)return!0;f=w[`offset${Ao(m)}`],c=w[`client${Ao(p)}`];const b=window.getComputedStyle(w);return p==="width"&&(n.tabs.length>1&&(c-=Number.parseFloat(b.paddingLeft)+Number.parseFloat(b.paddingRight)),f+=Number.parseFloat(b.paddingLeft)),!1}),{[p]:`${c}px`,transform:`translate${Ao(h)}(${f}px)`}},d=()=>i.value=u();return pe(()=>n.tabs,async()=>{await We(),d()},{immediate:!0}),Kt(l,()=>d()),t({ref:l,update:d}),(f,c)=>(y(),M("div",{ref_key:"barRef",ref:l,class:$([s(r).e("active-bar"),s(r).is(s(a).props.tabPosition)]),style:De(i.value)},null,6))}});var une=xe(ine,[["__file","tab-bar.vue"]]);const cne=Ee({panes:{type:X(Array),default:()=>Ht([])},currentName:{type:[String,Number],default:""},editable:Boolean,type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean}),dne={tabClick:(e,t,n)=>n instanceof Event,tabRemove:(e,t)=>t instanceof Event},Wh="ElTabNav",fne=A({name:Wh,props:cne,emits:dne,setup(e,{expose:t,emit:n}){const o=rt(),a=Pe(Dc);a||on(Wh,"");const r=me("tabs"),l=m5(),i=$5(),u=R(),d=R(),f=R(),c=R(),p=R(!1),h=R(0),m=R(!1),v=R(!0),_=S(()=>["top","bottom"].includes(a.props.tabPosition)?"width":"height"),g=S(()=>({transform:`translate${_.value==="width"?"X":"Y"}(-${h.value}px)`})),w=()=>{if(!u.value)return;const V=u.value[`offset${Ao(_.value)}`],L=h.value;if(!L)return;const P=L>V?L-V:0;h.value=P},b=()=>{if(!u.value||!d.value)return;const V=d.value[`offset${Ao(_.value)}`],L=u.value[`offset${Ao(_.value)}`],P=h.value;if(V-P<=L)return;const z=V-P>L*2?P+L:V-L;h.value=z},C=async()=>{const V=d.value;if(!p.value||!f.value||!u.value||!V)return;await We();const L=f.value.querySelector(".is-active");if(!L)return;const P=u.value,z=["top","bottom"].includes(a.props.tabPosition),j=L.getBoundingClientRect(),K=P.getBoundingClientRect(),F=z?V.offsetWidth-K.width:V.offsetHeight-K.height,B=h.value;let I=B;z?(j.leftK.right&&(I=B+j.right-K.right)):(j.topK.bottom&&(I=B+(j.bottom-K.bottom))),I=Math.max(I,0),h.value=Math.min(I,F)},x=()=>{var V;if(!d.value||!u.value)return;e.stretch&&((V=c.value)==null||V.update());const L=d.value[`offset${Ao(_.value)}`],P=u.value[`offset${Ao(_.value)}`],z=h.value;P0&&(h.value=0))},E=V=>{const L=V.code,{up:P,down:z,left:j,right:K}=Ke;if(![P,z,j,K].includes(L))return;const F=Array.from(V.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)")),B=F.indexOf(V.target);let I;L===j||L===P?B===0?I=F.length-1:I=B-1:B{v.value&&(m.value=!0)},T=()=>m.value=!1;return pe(l,V=>{V==="hidden"?v.value=!1:V==="visible"&&setTimeout(()=>v.value=!0,50)}),pe(i,V=>{V?setTimeout(()=>v.value=!0,50):v.value=!1}),Kt(f,x),et(()=>setTimeout(()=>C(),0)),ua(()=>x()),t({scrollToActiveTab:C,removeFocus:T}),pe(()=>e.panes,()=>o.update(),{flush:"post",deep:!0}),()=>{const V=p.value?[W("span",{class:[r.e("nav-prev"),r.is("disabled",!p.value.prev)],onClick:w},[W(Be,null,{default:()=>[W(aa,null,null)]})]),W("span",{class:[r.e("nav-next"),r.is("disabled",!p.value.next)],onClick:b},[W(Be,null,{default:()=>[W(Sn,null,null)]})])]:null,L=e.panes.map((P,z)=>{var j,K,F,B;const I=P.uid,H=P.props.disabled,N=(K=(j=P.props.name)!=null?j:P.index)!=null?K:`${z}`,D=!H&&(P.isClosable||e.editable);P.index=`${z}`;const q=D?W(Be,{class:"is-icon-close",onClick:se=>n("tabRemove",P,se)},{default:()=>[W(uo,null,null)]}):null,Y=((B=(F=P.slots).label)==null?void 0:B.call(F))||P.props.label,J=!H&&P.active?0:-1;return W("div",{ref:`tab-${I}`,class:[r.e("item"),r.is(a.props.tabPosition),r.is("active",P.active),r.is("disabled",H),r.is("closable",D),r.is("focus",m.value)],id:`tab-${N}`,key:`tab-${I}`,"aria-controls":`pane-${N}`,role:"tab","aria-selected":P.active,tabindex:J,onFocus:()=>O(),onBlur:()=>T(),onClick:se=>{T(),n("tabClick",P,N,se)},onKeydown:se=>{D&&(se.code===Ke.delete||se.code===Ke.backspace)&&n("tabRemove",P,se)}},[Y,q])});return W("div",{ref:f,class:[r.e("nav-wrap"),r.is("scrollable",!!p.value),r.is(a.props.tabPosition)]},[V,W("div",{class:r.e("nav-scroll"),ref:u},[W("div",{class:[r.e("nav"),r.is(a.props.tabPosition),r.is("stretch",e.stretch&&["top","bottom"].includes(a.props.tabPosition))],ref:d,style:g.value,role:"tablist",onKeydown:E},[e.type?null:W(une,{ref:c,tabs:[...e.panes]},null),L])])])}}}),pne=Ee({type:{type:String,values:["card","border-card",""],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number]},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:X(Function),default:()=>!0},stretch:Boolean}),Rd=e=>Ze(e)||Ye(e),vne={[it]:e=>Rd(e),tabClick:(e,t)=>t instanceof Event,tabChange:e=>Rd(e),edit:(e,t)=>["remove","add"].includes(t),tabRemove:e=>Rd(e),tabAdd:()=>!0},hne=A({name:"ElTabs",props:pne,emits:vne,setup(e,{emit:t,slots:n,expose:o}){var a;const r=me("tabs"),{children:l,addChild:i,removeChild:u}=I2(rt(),"ElTabPane"),d=R(),f=R((a=e.modelValue)!=null?a:"0"),c=async(v,_=!1)=>{var g,w,b;if(!(f.value===v||Zt(v)))try{await((g=e.beforeLeave)==null?void 0:g.call(e,v,f.value))!==!1&&(f.value=v,_&&(t(it,v),t("tabChange",v)),(b=(w=d.value)==null?void 0:w.removeFocus)==null||b.call(w))}catch{}},p=(v,_,g)=>{v.props.disabled||(c(_,!0),t("tabClick",v,g))},h=(v,_)=>{v.props.disabled||Zt(v.props.name)||(_.stopPropagation(),t("edit",v.props.name,"remove"),t("tabRemove",v.props.name))},m=()=>{t("edit",void 0,"add"),t("tabAdd")};return pe(()=>e.modelValue,v=>c(v)),pe(f,async()=>{var v;await We(),(v=d.value)==null||v.scrollToActiveTab()}),pt(Dc,{props:e,currentName:f,registerPane:i,unregisterPane:u}),o({currentName:f}),()=>{const v=n["add-icon"],_=e.editable||e.addable?W("span",{class:r.e("new-tab"),tabindex:"0",onClick:m,onKeydown:b=>{b.code===Ke.enter&&m()}},[v?re(n,"add-icon"):W(Be,{class:r.is("icon-plus")},{default:()=>[W(s2,null,null)]})]):null,g=W("div",{class:[r.e("header"),r.is(e.tabPosition)]},[_,W(fne,{ref:d,currentName:f.value,editable:e.editable,type:e.type,panes:l.value,stretch:e.stretch,onTabClick:p,onTabRemove:h},null)]),w=W("div",{class:r.e("content")},[re(n,"default")]);return W("div",{class:[r.b(),r.m(e.tabPosition),{[r.m("card")]:e.type==="card",[r.m("border-card")]:e.type==="border-card"}]},[...e.tabPosition!=="bottom"?[g,w]:[w,g]])}}}),mne=Ee({label:{type:String,default:""},name:{type:[String,Number]},closable:Boolean,disabled:Boolean,lazy:Boolean}),gne=["id","aria-hidden","aria-labelledby"],Cy="ElTabPane",yne=A({name:Cy}),_ne=A({...yne,props:mne,setup(e){const t=e,n=rt(),o=fn(),a=Pe(Dc);a||on(Cy,"usage: ");const r=me("tab-pane"),l=R(),i=S(()=>t.closable||a.props.closable),u=wv(()=>{var h;return a.currentName.value===((h=t.name)!=null?h:l.value)}),d=R(u.value),f=S(()=>{var h;return(h=t.name)!=null?h:l.value}),c=wv(()=>!t.lazy||d.value||u.value);pe(u,h=>{h&&(d.value=!0)});const p=wt({uid:n.uid,slots:o,props:t,paneName:f,active:u,index:l,isClosable:i});return et(()=>{a.registerPane(p)}),Ua(()=>{a.unregisterPane(p.uid)}),(h,m)=>s(c)?Qe((y(),M("div",{key:0,id:`pane-${s(f)}`,class:$(s(r).b()),role:"tabpanel","aria-hidden":!s(u),"aria-labelledby":`tab-${s(f)}`},[re(h.$slots,"default")],10,gne)),[[bt,s(u)]]):Z("v-if",!0)}});var Sy=xe(_ne,[["__file","tab-pane.vue"]]);const bne=lt(hne,{TabPane:Sy}),wne=Dt(Sy),Cne=Ee({type:{type:String,values:["primary","success","info","warning","danger",""],default:""},size:{type:String,values:zo,default:""},truncated:{type:Boolean},lineClamp:{type:[String,Number]},tag:{type:String,default:"span"}}),Sne=A({name:"ElText"}),kne=A({...Sne,props:Cne,setup(e){const t=e,n=an(),o=me("text"),a=S(()=>[o.b(),o.m(t.type),o.m(n.value),o.is("truncated",t.truncated),o.is("line-clamp",!Zt(t.lineClamp))]);return(r,l)=>(y(),oe(ut(r.tag),{class:$(s(a)),style:De({"-webkit-line-clamp":r.lineClamp})},{default:G(()=>[re(r.$slots,"default")]),_:3},8,["class","style"]))}});var Ene=xe(kne,[["__file","text.vue"]]);const xne=lt(Ene),Mne=Ee({format:{type:String,default:"HH:mm"},modelValue:String,disabled:Boolean,editable:{type:Boolean,default:!0},effect:{type:String,default:"light"},clearable:{type:Boolean,default:!0},size:cn,placeholder:String,start:{type:String,default:"09:00"},end:{type:String,default:"18:00"},step:{type:String,default:"00:30"},minTime:String,maxTime:String,name:String,prefixIcon:{type:X([String,Object]),default:()=>l2},clearIcon:{type:X([String,Object]),default:()=>fa}}),Xo=e=>{const t=(e||"").split(":");if(t.length>=2){let n=Number.parseInt(t[0],10);const o=Number.parseInt(t[1],10),a=e.toUpperCase();return a.includes("AM")&&n===12?n=0:a.includes("PM")&&n!==12&&(n+=12),{hours:n,minutes:o}}return null},Pd=(e,t)=>{const n=Xo(e);if(!n)return-1;const o=Xo(t);if(!o)return-1;const a=n.minutes+n.hours*60,r=o.minutes+o.hours*60;return a===r?0:a>r?1:-1},jh=e=>`${e}`.padStart(2,"0"),Xr=e=>`${jh(e.hours)}:${jh(e.minutes)}`,$ne=(e,t)=>{const n=Xo(e);if(!n)return"";const o=Xo(t);if(!o)return"";const a={hours:n.hours,minutes:n.minutes};return a.minutes+=o.minutes,a.hours+=o.hours,a.hours+=Math.floor(a.minutes/60),a.minutes=a.minutes%60,Xr(a)},Tne=A({name:"ElTimeSelect"}),Ane=A({...Tne,props:Mne,emits:["change","blur","focus","update:modelValue"],setup(e,{expose:t}){const n=e;at.extend(H2);const{Option:o}=Or,a=me("input"),r=R(),l=Dn(),{lang:i}=_t(),u=S(()=>n.modelValue),d=S(()=>{const g=Xo(n.start);return g?Xr(g):null}),f=S(()=>{const g=Xo(n.end);return g?Xr(g):null}),c=S(()=>{const g=Xo(n.step);return g?Xr(g):null}),p=S(()=>{const g=Xo(n.minTime||"");return g?Xr(g):null}),h=S(()=>{const g=Xo(n.maxTime||"");return g?Xr(g):null}),m=S(()=>{const g=[];if(n.start&&n.end&&n.step){let w=d.value,b;for(;w&&f.value&&Pd(w,f.value)<=0;)b=at(w,"HH:mm").locale(i.value).format(n.format),g.push({value:b,disabled:Pd(w,p.value||"-1:-1")<=0||Pd(w,h.value||"100:100")>=0}),w=$ne(w,c.value)}return g});return t({blur:()=>{var g,w;(w=(g=r.value)==null?void 0:g.blur)==null||w.call(g)},focus:()=>{var g,w;(w=(g=r.value)==null?void 0:g.focus)==null||w.call(g)}}),(g,w)=>(y(),oe(s(Or),{ref_key:"select",ref:r,"model-value":s(u),disabled:s(l),clearable:g.clearable,"clear-icon":g.clearIcon,size:g.size,effect:g.effect,placeholder:g.placeholder,"default-first-option":"",filterable:g.editable,"onUpdate:modelValue":w[0]||(w[0]=b=>g.$emit("update:modelValue",b)),onChange:w[1]||(w[1]=b=>g.$emit("change",b)),onBlur:w[2]||(w[2]=b=>g.$emit("blur",b)),onFocus:w[3]||(w[3]=b=>g.$emit("focus",b))},{prefix:G(()=>[g.prefixIcon?(y(),oe(s(Be),{key:0,class:$(s(a).e("prefix-icon"))},{default:G(()=>[(y(),oe(ut(g.prefixIcon)))]),_:1},8,["class"])):Z("v-if",!0)]),default:G(()=>[(y(!0),M(Fe,null,mt(s(m),b=>(y(),oe(s(o),{key:b.value,label:b.value,value:b.value,disabled:b.disabled},null,8,["label","value","disabled"]))),128))]),_:1},8,["model-value","disabled","clearable","clear-icon","size","effect","placeholder","filterable"]))}});var pu=xe(Ane,[["__file","time-select.vue"]]);pu.install=e=>{e.component(pu.name,pu)};const One=pu,Nne=One,Ine=A({name:"ElTimeline",setup(e,{slots:t}){const n=me("timeline");return pt("timeline",t),()=>qe("ul",{class:[n.b()]},[re(t,"default")])}}),Rne=Ee({timestamp:{type:String,default:""},hideTimestamp:{type:Boolean,default:!1},center:{type:Boolean,default:!1},placement:{type:String,values:["top","bottom"],default:"bottom"},type:{type:String,values:["primary","success","warning","danger","info"],default:""},color:{type:String,default:""},size:{type:String,values:["normal","large"],default:"normal"},icon:{type:$t},hollow:{type:Boolean,default:!1}}),Pne=A({name:"ElTimelineItem"}),Lne=A({...Pne,props:Rne,setup(e){const t=e,n=me("timeline-item"),o=S(()=>[n.e("node"),n.em("node",t.size||""),n.em("node",t.type||""),n.is("hollow",t.hollow)]);return(a,r)=>(y(),M("li",{class:$([s(n).b(),{[s(n).e("center")]:a.center}])},[k("div",{class:$(s(n).e("tail"))},null,2),a.$slots.dot?Z("v-if",!0):(y(),M("div",{key:0,class:$(s(o)),style:De({backgroundColor:a.color})},[a.icon?(y(),oe(s(Be),{key:0,class:$(s(n).e("icon"))},{default:G(()=>[(y(),oe(ut(a.icon)))]),_:1},8,["class"])):Z("v-if",!0)],6)),a.$slots.dot?(y(),M("div",{key:1,class:$(s(n).e("dot"))},[re(a.$slots,"dot")],2)):Z("v-if",!0),k("div",{class:$(s(n).e("wrapper"))},[!a.hideTimestamp&&a.placement==="top"?(y(),M("div",{key:0,class:$([s(n).e("timestamp"),s(n).is("top")])},Me(a.timestamp),3)):Z("v-if",!0),k("div",{class:$(s(n).e("content"))},[re(a.$slots,"default")],2),!a.hideTimestamp&&a.placement==="bottom"?(y(),M("div",{key:1,class:$([s(n).e("timestamp"),s(n).is("bottom")])},Me(a.timestamp),3)):Z("v-if",!0)],2)],2))}});var ky=xe(Lne,[["__file","timeline-item.vue"]]);const Vne=lt(Ine,{TimelineItem:ky}),Bne=Dt(ky),Ey=Ee({nowrap:Boolean});var xy=(e=>(e.top="top",e.bottom="bottom",e.left="left",e.right="right",e))(xy||{});const zne=Object.values(xy),pp=Ee({width:{type:Number,default:10},height:{type:Number,default:10},style:{type:X(Object),default:null}}),Hne=Ee({side:{type:X(String),values:zne,required:!0}}),Dne=["absolute","fixed"],Fne=["top-start","top-end","top","bottom-start","bottom-end","bottom","left-start","left-end","left","right-start","right-end","right"],vp=Ee({ariaLabel:String,arrowPadding:{type:X(Number),default:5},effect:{type:String,default:""},contentClass:String,placement:{type:X(String),values:Fne,default:"bottom"},reference:{type:X(Object),default:null},offset:{type:Number,default:8},strategy:{type:X(String),values:Dne,default:"absolute"},showArrow:{type:Boolean,default:!1}}),hp=Ee({delayDuration:{type:Number,default:300},defaultOpen:Boolean,open:{type:Boolean,default:void 0},onOpenChange:{type:X(Function)},"onUpdate:open":{type:X(Function)}}),Ur={type:X(Function)},mp=Ee({onBlur:Ur,onClick:Ur,onFocus:Ur,onMouseDown:Ur,onMouseEnter:Ur,onMouseLeave:Ur}),Kne=Ee({...hp,...pp,...mp,...vp,alwaysOn:Boolean,fullTransition:Boolean,transitionProps:{type:X(Object),default:null},teleported:Boolean,to:{type:X(String),default:"body"}}),Fc=Symbol("tooltipV2"),My=Symbol("tooltipV2Content"),Ld="tooltip_v2.open",Wne=A({name:"ElTooltipV2Root"}),jne=A({...Wne,props:hp,setup(e,{expose:t}){const n=e,o=R(n.defaultOpen),a=R(null),r=S({get:()=>Er(n.open)?o.value:n.open,set:_=>{var g;o.value=_,(g=n["onUpdate:open"])==null||g.call(n,_)}}),l=S(()=>Ye(n.delayDuration)&&n.delayDuration>0),{start:i,stop:u}=Cr(()=>{r.value=!0},S(()=>n.delayDuration),{immediate:!1}),d=me("tooltip-v2"),f=kn(),c=()=>{u(),r.value=!0},p=()=>{s(l)?i():c()},h=c,m=()=>{u(),r.value=!1};return pe(r,_=>{var g;_&&(document.dispatchEvent(new CustomEvent(Ld)),h()),(g=n.onOpenChange)==null||g.call(n,_)}),et(()=>{document.addEventListener(Ld,m)}),It(()=>{u(),document.removeEventListener(Ld,m)}),pt(Fc,{contentId:f,triggerRef:a,ns:d,onClose:m,onDelayOpen:p,onOpen:h}),t({onOpen:h,onClose:m}),(_,g)=>re(_.$slots,"default",{open:s(r)})}});var qne=xe(jne,[["__file","root.vue"]]);const Une=A({name:"ElTooltipV2Arrow"}),Yne=A({...Une,props:{...pp,...Hne},setup(e){const t=e,{ns:n}=Pe(Fc),{arrowRef:o}=Pe(My),a=S(()=>{const{style:r,width:l,height:i}=t,u=n.namespace.value;return{[`--${u}-tooltip-v2-arrow-width`]:`${l}px`,[`--${u}-tooltip-v2-arrow-height`]:`${i}px`,[`--${u}-tooltip-v2-arrow-border-width`]:`${l/2}px`,[`--${u}-tooltip-v2-arrow-cover-width`]:l/2-1,...r||{}}});return(r,l)=>(y(),M("span",{ref_key:"arrowRef",ref:o,style:De(s(a)),class:$(s(n).e("arrow"))},null,6))}});var qh=xe(Yne,[["__file","arrow.vue"]]);const Gne=Ee({style:{type:X([String,Object,Array]),default:()=>({})}}),Xne=A({name:"ElVisuallyHidden"}),Jne=A({...Xne,props:Gne,setup(e){const t=e,n=S(()=>[t.style,{position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}]);return(o,a)=>(y(),M("span",ft(o.$attrs,{style:s(n)}),[re(o.$slots,"default")],16))}});var Zne=xe(Jne,[["__file","visual-hidden.vue"]]);const Qne=["data-side"],eoe=A({name:"ElTooltipV2Content"}),toe=A({...eoe,props:{...vp,...Ey},setup(e){const t=e,{triggerRef:n,contentId:o}=Pe(Fc),a=R(t.placement),r=R(t.strategy),l=R(null),{referenceRef:i,contentRef:u,middlewareData:d,x:f,y:c,update:p}=IV({placement:a,strategy:r,middleware:S(()=>{const b=[S6(t.offset)];return t.showArrow&&b.push(RV({arrowRef:l})),b})}),h=zl().nextZIndex(),m=me("tooltip-v2"),v=S(()=>a.value.split("-")[0]),_=S(()=>({position:s(r),top:`${s(c)||0}px`,left:`${s(f)||0}px`,zIndex:h})),g=S(()=>{if(!t.showArrow)return{};const{arrow:b}=s(d);return{[`--${m.namespace.value}-tooltip-v2-arrow-x`]:`${b==null?void 0:b.x}px`||"",[`--${m.namespace.value}-tooltip-v2-arrow-y`]:`${b==null?void 0:b.y}px`||""}}),w=S(()=>[m.e("content"),m.is("dark",t.effect==="dark"),m.is(s(r)),t.contentClass]);return pe(l,()=>p()),pe(()=>t.placement,b=>a.value=b),et(()=>{pe(()=>t.reference||n.value,b=>{i.value=b||void 0},{immediate:!0})}),pt(My,{arrowRef:l}),(b,C)=>(y(),M("div",{ref_key:"contentRef",ref:u,style:De(s(_)),"data-tooltip-v2-root":""},[b.nowrap?Z("v-if",!0):(y(),M("div",{key:0,"data-side":s(v),class:$(s(w))},[re(b.$slots,"default",{contentStyle:s(_),contentClass:s(w)}),W(s(Zne),{id:s(o),role:"tooltip"},{default:G(()=>[b.ariaLabel?(y(),M(Fe,{key:0},[vt(Me(b.ariaLabel),1)],64)):re(b.$slots,"default",{key:1})]),_:3},8,["id"]),re(b.$slots,"arrow",{style:De(s(g)),side:s(v)})],10,Qne))],4))}});var Uh=xe(toe,[["__file","content.vue"]]);const noe=Ee({setRef:{type:X(Function),required:!0},onlyChild:Boolean});var ooe=A({props:noe,setup(e,{slots:t}){const n=R(),o=xc(n,a=>{a?e.setRef(a.nextElementSibling):e.setRef(null)});return()=>{var a;const[r]=((a=t.default)==null?void 0:a.call(t))||[],l=e.onlyChild?TP(r.children):r.children;return W(Fe,{ref:o},[l])}}});const aoe=A({name:"ElTooltipV2Trigger"}),roe=A({...aoe,props:{...Ey,...mp},setup(e){const t=e,{onClose:n,onOpen:o,onDelayOpen:a,triggerRef:r,contentId:l}=Pe(Fc);let i=!1;const u=w=>{r.value=w},d=()=>{i=!1},f=jt(t.onMouseEnter,a),c=jt(t.onMouseLeave,n),p=jt(t.onMouseDown,()=>{n(),i=!0,document.addEventListener("mouseup",d,{once:!0})}),h=jt(t.onFocus,()=>{i||o()}),m=jt(t.onBlur,n),v=jt(t.onClick,w=>{w.detail===0&&n()}),_={blur:m,click:v,focus:h,mousedown:p,mouseenter:f,mouseleave:c},g=(w,b,C)=>{w&&Object.entries(b).forEach(([x,E])=>{w[C](x,E)})};return pe(r,(w,b)=>{g(w,_,"addEventListener"),g(b,_,"removeEventListener"),w&&w.setAttribute("aria-describedby",l.value)}),It(()=>{g(r.value,_,"removeEventListener"),document.removeEventListener("mouseup",d)}),(w,b)=>w.nowrap?(y(),oe(s(ooe),{key:0,"set-ref":u,"only-child":""},{default:G(()=>[re(w.$slots,"default")]),_:3})):(y(),M("button",ft({key:1,ref_key:"triggerRef",ref:r},w.$attrs),[re(w.$slots,"default")],16))}});var loe=xe(roe,[["__file","trigger.vue"]]);const soe=A({name:"ElTooltipV2"}),ioe=A({...soe,props:Kne,setup(e){const n=un(e),o=wt(Zo(n,Object.keys(pp))),a=wt(Zo(n,Object.keys(vp))),r=wt(Zo(n,Object.keys(hp))),l=wt(Zo(n,Object.keys(mp)));return(i,u)=>(y(),oe(qne,Jo(pl(r)),{default:G(({open:d})=>[W(loe,ft(l,{nowrap:""}),{default:G(()=>[re(i.$slots,"trigger")]),_:3},16),(y(),oe(Nl,{to:i.to,disabled:!i.teleported},[i.fullTransition?(y(),oe(nn,Jo(ft({key:0},i.transitionProps)),{default:G(()=>[i.alwaysOn||d?(y(),oe(Uh,Jo(ft({key:0},a)),{arrow:G(({style:f,side:c})=>[i.showArrow?(y(),oe(qh,ft({key:0},o,{style:f,side:c}),null,16,["style","side"])):Z("v-if",!0)]),default:G(()=>[re(i.$slots,"default")]),_:3},16)):Z("v-if",!0)]),_:2},1040)):(y(),M(Fe,{key:1},[i.alwaysOn||d?(y(),oe(Uh,Jo(ft({key:0},a)),{arrow:G(({style:f,side:c})=>[i.showArrow?(y(),oe(qh,ft({key:0},o,{style:f,side:c}),null,16,["style","side"])):Z("v-if",!0)]),default:G(()=>[re(i.$slots,"default")]),_:3},16)):Z("v-if",!0)],64))],8,["to","disabled"]))]),_:3},16))}});var uoe=xe(ioe,[["__file","tooltip.vue"]]);const coe=lt(uoe),$y="left-check-change",Ty="right-check-change",Jr=Ee({data:{type:X(Array),default:()=>[]},titles:{type:X(Array),default:()=>[]},buttonTexts:{type:X(Array),default:()=>[]},filterPlaceholder:String,filterMethod:{type:X(Function)},leftDefaultChecked:{type:X(Array),default:()=>[]},rightDefaultChecked:{type:X(Array),default:()=>[]},renderContent:{type:X(Function)},modelValue:{type:X(Array),default:()=>[]},format:{type:X(Object),default:()=>({})},filterable:Boolean,props:{type:X(Object),default:()=>Ht({label:"label",key:"key",disabled:"disabled"})},targetOrder:{type:String,values:["original","push","unshift"],default:"original"},validateEvent:{type:Boolean,default:!0}}),e0=(e,t)=>[e,t].every(Ie)||Ie(e)&&tn(t),doe={[Bt]:(e,t,n)=>[e,n].every(Ie)&&["left","right"].includes(t),[it]:e=>Ie(e),[$y]:e0,[Ty]:e0},t0="checked-change",foe=Ee({data:Jr.data,optionRender:{type:X(Function)},placeholder:String,title:String,filterable:Boolean,format:Jr.format,filterMethod:Jr.filterMethod,defaultChecked:Jr.leftDefaultChecked,props:Jr.props}),poe={[t0]:e0},di=e=>{const t={label:"label",key:"key",disabled:"disabled"};return S(()=>({...t,...e.props}))},voe=(e,t,n)=>{const o=di(e),a=S(()=>e.data.filter(f=>Xe(e.filterMethod)?e.filterMethod(t.query,f):String(f[o.value.label]||f[o.value.key]).toLowerCase().includes(t.query.toLowerCase()))),r=S(()=>a.value.filter(f=>!f[o.value.disabled])),l=S(()=>{const f=t.checked.length,c=e.data.length,{noChecked:p,hasChecked:h}=e.format;return p&&h?f>0?h.replace(/\${checked}/g,f.toString()).replace(/\${total}/g,c.toString()):p.replace(/\${total}/g,c.toString()):`${f}/${c}`}),i=S(()=>{const f=t.checked.length;return f>0&&f{const f=r.value.map(c=>c[o.value.key]);t.allChecked=f.length>0&&f.every(c=>t.checked.includes(c))},d=f=>{t.checked=f?r.value.map(c=>c[o.value.key]):[]};return pe(()=>t.checked,(f,c)=>{if(u(),t.checkChangeByUser){const p=f.concat(c).filter(h=>!f.includes(h)||!c.includes(h));n(t0,f,p)}else n(t0,f),t.checkChangeByUser=!0}),pe(r,()=>{u()}),pe(()=>e.data,()=>{const f=[],c=a.value.map(p=>p[o.value.key]);t.checked.forEach(p=>{c.includes(p)&&f.push(p)}),t.checkChangeByUser=!1,t.checked=f}),pe(()=>e.defaultChecked,(f,c)=>{if(c&&f.length===c.length&&f.every(m=>c.includes(m)))return;const p=[],h=r.value.map(m=>m[o.value.key]);f.forEach(m=>{h.includes(m)&&p.push(m)}),t.checkChangeByUser=!1,t.checked=p},{immediate:!0}),{filteredData:a,checkableData:r,checkedSummary:l,isIndeterminate:i,updateAllChecked:u,handleAllCheckedChange:d}},hoe=(e,t)=>({onSourceCheckedChange:(a,r)=>{e.leftChecked=a,r&&t($y,a,r)},onTargetCheckedChange:(a,r)=>{e.rightChecked=a,r&&t(Ty,a,r)}}),moe=e=>{const t=di(e),n=S(()=>e.data.reduce((r,l)=>(r[l[t.value.key]]=l)&&r,{})),o=S(()=>e.data.filter(r=>!e.modelValue.includes(r[t.value.key]))),a=S(()=>e.targetOrder==="original"?e.data.filter(r=>e.modelValue.includes(r[t.value.key])):e.modelValue.reduce((r,l)=>{const i=n.value[l];return i&&r.push(i),r},[]));return{sourceData:o,targetData:a}},goe=(e,t,n)=>{const o=di(e),a=(i,u,d)=>{n(it,i),n(Bt,i,u,d)};return{addToLeft:()=>{const i=e.modelValue.slice();t.rightChecked.forEach(u=>{const d=i.indexOf(u);d>-1&&i.splice(d,1)}),a(i,"left",t.rightChecked)},addToRight:()=>{let i=e.modelValue.slice();const u=e.data.filter(d=>{const f=d[o.value.key];return t.leftChecked.includes(f)&&!e.modelValue.includes(f)}).map(d=>d[o.value.key]);i=e.targetOrder==="unshift"?u.concat(i):i.concat(u),e.targetOrder==="original"&&(i=e.data.filter(d=>i.includes(d[o.value.key])).map(d=>d[o.value.key])),a(i,"right",t.leftChecked)}}},yoe=A({name:"ElTransferPanel"}),_oe=A({...yoe,props:foe,emits:poe,setup(e,{expose:t,emit:n}){const o=e,a=fn(),r=({option:b})=>b,{t:l}=_t(),i=me("transfer"),u=wt({checked:[],allChecked:!1,query:"",checkChangeByUser:!0}),d=di(o),{filteredData:f,checkedSummary:c,isIndeterminate:p,handleAllCheckedChange:h}=voe(o,u,n),m=S(()=>!Qn(u.query)&&Qn(f.value)),v=S(()=>!Qn(a.default()[0].children)),{checked:_,allChecked:g,query:w}=un(u);return t({query:w}),(b,C)=>(y(),M("div",{class:$(s(i).b("panel"))},[k("p",{class:$(s(i).be("panel","header"))},[W(s(vo),{modelValue:s(g),"onUpdate:modelValue":C[0]||(C[0]=x=>Pt(g)?g.value=x:null),indeterminate:s(p),"validate-event":!1,onChange:s(h)},{default:G(()=>[vt(Me(b.title)+" ",1),k("span",null,Me(s(c)),1)]),_:1},8,["modelValue","indeterminate","onChange"])],2),k("div",{class:$([s(i).be("panel","body"),s(i).is("with-footer",s(v))])},[b.filterable?(y(),oe(s(mn),{key:0,modelValue:s(w),"onUpdate:modelValue":C[1]||(C[1]=x=>Pt(w)?w.value=x:null),class:$(s(i).be("panel","filter")),size:"default",placeholder:b.placeholder,"prefix-icon":s(qg),clearable:"","validate-event":!1},null,8,["modelValue","class","placeholder","prefix-icon"])):Z("v-if",!0),Qe(W(s(N3),{modelValue:s(_),"onUpdate:modelValue":C[2]||(C[2]=x=>Pt(_)?_.value=x:null),"validate-event":!1,class:$([s(i).is("filterable",b.filterable),s(i).be("panel","list")])},{default:G(()=>[(y(!0),M(Fe,null,mt(s(f),x=>(y(),oe(s(vo),{key:x[s(d).key],class:$(s(i).be("panel","item")),value:x[s(d).key],disabled:x[s(d).disabled],"validate-event":!1},{default:G(()=>{var E;return[W(r,{option:(E=b.optionRender)==null?void 0:E.call(b,x)},null,8,["option"])]}),_:2},1032,["class","value","disabled"]))),128))]),_:1},8,["modelValue","class"]),[[bt,!s(m)&&!s(Qn)(b.data)]]),Qe(k("p",{class:$(s(i).be("panel","empty"))},Me(s(m)?s(l)("el.transfer.noMatch"):s(l)("el.transfer.noData")),3),[[bt,s(m)||s(Qn)(b.data)]])],2),s(v)?(y(),M("p",{key:0,class:$(s(i).be("panel","footer"))},[re(b.$slots,"default")],2)):Z("v-if",!0)],2))}});var Yh=xe(_oe,[["__file","transfer-panel.vue"]]);const boe={key:0},woe={key:0},Coe=A({name:"ElTransfer"}),Soe=A({...Coe,props:Jr,emits:doe,setup(e,{expose:t,emit:n}){const o=e,a=fn(),{t:r}=_t(),l=me("transfer"),{formItem:i}=Nn(),u=wt({leftChecked:[],rightChecked:[]}),d=di(o),{sourceData:f,targetData:c}=moe(o),{onSourceCheckedChange:p,onTargetCheckedChange:h}=hoe(u,n),{addToLeft:m,addToRight:v}=goe(o,u,n),_=R(),g=R(),w=T=>{switch(T){case"left":_.value.query="";break;case"right":g.value.query="";break}},b=S(()=>o.buttonTexts.length===2),C=S(()=>o.titles[0]||r("el.transfer.titles.0")),x=S(()=>o.titles[1]||r("el.transfer.titles.1")),E=S(()=>o.filterPlaceholder||r("el.transfer.filterPlaceholder"));pe(()=>o.modelValue,()=>{var T;o.validateEvent&&((T=i==null?void 0:i.validate)==null||T.call(i,"change").catch(V=>void 0))});const O=S(()=>T=>o.renderContent?o.renderContent(qe,T):a.default?a.default({option:T}):qe("span",T[d.value.label]||T[d.value.key]));return t({clearQuery:w,leftPanel:_,rightPanel:g}),(T,V)=>(y(),M("div",{class:$(s(l).b())},[W(Yh,{ref_key:"leftPanel",ref:_,data:s(f),"option-render":s(O),placeholder:s(E),title:s(C),filterable:T.filterable,format:T.format,"filter-method":T.filterMethod,"default-checked":T.leftDefaultChecked,props:o.props,onCheckedChange:s(p)},{default:G(()=>[re(T.$slots,"left-footer")]),_:3},8,["data","option-render","placeholder","title","filterable","format","filter-method","default-checked","props","onCheckedChange"]),k("div",{class:$(s(l).e("buttons"))},[W(s(rn),{type:"primary",class:$([s(l).e("button"),s(l).is("with-texts",s(b))]),disabled:s(Qn)(u.rightChecked),onClick:s(m)},{default:G(()=>[W(s(Be),null,{default:G(()=>[W(s(aa))]),_:1}),s(Zt)(T.buttonTexts[0])?Z("v-if",!0):(y(),M("span",boe,Me(T.buttonTexts[0]),1))]),_:1},8,["class","disabled","onClick"]),W(s(rn),{type:"primary",class:$([s(l).e("button"),s(l).is("with-texts",s(b))]),disabled:s(Qn)(u.leftChecked),onClick:s(v)},{default:G(()=>[s(Zt)(T.buttonTexts[1])?Z("v-if",!0):(y(),M("span",woe,Me(T.buttonTexts[1]),1)),W(s(Be),null,{default:G(()=>[W(s(Sn))]),_:1})]),_:1},8,["class","disabled","onClick"])],2),W(Yh,{ref_key:"rightPanel",ref:g,data:s(c),"option-render":s(O),placeholder:s(E),filterable:T.filterable,format:T.format,"filter-method":T.filterMethod,title:s(x),"default-checked":T.rightDefaultChecked,props:o.props,onCheckedChange:s(h)},{default:G(()=>[re(T.$slots,"right-footer")]),_:3},8,["data","option-render","placeholder","filterable","format","filter-method","title","default-checked","props","onCheckedChange"])],2))}});var koe=xe(Soe,[["__file","transfer.vue"]]);const Eoe=lt(koe),cl="$treeNodeId",Gh=function(e,t){!t||t[cl]||Object.defineProperty(t,cl,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},gp=function(e,t){return e?t[e]:t[cl]},n0=(e,t,n)=>{const o=e.value.currentNode;n();const a=e.value.currentNode;o!==a&&t("current-change",a?a.data:null,a)},o0=e=>{let t=!0,n=!0,o=!0;for(let a=0,r=e.length;a"u"){const r=o[t];return r===void 0?"":r}};let xoe=0,a0=class vu{constructor(t){this.id=xoe++,this.text=null,this.checked=!1,this.indeterminate=!1,this.data=null,this.expanded=!1,this.parent=null,this.visible=!0,this.isCurrent=!1,this.canFocus=!1;for(const n in t)yt(t,n)&&(this[n]=t[n]);this.level=0,this.loaded=!1,this.childNodes=[],this.loading=!1,this.parent&&(this.level=this.parent.level+1)}initialize(){const t=this.store;if(!t)throw new Error("[Node]store is required!");t.registerNode(this);const n=t.props;if(n&&typeof n.isLeaf<"u"){const r=Hi(this,"isLeaf");typeof r=="boolean"&&(this.isLeafByUser=r)}if(t.lazy!==!0&&this.data?(this.setData(this.data),t.defaultExpandAll&&(this.expanded=!0,this.canFocus=!0)):this.level>0&&t.lazy&&t.defaultExpandAll&&this.expand(),Array.isArray(this.data)||Gh(this,this.data),!this.data)return;const o=t.defaultExpandedKeys,a=t.key;a&&o&&o.includes(this.key)&&this.expand(null,t.autoExpandParent),a&&t.currentNodeKey!==void 0&&this.key===t.currentNodeKey&&(t.currentNode=this,t.currentNode.isCurrent=!0),t.lazy&&t._initDefaultCheckedNode(this),this.updateLeafState(),this.parent&&(this.level===1||this.parent.expanded===!0)&&(this.canFocus=!0)}setData(t){Array.isArray(t)||Gh(this,t),this.data=t,this.childNodes=[];let n;this.level===0&&Array.isArray(this.data)?n=this.data:n=Hi(this,"children")||[];for(let o=0,a=n.length;o-1)return t.childNodes[n+1]}return null}get previousSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return n>0?t.childNodes[n-1]:null}return null}contains(t,n=!0){return(this.childNodes||[]).some(o=>o===t||n&&o.contains(t))}remove(){const t=this.parent;t&&t.removeChild(this)}insertChild(t,n,o){if(!t)throw new Error("InsertChild error: child is required.");if(!(t instanceof vu)){if(!o){const a=this.getChildren(!0);a.includes(t.data)||(typeof n>"u"||n<0?a.push(t.data):a.splice(n,0,t.data))}Object.assign(t,{parent:this,store:this.store}),t=wt(new vu(t)),t instanceof vu&&t.initialize()}t.level=this.level+1,typeof n>"u"||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}insertBefore(t,n){let o;n&&(o=this.childNodes.indexOf(n)),this.insertChild(t,o)}insertAfter(t,n){let o;n&&(o=this.childNodes.indexOf(n),o!==-1&&(o+=1)),this.insertChild(t,o)}removeChild(t){const n=this.getChildren()||[],o=n.indexOf(t.data);o>-1&&n.splice(o,1);const a=this.childNodes.indexOf(t);a>-1&&(this.store&&this.store.deregisterNode(t),t.parent=null,this.childNodes.splice(a,1)),this.updateLeafState()}removeChildByData(t){let n=null;for(let o=0;o{if(n){let a=this.parent;for(;a.level>0;)a.expanded=!0,a=a.parent}this.expanded=!0,t&&t(),this.childNodes.forEach(a=>{a.canFocus=!0})};this.shouldLoadData()?this.loadData(a=>{Array.isArray(a)&&(this.checked?this.setChecked(!0,!0):this.store.checkStrictly||ts(this),o())}):o()}doCreateChildren(t,n={}){t.forEach(o=>{this.insertChild(Object.assign({data:o},n),void 0,!0)})}collapse(){this.expanded=!1,this.childNodes.forEach(t=>{t.canFocus=!1})}shouldLoadData(){return this.store.lazy===!0&&this.store.load&&!this.loaded}updateLeafState(){if(this.store.lazy===!0&&this.loaded!==!0&&typeof this.isLeafByUser<"u"){this.isLeaf=this.isLeafByUser;return}const t=this.childNodes;if(!this.store.lazy||this.store.lazy===!0&&this.loaded===!0){this.isLeaf=!t||t.length===0;return}this.isLeaf=!1}setChecked(t,n,o,a){if(this.indeterminate=t==="half",this.checked=t===!0,this.store.checkStrictly)return;if(!(this.shouldLoadData()&&!this.store.checkDescendants)){const{all:l,allWithoutDisable:i}=o0(this.childNodes);!this.isLeaf&&!l&&i&&(this.checked=!1,t=!1);const u=()=>{if(n){const d=this.childNodes;for(let p=0,h=d.length;p{u(),ts(this)},{checked:t!==!1});return}else u()}const r=this.parent;!r||r.level===0||o||ts(r)}getChildren(t=!1){if(this.level===0)return this.data;const n=this.data;if(!n)return null;const o=this.store.props;let a="children";return o&&(a=o.children||"children"),n[a]===void 0&&(n[a]=null),t&&!n[a]&&(n[a]=[]),n[a]}updateChildren(){const t=this.getChildren()||[],n=this.childNodes.map(r=>r.data),o={},a=[];t.forEach((r,l)=>{const i=r[cl];!!i&&n.findIndex(d=>d[cl]===i)>=0?o[i]={index:l,data:r}:a.push({index:l,data:r})}),this.store.lazy||n.forEach(r=>{o[r[cl]]||this.removeChildByData(r)}),a.forEach(({index:r,data:l})=>{this.insertChild({data:l},r)}),this.updateLeafState()}loadData(t,n={}){if(this.store.lazy===!0&&this.store.load&&!this.loaded&&(!this.loading||Object.keys(n).length)){this.loading=!0;const o=r=>{this.childNodes=[],this.doCreateChildren(r,n),this.loaded=!0,this.loading=!1,this.updateLeafState(),t&&t.call(this,r)},a=()=>{this.loading=!1};this.store.load(this,o,a)}else t&&t.call(this)}eachNode(t){const n=[this];for(;n.length;){const o=n.shift();n.unshift(...o.childNodes),t(o)}}reInitChecked(){this.store.checkStrictly||ts(this)}};class Moe{constructor(t){this.currentNode=null,this.currentNodeKey=null;for(const n in t)yt(t,n)&&(this[n]=t[n]);this.nodesMap={}}initialize(){if(this.root=new a0({data:this.data,store:this}),this.root.initialize(),this.lazy&&this.load){const t=this.load;t(this.root,n=>{this.root.doCreateChildren(n),this._initDefaultCheckedNodes()})}else this._initDefaultCheckedNodes()}filter(t){const n=this.filterNodeMethod,o=this.lazy,a=function(r){const l=r.root?r.root.childNodes:r.childNodes;if(l.forEach(i=>{i.visible=n.call(i,t,i.data,i),a(i)}),!r.visible&&l.length){let i=!0;i=!l.some(u=>u.visible),r.root?r.root.visible=i===!1:r.visible=i===!1}t&&r.visible&&!r.isLeaf&&(!o||r.loaded)&&r.expand()};a(this)}setData(t){t!==this.root.data?(this.root.setData(t),this._initDefaultCheckedNodes()):this.root.updateChildren()}getNode(t){if(t instanceof a0)return t;const n=ct(t)?gp(this.key,t):t;return this.nodesMap[n]||null}insertBefore(t,n){const o=this.getNode(n);o.parent.insertBefore({data:t},o)}insertAfter(t,n){const o=this.getNode(n);o.parent.insertAfter({data:t},o)}remove(t){const n=this.getNode(t);n&&n.parent&&(n===this.currentNode&&(this.currentNode=null),n.parent.removeChild(n))}append(t,n){const o=Er(n)?this.root:this.getNode(n);o&&o.insertChild({data:t})}_initDefaultCheckedNodes(){const t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach(o=>{const a=n[o];a&&a.setChecked(!0,!this.checkStrictly)})}_initDefaultCheckedNode(t){(this.defaultCheckedKeys||[]).includes(t.key)&&t.setChecked(!0,!this.checkStrictly)}setDefaultCheckedKey(t){t!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=t,this._initDefaultCheckedNodes())}registerNode(t){const n=this.key;!t||!t.data||(n?t.key!==void 0&&(this.nodesMap[t.key]=t):this.nodesMap[t.id]=t)}deregisterNode(t){!this.key||!t||!t.data||(t.childNodes.forEach(o=>{this.deregisterNode(o)}),delete this.nodesMap[t.key])}getCheckedNodes(t=!1,n=!1){const o=[],a=function(r){(r.root?r.root.childNodes:r.childNodes).forEach(i=>{(i.checked||n&&i.indeterminate)&&(!t||t&&i.isLeaf)&&o.push(i.data),a(i)})};return a(this),o}getCheckedKeys(t=!1){return this.getCheckedNodes(t).map(n=>(n||{})[this.key])}getHalfCheckedNodes(){const t=[],n=function(o){(o.root?o.root.childNodes:o.childNodes).forEach(r=>{r.indeterminate&&t.push(r.data),n(r)})};return n(this),t}getHalfCheckedKeys(){return this.getHalfCheckedNodes().map(t=>(t||{})[this.key])}_getAllNodes(){const t=[],n=this.nodesMap;for(const o in n)yt(n,o)&&t.push(n[o]);return t}updateChildren(t,n){const o=this.nodesMap[t];if(!o)return;const a=o.childNodes;for(let r=a.length-1;r>=0;r--){const l=a[r];this.remove(l.data)}for(let r=0,l=n.length;ru.level-d.level),r=Object.create(null),l=Object.keys(o);a.forEach(u=>u.setChecked(!1,!1));const i=u=>{u.childNodes.forEach(d=>{var f;r[d.data[t]]=!0,(f=d.childNodes)!=null&&f.length&&i(d)})};for(let u=0,d=a.length;u{_.isLeaf||_.setChecked(!1,!1),h(_)})};h(f)}}}setCheckedNodes(t,n=!1){const o=this.key,a={};t.forEach(r=>{a[(r||{})[o]]=!0}),this._setCheckedKeys(o,n,a)}setCheckedKeys(t,n=!1){this.defaultCheckedKeys=t;const o=this.key,a={};t.forEach(r=>{a[r]=!0}),this._setCheckedKeys(o,n,a)}setDefaultExpandedKeys(t){t=t||[],this.defaultExpandedKeys=t,t.forEach(n=>{const o=this.getNode(n);o&&o.expand(null,this.autoExpandParent)})}setChecked(t,n,o){const a=this.getNode(t);a&&a.setChecked(!!n,o)}getCurrentNode(){return this.currentNode}setCurrentNode(t){const n=this.currentNode;n&&(n.isCurrent=!1),this.currentNode=t,this.currentNode.isCurrent=!0}setUserCurrentNode(t,n=!0){const o=t[this.key],a=this.nodesMap[o];this.setCurrentNode(a),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0)}setCurrentNodeKey(t,n=!0){if(t==null){this.currentNode&&(this.currentNode.isCurrent=!1),this.currentNode=null;return}const o=this.getNode(t);o&&(this.setCurrentNode(o),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0))}}const $oe=A({name:"ElTreeNodeContent",props:{node:{type:Object,required:!0},renderContent:Function},setup(e){const t=me("tree"),n=Pe("NodeInstance"),o=Pe("RootTree");return()=>{const a=e.node,{data:r,store:l}=a;return e.renderContent?e.renderContent(qe,{_self:n,node:a,data:r,store:l}):re(o.ctx.slots,"default",{node:a,data:r},()=>[qe("span",{class:t.be("node","label")},[a.label])])}}});var Toe=xe($oe,[["__file","tree-node-content.vue"]]);function Ay(e){const t=Pe("TreeNodeMap",null),n={treeNodeExpand:o=>{e.node!==o&&e.node.collapse()},children:[]};return t&&t.children.push(n),pt("TreeNodeMap",n),{broadcastExpanded:o=>{if(e.accordion)for(const a of n.children)a.treeNodeExpand(o)}}}const Oy=Symbol("dragEvents");function Aoe({props:e,ctx:t,el$:n,dropIndicator$:o,store:a}){const r=me("tree"),l=R({showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0,dropType:null});return pt(Oy,{treeNodeDragStart:({event:f,treeNode:c})=>{if(typeof e.allowDrag=="function"&&!e.allowDrag(c.node))return f.preventDefault(),!1;f.dataTransfer.effectAllowed="move";try{f.dataTransfer.setData("text/plain","")}catch{}l.value.draggingNode=c,t.emit("node-drag-start",c.node,f)},treeNodeDragOver:({event:f,treeNode:c})=>{const p=c,h=l.value.dropNode;h&&h.node.id!==p.node.id&&Cn(h.$el,r.is("drop-inner"));const m=l.value.draggingNode;if(!m||!p)return;let v=!0,_=!0,g=!0,w=!0;typeof e.allowDrop=="function"&&(v=e.allowDrop(m.node,p.node,"prev"),w=_=e.allowDrop(m.node,p.node,"inner"),g=e.allowDrop(m.node,p.node,"next")),f.dataTransfer.dropEffect=_||v||g?"move":"none",(v||_||g)&&(h==null?void 0:h.node.id)!==p.node.id&&(h&&t.emit("node-drag-leave",m.node,h.node,f),t.emit("node-drag-enter",m.node,p.node,f)),v||_||g?l.value.dropNode=p:l.value.dropNode=null,p.node.nextSibling===m.node&&(g=!1),p.node.previousSibling===m.node&&(v=!1),p.node.contains(m.node,!1)&&(_=!1),(m.node===p.node||m.node.contains(p.node))&&(v=!1,_=!1,g=!1);const b=p.$el.querySelector(`.${r.be("node","content")}`).getBoundingClientRect(),C=n.value.getBoundingClientRect();let x;const E=v?_?.25:g?.45:1:-1,O=g?_?.75:v?.55:0:1;let T=-9999;const V=f.clientY-b.top;Vb.height*O?x="after":_?x="inner":x="none";const L=p.$el.querySelector(`.${r.be("node","expand-icon")}`).getBoundingClientRect(),P=o.value;x==="before"?T=L.top-C.top:x==="after"&&(T=L.bottom-C.top),P.style.top=`${T}px`,P.style.left=`${L.right-C.left}px`,x==="inner"?eo(p.$el,r.is("drop-inner")):Cn(p.$el,r.is("drop-inner")),l.value.showDropIndicator=x==="before"||x==="after",l.value.allowDrop=l.value.showDropIndicator||w,l.value.dropType=x,t.emit("node-drag-over",m.node,p.node,f)},treeNodeDragEnd:f=>{const{draggingNode:c,dropType:p,dropNode:h}=l.value;if(f.preventDefault(),f.dataTransfer.dropEffect="move",c&&h){const m={data:c.node.data};p!=="none"&&c.node.remove(),p==="before"?h.node.parent.insertBefore(m,h.node):p==="after"?h.node.parent.insertAfter(m,h.node):p==="inner"&&h.node.insertChild(m),p!=="none"&&(a.value.registerNode(m),a.value.key&&c.node.eachNode(v=>{var _;(_=a.value.nodesMap[v.data[a.value.key]])==null||_.setChecked(v.checked,!a.value.checkStrictly)})),Cn(h.$el,r.is("drop-inner")),t.emit("node-drag-end",c.node,h.node,p,f),p!=="none"&&t.emit("node-drop",c.node,h.node,p,f)}c&&!h&&t.emit("node-drag-end",c.node,null,p,f),l.value.showDropIndicator=!1,l.value.draggingNode=null,l.value.dropNode=null,l.value.allowDrop=!0}}),{dragState:l}}const Ooe=A({name:"ElTreeNode",components:{ElCollapseTransition:Vc,ElCheckbox:vo,NodeContent:Toe,ElIcon:Be,Loading:pa},props:{node:{type:a0,default:()=>({})},props:{type:Object,default:()=>({})},accordion:Boolean,renderContent:Function,renderAfterExpand:Boolean,showCheckbox:{type:Boolean,default:!1}},emits:["node-expand"],setup(e,t){const n=me("tree"),{broadcastExpanded:o}=Ay(e),a=Pe("RootTree"),r=R(!1),l=R(!1),i=R(null),u=R(null),d=R(null),f=Pe(Oy),c=rt();pt("NodeInstance",c),e.node.expanded&&(r.value=!0,l.value=!0);const p=a.props.props.children||"children";pe(()=>{const V=e.node.data[p];return V&&[...V]},()=>{e.node.updateChildren()}),pe(()=>e.node.indeterminate,V=>{v(e.node.checked,V)}),pe(()=>e.node.checked,V=>{v(V,e.node.indeterminate)}),pe(()=>e.node.childNodes.length,()=>e.node.reInitChecked()),pe(()=>e.node.expanded,V=>{We(()=>r.value=V),V&&(l.value=!0)});const h=V=>gp(a.props.nodeKey,V.data),m=V=>{const L=e.props.class;if(!L)return{};let P;if(Xe(L)){const{data:z}=V;P=L(z,V)}else P=L;return Ze(P)?{[P]:!0}:P},v=(V,L)=>{(i.value!==V||u.value!==L)&&a.ctx.emit("check-change",e.node.data,V,L),i.value=V,u.value=L},_=V=>{n0(a.store,a.ctx.emit,()=>a.store.value.setCurrentNode(e.node)),a.currentNode.value=e.node,a.props.expandOnClickNode&&w(),a.props.checkOnClickNode&&!e.node.disabled&&b(null,{target:{checked:!e.node.checked}}),a.ctx.emit("node-click",e.node.data,e.node,c,V)},g=V=>{a.instance.vnode.props.onNodeContextmenu&&(V.stopPropagation(),V.preventDefault()),a.ctx.emit("node-contextmenu",V,e.node.data,e.node,c)},w=()=>{e.node.isLeaf||(r.value?(a.ctx.emit("node-collapse",e.node.data,e.node,c),e.node.collapse()):(e.node.expand(),t.emit("node-expand",e.node.data,e.node,c)))},b=(V,L)=>{e.node.setChecked(L.target.checked,!a.props.checkStrictly),We(()=>{const P=a.store.value;a.ctx.emit("check",e.node.data,{checkedNodes:P.getCheckedNodes(),checkedKeys:P.getCheckedKeys(),halfCheckedNodes:P.getHalfCheckedNodes(),halfCheckedKeys:P.getHalfCheckedKeys()})})};return{ns:n,node$:d,tree:a,expanded:r,childNodeRendered:l,oldChecked:i,oldIndeterminate:u,getNodeKey:h,getNodeClass:m,handleSelectChange:v,handleClick:_,handleContextMenu:g,handleExpandIconClick:w,handleCheckChange:b,handleChildNodeExpand:(V,L,P)=>{o(L),a.ctx.emit("node-expand",V,L,P)},handleDragStart:V=>{a.props.draggable&&f.treeNodeDragStart({event:V,treeNode:e})},handleDragOver:V=>{V.preventDefault(),a.props.draggable&&f.treeNodeDragOver({event:V,treeNode:{$el:d.value,node:e.node}})},handleDrop:V=>{V.preventDefault()},handleDragEnd:V=>{a.props.draggable&&f.treeNodeDragEnd(V)},CaretRight:r2}}}),Noe=["aria-expanded","aria-disabled","aria-checked","draggable","data-key"],Ioe=["aria-expanded"];function Roe(e,t,n,o,a,r){const l=nt("el-icon"),i=nt("el-checkbox"),u=nt("loading"),d=nt("node-content"),f=nt("el-tree-node"),c=nt("el-collapse-transition");return Qe((y(),M("div",{ref:"node$",class:$([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.node.isCurrent),e.ns.is("hidden",!e.node.visible),e.ns.is("focusable",!e.node.disabled),e.ns.is("checked",!e.node.disabled&&e.node.checked),e.getNodeClass(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.node.disabled,"aria-checked":e.node.checked,draggable:e.tree.props.draggable,"data-key":e.getNodeKey(e.node),onClick:t[1]||(t[1]=Ge((...p)=>e.handleClick&&e.handleClick(...p),["stop"])),onContextmenu:t[2]||(t[2]=(...p)=>e.handleContextMenu&&e.handleContextMenu(...p)),onDragstart:t[3]||(t[3]=Ge((...p)=>e.handleDragStart&&e.handleDragStart(...p),["stop"])),onDragover:t[4]||(t[4]=Ge((...p)=>e.handleDragOver&&e.handleDragOver(...p),["stop"])),onDragend:t[5]||(t[5]=Ge((...p)=>e.handleDragEnd&&e.handleDragEnd(...p),["stop"])),onDrop:t[6]||(t[6]=Ge((...p)=>e.handleDrop&&e.handleDrop(...p),["stop"]))},[k("div",{class:$(e.ns.be("node","content")),style:De({paddingLeft:(e.node.level-1)*e.tree.props.indent+"px"})},[e.tree.props.icon||e.CaretRight?(y(),oe(l,{key:0,class:$([e.ns.be("node","expand-icon"),e.ns.is("leaf",e.node.isLeaf),{expanded:!e.node.isLeaf&&e.expanded}]),onClick:Ge(e.handleExpandIconClick,["stop"])},{default:G(()=>[(y(),oe(ut(e.tree.props.icon||e.CaretRight)))]),_:1},8,["class","onClick"])):Z("v-if",!0),e.showCheckbox?(y(),oe(i,{key:1,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:!!e.node.disabled,onClick:t[0]||(t[0]=Ge(()=>{},["stop"])),onChange:e.handleCheckChange},null,8,["model-value","indeterminate","disabled","onChange"])):Z("v-if",!0),e.node.loading?(y(),oe(l,{key:2,class:$([e.ns.be("node","loading-icon"),e.ns.is("loading")])},{default:G(()=>[W(u)]),_:1},8,["class"])):Z("v-if",!0),W(d,{node:e.node,"render-content":e.renderContent},null,8,["node","render-content"])],6),W(c,null,{default:G(()=>[!e.renderAfterExpand||e.childNodeRendered?Qe((y(),M("div",{key:0,class:$(e.ns.be("node","children")),role:"group","aria-expanded":e.expanded},[(y(!0),M(Fe,null,mt(e.node.childNodes,p=>(y(),oe(f,{key:e.getNodeKey(p),"render-content":e.renderContent,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,node:p,accordion:e.accordion,props:e.props,onNodeExpand:e.handleChildNodeExpand},null,8,["render-content","render-after-expand","show-checkbox","node","accordion","props","onNodeExpand"]))),128))],10,Ioe)),[[bt,e.expanded]]):Z("v-if",!0)]),_:1})],42,Noe)),[[bt,e.node.visible]])}var Poe=xe(Ooe,[["render",Roe],["__file","tree-node.vue"]]);function Loe({el$:e},t){const n=me("tree"),o=Rt([]),a=Rt([]);et(()=>{l()}),ua(()=>{o.value=Array.from(e.value.querySelectorAll("[role=treeitem]")),a.value=Array.from(e.value.querySelectorAll("input[type=checkbox]"))}),pe(a,i=>{i.forEach(u=>{u.setAttribute("tabindex","-1")})}),Vt(e,"keydown",i=>{const u=i.target;if(!u.className.includes(n.b("node")))return;const d=i.code;o.value=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`));const f=o.value.indexOf(u);let c;if([Ke.up,Ke.down].includes(d)){if(i.preventDefault(),d===Ke.up){c=f===-1?0:f!==0?f-1:o.value.length-1;const h=c;for(;!t.value.getNode(o.value[c].dataset.key).canFocus;){if(c--,c===h){c=-1;break}c<0&&(c=o.value.length-1)}}else{c=f===-1?0:f=o.value.length&&(c=0)}}c!==-1&&o.value[c].focus()}[Ke.left,Ke.right].includes(d)&&(i.preventDefault(),u.click());const p=u.querySelector('[type="checkbox"]');[Ke.enter,Ke.space].includes(d)&&p&&(i.preventDefault(),p.click())});const l=()=>{var i;o.value=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`)),a.value=Array.from(e.value.querySelectorAll("input[type=checkbox]"));const u=e.value.querySelectorAll(`.${n.is("checked")}[role=treeitem]`);if(u.length){u[0].setAttribute("tabindex","0");return}(i=o.value[0])==null||i.setAttribute("tabindex","0")}}const Voe=A({name:"ElTree",components:{ElTreeNode:Poe},props:{data:{type:Array,default:()=>[]},emptyText:{type:String},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{type:Object,default:()=>({children:"children",label:"label",disabled:"disabled"})},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},icon:{type:$t}},emits:["check-change","current-change","node-click","node-contextmenu","node-collapse","node-expand","check","node-drag-start","node-drag-end","node-drop","node-drag-leave","node-drag-enter","node-drag-over"],setup(e,t){const{t:n}=_t(),o=me("tree"),a=R(new Moe({key:e.nodeKey,data:e.data,lazy:e.lazy,props:e.props,load:e.load,currentNodeKey:e.currentNodeKey,checkStrictly:e.checkStrictly,checkDescendants:e.checkDescendants,defaultCheckedKeys:e.defaultCheckedKeys,defaultExpandedKeys:e.defaultExpandedKeys,autoExpandParent:e.autoExpandParent,defaultExpandAll:e.defaultExpandAll,filterNodeMethod:e.filterNodeMethod}));a.value.initialize();const r=R(a.value.root),l=R(null),i=R(null),u=R(null),{broadcastExpanded:d}=Ay(e),{dragState:f}=Aoe({props:e,ctx:t,el$:i,dropIndicator$:u,store:a});Loe({el$:i},a);const c=S(()=>{const{childNodes:I}=r.value;return!I||I.length===0||I.every(({visible:H})=>!H)});pe(()=>e.currentNodeKey,I=>{a.value.setCurrentNodeKey(I)}),pe(()=>e.defaultCheckedKeys,I=>{a.value.setDefaultCheckedKey(I)}),pe(()=>e.defaultExpandedKeys,I=>{a.value.setDefaultExpandedKeys(I)}),pe(()=>e.data,I=>{a.value.setData(I)},{deep:!0}),pe(()=>e.checkStrictly,I=>{a.value.checkStrictly=I});const p=I=>{if(!e.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");a.value.filter(I)},h=I=>gp(e.nodeKey,I.data),m=I=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");const H=a.value.getNode(I);if(!H)return[];const N=[H.data];let D=H.parent;for(;D&&D!==r.value;)N.push(D.data),D=D.parent;return N.reverse()},v=(I,H)=>a.value.getCheckedNodes(I,H),_=I=>a.value.getCheckedKeys(I),g=()=>{const I=a.value.getCurrentNode();return I?I.data:null},w=()=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");const I=g();return I?I[e.nodeKey]:null},b=(I,H)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");a.value.setCheckedNodes(I,H)},C=(I,H)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");a.value.setCheckedKeys(I,H)},x=(I,H,N)=>{a.value.setChecked(I,H,N)},E=()=>a.value.getHalfCheckedNodes(),O=()=>a.value.getHalfCheckedKeys(),T=(I,H=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");n0(a,t.emit,()=>a.value.setUserCurrentNode(I,H))},V=(I,H=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");n0(a,t.emit,()=>a.value.setCurrentNodeKey(I,H))},L=I=>a.value.getNode(I),P=I=>{a.value.remove(I)},z=(I,H)=>{a.value.append(I,H)},j=(I,H)=>{a.value.insertBefore(I,H)},K=(I,H)=>{a.value.insertAfter(I,H)},F=(I,H,N)=>{d(H),t.emit("node-expand",I,H,N)},B=(I,H)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");a.value.updateChildren(I,H)};return pt("RootTree",{ctx:t,props:e,store:a,root:r,currentNode:l,instance:rt()}),pt(Vo,void 0),{ns:o,store:a,root:r,currentNode:l,dragState:f,el$:i,dropIndicator$:u,isEmpty:c,filter:p,getNodeKey:h,getNodePath:m,getCheckedNodes:v,getCheckedKeys:_,getCurrentNode:g,getCurrentKey:w,setCheckedNodes:b,setCheckedKeys:C,setChecked:x,getHalfCheckedNodes:E,getHalfCheckedKeys:O,setCurrentNode:T,setCurrentKey:V,t:n,getNode:L,remove:P,append:z,insertBefore:j,insertAfter:K,handleNodeExpand:F,updateKeyChildren:B}}});function Boe(e,t,n,o,a,r){const l=nt("el-tree-node");return y(),M("div",{ref:"el$",class:$([e.ns.b(),e.ns.is("dragging",!!e.dragState.draggingNode),e.ns.is("drop-not-allow",!e.dragState.allowDrop),e.ns.is("drop-inner",e.dragState.dropType==="inner"),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[(y(!0),M(Fe,null,mt(e.root.childNodes,i=>(y(),oe(l,{key:e.getNodeKey(i),node:i,props:e.props,accordion:e.accordion,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent,onNodeExpand:e.handleNodeExpand},null,8,["node","props","accordion","render-after-expand","show-checkbox","render-content","onNodeExpand"]))),128)),e.isEmpty?(y(),M("div",{key:0,class:$(e.ns.e("empty-block"))},[re(e.$slots,"empty",{},()=>{var i;return[k("span",{class:$(e.ns.e("empty-text"))},Me((i=e.emptyText)!=null?i:e.t("el.tree.emptyText")),3)]})],2)):Z("v-if",!0),Qe(k("div",{ref:"dropIndicator$",class:$(e.ns.e("drop-indicator"))},null,2),[[bt,e.dragState.showDropIndicator]])],2)}var hu=xe(Voe,[["render",Boe],["__file","tree.vue"]]);hu.install=e=>{e.component(hu.name,hu)};const Ju=hu,zoe=Ju,Hoe=(e,{attrs:t,emit:n},{select:o,tree:a,key:r})=>{const l=me("tree-select");return pe(()=>e.data,()=>{e.filterable&&We(()=>{var u,d;(d=a.value)==null||d.filter((u=o.value)==null?void 0:u.states.inputValue)})},{flush:"post"}),{...Zo(un(e),Object.keys(Or.props)),...t,"onUpdate:modelValue":u=>n(it,u),valueKey:r,popperClass:S(()=>{const u=[l.e("popper")];return e.popperClass&&u.push(e.popperClass),u.join(" ")}),filterMethod:(u="")=>{var d;e.filterMethod?e.filterMethod(u):e.remoteMethod?e.remoteMethod(u):(d=a.value)==null||d.filter(u)}}},Doe=A({extends:Ku,setup(e,t){const n=Ku.setup(e,t);delete n.selectOptionClick;const o=rt().proxy;return We(()=>{n.select.states.cachedOptions.get(o.value)||n.select.onOptionCreate(o)}),n},methods:{selectOptionClick(){this.$el.parentElement.click()}}});function r0(e){return e||e===0}function yp(e){return Array.isArray(e)&&e.length}function Xl(e){return Array.isArray(e)?e:r0(e)?[e]:[]}function mu(e,t,n,o,a){for(let r=0;r{pe(()=>e.modelValue,()=>{e.showCheckbox&&We(()=>{const c=r.value;c&&!wn(c.getCheckedKeys(),Xl(e.modelValue))&&c.setCheckedKeys(Xl(e.modelValue))})},{immediate:!0,deep:!0});const i=S(()=>({value:l.value,label:"label",children:"children",disabled:"disabled",isLeaf:"isLeaf",...e.props})),u=(c,p)=>{var h;const m=i.value[c];return Xe(m)?m(p,(h=r.value)==null?void 0:h.getNode(u("value",p))):p[m]},d=Xl(e.modelValue).map(c=>mu(e.data||[],p=>u("value",p)===c,p=>u("children",p),(p,h,m,v)=>v&&u("value",v))).filter(c=>r0(c)),f=S(()=>{if(!e.renderAfterExpand&&!e.lazy)return[];const c=[];return l0(e.data.concat(e.cacheData),p=>{const h=u("value",p);c.push({value:h,currentLabel:u("label",p),isDisabled:u("disabled",p)})},p=>u("children",p)),c});return{...Zo(un(e),Object.keys(Ju.props)),...t,nodeKey:l,expandOnClickNode:S(()=>!e.checkStrictly&&e.expandOnClickNode),defaultExpandedKeys:S(()=>e.defaultExpandedKeys?e.defaultExpandedKeys.concat(d):d),renderContent:(c,{node:p,data:h,store:m})=>c(Doe,{value:u("value",h),label:u("label",h),disabled:u("disabled",h)},e.renderContent?()=>e.renderContent(c,{node:p,data:h,store:m}):n.default?()=>n.default({node:p,data:h,store:m}):void 0),filterNodeMethod:(c,p,h)=>e.filterNodeMethod?e.filterNodeMethod(c,p,h):c?new RegExp(o2(c),"i").test(u("label",p)||""):!0,onNodeClick:(c,p,h)=>{var m,v,_,g;if((m=t.onNodeClick)==null||m.call(t,c,p,h),!(e.showCheckbox&&e.checkOnClickNode)){if(!e.showCheckbox&&(e.checkStrictly||p.isLeaf)){if(!u("disabled",c)){const w=(v=a.value)==null?void 0:v.states.options.get(u("value",c));(_=a.value)==null||_.handleOptionSelect(w)}}else e.expandOnClickNode&&h.proxy.handleExpandIconClick();(g=a.value)==null||g.focus()}},onCheck:(c,p)=>{var h;if(!e.showCheckbox)return;const m=u("value",c),v={};l0([r.value.store.root],b=>v[b.key]=b,b=>b.childNodes);const _=p.checkedKeys,g=e.multiple?Xl(e.modelValue).filter(b=>!(b in v)&&!_.includes(b)):[],w=g.concat(_);if(e.checkStrictly)o(it,e.multiple?w:w.includes(m)?m:void 0);else if(e.multiple)o(it,g.concat(r.value.getCheckedKeys(!0)));else{const b=mu([c],E=>!yp(u("children",E))&&!u("disabled",E),E=>u("children",E)),C=b?u("value",b):void 0,x=r0(e.modelValue)&&!!mu([c],E=>u("value",E)===e.modelValue,E=>u("children",E));o(it,C===e.modelValue||x?void 0:C)}We(()=>{var b;const C=Xl(e.modelValue);r.value.setCheckedKeys(C),(b=t.onCheck)==null||b.call(t,c,{checkedKeys:r.value.getCheckedKeys(),checkedNodes:r.value.getCheckedNodes(),halfCheckedKeys:r.value.getHalfCheckedKeys(),halfCheckedNodes:r.value.getHalfCheckedNodes()})}),(h=a.value)==null||h.focus()},cacheOptions:f}};var Koe=A({props:{data:{type:Array,default:()=>[]}},setup(e){const t=Pe(ui);return pe(()=>e.data,()=>{var n;e.data.forEach(a=>{t.states.cachedOptions.has(a.value)||t.states.cachedOptions.set(a.value,a)});const o=((n=t.selectRef)==null?void 0:n.querySelectorAll("input"))||[];Array.from(o).includes(document.activeElement)||t.setSelected()},{flush:"post",immediate:!0}),()=>{}}});const Woe=A({name:"ElTreeSelect",inheritAttrs:!1,props:{...Or.props,...Ju.props,cacheData:{type:Array,default:()=>[]}},setup(e,t){const{slots:n,expose:o}=t,a=R(),r=R(),l=S(()=>e.nodeKey||e.valueKey||"value"),i=Hoe(e,t,{select:a,tree:r,key:l}),{cacheOptions:u,...d}=Foe(e,t,{select:a,tree:r,key:l}),f=wt({});return o(f),et(()=>{Object.assign(f,{...Zo(r.value,["filter","updateKeyChildren","getCheckedNodes","setCheckedNodes","getCheckedKeys","setCheckedKeys","setChecked","getHalfCheckedNodes","getHalfCheckedKeys","getCurrentKey","getCurrentNode","setCurrentKey","setCurrentNode","getNode","remove","append","insertBefore","insertAfter"]),...Zo(a.value,["focus","blur"])})}),()=>qe(Or,wt({...i,ref:c=>a.value=c}),{...n,default:()=>[qe(Koe,{data:u.value}),qe(Ju,wt({...d,ref:c=>r.value=c}))]})}});var gu=xe(Woe,[["__file","tree-select.vue"]]);gu.install=e=>{e.component(gu.name,gu)};const joe=gu,qoe=joe,_p=Symbol(),Uoe={key:-1,level:-1,data:{}};var ns=(e=>(e.KEY="id",e.LABEL="label",e.CHILDREN="children",e.DISABLED="disabled",e))(ns||{}),s0=(e=>(e.ADD="add",e.DELETE="delete",e))(s0||{});const Ny={type:Number,default:26},Yoe=Ee({data:{type:X(Array),default:()=>Ht([])},emptyText:{type:String},height:{type:Number,default:200},props:{type:X(Object),default:()=>Ht({children:"children",label:"label",disabled:"disabled",value:"id"})},highlightCurrent:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},defaultCheckedKeys:{type:X(Array),default:()=>Ht([])},checkStrictly:{type:Boolean,default:!1},defaultExpandedKeys:{type:X(Array),default:()=>Ht([])},indent:{type:Number,default:16},itemSize:Ny,icon:{type:$t},expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:{type:Boolean,default:!1},currentNodeKey:{type:X([String,Number])},accordion:{type:Boolean,default:!1},filterMethod:{type:X(Function)},perfMode:{type:Boolean,default:!0}}),Goe=Ee({node:{type:X(Object),default:()=>Ht(Uoe)},expanded:{type:Boolean,default:!1},checked:{type:Boolean,default:!1},indeterminate:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},current:{type:Boolean,default:!1},hiddenExpandIcon:{type:Boolean,default:!1},itemSize:Ny}),Xoe=Ee({node:{type:X(Object),required:!0}}),Iy="node-click",Ry="node-expand",Py="node-collapse",Ly="current-change",Vy="check",By="check-change",zy="node-contextmenu",Joe={[Iy]:(e,t,n)=>e&&t&&n,[Ry]:(e,t)=>e&&t,[Py]:(e,t)=>e&&t,[Ly]:(e,t)=>e&&t,[Vy]:(e,t)=>e&&t,[By]:(e,t)=>e&&typeof t=="boolean",[zy]:(e,t,n)=>e&&t&&n},Zoe={click:(e,t)=>!!(e&&t),toggle:e=>!!e,check:(e,t)=>e&&typeof t=="boolean"};function Qoe(e,t){const n=R(new Set),o=R(new Set),{emit:a}=rt();pe([()=>t.value,()=>e.defaultCheckedKeys],()=>We(()=>{w(e.defaultCheckedKeys)}),{immediate:!0});const r=()=>{if(!t.value||!e.showCheckbox||e.checkStrictly)return;const{levelTreeNodeMap:b,maxLevel:C}=t.value,x=n.value,E=new Set;for(let O=C-1;O>=1;--O){const T=b.get(O);T&&T.forEach(V=>{const L=V.children;if(L){let P=!0,z=!1;for(const j of L){const K=j.key;if(x.has(K))z=!0;else if(E.has(K)){P=!1,z=!0;break}else P=!1}P?x.add(V.key):z?(E.add(V.key),x.delete(V.key)):(x.delete(V.key),E.delete(V.key))}})}o.value=E},l=b=>n.value.has(b.key),i=b=>o.value.has(b.key),u=(b,C,x=!0)=>{const E=n.value,O=(T,V)=>{E[V?s0.ADD:s0.DELETE](T.key);const L=T.children;!e.checkStrictly&&L&&L.forEach(P=>{P.disabled||O(P,V)})};O(b,C),r(),x&&d(b,C)},d=(b,C)=>{const{checkedNodes:x,checkedKeys:E}=m(),{halfCheckedNodes:O,halfCheckedKeys:T}=v();a(Vy,b.data,{checkedKeys:E,checkedNodes:x,halfCheckedKeys:T,halfCheckedNodes:O}),a(By,b.data,C)};function f(b=!1){return m(b).checkedKeys}function c(b=!1){return m(b).checkedNodes}function p(){return v().halfCheckedKeys}function h(){return v().halfCheckedNodes}function m(b=!1){const C=[],x=[];if(t!=null&&t.value&&e.showCheckbox){const{treeNodeMap:E}=t.value;n.value.forEach(O=>{const T=E.get(O);T&&(!b||b&&T.isLeaf)&&(x.push(O),C.push(T.data))})}return{checkedKeys:x,checkedNodes:C}}function v(){const b=[],C=[];if(t!=null&&t.value&&e.showCheckbox){const{treeNodeMap:x}=t.value;o.value.forEach(E=>{const O=x.get(E);O&&(C.push(E),b.push(O.data))})}return{halfCheckedNodes:b,halfCheckedKeys:C}}function _(b){n.value.clear(),o.value.clear(),We(()=>{w(b)})}function g(b,C){if(t!=null&&t.value&&e.showCheckbox){const x=t.value.treeNodeMap.get(b);x&&u(x,C,!1)}}function w(b){if(t!=null&&t.value){const{treeNodeMap:C}=t.value;if(e.showCheckbox&&C&&b)for(const x of b){const E=C.get(x);E&&!l(E)&&u(E,!0,!1)}}}return{updateCheckedKeys:r,toggleCheckbox:u,isChecked:l,isIndeterminate:i,getCheckedKeys:f,getCheckedNodes:c,getHalfCheckedKeys:p,getHalfCheckedNodes:h,setChecked:g,setCheckedKeys:_}}function eae(e,t){const n=R(new Set([])),o=R(new Set([])),a=S(()=>Xe(e.filterMethod));function r(i){var u;if(!a.value)return;const d=new Set,f=o.value,c=n.value,p=[],h=((u=t.value)==null?void 0:u.treeNodes)||[],m=e.filterMethod;c.clear();function v(_){_.forEach(g=>{p.push(g),m!=null&&m(i,g.data)?p.forEach(b=>{d.add(b.key)}):g.isLeaf&&c.add(g.key);const w=g.children;if(w&&v(w),!g.isLeaf){if(!d.has(g.key))c.add(g.key);else if(w){let b=!0;for(const C of w)if(!c.has(C.key)){b=!1;break}b?f.add(g.key):f.delete(g.key)}}p.pop()})}return v(h),d}function l(i){return o.value.has(i.key)}return{hiddenExpandIconKeySet:o,hiddenNodeKeySet:n,doFilter:r,isForceHiddenExpandIcon:l}}function tae(e,t){const n=R(new Set(e.defaultExpandedKeys)),o=R(),a=Rt();pe(()=>e.currentNodeKey,ae=>{o.value=ae},{immediate:!0}),pe(()=>e.data,ae=>{Q(ae)},{immediate:!0});const{isIndeterminate:r,isChecked:l,toggleCheckbox:i,getCheckedKeys:u,getCheckedNodes:d,getHalfCheckedKeys:f,getHalfCheckedNodes:c,setChecked:p,setCheckedKeys:h}=Qoe(e,a),{doFilter:m,hiddenNodeKeySet:v,isForceHiddenExpandIcon:_}=eae(e,a),g=S(()=>{var ae;return((ae=e.props)==null?void 0:ae.value)||ns.KEY}),w=S(()=>{var ae;return((ae=e.props)==null?void 0:ae.children)||ns.CHILDREN}),b=S(()=>{var ae;return((ae=e.props)==null?void 0:ae.disabled)||ns.DISABLED}),C=S(()=>{var ae;return((ae=e.props)==null?void 0:ae.label)||ns.LABEL}),x=S(()=>{const ae=n.value,Te=v.value,ce=[],ge=a.value&&a.value.treeNodes||[];function Ae(){const U=[];for(let te=ge.length-1;te>=0;--te)U.push(ge[te]);for(;U.length;){const te=U.pop();if(te&&(Te.has(te.key)||ce.push(te),ae.has(te.key))){const ve=te.children;if(ve){const be=ve.length;for(let ue=be-1;ue>=0;--ue)U.push(ve[ue])}}}}return Ae(),ce}),E=S(()=>x.value.length>0);function O(ae){const Te=new Map,ce=new Map;let ge=1;function Ae(te,ve=1,be=void 0){var ue;const ye=[];for(const we of te){const Ce=L(we),he={level:ve,key:Ce,data:we};he.label=z(we),he.parent=be;const Se=V(we);he.disabled=P(we),he.isLeaf=!Se||Se.length===0,Se&&Se.length&&(he.children=Ae(Se,ve+1,he)),ye.push(he),Te.set(Ce,he),ce.has(ve)||ce.set(ve,[]),(ue=ce.get(ve))==null||ue.push(he)}return ve>ge&&(ge=ve),ye}const U=Ae(ae);return{treeNodeMap:Te,levelTreeNodeMap:ce,maxLevel:ge,treeNodes:U}}function T(ae){const Te=m(ae);Te&&(n.value=Te)}function V(ae){return ae[w.value]}function L(ae){return ae?ae[g.value]:""}function P(ae){return ae[b.value]}function z(ae){return ae[C.value]}function j(ae){n.value.has(ae.key)?N(ae):H(ae)}function K(ae){n.value=new Set(ae)}function F(ae,Te){t(Iy,ae.data,ae,Te),B(ae),e.expandOnClickNode&&j(ae),e.showCheckbox&&e.checkOnClickNode&&!ae.disabled&&i(ae,!l(ae),!0)}function B(ae){Y(ae)||(o.value=ae.key,t(Ly,ae.data,ae))}function I(ae,Te){i(ae,Te)}function H(ae){const Te=n.value;if(a.value&&e.accordion){const{treeNodeMap:ce}=a.value;Te.forEach(ge=>{const Ae=ce.get(ge);ae&&ae.level===(Ae==null?void 0:Ae.level)&&Te.delete(ge)})}Te.add(ae.key),t(Ry,ae.data,ae)}function N(ae){n.value.delete(ae.key),t(Py,ae.data,ae)}function D(ae){return n.value.has(ae.key)}function q(ae){return!!ae.disabled}function Y(ae){const Te=o.value;return Te!==void 0&&Te===ae.key}function J(){var ae,Te;if(o.value)return(Te=(ae=a.value)==null?void 0:ae.treeNodeMap.get(o.value))==null?void 0:Te.data}function se(){return o.value}function _e(ae){o.value=ae}function Q(ae){We(()=>a.value=O(ae))}function le(ae){var Te;const ce=ct(ae)?L(ae):ae;return(Te=a.value)==null?void 0:Te.treeNodeMap.get(ce)}return{tree:a,flattenTree:x,isNotEmpty:E,getKey:L,getChildren:V,toggleExpand:j,toggleCheckbox:i,isExpanded:D,isChecked:l,isIndeterminate:r,isDisabled:q,isCurrent:Y,isForceHiddenExpandIcon:_,handleNodeClick:F,handleNodeCheck:I,getCurrentNode:J,getCurrentKey:se,setCurrentKey:_e,getCheckedKeys:u,getCheckedNodes:d,getHalfCheckedKeys:f,getHalfCheckedNodes:c,setChecked:p,setCheckedKeys:h,filter:T,setData:Q,getNode:le,expandNode:H,collapseNode:N,setExpandedKeys:K}}var nae=A({name:"ElTreeNodeContent",props:Xoe,setup(e){const t=Pe(_p),n=me("tree");return()=>{const o=e.node,{data:a}=o;return t!=null&&t.ctx.slots.default?t.ctx.slots.default({node:o,data:a}):qe("span",{class:n.be("node","label")},[o==null?void 0:o.label])}}});const oae=["aria-expanded","aria-disabled","aria-checked","data-key","onClick"],aae=A({name:"ElTreeNode"}),rae=A({...aae,props:Goe,emits:Zoe,setup(e,{emit:t}){const n=e,o=Pe(_p),a=me("tree"),r=S(()=>{var c;return(c=o==null?void 0:o.props.indent)!=null?c:16}),l=S(()=>{var c;return(c=o==null?void 0:o.props.icon)!=null?c:r2}),i=c=>{t("click",n.node,c)},u=()=>{t("toggle",n.node)},d=c=>{t("check",n.node,c)},f=c=>{var p,h,m,v;(m=(h=(p=o==null?void 0:o.instance)==null?void 0:p.vnode)==null?void 0:h.props)!=null&&m.onNodeContextmenu&&(c.stopPropagation(),c.preventDefault()),o==null||o.ctx.emit(zy,c,(v=n.node)==null?void 0:v.data,n.node)};return(c,p)=>{var h,m,v;return y(),M("div",{ref:"node$",class:$([s(a).b("node"),s(a).is("expanded",c.expanded),s(a).is("current",c.current),s(a).is("focusable",!c.disabled),s(a).is("checked",!c.disabled&&c.checked)]),role:"treeitem",tabindex:"-1","aria-expanded":c.expanded,"aria-disabled":c.disabled,"aria-checked":c.checked,"data-key":(h=c.node)==null?void 0:h.key,onClick:Ge(i,["stop"]),onContextmenu:f},[k("div",{class:$(s(a).be("node","content")),style:De({paddingLeft:`${(c.node.level-1)*s(r)}px`,height:c.itemSize+"px"})},[s(l)?(y(),oe(s(Be),{key:0,class:$([s(a).is("leaf",!!((m=c.node)!=null&&m.isLeaf)),s(a).is("hidden",c.hiddenExpandIcon),{expanded:!((v=c.node)!=null&&v.isLeaf)&&c.expanded},s(a).be("node","expand-icon")]),onClick:Ge(u,["stop"])},{default:G(()=>[(y(),oe(ut(s(l))))]),_:1},8,["class","onClick"])):Z("v-if",!0),c.showCheckbox?(y(),oe(s(vo),{key:1,"model-value":c.checked,indeterminate:c.indeterminate,disabled:c.disabled,onChange:d,onClick:p[0]||(p[0]=Ge(()=>{},["stop"]))},null,8,["model-value","indeterminate","disabled"])):Z("v-if",!0),W(s(nae),{node:c.node},null,8,["node"])],6)],42,oae)}}});var lae=xe(rae,[["__file","tree-node.vue"]]);const sae=A({name:"ElTreeV2"}),iae=A({...sae,props:Yoe,emits:Joe,setup(e,{expose:t,emit:n}){const o=e,a=fn(),r=S(()=>o.itemSize);pt(_p,{ctx:{emit:n,slots:a},props:o,instance:rt()}),pt(Vo,void 0);const{t:l}=_t(),i=me("tree"),{flattenTree:u,isNotEmpty:d,toggleExpand:f,isExpanded:c,isIndeterminate:p,isChecked:h,isDisabled:m,isCurrent:v,isForceHiddenExpandIcon:_,handleNodeClick:g,handleNodeCheck:w,toggleCheckbox:b,getCurrentNode:C,getCurrentKey:x,setCurrentKey:E,getCheckedKeys:O,getCheckedNodes:T,getHalfCheckedKeys:V,getHalfCheckedNodes:L,setChecked:P,setCheckedKeys:z,filter:j,setData:K,getNode:F,expandNode:B,collapseNode:I,setExpandedKeys:H}=tae(o,n);return t({toggleCheckbox:b,getCurrentNode:C,getCurrentKey:x,setCurrentKey:E,getCheckedKeys:O,getCheckedNodes:T,getHalfCheckedKeys:V,getHalfCheckedNodes:L,setChecked:P,setCheckedKeys:z,filter:j,setData:K,getNode:F,expandNode:B,collapseNode:I,setExpandedKeys:H}),(N,D)=>{var q;return y(),M("div",{class:$([s(i).b(),{[s(i).m("highlight-current")]:N.highlightCurrent}]),role:"tree"},[s(d)?(y(),oe(s(F8),{key:0,"class-name":s(i).b("virtual-list"),data:s(u),total:s(u).length,height:N.height,"item-size":s(r),"perf-mode":N.perfMode},{default:G(({data:Y,index:J,style:se})=>[(y(),oe(lae,{key:Y[J].key,style:De(se),node:Y[J],expanded:s(c)(Y[J]),"show-checkbox":N.showCheckbox,checked:s(h)(Y[J]),indeterminate:s(p)(Y[J]),"item-size":s(r),disabled:s(m)(Y[J]),current:s(v)(Y[J]),"hidden-expand-icon":s(_)(Y[J]),onClick:s(g),onToggle:s(f),onCheck:s(w)},null,8,["style","node","expanded","show-checkbox","checked","indeterminate","item-size","disabled","current","hidden-expand-icon","onClick","onToggle","onCheck"]))]),_:1},8,["class-name","data","total","height","item-size","perf-mode"])):(y(),M("div",{key:1,class:$(s(i).e("empty-block"))},[k("span",{class:$(s(i).e("empty-text"))},Me((q=N.emptyText)!=null?q:s(l)("el.tree.emptyText")),3)],2))],2)}}});var uae=xe(iae,[["__file","tree.vue"]]);const cae=lt(uae),Hy=Symbol("uploadContextKey"),dae="ElUpload";class fae extends Error{constructor(t,n,o,a){super(t),this.name="UploadAjaxError",this.status=n,this.method=o,this.url=a}}function Xh(e,t,n){let o;return n.response?o=`${n.response.error||n.response}`:n.responseText?o=`${n.responseText}`:o=`fail to ${t.method} ${e} ${n.status}`,new fae(o,n.status,t.method,e)}function pae(e){const t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch{return t}}const vae=e=>{typeof XMLHttpRequest>"u"&&on(dae,"XMLHttpRequest is undefined");const t=new XMLHttpRequest,n=e.action;t.upload&&t.upload.addEventListener("progress",r=>{const l=r;l.percent=r.total>0?r.loaded/r.total*100:0,e.onProgress(l)});const o=new FormData;if(e.data)for(const[r,l]of Object.entries(e.data))Ie(l)&&l.length?o.append(r,...l):o.append(r,l);o.append(e.filename,e.file,e.file.name),t.addEventListener("error",()=>{e.onError(Xh(n,e,t))}),t.addEventListener("load",()=>{if(t.status<200||t.status>=300)return e.onError(Xh(n,e,t));e.onSuccess(pae(t))}),t.open(e.method,n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);const a=e.headers||{};if(a instanceof Headers)a.forEach((r,l)=>t.setRequestHeader(l,r));else for(const[r,l]of Object.entries(a))tn(l)||t.setRequestHeader(r,String(l));return t.send(o),t},Dy=["text","picture","picture-card"];let hae=1;const i0=()=>Date.now()+hae++,Fy=Ee({action:{type:String,default:"#"},headers:{type:X(Object)},method:{type:String,default:"post"},data:{type:X([Object,Function,Promise]),default:()=>Ht({})},multiple:{type:Boolean,default:!1},name:{type:String,default:"file"},drag:{type:Boolean,default:!1},withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},fileList:{type:X(Array),default:()=>Ht([])},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:Dy,default:"text"},httpRequest:{type:X(Function),default:vae},disabled:Boolean,limit:Number}),mae=Ee({...Fy,beforeUpload:{type:X(Function),default:Et},beforeRemove:{type:X(Function)},onRemove:{type:X(Function),default:Et},onChange:{type:X(Function),default:Et},onPreview:{type:X(Function),default:Et},onSuccess:{type:X(Function),default:Et},onProgress:{type:X(Function),default:Et},onError:{type:X(Function),default:Et},onExceed:{type:X(Function),default:Et},crossorigin:{type:X(String)}}),gae=Ee({files:{type:X(Array),default:()=>Ht([])},disabled:{type:Boolean,default:!1},handlePreview:{type:X(Function),default:Et},listType:{type:String,values:Dy,default:"text"},crossorigin:{type:X(String)}}),yae={remove:e=>!!e},_ae=["onKeydown"],bae=["src","crossorigin"],wae=["onClick"],Cae=["title"],Sae=["onClick"],kae=["onClick"],Eae=A({name:"ElUploadList"}),xae=A({...Eae,props:gae,emits:yae,setup(e,{emit:t}){const n=e,{t:o}=_t(),a=me("upload"),r=me("icon"),l=me("list"),i=Dn(),u=R(!1),d=S(()=>[a.b("list"),a.bm("list",n.listType),a.is("disabled",n.disabled)]),f=c=>{t("remove",c)};return(c,p)=>(y(),oe(M4,{tag:"ul",class:$(s(d)),name:s(l).b()},{default:G(()=>[(y(!0),M(Fe,null,mt(c.files,h=>(y(),M("li",{key:h.uid||h.name,class:$([s(a).be("list","item"),s(a).is(h.status),{focusing:u.value}]),tabindex:"0",onKeydown:Mt(m=>!s(i)&&f(h),["delete"]),onFocus:p[0]||(p[0]=m=>u.value=!0),onBlur:p[1]||(p[1]=m=>u.value=!1),onClick:p[2]||(p[2]=m=>u.value=!1)},[re(c.$slots,"default",{file:h},()=>[c.listType==="picture"||h.status!=="uploading"&&c.listType==="picture-card"?(y(),M("img",{key:0,class:$(s(a).be("list","item-thumbnail")),src:h.url,crossorigin:c.crossorigin,alt:""},null,10,bae)):Z("v-if",!0),h.status==="uploading"||c.listType!=="picture-card"?(y(),M("div",{key:1,class:$(s(a).be("list","item-info"))},[k("a",{class:$(s(a).be("list","item-name")),onClick:Ge(m=>c.handlePreview(h),["prevent"])},[W(s(Be),{class:$(s(r).m("document"))},{default:G(()=>[W(s(Lg))]),_:1},8,["class"]),k("span",{class:$(s(a).be("list","item-file-name")),title:h.name},Me(h.name),11,Cae)],10,wae),h.status==="uploading"?(y(),oe(s(I8),{key:0,type:c.listType==="picture-card"?"circle":"line","stroke-width":c.listType==="picture-card"?6:2,percentage:Number(h.percentage),style:De(c.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):Z("v-if",!0)],2)):Z("v-if",!0),k("label",{class:$(s(a).be("list","item-status-label"))},[c.listType==="text"?(y(),oe(s(Be),{key:0,class:$([s(r).m("upload-success"),s(r).m("circle-check")])},{default:G(()=>[W(s(Sc))]),_:1},8,["class"])):["picture-card","picture"].includes(c.listType)?(y(),oe(s(Be),{key:1,class:$([s(r).m("upload-success"),s(r).m("check")])},{default:G(()=>[W(s(Bl))]),_:1},8,["class"])):Z("v-if",!0)],2),s(i)?Z("v-if",!0):(y(),oe(s(Be),{key:2,class:$(s(r).m("close")),onClick:m=>f(h)},{default:G(()=>[W(s(uo))]),_:2},1032,["class","onClick"])),Z(" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn"),Z(" This is a bug which needs to be fixed "),Z(" TODO: Fix the incorrect navigation interaction "),s(i)?Z("v-if",!0):(y(),M("i",{key:3,class:$(s(r).m("close-tip"))},Me(s(o)("el.upload.deleteTip")),3)),c.listType==="picture-card"?(y(),M("span",{key:4,class:$(s(a).be("list","item-actions"))},[k("span",{class:$(s(a).be("list","item-preview")),onClick:m=>c.handlePreview(h)},[W(s(Be),{class:$(s(r).m("zoom-in"))},{default:G(()=>[W(s(u2))]),_:1},8,["class"])],10,Sae),s(i)?Z("v-if",!0):(y(),M("span",{key:0,class:$(s(a).be("list","item-delete")),onClick:m=>f(h)},[W(s(Be),{class:$(s(r).m("delete"))},{default:G(()=>[W(s(Pg))]),_:1},8,["class"])],10,kae))],2)):Z("v-if",!0)])],42,_ae))),128)),re(c.$slots,"append")]),_:3},8,["class","name"]))}});var Jh=xe(xae,[["__file","upload-list.vue"]]);const Mae=Ee({disabled:{type:Boolean,default:!1}}),$ae={file:e=>Ie(e)},Tae=["onDrop","onDragover"],Ky="ElUploadDrag",Aae=A({name:Ky}),Oae=A({...Aae,props:Mae,emits:$ae,setup(e,{emit:t}){Pe(Hy)||on(Ky,"usage: ");const o=me("upload"),a=R(!1),r=Dn(),l=u=>{if(r.value)return;a.value=!1,u.stopPropagation();const d=Array.from(u.dataTransfer.files);t("file",d)},i=()=>{r.value||(a.value=!0)};return(u,d)=>(y(),M("div",{class:$([s(o).b("dragger"),s(o).is("dragover",a.value)]),onDrop:Ge(l,["prevent"]),onDragover:Ge(i,["prevent"]),onDragleave:d[0]||(d[0]=Ge(f=>a.value=!1,["prevent"]))},[re(u.$slots,"default")],42,Tae))}});var Nae=xe(Oae,[["__file","upload-dragger.vue"]]);const Iae=Ee({...Fy,beforeUpload:{type:X(Function),default:Et},onRemove:{type:X(Function),default:Et},onStart:{type:X(Function),default:Et},onSuccess:{type:X(Function),default:Et},onProgress:{type:X(Function),default:Et},onError:{type:X(Function),default:Et},onExceed:{type:X(Function),default:Et}}),Rae=["onKeydown"],Pae=["name","multiple","accept"],Lae=A({name:"ElUploadContent",inheritAttrs:!1}),Vae=A({...Lae,props:Iae,setup(e,{expose:t}){const n=e,o=me("upload"),a=Dn(),r=Rt({}),l=Rt(),i=v=>{if(v.length===0)return;const{autoUpload:_,limit:g,fileList:w,multiple:b,onStart:C,onExceed:x}=n;if(g&&w.length+v.length>g){x(v,w);return}b||(v=v.slice(0,1));for(const E of v){const O=E;O.uid=i0(),C(O),_&&u(O)}},u=async v=>{if(l.value.value="",!n.beforeUpload)return f(v);let _,g={};try{const b=n.data,C=n.beforeUpload(v);g=Cu(n.data)?Ru(n.data):n.data,_=await C,Cu(n.data)&&wn(b,g)&&(g=Ru(n.data))}catch{_=!1}if(_===!1){n.onRemove(v);return}let w=v;_ instanceof Blob&&(_ instanceof File?w=_:w=new File([_],v.name,{type:v.type})),f(Object.assign(w,{uid:v.uid}),g)},d=async(v,_)=>Xe(v)?v(_):v,f=async(v,_)=>{const{headers:g,data:w,method:b,withCredentials:C,name:x,action:E,onProgress:O,onSuccess:T,onError:V,httpRequest:L}=n;try{_=await d(_??w,v)}catch{n.onRemove(v);return}const{uid:P}=v,z={headers:g||{},withCredentials:C,file:v,data:_,method:b,filename:x,action:E,onProgress:K=>{O(K,v)},onSuccess:K=>{T(K,v),delete r.value[P]},onError:K=>{V(K,v),delete r.value[P]}},j=L(z);r.value[P]=j,j instanceof Promise&&j.then(z.onSuccess,z.onError)},c=v=>{const _=v.target.files;_&&i(Array.from(_))},p=()=>{a.value||(l.value.value="",l.value.click())},h=()=>{p()};return t({abort:v=>{vE(r.value).filter(v?([g])=>String(v.uid)===g:()=>!0).forEach(([g,w])=>{w instanceof XMLHttpRequest&&w.abort(),delete r.value[g]})},upload:u}),(v,_)=>(y(),M("div",{class:$([s(o).b(),s(o).m(v.listType),s(o).is("drag",v.drag)]),tabindex:"0",onClick:p,onKeydown:Mt(Ge(h,["self"]),["enter","space"])},[v.drag?(y(),oe(Nae,{key:0,disabled:s(a),onFile:i},{default:G(()=>[re(v.$slots,"default")]),_:3},8,["disabled"])):re(v.$slots,"default",{key:1}),k("input",{ref_key:"inputRef",ref:l,class:$(s(o).e("input")),name:v.name,multiple:v.multiple,accept:v.accept,type:"file",onChange:c,onClick:_[0]||(_[0]=Ge(()=>{},["stop"]))},null,42,Pae)],42,Rae))}});var Zh=xe(Vae,[["__file","upload-content.vue"]]);const Qh="ElUpload",em=e=>{var t;(t=e.url)!=null&&t.startsWith("blob:")&&URL.revokeObjectURL(e.url)},Bae=(e,t)=>{const n=H4(e,"fileList",void 0,{passive:!0}),o=p=>n.value.find(h=>h.uid===p.uid);function a(p){var h;(h=t.value)==null||h.abort(p)}function r(p=["ready","uploading","success","fail"]){n.value=n.value.filter(h=>!p.includes(h.status))}const l=(p,h)=>{const m=o(h);m&&(console.error(p),m.status="fail",n.value.splice(n.value.indexOf(m),1),e.onError(p,m,n.value),e.onChange(m,n.value))},i=(p,h)=>{const m=o(h);m&&(e.onProgress(p,m,n.value),m.status="uploading",m.percentage=Math.round(p.percent))},u=(p,h)=>{const m=o(h);m&&(m.status="success",m.response=p,e.onSuccess(p,m,n.value),e.onChange(m,n.value))},d=p=>{tn(p.uid)&&(p.uid=i0());const h={name:p.name,percentage:0,status:"ready",size:p.size,raw:p,uid:p.uid};if(e.listType==="picture-card"||e.listType==="picture")try{h.url=URL.createObjectURL(p)}catch(m){m.message,e.onError(m,h,n.value)}n.value=[...n.value,h],e.onChange(h,n.value)},f=async p=>{const h=p instanceof File?o(p):p;h||on(Qh,"file to be removed not found");const m=v=>{a(v);const _=n.value;_.splice(_.indexOf(v),1),e.onRemove(v,_),em(v)};e.beforeRemove?await e.beforeRemove(h,n.value)!==!1&&m(h):m(h)};function c(){n.value.filter(({status:p})=>p==="ready").forEach(({raw:p})=>{var h;return p&&((h=t.value)==null?void 0:h.upload(p))})}return pe(()=>e.listType,p=>{p!=="picture-card"&&p!=="picture"||(n.value=n.value.map(h=>{const{raw:m,url:v}=h;if(!v&&m)try{h.url=URL.createObjectURL(m)}catch(_){e.onError(_,h,n.value)}return h}))}),pe(n,p=>{for(const h of p)h.uid||(h.uid=i0()),h.status||(h.status="success")},{immediate:!0,deep:!0}),{uploadFiles:n,abort:a,clearFiles:r,handleError:l,handleProgress:i,handleStart:d,handleSuccess:u,handleRemove:f,submit:c,revokeFileObjectURL:em}},zae=A({name:"ElUpload"}),Hae=A({...zae,props:mae,setup(e,{expose:t}){const n=e,o=Dn(),a=Rt(),{abort:r,submit:l,clearFiles:i,uploadFiles:u,handleStart:d,handleError:f,handleRemove:c,handleSuccess:p,handleProgress:h,revokeFileObjectURL:m}=Bae(n,a),v=S(()=>n.listType==="picture-card"),_=S(()=>({...n,fileList:u.value,onStart:d,onProgress:h,onSuccess:p,onError:f,onRemove:c}));return It(()=>{u.value.forEach(m)}),pt(Hy,{accept:At(n,"accept")}),t({abort:r,submit:l,clearFiles:i,handleStart:d,handleRemove:c}),(g,w)=>(y(),M("div",null,[s(v)&&g.showFileList?(y(),oe(Jh,{key:0,disabled:s(o),"list-type":g.listType,files:s(u),crossorigin:g.crossorigin,"handle-preview":g.onPreview,onRemove:s(c)},na({append:G(()=>[W(Zh,ft({ref_key:"uploadRef",ref:a},s(_)),{default:G(()=>[g.$slots.trigger?re(g.$slots,"trigger",{key:0}):Z("v-if",!0),!g.$slots.trigger&&g.$slots.default?re(g.$slots,"default",{key:1}):Z("v-if",!0)]),_:3},16)]),_:2},[g.$slots.file?{name:"default",fn:G(({file:b})=>[re(g.$slots,"file",{file:b})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):Z("v-if",!0),!s(v)||s(v)&&!g.showFileList?(y(),oe(Zh,ft({key:1,ref_key:"uploadRef",ref:a},s(_)),{default:G(()=>[g.$slots.trigger?re(g.$slots,"trigger",{key:0}):Z("v-if",!0),!g.$slots.trigger&&g.$slots.default?re(g.$slots,"default",{key:1}):Z("v-if",!0)]),_:3},16)):Z("v-if",!0),g.$slots.trigger?re(g.$slots,"default",{key:2}):Z("v-if",!0),re(g.$slots,"tip"),!s(v)&&g.showFileList?(y(),oe(Jh,{key:3,disabled:s(o),"list-type":g.listType,files:s(u),crossorigin:g.crossorigin,"handle-preview":g.onPreview,onRemove:s(c)},na({_:2},[g.$slots.file?{name:"default",fn:G(({file:b})=>[re(g.$slots,"file",{file:b})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):Z("v-if",!0)]))}});var Dae=xe(Hae,[["__file","upload.vue"]]);const Fae=lt(Dae),Kae=Ee({zIndex:{type:Number,default:9},rotate:{type:Number,default:-22},width:Number,height:Number,image:String,content:{type:X([String,Array]),default:"Element Plus"},font:{type:X(Object)},gap:{type:X(Array),default:()=>[100,100]},offset:{type:X(Array)}});function Wae(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function jae(e){return Object.keys(e).map(t=>`${Wae(t)}: ${e[t]};`).join(" ")}function qae(){return window.devicePixelRatio||1}const Uae=(e,t)=>{let n=!1;return e.removedNodes.length&&t&&(n=Array.from(e.removedNodes).includes(t)),e.type==="attributes"&&e.target===t&&(n=!0),n},Wy=3;function Vd(e,t,n=1){const o=document.createElement("canvas"),a=o.getContext("2d"),r=e*n,l=t*n;return o.setAttribute("width",`${r}px`),o.setAttribute("height",`${l}px`),a.save(),[a,o,r,l]}function Yae(){function e(t,n,o,a,r,l,i,u){const[d,f,c,p]=Vd(a,r,o);if(t instanceof HTMLImageElement)d.drawImage(t,0,0,c,p);else{const{color:q,fontSize:Y,fontStyle:J,fontWeight:se,fontFamily:_e,textAlign:Q,textBaseline:le}=l,ae=Number(Y)*o;d.font=`${J} normal ${se} ${ae}px/${r}px ${_e}`,d.fillStyle=q,d.textAlign=Q,d.textBaseline=le;const Te=Array.isArray(t)?t:[t];Te==null||Te.forEach((ce,ge)=>{d.fillText(ce??"",c/2,ge*(ae+Wy*o))})}const h=Math.PI/180*Number(n),m=Math.max(a,r),[v,_,g]=Vd(m,m,o);v.translate(g/2,g/2),v.rotate(h),c>0&&p>0&&v.drawImage(f,-c/2,-p/2);function w(q,Y){const J=q*Math.cos(h)-Y*Math.sin(h),se=q*Math.sin(h)+Y*Math.cos(h);return[J,se]}let b=0,C=0,x=0,E=0;const O=c/2,T=p/2;[[0-O,0-T],[0+O,0-T],[0+O,0+T],[0-O,0+T]].forEach(([q,Y])=>{const[J,se]=w(q,Y);b=Math.min(b,J),C=Math.max(C,J),x=Math.min(x,se),E=Math.max(E,se)});const L=b+g/2,P=x+g/2,z=C-b,j=E-x,K=i*o,F=u*o,B=(z+K)*2,I=j+F,[H,N]=Vd(B,I);function D(q=0,Y=0){H.drawImage(_,L,P,z,j,q,Y,z,j)}return D(),D(z+K,-j/2-F/2),D(z+K,+j/2+F/2),[N.toDataURL(),B/o,I/o]}return e}const Gae=A({name:"ElWatermark"}),Xae=A({...Gae,props:Kae,setup(e){const t=e,n={position:"relative"},o=S(()=>{var L,P;return(P=(L=t.font)==null?void 0:L.color)!=null?P:"rgba(0,0,0,.15)"}),a=S(()=>{var L,P;return(P=(L=t.font)==null?void 0:L.fontSize)!=null?P:16}),r=S(()=>{var L,P;return(P=(L=t.font)==null?void 0:L.fontWeight)!=null?P:"normal"}),l=S(()=>{var L,P;return(P=(L=t.font)==null?void 0:L.fontStyle)!=null?P:"normal"}),i=S(()=>{var L,P;return(P=(L=t.font)==null?void 0:L.fontFamily)!=null?P:"sans-serif"}),u=S(()=>{var L,P;return(P=(L=t.font)==null?void 0:L.textAlign)!=null?P:"center"}),d=S(()=>{var L,P;return(P=(L=t.font)==null?void 0:L.textBaseline)!=null?P:"top"}),f=S(()=>t.gap[0]),c=S(()=>t.gap[1]),p=S(()=>f.value/2),h=S(()=>c.value/2),m=S(()=>{var L,P;return(P=(L=t.offset)==null?void 0:L[0])!=null?P:p.value}),v=S(()=>{var L,P;return(P=(L=t.offset)==null?void 0:L[1])!=null?P:h.value}),_=()=>{const L={zIndex:t.zIndex,position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",backgroundRepeat:"repeat"};let P=m.value-p.value,z=v.value-h.value;return P>0&&(L.left=`${P}px`,L.width=`calc(100% - ${P}px)`,P=0),z>0&&(L.top=`${z}px`,L.height=`calc(100% - ${z}px)`,z=0),L.backgroundPosition=`${P}px ${z}px`,L},g=Rt(null),w=Rt(),b=R(!1),C=()=>{w.value&&(w.value.remove(),w.value=void 0)},x=(L,P)=>{var z;g.value&&w.value&&(b.value=!0,w.value.setAttribute("style",jae({..._(),backgroundImage:`url('${L}')`,backgroundSize:`${Math.floor(P)}px`})),(z=g.value)==null||z.append(w.value),setTimeout(()=>{b.value=!1}))},E=L=>{let P=120,z=64;const j=t.image,K=t.content,F=t.width,B=t.height;if(!j&&L.measureText){L.font=`${Number(a.value)}px ${i.value}`;const I=Array.isArray(K)?K:[K],H=I.map(N=>{const D=L.measureText(N);return[D.width,D.fontBoundingBoxAscent!==void 0?D.fontBoundingBoxAscent+D.fontBoundingBoxDescent:D.actualBoundingBoxAscent+D.actualBoundingBoxDescent]});P=Math.ceil(Math.max(...H.map(N=>N[0]))),z=Math.ceil(Math.max(...H.map(N=>N[1])))*I.length+(I.length-1)*Wy}return[F??P,B??z]},O=Yae(),T=()=>{const P=document.createElement("canvas").getContext("2d"),z=t.image,j=t.content,K=t.rotate;if(P){w.value||(w.value=document.createElement("div"));const F=qae(),[B,I]=E(P),H=N=>{const[D,q]=O(N||"",K,F,B,I,{color:o.value,fontSize:a.value,fontStyle:l.value,fontWeight:r.value,fontFamily:i.value,textAlign:u.value,textBaseline:d.value},f.value,c.value);x(D,q)};if(z){const N=new Image;N.onload=()=>{H(N)},N.onerror=()=>{H(j)},N.crossOrigin="anonymous",N.referrerPolicy="no-referrer",N.src=z}else H(j)}};return et(()=>{T()}),pe(()=>t,()=>{T()},{deep:!0,flush:"post"}),It(()=>{C()}),z4(g,L=>{b.value||L.forEach(P=>{Uae(P,w.value)&&(C(),T())})},{attributes:!0,subtree:!0,childList:!0}),(L,P)=>(y(),M("div",{ref_key:"containerRef",ref:g,style:De([n])},[re(L.$slots,"default")],4))}});var Jae=xe(Xae,[["__file","watermark.vue"]]);const Zae=lt(Jae),Qae=Ee({zIndex:{type:Number,default:1001},visible:Boolean,fill:{type:String,default:"rgba(0,0,0,0.5)"},pos:{type:X(Object)},targetAreaClickable:{type:Boolean,default:!0}}),ere=(e,t,n,o,a)=>{const r=R(null),l=()=>{let c;return Ze(e.value)?c=document.querySelector(e.value):Xe(e.value)?c=e.value():c=e.value,c},i=()=>{const c=l();if(!c||!t.value){r.value=null;return}!tre(c)&&t.value&&c.scrollIntoView(a.value);const{left:p,top:h,width:m,height:v}=c.getBoundingClientRect();r.value={left:p,top:h,width:m,height:v,radius:0}};et(()=>{pe([t,e],()=>{i()},{immediate:!0}),window.addEventListener("resize",i)}),It(()=>{window.removeEventListener("resize",i)});const u=c=>{var p;return(p=Ie(n.value.offset)?n.value.offset[c]:n.value.offset)!=null?p:6},d=S(()=>{var c;if(!r.value)return r.value;const p=u(0),h=u(1),m=((c=n.value)==null?void 0:c.radius)||2;return{left:r.value.left-p,top:r.value.top-h,width:r.value.width+p*2,height:r.value.height+h*2,radius:m}}),f=S(()=>{const c=l();return!o.value||!c||!window.DOMRect?c||void 0:{getBoundingClientRect(){var p,h,m,v;return window.DOMRect.fromRect({width:((p=d.value)==null?void 0:p.width)||0,height:((h=d.value)==null?void 0:h.height)||0,x:((m=d.value)==null?void 0:m.left)||0,y:((v=d.value)==null?void 0:v.top)||0})}}});return{mergedPosInfo:d,triggerTarget:f}},Kc=Symbol("ElTour");function tre(e){const t=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,{top:o,right:a,bottom:r,left:l}=e.getBoundingClientRect();return o>=0&&l>=0&&a<=t&&r<=n}const nre=(e,t,n,o,a,r,l,i)=>{const u=R(),d=R(),f=R({}),c={x:u,y:d,placement:o,strategy:a,middlewareData:f},p=S(()=>{const g=[S6(s(r)),OV(),AV(),ore()];return s(i)&&s(n)&&g.push(N6({element:s(n)})),g}),h=async()=>{if(!gt)return;const g=s(e),w=s(t);if(!g||!w)return;const b=await I6(g,w,{placement:s(o),strategy:s(a),middleware:s(p)});yl(c).forEach(C=>{c[C].value=b[C]})},m=S(()=>{if(!s(e))return{position:"fixed",top:"50%",left:"50%",transform:"translate3d(-50%, -50%, 0)",maxWidth:"100vw",zIndex:s(l)};const{overflow:g}=s(f);return{position:s(a),zIndex:s(l),top:s(d)!=null?`${s(d)}px`:"",left:s(u)!=null?`${s(u)}px`:"",maxWidth:g!=null&&g.maxWidth?`${g==null?void 0:g.maxWidth}px`:""}}),v=S(()=>{if(!s(i))return{};const{arrow:g}=s(f);return{left:(g==null?void 0:g.x)!=null?`${g==null?void 0:g.x}px`:"",top:(g==null?void 0:g.y)!=null?`${g==null?void 0:g.y}px`:""}});let _;return et(()=>{const g=s(e),w=s(t);g&&w&&(_=TV(g,w,h)),gn(()=>{h()})}),It(()=>{_&&_()}),{update:h,contentStyle:m,arrowStyle:v}},ore=()=>({name:"overflow",async fn(e){const t=await T2(e);let n=0;return t.left>0&&(n=t.left),t.right>0&&(n=t.right),{data:{maxWidth:e.rects.floating.width-n}}}}),are={style:{width:"100%",height:"100%"}},rre=["d"],lre=A({name:"ElTourMask",inheritAttrs:!1}),sre=A({...lre,props:Qae,setup(e){const t=e,{ns:n}=Pe(Kc),o=S(()=>{var i,u;return(u=(i=t.pos)==null?void 0:i.radius)!=null?u:2}),a=S(()=>{const i=o.value,u=`a${i},${i} 0 0 1`;return{topRight:`${u} ${i},${i}`,bottomRight:`${u} ${-i},${i}`,bottomLeft:`${u} ${-i},${-i}`,topLeft:`${u} ${i},${-i}`}}),r=S(()=>{const i=window.innerWidth,u=window.innerHeight,d=a.value,f=`M${i},0 L0,0 L0,${u} L${i},${u} L${i},0 Z`,c=o.value;return t.pos?`${f} M${t.pos.left+c},${t.pos.top} h${t.pos.width-c*2} ${d.topRight} v${t.pos.height-c*2} ${d.bottomRight} h${-t.pos.width+c*2} ${d.bottomLeft} v${-t.pos.height+c*2} ${d.topLeft} z`:f}),l=S(()=>({fill:t.fill,pointerEvents:"auto",cursor:"auto"}));return m2(At(t,"visible"),{ns:n}),(i,u)=>i.visible?(y(),M("div",ft({key:0,class:s(n).e("mask"),style:{position:"fixed",left:0,right:0,top:0,bottom:0,zIndex:i.zIndex,pointerEvents:i.pos&&i.targetAreaClickable?"none":"auto"}},i.$attrs),[(y(),M("svg",are,[k("path",{class:$(s(n).e("hollow")),style:De(s(l)),d:s(r)},null,14,rre)]))],16)):Z("v-if",!0)}});var ire=xe(sre,[["__file","mask.vue"]]);const ure=["absolute","fixed"],cre=["top-start","top-end","top","bottom-start","bottom-end","bottom","left-start","left-end","left","right-start","right-end","right"],bp=Ee({placement:{type:X(String),values:cre,default:"bottom"},reference:{type:X(Object),default:null},strategy:{type:X(String),values:ure,default:"absolute"},offset:{type:Number,default:10},showArrow:Boolean,zIndex:{type:Number,default:2001}}),dre={close:()=>!0},fre=["data-side"],pre=A({name:"ElTourContent"}),vre=A({...pre,props:bp,emits:dre,setup(e,{emit:t}){const n=e,o=R(n.placement),a=R(n.strategy),r=R(null),l=R(null);pe(()=>n.placement,()=>{o.value=n.placement});const{contentStyle:i,arrowStyle:u}=nre(At(n,"reference"),r,l,o,a,At(n,"offset"),At(n,"zIndex"),At(n,"showArrow")),d=S(()=>o.value.split("-")[0]),{ns:f}=Pe(Kc),c=()=>{t("close")},p=h=>{h.detail.focusReason==="pointer"&&h.preventDefault()};return(h,m)=>(y(),M("div",{ref_key:"contentRef",ref:r,style:De(s(i)),class:$(s(f).e("content")),"data-side":s(d),tabindex:"-1"},[W(s(ii),{loop:"",trapped:"","focus-start-el":"container","focus-trap-el":r.value||void 0,onReleaseRequested:c,onFocusoutPrevented:p},{default:G(()=>[re(h.$slots,"default")]),_:3},8,["focus-trap-el"]),h.showArrow?(y(),M("span",{key:0,ref_key:"arrowRef",ref:l,style:De(s(u)),class:$(s(f).e("arrow"))},null,6)):Z("v-if",!0)],14,fre))}});var hre=xe(vre,[["__file","content.vue"]]),mre=A({name:"ElTourSteps",props:{current:{type:Number,default:0}},emits:["update-total"],setup(e,{slots:t,emit:n}){let o=0;return()=>{var a,r;const l=(a=t.default)==null?void 0:a.call(t),i=[];let u=0;function d(f){Ie(f)&&f.forEach(c=>{var p;((p=(c==null?void 0:c.type)||{})==null?void 0:p.name)==="ElTourStep"&&(i.push(c),u+=1)})}return l.length&&d(La((r=l[0])==null?void 0:r.children)),o!==u&&(o=u,n("update-total",u)),i.length?i[e.current]:null}}});const gre=Ee({modelValue:Boolean,current:{type:Number,default:0},showArrow:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeIcon:{type:$t},placement:bp.placement,contentStyle:{type:X([Object])},mask:{type:X([Boolean,Object]),default:!0},gap:{type:X(Object),default:()=>({offset:6,radius:2})},zIndex:{type:Number},scrollIntoViewOptions:{type:X([Boolean,Object]),default:()=>({block:"center"})},type:{type:X(String)},appendTo:{type:X([String,Object]),default:"body"},closeOnPressEscape:{type:Boolean,default:!0},targetAreaClickable:{type:Boolean,default:!0}}),yre={[it]:e=>Qt(e),"update:current":e=>Ye(e),close:e=>Ye(e),finish:()=>!0,change:e=>Ye(e)},_re=A({name:"ElTour"}),bre=A({..._re,props:gre,emits:yre,setup(e,{emit:t}){const n=e,o=me("tour"),a=R(0),r=R(),l=H4(n,"current",t,{passive:!0}),i=S(()=>{var V;return(V=r.value)==null?void 0:V.target}),u=S(()=>[o.b(),_.value==="primary"?o.m("primary"):""]),d=S(()=>{var V;return((V=r.value)==null?void 0:V.placement)||n.placement}),f=S(()=>{var V,L;return(L=(V=r.value)==null?void 0:V.contentStyle)!=null?L:n.contentStyle}),c=S(()=>{var V,L;return(L=(V=r.value)==null?void 0:V.mask)!=null?L:n.mask}),p=S(()=>!!c.value&&n.modelValue),h=S(()=>Qt(c.value)?void 0:c.value),m=S(()=>{var V,L;return!!i.value&&((L=(V=r.value)==null?void 0:V.showArrow)!=null?L:n.showArrow)}),v=S(()=>{var V,L;return(L=(V=r.value)==null?void 0:V.scrollIntoViewOptions)!=null?L:n.scrollIntoViewOptions}),_=S(()=>{var V,L;return(L=(V=r.value)==null?void 0:V.type)!=null?L:n.type}),{nextZIndex:g}=zl(),w=g(),b=S(()=>{var V;return(V=n.zIndex)!=null?V:w}),{mergedPosInfo:C,triggerTarget:x}=ere(i,At(n,"modelValue"),At(n,"gap"),c,v);pe(()=>n.modelValue,V=>{V||(l.value=0)});const E=()=>{n.closeOnPressEscape&&(t("update:modelValue",!1),t("close",l.value))},O=V=>{a.value=V},T=fn();return pt(Kc,{currentStep:r,current:l,total:a,showClose:At(n,"showClose"),closeIcon:At(n,"closeIcon"),mergedType:_,ns:o,slots:T,updateModelValue(V){t("update:modelValue",V)},onClose(){t("close",l.value)},onFinish(){t("finish")},onChange(){t("change",l.value)}}),(V,L)=>{var P,z;return y(),M(Fe,null,[(y(),oe(Nl,{to:V.appendTo},[k("div",ft({class:s(u)},V.$attrs),[W(ire,{visible:s(p),fill:(P=s(h))==null?void 0:P.color,style:De((z=s(h))==null?void 0:z.style),pos:s(C),"z-index":s(b),"target-area-clickable":V.targetAreaClickable},null,8,["visible","fill","style","pos","z-index","target-area-clickable"]),V.modelValue?(y(),oe(hre,{key:s(l),reference:s(x),placement:s(d),"show-arrow":s(m),"z-index":s(b),style:De(s(f)),onClose:E},{default:G(()=>[W(s(mre),{current:s(l),onUpdateTotal:O},{default:G(()=>[re(V.$slots,"default")]),_:3},8,["current"])]),_:3},8,["reference","placement","show-arrow","z-index","style"])):Z("v-if",!0)],16)],8,["to"])),Z(" just for IDE "),Z("v-if",!0)],64)}}});var wre=xe(bre,[["__file","tour.vue"]]);const Cre=Ee({target:{type:X([String,Object,Function])},title:String,description:String,showClose:{type:Boolean,default:void 0},closeIcon:{type:$t},showArrow:{type:Boolean,default:void 0},placement:bp.placement,mask:{type:X([Boolean,Object]),default:void 0},contentStyle:{type:X([Object])},prevButtonProps:{type:X(Object)},nextButtonProps:{type:X(Object)},scrollIntoViewOptions:{type:X([Boolean,Object]),default:void 0},type:{type:X(String)}}),Sre={close:()=>!0},kre=A({name:"ElTourStep"}),Ere=A({...kre,props:Cre,emits:Sre,setup(e,{emit:t}){const n=e,{Close:o}=c2,{t:a}=_t(),{currentStep:r,current:l,total:i,showClose:u,closeIcon:d,mergedType:f,ns:c,slots:p,updateModelValue:h,onClose:m,onFinish:v,onChange:_}=Pe(Kc);pe(n,T=>{r.value=T},{immediate:!0});const g=S(()=>{var T;return(T=n.showClose)!=null?T:u.value}),w=S(()=>{var T,V;return(V=(T=n.closeIcon)!=null?T:d.value)!=null?V:o}),b=T=>{if(T)return aE(T,["children","onClick"])},C=()=>{var T,V;l.value-=1,(T=n.prevButtonProps)!=null&&T.onClick&&((V=n.prevButtonProps)==null||V.onClick()),_()},x=()=>{var T;l.value>=i.value-1?E():l.value+=1,(T=n.nextButtonProps)!=null&&T.onClick&&n.nextButtonProps.onClick(),_()},E=()=>{O(),v()},O=()=>{h(!1),m(),t("close")};return(T,V)=>(y(),M(Fe,null,[s(g)?(y(),M("button",{key:0,"aria-label":"Close",class:$(s(c).e("closebtn")),type:"button",onClick:O},[W(s(Be),{class:$(s(c).e("close"))},{default:G(()=>[(y(),oe(ut(s(w))))]),_:1},8,["class"])],2)):Z("v-if",!0),k("header",{class:$([s(c).e("header"),{"show-close":s(u)}])},[re(T.$slots,"header",{},()=>[k("span",{role:"heading",class:$(s(c).e("title"))},Me(T.title),3)])],2),k("div",{class:$(s(c).e("body"))},[re(T.$slots,"default",{},()=>[k("span",null,Me(T.description),1)])],2),k("footer",{class:$(s(c).e("footer"))},[k("div",{class:$(s(c).b("indicators"))},[s(p).indicators?(y(),oe(ut(s(p).indicators),{key:0,current:s(l),total:s(i)},null,8,["current","total"])):(y(!0),M(Fe,{key:1},mt(s(i),(L,P)=>(y(),M("span",{key:L,class:$([s(c).b("indicator"),P===s(l)?"is-active":""])},null,2))),128))],2),k("div",{class:$(s(c).b("buttons"))},[s(l)>0?(y(),oe(s(rn),ft({key:0,size:"small",type:s(f)},b(T.prevButtonProps),{onClick:C}),{default:G(()=>{var L,P;return[vt(Me((P=(L=T.prevButtonProps)==null?void 0:L.children)!=null?P:s(a)("el.tour.previous")),1)]}),_:1},16,["type"])):Z("v-if",!0),s(l)<=s(i)-1?(y(),oe(s(rn),ft({key:1,size:"small",type:s(f)==="primary"?"default":"primary"},b(T.nextButtonProps),{onClick:x}),{default:G(()=>{var L,P;return[vt(Me((P=(L=T.nextButtonProps)==null?void 0:L.children)!=null?P:s(l)===s(i)-1?s(a)("el.tour.finish"):s(a)("el.tour.next")),1)]}),_:1},16,["type"])):Z("v-if",!0)],2)],2)],64))}});var jy=xe(Ere,[["__file","step.vue"]]);const xre=lt(wre,{TourStep:jy}),Mre=Dt(jy),$re=Ee({container:{type:X([String,Object])},offset:{type:Number,default:0},bound:{type:Number,default:15},duration:{type:Number,default:300},marker:{type:Boolean,default:!0},type:{type:X(String),default:"default"},direction:{type:X(String),default:"vertical"}}),Tre={change:e=>Ze(e),click:(e,t)=>e instanceof MouseEvent&&(Ze(t)||Zt(t))},qy=Symbol("anchor"),Are=A({name:"ElAnchor"}),Ore=A({...Are,props:$re,emits:Tre,setup(e,{expose:t,emit:n}){const o=e,a=R(""),r=R(null),l=R(null),i=R(),u={};let d=!1,f=0;const c=me("anchor"),p=S(()=>[c.b(),o.type==="underline"?c.m("underline"):"",c.m(o.direction)]),h=T=>{u[T.href]=T.el},m=T=>{delete u[T]},v=T=>{a.value!==T&&(a.value=T,n("change",T))};let _=null;const g=T=>{if(!i.value)return;const V=Mi(T);if(!V)return;_&&_(),d=!0;const L=c1(V,i.value),P=tf(V,L),z=L.scrollHeight-L.clientHeight,j=Math.min(P-o.offset,z);_=gE(i.value,f,j,o.duration,()=>{setTimeout(()=>{d=!1},20)})},w=T=>{T&&(v(T),g(T))},b=(T,V)=>{n("click",T,V),w(V)},C=AP(()=>{i.value&&(f=d1(i.value));const T=x();d||Zt(T)||v(T)}),x=()=>{if(!i.value)return;const T=d1(i.value),V=[];for(const L of Object.keys(u)){const P=Mi(L);if(!P)continue;const z=c1(P,i.value),j=tf(P,z);V.push({top:j-o.offset-o.bound,href:L})}V.sort((L,P)=>L.top-P.top);for(let L=0;LT))return P.href}},E=()=>{const T=Mi(o.container);!T||wc(T)?i.value=window:i.value=T};Vt(i,"scroll",C);const O=S(()=>{if(!r.value||!l.value||!a.value)return{};const T=u[a.value];if(!T)return{};const V=r.value.getBoundingClientRect(),L=l.value.getBoundingClientRect(),P=T.getBoundingClientRect();return o.direction==="horizontal"?{left:`${P.left-V.left}px`,width:`${P.width}px`,opacity:1}:{top:`${P.top-V.top+(P.height-L.height)/2}px`,opacity:1}});return et(()=>{E();const T=decodeURIComponent(window.location.hash);Mi(T)?w(T):C()}),pe(()=>o.container,()=>{E()}),pt(qy,{ns:c,direction:o.direction,currentAnchor:a,addLink:h,removeLink:m,handleClick:b}),t({scrollTo:w}),(T,V)=>(y(),M("div",{ref_key:"anchorRef",ref:r,class:$(s(p))},[T.marker?(y(),M("div",{key:0,ref_key:"markerRef",ref:l,class:$(s(c).e("marker")),style:De(s(O))},null,6)):Z("v-if",!0),k("div",{class:$(s(c).e("list"))},[re(T.$slots,"default")],2)],2))}});var Nre=xe(Ore,[["__file","anchor.vue"]]);const Ire=Ee({title:String,href:String}),Rre=["href"],Pre=A({name:"ElAnchorLink"}),Lre=A({...Pre,props:Ire,setup(e){const t=e,n=R(null),{ns:o,direction:a,currentAnchor:r,addLink:l,removeLink:i,handleClick:u}=Pe(qy),d=S(()=>[o.e("link"),o.is("active",r.value===t.href)]),f=c=>{u(c,t.href)};return pe(()=>t.href,(c,p)=>{We(()=>{p&&i(p),c&&l({href:c,el:n.value})})}),et(()=>{const{href:c}=t;c&&l({href:c,el:n.value})}),It(()=>{const{href:c}=t;c&&i(c)}),(c,p)=>(y(),M("div",{class:$(s(o).e("item"))},[k("a",{ref_key:"linkRef",ref:n,class:$(s(d)),href:c.href,onClick:f},[re(c.$slots,"default",{},()=>[vt(Me(c.title),1)])],10,Rre),c.$slots["sub-link"]&&s(a)==="vertical"?(y(),M("div",{key:0,class:$(s(o).e("list"))},[re(c.$slots,"sub-link")],2)):Z("v-if",!0)],2))}});var Uy=xe(Lre,[["__file","anchor-link.vue"]]);const Vre=lt(Nre,{AnchorLink:Uy}),Bre=Dt(Uy);var zre=[GV,lB,NH,rne,zH,qH,J6,lD,sD,rn,a3,xF,OF,JF,ZF,cW,XK,mW,vo,mK,N3,$W,qW,UW,BW,Sj,DV,Pj,Lj,Vj,Bj,zj,rU,mU,gU,IU,f8,UU,BY,zY,HY,w8,QB,ez,Be,NG,C8,mn,S8,qG,fX,pX,vX,hX,CX,$J,RJ,KJ,Y6,I8,z3,NK,OK,lZ,dZ,SW,ha,Or,Ku,eJ,XZ,aQ,rQ,PQ,HQ,Z8,JQ,lee,see,yee,dy,fy,ane,bne,wne,Ls,xne,aF,Nne,Vne,Bne,En,coe,Eoe,zoe,qoe,cae,Fae,Zae,xre,Mre,Vre,Bre];const yo="ElInfiniteScroll",Hre=50,Dre=200,Fre=0,Kre={delay:{type:Number,default:Dre},distance:{type:Number,default:Fre},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},wp=(e,t)=>Object.entries(Kre).reduce((n,[o,a])=>{var r,l;const{type:i,default:u}=a,d=e.getAttribute(`infinite-scroll-${o}`);let f=(l=(r=t[d])!=null?r:d)!=null?l:u;return f=f==="false"?!1:f,f=i(f),n[o]=Number.isNaN(f)?u:f,n},{}),Yy=e=>{const{observer:t}=e[yo];t&&(t.disconnect(),delete e[yo].observer)},Wre=(e,t)=>{const{container:n,containerEl:o,instance:a,observer:r,lastScrollTop:l}=e[yo],{disabled:i,distance:u}=wp(e,a),{clientHeight:d,scrollHeight:f,scrollTop:c}=o,p=c-l;if(e[yo].lastScrollTop=c,r||i||p<0)return;let h=!1;if(n===e)h=f-(d+c)<=u;else{const{clientTop:m,scrollHeight:v}=e,_=tf(e,o);h=c+d>=_+m+v-u}h&&t.call(a)};function Bd(e,t){const{containerEl:n,instance:o}=e[yo],{disabled:a}=wp(e,o);a||n.clientHeight===0||(n.scrollHeight<=n.clientHeight?t.call(o):Yy(e))}const jre={async mounted(e,t){const{instance:n,value:o}=t;Xe(o)||on(yo,"'v-infinite-scroll' binding value must be a function"),await We();const{delay:a,immediate:r}=wp(e,n),l=a2(e,!0),i=l===window?document.documentElement:l,u=mr(Wre.bind(null,e,o),a);if(l){if(e[yo]={instance:n,container:l,containerEl:i,delay:a,cb:o,onScroll:u,lastScrollTop:i.scrollTop},r){const d=new MutationObserver(mr(Bd.bind(null,e,o),Hre));e[yo].observer=d,d.observe(e,{childList:!0,subtree:!0}),Bd(e,o)}l.addEventListener("scroll",u)}},unmounted(e){const{container:t,onScroll:n}=e[yo];t==null||t.removeEventListener("scroll",n),Yy(e)},async updated(e){if(!e[yo])await We();else{const{containerEl:t,cb:n,observer:o}=e[yo];t.clientHeight&&o&&Bd(e,n)}}},u0=jre;u0.install=e=>{e.directive("InfiniteScroll",u0)};const qre=u0;function Ure(e){let t;const n=R(!1),o=wt({...e,originalPosition:"",originalOverflow:"",visible:!1});function a(p){o.text=p}function r(){const p=o.parent,h=c.ns;if(!p.vLoadingAddClassList){let m=p.getAttribute("loading-number");m=Number.parseInt(m)-1,m?p.setAttribute("loading-number",m.toString()):(Cn(p,h.bm("parent","relative")),p.removeAttribute("loading-number")),Cn(p,h.bm("parent","hidden"))}l(),f.unmount()}function l(){var p,h;(h=(p=c.$el)==null?void 0:p.parentNode)==null||h.removeChild(c.$el)}function i(){var p;e.beforeClose&&!e.beforeClose()||(n.value=!0,clearTimeout(t),t=window.setTimeout(u,400),o.visible=!1,(p=e.closed)==null||p.call(e))}function u(){if(!n.value)return;const p=o.parent;n.value=!1,p.vLoadingAddClassList=void 0,r()}const f=N4(A({name:"ElLoading",setup(p,{expose:h}){const{ns:m,zIndex:v}=Ic("loading");return h({ns:m,zIndex:v}),()=>{const _=o.spinner||o.svg,g=qe("svg",{class:"circular",viewBox:o.svgViewBox?o.svgViewBox:"0 0 50 50",..._?{innerHTML:_}:{}},[qe("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),w=o.text?qe("p",{class:m.b("text")},[o.text]):void 0;return qe(nn,{name:m.b("fade"),onAfterLeave:u},{default:G(()=>[Qe(W("div",{style:{backgroundColor:o.background||""},class:[m.b("mask"),o.customClass,o.fullscreen?"is-fullscreen":""]},[qe("div",{class:m.b("spinner")},[g,w])]),[[bt,o.visible]])])})}}})),c=f.mount(document.createElement("div"));return{...un(o),setText:a,removeElLoadingChild:l,close:i,handleAfterLeave:u,vm:c,get $el(){return c.$el}}}let Di;const c0=function(e={}){if(!gt)return;const t=Yre(e);if(t.fullscreen&&Di)return Di;const n=Ure({...t,closed:()=>{var a;(a=t.closed)==null||a.call(t),t.fullscreen&&(Di=void 0)}});Gre(t,t.parent,n),tm(t,t.parent,n),t.parent.vLoadingAddClassList=()=>tm(t,t.parent,n);let o=t.parent.getAttribute("loading-number");return o?o=`${Number.parseInt(o)+1}`:o="1",t.parent.setAttribute("loading-number",o),t.parent.appendChild(n.$el),We(()=>n.visible.value=t.visible),t.fullscreen&&(Di=n),n},Yre=e=>{var t,n,o,a;let r;return Ze(e.target)?r=(t=document.querySelector(e.target))!=null?t:document.body:r=e.target||document.body,{parent:r===document.body||e.body?document.body:r,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:r===document.body&&((n=e.fullscreen)!=null?n:!0),lock:(o=e.lock)!=null?o:!1,customClass:e.customClass||"",visible:(a=e.visible)!=null?a:!0,target:r}},Gre=async(e,t,n)=>{const{nextZIndex:o}=n.vm.zIndex||n.vm._.exposed.zIndex,a={};if(e.fullscreen)n.originalPosition.value=Oa(document.body,"position"),n.originalOverflow.value=Oa(document.body,"overflow"),a.zIndex=o();else if(e.parent===document.body){n.originalPosition.value=Oa(document.body,"position"),await We();for(const r of["top","left"]){const l=r==="top"?"scrollTop":"scrollLeft";a[r]=`${e.target.getBoundingClientRect()[r]+document.body[l]+document.documentElement[l]-Number.parseInt(Oa(document.body,`margin-${r}`),10)}px`}for(const r of["height","width"])a[r]=`${e.target.getBoundingClientRect()[r]}px`}else n.originalPosition.value=Oa(t,"position");for(const[r,l]of Object.entries(a))n.$el.style[r]=l},tm=(e,t,n)=>{const o=n.vm.ns||n.vm._.exposed.ns;["absolute","fixed","sticky"].includes(n.originalPosition.value)?Cn(t,o.bm("parent","relative")):eo(t,o.bm("parent","relative")),e.fullscreen&&e.lock?eo(t,o.bm("parent","hidden")):Cn(t,o.bm("parent","hidden"))},yu=Symbol("ElLoading"),nm=(e,t)=>{var n,o,a,r;const l=t.instance,i=p=>ct(t.value)?t.value[p]:void 0,u=p=>{const h=Ze(p)&&(l==null?void 0:l[p])||p;return h&&R(h)},d=p=>u(i(p)||e.getAttribute(`element-loading-${qa(p)}`)),f=(n=i("fullscreen"))!=null?n:t.modifiers.fullscreen,c={text:d("text"),svg:d("svg"),svgViewBox:d("svgViewBox"),spinner:d("spinner"),background:d("background"),customClass:d("customClass"),fullscreen:f,target:(o=i("target"))!=null?o:f?void 0:e,body:(a=i("body"))!=null?a:t.modifiers.body,lock:(r=i("lock"))!=null?r:t.modifiers.lock};e[yu]={options:c,instance:c0(c)}},Xre=(e,t)=>{for(const n of Object.keys(t))Pt(t[n])&&(t[n].value=e[n])},om={mounted(e,t){t.value&&nm(e,t)},updated(e,t){const n=e[yu];t.oldValue!==t.value&&(t.value&&!t.oldValue?nm(e,t):t.value&&t.oldValue?ct(t.value)&&Xre(t.value,n.options):n==null||n.instance.close())},unmounted(e){var t;(t=e[yu])==null||t.instance.close(),e[yu]=null}},Jre={install(e){e.directive("loading",om),e.config.globalProperties.$loading=c0},directive:om,service:c0},Gy=["success","info","warning","error"],_n=Ht({customClass:"",center:!1,dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,zIndex:0,grouping:!1,repeatNum:1,appendTo:gt?document.body:void 0}),Zre=Ee({customClass:{type:String,default:_n.customClass},center:{type:Boolean,default:_n.center},dangerouslyUseHTMLString:{type:Boolean,default:_n.dangerouslyUseHTMLString},duration:{type:Number,default:_n.duration},icon:{type:$t,default:_n.icon},id:{type:String,default:_n.id},message:{type:X([String,Object,Function]),default:_n.message},onClose:{type:X(Function),default:_n.onClose},showClose:{type:Boolean,default:_n.showClose},type:{type:String,values:Gy,default:_n.type},plain:{type:Boolean,default:_n.plain},offset:{type:Number,default:_n.offset},zIndex:{type:Number,default:_n.zIndex},grouping:{type:Boolean,default:_n.grouping},repeatNum:{type:Number,default:_n.repeatNum}}),Qre={destroy:()=>!0},bo=Rm([]),ele=e=>{const t=bo.findIndex(a=>a.id===e),n=bo[t];let o;return t>0&&(o=bo[t-1]),{current:n,prev:o}},tle=e=>{const{prev:t}=ele(e);return t?t.vm.exposed.bottom.value:0},nle=(e,t)=>bo.findIndex(o=>o.id===e)>0?16:t,ole=["id"],ale=["innerHTML"],rle=A({name:"ElMessage"}),lle=A({...rle,props:Zre,emits:Qre,setup(e,{expose:t}){const n=e,{Close:o}=d2,{ns:a,zIndex:r}=Ic("message"),{currentZIndex:l,nextZIndex:i}=r,u=R(),d=R(!1),f=R(0);let c;const p=S(()=>n.type?n.type==="error"?"danger":n.type:"info"),h=S(()=>{const O=n.type;return{[a.bm("icon",O)]:O&&Ka[O]}}),m=S(()=>n.icon||Ka[n.type]||""),v=S(()=>tle(n.id)),_=S(()=>nle(n.id,n.offset)+v.value),g=S(()=>f.value+_.value),w=S(()=>({top:`${_.value}px`,zIndex:l.value}));function b(){n.duration!==0&&({stop:c}=Cr(()=>{x()},n.duration))}function C(){c==null||c()}function x(){d.value=!1}function E({code:O}){O===Ke.esc&&x()}return et(()=>{b(),i(),d.value=!0}),pe(()=>n.repeatNum,()=>{C(),b()}),Vt(document,"keydown",E),Kt(u,()=>{f.value=u.value.getBoundingClientRect().height}),t({visible:d,bottom:g,close:x}),(O,T)=>(y(),oe(nn,{name:s(a).b("fade"),onBeforeLeave:O.onClose,onAfterLeave:T[0]||(T[0]=V=>O.$emit("destroy")),persisted:""},{default:G(()=>[Qe(k("div",{id:O.id,ref_key:"messageRef",ref:u,class:$([s(a).b(),{[s(a).m(O.type)]:O.type},s(a).is("center",O.center),s(a).is("closable",O.showClose),s(a).is("plain",O.plain),O.customClass]),style:De(s(w)),role:"alert",onMouseenter:C,onMouseleave:b},[O.repeatNum>1?(y(),oe(s(J6),{key:0,value:O.repeatNum,type:s(p),class:$(s(a).e("badge"))},null,8,["value","type","class"])):Z("v-if",!0),s(m)?(y(),oe(s(Be),{key:1,class:$([s(a).e("icon"),s(h)])},{default:G(()=>[(y(),oe(ut(s(m))))]),_:1},8,["class"])):Z("v-if",!0),re(O.$slots,"default",{},()=>[O.dangerouslyUseHTMLString?(y(),M(Fe,{key:1},[Z(" Caution here, message could've been compromised, never use user's input as message "),k("p",{class:$(s(a).e("content")),innerHTML:O.message},null,10,ale)],2112)):(y(),M("p",{key:0,class:$(s(a).e("content"))},Me(O.message),3))]),O.showClose?(y(),oe(s(Be),{key:2,class:$(s(a).e("closeBtn")),onClick:Ge(x,["stop"])},{default:G(()=>[W(s(o))]),_:1},8,["class","onClick"])):Z("v-if",!0)],46,ole),[[bt,d.value]])]),_:3},8,["name","onBeforeLeave"]))}});var sle=xe(lle,[["__file","message.vue"]]);let ile=1;const Xy=e=>{const t=!e||Ze(e)||zt(e)||Xe(e)?{message:e}:e,n={..._n,...t};if(!n.appendTo)n.appendTo=document.body;else if(Ze(n.appendTo)){let o=document.querySelector(n.appendTo);io(o)||(o=document.body),n.appendTo=o}return n},ule=e=>{const t=bo.indexOf(e);if(t===-1)return;bo.splice(t,1);const{handler:n}=e;n.close()},cle=({appendTo:e,...t},n)=>{const o=`message_${ile++}`,a=t.onClose,r=document.createElement("div"),l={...t,id:o,onClose:()=>{a==null||a(),ule(f)},onDestroy:()=>{Ha(null,r)}},i=W(sle,l,Xe(l.message)||zt(l.message)?{default:Xe(l.message)?l.message:()=>l.message}:null);i.appContext=n||$l._context,Ha(i,r),e.appendChild(r.firstElementChild);const u=i.component,f={id:o,vnode:i,vm:u,handler:{close:()=>{u.exposed.visible.value=!1}},props:i.component.props};return f},$l=(e={},t)=>{if(!gt)return{close:()=>{}};if(Ye(hf.max)&&bo.length>=hf.max)return{close:()=>{}};const n=Xy(e);if(n.grouping&&bo.length){const a=bo.find(({vnode:r})=>{var l;return((l=r.props)==null?void 0:l.message)===n.message});if(a)return a.props.repeatNum+=1,a.props.type=n.type,a.handler}const o=cle(n,t);return bo.push(o),o.handler};Gy.forEach(e=>{$l[e]=(t={},n)=>{const o=Xy(t);return $l({...o,type:e},n)}});function dle(e){for(const t of bo)(!e||e===t.props.type)&&t.handler.close()}$l.closeAll=dle;$l._context=null;const os=Qg($l,"$message"),fle=A({name:"ElMessageBox",directives:{TrapFocus:HD},components:{ElButton:rn,ElFocusTrap:ii,ElInput:mn,ElOverlay:U2,ElIcon:Be,...d2},inheritAttrs:!1,props:{buttonSize:{type:String,validator:e6},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:{default:!1,type:Boolean},container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:t}){const{locale:n,zIndex:o,ns:a,size:r}=Ic("message-box",S(()=>e.buttonSize)),{t:l}=n,{nextZIndex:i}=o,u=R(!1),d=wt({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:null,inputValidator:null,inputErrorMessage:"",message:null,modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:i()}),f=S(()=>{const B=d.type;return{[a.bm("icon",B)]:B&&Ka[B]}}),c=kn(),p=kn(),h=S(()=>d.icon||Ka[d.type]||""),m=S(()=>!!d.message),v=R(),_=R(),g=R(),w=R(),b=R(),C=S(()=>d.confirmButtonClass);pe(()=>d.inputValue,async B=>{await We(),e.boxType==="prompt"&&B!==null&&z()},{immediate:!0}),pe(()=>u.value,B=>{var I,H;B&&(e.boxType!=="prompt"&&(d.autofocus?g.value=(H=(I=b.value)==null?void 0:I.$el)!=null?H:v.value:g.value=v.value),d.zIndex=i()),e.boxType==="prompt"&&(B?We().then(()=>{var N;w.value&&w.value.$el&&(d.autofocus?g.value=(N=j())!=null?N:v.value:g.value=v.value)}):(d.editorErrorMessage="",d.validateError=!1))});const x=S(()=>e.draggable),E=S(()=>e.overflow);t6(v,_,x,E),et(async()=>{await We(),e.closeOnHashChange&&window.addEventListener("hashchange",O)}),It(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",O)});function O(){u.value&&(u.value=!1,We(()=>{d.action&&t("action",d.action)}))}const T=()=>{e.closeOnClickModal&&P(d.distinguishCancelAndClose?"close":"cancel")},V=E2(T),L=B=>{if(d.inputType!=="textarea")return B.preventDefault(),P("confirm")},P=B=>{var I;e.boxType==="prompt"&&B==="confirm"&&!z()||(d.action=B,d.beforeClose?(I=d.beforeClose)==null||I.call(d,B,d,O):O())},z=()=>{if(e.boxType==="prompt"){const B=d.inputPattern;if(B&&!B.test(d.inputValue||""))return d.editorErrorMessage=d.inputErrorMessage||l("el.messagebox.error"),d.validateError=!0,!1;const I=d.inputValidator;if(typeof I=="function"){const H=I(d.inputValue);if(H===!1)return d.editorErrorMessage=d.inputErrorMessage||l("el.messagebox.error"),d.validateError=!0,!1;if(typeof H=="string")return d.editorErrorMessage=H,d.validateError=!0,!1}}return d.editorErrorMessage="",d.validateError=!1,!0},j=()=>{const B=w.value.$refs;return B.input||B.textarea},K=()=>{P("close")},F=()=>{e.closeOnPressEscape&&K()};return e.lockScroll&&m2(u),{...un(d),ns:a,overlayEvent:V,visible:u,hasMessage:m,typeClass:f,contentId:c,inputId:p,btnSize:r,iconComponent:h,confirmButtonClasses:C,rootRef:v,focusStartRef:g,headerRef:_,inputRef:w,confirmRef:b,doClose:O,handleClose:K,onCloseRequested:F,handleWrapperClick:T,handleInputEnter:L,handleAction:P,t:l}}}),ple=["aria-label","aria-describedby"],vle=["aria-label"],hle=["id"];function mle(e,t,n,o,a,r){const l=nt("el-icon"),i=nt("close"),u=nt("el-input"),d=nt("el-button"),f=nt("el-focus-trap"),c=nt("el-overlay");return y(),oe(nn,{name:"fade-in-linear",onAfterLeave:t[11]||(t[11]=p=>e.$emit("vanish")),persisted:""},{default:G(()=>[Qe(W(c,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:G(()=>[k("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:$(`${e.ns.namespace.value}-overlay-message-box`),onClick:t[8]||(t[8]=(...p)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...p)),onMousedown:t[9]||(t[9]=(...p)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...p)),onMouseup:t[10]||(t[10]=(...p)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...p))},[W(f,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:G(()=>[k("div",{ref:"rootRef",class:$([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),{[e.ns.m("center")]:e.center}]),style:De(e.customStyle),tabindex:"-1",onClick:t[7]||(t[7]=Ge(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(y(),M("div",{key:0,ref:"headerRef",class:$([e.ns.e("header"),{"show-close":e.showClose}])},[k("div",{class:$(e.ns.e("title"))},[e.iconComponent&&e.center?(y(),oe(l,{key:0,class:$([e.ns.e("status"),e.typeClass])},{default:G(()=>[(y(),oe(ut(e.iconComponent)))]),_:1},8,["class"])):Z("v-if",!0),k("span",null,Me(e.title),1)],2),e.showClose?(y(),M("button",{key:0,type:"button",class:$(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:t[0]||(t[0]=p=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:t[1]||(t[1]=Mt(Ge(p=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[W(l,{class:$(e.ns.e("close"))},{default:G(()=>[W(i)]),_:1},8,["class"])],42,vle)):Z("v-if",!0)],2)):Z("v-if",!0),k("div",{id:e.contentId,class:$(e.ns.e("content"))},[k("div",{class:$(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(y(),oe(l,{key:0,class:$([e.ns.e("status"),e.typeClass])},{default:G(()=>[(y(),oe(ut(e.iconComponent)))]),_:1},8,["class"])):Z("v-if",!0),e.hasMessage?(y(),M("div",{key:1,class:$(e.ns.e("message"))},[re(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(y(),oe(ut(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(y(),oe(ut(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0},{default:G(()=>[vt(Me(e.dangerouslyUseHTMLString?"":e.message),1)]),_:1},8,["for"]))])],2)):Z("v-if",!0)],2),Qe(k("div",{class:$(e.ns.e("input"))},[W(u,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":t[2]||(t[2]=p=>e.inputValue=p),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:$({invalid:e.validateError}),onKeydown:Mt(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),k("div",{class:$(e.ns.e("errormsg")),style:De({visibility:e.editorErrorMessage?"visible":"hidden"})},Me(e.editorErrorMessage),7)],2),[[bt,e.showInput]])],10,hle),k("div",{class:$(e.ns.e("btns"))},[e.showCancelButton?(y(),oe(d,{key:0,loading:e.cancelButtonLoading,class:$([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:t[3]||(t[3]=p=>e.handleAction("cancel")),onKeydown:t[4]||(t[4]=Mt(Ge(p=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:G(()=>[vt(Me(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["loading","class","round","size"])):Z("v-if",!0),Qe(W(d,{ref:"confirmRef",type:"primary",loading:e.confirmButtonLoading,class:$([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:t[5]||(t[5]=p=>e.handleAction("confirm")),onKeydown:t[6]||(t[6]=Mt(Ge(p=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:G(()=>[vt(Me(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["loading","class","round","disabled","size"]),[[bt,e.showConfirmButton]])],2)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,ple)]),_:3},8,["z-index","overlay-class","mask"]),[[bt,e.visible]])]),_:3})}var gle=xe(fle,[["render",mle],["__file","index.vue"]]);const js=new Map,yle=e=>{let t=document.body;return e.appendTo&&(Ze(e.appendTo)&&(t=document.querySelector(e.appendTo)),io(e.appendTo)&&(t=e.appendTo),io(t)||(t=document.body)),t},_le=(e,t,n=null)=>{const o=W(gle,e,Xe(e.message)||zt(e.message)?{default:Xe(e.message)?e.message:()=>e.message}:null);return o.appContext=n,Ha(o,t),yle(e).appendChild(t.firstElementChild),o.component},ble=()=>document.createElement("div"),wle=(e,t)=>{const n=ble();e.onVanish=()=>{Ha(null,n),js.delete(a)},e.onAction=r=>{const l=js.get(a);let i;e.showInput?i={value:a.inputValue,action:r}:i=r,e.callback?e.callback(i,o.proxy):r==="cancel"||r==="close"?e.distinguishCancelAndClose&&r!=="cancel"?l.reject("close"):l.reject("cancel"):l.resolve(i)};const o=_le(e,n,t),a=o.proxy;for(const r in e)yt(e,r)&&!yt(a.$props,r)&&(a[r]=e[r]);return a.visible=!0,a};function Dl(e,t=null){if(!gt)return Promise.reject();let n;return Ze(e)||zt(e)?e={message:e}:n=e.callback,new Promise((o,a)=>{const r=wle(e,t??Dl._context);js.set(r,{options:e,callback:n,resolve:o,reject:a})})}const Cle=["alert","confirm","prompt"],Sle={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};Cle.forEach(e=>{Dl[e]=kle(e)});function kle(e){return(t,n,o,a)=>{let r="";return ct(n)?(o=n,r=""):Zt(n)?r="":r=n,Dl(Object.assign({title:r,message:t,type:"",...Sle[e]},o,{boxType:e}),a)}}Dl.close=()=>{js.forEach((e,t)=>{t.doClose()}),js.clear()};Dl._context=null;const Ea=Dl;Ea.install=e=>{Ea._context=e._context,e.config.globalProperties.$msgbox=Ea,e.config.globalProperties.$messageBox=Ea,e.config.globalProperties.$alert=Ea.alert,e.config.globalProperties.$confirm=Ea.confirm,e.config.globalProperties.$prompt=Ea.prompt};const Ele=Ea,Jy=["success","info","warning","error"],xle=Ee({customClass:{type:String,default:""},dangerouslyUseHTMLString:{type:Boolean,default:!1},duration:{type:Number,default:4500},icon:{type:$t},id:{type:String,default:""},message:{type:X([String,Object]),default:""},offset:{type:Number,default:0},onClick:{type:X(Function),default:()=>{}},onClose:{type:X(Function),required:!0},position:{type:String,values:["top-right","top-left","bottom-right","bottom-left"],default:"top-right"},showClose:{type:Boolean,default:!0},title:{type:String,default:""},type:{type:String,values:[...Jy,""],default:""},zIndex:Number}),Mle={destroy:()=>!0},$le=["id"],Tle=["textContent"],Ale={key:0},Ole=["innerHTML"],Nle=A({name:"ElNotification"}),Ile=A({...Nle,props:xle,emits:Mle,setup(e,{expose:t}){const n=e,{ns:o,zIndex:a}=Ic("notification"),{nextZIndex:r,currentZIndex:l}=a,{Close:i}=c2,u=R(!1);let d;const f=S(()=>{const b=n.type;return b&&Ka[n.type]?o.m(b):""}),c=S(()=>n.type&&Ka[n.type]||n.icon),p=S(()=>n.position.endsWith("right")?"right":"left"),h=S(()=>n.position.startsWith("top")?"top":"bottom"),m=S(()=>{var b;return{[h.value]:`${n.offset}px`,zIndex:(b=n.zIndex)!=null?b:l.value}});function v(){n.duration>0&&({stop:d}=Cr(()=>{u.value&&g()},n.duration))}function _(){d==null||d()}function g(){u.value=!1}function w({code:b}){b===Ke.delete||b===Ke.backspace?_():b===Ke.esc?u.value&&g():v()}return et(()=>{v(),r(),u.value=!0}),Vt(document,"keydown",w),t({visible:u,close:g}),(b,C)=>(y(),oe(nn,{name:s(o).b("fade"),onBeforeLeave:b.onClose,onAfterLeave:C[1]||(C[1]=x=>b.$emit("destroy")),persisted:""},{default:G(()=>[Qe(k("div",{id:b.id,class:$([s(o).b(),b.customClass,s(p)]),style:De(s(m)),role:"alert",onMouseenter:_,onMouseleave:v,onClick:C[0]||(C[0]=(...x)=>b.onClick&&b.onClick(...x))},[s(c)?(y(),oe(s(Be),{key:0,class:$([s(o).e("icon"),s(f)])},{default:G(()=>[(y(),oe(ut(s(c))))]),_:1},8,["class"])):Z("v-if",!0),k("div",{class:$(s(o).e("group"))},[k("h2",{class:$(s(o).e("title")),textContent:Me(b.title)},null,10,Tle),Qe(k("div",{class:$(s(o).e("content")),style:De(b.title?void 0:{margin:0})},[re(b.$slots,"default",{},()=>[b.dangerouslyUseHTMLString?(y(),M(Fe,{key:1},[Z(" Caution here, message could've been compromised, never use user's input as message "),k("p",{innerHTML:b.message},null,8,Ole)],2112)):(y(),M("p",Ale,Me(b.message),1))])],6),[[bt,b.message]]),b.showClose?(y(),oe(s(Be),{key:0,class:$(s(o).e("closeBtn")),onClick:Ge(g,["stop"])},{default:G(()=>[W(s(i))]),_:1},8,["class","onClick"])):Z("v-if",!0)],2)],46,$le),[[bt,u.value]])]),_:3},8,["name","onBeforeLeave"]))}});var Rle=xe(Ile,[["__file","notification.vue"]]);const Zu={"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]},d0=16;let Ple=1;const Tl=function(e={},t=null){if(!gt)return{close:()=>{}};(typeof e=="string"||zt(e))&&(e={message:e});const n=e.position||"top-right";let o=e.offset||0;Zu[n].forEach(({vm:f})=>{var c;o+=(((c=f.el)==null?void 0:c.offsetHeight)||0)+d0}),o+=d0;const a=`notification_${Ple++}`,r=e.onClose,l={...e,offset:o,id:a,onClose:()=>{Lle(a,n,r)}};let i=document.body;io(e.appendTo)?i=e.appendTo:Ze(e.appendTo)&&(i=document.querySelector(e.appendTo)),io(i)||(i=document.body);const u=document.createElement("div"),d=W(Rle,l,zt(l.message)?{default:()=>l.message}:null);return d.appContext=t??Tl._context,d.props.onDestroy=()=>{Ha(null,u)},Ha(d,u),Zu[n].push({vm:d}),i.appendChild(u.firstElementChild),{close:()=>{d.component.exposed.visible.value=!1}}};Jy.forEach(e=>{Tl[e]=(t={})=>((typeof t=="string"||zt(t))&&(t={message:t}),Tl({...t,type:e}))});function Lle(e,t,n){const o=Zu[t],a=o.findIndex(({vm:d})=>{var f;return((f=d.component)==null?void 0:f.props.id)===e});if(a===-1)return;const{vm:r}=o[a];if(!r)return;n==null||n(r);const l=r.el.offsetHeight,i=t.split("-")[0];o.splice(a,1);const u=o.length;if(!(u<1))for(let d=a;d{t.component.exposed.visible.value=!1})}Tl.closeAll=Vle;Tl._context=null;const Ble=Qg(Tl,"$notify");var zle=[qre,Jre,os,Ele,Ble,N8],Hle=KV([...zre,...zle]);function Zy(e,t){return function(){return e.apply(t,arguments)}}const{toString:Dle}=Object.prototype,{getPrototypeOf:Cp}=Object,Wc=(e=>t=>{const n=Dle.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Fo=e=>(e=e.toLowerCase(),t=>Wc(t)===e),jc=e=>t=>typeof t===e,{isArray:Fl}=Array,qs=jc("undefined");function Fle(e){return e!==null&&!qs(e)&&e.constructor!==null&&!qs(e.constructor)&&ro(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Qy=Fo("ArrayBuffer");function Kle(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Qy(e.buffer),t}const Wle=jc("string"),ro=jc("function"),e_=jc("number"),qc=e=>e!==null&&typeof e=="object",jle=e=>e===!0||e===!1,_u=e=>{if(Wc(e)!=="object")return!1;const t=Cp(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},qle=Fo("Date"),Ule=Fo("File"),Yle=Fo("Blob"),Gle=Fo("FileList"),Xle=e=>qc(e)&&ro(e.pipe),Jle=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||ro(e.append)&&((t=Wc(e))==="formdata"||t==="object"&&ro(e.toString)&&e.toString()==="[object FormData]"))},Zle=Fo("URLSearchParams"),Qle=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function fi(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let o,a;if(typeof e!="object"&&(e=[e]),Fl(e))for(o=0,a=e.length;o0;)if(a=n[o],t===a.toLowerCase())return a;return null}const n_=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,o_=e=>!qs(e)&&e!==n_;function f0(){const{caseless:e}=o_(this)&&this||{},t={},n=(o,a)=>{const r=e&&t_(t,a)||a;_u(t[r])&&_u(o)?t[r]=f0(t[r],o):_u(o)?t[r]=f0({},o):Fl(o)?t[r]=o.slice():t[r]=o};for(let o=0,a=arguments.length;o(fi(t,(a,r)=>{n&&ro(a)?e[r]=Zy(a,n):e[r]=a},{allOwnKeys:o}),e),tse=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),nse=(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},ose=(e,t,n,o)=>{let a,r,l;const i={};if(t=t||{},e==null)return t;do{for(a=Object.getOwnPropertyNames(e),r=a.length;r-- >0;)l=a[r],(!o||o(l,e,t))&&!i[l]&&(t[l]=e[l],i[l]=!0);e=n!==!1&&Cp(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},ase=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return o!==-1&&o===n},rse=e=>{if(!e)return null;if(Fl(e))return e;let t=e.length;if(!e_(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},lse=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Cp(Uint8Array)),sse=(e,t)=>{const o=(e&&e[Symbol.iterator]).call(e);let a;for(;(a=o.next())&&!a.done;){const r=a.value;t.call(e,r[0],r[1])}},ise=(e,t)=>{let n;const o=[];for(;(n=e.exec(t))!==null;)o.push(n);return o},use=Fo("HTMLFormElement"),cse=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,o,a){return o.toUpperCase()+a}),am=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),dse=Fo("RegExp"),a_=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};fi(n,(a,r)=>{let l;(l=t(a,r,e))!==!1&&(o[r]=l||a)}),Object.defineProperties(e,o)},fse=e=>{a_(e,(t,n)=>{if(ro(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const o=e[n];if(ro(o)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},pse=(e,t)=>{const n={},o=a=>{a.forEach(r=>{n[r]=!0})};return Fl(e)?o(e):o(String(e).split(t)),n},vse=()=>{},hse=(e,t)=>(e=+e,Number.isFinite(e)?e:t),zd="abcdefghijklmnopqrstuvwxyz",rm="0123456789",r_={DIGIT:rm,ALPHA:zd,ALPHA_DIGIT:zd+zd.toUpperCase()+rm},mse=(e=16,t=r_.ALPHA_DIGIT)=>{let n="";const{length:o}=t;for(;e--;)n+=t[Math.random()*o|0];return n};function gse(e){return!!(e&&ro(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const yse=e=>{const t=new Array(10),n=(o,a)=>{if(qc(o)){if(t.indexOf(o)>=0)return;if(!("toJSON"in o)){t[a]=o;const r=Fl(o)?[]:{};return fi(o,(l,i)=>{const u=n(l,a+1);!qs(u)&&(r[i]=u)}),t[a]=void 0,r}}return o};return n(e,0)},_se=Fo("AsyncFunction"),bse=e=>e&&(qc(e)||ro(e))&&ro(e.then)&&ro(e.catch),Ve={isArray:Fl,isArrayBuffer:Qy,isBuffer:Fle,isFormData:Jle,isArrayBufferView:Kle,isString:Wle,isNumber:e_,isBoolean:jle,isObject:qc,isPlainObject:_u,isUndefined:qs,isDate:qle,isFile:Ule,isBlob:Yle,isRegExp:dse,isFunction:ro,isStream:Xle,isURLSearchParams:Zle,isTypedArray:lse,isFileList:Gle,forEach:fi,merge:f0,extend:ese,trim:Qle,stripBOM:tse,inherits:nse,toFlatObject:ose,kindOf:Wc,kindOfTest:Fo,endsWith:ase,toArray:rse,forEachEntry:sse,matchAll:ise,isHTMLForm:use,hasOwnProperty:am,hasOwnProp:am,reduceDescriptors:a_,freezeMethods:fse,toObjectSet:pse,toCamelCase:cse,noop:vse,toFiniteNumber:hse,findKey:t_,global:n_,isContextDefined:o_,ALPHABET:r_,generateString:mse,isSpecCompliantForm:gse,toJSONObject:yse,isAsyncFn:_se,isThenable:bse};function Nt(e,t,n,o,a){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),a&&(this.response=a)}Ve.inherits(Nt,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Ve.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const l_=Nt.prototype,s_={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{s_[e]={value:e}});Object.defineProperties(Nt,s_);Object.defineProperty(l_,"isAxiosError",{value:!0});Nt.from=(e,t,n,o,a,r)=>{const l=Object.create(l_);return Ve.toFlatObject(e,l,function(u){return u!==Error.prototype},i=>i!=="isAxiosError"),Nt.call(l,e.message,t,n,o,a),l.cause=e,l.name=e.name,r&&Object.assign(l,r),l};const wse=null;function p0(e){return Ve.isPlainObject(e)||Ve.isArray(e)}function i_(e){return Ve.endsWith(e,"[]")?e.slice(0,-2):e}function lm(e,t,n){return e?e.concat(t).map(function(a,r){return a=i_(a),!n&&r?"["+a+"]":a}).join(n?".":""):t}function Cse(e){return Ve.isArray(e)&&!e.some(p0)}const Sse=Ve.toFlatObject(Ve,{},null,function(t){return/^is[A-Z]/.test(t)});function Uc(e,t,n){if(!Ve.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=Ve.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(v,_){return!Ve.isUndefined(_[v])});const o=n.metaTokens,a=n.visitor||f,r=n.dots,l=n.indexes,u=(n.Blob||typeof Blob<"u"&&Blob)&&Ve.isSpecCompliantForm(t);if(!Ve.isFunction(a))throw new TypeError("visitor must be a function");function d(m){if(m===null)return"";if(Ve.isDate(m))return m.toISOString();if(!u&&Ve.isBlob(m))throw new Nt("Blob is not supported. Use a Buffer instead.");return Ve.isArrayBuffer(m)||Ve.isTypedArray(m)?u&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function f(m,v,_){let g=m;if(m&&!_&&typeof m=="object"){if(Ve.endsWith(v,"{}"))v=o?v:v.slice(0,-2),m=JSON.stringify(m);else if(Ve.isArray(m)&&Cse(m)||(Ve.isFileList(m)||Ve.endsWith(v,"[]"))&&(g=Ve.toArray(m)))return v=i_(v),g.forEach(function(b,C){!(Ve.isUndefined(b)||b===null)&&t.append(l===!0?lm([v],C,r):l===null?v:v+"[]",d(b))}),!1}return p0(m)?!0:(t.append(lm(_,v,r),d(m)),!1)}const c=[],p=Object.assign(Sse,{defaultVisitor:f,convertValue:d,isVisitable:p0});function h(m,v){if(!Ve.isUndefined(m)){if(c.indexOf(m)!==-1)throw Error("Circular reference detected in "+v.join("."));c.push(m),Ve.forEach(m,function(g,w){(!(Ve.isUndefined(g)||g===null)&&a.call(t,g,Ve.isString(w)?w.trim():w,v,p))===!0&&h(g,v?v.concat(w):[w])}),c.pop()}}if(!Ve.isObject(e))throw new TypeError("data must be an object");return h(e),t}function sm(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(o){return t[o]})}function Sp(e,t){this._pairs=[],e&&Uc(e,this,t)}const u_=Sp.prototype;u_.append=function(t,n){this._pairs.push([t,n])};u_.toString=function(t){const n=t?function(o){return t.call(this,o,sm)}:sm;return this._pairs.map(function(a){return n(a[0])+"="+n(a[1])},"").join("&")};function kse(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function c_(e,t,n){if(!t)return e;const o=n&&n.encode||kse,a=n&&n.serialize;let r;if(a?r=a(t,n):r=Ve.isURLSearchParams(t)?t.toString():new Sp(t,n).toString(o),r){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+r}return e}class im{constructor(){this.handlers=[]}use(t,n,o){return this.handlers.push({fulfilled:t,rejected:n,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){Ve.forEach(this.handlers,function(o){o!==null&&t(o)})}}const d_={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Ese=typeof URLSearchParams<"u"?URLSearchParams:Sp,xse=typeof FormData<"u"?FormData:null,Mse=typeof Blob<"u"?Blob:null,$se={isBrowser:!0,classes:{URLSearchParams:Ese,FormData:xse,Blob:Mse},protocols:["http","https","file","blob","url","data"]},f_=typeof window<"u"&&typeof document<"u",Tse=(e=>f_&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),Ase=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Ose=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:f_,hasStandardBrowserEnv:Tse,hasStandardBrowserWebWorkerEnv:Ase},Symbol.toStringTag,{value:"Module"})),No={...Ose,...$se};function Nse(e,t){return Uc(e,new No.classes.URLSearchParams,Object.assign({visitor:function(n,o,a,r){return No.isNode&&Ve.isBuffer(n)?(this.append(o,n.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}function Ise(e){return Ve.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Rse(e){const t={},n=Object.keys(e);let o;const a=n.length;let r;for(o=0;o=n.length;return l=!l&&Ve.isArray(a)?a.length:l,u?(Ve.hasOwnProp(a,l)?a[l]=[a[l],o]:a[l]=o,!i):((!a[l]||!Ve.isObject(a[l]))&&(a[l]=[]),t(n,o,a[l],r)&&Ve.isArray(a[l])&&(a[l]=Rse(a[l])),!i)}if(Ve.isFormData(e)&&Ve.isFunction(e.entries)){const n={};return Ve.forEachEntry(e,(o,a)=>{t(Ise(o),a,n,0)}),n}return null}function Pse(e,t,n){if(Ve.isString(e))try{return(t||JSON.parse)(e),Ve.trim(e)}catch(o){if(o.name!=="SyntaxError")throw o}return(n||JSON.stringify)(e)}const kp={transitional:d_,adapter:["xhr","http"],transformRequest:[function(t,n){const o=n.getContentType()||"",a=o.indexOf("application/json")>-1,r=Ve.isObject(t);if(r&&Ve.isHTMLForm(t)&&(t=new FormData(t)),Ve.isFormData(t))return a?JSON.stringify(p_(t)):t;if(Ve.isArrayBuffer(t)||Ve.isBuffer(t)||Ve.isStream(t)||Ve.isFile(t)||Ve.isBlob(t))return t;if(Ve.isArrayBufferView(t))return t.buffer;if(Ve.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(r){if(o.indexOf("application/x-www-form-urlencoded")>-1)return Nse(t,this.formSerializer).toString();if((i=Ve.isFileList(t))||o.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return Uc(i?{"files[]":t}:t,u&&new u,this.formSerializer)}}return r||a?(n.setContentType("application/json",!1),Pse(t)):t}],transformResponse:[function(t){const n=this.transitional||kp.transitional,o=n&&n.forcedJSONParsing,a=this.responseType==="json";if(t&&Ve.isString(t)&&(o&&!this.responseType||a)){const l=!(n&&n.silentJSONParsing)&&a;try{return JSON.parse(t)}catch(i){if(l)throw i.name==="SyntaxError"?Nt.from(i,Nt.ERR_BAD_RESPONSE,this,null,this.response):i}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:No.classes.FormData,Blob:No.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Ve.forEach(["delete","get","head","post","put","patch"],e=>{kp.headers[e]={}});const Ep=kp,Lse=Ve.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Vse=e=>{const t={};let n,o,a;return e&&e.split(` +`).forEach(function(l){a=l.indexOf(":"),n=l.substring(0,a).trim().toLowerCase(),o=l.substring(a+1).trim(),!(!n||t[n]&&Lse[n])&&(n==="set-cookie"?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)}),t},um=Symbol("internals");function Jl(e){return e&&String(e).trim().toLowerCase()}function bu(e){return e===!1||e==null?e:Ve.isArray(e)?e.map(bu):String(e)}function Bse(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}const zse=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Hd(e,t,n,o,a){if(Ve.isFunction(o))return o.call(this,t,n);if(a&&(t=n),!!Ve.isString(t)){if(Ve.isString(o))return t.indexOf(o)!==-1;if(Ve.isRegExp(o))return o.test(t)}}function Hse(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,o)=>n.toUpperCase()+o)}function Dse(e,t){const n=Ve.toCamelCase(" "+t);["get","set","has"].forEach(o=>{Object.defineProperty(e,o+n,{value:function(a,r,l){return this[o].call(this,t,a,r,l)},configurable:!0})})}class Yc{constructor(t){t&&this.set(t)}set(t,n,o){const a=this;function r(i,u,d){const f=Jl(u);if(!f)throw new Error("header name must be a non-empty string");const c=Ve.findKey(a,f);(!c||a[c]===void 0||d===!0||d===void 0&&a[c]!==!1)&&(a[c||u]=bu(i))}const l=(i,u)=>Ve.forEach(i,(d,f)=>r(d,f,u));return Ve.isPlainObject(t)||t instanceof this.constructor?l(t,n):Ve.isString(t)&&(t=t.trim())&&!zse(t)?l(Vse(t),n):t!=null&&r(n,t,o),this}get(t,n){if(t=Jl(t),t){const o=Ve.findKey(this,t);if(o){const a=this[o];if(!n)return a;if(n===!0)return Bse(a);if(Ve.isFunction(n))return n.call(this,a,o);if(Ve.isRegExp(n))return n.exec(a);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Jl(t),t){const o=Ve.findKey(this,t);return!!(o&&this[o]!==void 0&&(!n||Hd(this,this[o],o,n)))}return!1}delete(t,n){const o=this;let a=!1;function r(l){if(l=Jl(l),l){const i=Ve.findKey(o,l);i&&(!n||Hd(o,o[i],i,n))&&(delete o[i],a=!0)}}return Ve.isArray(t)?t.forEach(r):r(t),a}clear(t){const n=Object.keys(this);let o=n.length,a=!1;for(;o--;){const r=n[o];(!t||Hd(this,this[r],r,t,!0))&&(delete this[r],a=!0)}return a}normalize(t){const n=this,o={};return Ve.forEach(this,(a,r)=>{const l=Ve.findKey(o,r);if(l){n[l]=bu(a),delete n[r];return}const i=t?Hse(r):String(r).trim();i!==r&&delete n[r],n[i]=bu(a),o[i]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return Ve.forEach(this,(o,a)=>{o!=null&&o!==!1&&(n[a]=t&&Ve.isArray(o)?o.join(", "):o)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const o=new this(t);return n.forEach(a=>o.set(a)),o}static accessor(t){const o=(this[um]=this[um]={accessors:{}}).accessors,a=this.prototype;function r(l){const i=Jl(l);o[i]||(Dse(a,l),o[i]=!0)}return Ve.isArray(t)?t.forEach(r):r(t),this}}Yc.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Ve.reduceDescriptors(Yc.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(o){this[n]=o}}});Ve.freezeMethods(Yc);const ta=Yc;function Dd(e,t){const n=this||Ep,o=t||n,a=ta.from(o.headers);let r=o.data;return Ve.forEach(e,function(i){r=i.call(n,r,a.normalize(),t?t.status:void 0)}),a.normalize(),r}function v_(e){return!!(e&&e.__CANCEL__)}function pi(e,t,n){Nt.call(this,e??"canceled",Nt.ERR_CANCELED,t,n),this.name="CanceledError"}Ve.inherits(pi,Nt,{__CANCEL__:!0});function Fse(e,t,n){const o=n.config.validateStatus;!n.status||!o||o(n.status)?e(n):t(new Nt("Request failed with status code "+n.status,[Nt.ERR_BAD_REQUEST,Nt.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}const Kse=No.hasStandardBrowserEnv?{write(e,t,n,o,a,r){const l=[e+"="+encodeURIComponent(t)];Ve.isNumber(n)&&l.push("expires="+new Date(n).toGMTString()),Ve.isString(o)&&l.push("path="+o),Ve.isString(a)&&l.push("domain="+a),r===!0&&l.push("secure"),document.cookie=l.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Wse(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function jse(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function h_(e,t){return e&&!Wse(t)?jse(e,t):t}const qse=No.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");let o;function a(r){let l=r;return t&&(n.setAttribute("href",l),l=n.href),n.setAttribute("href",l),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return o=a(window.location.href),function(l){const i=Ve.isString(l)?a(l):l;return i.protocol===o.protocol&&i.host===o.host}}():function(){return function(){return!0}}();function Use(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Yse(e,t){e=e||10;const n=new Array(e),o=new Array(e);let a=0,r=0,l;return t=t!==void 0?t:1e3,function(u){const d=Date.now(),f=o[r];l||(l=d),n[a]=u,o[a]=d;let c=r,p=0;for(;c!==a;)p+=n[c++],c=c%e;if(a=(a+1)%e,a===r&&(r=(r+1)%e),d-l{const r=a.loaded,l=a.lengthComputable?a.total:void 0,i=r-n,u=o(i),d=r<=l;n=r;const f={loaded:r,total:l,progress:l?r/l:void 0,bytes:i,rate:u||void 0,estimated:u&&l&&d?(l-r)/u:void 0,event:a};f[t?"download":"upload"]=!0,e(f)}}const Gse=typeof XMLHttpRequest<"u",Xse=Gse&&function(e){return new Promise(function(n,o){let a=e.data;const r=ta.from(e.headers).normalize();let{responseType:l,withXSRFToken:i}=e,u;function d(){e.cancelToken&&e.cancelToken.unsubscribe(u),e.signal&&e.signal.removeEventListener("abort",u)}let f;if(Ve.isFormData(a)){if(No.hasStandardBrowserEnv||No.hasStandardBrowserWebWorkerEnv)r.setContentType(!1);else if((f=r.getContentType())!==!1){const[v,..._]=f?f.split(";").map(g=>g.trim()).filter(Boolean):[];r.setContentType([v||"multipart/form-data",..._].join("; "))}}let c=new XMLHttpRequest;if(e.auth){const v=e.auth.username||"",_=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";r.set("Authorization","Basic "+btoa(v+":"+_))}const p=h_(e.baseURL,e.url);c.open(e.method.toUpperCase(),c_(p,e.params,e.paramsSerializer),!0),c.timeout=e.timeout;function h(){if(!c)return;const v=ta.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders()),g={data:!l||l==="text"||l==="json"?c.responseText:c.response,status:c.status,statusText:c.statusText,headers:v,config:e,request:c};Fse(function(b){n(b),d()},function(b){o(b),d()},g),c=null}if("onloadend"in c?c.onloadend=h:c.onreadystatechange=function(){!c||c.readyState!==4||c.status===0&&!(c.responseURL&&c.responseURL.indexOf("file:")===0)||setTimeout(h)},c.onabort=function(){c&&(o(new Nt("Request aborted",Nt.ECONNABORTED,e,c)),c=null)},c.onerror=function(){o(new Nt("Network Error",Nt.ERR_NETWORK,e,c)),c=null},c.ontimeout=function(){let _=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const g=e.transitional||d_;e.timeoutErrorMessage&&(_=e.timeoutErrorMessage),o(new Nt(_,g.clarifyTimeoutError?Nt.ETIMEDOUT:Nt.ECONNABORTED,e,c)),c=null},No.hasStandardBrowserEnv&&(i&&Ve.isFunction(i)&&(i=i(e)),i||i!==!1&&qse(p))){const v=e.xsrfHeaderName&&e.xsrfCookieName&&Kse.read(e.xsrfCookieName);v&&r.set(e.xsrfHeaderName,v)}a===void 0&&r.setContentType(null),"setRequestHeader"in c&&Ve.forEach(r.toJSON(),function(_,g){c.setRequestHeader(g,_)}),Ve.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),l&&l!=="json"&&(c.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&c.addEventListener("progress",cm(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&c.upload&&c.upload.addEventListener("progress",cm(e.onUploadProgress)),(e.cancelToken||e.signal)&&(u=v=>{c&&(o(!v||v.type?new pi(null,e,c):v),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(u),e.signal&&(e.signal.aborted?u():e.signal.addEventListener("abort",u)));const m=Use(p);if(m&&No.protocols.indexOf(m)===-1){o(new Nt("Unsupported protocol "+m+":",Nt.ERR_BAD_REQUEST,e));return}c.send(a||null)})},v0={http:wse,xhr:Xse};Ve.forEach(v0,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const dm=e=>`- ${e}`,Jse=e=>Ve.isFunction(e)||e===null||e===!1,m_={getAdapter:e=>{e=Ve.isArray(e)?e:[e];const{length:t}=e;let n,o;const a={};for(let r=0;r`adapter ${i} `+(u===!1?"is not supported by the environment":"is not available in the build"));let l=t?r.length>1?`since : +`+r.map(dm).join(` +`):" "+dm(r[0]):"as no adapter specified";throw new Nt("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return o},adapters:v0};function Fd(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new pi(null,e)}function fm(e){return Fd(e),e.headers=ta.from(e.headers),e.data=Dd.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),m_.getAdapter(e.adapter||Ep.adapter)(e).then(function(o){return Fd(e),o.data=Dd.call(e,e.transformResponse,o),o.headers=ta.from(o.headers),o},function(o){return v_(o)||(Fd(e),o&&o.response&&(o.response.data=Dd.call(e,e.transformResponse,o.response),o.response.headers=ta.from(o.response.headers))),Promise.reject(o)})}const pm=e=>e instanceof ta?{...e}:e;function Al(e,t){t=t||{};const n={};function o(d,f,c){return Ve.isPlainObject(d)&&Ve.isPlainObject(f)?Ve.merge.call({caseless:c},d,f):Ve.isPlainObject(f)?Ve.merge({},f):Ve.isArray(f)?f.slice():f}function a(d,f,c){if(Ve.isUndefined(f)){if(!Ve.isUndefined(d))return o(void 0,d,c)}else return o(d,f,c)}function r(d,f){if(!Ve.isUndefined(f))return o(void 0,f)}function l(d,f){if(Ve.isUndefined(f)){if(!Ve.isUndefined(d))return o(void 0,d)}else return o(void 0,f)}function i(d,f,c){if(c in t)return o(d,f);if(c in e)return o(void 0,d)}const u={url:r,method:r,data:r,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,withXSRFToken:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,responseEncoding:l,validateStatus:i,headers:(d,f)=>a(pm(d),pm(f),!0)};return Ve.forEach(Object.keys(Object.assign({},e,t)),function(f){const c=u[f]||a,p=c(e[f],t[f],f);Ve.isUndefined(p)&&c!==i||(n[f]=p)}),n}const g_="1.6.8",xp={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{xp[e]=function(o){return typeof o===e||"a"+(t<1?"n ":" ")+e}});const vm={};xp.transitional=function(t,n,o){function a(r,l){return"[Axios v"+g_+"] Transitional option '"+r+"'"+l+(o?". "+o:"")}return(r,l,i)=>{if(t===!1)throw new Nt(a(l," has been removed"+(n?" in "+n:"")),Nt.ERR_DEPRECATED);return n&&!vm[l]&&(vm[l]=!0,console.warn(a(l," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(r,l,i):!0}};function Zse(e,t,n){if(typeof e!="object")throw new Nt("options must be an object",Nt.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let a=o.length;for(;a-- >0;){const r=o[a],l=t[r];if(l){const i=e[r],u=i===void 0||l(i,r,e);if(u!==!0)throw new Nt("option "+r+" must be "+u,Nt.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Nt("Unknown option "+r,Nt.ERR_BAD_OPTION)}}const h0={assertOptions:Zse,validators:xp},wa=h0.validators;class Qu{constructor(t){this.defaults=t,this.interceptors={request:new im,response:new im}}async request(t,n){try{return await this._request(t,n)}catch(o){if(o instanceof Error){let a;Error.captureStackTrace?Error.captureStackTrace(a={}):a=new Error;const r=a.stack?a.stack.replace(/^.+\n/,""):"";o.stack?r&&!String(o.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(o.stack+=` +`+r):o.stack=r}throw o}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Al(this.defaults,n);const{transitional:o,paramsSerializer:a,headers:r}=n;o!==void 0&&h0.assertOptions(o,{silentJSONParsing:wa.transitional(wa.boolean),forcedJSONParsing:wa.transitional(wa.boolean),clarifyTimeoutError:wa.transitional(wa.boolean)},!1),a!=null&&(Ve.isFunction(a)?n.paramsSerializer={serialize:a}:h0.assertOptions(a,{encode:wa.function,serialize:wa.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let l=r&&Ve.merge(r.common,r[n.method]);r&&Ve.forEach(["delete","get","head","post","put","patch","common"],m=>{delete r[m]}),n.headers=ta.concat(l,r);const i=[];let u=!0;this.interceptors.request.forEach(function(v){typeof v.runWhen=="function"&&v.runWhen(n)===!1||(u=u&&v.synchronous,i.unshift(v.fulfilled,v.rejected))});const d=[];this.interceptors.response.forEach(function(v){d.push(v.fulfilled,v.rejected)});let f,c=0,p;if(!u){const m=[fm.bind(this),void 0];for(m.unshift.apply(m,i),m.push.apply(m,d),p=m.length,f=Promise.resolve(n);c{if(!o._listeners)return;let r=o._listeners.length;for(;r-- >0;)o._listeners[r](a);o._listeners=null}),this.promise.then=a=>{let r;const l=new Promise(i=>{o.subscribe(i),r=i}).then(a);return l.cancel=function(){o.unsubscribe(r)},l},t(function(r,l,i){o.reason||(o.reason=new pi(r,l,i),n(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new Mp(function(a){t=a}),cancel:t}}}const Qse=Mp;function eie(e){return function(n){return e.apply(null,n)}}function tie(e){return Ve.isObject(e)&&e.isAxiosError===!0}const m0={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(m0).forEach(([e,t])=>{m0[t]=e});const nie=m0;function y_(e){const t=new wu(e),n=Zy(wu.prototype.request,t);return Ve.extend(n,wu.prototype,t,{allOwnKeys:!0}),Ve.extend(n,t,null,{allOwnKeys:!0}),n.create=function(a){return y_(Al(e,a))},n}const en=y_(Ep);en.Axios=wu;en.CanceledError=pi;en.CancelToken=Qse;en.isCancel=v_;en.VERSION=g_;en.toFormData=Uc;en.AxiosError=Nt;en.Cancel=en.CanceledError;en.all=function(t){return Promise.all(t)};en.spread=eie;en.isAxiosError=tie;en.mergeConfig=Al;en.AxiosHeaders=ta;en.formToJSON=e=>p_(Ve.isHTMLForm(e)?new FormData(e):e);en.getAdapter=m_.getAdapter;en.HttpStatusCode=nie;en.default=en;const oie={data:()=>({description:"客户端生成code工厂",buttons:{generate:{name:"生成代码"}},type:"1",icon:"HotWater",name:"客户端生成code工厂"})},aie=Object.assign(oie,{__name:"LocalClientProperties",setup(e){R(null);const t=wt({schema:""});un(t);const n=R(""),o=R([]),a=()=>{o.value.push({inetHost:"",inetPort:"",clientId:"",edit:!0})},r=(f,c)=>{c.edit=!0,console.log(f,c)},l=(f,c)=>{c.edit=!1,console.log(f,c),d(c),u()},i=(f,c)=>{console.log(f,c),en.delete("/v1/api/lazy/netty/server/properties/remove",{params:c}).then(p=>{const{status:h,data:m}=p,{code:v,message:_}=m;h===200&&v===0?(os({message:"修改配置成功",type:"success"}),u()):os.error("修改配置失败:"+_)})};et(async()=>{u()});const u=()=>{en.get("/v1/api/lazy/netty/server/properties/findList",{params:{instanceId:"",schema:""}}).then(f=>{f.status===200&&f.data?(f.data.data.map(c=>{c.edit=!1}),o.value=f.data.data?f.data.data:[]):console.error(f)})},d=f=>{en.post("/v1/api/lazy/netty/server/properties/story",f).then(c=>{const{status:p,data:h}=c,{code:m,message:v}=h;p===200&&m===0?(os({message:"新增、修改配置成功",type:"success"}),u()):os.error("新增、修改配置失败:"+v)})};return(f,c)=>{const p=nt("Plus"),h=Be,m=rn,v=mn,_=fy,g=nt("Edit"),w=nt("Select"),b=dy;return y(),M("div",null,[W(m,{onClick:c[0]||(c[0]=C=>a())},{default:G(()=>[vt(" 新增配置 "),W(h,null,{default:G(()=>[W(p)]),_:1})]),_:1}),W(b,{data:o.value,style:{width:"100%"}},{default:G(()=>[W(_,{label:"服务端IP",prop:"inetHost"},{default:G(C=>[C.row.edit?(y(),oe(v,{key:0,modelValue:C.row.inetHost,"onUpdate:modelValue":x=>C.row.inetHost=x,placeholder:"服务端IP"},null,8,["modelValue","onUpdate:modelValue"])):Z("",!0)]),_:1}),W(_,{label:"服务端端口",prop:"inetPort"},{default:G(C=>[C.row.edit?(y(),oe(v,{key:0,modelValue:C.row.inetPort,"onUpdate:modelValue":x=>C.row.inetPort=x,placeholder:"服务端端口"},null,8,["modelValue","onUpdate:modelValue"])):Z("",!0)]),_:1}),W(_,{label:"客户端端ID",prop:"clientId"},{default:G(C=>[C.row.edit?(y(),oe(v,{key:0,modelValue:C.row.clientId,"onUpdate:modelValue":x=>C.row.clientId=x,placeholder:"客户端端ID"},null,8,["modelValue","onUpdate:modelValue"])):Z("",!0)]),_:1}),W(_,{label:"连接状态",prop:"connectStatus"}),W(_,{label:"配置类型",prop:"type"}),W(_,{align:"right"},{header:G(()=>[W(v,{modelValue:n.value,"onUpdate:modelValue":c[1]||(c[1]=C=>n.value=C),size:"small",placeholder:"Type to search"},null,8,["modelValue"])]),default:G(C=>[C.row.edit?Z("",!0):(y(),oe(m,{key:0,size:"small",onClick:x=>r(C.$index,C.row)},{default:G(()=>[vt(" Edit "),W(h,null,{default:G(()=>[W(g)]),_:1})]),_:2},1032,["onClick"])),C.row.edit?(y(),oe(m,{key:1,size:"small",onClick:x=>l(C.$index,C.row)},{default:G(()=>[vt(" submit "),W(h,null,{default:G(()=>[W(w)]),_:1})]),_:2},1032,["onClick"])):Z("",!0),W(m,{size:"small",type:"danger",onClick:x=>i(C.$index,C.row)},{default:G(()=>[vt("Delete ")]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])])}}}),rie=e=>(Um("data-v-7b2edd67"),e=e(),Ym(),e),lie=rie(()=>k("div",null,[k("img",{alt:"Vue logo",class:"logo",src:Dw,width:"125",height:"125"})],-1)),sie={class:"wrapper"},iie={__name:"App",setup(e){return(t,n)=>(y(),M(Fe,null,[k("header",null,[lie,k("div",sie,[W(Uw,{msg:"Java 使用 Lazy ORM 网络穿透客户端"})])]),k("main",null,[W(aie)])],64))}},uie=I4(iie,[["__scopeId","data-v-7b2edd67"]]),$p=N4(uie);for(const[e,t]of Object.entries(CP))$p.component(e,t);$p.use(Hle);$p.mount("#app")});export default cie(); diff --git a/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/assets/index-C9GutiFy.css b/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/assets/index-C9GutiFy.css new file mode 100644 index 00000000..0d730692 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/assets/index-C9GutiFy.css @@ -0,0 +1 @@ +@charset "UTF-8";:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}@media (prefers-color-scheme: dark){:root{--color-background: var(--vt-c-black);--color-background-soft: var(--vt-c-black-soft);--color-background-mute: var(--vt-c-black-mute);--color-border: var(--vt-c-divider-dark-2);--color-border-hover: var(--vt-c-divider-dark-1);--color-heading: var(--vt-c-text-dark-1);--color-text: var(--vt-c-text-dark-2)}}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100vh;color:var(--color-text);background:var(--color-background);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{max-width:1280px;margin:0 auto;padding:2rem;font-weight:400}a,.green{text-decoration:none;color:#00bd7e;transition:.4s;padding:3px}@media (hover: hover){a:hover{background-color:#00bd7e33}}@media (min-width: 1024px){body{display:flex;place-items:center}#app{display:grid;grid-template-columns:1fr 1fr;padding:0 2rem}}h1[data-v-3cc994dc]{font-weight:500;font-size:2.1rem;position:relative;top:-10px}h3[data-v-3cc994dc]{font-size:1.2rem}.greetings h1[data-v-3cc994dc],.greetings h3[data-v-3cc994dc]{text-align:center}@media (min-width: 1024px){.greetings h1[data-v-3cc994dc],.greetings h3[data-v-3cc994dc]{text-align:left}}header[data-v-7b2edd67]{line-height:1.5}.logo[data-v-7b2edd67]{display:block;margin:0 auto 2rem}@media (min-width: 1024px){header[data-v-7b2edd67]{display:flex;place-items:center;padding-right:calc(var(--section-gap) / 2)}.logo[data-v-7b2edd67]{margin:0 2rem 0 0}header .wrapper[data-v-7b2edd67]{display:flex;place-items:flex-start;flex-wrap:wrap}}:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645,.045,.355,1);--el-transition-function-fast-bezier:cubic-bezier(.23,1,.32,1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px}:root{color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0,0,0,.04),0px 8px 20px rgba(0,0,0,.08);--el-box-shadow-light:0px 0px 12px rgba(0,0,0,.12);--el-box-shadow-lighter:0px 0px 6px rgba(0,0,0,.12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0,0,0,.08),0px 12px 32px rgba(0,0,0,.12),0px 8px 16px -8px rgba(0,0,0,.16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0,0,0,.8);--el-overlay-color-light:rgba(0,0,0,.7);--el-overlay-color-lighter:rgba(0,0,0,.5);--el-mask-color:rgba(255,255,255,.9);--el-mask-color-extra-light:rgba(255,255,255,.3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.el-icon{--color:inherit;align-items:center;display:inline-flex;height:1em;justify-content:center;line-height:1em;position:relative;width:1em;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{box-sizing:border-box;flex-shrink:0;overflow:auto;width:var(--el-aside-width,300px)}.el-autocomplete{display:inline-block;position:relative}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__wrap{box-sizing:border-box;max-height:280px;padding:10px 0}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);line-height:34px;list-style:none;margin:0;overflow:hidden;padding:0 20px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.el-autocomplete-suggestion li:hover,.el-autocomplete-suggestion li.highlighted{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{border-top:1px solid var(--el-color-black);margin-top:6px}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{color:var(--el-text-color-secondary);font-size:20px;height:100px;line-height:100px;text-align:center}.el-autocomplete-suggestion.is-loading li:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size-small:24px;--el-avatar-size:40px;align-items:center;background:var(--el-avatar-bg-color);box-sizing:border-box;color:var(--el-avatar-text-color);display:inline-flex;font-size:var(--el-avatar-text-size);height:var(--el-avatar-size);justify-content:center;overflow:hidden;text-align:center;width:var(--el-avatar-size)}.el-avatar>img{display:block;height:100%;width:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);align-items:center;background-color:var(--el-backtop-bg-color);border-radius:50%;box-shadow:var(--el-box-shadow-lighter);color:var(--el-backtop-text-color);cursor:pointer;display:flex;font-size:20px;height:40px;justify-content:center;position:fixed;width:40px;z-index:5}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;display:inline-block;position:relative;vertical-align:middle;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.el-badge__content{align-items:center;background-color:var(--el-badge-bg-color);border:1px solid var(--el-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;font-size:var(--el-badge-font-size);height:var(--el-badge-size);justify-content:center;padding:0 var(--el-badge-padding);white-space:nowrap}.el-badge__content.is-fixed{position:absolute;right:calc(1px + var(--el-badge-size)/2);top:0;transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;height:8px;padding:0;right:0;width:8px}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{content:"";display:table}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.el-button-group>.el-button:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-bottom-left-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255,255,255,.5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-color-info);--el-button-active-color:var(--el-text-color-primary);align-items:center;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);border-radius:var(--el-border-radius-base);box-sizing:border-box;color:var(--el-button-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight);height:32px;justify-content:center;line-height:1;outline:none;padding:8px 15px;text-align:center;transition:.1s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-button:hover{background-color:var(--el-button-hover-bg-color);border-color:var(--el-button-hover-border-color);color:var(--el-button-hover-text-color);outline:none}.el-button:active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{background-color:var(--el-button-disabled-bg-color);background-image:none;border-color:var(--el-button-disabled-border-color);color:var(--el-button-disabled-text-color);cursor:not-allowed}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{background-color:var(--el-mask-color-extra-light);border-radius:inherit;bottom:-1px;content:"";left:-1px;pointer-events:none;position:absolute;right:-1px;top:-1px;z-index:1}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{border-radius:50%;padding:8px;width:32px}.el-button.is-text{background-color:transparent;border:0 solid transparent;color:var(--el-button-text-color)}.el-button.is-text.is-disabled{background-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{background:transparent;border-color:transparent;color:var(--el-button-text-color);height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-link:not(.is-disabled):hover{background-color:transparent;border-color:transparent}.el-button.is-link:not(.is-disabled):active{background-color:transparent;border-color:transparent;color:var(--el-button-active-color)}.el-button--text{background:transparent;border-color:transparent;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button--text:not(.is-disabled):hover{background-color:transparent;border-color:transparent;color:var(--el-color-primary-light-3)}.el-button--text:not(.is-disabled):active{background-color:transparent;border-color:transparent;color:var(--el-color-primary-dark-2)}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8);color:var(--el-color-primary-light-5)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8);color:var(--el-color-success-light-5)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8);color:var(--el-color-warning-light-5)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8);color:var(--el-color-danger-light-5)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8);color:var(--el-color-info-light-5)}.el-button--large{--el-button-size:40px;border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base);height:var(--el-button-size);padding:12px 19px}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{padding:12px;width:var(--el-button-size)}.el-button--small{--el-button-size:24px;border-radius:calc(var(--el-border-radius-base) - 1px);font-size:12px;height:var(--el-button-size);padding:5px 11px}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{padding:5px;width:var(--el-button-size)}.el-calendar{--el-calendar-border:var(--el-table-border,1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{border-bottom:var(--el-calendar-header-border-bottom);display:flex;justify-content:space-between;padding:12px 20px}.el-calendar__title{align-self:center;color:var(--el-text-color)}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{color:var(--el-text-color-regular);font-weight:400;padding:12px 0}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);transition:background-color var(--el-transition-duration-fast) ease;vertical-align:top}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;height:var(--el-calendar-cell-width);padding:8px}.el-calendar-table .el-calendar-day:hover{background-color:var(--el-calendar-selected-bg-color);cursor:pointer}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);background-color:var(--el-card-bg-color);border:1px solid var(--el-card-border-color);border-radius:var(--el-card-border-radius);color:var(--el-text-color-primary);overflow:hidden;transition:var(--el-transition-duration)}.el-card.is-always-shadow{box-shadow:var(--el-box-shadow-light)}.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-card__body{padding:var(--el-card-padding)}.el-card__footer{border-top:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-carousel__item{display:inline-block;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.el-carousel__item,.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item--card,.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__item--card-vertical{height:50%;width:100%}.el-carousel__mask{background-color:var(--el-color-white);height:100%;left:0;opacity:.24;position:absolute;top:0;transition:var(--el-transition-duration-fast);width:100%}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:rgba(31,45,61,.11);--el-carousel-arrow-hover-background:rgba(31,45,61,.23);--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal,.el-carousel--vertical{overflow:hidden}.el-carousel__container{height:300px;position:relative}.el-carousel__arrow{align-items:center;background-color:var(--el-carousel-arrow-background);border:none;border-radius:50%;color:#fff;cursor:pointer;display:inline-flex;font-size:var(--el-carousel-arrow-font-size);height:var(--el-carousel-arrow-size);justify-content:center;margin:0;outline:none;padding:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);transition:var(--el-transition-duration);width:var(--el-carousel-arrow-size);z-index:10}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{list-style:none;margin:0;padding:0;position:absolute;z-index:calc(var(--el-index-normal) + 1)}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:calc(var(--el-carousel-indicator-height) + var(--el-carousel-indicator-padding-vertical)*2);position:static;text-align:center;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--right{right:0}.el-carousel__indicators--labels{left:0;right:0;text-align:center;transform:none}.el-carousel__indicators--labels .el-carousel__button{color:#000;font-size:12px;height:auto;padding:2px 18px;width:auto}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal)}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{height:calc(var(--el-carousel-indicator-width)/2);width:var(--el-carousel-indicator-height)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{background-color:#fff;border:none;cursor:pointer;display:block;height:var(--el-carousel-indicator-height);margin:0;opacity:.48;outline:none;padding:0;transition:var(--el-transition-duration);width:var(--el-carousel-indicator-width)}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{opacity:0;transform:translateY(-50%) translate(-10px)}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{opacity:0;transform:translateY(-50%) translate(10px)}.el-transitioning{filter:url(#elCarouselHorizontal)}.el-transitioning-vertical{filter:url(#elCarouselVertical)}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);display:flex;font-size:var(--el-cascader-menu-font-size)}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{border-right:var(--el-cascader-menu-border);box-sizing:border-box;color:var(--el-cascader-menu-text-color);min-width:180px}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{box-sizing:border-box;list-style:none;margin:0;min-height:100%;padding:6px 0;position:relative}.el-cascader-menu__hover-zone{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.el-cascader-menu__empty-text{align-items:center;color:var(--el-cascader-color-empty);display:flex;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{align-items:center;display:flex;height:34px;line-height:34px;outline:none;padding:0 30px 0 20px;position:relative}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{left:10px;position:absolute}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;overflow:hidden;padding:0 8px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.el-cascader-node>.el-checkbox{margin-right:0}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);display:inline-block;font-size:var(--el-font-size-base);line-height:32px;outline:none;position:relative;vertical-align:middle}.el-cascader:not(.is-disabled):hover .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset;cursor:pointer}.el-cascader .el-input{cursor:pointer;display:flex}.el-cascader .el-input .el-input__inner{cursor:pointer;text-overflow:ellipsis}.el-cascader .el-input .el-input__suffix-inner .el-icon{height:calc(100% - 2px)}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{font-size:14px;transition:transform var(--el-transition-duration)}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader.is-disabled .el-cascader__label{color:var(--el-disabled-text-color);z-index:calc(var(--el-index-normal) + 1)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);font-size:var(--el-cascader-menu-font-size)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill);border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__tags{box-sizing:border-box;display:flex;flex-wrap:wrap;left:0;line-height:normal;position:absolute;right:30px;text-align:left;top:50%;transform:translateY(-50%)}.el-cascader__tags .el-tag{align-items:center;background:var(--el-cascader-tag-background);display:inline-flex;margin:2px 0 2px 6px;max-width:100%;text-overflow:ellipsis}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__tags.is-validate{right:55px}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{align-items:center;background:var(--el-fill-color);display:inline-flex;margin:2px 0 2px 6px;max-width:100%;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__collapse-tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-list{color:var(--el-cascader-menu-text-color);font-size:var(--el-font-size-base);margin:0;max-height:204px;padding:6px 0;text-align:center}.el-cascader__suggestion-item{align-items:center;cursor:pointer;display:flex;height:34px;justify-content:space-between;outline:none;padding:0 15px;text-align:left}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{color:var(--el-cascader-color-empty);margin:10px 0}.el-cascader__search-input{background:transparent;border:none;box-sizing:border-box;color:var(--el-cascader-menu-text-color);flex:1;height:24px;margin:2px 0 2px 11px;min-width:60px;outline:none;padding:0}.el-cascader__search-input::-moz-placeholder{color:transparent}.el-cascader__search-input:-ms-input-placeholder{color:transparent}.el-cascader__search-input::placeholder{color:transparent}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:700;line-height:var(--el-font-size-base);padding:7px 15px;transition:var(--el-transition-all)}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.is-checked.el-check-tag--primary{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.is-checked.el-check-tag--primary:hover{background-color:var(--el-color-primary-light-7)}.el-check-tag.is-checked.el-check-tag--success{background-color:var(--el-color-success-light-8);color:var(--el-color-success)}.el-check-tag.is-checked.el-check-tag--success:hover{background-color:var(--el-color-success-light-7)}.el-check-tag.is-checked.el-check-tag--warning{background-color:var(--el-color-warning-light-8);color:var(--el-color-warning)}.el-check-tag.is-checked.el-check-tag--warning:hover{background-color:var(--el-color-warning-light-7)}.el-check-tag.is-checked.el-check-tag--danger{background-color:var(--el-color-danger-light-8);color:var(--el-color-danger)}.el-check-tag.is-checked.el-check-tag--danger:hover{background-color:var(--el-color-danger-light-7)}.el-check-tag.is-checked.el-check-tag--error{background-color:var(--el-color-error-light-8);color:var(--el-color-error)}.el-check-tag.is-checked.el-check-tag--error:hover{background-color:var(--el-color-error-light-7)}.el-check-tag.is-checked.el-check-tag--info{background-color:var(--el-color-info-light-8);color:var(--el-color-info)}.el-check-tag.is-checked.el-check-tag--info:hover{background-color:var(--el-color-info-light-7)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary);display:inline-block;position:relative}.el-checkbox-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left-color:transparent;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);line-height:1;margin:0;outline:none;padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{margin:0;opacity:0;outline:none;position:absolute;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7);color:var(--el-checkbox-button-checked-text-color)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button:first-child .el-checkbox-button__inner{border-bottom-left-radius:var(--el-border-radius-base);border-left:var(--el-border);border-top-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-bottom-right-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-checkbox-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);height:var(--el-checkbox-height,32px);margin-right:30px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{border-radius:var(--el-checkbox-border-radius);outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px}.el-checkbox__input{cursor:pointer;display:inline-flex;outline:none;position:relative;white-space:nowrap}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-icon-color);cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-checked-icon-color);content:"";display:block;height:2px;left:0;position:absolute;right:0;top:5px;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{background-color:var(--el-checkbox-bg-color);border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;display:inline-block;height:var(--el-checkbox-input-height);position:relative;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);width:var(--el-checkbox-input-width);z-index:var(--el-index-normal)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{border:1px solid transparent;border-left:0;border-top:0;box-sizing:content-box;content:"";height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);transform-origin:center;transition:transform .15s ease-in .05s;width:3px}.el-checkbox__original{height:0;margin:0;opacity:0;outline:none;position:absolute;width:0;z-index:-1}.el-checkbox__label{display:inline-block;font-size:var(--el-checkbox-font-size);line-height:1;padding-left:8px}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{display:block;min-height:1px}.el-col-0,.el-col-0.is-guttered{display:none}.el-col-0{flex:0 0 0%;max-width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{left:0;position:relative}.el-col-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{left:4.1666666667%;position:relative}.el-col-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{left:8.3333333333%;position:relative}.el-col-3{flex:0 0 12.5%;max-width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{left:12.5%;position:relative}.el-col-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{left:16.6666666667%;position:relative}.el-col-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{left:20.8333333333%;position:relative}.el-col-6{flex:0 0 25%;max-width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{left:25%;position:relative}.el-col-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{left:29.1666666667%;position:relative}.el-col-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{left:33.3333333333%;position:relative}.el-col-9{flex:0 0 37.5%;max-width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{left:37.5%;position:relative}.el-col-10{flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{left:41.6666666667%;position:relative}.el-col-11{flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{left:45.8333333333%;position:relative}.el-col-12{flex:0 0 50%;max-width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%;position:relative}.el-col-13{flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{left:54.1666666667%;position:relative}.el-col-14{flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{left:58.3333333333%;position:relative}.el-col-15{flex:0 0 62.5%;max-width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{left:62.5%;position:relative}.el-col-16{flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{left:66.6666666667%;position:relative}.el-col-17{flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{left:70.8333333333%;position:relative}.el-col-18{flex:0 0 75%;max-width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{left:75%;position:relative}.el-col-19{flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{left:79.1666666667%;position:relative}.el-col-20{flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{left:83.3333333333%;position:relative}.el-col-21{flex:0 0 87.5%;max-width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{left:87.5%;position:relative}.el-col-22{flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{left:91.6666666667%;position:relative}.el-col-23{flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{left:95.8333333333%;position:relative}.el-col-24{flex:0 0 100%;max-width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{left:100%;position:relative}@media only screen and (max-width:767px){.el-col-xs-0,.el-col-xs-0.is-guttered{display:none}.el-col-xs-0{flex:0 0 0%;max-width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{left:0;position:relative}.el-col-xs-1{display:block;flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{left:4.1666666667%;position:relative}.el-col-xs-2{display:block;flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{left:8.3333333333%;position:relative}.el-col-xs-3{display:block;flex:0 0 12.5%;max-width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{left:12.5%;position:relative}.el-col-xs-4{display:block;flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{left:16.6666666667%;position:relative}.el-col-xs-5{display:block;flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{left:20.8333333333%;position:relative}.el-col-xs-6{display:block;flex:0 0 25%;max-width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{left:25%;position:relative}.el-col-xs-7{display:block;flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{left:29.1666666667%;position:relative}.el-col-xs-8{display:block;flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{left:33.3333333333%;position:relative}.el-col-xs-9{display:block;flex:0 0 37.5%;max-width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{left:37.5%;position:relative}.el-col-xs-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{left:41.6666666667%;position:relative}.el-col-xs-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{left:45.8333333333%;position:relative}.el-col-xs-12{display:block;flex:0 0 50%;max-width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{left:50%;position:relative}.el-col-xs-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{left:54.1666666667%;position:relative}.el-col-xs-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{left:58.3333333333%;position:relative}.el-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{left:62.5%;position:relative}.el-col-xs-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{left:66.6666666667%;position:relative}.el-col-xs-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{left:70.8333333333%;position:relative}.el-col-xs-18{display:block;flex:0 0 75%;max-width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{left:75%;position:relative}.el-col-xs-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{left:79.1666666667%;position:relative}.el-col-xs-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{left:83.3333333333%;position:relative}.el-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{left:87.5%;position:relative}.el-col-xs-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{left:91.6666666667%;position:relative}.el-col-xs-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{left:95.8333333333%;position:relative}.el-col-xs-24{display:block;flex:0 0 100%;max-width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{left:100%;position:relative}}@media only screen and (min-width:768px){.el-col-sm-0,.el-col-sm-0.is-guttered{display:none}.el-col-sm-0{flex:0 0 0%;max-width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{left:0;position:relative}.el-col-sm-1{display:block;flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{left:4.1666666667%;position:relative}.el-col-sm-2{display:block;flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{left:8.3333333333%;position:relative}.el-col-sm-3{display:block;flex:0 0 12.5%;max-width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{left:12.5%;position:relative}.el-col-sm-4{display:block;flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{left:16.6666666667%;position:relative}.el-col-sm-5{display:block;flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{left:20.8333333333%;position:relative}.el-col-sm-6{display:block;flex:0 0 25%;max-width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{left:25%;position:relative}.el-col-sm-7{display:block;flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{left:29.1666666667%;position:relative}.el-col-sm-8{display:block;flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{left:33.3333333333%;position:relative}.el-col-sm-9{display:block;flex:0 0 37.5%;max-width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{left:37.5%;position:relative}.el-col-sm-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{left:41.6666666667%;position:relative}.el-col-sm-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{left:45.8333333333%;position:relative}.el-col-sm-12{display:block;flex:0 0 50%;max-width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{left:50%;position:relative}.el-col-sm-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{left:54.1666666667%;position:relative}.el-col-sm-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{left:58.3333333333%;position:relative}.el-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{left:62.5%;position:relative}.el-col-sm-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{left:66.6666666667%;position:relative}.el-col-sm-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{left:70.8333333333%;position:relative}.el-col-sm-18{display:block;flex:0 0 75%;max-width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{left:75%;position:relative}.el-col-sm-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{left:79.1666666667%;position:relative}.el-col-sm-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{left:83.3333333333%;position:relative}.el-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{left:87.5%;position:relative}.el-col-sm-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{left:91.6666666667%;position:relative}.el-col-sm-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{left:95.8333333333%;position:relative}.el-col-sm-24{display:block;flex:0 0 100%;max-width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{left:100%;position:relative}}@media only screen and (min-width:992px){.el-col-md-0,.el-col-md-0.is-guttered{display:none}.el-col-md-0{flex:0 0 0%;max-width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{left:0;position:relative}.el-col-md-1{display:block;flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{left:4.1666666667%;position:relative}.el-col-md-2{display:block;flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{left:8.3333333333%;position:relative}.el-col-md-3{display:block;flex:0 0 12.5%;max-width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{left:12.5%;position:relative}.el-col-md-4{display:block;flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{left:16.6666666667%;position:relative}.el-col-md-5{display:block;flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{left:20.8333333333%;position:relative}.el-col-md-6{display:block;flex:0 0 25%;max-width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{left:25%;position:relative}.el-col-md-7{display:block;flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{left:29.1666666667%;position:relative}.el-col-md-8{display:block;flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{left:33.3333333333%;position:relative}.el-col-md-9{display:block;flex:0 0 37.5%;max-width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{left:37.5%;position:relative}.el-col-md-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{left:41.6666666667%;position:relative}.el-col-md-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{left:45.8333333333%;position:relative}.el-col-md-12{display:block;flex:0 0 50%;max-width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{left:50%;position:relative}.el-col-md-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{left:54.1666666667%;position:relative}.el-col-md-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{left:58.3333333333%;position:relative}.el-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{left:62.5%;position:relative}.el-col-md-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{left:66.6666666667%;position:relative}.el-col-md-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{left:70.8333333333%;position:relative}.el-col-md-18{display:block;flex:0 0 75%;max-width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{left:75%;position:relative}.el-col-md-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{left:79.1666666667%;position:relative}.el-col-md-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{left:83.3333333333%;position:relative}.el-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{left:87.5%;position:relative}.el-col-md-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{left:91.6666666667%;position:relative}.el-col-md-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{left:95.8333333333%;position:relative}.el-col-md-24{display:block;flex:0 0 100%;max-width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{left:100%;position:relative}}@media only screen and (min-width:1200px){.el-col-lg-0,.el-col-lg-0.is-guttered{display:none}.el-col-lg-0{flex:0 0 0%;max-width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{left:0;position:relative}.el-col-lg-1{display:block;flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{left:4.1666666667%;position:relative}.el-col-lg-2{display:block;flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{left:8.3333333333%;position:relative}.el-col-lg-3{display:block;flex:0 0 12.5%;max-width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{left:12.5%;position:relative}.el-col-lg-4{display:block;flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{left:16.6666666667%;position:relative}.el-col-lg-5{display:block;flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{left:20.8333333333%;position:relative}.el-col-lg-6{display:block;flex:0 0 25%;max-width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{left:25%;position:relative}.el-col-lg-7{display:block;flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{left:29.1666666667%;position:relative}.el-col-lg-8{display:block;flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{left:33.3333333333%;position:relative}.el-col-lg-9{display:block;flex:0 0 37.5%;max-width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{left:37.5%;position:relative}.el-col-lg-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{left:41.6666666667%;position:relative}.el-col-lg-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{left:45.8333333333%;position:relative}.el-col-lg-12{display:block;flex:0 0 50%;max-width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{left:50%;position:relative}.el-col-lg-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{left:54.1666666667%;position:relative}.el-col-lg-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{left:58.3333333333%;position:relative}.el-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{left:62.5%;position:relative}.el-col-lg-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{left:66.6666666667%;position:relative}.el-col-lg-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{left:70.8333333333%;position:relative}.el-col-lg-18{display:block;flex:0 0 75%;max-width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{left:75%;position:relative}.el-col-lg-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{left:79.1666666667%;position:relative}.el-col-lg-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{left:83.3333333333%;position:relative}.el-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{left:87.5%;position:relative}.el-col-lg-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{left:91.6666666667%;position:relative}.el-col-lg-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{left:95.8333333333%;position:relative}.el-col-lg-24{display:block;flex:0 0 100%;max-width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{left:100%;position:relative}}@media only screen and (min-width:1920px){.el-col-xl-0,.el-col-xl-0.is-guttered{display:none}.el-col-xl-0{flex:0 0 0%;max-width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{left:0;position:relative}.el-col-xl-1{display:block;flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{left:4.1666666667%;position:relative}.el-col-xl-2{display:block;flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{left:8.3333333333%;position:relative}.el-col-xl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{left:12.5%;position:relative}.el-col-xl-4{display:block;flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{left:16.6666666667%;position:relative}.el-col-xl-5{display:block;flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{left:20.8333333333%;position:relative}.el-col-xl-6{display:block;flex:0 0 25%;max-width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{left:25%;position:relative}.el-col-xl-7{display:block;flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{left:29.1666666667%;position:relative}.el-col-xl-8{display:block;flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{left:33.3333333333%;position:relative}.el-col-xl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{left:37.5%;position:relative}.el-col-xl-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{left:41.6666666667%;position:relative}.el-col-xl-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{left:45.8333333333%;position:relative}.el-col-xl-12{display:block;flex:0 0 50%;max-width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{left:50%;position:relative}.el-col-xl-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{left:54.1666666667%;position:relative}.el-col-xl-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{left:58.3333333333%;position:relative}.el-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{left:62.5%;position:relative}.el-col-xl-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{left:66.6666666667%;position:relative}.el-col-xl-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{left:70.8333333333%;position:relative}.el-col-xl-18{display:block;flex:0 0 75%;max-width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{left:75%;position:relative}.el-col-xl-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{left:79.1666666667%;position:relative}.el-col-xl-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{left:83.3333333333%;position:relative}.el-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{left:87.5%;position:relative}.el-col-xl-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{left:91.6666666667%;position:relative}.el-col-xl-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{left:95.8333333333%;position:relative}.el-col-xl-24{display:block;flex:0 0 100%;max-width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{left:100%;position:relative}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-bottom:1px solid var(--el-collapse-border-color);border-top:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{align-items:center;background-color:var(--el-collapse-header-bg-color);border:none;border-bottom:1px solid var(--el-collapse-border-color);color:var(--el-collapse-header-text-color);cursor:pointer;display:flex;font-size:var(--el-collapse-header-font-size);font-weight:500;height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);outline:none;padding:0;transition:border-bottom-color var(--el-transition-duration);width:100%}.el-collapse-item__arrow{font-weight:300;margin:0 8px 0 auto;transition:transform var(--el-transition-duration)}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{background-color:var(--el-collapse-content-bg-color);border-bottom:1px solid var(--el-collapse-border-color);box-sizing:border-box;overflow:hidden;will-change:height}.el-collapse-item__content{color:var(--el-collapse-content-text-color);font-size:var(--el-collapse-content-font-size);line-height:1.7692307692;padding-bottom:25px}.el-collapse-item:last-child{margin-bottom:-1px}.el-color-predefine{display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:flex;flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{border-radius:4px;cursor:pointer;height:20px;margin:0 0 8px 8px;width:20px}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector>div{border-radius:3px;display:flex;height:100%}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{background-color:red;box-sizing:border-box;float:right;height:12px;padding:0 2px;position:relative;width:280px}.el-color-hue-slider__bar{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red);height:100%;position:relative}.el-color-hue-slider__thumb{background:#fff;border:1px solid var(--el-border-color-lighter);border-radius:1px;box-shadow:0 0 2px #0009;box-sizing:border-box;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:4px;z-index:1}.el-color-hue-slider.is-vertical{height:180px;padding:2px 0;width:12px}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{height:4px;left:0;top:0;width:100%}.el-color-svpanel{height:180px;position:relative;width:280px}.el-color-svpanel__black,.el-color-svpanel__white{bottom:0;left:0;position:absolute;right:0;top:0}.el-color-svpanel__white{background:linear-gradient(90deg,#fff,#fff0)}.el-color-svpanel__black{background:linear-gradient(0deg,#000,#0000)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{border-radius:50%;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;cursor:head;height:4px;transform:translate(-2px,-2px);width:4px}.el-color-alpha-slider{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px;box-sizing:border-box;height:12px;position:relative;width:280px}.el-color-alpha-slider__bar{background:linear-gradient(to right,rgba(255,255,255,0) 0,var(--el-bg-color) 100%);height:100%;position:relative}.el-color-alpha-slider__thumb{background:#fff;border:1px solid var(--el-border-color-lighter);border-radius:1px;box-shadow:0 0 2px #0009;box-sizing:border-box;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:4px;z-index:1}.el-color-alpha-slider.is-vertical{height:180px;width:20px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(180deg,#fff0 0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{height:4px;left:0;top:0;width:100%}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{clear:both;content:"";display:table}.el-color-dropdown__btns{margin-top:12px;text-align:right}.el-color-dropdown__value{color:#000;float:left;font-size:12px;line-height:26px;width:160px}.el-color-picker{display:inline-block;line-height:normal;outline:none;position:relative}.el-color-picker:hover:not(.is-disabled,.is-focused) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-focused .el-color-picker__trigger{border-color:var(--el-color-primary)}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--large{height:40px}.el-color-picker--large .el-color-picker__trigger{height:40px;width:40px}.el-color-picker--large .el-color-picker__mask{height:38px;width:38px}.el-color-picker--small{height:24px}.el-color-picker--small .el-color-picker__trigger{height:24px;width:24px}.el-color-picker--small .el-color-picker__mask{height:22px;width:22px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:scale(.8)}.el-color-picker__mask{background-color:#ffffffb3;border-radius:4px;cursor:not-allowed;height:30px;left:1px;position:absolute;top:1px;width:30px;z-index:1}.el-color-picker__trigger{align-items:center;border:1px solid var(--el-border-color);border-radius:4px;box-sizing:border-box;cursor:pointer;display:inline-flex;font-size:0;height:32px;justify-content:center;padding:4px;position:relative;width:32px}.el-color-picker__color{border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);box-sizing:border-box;display:block;height:100%;position:relative;text-align:center;width:100%}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px}.el-color-picker__color-inner{align-items:center;display:inline-flex;height:100%;justify-content:center;width:100%}.el-color-picker .el-color-picker__empty{color:var(--el-text-color-secondary);font-size:12px}.el-color-picker .el-color-picker__icon{align-items:center;color:#fff;display:inline-flex;font-size:12px;justify-content:center}.el-color-picker__panel{background-color:#fff;border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light);box-sizing:content-box;padding:6px;position:absolute;z-index:10}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333333}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{border-bottom-left-radius:15px;border-top-left-radius:15px;margin-left:5px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{border-bottom-right-radius:15px;border-top-right-radius:15px;margin-right:5px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{box-sizing:border-box;cursor:pointer;height:30px;padding:4px 0;position:relative;text-align:center;width:32px}.el-date-table td .el-date-table-cell{box-sizing:border-box;height:30px;padding:3px 0}.el-date-table td .el-date-table-cell .el-date-table-cell__text{border-radius:50%;display:block;height:24px;left:50%;line-height:24px;margin:0 auto;position:absolute;transform:translate(-50%);width:24px}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-date-table td.today.end-date .el-date-table-cell__text,.el-date-table td.today.start-date .el-date-table-cell__text{color:#fff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.end-date .el-date-table-cell,.el-date-table td.start-date .el-date-table-cell{color:#fff}.el-date-table td.end-date .el-date-table-cell__text,.el-date-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{border-bottom-left-radius:15px;border-top-left-radius:15px;margin-left:5px}.el-date-table td.end-date .el-date-table-cell{border-bottom-right-radius:15px;border-top-right-radius:15px;margin-right:5px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed;opacity:1}.el-date-table td.selected .el-date-table-cell{border-radius:15px;margin-left:5px;margin-right:5px}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);border-radius:15px;color:#fff}.el-date-table td.week{color:var(--el-datepicker-header-text-color);font-size:80%}.el-date-table td:focus{outline:none}.el-date-table th{border-bottom:1px solid var(--el-border-color-lighter);color:var(--el-datepicker-header-text-color);font-weight:400;padding:5px}.el-month-table{border-collapse:collapse;font-size:12px;margin:-1px}.el-month-table td{cursor:pointer;padding:8px 0;position:relative;text-align:center;width:68px}.el-month-table td div{box-sizing:border-box;height:48px;padding:6px 0}.el-month-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-month-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-month-table td .cell{border-radius:18px;color:var(--el-datepicker-text-color);display:block;height:36px;left:50%;line-height:36px;margin:0 auto;position:absolute;transform:translate(-50%);width:54px}.el-month-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range div{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range div:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{background-color:var(--el-datepicker-active-color);color:#fff}.el-month-table td.start-date div{border-bottom-left-radius:24px;border-top-left-radius:24px;margin-left:3px}.el-month-table td.end-date div{border-bottom-right-radius:24px;border-top-right-radius:24px;margin-right:3px}.el-month-table td.current:not(.disabled) div{border-radius:24px;margin-left:3px;margin-right:3px}.el-month-table td.current:not(.disabled) .cell{background-color:var(--el-datepicker-active-color);color:#fff}.el-month-table td:focus-visible{outline:none}.el-month-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-year-table{border-collapse:collapse;font-size:12px;margin:-1px}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{cursor:pointer;padding:8px 0;position:relative;text-align:center;width:68px}.el-year-table td div{box-sizing:border-box;height:48px;padding:6px 0}.el-year-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-year-table td.disabled .cell{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-year-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-year-table td .cell{border-radius:18px;color:var(--el-datepicker-text-color);display:block;height:36px;left:50%;line-height:36px;margin:0 auto;position:absolute;transform:translate(-50%);width:54px}.el-year-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.current:not(.disabled) div{border-radius:24px;margin-left:3px;margin-right:3px}.el-year-table td.current:not(.disabled) .cell{background-color:var(--el-datepicker-active-color);color:#fff}.el-year-table td:focus-visible{outline:none}.el-year-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{display:inline-block;max-height:192px;overflow:auto;position:relative;vertical-align:top;width:50%}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;overflow:hidden;text-align:center}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;height:30px;left:0;line-height:30px;position:absolute;text-align:center;width:100%;z-index:var(--el-index-normal)}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__list{list-style:none;margin:0}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;height:80px;width:100%}.el-time-spinner__item{color:var(--el-text-color-regular);font-size:12px;height:32px;line-height:32px}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;position:relative;text-align:left;vertical-align:middle}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{height:var(--el-input-height,var(--el-component-size));width:var(--el-date-editor-width)}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .clear-icon,.el-date-editor .close-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__icon{color:var(--el-text-color-placeholder);float:left;font-size:14px;height:inherit}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-text-color-regular);display:inline-block;font-size:var(--el-font-size-base);height:30px;line-height:30px;margin:0;outline:none;padding:0;text-align:center;width:39%}.el-date-editor .el-range-input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{align-items:center;color:var(--el-text-color-primary);display:inline-flex;flex:1;font-size:14px;height:100%;justify-content:center;margin:0;overflow-wrap:break-word;padding:0 5px}.el-date-editor .el-range__close-icon{color:var(--el-text-color-placeholder);cursor:pointer;font-size:14px;height:inherit;width:unset}.el-date-editor .el-range__close-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{align-items:center;display:inline-flex;padding:0 10px}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{font-size:14px;line-height:40px}.el-range-editor--large .el-range-input{font-size:14px;height:38px;line-height:38px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{font-size:12px;line-height:24px}.el-range-editor--small .el-range-input{font-size:12px;height:22px;line-height:22px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{background:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);line-height:30px}.el-picker-panel .el-time-panel{background-color:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light);margin:5px 0}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{clear:both;content:"";display:table}.el-picker-panel__content{margin:15px;position:relative}.el-picker-panel__footer{background-color:var(--el-bg-color-overlay);border-top:1px solid var(--el-datepicker-inner-border-color);font-size:0;padding:4px 12px;position:relative;text-align:right}.el-picker-panel__shortcut{background-color:transparent;border:0;color:var(--el-datepicker-text-color);cursor:pointer;display:block;font-size:14px;line-height:28px;outline:none;padding-left:12px;text-align:left;width:100%}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:var(--el-datepicker-active-color)}.el-picker-panel__btn{background-color:transparent;border:1px solid var(--el-fill-color-darker);border-radius:2px;color:var(--el-text-color-primary);cursor:pointer;font-size:12px;line-height:24px;outline:none;padding:0 20px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{background:transparent;border:0;color:var(--el-datepicker-icon-color);cursor:pointer;font-size:12px;margin-top:8px;outline:none}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{background-color:var(--el-bg-color-overlay);border-right:1px solid var(--el-datepicker-inner-border-color);bottom:0;box-sizing:border-box;overflow:auto;padding-top:6px;position:absolute;top:0;width:110px}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{display:table-cell;padding:0 5px;position:relative}.el-date-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;display:table;font-size:12px;padding:8px 5px 5px;position:relative;width:100%}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{border-bottom:1px solid var(--el-border-color-lighter);margin-bottom:0;padding-bottom:12px}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{color:var(--el-text-color-regular);cursor:pointer;font-size:16px;font-weight:500;line-height:22px;padding:0 5px;text-align:center}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{cursor:pointer;float:left;line-height:30px;margin-left:10px}.el-date-picker .el-time-panel{position:absolute}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{height:28px;position:relative;text-align:center}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{box-sizing:border-box;float:left;margin:0;padding:16px;width:50%}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;display:table;font-size:12px;padding:8px 5px 5px;position:relative;width:100%}.el-date-range-picker__time-header>.el-icon-arrow-right{color:var(--el-datepicker-icon-color);display:table-cell;font-size:20px;vertical-align:middle}.el-date-range-picker__time-picker-wrap{display:table-cell;padding:0 5px;position:relative}.el-date-range-picker__time-picker-wrap .el-picker-panel{background:#fff;position:absolute;right:0;top:13px;z-index:1}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-time-range-picker{overflow:visible;width:354px}.el-time-range-picker__content{padding:10px;position:relative;text-align:center;z-index:1}.el-time-range-picker__cell{box-sizing:border-box;display:inline-block;margin:0;padding:4px 7px 7px;width:50%}.el-time-range-picker__header{font-size:14px;margin-bottom:5px;text-align:center}.el-time-range-picker__body{border:1px solid var(--el-datepicker-border-color);border-radius:2px}.el-time-panel{border-radius:2px;box-sizing:content-box;left:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:180px;z-index:var(--el-index-top)}.el-time-panel__content{font-size:0;overflow:hidden;position:relative}.el-time-panel__content:after,.el-time-panel__content:before{box-sizing:border-box;content:"";height:32px;left:0;margin-top:-16px;padding-top:6px;position:absolute;right:0;text-align:left;top:50%;z-index:-1}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{border-bottom:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);margin-left:12%;margin-right:12%;padding-left:50%}.el-time-panel__content.has-seconds:after{left:66.6666666667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333333333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));box-sizing:border-box;height:36px;line-height:25px;padding:4px;text-align:right}.el-time-panel__btn{background-color:transparent;border:none;color:var(--el-text-color-primary);cursor:pointer;font-size:12px;line-height:28px;margin:0 5px;outline:none;padding:0 5px}.el-time-panel__btn.confirm{color:var(--el-timepicker-active-color,var(--el-color-primary));font-weight:800}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;font-weight:400;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{-webkit-animation:v-modal-in var(--el-transition-duration-fast) ease;animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{-webkit-animation:v-modal-out var(--el-transition-duration-fast) ease forwards;animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-small);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{-webkit-animation:modal-fade-in var(--el-transition-duration);animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{-webkit-animation:dialog-fade-in var(--el-transition-duration);animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{-webkit-animation:modal-fade-out var(--el-transition-duration);animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{-webkit-animation:dialog-fade-out var(--el-transition-duration);animation:dialog-fade-out var(--el-transition-duration)}@-webkit-keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@-webkit-keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@-webkit-keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);display:block;height:1px;margin:24px 0;width:100%}.el-divider--vertical{border-left:1px var(--el-border-color) var(--el-border-style);display:inline-block;height:1em;margin:0 8px;position:relative;vertical-align:middle;width:1px}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);font-size:14px;font-weight:500;padding:0 20px;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;position:absolute;transition:all var(--el-transition-duration)}.el-drawer .btt,.el-drawer .ltr,.el-drawer .rtl,.el-drawer .ttb{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{flex:1;font-size:1rem;line-height:inherit;margin:0}.el-drawer__footer{padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{background-color:transparent;border:none;color:inherit;cursor:pointer;display:inline-flex;font-size:var(--el-font-size-extra-large);outline:none}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;overflow:auto;padding:var(--el-drawer-padding-primary)}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{bottom:0;height:100%;top:0}.el-drawer.btt,.el-drawer.ttb{left:0;right:0;width:100%}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{opacity:0}.el-drawer-fade-enter-to,.el-drawer-fade-leave-from{opacity:1}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);line-height:1;position:relative;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:none}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:0}.el-dropdown .el-dropdown__caret-button{align-items:center;border-left:none;display:inline-flex;justify-content:center;padding-left:0;padding-right:0;width:32px}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{background:var(--el-overlay-color-lighter);bottom:-1px;content:"";display:block;left:0;position:absolute;top:-1px;width:1px}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:none}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;left:0;list-style:none;margin:0;padding:5px 0;position:relative;top:0;z-index:var(--el-dropdown-menu-index)}.el-dropdown-menu__item{align-items:center;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:var(--el-font-size-base);line-height:22px;list-style:none;margin:0;outline:none;padding:5px 16px;white-space:nowrap}.el-dropdown-menu__item:not(.is-disabled):focus{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{border-top:1px solid var(--el-border-color-lighter);margin:6px 0}.el-dropdown-menu__item.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{font-size:14px;line-height:22px;padding:7px 20px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{font-size:12px;line-height:20px;padding:2px 12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:var(--el-empty-padding);text-align:center}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{height:100%;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:top;width:100%}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;height:100%;vertical-align:top;width:100%}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);margin:0}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--label-left .el-form-item__label{justify-content:flex-start}.el-form--label-top .el-form-item{display:block}.el-form--label-top .el-form-item .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;text-align:left}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form--large.el-form--label-top .el-form-item .el-form-item__label{line-height:22px;margin-bottom:12px}.el-form--default.el-form--label-top .el-form-item .el-form-item__label{line-height:22px;margin-bottom:8px}.el-form--small.el-form--label-top .el-form-item .el-form-item__label{line-height:20px;margin-bottom:4px}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;justify-content:flex-end;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-input__wrapper,.el-form-item.is-error .el-input__wrapper.is-focus,.el-form-item.is-error .el-input__wrapper:focus,.el-form-item.is-error .el-input__wrapper:hover,.el-form-item.is-error .el-select__wrapper,.el-form-item.is-error .el-select__wrapper.is-focus,.el-form-item.is-error .el-select__wrapper:focus,.el-form-item.is-error .el-select__wrapper:hover,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner.is-focus,.el-form-item.is-error .el-textarea__inner:focus,.el-form-item.is-error .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer;font-size:inherit}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translate(-50%);width:282px}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;height:100%;justify-content:space-around;width:100%}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in var(--el-transition-duration);animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out var(--el-transition-duration);animation:viewer-fade-out var(--el-transition-duration)}@-webkit-keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@-webkit-keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-input-number{display:inline-flex;line-height:30px;position:relative;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;display:inline-block;font-size:var(--el-font-size-base);position:relative;vertical-align:bottom;width:100%}.el-textarea__inner{-webkit-appearance:none;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;font-family:inherit;font-size:inherit;line-height:1.5;padding:5px 11px;position:relative;resize:vertical;transition:var(--el-transition-box-shadow);width:100%}.el-textarea__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea .el-input__count{background:var(--el-fill-color-blank);bottom:5px;color:var(--el-color-info);font-size:12px;line-height:14px;position:absolute;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);box-sizing:border-box;display:inline-flex;font-size:var(--el-font-size-base);line-height:var(--el-input-height);position:relative;vertical-align:middle;width:var(--el-input-width)}.el-input::-webkit-scrollbar{width:6px;z-index:11}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{align-items:center;color:var(--el-color-info);display:inline-flex;font-size:12px;height:100%}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);display:inline-block;line-height:normal;padding-left:8px}.el-input__wrapper{align-items:center;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;cursor:text;display:inline-flex;flex-grow:1;justify-content:center;padding:1px 11px;transform:translateZ(0);transition:var(--el-transition-box-shadow)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px);-webkit-appearance:none;background:none;border:none;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));flex-grow:1;font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);outline:none;padding:0;width:100%}.el-input__inner:focus{outline:none}.el-input__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner:-ms-input-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__prefix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__suffix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{align-items:center;display:flex;height:inherit;justify-content:center;line-height:inherit;margin-left:8px;transition:all var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{align-items:stretch;display:inline-flex;width:100%}.el-input-group__append,.el-input-group__prepend{align-items:center;background-color:var(--el-fill-color-light);border-radius:var(--el-input-border-radius);color:var(--el-color-info);display:inline-flex;justify-content:center;min-height:100%;padding:0 20px;position:relative;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{background-color:transparent;border-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-bottom-left-radius:0;border-left:0;border-top-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper{border-bottom-left-radius:0;border-top-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{border-bottom-right-radius:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--append>.el-input__wrapper{border-bottom-right-radius:0;border-top-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{border-bottom-left-radius:0;border-top-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-hidden{display:none!important}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder);align-items:center;color:var(--el-link-text-color);cursor:pointer;display:inline-flex;flex-direction:row;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);justify-content:center;outline:none;padding:0;position:relative;text-decoration:none;vertical-align:middle}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link.is-underline:hover:after{border-bottom:1px solid var(--el-link-hover-text-color);bottom:0;content:"";height:0;left:0;position:absolute;right:0}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default:after{border-color:var(--el-link-hover-text-color)}.el-link__inner{align-items:center;display:inline-flex;justify-content:center}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--primary:after{border-color:var(--el-link-text-color)}.el-link.el-link--primary.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--success:after{border-color:var(--el-link-text-color)}.el-link.el-link--success.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--warning:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--danger:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--error:after{border-color:var(--el-link-text-color)}.el-link.el-link--error.is-underline:hover:after{border-color:var(--el-link-text-color)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.el-link--info:after{border-color:var(--el-link-text-color)}.el-link.el-link--info.is-underline:hover:after{border-color:var(--el-link-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);bottom:0;left:0;margin:0;position:absolute;right:0;top:0;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@-webkit-keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-rotate{to{transform:rotate(1turn)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;box-sizing:border-box;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{background-color:var(--el-menu-bg-color);border-right:1px solid var(--el-menu-border-color);box-sizing:border-box;list-style:none;margin:0;padding-left:0;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level)*var(--el-menu-level-padding));white-space:nowrap}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{border-right:none;display:flex;flex-wrap:nowrap;height:var(--el-menu-horizontal-height)}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:1px solid var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{align-items:center;border-bottom:2px solid transparent;color:var(--el-menu-text-color);display:inline-flex;height:100%;justify-content:center;margin:0}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{border-bottom:2px solid transparent;color:var(--el-menu-text-color);height:100%}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{align-items:center;background-color:var(--el-menu-bg-color);color:var(--el-menu-text-color);display:flex;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{background-color:var(--el-menu-hover-bg-color);color:var(--el-menu-hover-text-color);outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding)*2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{display:inline-block;height:0;overflow:hidden;visibility:hidden;width:0}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{border:none;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light);min-width:200px;padding:5px 0;z-index:100}.el-menu .el-icon{flex-shrink:0}.el-menu-item{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-menu-item [class^=el-icon]{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{align-items:center;box-sizing:border-box;display:inline-flex;height:100%;left:0;padding:0 var(--el-menu-base-level-padding);position:absolute;top:0;width:100%}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:none}.el-sub-menu__title.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu .el-icon{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{font-size:12px;margin-right:0;margin-top:-6px;position:absolute;right:var(--el-menu-base-level-padding);top:50%;transition:transform var(--el-transition-duration);width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{color:var(--el-text-color-secondary);font-size:12px;line-height:normal;padding:7px 0 7px var(--el-menu-base-level-padding)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{opacity:0;transition:var(--el-transition-duration-fast)}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);box-shadow:var(--el-messagebox-box-shadow);box-sizing:border-box;display:inline-block;font-size:var(--el-messagebox-font-size);max-width:var(--el-messagebox-width);overflow:hidden;overflow-wrap:break-word;padding:var(--el-messagebox-padding-primary);position:relative;text-align:left;vertical-align:middle;width:100%}.el-message-box:focus{outline:none!important}.el-overlay.is-message-box .el-overlay-message-box{bottom:0;left:0;overflow:auto;padding:16px;position:fixed;right:0;text-align:center;top:0}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;vertical-align:middle;width:0}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size, 16px))}.el-message-box__title{color:var(--el-messagebox-title-color);font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;display:flex;gap:12px}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input{border-color:var(--el-color-error)}.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding-top:var(--el-messagebox-padding-primary)}.el-message-box--center .el-message-box__title{align-items:center;display:flex;gap:6px;justify-content:center}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.fade-in-linear-enter-active .el-overlay-message-box{-webkit-animation:msgbox-fade-in var(--el-transition-duration);animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@-webkit-keyframes msgbox-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes msgbox-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);align-items:center;background-color:var(--el-message-bg-color);border-color:var(--el-message-border-color);border-radius:var(--el-border-radius-base);border-style:var(--el-border-style);border-width:var(--el-border-width);box-sizing:border-box;display:flex;gap:8px;left:50%;max-width:calc(100% - 32px);padding:var(--el-message-padding);position:fixed;top:20px;transform:translate(-50%);transition:opacity var(--el-transition-duration),transform .4s,top .4s;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.el-message.is-center{justify-content:center}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;right:-8px;top:-8px}.el-message__content{font-size:14px;line-height:1;padding:0}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{color:var(--el-message-close-icon-color);cursor:pointer;font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size,16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular);background-color:var(--el-bg-color-overlay);border:1px solid var(--el-notification-border-color);border-radius:var(--el-notification-radius);box-shadow:var(--el-notification-shadow);box-sizing:border-box;display:flex;overflow:hidden;overflow-wrap:break-word;padding:var(--el-notification-padding);position:fixed;transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);width:var(--el-notification-width);z-index:9999}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right)}.el-notification__title{color:var(--el-notification-title-color);font-size:var(--el-notification-title-font-size);font-weight:700;line-height:var(--el-notification-icon-size);margin:0}.el-notification__content{color:var(--el-notification-content-color);font-size:var(--el-notification-content-font-size);line-height:24px;margin:6px 0 0}.el-notification__content p{margin:0}.el-notification .el-notification__icon{font-size:var(--el-notification-icon-size);height:var(--el-notification-icon-size);width:var(--el-notification-icon-size)}.el-notification .el-notification__closeBtn{color:var(--el-notification-close-color);cursor:pointer;font-size:var(--el-notification-close-font-size);position:absolute;right:15px;top:18px}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{background-color:var(--el-overlay-color-lighter);bottom:0;height:100%;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2000}.el-overlay .el-overlay-root{height:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{align-items:center;display:flex;justify-content:space-between;line-height:24px}.el-page-header__left{align-items:center;display:flex;margin-right:40px;position:relative}.el-page-header__back{align-items:center;cursor:pointer;display:flex}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{align-items:center;display:flex;font-size:16px;margin-right:10px}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{color:var(--el-text-color-primary);font-size:18px}.el-page-header__breadcrumb{margin-bottom:16px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination button{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination button *{pointer-events:none}.el-pagination button:focus{outline:none}.el-pagination button:hover{color:var(--el-pagination-hover-color)}.el-pagination button.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination button.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination button.is-disabled,.el-pagination button:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination button:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm__main{align-items:center;display:flex}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{margin-top:8px;text-align:right}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);border:1px solid var(--el-popover-border-color);border-radius:var(--el-popover-border-radius);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;color:var(--el-text-color-regular);font-size:var(--el-popover-font-size);line-height:1.4;min-width:150px;overflow-wrap:break-word;padding:var(--el-popover-padding);z-index:var(--el-index-popper)}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{-webkit-animation:indeterminate 3s infinite;animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{-webkit-animation:striped-flow 3s linear infinite;animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@-webkit-keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@-webkit-keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light)}.el-radio-button,.el-radio-button__inner{display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left:0;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;padding:8px 15px;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:var(--el-border);border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:checked+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:32px;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{background-color:var(--el-color-white);border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary);align-items:center;display:inline-flex;height:32px}.el-rate:active,.el-rate:focus{outline:none}.el-rate__item{color:var(--el-rate-void-color);cursor:pointer;display:inline-block;font-size:0;line-height:normal;position:relative;vertical-align:middle}.el-rate .el-rate__icon{display:inline-block;font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);position:relative;transition:var(--el-transition-duration)}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{left:0;position:absolute;top:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{color:var(--el-rate-fill-color);display:inline-block;overflow:hidden}.el-rate__decimal,.el-rate__decimal--box{left:0;position:absolute;top:0}.el-rate__text{color:var(--el-rate-text-color);font-size:var(--el-rate-font-size);vertical-align:middle}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{color:var(--el-rate-disabled-void-color);cursor:auto}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px;align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:var(--el-result-padding);text-align:center}.el-result__icon svg{height:var(--el-result-icon-font-size);width:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{color:var(--el-text-color-primary);font-size:var(--el-result-title-font-size);line-height:1.3;margin:0}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{color:var(--el-text-color-regular);font-size:var(--el-font-size-base);line-height:1.3;margin:0}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{box-sizing:border-box;display:flex;flex-wrap:wrap;position:relative}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-top{align-items:flex-start}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;overflow:hidden;position:relative}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));border-radius:inherit;cursor:pointer;display:block;height:0;opacity:var(--el-scrollbar-opacity,.3);position:relative;transition:var(--el-transition-duration) background-color;width:0}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{border-radius:4px;bottom:2px;position:absolute;right:2px;z-index:1}.el-scrollbar__bar.is-vertical{top:2px;width:6px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-select-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty,.el-select-dropdown__loading{color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0;text-align:center}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:6px 0}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{box-sizing:border-box;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);height:34px;line-height:34px;overflow:hidden;padding:0 32px 0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{background-color:unset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{list-style:none;margin:0;padding:0;position:relative}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{background:var(--el-border-color-light);bottom:12px;content:"";display:block;height:1px;left:20px;position:absolute;right:20px}.el-select-group__split-dash{background:var(--el-border-color-light);height:1px;left:20px;position:absolute;right:20px}.el-select-group__title{color:var(--el-color-info);font-size:12px;line-height:30px;padding-left:20px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;display:inline-block;position:relative;vertical-align:middle;width:var(--el-select-width)}.el-select__wrapper{align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:14px;gap:6px;line-height:24px;min-height:32px;padding:4px 12px;position:relative;text-align:left;transition:var(--el-transition-duration)}.el-select__wrapper:hover{box-shadow:0 0 0 1px var(--el-text-color) inset}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{background-color:var(--el-fill-color-light);box-shadow:0 0 0 1px var(--el-select-disabled-border) inset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag{cursor:not-allowed}.el-select__prefix,.el-select__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;gap:6px}.el-select__caret{color:var(--el-select-input-color);cursor:pointer;font-size:var(--el-select-input-font-size);transform:rotate(0);transition:var(--el-transition-duration)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__selection{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:6px;min-width:0;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{border-color:transparent;cursor:pointer}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{display:flex;flex-wrap:wrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-select__tags-text{line-height:normal}.el-select__placeholder,.el-select__tags-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select__placeholder{color:var(--el-input-text-color,var(--el-text-color-regular));position:absolute;top:50%;transform:translateY(-50%);width:100%}.el-select__placeholder.is-transparent{color:var(--el-text-color-placeholder);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select__input-wrapper{max-width:100%}.el-select__input-wrapper.is-hidden{opacity:0;position:absolute}.el-select__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-select-multiple-input-color);font-family:inherit;font-size:inherit;height:24px;max-width:100%;outline:none;padding:0}.el-select__input.is-disabled{cursor:not-allowed}.el-select__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-select--large .el-select__wrapper{font-size:14px;gap:6px;line-height:24px;min-height:40px;padding:8px 16px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{font-size:12px;gap:4px;line-height:20px;min-height:24px;padding:2px 8px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);border-radius:var(--el-border-radius-base);display:inline-block;height:16px;width:100%}.el-skeleton__circle{border-radius:50%;height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size);width:var(--el-skeleton-circle-size)}.el-skeleton__button{border-radius:4px;height:40px;width:64px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{height:var(--el-font-size-small);width:100%}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{align-items:center;border-radius:0;display:flex;justify-content:center;width:unset}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;height:22%;width:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{background:var(--el-skeleton-color);height:16px;margin-top:16px}.el-skeleton.is-animated .el-skeleton__item{-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translate(-50%);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translate(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translate(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{display:inline-flex;vertical-align:top}.el-space__item{display:flex;flex-wrap:wrap}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{white-space:nowrap;width:100%}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:50px;width:50px}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{transform:rotate(1turn)}}@keyframes rotate{to{transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-step{flex-shrink:1;position:relative}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-grow:0;flex-shrink:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{border-color:var(--el-text-color-primary);color:var(--el-text-color-primary)}.el-step__head.is-wait{border-color:var(--el-text-color-placeholder);color:var(--el-text-color-placeholder)}.el-step__head.is-success{border-color:var(--el-color-success);color:var(--el-color-success)}.el-step__head.is-error{border-color:var(--el-color-danger);color:var(--el-color-danger)}.el-step__head.is-finish{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-step__icon{align-items:center;background:var(--el-bg-color);box-sizing:border-box;display:inline-flex;font-size:14px;height:24px;justify-content:center;position:relative;transition:.15s ease-out;width:24px;z-index:1}.el-step__icon.is-text{border:2px solid;border-color:inherit;border-radius:50%}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{color:inherit;display:inline-block;font-weight:700;line-height:1;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{background-color:var(--el-text-color-placeholder);border-color:inherit;position:absolute}.el-step__line-inner{border:1px solid;border-color:inherit;box-sizing:border-box;display:block;height:0;transition:.15s ease-out;width:0}.el-step__main{text-align:left;white-space:normal}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{color:var(--el-text-color-primary);font-weight:700}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{font-size:12px;font-weight:400;line-height:20px;margin-top:-5px;padding-right:10%}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;left:0;right:0;top:11px}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{flex-grow:1;padding-left:10px}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{bottom:0;left:11px;top:0;width:2px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{align-items:center;display:flex}.el-step.is-simple .el-step__head{font-size:0;padding-right:10px;width:auto}.el-step.is-simple .el-step__icon{background:transparent;font-size:12px;height:16px;width:16px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{align-items:stretch;display:flex;flex-grow:1;position:relative}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;overflow-wrap:break-word}.el-step.is-simple .el-step__arrow{align-items:center;display:flex;flex-grow:1;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{background:var(--el-text-color-placeholder);content:"";display:inline-block;height:15px;position:absolute;width:1px}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{display:flex}.el-steps--simple{background:var(--el-fill-color-light);border-radius:4px;padding:13px 8%}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{flex-flow:column;height:100%}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);align-items:center;display:inline-flex;font-size:14px;height:32px;line-height:20px;position:relative;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{color:var(--el-text-color-primary);cursor:pointer;display:inline-block;font-size:14px;font-weight:500;height:20px;transition:var(--el-transition-duration-fast);vertical-align:middle}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{display:inline-block;font-size:14px;line-height:1}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{height:0;margin:0;opacity:0;position:absolute;width:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{align-items:center;background:var(--el-switch-off-color);border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));border-radius:10px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:20px;min-width:40px;outline:none;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{align-items:center;display:flex;height:16px;justify-content:center;overflow:hidden;padding:0 4px 0 18px;transition:all var(--el-transition-duration);width:100%}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{color:var(--el-color-white);font-size:12px;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.el-switch__core .el-switch__action{align-items:center;background-color:var(--el-color-white);border-radius:var(--el-border-radius-circle);color:var(--el-switch-off-color);display:flex;height:16px;justify-content:center;left:1px;position:absolute;transition:all var(--el-transition-duration);width:16px}.el-switch.is-checked .el-switch__core{background-color:var(--el-switch-on-color);border-color:var(--el-switch-border-color,var(--el-switch-on-color))}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;height:40px;line-height:24px}.el-switch--large .el-switch__label{font-size:14px;height:24px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;height:24px;min-width:50px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{height:20px;width:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;height:24px;line-height:16px}.el-switch--small .el-switch__label{font-size:12px;height:16px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;height:16px;min-width:30px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{height:12px;width:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;padding:0 10px}.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{background:transparent;border:none;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button:focus{outline:none}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:14px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0;width:100%}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:-webkit-sticky;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table__expand-icon{color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:20px;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:14px}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:-webkit-sticky!important;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{box-shadow:none;right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:-webkit-sticky!important;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;cursor:pointer;display:inline-flex;flex-direction:column;height:14px;overflow:initial;position:relative;vertical-align:middle;width:24px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:-webkit-sticky;position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:-webkit-sticky;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{cursor:pointer;display:inline-block}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;height:12px;line-height:12px;margin-right:8px;text-align:center;width:12px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);font-size:14px}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{background-color:var(--el-bg-color);display:flex;flex-direction:column-reverse;left:0;overflow:hidden;position:absolute;top:0}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{background-color:var(--el-bg-color);box-shadow:2px 0 4px #0000000f;display:flex;flex-direction:column-reverse;left:0;overflow:hidden;position:absolute;top:0}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__horizontal,.el-table-v2__left .el-vl__vertical{z-index:-1}.el-table-v2__right{background-color:var(--el-bg-color);box-shadow:-2px 0 4px #0000000f;display:flex;flex-direction:column-reverse;overflow:hidden;position:absolute;right:0;top:0}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__horizontal,.el-table-v2__right .el-vl__vertical{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{-webkit-padding-end:var(--el-table-scrollbar-size);padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{overflow:hidden;position:relative}.el-table-v2__footer{bottom:0;overflow:hidden;right:0}.el-table-v2__empty,.el-table-v2__footer,.el-table-v2__overlay{left:0;position:absolute}.el-table-v2__overlay{bottom:0;right:0;top:0;z-index:9999}.el-table-v2__header-row{border-bottom:var(--el-table-border);display:flex}.el-table-v2__header-cell{align-items:center;background-color:var(--el-table-header-bg-color);color:var(--el-table-header-text-color);display:flex;font-weight:700;height:100%;overflow:hidden;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table-v2__header-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__header-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{display:none;opacity:.6;transition:opacity,display var(--el-transition-duration)}.el-table-v2__sort-icon.is-sorting{display:block;opacity:1}.el-table-v2__row{align-items:center;border-bottom:var(--el-table-border);display:flex;transition:background-color var(--el-transition-duration)}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{align-items:center;display:flex;height:100%;overflow:hidden;padding:0 8px}.el-table-v2__row-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__row-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__expand-icon{cursor:pointer;margin:0 4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-table-v2.is-dynamic .el-table-v2__row{align-items:stretch;overflow:hidden}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{overflow-wrap:break-word}.el-tabs{--el-tabs-header-height:40px}.el-tabs__header{margin:0 0 15px;padding:0;position:relative}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;float:right;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__nav-wrap{margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover{padding-left:13px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover{padding-right:13px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:rgb(209,219,229) transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter var(--el-transition-duration);animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{-webkit-animation:slideInRight-leave var(--el-transition-duration);animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{-webkit-animation:slideInLeft-enter var(--el-transition-duration);animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{-webkit-animation:slideInLeft-leave var(--el-transition-duration);animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@-webkit-keyframes slideInRight-enter{0%{opacity:0;transform:translate(100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInRight-enter{0%{opacity:0;transform:translate(100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@-webkit-keyframes slideInRight-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(100%);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(100%);transform-origin:0 0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;transform:translate(-100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translate(-100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@-webkit-keyframes slideInLeft-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(-100%);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(-100%);transform-origin:0 0}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary);align-items:center;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);border-radius:var(--el-tag-border-radius);border-style:solid;border-width:1px;box-sizing:border-box;color:var(--el-tag-text-color);display:inline-flex;font-size:var(--el-tag-font-size);height:24px;justify-content:center;line-height:1;padding:0 9px;vertical-align:middle;white-space:nowrap;--el-icon-size:14px}.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{background-color:var(--el-tag-hover-color);color:var(--el-color-white)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3);--el-tag-text-color:var(--el-color-white)}.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info,.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning{--el-tag-text-color:var(--el-color-white)}.el-tag--plain{--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary);--el-tag-bg-color:var(--el-fill-color-blank)}.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{height:32px;padding:0 11px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{height:20px;padding:0 7px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);align-self:center;color:var(--el-text-color);font-size:var(--el-text-font-size);margin:0;overflow-wrap:break-word;padding:0}.el-text.is-truncated{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{margin:0;max-height:200px}.time-select-item{font-size:14px;line-height:20px;padding:8px 10px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);cursor:pointer;font-weight:700}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{padding-bottom:20px;position:relative}.el-timeline-item__wrapper{padding-left:28px;position:relative;top:-3px}.el-timeline-item__tail{border-left:2px solid var(--el-timeline-node-color);height:100%;left:4px;position:absolute}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{align-items:center;background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);border-radius:50%;box-sizing:border-box;display:flex;justify-content:center;position:absolute}.el-timeline-item__node--normal{height:var(--el-timeline-node-size-normal);left:-1px;width:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{height:var(--el-timeline-node-size-large);left:-2px;width:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{align-items:center;display:flex;justify-content:center;position:absolute}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);font-size:var(--el-font-size-small);line-height:1}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light);font-size:var(--el-font-size-base);list-style:none;margin:0}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{align-items:center;display:flex}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{display:block;height:calc(50% - 10px)}.el-tooltip-v2__content{--el-tooltip-v2-padding:5px 10px;--el-tooltip-v2-border-radius:4px;--el-tooltip-v2-border-color:var(--el-border-color);background-color:var(--el-color-white);border:1px solid var(--el-border-color);border-radius:var(--el-tooltip-v2-border-radius);color:var(--el-color-black);padding:var(--el-tooltip-v2-padding)}.el-tooltip-v2__arrow{color:var(--el-color-white);height:var(--el-tooltip-v2-arrow-height);left:var(--el-tooltip-v2-arrow-x);pointer-events:none;position:absolute;top:var(--el-tooltip-v2-arrow-y);width:var(--el-tooltip-v2-arrow-width)}.el-tooltip-v2__arrow:before{border:var(--el-tooltip-v2-arrow-border-width) solid transparent;content:"";height:0;position:absolute;width:0}.el-tooltip-v2__arrow:after{border:var(--el-tooltip-v2-arrow-border-width) solid transparent;content:"";height:0;position:absolute;width:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow{bottom:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:before{border-bottom:0;border-top-color:var(--el-color-white);border-top-width:var(--el-tooltip-v2-arrow-border-width);top:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:after{border-bottom:0;border-top-color:var(--el-border-color);border-top-width:var(--el-tooltip-v2-arrow-border-width);top:100%;z-index:-1}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow{top:0}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:before{border-bottom-color:var(--el-color-white);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:after{border-bottom-color:var(--el-border-color);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:100%;z-index:-1}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow{right:0}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:before{border-left-color:var(--el-color-white);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:after{border-left-color:var(--el-border-color);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:100%;z-index:-1}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow{left:0}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:before{border-left:0;border-right-color:var(--el-color-white);border-right-width:var(--el-tooltip-v2-arrow-border-width);right:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:after{border-left:0;border-right-color:var(--el-border-color);border-right-width:var(--el-tooltip-v2-arrow-border-width);right:100%;z-index:-1}.el-tooltip-v2__content.is-dark{--el-tooltip-v2-border-color:transparent;color:var(--el-color-white)}.el-tooltip-v2__content.is-dark,.el-tooltip-v2__content.is-dark .el-tooltip-v2__arrow{background-color:var(--el-color-black);border-color:transparent}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px;font-size:var(--el-font-size-base)}.el-transfer__buttons{display:inline-block;padding:0 30px;vertical-align:middle}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{background:var(--el-bg-color-overlay);box-sizing:border-box;display:inline-block;max-height:100%;overflow:hidden;position:relative;text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width)}.el-transfer-panel__body{border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);height:var(--el-transfer-panel-body-height);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.el-transfer-panel__list{box-sizing:border-box;height:var(--el-transfer-panel-body-height);list-style:none;margin:0;overflow:auto;padding:6px 0}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{display:block!important;height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular)}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{box-sizing:border-box;display:block;line-height:var(--el-transfer-item-height);overflow:hidden;padding-left:22px;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{box-sizing:border-box;padding:15px;text-align:center}.el-transfer-panel__filter .el-input__inner{border-radius:calc(var(--el-transfer-filter-height)/2);box-sizing:border-box;display:inline-block;font-size:12px;height:var(--el-transfer-filter-height);width:100%}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{align-items:center;background:var(--el-transfer-panel-header-bg-color);border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black);display:flex;height:var(--el-transfer-panel-header-height);margin:0;padding-left:15px}.el-transfer-panel .el-transfer-panel__header .el-checkbox{align-items:center;display:flex;position:relative;width:100%}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{color:var(--el-text-color-primary);font-size:16px;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{color:var(--el-text-color-secondary);font-size:12px;font-weight:400;position:absolute;right:15px;top:50%;transform:translate3d(0,-50%,0)}.el-transfer-panel .el-transfer-panel__footer{background:var(--el-bg-color-overlay);border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);height:var(--el-transfer-panel-footer-height);margin:0;padding:0}.el-transfer-panel .el-transfer-panel__footer:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{color:var(--el-text-color-regular);padding-left:20px}.el-transfer-panel .el-transfer-panel__empty{color:var(--el-text-color-secondary);height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);margin:0;padding:6px 15px 0;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{border-radius:3px;height:14px;width:14px}.el-transfer-panel .el-checkbox__inner:after{height:6px;left:4px;width:3px}.el-tree{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder);background:var(--el-fill-color-blank);color:var(--el-tree-text-color);cursor:default;font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{height:100%;min-height:60px;position:relative;text-align:center;width:100%}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;left:0;position:absolute;right:0}.el-tree-node{outline:none;white-space:nowrap}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{--el-checkbox-height:var(--el-tree-node-content-height);align-items:center;cursor:pointer;display:flex;height:var(--el-tree-node-content-height)}.el-tree-node__content>.el-tree-node__expand-icon{box-sizing:content-box;padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{color:var(--el-tree-expand-icon-color);cursor:pointer;font-size:12px;transform:rotate(0);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{color:var(--el-tree-expand-icon-color);font-size:var(--el-font-size-base);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:transparent;overflow:hidden}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__item{background:transparent!important;flex:1;height:20px;line-height:20px;padding-left:0}.el-upload{--el-upload-dragger-padding-horizontal:40px;--el-upload-dragger-padding-vertical:10px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{--el-upload-picture-card-size:148px;align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-horizontal) var(--el-upload-dragger-padding-vertical);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-horizontal) - 1px) calc(var(--el-upload-dragger-padding-vertical) - 1px)}.el-upload-list{list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{--el-upload-list-picture-card-size:148px;display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:1rem}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;-o-object-fit:contain;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-vl__wrapper{position:relative}.el-vl__wrapper:hover .el-virtual-scrollbar,.el-vl__wrapper.always-on .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);border-radius:var(--el-popper-border-radius);font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;padding:5px 11px;position:absolute;visibility:visible;z-index:2000}.el-popper.is-dark{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary);color:var(--el-bg-color)}.el-popper.is-dark .el-popper__arrow:before{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary);right:0}.el-popper.is-light{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light .el-popper__arrow:before{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{height:10px;position:absolute;width:10px;z-index:-1}.el-popper__arrow:before{background:var(--el-text-color-primary);box-sizing:border-box;content:" ";height:10px;position:absolute;transform:rotate(45deg);width:10px;z-index:-1}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent!important;border-top-color:transparent!important}.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{color:var(--el-statistic-title-color);font-size:var(--el-statistic-title-font-size);font-weight:var(--el-statistic-title-font-weight);line-height:20px;margin-bottom:4px}.el-statistic__content{color:var(--el-statistic-content-color);font-size:var(--el-statistic-content-font-size);font-weight:var(--el-statistic-content-font-weight)}.el-statistic__value{display:inline-block}.el-statistic__prefix{display:inline-block;margin-right:4px}.el-statistic__suffix{display:inline-block;margin-left:4px}.el-tour{--el-tour-width:520px;--el-tour-padding-primary:12px;--el-tour-font-line-height:var(--el-font-line-height-primary);--el-tour-title-font-size:16px;--el-tour-title-text-color:var(--el-text-color-primary);--el-tour-title-font-weight:400;--el-tour-close-color:var(--el-color-info);--el-tour-font-size:14px;--el-tour-color:var(--el-text-color-primary);--el-tour-bg-color:var(--el-bg-color);--el-tour-border-radius:4px}.el-tour__hollow{transition:all var(--el-transition-duration) ease}.el-tour__content{border-radius:var(--el-tour-border-radius);box-shadow:var(--el-box-shadow-light);overflow-wrap:break-word;padding:var(--el-tour-padding-primary);width:var(--el-tour-width)}.el-tour__arrow,.el-tour__content{background:var(--el-tour-bg-color);box-sizing:border-box}.el-tour__arrow{height:10px;pointer-events:none;position:absolute;transform:rotate(45deg);width:10px}.el-tour__content[data-side^=top] .el-tour__arrow{border-left-color:transparent;border-top-color:transparent}.el-tour__content[data-side^=bottom] .el-tour__arrow{border-bottom-color:transparent;border-right-color:transparent}.el-tour__content[data-side^=left] .el-tour__arrow{border-bottom-color:transparent;border-left-color:transparent}.el-tour__content[data-side^=right] .el-tour__arrow{border-right-color:transparent;border-top-color:transparent}.el-tour__content[data-side^=top] .el-tour__arrow{bottom:-5px}.el-tour__content[data-side^=bottom] .el-tour__arrow{top:-5px}.el-tour__content[data-side^=left] .el-tour__arrow{right:-5px}.el-tour__content[data-side^=right] .el-tour__arrow{left:-5px}.el-tour__closebtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-tour__closebtn .el-tour__close{color:var(--el-tour-close-color);font-size:inherit}.el-tour__closebtn:focus .el-tour__close,.el-tour__closebtn:hover .el-tour__close{color:var(--el-color-primary)}.el-tour__header{padding-bottom:var(--el-tour-padding-primary)}.el-tour__header.show-close{padding-right:calc(var(--el-tour-padding-primary) + var(--el-message-close-size, 16px))}.el-tour__title{color:var(--el-tour-title-text-color);font-size:var(--el-tour-title-font-size);font-weight:var(--el-tour-title-font-weight);line-height:var(--el-tour-font-line-height)}.el-tour__body{color:var(--el-tour-text-color);font-size:var(--el-tour-font-size)}.el-tour__body img,.el-tour__body video{max-width:100%}.el-tour__footer{box-sizing:border-box;display:flex;justify-content:space-between;padding-top:var(--el-tour-padding-primary)}.el-tour__content .el-tour-indicators{display:inline-block;flex:1}.el-tour__content .el-tour-indicator{background:var(--el-color-info-light-9);border-radius:50%;display:inline-block;height:6px;margin-right:6px;width:6px}.el-tour__content .el-tour-indicator.is-active{background:var(--el-color-primary)}.el-tour.el-tour--primary{--el-tour-title-text-color:#fff;--el-tour-text-color:#fff;--el-tour-bg-color:var(--el-color-primary);--el-tour-close-color:#fff}.el-tour.el-tour--primary .el-tour__closebtn:focus .el-tour__close,.el-tour.el-tour--primary .el-tour__closebtn:hover .el-tour__close{color:var(--el-tour-title-text-color)}.el-tour.el-tour--primary .el-button--default{background:#fff;border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-tour.el-tour--primary .el-button--primary{border-color:#fff}.el-tour.el-tour--primary .el-tour-indicator{background:#ffffff26}.el-tour.el-tour--primary .el-tour-indicator.is-active{background:#fff}.el-tour-parent--hidden{overflow:hidden}.el-anchor{--el-anchor-bg-color:var(--el-bg-color);--el-anchor-padding-indent:14px;--el-anchor-line-height:22px;--el-anchor-font-size:12px;--el-anchor-color:var(--el-text-color-secondary);--el-anchor-active-color:var(--el-color-primary);--el-anchor-marker-bg-color:var(--el-color-primary);background-color:var(--el-anchor-bg-color);position:relative}.el-anchor__marker{background-color:var(--el-anchor-marker-bg-color);border-radius:4px;opacity:0;position:absolute;z-index:0}.el-anchor.el-anchor--vertical .el-anchor__marker{height:14px;left:0;top:8px;transition:top .25s ease-in-out,opacity .25s;width:4px}.el-anchor.el-anchor--vertical .el-anchor__list{padding-left:var(--el-anchor-padding-indent)}.el-anchor.el-anchor--vertical.el-anchor--underline:before{background-color:#0505050f;content:"";height:100%;left:0;position:absolute;width:2px}.el-anchor.el-anchor--vertical.el-anchor--underline .el-anchor__marker{border-radius:unset;width:2px}.el-anchor.el-anchor--horizontal .el-anchor__marker{bottom:0;height:2px;transition:left .25s ease-in-out,opacity .25s,width .25s;width:20px}.el-anchor.el-anchor--horizontal .el-anchor__list{display:flex;padding-bottom:4px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item{padding-left:16px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item:first-child{padding-left:0}.el-anchor.el-anchor--horizontal.el-anchor--underline:before{background-color:#0505050f;bottom:0;content:"";height:2px;position:absolute;width:100%}.el-anchor.el-anchor--horizontal.el-anchor--underline .el-anchor__marker{border-radius:unset;height:2px}.el-anchor__item{display:flex;flex-direction:column;overflow:hidden}.el-anchor__link{color:var(--el-anchor-color);cursor:pointer;font-size:var(--el-anchor-font-size);line-height:var(--el-anchor-line-height);max-width:100%;outline:none;overflow:hidden;padding:4px 0;text-decoration:none;text-overflow:ellipsis;transition:color var(--el-transition-duration);white-space:nowrap}.el-anchor__link:focus,.el-anchor__link:hover{color:var(--el-anchor-color)}.el-anchor__link.is-active{color:var(--el-anchor-active-color)}.el-anchor .el-anchor__list .el-anchor__item a{display:inline-block} diff --git a/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/favicon.ico b/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/favicon.ico new file mode 100644 index 00000000..df36fcfb Binary files /dev/null and b/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/favicon.ico differ diff --git a/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/index.html b/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/index.html new file mode 100644 index 00000000..87d7e600 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-client/src/main/resources/netty-client-local-ui/v1/index.html @@ -0,0 +1,14 @@ + + + + + + + Java 使用 Lazy ORM 网络穿透客户端! + + + + +
+ + diff --git a/wu-smart-agent-network-heartbeat-common/pom.xml b/wu-smart-agent-network-heartbeat-common/pom.xml new file mode 100644 index 00000000..6090cef3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + top.wu2020 + wu-smart-agent-network + 1.2.6-JDK17-SNAPSHOT + + + wu-smart-agent-network-heartbeat-common + + + 17 + 17 + UTF-8 + + + + io.netty + netty-all + + + top.wu2020 + wu-framework-web + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/ChannelContext.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/ChannelContext.java new file mode 100644 index 00000000..4f389ad3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/ChannelContext.java @@ -0,0 +1,199 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelId; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 通道上下文 + */ +@Slf4j +public class ChannelContext { + + private final static ConcurrentHashMap + channelIdClientChannelDTOConcurrentHashMap = new ConcurrentHashMap<>(); + + /** + * 新增通道 + * + * @param channel 通道 + * @param clientId 客户端ID + */ + public static void push(Channel channel, String clientId) { + + ChannelId channelId = channel.id(); + ClientChannelImpl clientChannelImpl = new ClientChannelImpl(); + clientChannelImpl.setChannelId(channelId); + clientChannelImpl.setChannel(channel); + clientChannelImpl.setClientId(clientId.getBytes(StandardCharsets.UTF_8)); + // 如果客户端已经存在 移除 + if (channelIdClientChannelDTOConcurrentHashMap.containsKey(clientId)) { +// clear(clientId); + } + channelIdClientChannelDTOConcurrentHashMap.put(clientId, clientChannelImpl); + + } + + /** + * 新增通道 + * + * @param channel 通道 + * @param clientId 客户端ID + */ + public static void push(Channel channel, byte[] clientId) { + + ChannelId channelId = channel.id(); + ClientChannelImpl clientChannelImpl = new ClientChannelImpl(); + clientChannelImpl.setChannelId(channelId); + clientChannelImpl.setChannel(channel); + clientChannelImpl.setClientId(clientId); + channelIdClientChannelDTOConcurrentHashMap.put(new String(clientId), clientChannelImpl); + + } + + /** + * 获取所有通道 + * + * @return 返回所有通道信息 + */ + public static List get() { + return new ArrayList<>(channelIdClientChannelDTOConcurrentHashMap.values()); + } + + + /** + * 根据通道ID获取通道信息 + * + * @param clientId 客户端ID + * @return 通道信息 + */ + public static ClientChannel get(byte[] clientId) { + if (channelIdClientChannelDTOConcurrentHashMap + .containsKey(new String(clientId))) { + return channelIdClientChannelDTOConcurrentHashMap + .get(new String(clientId)); + } else { + // 无法通过客户端ID[{}]获取通道信息 + log.error("Unable to obtain channel information through client ID [{}]",new String(clientId)); + return null; + } + } + + /** + * 根据通道ID获取通道信息 + * + * @param clientId 客户端ID + * @return 通道信息 + */ + public static ChannelContext.ClientChannel get(String clientId) { + return get(clientId.getBytes(StandardCharsets.UTF_8)); + } + + + /** + * 关闭通道 + * + * @param clientId 客户端ID + */ + public static void clear(String clientId) { + ClientChannel clientChannel = get(clientId); + if (clientChannel != null) { + remove(clientId); + Channel channel = clientChannel.getChannel(); + if (channel != null && channel.isActive()) { + channel.close(); + } + } else { + // log warm + // 无法通过客户ID:[{}]移除客户端 + log.warn("Unable to remove client through customer ID: [{}]", clientId); + } + } + + /** + * 通过客户端ID移除客户端通道 + * + * @param clientId 客户端ID + */ + public static void remove(byte[] clientId) { + ClientChannel clientChannel = get(clientId); + if (clientChannel != null) { + channelIdClientChannelDTOConcurrentHashMap.remove(new String(clientId)); + } else { + // log warm 无法通过客户ID:[{}]移除客户端 + log.warn("Unable to remove client through customer ID: [{}]", new String(clientId)); + } + } + + /** + * 通过客户端ID移除客户端通道 + * + * @param clientId 客户端ID + */ + public static void remove(String clientId) { + ClientChannel clientChannel = get(clientId); + if (clientChannel != null) { + channelIdClientChannelDTOConcurrentHashMap.remove(clientId); + } else { + // log warm 无法通过客户ID:[{}]移除客户端 + log.warn("Unable to remove client through customer ID: [{}]", clientId); + } + } + + + /** + * 客户端通道信息 + */ + public interface ClientChannel { + + /** + * 客户端ID + */ + byte[] getClientId(); + + /** + * 通道ID + */ + ChannelId getChannelId(); + + /** + * 通道 + */ + Channel getChannel(); + + } + +} + +/** + * 客户端通道信息 + */ +@Data +class ClientChannelImpl implements ChannelContext.ClientChannel { + /** + * 客户端ID + */ + private byte[] clientId; + /** + * 通道ID + */ + private ChannelId channelId; + /** + * 通道 + */ + private Channel channel; + + @Override + public String toString() { + return "ClientChannelImpl{" + + "clientId=" + new String(clientId) + + ", channelId=" + channelId.asLongText() + + '}'; + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/InternalNetworkPenetrationRealClient.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/InternalNetworkPenetrationRealClient.java new file mode 100644 index 00000000..cee31552 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/InternalNetworkPenetrationRealClient.java @@ -0,0 +1,43 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * describe 内网穿透映射 真实客户端 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ +@Builder +@Data +@Accessors(chain = true) +public class InternalNetworkPenetrationRealClient { + + + /** + * 客户端ID + */ + private String clientId; + + /** + * 客户端目标地址 + */ + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + private Integer clientTargetPort; + + + /** + * 访问端口 + */ + private Integer visitorPort; + /** + * 访客ID + */ + private String visitorId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/MessageType.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/MessageType.java new file mode 100644 index 00000000..8980f306 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/MessageType.java @@ -0,0 +1,182 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelHeartbeatTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.*; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.*; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * @see MessageTypeEnums + * 数据取值范围 -128~ 127 + * 当前约束范围 -100~100 + */ +public class MessageType { + /** + * 心跳 + * + * @see MessageTypeEnums#TYPE_HEARTBEAT + * @see AbstractHandleChannelHeartbeatTypeAdvanced + */ + public static final byte TYPE_HEARTBEAT = 0X00; + + /** + * 客户端上报连接成功 + * + * @see MessageTypeEnums#REPORT_CLIENT_CONNECT_SUCCESS + * @see AbstractHandleClientConnectSuccessTypeAdvanced + */ + public static final byte REPORT_CLIENT_CONNECT_SUCCESS = 0X01; + /** + * 上报 客户端断开连接 + * + * @see MessageTypeEnums#REPORT_CLIENT_DISCONNECTION + * @see AbstractHandleReportDisconnectTypeAdvanced + */ + public static final byte REPORT_CLIENT_DISCONNECTION = 0X02; + /** + * 客户端上报暂存开启 + * + * @see MessageTypeEnums#REPORT_CLIENT_STAGING_OPENED + * @see AbstractHandleReportStagingOpenedTypeAdvanced + */ + public static final byte REPORT_CLIENT_STAGING_OPENED = 0X03; + /** + * 客户端上报暂存关闭 + * + * @see MessageTypeEnums#REPORT_CLIENT_STAGING_CLOSED + * @see AbstractHandleReportStagingClosedTypeAdvanced + */ + public static final byte REPORT_CLIENT_STAGING_CLOSED = 0X04; + + /** + * 上报 客户端数据传输(内网穿透数据回传) + * + * @see MessageTypeEnums#REPORT_CLIENT_TRANSFER + * @see AbstractHandleReportHandleChannelTransferTypeAdvanced + */ + public static final byte REPORT_CLIENT_TRANSFER = 0X05; + + + /** + * 上报 客户端创建需要代理的真实端口成功 + * + * @see MessageTypeEnums#REPORT_SINGLE_CLIENT_REAL_CONNECT + * @see AbstractHandleReportSingleClientRealConnectTypeAdvanced + */ + public static final byte REPORT_SINGLE_CLIENT_REAL_CONNECT = 0X06; + /** + * 上报 客户端关闭一个访客通道 + * + * @see MessageTypeEnums#REPORT_SINGLE_CLIENT_CLOSE_VISITOR + * @see AbstractHandleReportSingleClientCloseVisitorTypeAdvanced + */ + public static final byte REPORT_SINGLE_CLIENT_CLOSE_VISITOR = 0X08; + + /** + * 上报 客户端消息到另一个客户端 + * + * @see MessageTypeEnums#REPORT_SINGLE_CLIENT_MESSAGE + * @see AbstractHandleReportSingleClientMessage2OtherClientTypeAdvanced + */ + public static final byte REPORT_SINGLE_CLIENT_MESSAGE = 0X09; + /** + * 服务端通道 is active + * + * @see MessageTypeEnums#SERVER_CHANNEL_ACTIVE + * @see AbstractHandleServerChannelActiveTypeAdvanced + */ + public static final byte SERVER_CHANNEL_ACTIVE = 0X10; + + /** + * 上报 集群注册 + * + * @see MessageTypeEnums#REPORT_CLUSTER_NODE_REGISTER_MESSAGE + * @see AbstractHandleReportClusterNodeRegisterTypeAdvanced + */ + public static final byte REPORT_CLUSTER_NODE_REGISTER_MESSAGE = 0X11; + + /** + * 下发 客户端接收连接成功通知 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_CONNECTION_SUCCESS_NOTIFICATION + * @see AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle + */ + public static final byte DISTRIBUTE_CLIENT_CONNECTION_SUCCESS_NOTIFICATION = -0X01; + /** + * 下发 客户端断开连接通知 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION + * @see AbstractHandleDistributeDisconnectTypeAdvancedHandle + */ + public static final byte DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION = -0X02; + /** + * 下发 客户端暂存开启通知 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_STAGING_OPENED_NOTIFICATION + * @see AbstractHandleDistributeStagingOpenedTypeAdvanced + */ + public static final byte DISTRIBUTE_CLIENT_STAGING_OPENED_NOTIFICATION = -0X03; + + /** + * 下发 客户端暂存关闭通知 + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_STAGING_CLOSED_NOTIFICATION + * @see AbstractHandleDistributeStagingClosedTypeAdvanced + */ + public static final byte DISTRIBUTE_CLIENT_STAGING_CLOSED_NOTIFICATION = -0X04; + /** + * 下发 客户端数据传输(内网穿透数据发送) + * + * @see MessageTypeEnums#DISTRIBUTE_CLIENT_TRANSFER + * @see AbstractHandleDistributeChannelTransferTypeAdvanced + */ + public static final byte DISTRIBUTE_CLIENT_TRANSFER = -0X05; + /** + * 下发 客户端创建需要代理的真实端口 + * + * @see MessageTypeEnums#DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT + * @see AbstractHandleDistributeSingleClientRealConnectTypeAdvanced + */ + public static final byte DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT = -0X06; + + /** + * 下发 客户端代理的真实端口自动读写 + * + * @see MessageTypeEnums#DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ + * @see AbstractHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced + */ + public static final byte DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ = -0X07; + + /** + * 下发 客户端关闭代理服务通道 + * + * @see MessageTypeEnums#DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR + * @see AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced + */ + public static final byte DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR = -0X08; + + /** + * 下发 客户端消息 + * + * @see MessageTypeEnums#DISTRIBUTE_SINGLE_CLIENT_MESSAGE + * @see AbstractHandleDistributeSingleClientMessageTypeAdvanced + */ + public static final byte DISTRIBUTE_SINGLE_CLIENT_MESSAGE = -0X09; + + + /** + * 客户端通道 is active + * + * @see MessageTypeEnums#CLIENT_CHANNEL_ACTIVE + * @see AbstractHandleClientChannelActiveAdvanced + */ + public static final byte CLIENT_CHANNEL_ACTIVE = -0X10; + + /** + * 下发 集群注册 + * + * @see MessageTypeEnums#DISTRIBUTE_CLUSTER_NODE_REGISTER_MESSAGE + * @see AbstractHandleDistributeClusterNodeRegisterTypeAdvanced + */ + public static final byte DISTRIBUTE_CLUSTER_NODE_REGISTER_MESSAGE = -0X11; +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyClientChannel.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyClientChannel.java new file mode 100644 index 00000000..49aa6082 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyClientChannel.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import io.netty.channel.Channel; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 客户端连接服务端 通道 + */ +@AllArgsConstructor +@Data +public class NettyClientChannel { + + /** + * 客户端ID + */ + private String clientId; + /** + * 客户端通道 + */ + private Channel channel; + /** + * 服务端ID + */ + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyClientVisitorContext.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyClientVisitorContext.java new file mode 100644 index 00000000..ba0503f5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyClientVisitorContext.java @@ -0,0 +1,73 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import org.wu.framework.core.utils.ObjectUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 访客端口对应访客上下文 + */ +public class NettyClientVisitorContext { + + protected static final ConcurrentHashMap/*NettyVisitorSocket*/> VISITOR_SOCKET = new ConcurrentHashMap<>(); + + + /** + * 添加访客 + * + * @param clientId 客户端ID + * @param visitorSocket 客户端访客socket + */ + public static void pushVisitorSocket(String clientId, T visitorSocket) { + List visitors = getVisitorSockets(clientId); + visitors.add(visitorSocket); + VISITOR_SOCKET.put(clientId, visitors); + } + + /** + * 通过客户端ID获取客户端使用的访客socket + * + * @param 访客范型 + * @param clientId 客户端ID + * @return 访客 + */ + public static List getVisitorSockets(String clientId) { + return (List) VISITOR_SOCKET.getOrDefault(clientId, new ArrayList<>()); + } + + + /** + * 移除 客户端 访客信息 + * + * @param clientId 客户端ID + */ + public static void removeVisitorSockets(String clientId) { + VISITOR_SOCKET.remove(clientId); + } + + /** + * 移除 客户端 访客信息 + * + * @param clientId 客户端ID + * @param visitorSocket 访客socket + */ + public static void removeVisitorSocket(String clientId, T visitorSocket) { + List visitorSocketList = VISITOR_SOCKET.get(clientId); + if(!ObjectUtils.isEmpty(visitorSocketList)){ + visitorSocketList.remove(visitorSocket); + VISITOR_SOCKET.put(clientId,visitorSocketList); + } + } + + /** + * 关闭客户端访客socket + * + * @param clientId 客户端ID + */ + public static void close(String clientId) { +// getVisitorSockets(clientId) + } + +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyCommunicationIdContext.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyCommunicationIdContext.java new file mode 100644 index 00000000..65e57392 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyCommunicationIdContext.java @@ -0,0 +1,71 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import io.netty.channel.Channel; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 通信通道对应上下文 + */ +public class NettyCommunicationIdContext { + + protected static final ConcurrentHashMap COMMUNICATION = new ConcurrentHashMap<>(); + + + /** + * 添加访客 + * + * @param visitorId 访客id + * @param visitor 访客 + */ + public static void pushVisitor(T visitor, String visitorId) { + COMMUNICATION.put(visitorId, visitor); + + } + + /** + * 通过访客端口获取访客 + * + * @param visitorId 访客id + * @param 访客范型 + * @return 访客 + */ + public static T getVisitor(String visitorId) { + return (T) COMMUNICATION.get(visitorId); + } + + /** + * 通过访客端口获取访客 + * + * @param visitorId 访客id + * @param 访客范型 + * @return 访客 + */ + public static T getVisitor(byte[] visitorId) { + return getVisitor(new String(visitorId)); + + } + + /** + * 移除访客 + * + * @param visitorId 访客ID + */ + public static void clear(String visitorId) { + Channel visitor = getVisitor(visitorId); + if (visitor != null) { + COMMUNICATION.remove(visitorId); + visitor.close(); + } + + } + + /** + * 移除访客 + * + * @param visitorId 访客ID + */ + public static void clear(byte[] visitorId) { + clear(new String(visitorId)); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyMsg.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyMsg.java new file mode 100644 index 00000000..8f4aabf5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyMsg.java @@ -0,0 +1,39 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import lombok.Getter; +import lombok.Setter; + +import java.util.Arrays; + +@Setter +@Getter +public class NettyMsg { + // body 长度 type 1 clientId 4 data 4 + public static final int bodyLength = 9; + + /** + * 数据类型 + * + * @see MessageType + * byte长度 1 + */ + private byte type; + /** + * 客户端ID + * byte[] 长度 4 + */ + private byte[] clientId; + + /** + * 消息传输数据 + * byte[] 长度 4 + */ + private byte[] data; + + + @Override + public String toString() { + return "NettyProxyMsg [type=" + type + ", data=" + Arrays.toString(data) + ",clientId=" + Arrays.toString(clientId) + "]"; + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyProxyMsg.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyProxyMsg.java new file mode 100644 index 00000000..cff03607 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyProxyMsg.java @@ -0,0 +1,113 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.nio.charset.StandardCharsets; + +/** + * netty 代理请求数据 + */ +@NoArgsConstructor +@Setter +@Getter +public class NettyProxyMsg { + // body 长度 type 1 clientId 4 clientTargetIp 4 clientTargetPort 4 visitorPort 4 visitorId 4 data 4 + public static final int bodyLength = 1 + 4 + 4 + 4 + 4 + 4 + 4; + + + /** + * 数据类型 + * + * @see MessageType + * byte长度 1 + */ + private byte type; + + /** + * 客户端ID + * byte[] 长度 4 + */ + private byte[] clientId; + /** + * 客户端目标地址 + * byte[] 长度 4 + */ + private byte[] clientTargetIp; + + /** + * 客户端目标端口 + * byte[] 长度 4 + */ + private byte[] clientTargetPort; + /** + * 客户端目使用的代理端口 + * byte[] 长度 4 + */ + private byte[] visitorPort; + /** + * 访客ID + * byte[] 长度 4 + */ + private byte[] visitorId; + /** + * 消息传输数据 + * byte[] 长度 4 + */ + private byte[] data; + + + @Override + public String toString() { + return "NettyProxyMsg [type=" + type + + ",clientId=" + (clientId == null ? null : new String(clientId)) + + ",clientTargetIp=" + (clientTargetIp == null ? null : new String(clientTargetIp)) + + ",clientTargetPort=" + (clientTargetPort == null ? null : new String(clientTargetPort)) + + ",visitorPort=" + (visitorPort == null ? null : new String(visitorPort)) + + "]"; + } + + public void setClientId(byte[] clientId) { + this.clientId = clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId.getBytes(StandardCharsets.UTF_8); + } + + + public void setClientTargetIp(byte[] clientTargetIp) { + this.clientTargetIp = clientTargetIp; + } + + public void setClientTargetIp(String clientTargetIp) { + this.clientTargetIp = clientTargetIp.getBytes(StandardCharsets.UTF_8); + } + + public void setClientTargetPort(Integer clientTargetPort) { + this.clientTargetPort = String.valueOf(clientTargetPort).getBytes(StandardCharsets.UTF_8); + } + + public void setClientTargetPort(byte[] clientTargetPort) { + this.clientTargetPort = clientTargetPort; + } + + public void setVisitorPort(byte[] visitorPort) { + this.visitorPort = visitorPort; + } + + public void setVisitorPort(Integer visitorPort) { + this.visitorPort = String.valueOf(visitorPort).getBytes(StandardCharsets.UTF_8); + } + + public void setVisitorId(String visitorId) { + this.visitorId = visitorId.getBytes(StandardCharsets.UTF_8); + } + + public void setVisitorId(byte[] visitorId) { + this.visitorId = visitorId; + } + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyRealIdContext.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyRealIdContext.java new file mode 100644 index 00000000..0c78d238 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyRealIdContext.java @@ -0,0 +1,71 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import io.netty.channel.Channel; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 真实通道对应上下文 客户端、服务端真实代理通道 + */ +public class NettyRealIdContext { + + protected static final ConcurrentHashMap REAL = new ConcurrentHashMap<>(); + + + /** + * 添加真实通道 + * + * @param visitorId 访客id + * @param visitor 访客真实通道 + */ + public static void pushReal(T visitor, String visitorId) { + REAL.put(visitorId, visitor); + + } + + /** + * 通过访客端口获取访客 + * + * @param visitorId 访客id + * @param 访客范型 + * @return 访客 + */ + public static T getReal(String visitorId) { + return (T) REAL.get(visitorId); + } + + /** + * 通过访客端口获取访客 + * + * @param visitorId 访客id + * @param 访客范型 + * @return 访客 + */ + public static T getReal(byte[] visitorId) { + return getReal(new String(visitorId)); + + } + + /** + * 移除访客 + * + * @param visitorId 访客ID + */ + public static void clear(String visitorId) { + Channel visitor = getReal(visitorId); + if (visitor != null) { + REAL.remove(visitorId); + visitor.close(); + } + + } + + /** + * 移除访客 + * + * @param visitorId 访客ID + */ + public static void clear(byte[] visitorId) { + clear(new String(visitorId)); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyServerContext.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyServerContext.java new file mode 100644 index 00000000..16189a8f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyServerContext.java @@ -0,0 +1,109 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import io.netty.channel.Channel; +import org.wu.framework.core.utils.ObjectUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * 服务端存储 channel 上下文 + */ +public class NettyServerContext { + + + protected static final ConcurrentHashMap/*NettyClientChannel*/> + NETTY_CLIENT_CHANNEL_SOCKET = new ConcurrentHashMap<>(); + + + /** + * 添加访客 + * + * @param serverId 服务端ID + * @param clientId 客户端ID + * @param channel channel + */ + public static void pushServerEndpointChannel(String serverId, String clientId, Channel channel) { + List nettyClientChannelList = getServerEndpointChannels(serverId); + // 关闭旧的通道 + nettyClientChannelList.stream().filter(nettyClientChannel -> nettyClientChannel.getClientId().equals(clientId) && nettyClientChannel.getServerId().equals(serverId)).forEach(nettyClientChannel -> { + Channel oldChannel = nettyClientChannel.getChannel(); + if (oldChannel != null && oldChannel.isActive()) { + oldChannel.close(); + } + }); + + List activeNettyClientChannelList = nettyClientChannelList + .stream() + .filter(nettyClientChannel -> + !nettyClientChannel.getClientId().equals(clientId) && !nettyClientChannel.getServerId().equals(serverId)) + .collect(Collectors.toList()); + NettyClientChannel nettyClientChannel = new NettyClientChannel(clientId, channel, serverId); + activeNettyClientChannelList.add(nettyClientChannel); + NETTY_CLIENT_CHANNEL_SOCKET.put(serverId, activeNettyClientChannelList); + } + + /** + * 通过客户端ID获取客户端使用的访客socket + * + * @param serverId 服务端ID + * @return 客户端通道 + */ + public static List getServerEndpointChannels(String serverId) { + return NETTY_CLIENT_CHANNEL_SOCKET.getOrDefault(serverId, new ArrayList<>()); + } + /** + * 通过客户端ID获取客户端使用的访客socket + * @return 客户端通道 + */ + public static List getServerEndpointChannels() { + return NETTY_CLIENT_CHANNEL_SOCKET + .values() + .stream() + .collect(Collectors.flatMapping(Collection::stream,Collectors.toList())); + } + + + + /** + * 移除 客户端通道 + * + * @param serverId 服务端ID + */ + public static void removeServerEndpointChannels(String serverId) { + for (NettyClientChannel nettyClientChannel : getServerEndpointChannels(serverId)) { + if (nettyClientChannel.getChannel() != null && nettyClientChannel.getChannel().isActive()) { + nettyClientChannel.getChannel().close(); + } + } + NETTY_CLIENT_CHANNEL_SOCKET.remove(serverId); + } + + /** + * 移除 客户端通道 + * + * @param serverId 服务端ID + * @param clientId 客户端ID + */ + public static void removeServerEndpointChannels(String serverId, String clientId) { + List nettyClientChannelList = NETTY_CLIENT_CHANNEL_SOCKET.get(serverId); + if (!ObjectUtils.isEmpty(nettyClientChannelList)) { + // 关闭指定服务端对应客户端通道 + nettyClientChannelList.stream().filter(nettyClientChannel -> nettyClientChannel.getClientId().equals(clientId)) + .forEach(nettyClientChannel -> { + if (nettyClientChannel.getChannel() != null && nettyClientChannel.getChannel().isActive()) { + nettyClientChannel.getChannel().close(); + } + }); + // 过滤后数据 + List clientChannelList = nettyClientChannelList.stream().filter(nettyClientChannel -> !nettyClientChannel.getClientId().equals(clientId)) + .collect(Collectors.toList()); + NETTY_CLIENT_CHANNEL_SOCKET.put(serverId, clientChannelList); + } + } + + +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyVisitorIdContext.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyVisitorIdContext.java new file mode 100644 index 00000000..7739902a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyVisitorIdContext.java @@ -0,0 +1,72 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import io.netty.channel.Channel; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 访客通信通道上下文(服务端、客户端 通信) + */ +@Deprecated +public class NettyVisitorIdContext { + + protected static final ConcurrentHashMap VISITOR_ID = new ConcurrentHashMap<>(); + + + /** + * 添加访客 + * + * @param visitorId 访客id + * @param visitor 访客 + */ + public static void pushVisitor(T visitor, String visitorId) { + VISITOR_ID.put(visitorId, visitor); + + } + + /** + * 通过访客端口获取访客 + * + * @param visitorId 访客id + * @param 访客范型 + * @return 访客 + */ + public static T getVisitor(String visitorId) { + return (T) VISITOR_ID.get(visitorId); + } + + /** + * 通过访客端口获取访客 + * + * @param visitorId 访客id + * @param 访客范型 + * @return 访客 + */ + public static T getVisitor(byte[] visitorId) { + return getVisitor(new String(visitorId)); + + } + + /** + * 移除访客 + * + * @param visitorId 访客ID + */ + public static void clear(String visitorId) { + Channel visitor = getVisitor(visitorId); + if (visitor != null) { + VISITOR_ID.remove(visitorId); + visitor.close(); + } + + } + + /** + * 移除访客 + * + * @param visitorId 访客ID + */ + public static void clear(byte[] visitorId) { + clear(new String(visitorId)); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyVisitorPortContext.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyVisitorPortContext.java new file mode 100644 index 00000000..3117b704 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/NettyVisitorPortContext.java @@ -0,0 +1,49 @@ +package org.framework.smart.agent.network.heartbeat.common; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 访客端口对应上下文 + */ +public class NettyVisitorPortContext { + + protected static final ConcurrentHashMap VISITOR_PORT = new ConcurrentHashMap<>(); + + + /** + * 添加访客 + * + * @param visitorPort 访客端口 + * @param visitor 访客 + */ + public static void pushVisitor(Integer visitorPort, T visitor) { + VISITOR_PORT.put(visitorPort, visitor); + + } + + /** + * 通过访客端口获取访客 + * + * @param visitorPort 访客端口 + * @param 访客范型 + * @return 访客 + */ + public static T getVisitor(Integer visitorPort) { + return (T) VISITOR_PORT.get(visitorPort); + } + + /** + * 删除访客 + * @param visitorPort 访客通道 + * @return 删除的访客通道 + * @param 访客通道范型 + */ + public static T removeVisitor(Integer visitorPort){ + T visitor = getVisitor(visitorPort); + if(visitor!=null){ + VISITOR_PORT.remove(visitorPort); + } + return visitor; + } + +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/adapter/ChannelFlowAdapter.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/adapter/ChannelFlowAdapter.java new file mode 100644 index 00000000..816471bc --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/adapter/ChannelFlowAdapter.java @@ -0,0 +1,41 @@ +package org.framework.smart.agent.network.heartbeat.common.adapter; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.advanced.flow.ChannelFlow; +import org.framework.smart.agent.network.heartbeat.common.advanced.flow.HandleChannelFlowAdvanced; + +import java.util.List; + +/** + * 通道流量适配器 + * + * @see HandleChannelFlowAdvanced + */ +@Slf4j +public class ChannelFlowAdapter { + + protected final List handleChannelFlowAdvancedList; + + public ChannelFlowAdapter(List handleChannelFlowAdvancedList) { + this.handleChannelFlowAdvancedList = handleChannelFlowAdvancedList; + } + + /** + * 处理当前数据 + * + * @param channelFlow 通道数据 + */ + public void handler(Channel channel, ChannelFlow channelFlow) { + for (HandleChannelFlowAdvanced handleChannelTypeAdvanced : handleChannelFlowAdvancedList) { + if (handleChannelTypeAdvanced.support(channelFlow)) { + try { + handleChannelTypeAdvanced.handler(channel, channelFlow); + } catch (Exception e) { + log.error("流量统计失败:{}", e.getMessage()); + } + return; + } + } + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/adapter/ChannelTypeAdapter.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/adapter/ChannelTypeAdapter.java new file mode 100644 index 00000000..6098d292 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/adapter/ChannelTypeAdapter.java @@ -0,0 +1,46 @@ +package org.framework.smart.agent.network.heartbeat.common.adapter; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.Ordered; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; + +import java.util.Comparator; +import java.util.List; + +/** + * 通道类型适配器 + */ +@Slf4j +public class ChannelTypeAdapter { + protected final List handleChannelTypeAdvancedList; + + public ChannelTypeAdapter(List handleChannelTypeAdvancedList) { + this.handleChannelTypeAdvancedList = handleChannelTypeAdvancedList; + } + + /** + * 处理当前数据 + * + * @param msg 通道数据 + */ + public void handler(Channel channel, Object msg) { + // 升序 处理器 + List handleChannelTypeAdvancedSortedList = + handleChannelTypeAdvancedList. + stream(). + sorted(Comparator.comparing(Ordered::getOrder)). + toList(); + + + for (HandleChannelTypeAdvanced handleChannelTypeAdvanced : handleChannelTypeAdvancedSortedList) { + if (handleChannelTypeAdvanced.support(msg)) { +// log.info("处理器:{},客户端:{}, 处理类型:{}",handleChannelTypeAdvanced.getClass(),new String(msg.getClientId()),msg.getMysqlType()); + handleChannelTypeAdvanced.handler(channel, msg); + return; + } + } + } + + +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/AbstractHandleChannelHeartbeatTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/AbstractHandleChannelHeartbeatTypeAdvanced.java new file mode 100644 index 00000000..c13463fe --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/AbstractHandleChannelHeartbeatTypeAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 服务端 处理客户端心跳 + * TYPE_HEARTBEAT + */ + +public abstract class AbstractHandleChannelHeartbeatTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.TYPE_HEARTBEAT.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/AbstractHandleChannelTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/AbstractHandleChannelTypeAdvanced.java new file mode 100644 index 00000000..4f348d39 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/AbstractHandleChannelTypeAdvanced.java @@ -0,0 +1,93 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced; + + +import io.netty.channel.Channel; +import org.springframework.core.Ordered; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Objects; + +public abstract class AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + protected abstract void doHandler(Channel channel, MSG msg); + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + public void handler(Channel channel, Object msg) { + doHandler(channel, (MSG) msg); + } + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + protected abstract boolean doSupport(MSG msg); + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean support(Object msg) { + if (msg == null) return false; + if (!msg.getClass().isAssignableFrom(Objects.requireNonNull(getMsgTypes()))) { + return false; + } + return doSupport((MSG) msg); + } + + /** + * 获取当前处理范型 + * + * @return 范型 + */ + private Class getMsgTypes() { + + Type superClassType = this.getClass().getGenericSuperclass(); + if (superClassType instanceof ParameterizedType parameterizedType) { + + Type[] actualTypes = parameterizedType.getActualTypeArguments(); +// for (Type type : actualTypes) { +// System.out.println("范型类型:" + ((Class) type).getName()); +// } + return (Class) actualTypes[0]; + } else { +// System.out.println("未能获取到范型类型"); + return null; + } + } + + /** + * Get the order value of this object. + *

Higher values are interpreted as lower priority. As a consequence, + * the object with the lowest value has the highest priority (somewhat + * analogous to Servlet {@code load-on-startup} values). + *

Same order values will result in arbitrary sort positions for the + * affected objects. + * + * @return the order value + * @see #HIGHEST_PRECEDENCE + * @see #LOWEST_PRECEDENCE + * 越小越靠前 + */ + @Override + public int getOrder() { + return Ordered.LOWEST_PRECEDENCE; + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/HandleChannelTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/HandleChannelTypeAdvanced.java new file mode 100644 index 00000000..ab2f94bc --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/HandleChannelTypeAdvanced.java @@ -0,0 +1,35 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced; + + +import io.netty.channel.Channel; +import org.springframework.core.Ordered; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 通道不同数据类型处理器 + * + * @see MessageType + * @see MessageTypeEnums + */ +public interface HandleChannelTypeAdvanced extends Ordered { + + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + void handler(Channel channel, Object msg); + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + boolean support(Object msg); + + +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleClientChannelActiveAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleClientChannelActiveAdvanced.java new file mode 100644 index 00000000..8075f7cd --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleClientChannelActiveAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 客户端通道 is active + */ + +public abstract class AbstractHandleClientChannelActiveAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.CLIENT_CHANNEL_ACTIVE.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeChannelTransferTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeChannelTransferTypeAdvanced.java new file mode 100644 index 00000000..be42575b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeChannelTransferTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 客户端处理服务端下发数据 + * DISTRIBUTE_CLIENT_TRANSFER + */ +public abstract class AbstractHandleDistributeChannelTransferTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_CLIENT_TRANSFER.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeClusterNodeRegisterTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeClusterNodeRegisterTypeAdvanced.java new file mode 100644 index 00000000..0b8e0fa6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeClusterNodeRegisterTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 下发 集群注册 + * @see MessageTypeEnums#DISTRIBUTE_CLUSTER_NODE_REGISTER_MESSAGE + */ +public abstract class AbstractHandleDistributeClusterNodeRegisterTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_CLUSTER_NODE_REGISTER_MESSAGE.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle.java new file mode 100644 index 00000000..ac9a1273 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle.java @@ -0,0 +1,23 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 下发 客户端连接成功通知 + */ +public abstract class AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_CLIENT_CONNECTION_SUCCESS_NOTIFICATION.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeDisconnectTypeAdvancedHandle.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeDisconnectTypeAdvancedHandle.java new file mode 100644 index 00000000..bfcadbed --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeDisconnectTypeAdvancedHandle.java @@ -0,0 +1,26 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 下发客户端断开连接通知 + * DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION + */ +public abstract class AbstractHandleDistributeDisconnectTypeAdvancedHandle extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + // 下发 客户端断开连接通知 + return MessageTypeEnums.DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientMessageTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientMessageTypeAdvanced.java new file mode 100644 index 00000000..19f7035a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientMessageTypeAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 下发 客户端关闭代理服务通道 + */ + +public abstract class AbstractHandleDistributeSingleClientMessageTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_SINGLE_CLIENT_MESSAGE.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced.java new file mode 100644 index 00000000..fb6c4d60 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 下发 客户端代理的真实端口自动读写 + * + * @see MessageTypeEnums#DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ + */ + +public abstract class AbstractHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced.java new file mode 100644 index 00000000..d51c43ea --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 下发 客户端关闭代理服务通道 + */ + +public abstract class AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealConnectTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealConnectTypeAdvanced.java new file mode 100644 index 00000000..9ce89150 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeSingleClientRealConnectTypeAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 下发 客户端 创建真实连接 + */ + +public abstract class AbstractHandleDistributeSingleClientRealConnectTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeStagingClosedTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeStagingClosedTypeAdvanced.java new file mode 100644 index 00000000..b7c3f075 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeStagingClosedTypeAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 下发 客户端暂存关闭 + */ + +public abstract class AbstractHandleDistributeStagingClosedTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_CLIENT_STAGING_CLOSED_NOTIFICATION.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeStagingOpenedTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeStagingOpenedTypeAdvanced.java new file mode 100644 index 00000000..1be0451b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/client/AbstractHandleDistributeStagingOpenedTypeAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.client; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 下发 客户端暂存开启 + */ + +public abstract class AbstractHandleDistributeStagingOpenedTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.DISTRIBUTE_CLIENT_STAGING_OPENED_NOTIFICATION.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/AbstractHandleChannelFlowAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/AbstractHandleChannelFlowAdvanced.java new file mode 100644 index 00000000..f2c2dc0e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/AbstractHandleChannelFlowAdvanced.java @@ -0,0 +1,49 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.flow; + +import io.netty.channel.Channel; + +/** + * 处理通道流量适配者 抽象类 + * + * @see HandleChannelFlowAdvanced + */ +public abstract class AbstractHandleChannelFlowAdvanced implements HandleChannelFlowAdvanced { + + /** + * 是否支持当前这种类型 + * + * @param channelFlow 数据 + * @return boolean + */ + @Override + public boolean support(ChannelFlow channelFlow) { + return doSupport(channelFlow); + } + + /** + * 处理是否支持这种类型 + * + * @param channelFlow 数据 + * @return boolean + */ + protected abstract boolean doSupport(ChannelFlow channelFlow); + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param channelFlow 通道数据 + */ + @Override + public void handler(Channel channel, ChannelFlow channelFlow) { + doHandler(channel, channelFlow); + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param channelFlow 通道数据 + */ + protected abstract void doHandler(Channel channel, ChannelFlow channelFlow); +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/ChannelFlow.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/ChannelFlow.java new file mode 100644 index 00000000..416acb9b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/ChannelFlow.java @@ -0,0 +1,37 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.flow; + +import org.framework.smart.agent.network.heartbeat.common.enums.ChannelFlowEnum; + +public interface ChannelFlow { + + /** + * 通道客户端ID + * + * @return 通道客户端ID + */ + String clientId(); + + /** + * 通道使用的端口(服务端访客端口、客户端真实端口) + * + * @return 端口 + */ + Integer port(); + + /** + * 通道流量类型 + * + * @return ChannelFlowEnum + * @see ChannelFlowEnum + */ + ChannelFlowEnum channelFlowEnum(); + + /** + * 流量 + * + * @return 流量 + */ + Integer flow(); +} + + diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/HandleChannelFlowAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/HandleChannelFlowAdvanced.java new file mode 100644 index 00000000..20cd153c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/flow/HandleChannelFlowAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.flow; + +import io.netty.channel.Channel; + +/** + * 处理通道流量适配者 + */ +public interface HandleChannelFlowAdvanced { + + /** + * 是否支持当前这种类型 + * + * @param channelFlow 数据 + * @return boolean + */ + boolean support(ChannelFlow channelFlow); + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param channelFlow 通道数据 + */ + void handler(Channel channel, ChannelFlow channelFlow); +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleClientConnectSuccessTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleClientConnectSuccessTypeAdvanced.java new file mode 100644 index 00000000..900d7d60 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleClientConnectSuccessTypeAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 服务端处理客户端连接成功 + */ +public abstract class AbstractHandleClientConnectSuccessTypeAdvanced extends AbstractHandleChannelTypeAdvanced + implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_CLIENT_CONNECT_SUCCESS.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportClusterNodeRegisterTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportClusterNodeRegisterTypeAdvanced.java new file mode 100644 index 00000000..6c2926ff --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportClusterNodeRegisterTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 上报 集群注册 + * REPORT_CLUSTER_NODE_REGISTER_MESSAGE + */ +public abstract class AbstractHandleReportClusterNodeRegisterTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_CLUSTER_NODE_REGISTER_MESSAGE.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportDisconnectTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportDisconnectTypeAdvanced.java new file mode 100644 index 00000000..8247a7f0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportDisconnectTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 客户端上报断开连接通知 + * DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION + */ + +public abstract class AbstractHandleReportDisconnectTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + // 下发 客户端断开连接通知 + return MessageTypeEnums.REPORT_CLIENT_DISCONNECTION.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportHandleChannelTransferTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportHandleChannelTransferTypeAdvanced.java new file mode 100644 index 00000000..4b266532 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportHandleChannelTransferTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 服务端处理客户端上报数据 + * REPORT_CLIENT_STAGING_CLOSED + */ +public abstract class AbstractHandleReportHandleChannelTransferTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_CLIENT_TRANSFER.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientCloseVisitorTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientCloseVisitorTypeAdvanced.java new file mode 100644 index 00000000..55f3b2d3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientCloseVisitorTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 服务端处理客户端 关闭一个访客 + * REPORT_SINGLE_CLIENT_CLOSE_VISITOR + */ +public abstract class AbstractHandleReportSingleClientCloseVisitorTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_SINGLE_CLIENT_CLOSE_VISITOR.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientMessage2OtherClientTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientMessage2OtherClientTypeAdvanced.java new file mode 100644 index 00000000..9fe78eb3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientMessage2OtherClientTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 服务端处理客户端 关闭一个访客 + * REPORT_SINGLE_CLIENT_CLOSE_VISITOR + */ +public abstract class AbstractHandleReportSingleClientMessage2OtherClientTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_SINGLE_CLIENT_MESSAGE.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientRealConnectTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientRealConnectTypeAdvanced.java new file mode 100644 index 00000000..d66bdb63 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportSingleClientRealConnectTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 服务端处理客户端绑定真实服务成功 + * REPORT_SINGLE_CLIENT_REAL_CONNECT + */ +public abstract class AbstractHandleReportSingleClientRealConnectTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_SINGLE_CLIENT_REAL_CONNECT.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportStagingClosedTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportStagingClosedTypeAdvanced.java new file mode 100644 index 00000000..32bf26f0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportStagingClosedTypeAdvanced.java @@ -0,0 +1,29 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 客户端暂存通知 + * 客户端离线后陷入暂存服务业务上使用 + * 云端发送的消息,此模式云端后者说服务端不需要处理 + * CLIENT_STAGING + * 客户端上报暂存 + */ + +public abstract class AbstractHandleReportStagingClosedTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_CLIENT_STAGING_CLOSED.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportStagingOpenedTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportStagingOpenedTypeAdvanced.java new file mode 100644 index 00000000..708d2096 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleReportStagingOpenedTypeAdvanced.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + +/** + * 上报客户端暂存开启 + */ + +public abstract class AbstractHandleReportStagingOpenedTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.REPORT_CLIENT_STAGING_OPENED.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleServerChannelActiveTypeAdvanced.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleServerChannelActiveTypeAdvanced.java new file mode 100644 index 00000000..d621983b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/advanced/server/AbstractHandleServerChannelActiveTypeAdvanced.java @@ -0,0 +1,27 @@ +package org.framework.smart.agent.network.heartbeat.common.advanced.server; + + +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.MessageTypeEnums; + + +/** + * 服务端通道 is active + * SERVER_CHANNEL_ACTIVE + */ +public abstract class AbstractHandleServerChannelActiveTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param msg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + public boolean doSupport(NettyProxyMsg msg) { + return MessageTypeEnums.SERVER_CHANNEL_ACTIVE.getTypeByte() == msg.getType(); + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/ClientConfigKeyUtils.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/ClientConfigKeyUtils.java new file mode 100644 index 00000000..02af3cb2 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/ClientConfigKeyUtils.java @@ -0,0 +1,46 @@ +package org.framework.smart.agent.network.heartbeat.common.constant; + +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +/** + * 客户端配置 key 常量 + */ +public class ClientConfigKeyUtils { + + // + /** + * 客户端状态对应的key + * + * @see NettyClientStatus#ON_LINE + * @see NettyClientStatus#OFF_LINE + */ + public static final String CLIENT_STATUS_KEY = "middleground:cloud:netty:client:status"; + + + /** + * 客户端ID存放的key + */ + public static final String CLIENT_ID_KEY = "middleground:cloud:netty:client:id"; + + + /** + * 获取客户端对应的状态key + * + * @param clientId 客户端ID + * @return 客户端对应的状态key + */ + public static String getClientStatusKey(String clientId) { + return CLIENT_STATUS_KEY + ":" + clientId; + } + + + /** + * 获取 客户端ID对应的key + * + * @param clientId 客户端ID + * @return 客户端ID对应的key + */ + public static String getClientIdKey(String clientId) { + return CLIENT_ID_KEY + ":" + clientId; + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/NettyChannelAttributeKey.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/NettyChannelAttributeKey.java new file mode 100644 index 00000000..4645b12e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/NettyChannelAttributeKey.java @@ -0,0 +1,10 @@ +package org.framework.smart.agent.network.heartbeat.common.constant; + +import io.netty.util.AttributeKey; + +/** + * netty 通道属性 key常量 + */ +public class NettyChannelAttributeKey { + public static final AttributeKey CLIENT_ID_KEY = AttributeKey.newInstance("client_id"); +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/ProxyConfigConstant.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/ProxyConfigConstant.java new file mode 100644 index 00000000..d8c40cbc --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/ProxyConfigConstant.java @@ -0,0 +1,5 @@ +package org.framework.smart.agent.network.heartbeat.common.constant; + +public class ProxyConfigConstant { + public static final String PREFIX = "spring.lazy.proxy"; +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/RedisChannelConstant.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/RedisChannelConstant.java new file mode 100644 index 00000000..dd9b4fad --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/constant/RedisChannelConstant.java @@ -0,0 +1,14 @@ +package org.framework.smart.agent.network.heartbeat.common.constant; + +/** + * redis 通道 + */ +public class RedisChannelConstant { + // 客户端离线或者在线通知通道 + public static final String REDIS_CLIENT_ONLINE_OR_OFFLINE_CHANNEL = "REDIS_CLIENT_ONLINE_OR_OFFLINE_CHANNEL"; + + /** + * 客户端监听 客户端暂存开启、关闭通道 + */ + public static final String REDIS_CLIENT_STAGING_OPENED_OR_CLOSED_CHANNEL = "REDIS_CLIENT_STAGING_OPENED_OR_CLOSED_CHANNEL"; +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/decoder/NettyMsgDecoder.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/decoder/NettyMsgDecoder.java new file mode 100644 index 00000000..36741dfe --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/decoder/NettyMsgDecoder.java @@ -0,0 +1,54 @@ +package org.framework.smart.agent.network.heartbeat.common.decoder; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.LengthFieldBasedFrameDecoder; +import org.framework.smart.agent.network.heartbeat.common.NettyMsg; + +/** + * @see NettyMsg + * NettyMsg 对象解码 + */ +@Deprecated +public class NettyMsgDecoder extends LengthFieldBasedFrameDecoder { + + public NettyMsgDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, + int initialBytesToStrip) { + super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip); + } + + public NettyMsgDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, + int initialBytesToStrip, boolean failFast) { + super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, failFast); + } + + @Override + protected NettyMsg decode(ChannelHandlerContext ctx, ByteBuf in2) throws Exception { + ByteBuf in = (ByteBuf) super.decode(ctx, in2); + if (in == null) { + return null; + } + + if (in.readableBytes() < 4) { + return null; + } + + NettyMsg nettyMsg = new NettyMsg(); + int bodyLength = in.readInt(); + byte type = in.readByte(); + nettyMsg.setType(type); + + int clientIdLength = in.readInt(); + byte[] clientId = new byte[clientIdLength]; + in.readBytes(clientId); + nettyMsg.setClientId(clientId); + + + byte[] data = new byte[bodyLength - NettyMsg.bodyLength - clientIdLength]; + in.readBytes(data); + nettyMsg.setData(data); + in.release(); + + return nettyMsg; + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/decoder/NettyProxyMsgDecoder.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/decoder/NettyProxyMsgDecoder.java new file mode 100644 index 00000000..5b94e9ea --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/decoder/NettyProxyMsgDecoder.java @@ -0,0 +1,152 @@ +package org.framework.smart.agent.network.heartbeat.common.decoder; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.handler.codec.LengthFieldBasedFrameDecoder; +import io.netty.handler.codec.TooLongFrameException; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; + +import java.nio.ByteOrder; + +/** + * @see NettyProxyMsg + * NettyProxyMsg 解码 + */ +public class NettyProxyMsgDecoder extends LengthFieldBasedFrameDecoder { + /** + * Creates a new instance. + * + * @param maxFrameLength the maximum length of the frame. If the length of the frame is + * greater than this value, {@link TooLongFrameException} will be + * thrown. + * @param lengthFieldOffset the offset of the length field + * @param lengthFieldLength the length of the length field + */ + public NettyProxyMsgDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength) { + super(maxFrameLength, lengthFieldOffset, lengthFieldLength); + } + + /** + * Creates a new instance. + * + * @param maxFrameLength the maximum length of the frame. If the length of the frame is + * greater than this value, {@link TooLongFrameException} will be + * thrown. + * @param lengthFieldOffset the offset of the length field + * @param lengthFieldLength the length of the length field + * @param lengthAdjustment the compensation value to add to the value of the length field + * @param initialBytesToStrip the number of first bytes to strip out from the decoded frame + */ + public NettyProxyMsgDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip) { + super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip); + } + + /** + * Creates a new instance. + * + * @param maxFrameLength the maximum length of the frame. If the length of the frame is + * greater than this value, {@link TooLongFrameException} will be + * thrown. + * @param lengthFieldOffset the offset of the length field + * @param lengthFieldLength the length of the length field + * @param lengthAdjustment the compensation value to add to the value of the length field + * @param initialBytesToStrip the number of first bytes to strip out from the decoded frame + * @param failFast If true, a {@link TooLongFrameException} is thrown as + * soon as the decoder notices the length of the frame will exceed + * maxFrameLength regardless of whether the entire frame + * has been read. If false, a {@link TooLongFrameException} + * is thrown after the entire frame that exceeds maxFrameLength + * has been read. + */ + public NettyProxyMsgDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip, boolean failFast) { + super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, failFast); + } + + /** + * Creates a new instance. + * + * @param byteOrder the {@link ByteOrder} of the length field + * @param maxFrameLength the maximum length of the frame. If the length of the frame is + * greater than this value, {@link TooLongFrameException} will be + * thrown. + * @param lengthFieldOffset the offset of the length field + * @param lengthFieldLength the length of the length field + * @param lengthAdjustment the compensation value to add to the value of the length field + * @param initialBytesToStrip the number of first bytes to strip out from the decoded frame + * @param failFast If true, a {@link TooLongFrameException} is thrown as + * soon as the decoder notices the length of the frame will exceed + * maxFrameLength regardless of whether the entire frame + * has been read. If false, a {@link TooLongFrameException} + * is thrown after the entire frame that exceeds maxFrameLength + * has been read. + */ + public NettyProxyMsgDecoder(ByteOrder byteOrder, int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip, boolean failFast) { + super(byteOrder, maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, failFast); + } + + /** + * Create a frame out of the {@link ByteBuf} and return it. + * + * @param ctx the {@link ChannelHandlerContext} which this {@link ByteToMessageDecoder} belongs to + * @param in2 the {@link ByteBuf} from which to read data + * @return frame the {@link ByteBuf} which represent the frame or {@code null} if no frame could + * be created. + */ + @Override + protected NettyProxyMsg decode(ChannelHandlerContext ctx, ByteBuf in2) throws Exception { + // 解码顺序 body 长度 type 1 clientId 4 clientTargetIp 4 clientTargetPort 4 visitorPort 4 visitorId 4 data 4 + ByteBuf in = (ByteBuf) super.decode(ctx, in2); + if (in == null) { + return null; + } + + if (in.readableBytes() < 4) { + return null; + } + + NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); + int bodyLength = in.readInt(); + byte type = in.readByte(); + nettyProxyMsg.setType(type); + + int clientIdLength = in.readInt(); + byte[] clientIdBytes = new byte[clientIdLength]; + in.readBytes(clientIdBytes); + nettyProxyMsg.setClientId(clientIdBytes); + + int clientTargetIpLength = in.readInt(); + byte[] clientTargetIpBytes = new byte[clientTargetIpLength]; + in.readBytes(clientTargetIpBytes); + nettyProxyMsg.setClientTargetIp(clientTargetIpBytes); + + + int clientTargetPortLength = in.readInt(); + byte[] clientTargetPortBytes = new byte[clientTargetPortLength]; + in.readBytes(clientTargetPortBytes); + nettyProxyMsg.setClientTargetPort(clientTargetPortBytes); + + int visitorPortLength = in.readInt(); + byte[] visitorPortBytes = new byte[visitorPortLength]; + in.readBytes(visitorPortBytes); + nettyProxyMsg.setVisitorPort(visitorPortBytes); + + + int visitorIdLength = in.readInt(); + byte[] visitorIdBytes = new byte[visitorIdLength]; + in.readBytes(visitorIdBytes); + nettyProxyMsg.setVisitorId(visitorIdBytes); + + byte[] data = new byte[bodyLength - NettyProxyMsg.bodyLength - + clientIdLength - + clientTargetIpLength - + clientTargetPortLength - + visitorPortLength - + visitorIdLength]; + in.readBytes(data); + nettyProxyMsg.setData(data); + in.release(); + + return nettyProxyMsg; + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/encoder/NettMsgEncoder.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/encoder/NettMsgEncoder.java new file mode 100644 index 00000000..cefa30f0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/encoder/NettMsgEncoder.java @@ -0,0 +1,49 @@ +package org.framework.smart.agent.network.heartbeat.common.encoder; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import org.framework.smart.agent.network.heartbeat.common.NettyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; + +/** + * @see NettyProxyMsg + * NettyProxyMsg 对象编码 + */ +@Deprecated +public class NettMsgEncoder extends MessageToByteEncoder { + + public NettMsgEncoder() { + + } + + @Override + protected void encode(ChannelHandlerContext ctx, NettyMsg nettyMsg, ByteBuf out) throws Exception { + // type 1 data 4 clientId 4 + int bodyLength = NettyMsg.bodyLength; + byte[] clientIdBytes = nettyMsg.getClientId(); + + if (nettyMsg.getData() != null) { + bodyLength += nettyMsg.getData().length; + } + if (nettyMsg.getClientId() != null) { + bodyLength += nettyMsg.getClientId().length; + } + + out.writeInt(bodyLength); + + out.writeByte(nettyMsg.getType()); + // 客户端ID + // 防止数据读错位置 + if (clientIdBytes != null) { + out.writeInt(clientIdBytes.length); + out.writeBytes(clientIdBytes); + } else { + // 防止客户端ID未填写 + out.writeInt(0x00); + } + if (nettyMsg.getData() != null) { + out.writeBytes(nettyMsg.getData()); + } + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/encoder/NettyProxyMsgEncoder.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/encoder/NettyProxyMsgEncoder.java new file mode 100644 index 00000000..be301ffd --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/encoder/NettyProxyMsgEncoder.java @@ -0,0 +1,106 @@ +package org.framework.smart.agent.network.heartbeat.common.encoder; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; + +/** + * @see NettyProxyMsg + * NettyProxyMsg 编码 + */ +public class NettyProxyMsgEncoder extends MessageToByteEncoder { + /** + * Encode a message into a {@link ByteBuf}. This method will be called for each written message that can be handled + * by this encoder. + * + * @param ctx the {@link ChannelHandlerContext} which this {@link MessageToByteEncoder} belongs to + * @param msg the message to encode + * @param out the {@link ByteBuf} into which the encoded message will be written + */ + @Override + protected void encode(ChannelHandlerContext ctx, NettyProxyMsg msg, ByteBuf out) { + // body 长度 type 1 clientId 4 clientTargetIp 4 clientTargetPort 4 visitorPort 4 visitorId 4 data 4 + int bodyLength = NettyProxyMsg.bodyLength; + byte typeBytes = msg.getType(); + byte[] clientIdBytes = msg.getClientId(); + byte[] clientTargetIpBytes = msg.getClientTargetIp(); + byte[] clientTargetPortBytes = msg.getClientTargetPort(); + byte[] visitorPortBytes = msg.getVisitorPort(); + byte[] visitorIdBytes = msg.getVisitorId(); + byte[] msgDataBytes = msg.getData(); + + + if (clientIdBytes != null) { + bodyLength += clientIdBytes.length; + } + if (clientTargetIpBytes != null) { + bodyLength += clientTargetIpBytes.length; + } + if (clientTargetPortBytes != null) { + bodyLength += clientTargetPortBytes.length; + } + if (visitorPortBytes != null) { + bodyLength += visitorPortBytes.length; + } + if (visitorIdBytes != null) { + bodyLength += visitorIdBytes.length; + } + + if (msgDataBytes != null) { + bodyLength += msgDataBytes.length; + } + + out.writeInt(bodyLength); + + out.writeByte(typeBytes); + + // 防止数据读错位置 clientId + if (clientIdBytes != null) { + out.writeInt(clientIdBytes.length); + out.writeBytes(clientIdBytes); + } else { + // 防止客户端id 未填写 + out.writeInt(0x00); + } + + + // 防止数据读错位置 clientTargetIp + if (clientTargetIpBytes != null) { + out.writeInt(clientTargetIpBytes.length); + out.writeBytes(clientTargetIpBytes); + } else { + // 防止客户端 目标IP未填写 + out.writeInt(0x00); + } + + // clientTargetPort + if (clientTargetPortBytes != null) { + out.writeInt(clientTargetPortBytes.length); + out.writeBytes(clientTargetPortBytes); + } else { + // 防止客户端目标端口未填写 + out.writeInt(0x00); + } + + // visitorPort + if (visitorPortBytes != null) { + out.writeInt(visitorPortBytes.length); + out.writeBytes(visitorPortBytes); + } else { + // 防止客户端 访客端口未填写 + out.writeInt(0x00); + } + + if (visitorIdBytes != null) { + out.writeInt(visitorIdBytes.length); + out.writeBytes(visitorIdBytes); + } else { + // 防止客户端 访客ID未填写 + out.writeInt(0x00); + } + if (msgDataBytes != null) { + out.writeBytes(msgDataBytes); + } + } +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/ChannelFlowEnum.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/ChannelFlowEnum.java new file mode 100644 index 00000000..120c2817 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/ChannelFlowEnum.java @@ -0,0 +1,17 @@ +package org.framework.smart.agent.network.heartbeat.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 通道流量类型 + */ +@Getter +@AllArgsConstructor +public enum ChannelFlowEnum { + + // 出口流量 + OUT_FLOW, + // 进口流量 + IN_FLOW +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/MessageTypeEnums.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/MessageTypeEnums.java new file mode 100644 index 00000000..8e81f5ab --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/MessageTypeEnums.java @@ -0,0 +1,113 @@ +package org.framework.smart.agent.network.heartbeat.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelHeartbeatTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.client.*; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.*; + +/** + * @see MessageType + */ +@Getter +@AllArgsConstructor +public enum MessageTypeEnums { + /** + * @see AbstractHandleChannelHeartbeatTypeAdvanced + */ + TYPE_HEARTBEAT(MessageType.TYPE_HEARTBEAT, "心跳"), + /** + * @see AbstractHandleClientConnectSuccessTypeAdvanced + */ + REPORT_CLIENT_CONNECT_SUCCESS(MessageType.REPORT_CLIENT_CONNECT_SUCCESS, "上报 客户端连接成功"), + /** + * @see AbstractHandleReportDisconnectTypeAdvanced + */ + REPORT_CLIENT_DISCONNECTION(MessageType.REPORT_CLIENT_DISCONNECTION, "上报 客户端断开连接"), + /** + * @see AbstractHandleReportStagingOpenedTypeAdvanced + */ + REPORT_CLIENT_STAGING_OPENED(MessageType.REPORT_CLIENT_STAGING_OPENED, "上报 客户端暂存开启"), + /** + * @see AbstractHandleReportStagingClosedTypeAdvanced + */ + REPORT_CLIENT_STAGING_CLOSED(MessageType.REPORT_CLIENT_STAGING_CLOSED, "上报 客户端暂存关闭"), + /** + * @see AbstractHandleReportHandleChannelTransferTypeAdvanced + */ + + REPORT_CLIENT_TRANSFER(MessageType.REPORT_CLIENT_TRANSFER, "上报 客户端数据传输(内网穿透数据回传)"), + /** + * @see AbstractHandleReportSingleClientRealConnectTypeAdvanced + */ + REPORT_SINGLE_CLIENT_REAL_CONNECT(MessageType.REPORT_SINGLE_CLIENT_REAL_CONNECT, "上报 客户端创建需要代理的真实端口成功"), + /** + * @see AbstractHandleReportSingleClientCloseVisitorTypeAdvanced + */ + REPORT_SINGLE_CLIENT_CLOSE_VISITOR(MessageType.REPORT_SINGLE_CLIENT_CLOSE_VISITOR, "上报 客户端关闭一个访客通道"), + /** + * @see AbstractHandleReportSingleClientMessage2OtherClientTypeAdvanced + */ + REPORT_SINGLE_CLIENT_MESSAGE(MessageType.REPORT_SINGLE_CLIENT_MESSAGE, "上报 客户端消息到另一个客户端"), + /** + * @see AbstractHandleServerChannelActiveTypeAdvanced + */ + SERVER_CHANNEL_ACTIVE(MessageType.SERVER_CHANNEL_ACTIVE, "服务端通道 is active"), + /** + * @see AbstractHandleReportClusterNodeRegisterTypeAdvanced + */ + REPORT_CLUSTER_NODE_REGISTER_MESSAGE(MessageType.REPORT_CLUSTER_NODE_REGISTER_MESSAGE, "上报 集群注册"), + /** + * @see AbstractHandleDistributeConnectSuccessNotificationTypeAdvancedHandle + */ + + DISTRIBUTE_CLIENT_CONNECTION_SUCCESS_NOTIFICATION(MessageType.DISTRIBUTE_CLIENT_CONNECTION_SUCCESS_NOTIFICATION, "下发 客户端接收连接成功通知"), + + + /** + * @see AbstractHandleDistributeDisconnectTypeAdvancedHandle + */ + DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION(MessageType.DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION, "下发 客户端断开连接通知"), + /** + * @see AbstractHandleDistributeStagingOpenedTypeAdvanced + */ + DISTRIBUTE_CLIENT_STAGING_OPENED_NOTIFICATION(MessageType.DISTRIBUTE_CLIENT_STAGING_OPENED_NOTIFICATION, "下发 客户端暂存开启通知"), + /** + * @see AbstractHandleDistributeStagingClosedTypeAdvanced + */ + DISTRIBUTE_CLIENT_STAGING_CLOSED_NOTIFICATION(MessageType.DISTRIBUTE_CLIENT_STAGING_CLOSED_NOTIFICATION, "下发 客户端暂存关闭通知"), + /** + * @see AbstractHandleDistributeChannelTransferTypeAdvanced + */ + DISTRIBUTE_CLIENT_TRANSFER(MessageType.DISTRIBUTE_CLIENT_TRANSFER, "下发 客户端数据传输(内网穿透数据发送)"), + /** + * @see AbstractHandleDistributeSingleClientRealConnectTypeAdvanced + */ + DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT, "下发 客户端创建需要代理的真实端口"), + /** + * @see AbstractHandleDistributeSingleClientRealAutoReadConnectTypeAdvanced + */ + DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ, "下发 客户端代理的真实端口自动读写"), + /** + * @see AbstractHandleDistributeSingleClientRealCloseVisitorTypeAdvanced + */ + DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR, "下发 客户端关闭代理服务通道"), + /** + * @see AbstractHandleDistributeSingleClientMessageTypeAdvanced + */ + DISTRIBUTE_SINGLE_CLIENT_MESSAGE(MessageType.DISTRIBUTE_SINGLE_CLIENT_MESSAGE, "下发 客户端消息"), + /** + * @see AbstractHandleClientChannelActiveAdvanced + */ + CLIENT_CHANNEL_ACTIVE(MessageType.CLIENT_CHANNEL_ACTIVE, "客户端通道 is active"), + /** + * @see AbstractHandleDistributeClusterNodeRegisterTypeAdvanced + */ + DISTRIBUTE_CLUSTER_NODE_REGISTER_MESSAGE(MessageType.DISTRIBUTE_CLUSTER_NODE_REGISTER_MESSAGE, "下发 集群注册"), + + ; + + private final byte typeByte; + private final String desc; +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/NetWorkMode.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/NetWorkMode.java new file mode 100644 index 00000000..a6a5fb0d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/NetWorkMode.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 内网穿透模式 + */ +@Getter +@AllArgsConstructor +public enum NetWorkMode { + // 集群 + CLUSTER, + // 单机 + STANDALONE +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/NettyClientStatus.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/NettyClientStatus.java new file mode 100644 index 00000000..e9be7e3d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/enums/NettyClientStatus.java @@ -0,0 +1,18 @@ +package org.framework.smart.agent.network.heartbeat.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * netty客户端 状态 + */ +@AllArgsConstructor +@Getter +public enum NettyClientStatus { + + ON_LINE("在线"), + RUNNING("运行中"), + OFF_LINE("离线"); + + private final String desc; +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/state/ClientOnLineState.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/state/ClientOnLineState.java new file mode 100644 index 00000000..7d2f5618 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/state/ClientOnLineState.java @@ -0,0 +1,18 @@ +package org.framework.smart.agent.network.heartbeat.common.state; + +import lombok.Data; + +/** + * 客户端在线状态 + */ +@Data +public class ClientOnLineState { + /** + * 客户端ID + */ + private String clientId; + /** + * 在线状态 + */ + private String onLineState; +} diff --git a/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/utils/ChannelAttributeKeyUtils.java b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/utils/ChannelAttributeKeyUtils.java new file mode 100644 index 00000000..abe04790 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-common/src/main/java/org/framework/smart/agent/network/heartbeat/common/utils/ChannelAttributeKeyUtils.java @@ -0,0 +1,134 @@ +package org.framework.smart.agent.network.heartbeat.common.utils; + +import io.netty.channel.Channel; +import io.netty.util.AttributeKey; + +/** + * 通道属性绑定工具 + */ +public class ChannelAttributeKeyUtils { + + private static final AttributeKey VISITOR_ID = AttributeKey.newInstance("visitorId"); + private static final AttributeKey VISITOR_PORT = AttributeKey.newInstance("visitorPort"); + private static final AttributeKey CLIENT_ID = AttributeKey.newInstance("clientId"); + private static final AttributeKey OUT_FLOW = AttributeKey.newInstance("outFlow"); + private static final AttributeKey IN_FLOW = AttributeKey.newInstance("inFlow"); + + + /** + * 为通道绑定 访客属性 + * + * @param channel 通道 + * @param visitorId 访客ID + */ + public static void buildVisitorId(Channel channel, byte[] visitorId) { + channel.attr(VISITOR_ID).set(new String(visitorId)); + } + + /** + * 为通道绑定 访客属性 + * + * @param channel 通道 + * @param visitorId 访客ID + */ + public static void buildVisitorId(Channel channel, String visitorId) { + channel.attr(VISITOR_ID).set(visitorId); + } + + /** + * 获取 通道中访客ID + * + * @param channel 通道 + */ + public static String getVisitorId(Channel channel) { + return channel.attr(VISITOR_ID).get(); + } + + + /** + * 为通道绑定 访客属性 + * + * @param channel 通道 + * @param clientId 客户端ID + */ + public static void buildClientId(Channel channel, byte[] clientId) { + channel.attr(CLIENT_ID).set(new String(clientId)); + } + + /** + * 为通道绑定 访客属性 + * + * @param channel 通道 + * @param clientId 客户端ID + */ + public static void buildClientId(Channel channel, String clientId) { + channel.attr(CLIENT_ID).set(clientId); + } + + /** + * 获取 通道中访客ID + * + * @param channel 通道 + */ + public static String getClientId(Channel channel) { + return channel.attr(CLIENT_ID).get(); + } + + + /** + * 为通道绑定 出口流量 + * + * @param channel 通道 + * @param outFlow 出口流量 + */ + public static void buildOutFlow(Channel channel, Integer outFlow) { + channel.attr(OUT_FLOW).set(outFlow); + } + + /** + * 获取 通道中出口流量 + * + * @param channel 通道 + */ + public static Integer getOutFlow(Channel channel) { + return channel.attr(OUT_FLOW).get(); + } + + /** + * 为通道绑定 进口流量 + * + * @param channel 通道 + * @param inFlow 进口流量 + */ + public static void buildInFlow(Channel channel, Integer inFlow) { + channel.attr(IN_FLOW).set(inFlow); + } + + /** + * 获取 通道中进口流量 + * + * @param channel 通道 + */ + public static Integer getInFlow(Channel channel) { + return channel.attr(IN_FLOW).get(); + } + + /** + * 为通道绑定 通道中访客端口 + * + * @param channel 通道 + * @param visitorPort 进口流量 + */ + public static void buildVisitorPort(Channel channel, Integer visitorPort) { + channel.attr(VISITOR_PORT).set(visitorPort); + } + + /** + * 获取 通道中访客端口 + * + * @param channel 通道 + */ + public static Integer getVisitorPort(Channel channel) { + return channel.attr(VISITOR_PORT).get(); + } +} diff --git a/wu-smart-agent-network-heartbeat-server-cluster/README.md b/wu-smart-agent-network-heartbeat-server-cluster/README.md new file mode 100644 index 00000000..e69de29b diff --git a/wu-smart-agent-network-heartbeat-server-cluster/pom.xml b/wu-smart-agent-network-heartbeat-server-cluster/pom.xml new file mode 100644 index 00000000..baf2a240 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server-cluster/pom.xml @@ -0,0 +1,35 @@ + + + + top.wu2020 + wu-smart-agent-network + 1.2.6-JDK17-SNAPSHOT + + 4.0.0 + + wu-smart-agent-network-heartbeat-server-cluster + 云上心跳服务端集群 + + + 17 + 17 + + + + + + top.wu2020 + wu-smart-agent-network-heartbeat-server + + + + top.wu2020 + wu-smart-agent-network-heartbeat-client + + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/pom.xml b/wu-smart-agent-network-heartbeat-server/pom.xml new file mode 100644 index 00000000..4bc5ecc7 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/pom.xml @@ -0,0 +1,84 @@ + + + + top.wu2020 + wu-smart-agent-network + 1.2.6-JDK17-SNAPSHOT + + + 4.0.0 + + wu-smart-agent-network-heartbeat-server + 云上心跳服务端 + + + 17 + 17 + + + + + top.wu2020 + wu-framework-web + + + + top.wu2020 + wu-smart-agent-network-heartbeat-common + + + + mysql + mysql-connector-java + 8.0.33 + + + + top.wu2020 + wu-database-lazy-plus-starter + + + + top.wu2020 + wu-authorization-server-platform-starter + + + + top.wu2020 + wu-jvm-server-platform-starter + + + com.alibaba + fastjson + 2.0.50 + + + io.swagger.core.v3 + swagger-annotations-jakarta + 2.2.21 + + + top.wu2020 + wu-framework-lazy-orm-spring-starter + + + top.wu2020 + wu-log-server-platform-starter + + + + top.wu2020 + wu-smart-agent-network-heartbeat-client + + + + + maven_central + Maven Central + https://repo.maven.apache.org/maven2/ + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/EnableHeartbeatServerAutoConfiguration.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/EnableHeartbeatServerAutoConfiguration.java new file mode 100644 index 00000000..264fc3cd --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/EnableHeartbeatServerAutoConfiguration.java @@ -0,0 +1,12 @@ +package org.framework.smart.agent.network.heartbeat.server; + +import org.wu.framework.lazy.orm.core.stereotype.LazyScan; +import org.springframework.context.annotation.ComponentScan; + +@LazyScan(scanBasePackages = { + "org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity", + "org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.entity" +}) +@ComponentScan(basePackages = "org.framework.smart.agent.network.heartbeat.server") +public class EnableHeartbeatServerAutoConfiguration { +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/EnableHeartbeatServerClusterAutoConfiguration.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/EnableHeartbeatServerClusterAutoConfiguration.java new file mode 100644 index 00000000..330d7bc8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/EnableHeartbeatServerClusterAutoConfiguration.java @@ -0,0 +1,8 @@ +package org.framework.smart.agent.network.heartbeat.server; + +import org.springframework.context.annotation.ComponentScan; + + +@ComponentScan(basePackages = {"org.framework.smart.agent.network.heartbeat.server.cluster"}) +public class EnableHeartbeatServerClusterAutoConfiguration { +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/LazyNettyClusterNodeApplication.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/LazyNettyClusterNodeApplication.java new file mode 100644 index 00000000..b3882d40 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/LazyNettyClusterNodeApplication.java @@ -0,0 +1,128 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application; + +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNode; +import org.wu.framework.web.response.Result; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeRemoveCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeStoryCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeUpdateCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryListCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryOneCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.dto.LazyNettyClusterNodeDTO; + +import java.util.List; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; + +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication + **/ + +public interface LazyNettyClusterNodeApplication { + + + /** + * describe 新增集群配置信息 + * + * @param lazyNettyClusterNodeStoryCommand 新增集群配置信息 + * @return {@link Result< LazyNettyClusterNode >} 集群配置信息新增后领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result story(LazyNettyClusterNodeStoryCommand lazyNettyClusterNodeStoryCommand); + + /** + * describe 批量新增集群配置信息 + * + * @param lazyNettyClusterNodeStoryCommandList 批量新增集群配置信息 + * @return {@link Result>} 集群配置信息新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result> batchStory(List lazyNettyClusterNodeStoryCommandList); + + /** + * describe 更新集群配置信息 + * + * @param lazyNettyClusterNodeUpdateCommand 更新集群配置信息 + * @return {@link Result} 集群配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result updateOne(LazyNettyClusterNodeUpdateCommand lazyNettyClusterNodeUpdateCommand); + + /** + * describe 查询单个集群配置信息 + * + * @param lazyNettyClusterNodeQueryOneCommand 查询单个集群配置信息 + * @return {@link Result} 集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result findOne(LazyNettyClusterNodeQueryOneCommand lazyNettyClusterNodeQueryOneCommand); + + /** + * describe 查询多个集群配置信息 + * + * @param lazyNettyClusterNodeQueryListCommand 查询多个集群配置信息 + * @return {@link Result >} 集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result> findList(LazyNettyClusterNodeQueryListCommand lazyNettyClusterNodeQueryListCommand); + + /** + * describe 分页查询多个集群配置信息 + * + * @param lazyNettyClusterNodeQueryListCommand 分页查询多个集群配置信息 + * @return {@link Result >} 分页集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result> findPage(int size, int current, LazyNettyClusterNodeQueryListCommand lazyNettyClusterNodeQueryListCommand); + + /** + * describe 删除集群配置信息 + * + * @param lazyNettyClusterNodeRemoveCommand 删除集群配置信息 + * @return {@link Result} 集群配置信息 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result remove(LazyNettyClusterNodeRemoveCommand lazyNettyClusterNodeRemoveCommand); + + /** + * 启动 集群节点 + * + * @param lazyNettyClusterNode 配置 + */ + void starterOneClusterNode(LazyNettyClusterNode lazyNettyClusterNode); + + /** + * 启动集群所有节点 + */ + void starterClusterNodes(); + + /** + * 关闭 集群节点 + * + * @param needCloseLazyNettyClusterNode 配置 + */ + void destroyOneClusterNode(LazyNettyClusterNode needCloseLazyNettyClusterNode); + + /** + * 关闭 集群上所有节点 + */ + void destroyClusterNodes(); + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/assembler/LazyNettyClusterNodeDTOAssembler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/assembler/LazyNettyClusterNodeDTOAssembler.java new file mode 100644 index 00000000..16f50aed --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/assembler/LazyNettyClusterNodeDTOAssembler.java @@ -0,0 +1,93 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application.assembler; + +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNode; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeRemoveCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeStoryCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeUpdateCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryListCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryOneCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.dto.LazyNettyClusterNodeDTO; +import org.mapstruct.factory.Mappers; +import org.mapstruct.Mapper; +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler + **/ +@Mapper +public interface LazyNettyClusterNodeDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + + + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNodeDTOAssembler INSTANCE = Mappers.getMapper(LazyNettyClusterNodeDTOAssembler.class); + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param lazyNettyClusterNodeStoryCommand 保存集群配置信息对象 + * @return {@link LazyNettyClusterNode} 集群配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNode toLazyNettyClusterNode(LazyNettyClusterNodeStoryCommand lazyNettyClusterNodeStoryCommand); + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param lazyNettyClusterNodeUpdateCommand 更新集群配置信息对象 + * @return {@link LazyNettyClusterNode} 集群配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNode toLazyNettyClusterNode(LazyNettyClusterNodeUpdateCommand lazyNettyClusterNodeUpdateCommand); + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyClusterNodeQueryOneCommand 查询单个集群配置信息对象参数 + * @return {@link LazyNettyClusterNode} 集群配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNode toLazyNettyClusterNode(LazyNettyClusterNodeQueryOneCommand lazyNettyClusterNodeQueryOneCommand); + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyClusterNodeQueryListCommand 查询集合集群配置信息对象参数 + * @return {@link LazyNettyClusterNode} 集群配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNode toLazyNettyClusterNode(LazyNettyClusterNodeQueryListCommand lazyNettyClusterNodeQueryListCommand); + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param lazyNettyClusterNodeRemoveCommand 删除集群配置信息对象参数 + * @return {@link LazyNettyClusterNode} 集群配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNode toLazyNettyClusterNode(LazyNettyClusterNodeRemoveCommand lazyNettyClusterNodeRemoveCommand); + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyNettyClusterNode 集群配置信息领域对象 + * @return {@link LazyNettyClusterNodeDTO} 集群配置信息DTO对象 + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNodeDTO fromLazyNettyClusterNode(LazyNettyClusterNode lazyNettyClusterNode); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeQueryListCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeQueryListCommand.java new file mode 100644 index 00000000..0a6d6938 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeQueryListCommand.java @@ -0,0 +1,78 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.lang.String; +import java.lang.Integer; +import java.time.LocalDateTime; +import java.lang.Boolean; +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_cluster_node_query_List_command",description = "集群配置信息") +public class LazyNettyClusterNodeQueryListCommand { + + + /** + * + * 集群节点host + */ + @Schema(description ="集群节点host",name ="clusterNodeHost",example = "") + private String clusterNodeHost; + + /** + * + * 集群节点ID + */ + @Schema(description ="集群节点ID",name ="clusterNodeId",example = "") + private String clusterNodeId; + + /** + * + * 集群节点端口 + */ + @Schema(description ="集群节点端口",name ="clusterNodePort",example = "") + private Integer clusterNodePort; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 角色 + */ + @Schema(description ="角色",name ="role",example = "") + private String role; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "clusterNodeStatus", example = "") + private NettyClientStatus clusterNodeStatus; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeQueryOneCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeQueryOneCommand.java new file mode 100644 index 00000000..831abe9f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeQueryOneCommand.java @@ -0,0 +1,79 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.lang.String; +import java.lang.Integer; +import java.time.LocalDateTime; +import java.lang.Boolean; +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_cluster_node_query_one_command",description = "集群配置信息") +public class LazyNettyClusterNodeQueryOneCommand { + + + /** + * + * 集群节点host + */ + @Schema(description ="集群节点host",name ="clusterNodeHost",example = "") + private String clusterNodeHost; + + /** + * + * 集群节点ID + */ + @Schema(description ="集群节点ID",name ="clusterNodeId",example = "") + private String clusterNodeId; + + /** + * + * 集群节点端口 + */ + @Schema(description ="集群节点端口",name ="clusterNodePort",example = "") + private Integer clusterNodePort; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 角色 + */ + @Schema(description ="角色",name ="role",example = "") + private String role; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "clusterNodeStatus", example = "") + private NettyClientStatus clusterNodeStatus; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeRemoveCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeRemoveCommand.java new file mode 100644 index 00000000..01709091 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeRemoveCommand.java @@ -0,0 +1,79 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.lang.String; +import java.lang.Integer; +import java.time.LocalDateTime; +import java.lang.Boolean; +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_cluster_node_remove_command",description = "集群配置信息") +public class LazyNettyClusterNodeRemoveCommand { + + + /** + * + * 集群节点host + */ + @Schema(description ="集群节点host",name ="clusterNodeHost",example = "") + private String clusterNodeHost; + + /** + * + * 集群节点ID + */ + @Schema(description ="集群节点ID",name ="clusterNodeId",example = "") + private String clusterNodeId; + + /** + * + * 集群节点端口 + */ + @Schema(description ="集群节点端口",name ="clusterNodePort",example = "") + private Integer clusterNodePort; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 角色 + */ + @Schema(description ="角色",name ="role",example = "") + private String role; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "clusterNodeStatus", example = "") + private NettyClientStatus clusterNodeStatus; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeStoryCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeStoryCommand.java new file mode 100644 index 00000000..5a6bf37b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeStoryCommand.java @@ -0,0 +1,79 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.lang.String; +import java.lang.Integer; +import java.time.LocalDateTime; +import java.lang.Boolean; +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_cluster_node_story_command",description = "集群配置信息") +public class LazyNettyClusterNodeStoryCommand { + + + /** + * + * 集群节点host + */ + @Schema(description ="集群节点host",name ="clusterNodeHost",example = "") + private String clusterNodeHost; + + /** + * + * 集群节点ID + */ + @Schema(description ="集群节点ID",name ="clusterNodeId",example = "") + private String clusterNodeId; + + /** + * + * 集群节点端口 + */ + @Schema(description ="集群节点端口",name ="clusterNodePort",example = "") + private Integer clusterNodePort; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 角色 + */ + @Schema(description ="角色",name ="role",example = "") + private String role; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "clusterNodeStatus", example = "") + private NettyClientStatus clusterNodeStatus; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeUpdateCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeUpdateCommand.java new file mode 100644 index 00000000..d4505ec2 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/command/lazy/netty/cluster/node/LazyNettyClusterNodeUpdateCommand.java @@ -0,0 +1,79 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.lang.String; +import java.lang.Integer; +import java.time.LocalDateTime; +import java.lang.Boolean; +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_cluster_node_update_command",description = "集群配置信息") +public class LazyNettyClusterNodeUpdateCommand { + + + /** + * + * 集群节点host + */ + @Schema(description ="集群节点host",name ="clusterNodeHost",example = "") + private String clusterNodeHost; + + /** + * + * 集群节点ID + */ + @Schema(description ="集群节点ID",name ="clusterNodeId",example = "") + private String clusterNodeId; + + /** + * + * 集群节点端口 + */ + @Schema(description ="集群节点端口",name ="clusterNodePort",example = "") + private Integer clusterNodePort; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 角色 + */ + @Schema(description ="角色",name ="role",example = "") + private String role; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "clusterNodeStatus", example = "") + private NettyClientStatus clusterNodeStatus; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/dto/LazyNettyClusterNodeDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/dto/LazyNettyClusterNodeDTO.java new file mode 100644 index 00000000..02008d42 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/dto/LazyNettyClusterNodeDTO.java @@ -0,0 +1,76 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.lang.String; +import java.lang.Integer; +import java.time.LocalDateTime; +import java.lang.Boolean; + +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_cluster_node_command_dto", description = "集群配置信息") +public class LazyNettyClusterNodeDTO { + + + /** + * 集群节点host + */ + @Schema(description = "集群节点host", name = "clusterNodeHost", example = "") + private String clusterNodeHost; + + /** + * 集群节点ID + */ + @Schema(description = "集群节点ID", name = "clusterNodeId", example = "") + private String clusterNodeId; + + /** + * 集群节点端口 + */ + @Schema(description = "集群节点端口", name = "clusterNodePort", example = "") + private Integer clusterNodePort; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 角色 + */ + @Schema(description = "角色", name = "role", example = "") + private String role; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "clusterNodeStatus", example = "") + private NettyClientStatus clusterNodeStatus; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/impl/LazyNettyClusterNodeApplicationImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/impl/LazyNettyClusterNodeApplicationImpl.java new file mode 100644 index 00000000..af76456e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/application/impl/LazyNettyClusterNodeApplicationImpl.java @@ -0,0 +1,272 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.application.impl; + +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.client.netty.socket.NettyClientSocket; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNode; +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.LazyNettyClusterNodeApplication; +import org.wu.framework.web.response.Result; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeRemoveCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeStoryCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeUpdateCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryListCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryOneCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.assembler.LazyNettyClusterNodeDTOAssembler; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.dto.LazyNettyClusterNodeDTO; + +import java.util.Objects; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNodeRepository; + +import java.util.List; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; + +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl + **/ +@Slf4j +@LazyApplication +public class LazyNettyClusterNodeApplicationImpl implements LazyNettyClusterNodeApplication { + + @Resource + LazyNettyClusterNodeRepository lazyNettyClusterNodeRepository; + + @Resource + ClientChangeEvent clientChangeEvent; + + @Resource + List handleChannelTypeAdvancedList; // 处理服务端发送过来的数据类型 + + @Resource + ServerNodeProperties serverNodeProperties; + + // 缓存连接集群 socket + private final ConcurrentHashMap cacheClusterNettyClientSocketMap = new ConcurrentHashMap<>(); + + public static final ThreadPoolExecutor NETTY_CLUSTER_CLIENT_EXECUTOR = + new ThreadPoolExecutor(20, 50, 200, TimeUnit.MILLISECONDS, + new ArrayBlockingQueue<>(1)); + + /** + * describe 新增集群配置信息 + * + * @param lazyNettyClusterNodeStoryCommand 新增集群配置信息 + * @return {@link Result} 集群配置信息新增后领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result story(LazyNettyClusterNodeStoryCommand lazyNettyClusterNodeStoryCommand) { + LazyNettyClusterNode lazyNettyClusterNode = LazyNettyClusterNodeDTOAssembler.INSTANCE.toLazyNettyClusterNode(lazyNettyClusterNodeStoryCommand); + return lazyNettyClusterNodeRepository.story(lazyNettyClusterNode); + } + + /** + * describe 批量新增集群配置信息 + * + * @param lazyNettyClusterNodeStoryCommandList 批量新增集群配置信息 + * @return {@link Result>} 集群配置信息新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyClusterNodeStoryCommandList) { + List lazyNettyClusterNodeList = lazyNettyClusterNodeStoryCommandList.stream().map(LazyNettyClusterNodeDTOAssembler.INSTANCE::toLazyNettyClusterNode).collect(Collectors.toList()); + return lazyNettyClusterNodeRepository.batchStory(lazyNettyClusterNodeList); + } + + /** + * describe 更新集群配置信息 + * + * @param lazyNettyClusterNodeUpdateCommand 更新集群配置信息 + * @return {@link Result} 集群配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result updateOne(LazyNettyClusterNodeUpdateCommand lazyNettyClusterNodeUpdateCommand) { + LazyNettyClusterNode lazyNettyClusterNode = LazyNettyClusterNodeDTOAssembler.INSTANCE.toLazyNettyClusterNode(lazyNettyClusterNodeUpdateCommand); + return lazyNettyClusterNodeRepository.story(lazyNettyClusterNode); + } + + /** + * describe 查询单个集群配置信息 + * + * @param lazyNettyClusterNodeQueryOneCommand 查询单个集群配置信息 + * @return {@link Result} 集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result findOne(LazyNettyClusterNodeQueryOneCommand lazyNettyClusterNodeQueryOneCommand) { + LazyNettyClusterNode lazyNettyClusterNode = LazyNettyClusterNodeDTOAssembler.INSTANCE.toLazyNettyClusterNode(lazyNettyClusterNodeQueryOneCommand); + return lazyNettyClusterNodeRepository.findOne(lazyNettyClusterNode).convert(LazyNettyClusterNodeDTOAssembler.INSTANCE::fromLazyNettyClusterNode); + } + + /** + * describe 查询多个集群配置信息 + * + * @param lazyNettyClusterNodeQueryListCommand 查询多个集群配置信息 + * @return {@link Result>} 集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result> findList(LazyNettyClusterNodeQueryListCommand lazyNettyClusterNodeQueryListCommand) { + LazyNettyClusterNode lazyNettyClusterNode = LazyNettyClusterNodeDTOAssembler.INSTANCE.toLazyNettyClusterNode(lazyNettyClusterNodeQueryListCommand); + return lazyNettyClusterNodeRepository.findList(lazyNettyClusterNode).convert(lazyNettyClusterNodes -> lazyNettyClusterNodes.stream().map(LazyNettyClusterNodeDTOAssembler.INSTANCE::fromLazyNettyClusterNode).collect(Collectors.toList())); + } + + /** + * describe 分页查询多个集群配置信息 + * + * @param lazyNettyClusterNodeQueryListCommand 分页查询多个集群配置信息 + * @return {@link Result>} 分页集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyClusterNodeQueryListCommand lazyNettyClusterNodeQueryListCommand) { + LazyNettyClusterNode lazyNettyClusterNode = LazyNettyClusterNodeDTOAssembler.INSTANCE.toLazyNettyClusterNode(lazyNettyClusterNodeQueryListCommand); + return lazyNettyClusterNodeRepository.findPage(size, current, lazyNettyClusterNode).convert(page -> page.convert(LazyNettyClusterNodeDTOAssembler.INSTANCE::fromLazyNettyClusterNode)); + } + + /** + * describe 删除集群配置信息 + * + * @param lazyNettyClusterNodeRemoveCommand 删除集群配置信息 + * @return {@link Result} 集群配置信息 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result remove(LazyNettyClusterNodeRemoveCommand lazyNettyClusterNodeRemoveCommand) { + LazyNettyClusterNode lazyNettyClusterNode = LazyNettyClusterNodeDTOAssembler.INSTANCE.toLazyNettyClusterNode(lazyNettyClusterNodeRemoveCommand); + return lazyNettyClusterNodeRepository.remove(lazyNettyClusterNode); + } + + /** + * 启动 集群节点 + * + * @param lazyNettyClusterNode 配置 + */ + @Override + public void starterOneClusterNode(LazyNettyClusterNode lazyNettyClusterNode) { + + String inetHost = lazyNettyClusterNode.getClusterNodeHost(); + Integer inetPort = lazyNettyClusterNode.getClusterNodePort(); + String clusterNodeId = lazyNettyClusterNode.getClusterNodeId(); + // 当前节点ID + String clusterNodeClientId = serverNodeProperties.getNodeId(); + + NettyClientSocket nettyClientSocket = new + NettyClientSocket(inetHost, inetPort, clusterNodeClientId, + clusterNodeId, + clientChangeEvent, handleChannelTypeAdvancedList); + // 过滤已经存在的 + boolean anyMatch = cacheClusterNettyClientSocketMap + .keySet().stream() + .anyMatch(cacheClusterLazyNettyClusterNode -> clusterNodeId.equals(cacheClusterLazyNettyClusterNode.getClusterNodeId())); + if (anyMatch) { + log.warn("当前节点注册:{} 已经存在", lazyNettyClusterNode); + return; + } + cacheClusterNettyClientSocketMap.put(lazyNettyClusterNode, nettyClientSocket); + + Thread thread = new Thread(() -> { + try { + nettyClientSocket.newConnect2Server(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + }); + // 当前服务连接Netty客户端:{},Netty端口:{} + log.info("Current service connection Netty client: {}, Netty port: {}", inetHost, inetPort); + NETTY_CLUSTER_CLIENT_EXECUTOR.execute(thread); + + + } + + /** + * 启动集群所有节点 + */ + @Override + public void starterClusterNodes() { + // 查询所有配置 + LazyNettyClusterNode queryLazyNettyClusterNode = new LazyNettyClusterNode(); + queryLazyNettyClusterNode.setIsDeleted(false); + + lazyNettyClusterNodeRepository.findList(queryLazyNettyClusterNode).accept(lazyNettyClusterNodeList -> { + + for (LazyNettyClusterNode lazyNettyClusterNode : lazyNettyClusterNodeList) { + starterOneClusterNode(lazyNettyClusterNode); + } + }); + + } + + /** + * 关闭 集群节点 + * + * @param needCloseLazyNettyClusterNode 配置 + */ + @Override + public void destroyOneClusterNode(LazyNettyClusterNode needCloseLazyNettyClusterNode) { + // 当前节点ID + String clusterNodeId = serverNodeProperties.getNodeId(); + // 关闭指定socket + cacheClusterNettyClientSocketMap.forEach(((lazyNettyClusterNode, nettyClientSocket) -> { + String inetHost = lazyNettyClusterNode.getClusterNodeHost(); + Integer inetPort = lazyNettyClusterNode.getClusterNodePort(); + String needCloseInetHost = needCloseLazyNettyClusterNode.getClusterNodeHost(); + Integer needCloseInetPort = needCloseLazyNettyClusterNode.getClusterNodePort(); + String needCloseClientId = needCloseLazyNettyClusterNode.getClusterNodeId(); + if (Objects.equals(clusterNodeId, needCloseClientId) + && Objects.equals(inetPort, needCloseInetPort) + && Objects.equals(inetHost, needCloseInetHost)) { + nettyClientSocket.shutdown(); + // 关闭客户端:{}与服务端连接:{}:{} + log.warn("Close client: {} Connect to server: {}: {}", clusterNodeId, inetHost, inetPort); + } + })); + } + + /** + * 关闭 集群上所有节点 + */ + @Override + public void destroyClusterNodes() { + // 关闭socket + cacheClusterNettyClientSocketMap.forEach(((lazyNettyClusterNode, nettyClientSocket) -> { + nettyClientSocket.shutdown(); + String clientId = lazyNettyClusterNode.getClusterNodeId(); + String inetHost = lazyNettyClusterNode.getClusterNodeHost(); + Integer inetPort = lazyNettyClusterNode.getClusterNodePort(); + // 关闭客户端:{}与服务端连接:{}:{} + log.warn("Close client: {} Connect to server: {}: {}", clientId, inetHost, inetPort); + })); + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/controller/LazyNettyClusterNodeProvider.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/controller/LazyNettyClusterNodeProvider.java new file mode 100644 index 00000000..422830f3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/controller/LazyNettyClusterNodeProvider.java @@ -0,0 +1,142 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.controller; + +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import org.wu.framework.web.spring.EasyController; +import org.springframework.web.bind.annotation.*; +import org.wu.framework.web.response.Result; +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNode; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeRemoveCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeStoryCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeUpdateCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryListCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryOneCommand; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.LazyNettyClusterNodeApplication; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.dto.LazyNettyClusterNodeDTO; + +import java.util.List; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; + +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController + **/ +@Tag(name = "集群配置信息提供者") +@EasyController("/lazy/netty/cluster/node") +public class LazyNettyClusterNodeProvider { + + @Resource + private LazyNettyClusterNodeApplication lazyNettyClusterNodeApplication; + + /** + * describe 新增集群配置信息 + * + * @param lazyNettyClusterNodeStoryCommand 新增集群配置信息 + * @return {@link Result} 集群配置信息新增后领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Operation(summary = "新增集群配置信息") + @PostMapping("/story") + public Result story(@RequestBody LazyNettyClusterNodeStoryCommand lazyNettyClusterNodeStoryCommand) { + return lazyNettyClusterNodeApplication.story(lazyNettyClusterNodeStoryCommand); + } + + /** + * describe 批量新增集群配置信息 + * + * @param lazyNettyClusterNodeStoryCommandList 批量新增集群配置信息 + * @return {@link Result>} 集群配置信息新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Operation(summary = "批量新增集群配置信息") + @PostMapping("/batchStory") + public Result> batchStory(@RequestBody List lazyNettyClusterNodeStoryCommandList) { + return lazyNettyClusterNodeApplication.batchStory(lazyNettyClusterNodeStoryCommandList); + } + + /** + * describe 更新集群配置信息 + * + * @param lazyNettyClusterNodeUpdateCommand 更新集群配置信息 + * @return {@link Result} 集群配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Operation(summary = "更新集群配置信息") + @PutMapping("/updateOne") + public Result updateOne(@RequestBody LazyNettyClusterNodeUpdateCommand lazyNettyClusterNodeUpdateCommand) { + return lazyNettyClusterNodeApplication.updateOne(lazyNettyClusterNodeUpdateCommand); + } + + /** + * describe 查询单个集群配置信息 + * + * @param lazyNettyClusterNodeQueryOneCommand 查询单个集群配置信息 + * @return {@link Result} 集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Operation(summary = "查询单个集群配置信息") + @GetMapping("/findOne") + public Result findOne(@ModelAttribute LazyNettyClusterNodeQueryOneCommand lazyNettyClusterNodeQueryOneCommand) { + return lazyNettyClusterNodeApplication.findOne(lazyNettyClusterNodeQueryOneCommand); + } + + /** + * describe 查询多个集群配置信息 + * + * @param lazyNettyClusterNodeQueryListCommand 查询多个集群配置信息 + * @return {@link Result>} 集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Operation(summary = "查询多个集群配置信息") + @GetMapping("/findList") + public Result> findList(@ModelAttribute LazyNettyClusterNodeQueryListCommand lazyNettyClusterNodeQueryListCommand) { + return lazyNettyClusterNodeApplication.findList(lazyNettyClusterNodeQueryListCommand); + } + + /** + * describe 分页查询多个集群配置信息 + * + * @param lazyNettyClusterNodeQueryListCommand 分页查询多个集群配置信息 + * @return {@link Result>} 分页集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Operation(summary = "分页查询多个集群配置信息") + @GetMapping("/findPage") + public Result> findPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyNettyClusterNodeQueryListCommand lazyNettyClusterNodeQueryListCommand) { + return lazyNettyClusterNodeApplication.findPage(size, current, lazyNettyClusterNodeQueryListCommand); + } + + /** + * describe 删除集群配置信息 + * + * @param lazyNettyClusterNodeRemoveCommand 删除集群配置信息 + * @return {@link Result} 集群配置信息 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Operation(summary = "删除集群配置信息") + @DeleteMapping("/remove") + public Result remove(@ModelAttribute LazyNettyClusterNodeRemoveCommand lazyNettyClusterNodeRemoveCommand) { + return lazyNettyClusterNodeApplication.remove(lazyNettyClusterNodeRemoveCommand); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/Node.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/Node.java new file mode 100644 index 00000000..cd2b13c0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/Node.java @@ -0,0 +1,4 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster; + +public class Node { +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/node/LazyNettyClusterNode.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/node/LazyNettyClusterNode.java new file mode 100644 index 00000000..e61bc7cd --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/node/LazyNettyClusterNode.java @@ -0,0 +1,81 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.wu.framework.lazy.orm.core.stereotype.LazyTableField; + +import java.lang.String; +import java.lang.Integer; +import java.time.LocalDateTime; +import java.lang.Boolean; +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_cluster_node",description = "集群配置信息") +public class LazyNettyClusterNode { + + + /** + * + * 集群节点host + */ + @Schema(description ="集群节点host",name ="clusterNodeHost",example = "") + private String clusterNodeHost; + + /** + * + * 集群节点ID + */ + @Schema(description ="集群节点ID",name ="clusterNodeId",example = "") + private String clusterNodeId; + + /** + * + * 集群节点端口 + */ + @Schema(description ="集群节点端口",name ="clusterNodePort",example = "") + private Integer clusterNodePort; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 角色 + */ + @Schema(description ="角色",name ="role",example = "") + private String role; + + /** + * + * 更新时间 + */ + @Schema(description ="更新时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "clusterNodeStatus", example = "") + private NettyClientStatus clusterNodeStatus; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/node/LazyNettyClusterNodeRepository.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/node/LazyNettyClusterNodeRepository.java new file mode 100644 index 00000000..83219681 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/domain/model/cluster/node/LazyNettyClusterNodeRepository.java @@ -0,0 +1,104 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node; + +import org.wu.framework.web.response.Result; + +import java.util.List; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; + +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository + **/ + +public interface LazyNettyClusterNodeRepository { + + + /** + * describe 新增集群配置信息 + * + * @param lazyNettyClusterNode 新增集群配置信息 + * @return {@link Result} 集群配置信息新增后领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result story(LazyNettyClusterNode lazyNettyClusterNode); + + /** + * describe 批量新增集群配置信息 + * + * @param lazyNettyClusterNodeList 批量新增集群配置信息 + * @return {@link Result>} 集群配置信息新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result> batchStory(List lazyNettyClusterNodeList); + + /** + * describe 查询单个集群配置信息 + * + * @param lazyNettyClusterNode 查询单个集群配置信息 + * @return {@link Result} 集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result findOne(LazyNettyClusterNode lazyNettyClusterNode); + + /** + * describe 查询多个集群配置信息 + * + * @param lazyNettyClusterNode 查询多个集群配置信息 + * @return {@link Result>} 集群配置信息DTO对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result> findList(LazyNettyClusterNode lazyNettyClusterNode); + + /** + * describe 分页查询多个集群配置信息 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyClusterNode 分页查询多个集群配置信息 + * @return {@link Result>} 分页集群配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result> findPage(int size, int current, LazyNettyClusterNode lazyNettyClusterNode); + + /** + * describe 删除集群配置信息 + * + * @param lazyNettyClusterNode 删除集群配置信息 + * @return {@link Result} 集群配置信息 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result remove(LazyNettyClusterNode lazyNettyClusterNode); + + /** + * describe 是否存在集群配置信息 + * + * @param lazyNettyClusterNode 是否存在集群配置信息 + * @return {@link Result} 集群配置信息是否存在 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + Result exists(LazyNettyClusterNode lazyNettyClusterNode); + + /** + * 修改节点状态 + * @param clusterNodeId 节点ID + */ + void updateNodeStatus(String clusterNodeId); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/event/ClusterNodeChangeEventImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/event/ClusterNodeChangeEventImpl.java new file mode 100644 index 00000000..fc669b3e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/event/ClusterNodeChangeEventImpl.java @@ -0,0 +1,169 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.event; + + +import io.netty.channel.Channel; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerProperties; +import org.framework.smart.agent.network.heartbeat.client.domain.model.lazy.netty.server.properties.LazyNettyServerPropertiesRepository; +import org.framework.smart.agent.network.heartbeat.client.netty.event.ClientChangeEvent; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyClientChannel; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyServerContext; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNodeRepository; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * node 注册 变更事件 + */ +@Primary +@Slf4j +@Component +public class ClusterNodeChangeEventImpl implements ClientChangeEvent { + + + @Resource + private LazyNettyServerPropertiesRepository lazyNettyServerPropertiesRepository; + + @Resource + private LazyNettyClusterNodeRepository lazyNettyClusterNodeRepository; + + +// private final StringRedisTemplate stringRedisTemplate; +// private final RedisProviderTemplate redisProviderTemplate; +// +// public DefaultClientChangeEvent1Impl(StringRedisTemplate stringRedisTemplate, RedisProviderTemplate redisProviderTemplate) { +// this.stringRedisTemplate = stringRedisTemplate; +// this.redisProviderTemplate = redisProviderTemplate; +// } + + + /** + * 推送客户端在线 + */ + @Override + public void clientOnLine(String clientId) { +// // 获取当前客户端ID +// if (ObjectUtils.isEmpty(clientId)) { +// clientId = stringRedisTemplate.opsForValue().get(ClientConfigKeyUtils.CLIENT_ID_KEY); +// } +// String clientStatusKey = ClientConfigKeyUtils.getClientStatusKey(clientId); +// // 如果可以已经在线状态不推送 +// stringRedisTemplate.opsForValue().set(clientStatusKey, NettyClientStatus.ON_LINE.name()); +// ClientOnLineState clientOnLineState = new ClientOnLineState(); +// clientOnLineState.setClientId(clientId); +// clientOnLineState.setOnLineState(NettyClientStatus.ON_LINE.name()); +// // 暂存扫描触发 +// redisProviderTemplate.send(RedisChannelConstant.REDIS_CLIENT_ONLINE_OR_OFFLINE_CHANNEL,clientOnLineState); + + } + + /** + * 推送客户端在线 + * + * @param inetHost 服务端ip + * @param inetPort 服务端端口 + * @param serverId 服务端ID + * @param clientId 客户端 + */ + @Override + public void clientOnLine(String inetHost, int inetPort, String serverId, String clientId) { + LazyNettyServerProperties lazyNettyServerProperties = new LazyNettyServerProperties(); + lazyNettyServerProperties.setClientId(clientId); + lazyNettyServerProperties.setInetHost(inetHost); + lazyNettyServerProperties.setInetPort(inetPort); + lazyNettyServerProperties.setConnectStatus(NettyClientStatus.ON_LINE); + lazyNettyServerPropertiesRepository.onLine(lazyNettyServerProperties); + // 更改状态在线 + clientOnLine(clientId); + + List serverEndpointChannels = NettyServerContext.getServerEndpointChannels(); + for (NettyClientChannel serverEndpointChannel : serverEndpointChannels) { + Channel serverEndpointChannelChannel = serverEndpointChannel.getChannel(); + if (serverEndpointChannelChannel != null && serverEndpointChannelChannel.isActive()) { + // 客户端本地获取所有 已经连接的服务端的channel 通知他们 扫描数据库node信息,重新初始化 + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.REPORT_CLUSTER_NODE_REGISTER_MESSAGE); + nettyMsg.setClientId(clientId); + nettyMsg.setData((clientId).getBytes()); + serverEndpointChannelChannel.writeAndFlush(nettyMsg); + } + } + + // 修改节点状态 + lazyNettyClusterNodeRepository.updateNodeStatus(serverId); + + + } + + + + /** + * 推送客户端离线 + */ + @Override + public void clientOffLine(String clientId) { +// if (ObjectUtils.isEmpty(clientId)) { +// clientId = stringRedisTemplate.opsForValue().get(ClientConfigKeyUtils.CLIENT_ID_KEY); +// } +// String clientStatusKey = ClientConfigKeyUtils.getClientStatusKey(clientId); +// // 离线状态 +// stringRedisTemplate.opsForValue().set(clientStatusKey, NettyClientStatus.OFF_LINE.name()); +// // 暂存状态 +// stagingOpen(clientId); +// // 暂存扫描触发 +// ClientOnLineState clientOnLineState = new ClientOnLineState(); +// clientOnLineState.setClientId(clientId); +// clientOnLineState.setOnLineState(NettyClientStatus.OFF_LINE.name()); +// redisProviderTemplate.send(RedisChannelConstant.REDIS_CLIENT_ONLINE_OR_OFFLINE_CHANNEL,clientOnLineState); + } + + /** + * 推送客户端离线 + * + * @param inetHost 服务端ip + * @param inetPort 服务端端口 + * @param serverId + * @param clientId 客户端 + */ + @Override + public void clientOffLine(String inetHost, int inetPort, String serverId, String clientId) { + LazyNettyServerProperties lazyNettyServerProperties = new LazyNettyServerProperties(); + lazyNettyServerProperties.setClientId(clientId); + lazyNettyServerProperties.setInetHost(inetHost); + lazyNettyServerProperties.setInetPort(inetPort); + lazyNettyServerProperties.setConnectStatus(NettyClientStatus.OFF_LINE); + lazyNettyServerPropertiesRepository.offLine(lazyNettyServerProperties); + clientOffLine(clientId); + // 修改节点状态 + lazyNettyClusterNodeRepository.updateNodeStatus(serverId); + } + + @Override + public void stagingOpen(String clientId) { +// String stagingStatusKey = StagingConfigKeyConstant.getStagingStatusKey(clientId); +// stringRedisTemplate.opsForValue().set(stagingStatusKey, StagingStatus.OPENED.name()); + + } + + /** + * 暂存关闭 + * + * @param clientId 租户ID + */ + @Override + public void stagingClose(String clientId) { +// if (clientId == null) { +// clientId = stringRedisTemplate.opsForValue().get(ClientConfigKeyUtils.CLIENT_ID_KEY); +// } +// String stagingStatusKey = StagingConfigKeyConstant.getStagingStatusKey(clientId); +// stringRedisTemplate.opsForValue().set(stagingStatusKey, StagingStatus.CLOSED.name()); + + } + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/converter/LazyNettyClusterNodeConverter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/converter/LazyNettyClusterNodeConverter.java new file mode 100644 index 00000000..e2149be4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/converter/LazyNettyClusterNodeConverter.java @@ -0,0 +1,48 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.converter; + +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNode; +import org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.entity.LazyNettyClusterNodeDO; +import org.mapstruct.factory.Mappers; +import org.mapstruct.Mapper; +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface LazyNettyClusterNodeConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + + + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNodeConverter INSTANCE = Mappers.getMapper(LazyNettyClusterNodeConverter.class); + /** + * describe 实体对象 转换成领域对象 + * + * @param lazyNettyClusterNodeDO 集群配置信息实体对象 + * @return {@link LazyNettyClusterNode} 集群配置信息领域对象 + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNode toLazyNettyClusterNode(LazyNettyClusterNodeDO lazyNettyClusterNodeDO); + /** + * describe 领域对象 转换成实体对象 + * + * @param lazyNettyClusterNode 集群配置信息领域对象 + * @return {@link LazyNettyClusterNodeDO} 集群配置信息实体对象 + + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + LazyNettyClusterNodeDO fromLazyNettyClusterNode(LazyNettyClusterNode lazyNettyClusterNode); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/entity/LazyNettyClusterNodeDO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/entity/LazyNettyClusterNodeDO.java new file mode 100644 index 00000000..03bdae02 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/entity/LazyNettyClusterNodeDO.java @@ -0,0 +1,90 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.entity; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.wu.framework.lazy.orm.core.stereotype.LazyTableIndex; +import org.wu.framework.core.stereotype.LayerField; +import org.wu.framework.core.stereotype.LayerField.LayerFieldType; +import org.wu.framework.lazy.orm.core.stereotype.LazyTable; +import org.wu.framework.lazy.orm.core.stereotype.LazyTableField; +import org.wu.framework.lazy.orm.core.stereotype.*; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.lang.String; +import java.lang.Integer; +import java.time.LocalDateTime; +import java.lang.Boolean; + +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "lazy_netty_cluster_node", comment = "集群配置信息") +@Schema(title = "lazy_netty_cluster_node", description = "集群配置信息") +public class LazyNettyClusterNodeDO { + + + /** + * 集群节点host + */ + @Schema(description = "集群节点host", name = "clusterNodeHost", example = "") + @LazyTableField(name = "cluster_node_host", comment = "集群节点host", columnType = "varchar(255)", notNull = true) + private String clusterNodeHost; + + /** + * 集群节点ID + */ + @Schema(description = "集群节点ID", name = "clusterNodeId", example = "") + @LazyTableFieldUnique(name = "cluster_node_id", comment = "集群节点ID", columnType = "varchar(255)", notNull = true) + private String clusterNodeId; + + /** + * 集群节点端口 + */ + @Schema(description = "集群节点端口", name = "clusterNodePort", example = "") + @LazyTableField(name = "cluster_node_port", comment = "集群节点端口", columnType = "int", notNull = true) + private Integer clusterNodePort; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + @LazyTableField(name = "create_time", comment = "创建时间") + private LocalDateTime createTime; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + @LazyTableField(name = "is_deleted", comment = "是否删除") + private Boolean isDeleted; + + /** + * 角色 + */ + @Schema(description = "角色", name = "role", example = "") + @LazyTableField(name = "role", comment = "角色", defaultValue = "'node'", upsertStrategy = LazyFieldStrategy.NEVER, columnType = "varchar(255)") + private String role; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + @LazyTableField(name = "update_time", comment = "更新时间") + private LocalDateTime updateTime; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "clusterNodeStatus", example = "") + @LazyTableField(name = "cluster_node_status", comment = "在线状态(true在线,false离线)", columnType = "varchar(255)") + private NettyClientStatus clusterNodeStatus; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/mapper/LazyNettyClusterNodeMapper.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/mapper/LazyNettyClusterNodeMapper.java new file mode 100644 index 00000000..888a93e1 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/mapper/LazyNettyClusterNodeMapper.java @@ -0,0 +1,15 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.mapper; + +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyNettyClusterNodeMapper { + + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/persistence/LazyNettyClusterNodeRepositoryImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/persistence/LazyNettyClusterNodeRepositoryImpl.java new file mode 100644 index 00000000..e5f049ca --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/persistence/LazyNettyClusterNodeRepositoryImpl.java @@ -0,0 +1,189 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.persistence; + +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.entity.LazyNettyClusterNodeDO; +import org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.converter.LazyNettyClusterNodeConverter; +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNodeRepository; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientStateDO; +import org.springframework.stereotype.Repository; + +import java.time.LocalDateTime; +import java.util.stream.Collectors; + +import org.springframework.transaction.annotation.Transactional; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNode; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; + +import java.util.List; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; + +/** + * describe 集群配置信息 + * + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class LazyNettyClusterNodeRepositoryImpl implements LazyNettyClusterNodeRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增集群配置信息 + * + * @param lazyNettyClusterNode 新增集群配置信息 + * @return {@link Result} 集群配置信息新增后领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result story(LazyNettyClusterNode lazyNettyClusterNode) { + LazyNettyClusterNodeDO lazyNettyClusterNodeDO = LazyNettyClusterNodeConverter.INSTANCE.fromLazyNettyClusterNode(lazyNettyClusterNode); + lazyLambdaStream.upsert(lazyNettyClusterNodeDO); + return ResultFactory.successOf(); + } + + /** + * describe 批量新增集群配置信息 + * + * @param lazyNettyClusterNodeList 批量新增集群配置信息 + * @return {@link Result>} 集群配置信息新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyClusterNodeList) { + List lazyNettyClusterNodeDOList = lazyNettyClusterNodeList.stream().map(LazyNettyClusterNodeConverter.INSTANCE::fromLazyNettyClusterNode).collect(Collectors.toList()); + lazyLambdaStream.upsert(lazyNettyClusterNodeDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个集群配置信息 + * + * @param lazyNettyClusterNode 查询单个集群配置信息 + * @return {@link Result} 集群配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result findOne(LazyNettyClusterNode lazyNettyClusterNode) { + LazyNettyClusterNodeDO lazyNettyClusterNodeDO = LazyNettyClusterNodeConverter.INSTANCE.fromLazyNettyClusterNode(lazyNettyClusterNode); + LazyNettyClusterNode lazyNettyClusterNodeOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyNettyClusterNodeDO), LazyNettyClusterNode.class); + return ResultFactory.successOf(lazyNettyClusterNodeOne); + } + + /** + * describe 查询多个集群配置信息 + * + * @param lazyNettyClusterNode 查询多个集群配置信息 + * @return {@link Result>} 集群配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result> findList(LazyNettyClusterNode lazyNettyClusterNode) { + LazyNettyClusterNodeDO lazyNettyClusterNodeDO = LazyNettyClusterNodeConverter.INSTANCE.fromLazyNettyClusterNode(lazyNettyClusterNode); + List lazyNettyClusterNodeList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyNettyClusterNodeDO), LazyNettyClusterNode.class); + return ResultFactory.successOf(lazyNettyClusterNodeList); + } + + /** + * describe 分页查询多个集群配置信息 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyClusterNode 分页查询多个集群配置信息 + * @return {@link Result>} 分页集群配置信息领域对象 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyClusterNode lazyNettyClusterNode) { + LazyNettyClusterNodeDO lazyNettyClusterNodeDO = LazyNettyClusterNodeConverter.INSTANCE.fromLazyNettyClusterNode(lazyNettyClusterNode); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage lazyNettyClusterNodeLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyNettyClusterNodeDO), lazyPage, LazyNettyClusterNode.class); + return ResultFactory.successOf(lazyNettyClusterNodeLazyPage); + } + + /** + * describe 删除集群配置信息 + * + * @param lazyNettyClusterNode 删除集群配置信息 + * @return {@link Result} 集群配置信息 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result remove(LazyNettyClusterNode lazyNettyClusterNode) { + LazyNettyClusterNodeDO lazyNettyClusterNodeDO = LazyNettyClusterNodeConverter.INSTANCE.fromLazyNettyClusterNode(lazyNettyClusterNode); + // lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyNettyClusterNodeDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在集群配置信息 + * + * @param lazyNettyClusterNode 集群配置信息领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + * @author Jia wei Wu + * @date 2024/04/12 02:16 下午 + **/ + + @Override + public Result exists(LazyNettyClusterNode lazyNettyClusterNode) { + LazyNettyClusterNodeDO lazyNettyClusterNodeDO = LazyNettyClusterNodeConverter.INSTANCE.fromLazyNettyClusterNode(lazyNettyClusterNode); + Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyNettyClusterNodeDO)); + return ResultFactory.successOf(exists); + } + + /** + * 修改节点状态 + * + * @param clusterNodeId 节点ID + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void updateNodeStatus(String clusterNodeId) { + // 查询这个节点下客户端注册是否正常 + List lazyNettyClientStateDOList = lazyLambdaStream.selectList( + LazyWrappers.lambdaWrapper() + .eq(LazyNettyClientStateDO::getServerId, clusterNodeId) + ); + boolean anyMatch = lazyNettyClientStateDOList.stream() + .anyMatch(lazyNettyClientStateDO -> + NettyClientStatus.OFF_LINE.equals(lazyNettyClientStateDO.getOnLineState()) + ); + + LazyNettyClusterNodeDO lazyNettyClusterNodeDO = new LazyNettyClusterNodeDO(); + lazyNettyClusterNodeDO.setClusterNodeId(clusterNodeId); + lazyNettyClusterNodeDO.setUpdateTime(LocalDateTime.now()); + + // 更新当前节点状态 + if(anyMatch){ + // 离线 + lazyNettyClusterNodeDO.setClusterNodeStatus(NettyClientStatus.OFF_LINE); + }else { + // 在线 + lazyNettyClusterNodeDO.setClusterNodeStatus(NettyClientStatus.ON_LINE); + } + lazyLambdaStream.update(lazyNettyClusterNodeDO,LazyWrappers.lambdaWrapper() + .eq(LazyNettyClusterNodeDO::getClusterNodeId,clusterNodeId)); + + + + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/xml/LazyNettyClusterNodeMapper.xml b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/xml/LazyNettyClusterNodeMapper.xml new file mode 100644 index 00000000..c890fdbf --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/infrastructure/xml/LazyNettyClusterNodeMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/config/HeartbeatServerConfiguration.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/config/HeartbeatServerConfiguration.java new file mode 100644 index 00000000..56dcc31b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/config/HeartbeatServerConfiguration.java @@ -0,0 +1,93 @@ +package org.framework.smart.agent.network.heartbeat.server.config; + + +import org.framework.smart.agent.network.heartbeat.server.cluster.application.LazyNettyClusterNodeApplication; +import org.framework.smart.agent.network.heartbeat.server.netty.advanced.*; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Role; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyInternalNetworkPenetrationMappingApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyNettyClientBlacklistApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; + + +@Role(BeanDefinition.ROLE_INFRASTRUCTURE) +public class HeartbeatServerConfiguration { + + /** + * 服务端 处理客户端心跳 + * + * @return ServerHandleChannelHeartbeatTypeAdvanced + */ + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleChannelHeartbeatTypeAdvanced serverChannelHeartbeatTypeAdvanced() { + return new ServerHandleChannelHeartbeatTypeAdvanced(); + } + + /** + * 处理 服务端处理客户端数据传输 + * + * @return ServerHandleReportHandleChannelTransferTypeAdvanced + */ + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleReportHandleChannelTransferTypeAdvanced serverReportChannelTransferTypeAdvanced(ChannelFlowAdapter channelFlowAdapter) { + return new ServerHandleReportHandleChannelTransferTypeAdvanced(channelFlowAdapter); + } + + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleClientConnectSuccessTypeAdvanced serverReportConnectSuccessTypeAdvanced( + LazyClientStatsChangeApplication lazyClientStatsChangeApplication, + LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication, + LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication) { + return new ServerHandleClientConnectSuccessTypeAdvanced(lazyClientStatsChangeApplication, lazyNettyClientBlacklistApplication, lazyInternalNetworkPenetrationMappingApplication); + } + + /** + * 服务端处理集群注册信息 + * + * @param lazyNettyClusterNodeApplication 集群信息获取 + * @return ServerHandleReportClusterNodeRegisterTypeAdvanced + */ + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleReportClusterNodeRegisterTypeAdvanced serverHandleReportClusterNodeRegisterTypeAdvanced() { + return new ServerHandleReportClusterNodeRegisterTypeAdvanced(); + } + + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleReportDisconnectTypeAdvanced serverReportDisconnectTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication) { + return new ServerHandleReportDisconnectTypeAdvanced(lazyClientStatsChangeApplication); + } + + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleReportSingleClientCloseVisitorTypeAdvanced serverReportSingleClientCloseVisitorTypeAdvanced() { + return new ServerHandleReportSingleClientCloseVisitorTypeAdvanced(); + } + + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleReportSingleClientRealConnectTypeAdvanced serverReportSingleClientRealConnectTypeAdvanced() { + return new ServerHandleReportSingleClientRealConnectTypeAdvanced(); + } + + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleReportStagingClosedTypeAdvanced serverReportStagingClosedTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication) { + return new ServerHandleReportStagingClosedTypeAdvanced(lazyClientStatsChangeApplication); + } + + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandleReportStagingOpenedTypeAdvanced serverReportStagingOpenedTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication) { + return new ServerHandleReportStagingOpenedTypeAdvanced(lazyClientStatsChangeApplication); + } + + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/config/ServerFlowConfiguration.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/config/ServerFlowConfiguration.java new file mode 100644 index 00000000..8ed7409f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/config/ServerFlowConfiguration.java @@ -0,0 +1,57 @@ +package org.framework.smart.agent.network.heartbeat.server.config; + +import org.framework.smart.agent.network.heartbeat.server.netty.flow.ServerHandlerInFlowHandler; +import org.framework.smart.agent.network.heartbeat.server.netty.flow.ServerHandlerOutFlowHandler; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Role; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.smart.agent.network.heartbeat.common.advanced.flow.HandleChannelFlowAdvanced; + +import java.util.List; + +/** + * @see ChannelFlowAdapter + * @see HandleChannelFlowAdvanced + */ +@Role(BeanDefinition.ROLE_INFRASTRUCTURE) +public class ServerFlowConfiguration { + /** + * 进口数据处理 + * + * @return ServerHandlerInFlowHandler + */ + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandlerInFlowHandler serverHandlerInFlowHandler(LazyVisitorPortFlowApplication lazyVisitorPortFlowApplication) { + return new ServerHandlerInFlowHandler(lazyVisitorPortFlowApplication); + } + + /** + * 出口数据处理 + * + * @return ServerHandlerOutFlowHandler + */ + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandlerOutFlowHandler serverHandlerOutFlowHandler(LazyVisitorPortFlowApplication lazyVisitorPortFlowApplication) { + return new ServerHandlerOutFlowHandler(lazyVisitorPortFlowApplication); + } + + + /** + * 服务端流量适配器 + * + * @param handleChannelFlowAdvancedList 服务端流量适配者 + * @return 服务端流量适配器 + */ + @ConditionalOnMissingBean(ChannelFlowAdapter.class) + @Bean + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + public ChannelFlowAdapter channelFlowAdapter(List handleChannelFlowAdvancedList) { + return new ChannelFlowAdapter(handleChannelFlowAdvancedList); + } + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/init/InitClusterNode.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/init/InitClusterNode.java new file mode 100644 index 00000000..b2171838 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/init/InitClusterNode.java @@ -0,0 +1,105 @@ +package org.framework.smart.agent.network.heartbeat.server.init; + +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.LazyNettyClusterNodeApplication; +import org.framework.smart.agent.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNode; +import org.framework.smart.agent.network.heartbeat.server.cluster.infrastructure.entity.LazyNettyClusterNodeDO; +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; +import org.wu.framework.core.utils.ObjectUtils; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; + +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * 当配置模式为集群模式 加载 + */ + +@ConditionalOnProperty(prefix = ServerNodeProperties.prefix, value = "mode", havingValue = "cluster") +@Configuration +@Slf4j +public class InitClusterNode implements CommandLineRunner, DisposableBean { + + private final LazyNettyClusterNodeApplication lazyNettyClusterNodeApplication; + + private final ServerNodeProperties serverNodeProperties; + private final LazyLambdaStream lazyLambdaStream; + + public InitClusterNode(LazyNettyClusterNodeApplication lazyNettyClusterNodeApplication, + ServerNodeProperties serverNodeProperties, + LazyLambdaStream lazyLambdaStream) { + this.lazyNettyClusterNodeApplication = lazyNettyClusterNodeApplication; + this.serverNodeProperties = serverNodeProperties; + this.lazyLambdaStream = lazyLambdaStream; + } + + + @Override + public void run(String... args) throws Exception { + log.info("init cluster node...."); + initNodeConfig2Db(); + // 连接所有节点 + + lazyNettyClusterNodeApplication.starterClusterNodes(); + + + } + + public boolean checkConfig(ServerNodeProperties serverNodeProperties) { + + if ( + ObjectUtils.isEmpty(serverNodeProperties.getNodeId()) || + ObjectUtils.isEmpty(serverNodeProperties.getNodeHost()) || + ObjectUtils.isEmpty(serverNodeProperties.getNodePort()) + ) { + return false; + } + return true; + + } + + /** + * 存储配置到db + */ + public void initNodeConfig2Db() { + + // 初始化 node 配置信息 + String clusterNodeId = serverNodeProperties.getNodeId(); + String clusterNodeHost = serverNodeProperties.getNodeHost(); + Integer clusterNodePort = serverNodeProperties.getNodePort(); + + if (Objects.isNull(clusterNodeId) || + Objects.isNull(clusterNodeHost)) { + log.warn("节点信息错误:{}", serverNodeProperties); + return; + } + LazyNettyClusterNode lazyNettyClusterNode = new LazyNettyClusterNode(); + lazyNettyClusterNode.setClusterNodeHost(clusterNodeHost); + lazyNettyClusterNode.setClusterNodePort(clusterNodePort); + lazyNettyClusterNode.setClusterNodeId(clusterNodeId); + lazyNettyClusterNode.setIsDeleted(false); + lazyNettyClusterNode.setCreateTime(LocalDateTime.now()); + lazyNettyClusterNode.setUpdateTime(LocalDateTime.now()); + // 根据服务端端口、port 唯一性验证 + boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapper() + .eq(LazyNettyClusterNodeDO::getClusterNodeId, clusterNodeId) + ); + if (!exists) { + lazyLambdaStream.insert(lazyNettyClusterNode); + } + } + + /** + * 程序关闭后执行 + */ + @Override + public void destroy() { + lazyNettyClusterNodeApplication.destroyClusterNodes(); + } + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/init/InitServerSocket.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/init/InitServerSocket.java new file mode 100644 index 00000000..2d7c9b5b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/init/InitServerSocket.java @@ -0,0 +1,79 @@ +package org.framework.smart.agent.network.heartbeat.server.init; + + +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.server.netty.filter.NettyServerFilter; +import org.framework.smart.agent.network.heartbeat.server.netty.socket.NettyOnCloudNettyServerSocket; +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.autoconfigure.web.ServerProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.wu.framework.core.utils.ObjectUtils; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + + +/** + * description 初始化服务端 + * + * @author 吴佳伟 + * @date 2023/09/12 18:22 + */ +@Slf4j +@Configuration +public class InitServerSocket implements CommandLineRunner { + + private final ServerProperties serverProperties; + private final NettyServerFilter nettyServerFilter; + private final ServerNodeProperties serverNodeProperties; + + + ThreadPoolExecutor NETTY_SERVER_EXECUTOR = new ThreadPoolExecutor(1, 1, 200, TimeUnit.MILLISECONDS, + new ArrayBlockingQueue<>(1)); + + public InitServerSocket(ServerProperties serverProperties, + NettyServerFilter nettyServerFilter, + ServerNodeProperties serverNodeProperties + ) { + this.serverProperties = serverProperties; + this.nettyServerFilter = nettyServerFilter; + this.serverNodeProperties = serverNodeProperties; + } + + + @Bean(destroyMethod = "shutdown") + public NettyOnCloudNettyServerSocket nettyServerSocket() { + return new NettyOnCloudNettyServerSocket(nettyServerFilter); + } + + /** + * @param args + * @throws Exception + */ + @Override + public void run(String... args) throws Exception { + + log.info("Init InitServerSocket ..."); + NettyOnCloudNettyServerSocket serverSocket = new NettyOnCloudNettyServerSocket(nettyServerFilter); + log.info("当前服务启动端口:{}", serverProperties.getPort()); + int serverPortAdd1000 = serverProperties.getPort() + 1000; + if (!ObjectUtils.isEmpty(serverNodeProperties.getNodePort())) { + serverPortAdd1000 = serverNodeProperties.getNodePort(); + } + int nettyServerPort = serverPortAdd1000; + Thread thread = new Thread(() -> { + try { + serverSocket.startServer(nettyServerPort); + } catch (Exception e) { + throw new RuntimeException(e); + } + + }); + log.info("当前服务启动Netty端口:{}", nettyServerPort); + NETTY_SERVER_EXECUTOR.execute(thread); + + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleChannelHeartbeatTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleChannelHeartbeatTypeAdvanced.java new file mode 100644 index 00000000..7dd1038c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleChannelHeartbeatTypeAdvanced.java @@ -0,0 +1,32 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + + +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.AbstractHandleChannelHeartbeatTypeAdvanced; + + +/** + * 服务端 处理客户端心跳 + * TYPE_HEARTBEAT + */ +@Component +public class ServerHandleChannelHeartbeatTypeAdvanced extends AbstractHandleChannelHeartbeatTypeAdvanced { + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + public void doHandler(Channel channel, NettyProxyMsg msg) { + NettyProxyMsg hb = new NettyProxyMsg(); + hb.setType(MessageType.TYPE_HEARTBEAT); + channel.writeAndFlush(hb); + } + + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleClientConnectSuccessTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleClientConnectSuccessTypeAdvanced.java new file mode 100644 index 00000000..7bc499f3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleClientConnectSuccessTypeAdvanced.java @@ -0,0 +1,101 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + + +import com.alibaba.fastjson.JSON; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.AbstractHandleClientConnectSuccessTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyInternalNetworkPenetrationMappingApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyNettyClientBlacklistApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklist; + +import java.nio.charset.StandardCharsets; +import java.util.List; + + +/** + * 服务端连接成功处理 + * REPORT_CLIENT_CONNECT_SUCCESS + */ +@Slf4j +@Component +public class ServerHandleClientConnectSuccessTypeAdvanced extends AbstractHandleClientConnectSuccessTypeAdvanced { + + private final LazyClientStatsChangeApplication lazyClientStatsChangeApplication; + private final LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication; + private final LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication; + + public ServerHandleClientConnectSuccessTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication, LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication, LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication) { + this.lazyClientStatsChangeApplication = lazyClientStatsChangeApplication; + this.lazyNettyClientBlacklistApplication = lazyNettyClientBlacklistApplication; + this.lazyInternalNetworkPenetrationMappingApplication = lazyInternalNetworkPenetrationMappingApplication; + } + + + /** + * 处理当前数据 + * + * @param newChannel 当前通道 + * @param msg 通道数据 + */ + @Override + public void doHandler(Channel newChannel, NettyProxyMsg msg) { + + + String clientId = new String(msg.getClientId()); + ChannelContext.push(newChannel, clientId); + + ChannelAttributeKeyUtils.buildClientId(newChannel, clientId); + // 客户端:{},IP:{}连接成功 + log.info("Client: {}, IP: {} Connection successful", new String(msg.getClientId()), newChannel.remoteAddress().toString()); + // 验证客户端是否时黑名单 + LazyNettyClientBlacklist lazyNettyClientBlacklist = new LazyNettyClientBlacklist(); + lazyNettyClientBlacklist.setClientId(clientId); + lazyNettyClientBlacklist.setIsDeleted(false); + lazyNettyClientBlacklistApplication.exists(lazyNettyClientBlacklist).accept(exists -> { + if (!exists) { + // 服务状态在线 + lazyClientStatsChangeApplication.clientOnLine(clientId); + List clientChannels = ChannelContext.get(); + // 当前在线客户端数量:{} + log.info("Current number of online clients: {}", clientChannels.size()); + // 所有的客户端ID + List clientIdList = clientChannels + .stream() + .map(activeClientChannel -> new String(activeClientChannel.getClientId())) + .toList(); + + // TODO 多副本本地channel 无法共享问题 + // 通知所有客户端有人上线了 + for (ChannelContext.ClientChannel clientChannel : clientChannels) { + Channel channel = clientChannel.getChannel(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_CONNECTION_SUCCESS_NOTIFICATION); + nettyMsg.setData((JSON.toJSONString(clientIdList) + .getBytes(StandardCharsets.UTF_8))); + // 发送所有客户端ID + channel.writeAndFlush(nettyMsg); + } + // 开始开启客户端:【{}】,端口映射 + log.info("Start opening client: [{}], port mapping", clientId); + // 创建访问者(内网穿透连接创建) + lazyInternalNetworkPenetrationMappingApplication.createVisitor(clientId); + // 结束开启客户端:【{}】,端口映射 + log.info("End opening client: [{}], port mapping", clientId); + + } else { + // 黑名单客户端 + + } + }); + + + } + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportClusterNodeRegisterTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportClusterNodeRegisterTypeAdvanced.java new file mode 100644 index 00000000..717e9c94 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportClusterNodeRegisterTypeAdvanced.java @@ -0,0 +1,40 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.AbstractHandleReportClusterNodeRegisterTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.server.cluster.application.LazyNettyClusterNodeApplication; +import org.springframework.stereotype.Component; +import org.wu.framework.bean.factory.BeanContext; + +/** + * 集群节点注册 服务端本地处理 + */ +@Slf4j +@Component +public class ServerHandleReportClusterNodeRegisterTypeAdvanced extends + AbstractHandleReportClusterNodeRegisterTypeAdvanced { + + + public ServerHandleReportClusterNodeRegisterTypeAdvanced() { + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + + log.info("node register and me start scan node config"); + // 本地扫描节点配置重新注册 + LazyNettyClusterNodeApplication lazyNettyClusterNodeApplication = BeanContext.getBean(LazyNettyClusterNodeApplication.class); + + // 循环依赖问题 + lazyNettyClusterNodeApplication.starterClusterNodes(); + + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportDisconnectTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportDisconnectTypeAdvanced.java new file mode 100644 index 00000000..be096e28 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportDisconnectTypeAdvanced.java @@ -0,0 +1,91 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + + +import io.netty.channel.Channel; +import io.netty.channel.ChannelId; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.server.netty.socket.NettyVisitorSocket; +import org.springframework.stereotype.Component; +import org.wu.framework.core.utils.ObjectUtils; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyClientVisitorContext; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.AbstractHandleReportDisconnectTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; + +import java.io.IOException; +import java.util.List; + + +/** + * 服务端处理客户端断开连接处理 + * TYPE_DISCONNECT + */ +@Slf4j +@Component +public class ServerHandleReportDisconnectTypeAdvanced extends AbstractHandleReportDisconnectTypeAdvanced { + private final LazyClientStatsChangeApplication lazyClientStatsChangeApplication; + + public ServerHandleReportDisconnectTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication) { + this.lazyClientStatsChangeApplication = lazyClientStatsChangeApplication; + } + + /** + * 处理当前数据 + * + * @param deathChannel 关闭的通道 + * @param msg 通道数据 + */ + @Override + public void doHandler(Channel deathChannel, NettyProxyMsg msg) { + // 关闭连接通知 + byte[] clientIdByte = msg.getClientId(); + log.warn("close client :{} channel", new String(clientIdByte)); + ChannelId deathChannelId = deathChannel.id(); + ChannelContext.ClientChannel deathClientChannelDTO = ChannelContext.get(clientIdByte); + + if (deathClientChannelDTO != null) { + byte[] clientId = deathClientChannelDTO.getClientId(); + // 服务状态离线 + String tenantId = new String(clientId); + lazyClientStatsChangeApplication.clientOffLine(tenantId); + ChannelContext.remove(clientIdByte); + List clientChannels = ChannelContext.get(); + + // 通知其他客户端 channelId 关闭了 + for (ChannelContext.ClientChannel clientChannel : clientChannels) { + Channel channel = clientChannel.getChannel(); + + // 离线通知 + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_DISCONNECTION_NOTIFICATION); + nettyMsg.setClientId(clientId); + nettyMsg.setData(clientId); + channel.writeAndFlush(nettyMsg); + // 暂存通知 + NettyProxyMsg stagingNettyProxyMsg = new NettyProxyMsg(); + stagingNettyProxyMsg.setType(MessageType.DISTRIBUTE_CLIENT_STAGING_OPENED_NOTIFICATION); + stagingNettyProxyMsg.setData(clientId); + stagingNettyProxyMsg.setClientId(clientId); + channel.writeAndFlush(stagingNettyProxyMsg); + } + // 关闭绑定的访客端口 + List visitorSockets = NettyClientVisitorContext.getVisitorSockets(new String(clientId)); + if (!ObjectUtils.isEmpty(visitorSockets)) { + for (NettyVisitorSocket visitorSocket : visitorSockets) { + int visitorPort = visitorSocket.getVisitorPort(); + try { + visitorSocket.close(); + log.warn("client :[{}] visitorPort:[{}] close", new String(clientId), visitorPort); + } catch (IOException | InterruptedException e) { + throw new RuntimeException(e); + } + } + } + + } + } + + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java new file mode 100644 index 00000000..4c3ebfac --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java @@ -0,0 +1,62 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyRealIdContext; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.AbstractHandleReportHandleChannelTransferTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.enums.ChannelFlowEnum; +import org.framework.smart.agent.network.heartbeat.server.netty.flow.ServerChannelFlow; + + +/** + * 服务端处理客户端数据传输 + * REPORT_CLIENT_STAGING_CLOSED + */ +@Slf4j +@Component +public class ServerHandleReportHandleChannelTransferTypeAdvanced extends AbstractHandleReportHandleChannelTransferTypeAdvanced { + + private final ChannelFlowAdapter channelFlowAdapter; + + public ServerHandleReportHandleChannelTransferTypeAdvanced(ChannelFlowAdapter channelFlowAdapter) { + this.channelFlowAdapter = channelFlowAdapter; + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param msg 通道数据 + */ + @Override + public void doHandler(Channel channel, NettyProxyMsg msg) { + String clientId = new String(msg.getClientId()); + Integer visitorPort = Integer.valueOf(new String(msg.getVisitorPort())); + log.debug("接收到客户端:[{}]内网穿透返回的数据:[{}]", clientId, new String(msg.getData())); + // 将数据转发访客通道 + byte[] visitorId = msg.getVisitorId(); + Channel visitor = NettyRealIdContext.getReal(visitorId); + if (visitor != null) { + ByteBuf buf = visitor.config().getAllocator().buffer(msg.getData().length); + buf.writeBytes(msg.getData()); + visitor.writeAndFlush(buf); + + // 记录出口数据 + ServerChannelFlow serverChannelFlow = ServerChannelFlow + .builder() + .channelFlowEnum(ChannelFlowEnum.OUT_FLOW) + .port(visitorPort) + .clientId(clientId) + .flow(msg.getData().length) + .build(); + channelFlowAdapter.handler(channel, serverChannelFlow); + } + + } + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportSingleClientCloseVisitorTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportSingleClientCloseVisitorTypeAdvanced.java new file mode 100644 index 00000000..c50ec436 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportSingleClientCloseVisitorTypeAdvanced.java @@ -0,0 +1,32 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.framework.smart.agent.network.heartbeat.common.NettyCommunicationIdContext; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyRealIdContext; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.AbstractHandleReportSingleClientCloseVisitorTypeAdvanced; + +/** + * 服务端处理客户端 关闭一个访客 + */ +@Slf4j +@Component +public class ServerHandleReportSingleClientCloseVisitorTypeAdvanced extends AbstractHandleReportSingleClientCloseVisitorTypeAdvanced { + + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + // 关闭访客通道 + byte[] visitorId = nettyProxyMsg.getVisitorId(); + NettyCommunicationIdContext.clear(visitorId); + NettyRealIdContext.clear(visitorId); + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportSingleClientRealConnectTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportSingleClientRealConnectTypeAdvanced.java new file mode 100644 index 00000000..93b31035 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportSingleClientRealConnectTypeAdvanced.java @@ -0,0 +1,47 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelOption; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.framework.smart.agent.network.heartbeat.common.NettyCommunicationIdContext; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyRealIdContext; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.AbstractHandleReportSingleClientRealConnectTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +@Slf4j +@Component +public class ServerHandleReportSingleClientRealConnectTypeAdvanced extends AbstractHandleReportSingleClientRealConnectTypeAdvanced { + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param nettyProxyMsg 通道数据 + */ + @Override + protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) { + // 客户端绑定端口成功 + byte[] clientId = nettyProxyMsg.getClientId(); + byte[] clientTargetIp = nettyProxyMsg.getClientTargetIp(); + byte[] clientTargetPort = nettyProxyMsg.getClientTargetPort(); + byte[] visitorPort = nettyProxyMsg.getVisitorPort(); + byte[] visitorId = nettyProxyMsg.getVisitorId(); + log.info("客户端:{},绑定真实服务ip:{},port:{},成功", new String(clientId), new String(clientTargetIp), new String(clientTargetPort)); + // 绑定服务端访客通信通道 + NettyCommunicationIdContext.pushVisitor(channel, new String(visitorId)); + ChannelAttributeKeyUtils.buildVisitorId(channel, visitorId); + ChannelAttributeKeyUtils.buildClientId(channel, clientId); + ChannelAttributeKeyUtils.buildVisitorPort(channel, Integer.valueOf(new String(visitorPort))); + // 访客通道开启自动读取 + Channel visitorRealChannel = NettyRealIdContext.getReal(new String(visitorId)); + visitorRealChannel.config().setOption(ChannelOption.AUTO_READ, true); + + // 或许此处还应该通知服务端 这个访客绑定的客户端真实通道打开 + + // 下发客户端 真实通道自动读写开启 + + + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportStagingClosedTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportStagingClosedTypeAdvanced.java new file mode 100644 index 00000000..be4f3efb --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportStagingClosedTypeAdvanced.java @@ -0,0 +1,59 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelId; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.AbstractHandleReportStagingClosedTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; + +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * 服务端处理上报的暂存关闭 + */ +@Slf4j +@Component +public class ServerHandleReportStagingClosedTypeAdvanced extends AbstractHandleReportStagingClosedTypeAdvanced { + private final LazyClientStatsChangeApplication lazyClientStatsChangeApplication; + + public ServerHandleReportStagingClosedTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication) { + this.lazyClientStatsChangeApplication = lazyClientStatsChangeApplication; + } + + /** + * 处理当前数据 + * + * @param stagingClosedChannel 关闭暂存的通道 + * @param msg 通道数据 + */ + @Override + protected void doHandler(Channel stagingClosedChannel, NettyProxyMsg msg) { + byte[] clientIdBytes = msg.getClientId(); + // 获取所有通道 + List clientChannels = ChannelContext.get(); + ChannelId stagingClosedChannelId = stagingClosedChannel.id(); + ChannelContext.ClientChannel stagingOpenedClientChannel = ChannelContext.get(clientIdBytes); + if (stagingOpenedClientChannel != null) { + String clientId = new String(clientIdBytes); + // 存储当前客户端暂存关闭 + lazyClientStatsChangeApplication.stagingClosed(clientId); + for (ChannelContext.ClientChannel clientChannel : clientChannels) { + // 告诉他们 当前参数这个通道 暂存关闭了 + Channel channel = clientChannel.getChannel(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_STAGING_CLOSED_NOTIFICATION); + nettyMsg.setData((clientId + .getBytes(StandardCharsets.UTF_8))); + nettyMsg.setClientId((clientId + .getBytes(StandardCharsets.UTF_8))); + channel.writeAndFlush(nettyMsg); + } + } + + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportStagingOpenedTypeAdvanced.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportStagingOpenedTypeAdvanced.java new file mode 100644 index 00000000..7dcd8503 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/advanced/ServerHandleReportStagingOpenedTypeAdvanced.java @@ -0,0 +1,61 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.advanced; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelId; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.advanced.server.AbstractHandleReportStagingOpenedTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; + +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * 服务端处理上报的暂存开启 + */ +@Slf4j +@Component +public class ServerHandleReportStagingOpenedTypeAdvanced extends AbstractHandleReportStagingOpenedTypeAdvanced { + + private final LazyClientStatsChangeApplication lazyClientStatsChangeApplication; + + public ServerHandleReportStagingOpenedTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication) { + this.lazyClientStatsChangeApplication = lazyClientStatsChangeApplication; + } + + /** + * 处理当前数据 + * + * @param stagingOpenedChannel 开启暂存的通道 + * @param msg 通道数据 + */ + @Override + protected void doHandler(Channel stagingOpenedChannel, NettyProxyMsg msg) { + // 获取所有通道 + byte[] clientIdBytes = msg.getClientId(); + List clientChannels = ChannelContext.get(); + ChannelId stagingOpenedChannelId = stagingOpenedChannel.id(); + ChannelContext.ClientChannel stagingOpenedClientChannel = ChannelContext.get(clientIdBytes); + if (stagingOpenedClientChannel != null) { + for (ChannelContext.ClientChannel clientChannel : clientChannels) { + // 存储当前客户端暂存关闭 + String clientId = new String(clientIdBytes); + lazyClientStatsChangeApplication.stagingOpened(clientId); + // 告诉他们 当前参数这个通道 暂存开启了 + Channel channel = clientChannel.getChannel(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_STAGING_OPENED_NOTIFICATION); + nettyMsg.setData((clientId + .getBytes(StandardCharsets.UTF_8))); + nettyMsg.setClientId((clientId + .getBytes(StandardCharsets.UTF_8))); + channel.writeAndFlush(nettyMsg); + } + } + + + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/filter/NettyServerFilter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/filter/NettyServerFilter.java new file mode 100644 index 00000000..b59553c7 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/filter/NettyServerFilter.java @@ -0,0 +1,51 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.filter; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.handler.timeout.IdleStateHandler; +import org.springframework.stereotype.Component; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.smart.agent.network.heartbeat.common.advanced.HandleChannelTypeAdvanced; +import org.framework.smart.agent.network.heartbeat.common.decoder.NettyProxyMsgDecoder; +import org.framework.smart.agent.network.heartbeat.common.encoder.NettyProxyMsgEncoder; +import org.framework.smart.agent.network.heartbeat.server.netty.handler.NettyServerHandler; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * description + * + * @author 吴佳伟 + * @date 2023/09/13 10:26 + */ +@Component +public class NettyServerFilter extends ChannelInitializer { + private final List handleChannelTypeAdvancedList; + + public NettyServerFilter(List handleChannelTypeAdvancedList) { + this.handleChannelTypeAdvancedList = handleChannelTypeAdvancedList; + } + + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + // 以("\n")为结尾分割的 解码器 + // 解码、编码 + pipeline.addLast(new NettyProxyMsgDecoder(Integer.MAX_VALUE, 0, 4, -4, 0)); + pipeline.addLast(new NettyProxyMsgEncoder()); +// ph.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); + // 解码和编码,应和客户端一致 + //入参说明: 读超时时间、写超时时间、所有类型的超时时间、时间格式 + + pipeline.addLast(new IdleStateHandler(5, 0, 0, TimeUnit.SECONDS)); + pipeline.addLast("decoder", new StringDecoder()); + pipeline.addLast("encoder", new StringEncoder()); + // 类型处理器适配器 + ChannelTypeAdapter channelTypeAdapter = new ChannelTypeAdapter(handleChannelTypeAdvancedList); + pipeline.addLast("doHandler", new NettyServerHandler(channelTypeAdapter));// 服务端业务逻辑 + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/filter/VisitorFilter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/filter/VisitorFilter.java new file mode 100644 index 00000000..7cede0fb --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/filter/VisitorFilter.java @@ -0,0 +1,34 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.filter; + +import io.netty.channel.*; +import io.netty.channel.socket.SocketChannel; +import org.framework.smart.agent.network.heartbeat.common.InternalNetworkPenetrationRealClient; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.smart.agent.network.heartbeat.server.netty.handler.VisitorHandler; + +public class VisitorFilter extends ChannelInitializer { + private final InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient; + private final ChannelFlowAdapter channelFlowAdapter; + + public VisitorFilter(InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient, ChannelFlowAdapter channelFlowAdapter) { + this.internalNetworkPenetrationRealClient = internalNetworkPenetrationRealClient; + this.channelFlowAdapter = channelFlowAdapter; + } + + /** + * This method will be called once the {@link Channel} was registered. After the method returns this instance + * will be removed from the {@link ChannelPipeline} of the {@link Channel}. + * + * @param ch the {@link Channel} which was registered. + * @throws Exception is thrown if an error occurs. In that case it will be handled by + * {@link #exceptionCaught(ChannelHandlerContext, Throwable)} which will by default connectionClose + * the {@link Channel}. + */ + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast(new ChannelDuplexHandler()); + pipeline.addLast(new VisitorHandler(internalNetworkPenetrationRealClient, channelFlowAdapter)); + + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerChannelFlow.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerChannelFlow.java new file mode 100644 index 00000000..3e0163f7 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerChannelFlow.java @@ -0,0 +1,56 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.flow; + +import lombok.Builder; +import lombok.Data; +import org.framework.smart.agent.network.heartbeat.common.advanced.flow.ChannelFlow; +import org.framework.smart.agent.network.heartbeat.common.enums.ChannelFlowEnum; + +@Builder +@Data +public class ServerChannelFlow implements ChannelFlow { + private String clientId; + private Integer port; + private ChannelFlowEnum channelFlowEnum; + private Integer flow; + + /** + * 通道客户端ID + * + * @return 通道客户端ID + */ + @Override + public String clientId() { + return clientId; + } + + /** + * 通道使用的端口(服务端访客端口、客户端真实端口) + * + * @return 端口 + */ + @Override + public Integer port() { + return port; + } + + /** + * 通道流量类型 + * + * @return ChannelFlowEnum + * @see ChannelFlowEnum + */ + @Override + public ChannelFlowEnum channelFlowEnum() { + return channelFlowEnum; + } + + /** + * 流量 + * + * @return 流量 + */ + @Override + public Integer flow() { + return flow; + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerHandlerInFlowHandler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerHandlerInFlowHandler.java new file mode 100644 index 00000000..ead725ff --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerHandlerInFlowHandler.java @@ -0,0 +1,51 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.flow; + +import io.netty.channel.Channel; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow.LazyVisitorPortFlowStoryCommand; +import org.framework.smart.agent.network.heartbeat.common.advanced.flow.AbstractHandleChannelFlowAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.flow.ChannelFlow; +import org.framework.smart.agent.network.heartbeat.common.enums.ChannelFlowEnum; + +/** + * 进口流量处理 + */ +public class ServerHandlerInFlowHandler extends AbstractHandleChannelFlowAdvanced { + private final LazyVisitorPortFlowApplication lazyVisitorPortFlowApplication; + + public ServerHandlerInFlowHandler(LazyVisitorPortFlowApplication lazyVisitorPortFlowApplication) { + this.lazyVisitorPortFlowApplication = lazyVisitorPortFlowApplication; + } + + /** + * 处理是否支持这种类型 + * + * @param channelFlow 数据 + * @return boolean + */ + @Override + protected boolean doSupport(ChannelFlow channelFlow) { + return ChannelFlowEnum.IN_FLOW.equals(channelFlow.channelFlowEnum()); + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param channelFlow 通道数据 + */ + @Override + protected void doHandler(Channel channel, ChannelFlow channelFlow) { + String clientId = channelFlow.clientId(); + Integer port = channelFlow.port(); + Integer flow = channelFlow.flow(); + + // 进口流量处理 + LazyVisitorPortFlowStoryCommand visitorPortFlow = new LazyVisitorPortFlowStoryCommand(); + visitorPortFlow.setInFlow(flow); + visitorPortFlow.setClientId(clientId); + visitorPortFlow.setVisitorPort(port); + visitorPortFlow.setIsDeleted(false); + lazyVisitorPortFlowApplication.flowIncreaseStory(visitorPortFlow); + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerHandlerOutFlowHandler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerHandlerOutFlowHandler.java new file mode 100644 index 00000000..f58e65ad --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/flow/ServerHandlerOutFlowHandler.java @@ -0,0 +1,52 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.flow; + +import io.netty.channel.Channel; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow.LazyVisitorPortFlowStoryCommand; +import org.framework.smart.agent.network.heartbeat.common.advanced.flow.AbstractHandleChannelFlowAdvanced; +import org.framework.smart.agent.network.heartbeat.common.advanced.flow.ChannelFlow; +import org.framework.smart.agent.network.heartbeat.common.enums.ChannelFlowEnum; + +/** + * 出口流量处理 + */ +public class ServerHandlerOutFlowHandler extends AbstractHandleChannelFlowAdvanced { + private final LazyVisitorPortFlowApplication lazyVisitorPortFlowApplication; + + public ServerHandlerOutFlowHandler(LazyVisitorPortFlowApplication lazyVisitorPortFlowApplication) { + this.lazyVisitorPortFlowApplication = lazyVisitorPortFlowApplication; + } + + /** + * 处理是否支持这种类型 + * + * @param channelFlow 数据 + * @return boolean + */ + @Override + protected boolean doSupport(ChannelFlow channelFlow) { + return ChannelFlowEnum.OUT_FLOW.equals(channelFlow.channelFlowEnum()); + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param channelFlow 通道数据 + */ + @Override + protected void doHandler(Channel channel, ChannelFlow channelFlow) { + String clientId = channelFlow.clientId(); + Integer port = channelFlow.port(); + Integer flow = channelFlow.flow(); + + // 出口流量处理 + + LazyVisitorPortFlowStoryCommand visitorPortFlow = new LazyVisitorPortFlowStoryCommand(); + visitorPortFlow.setOutFlow(flow); + visitorPortFlow.setClientId(clientId); + visitorPortFlow.setVisitorPort(port); + visitorPortFlow.setIsDeleted(false); + lazyVisitorPortFlowApplication.flowIncreaseStory(visitorPortFlow); + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/HeartBeatServerHandler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/HeartBeatServerHandler.java new file mode 100644 index 00000000..4e8b67dc --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/HeartBeatServerHandler.java @@ -0,0 +1,44 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.handler; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; +import io.netty.util.AttributeKey; + +@Deprecated +public class HeartBeatServerHandler extends ChannelInboundHandlerAdapter { + + AttributeKey channelAttributeKeyId = AttributeKey.valueOf("channelAttributeTenantId"); + private int lossConnectCount = 0; + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + String channelAttributeId = ctx.channel().attr(channelAttributeKeyId).get(); + System.out.println("channelAttributeTenantId:" + channelAttributeId); + System.out.println("已经5秒未收到客户端的消息了!"); + + if (evt instanceof IdleStateEvent event) { + if (event.state() == IdleState.READER_IDLE) { + lossConnectCount++; + if (lossConnectCount > 2) { + System.out.println("关闭这个不活跃通道!"); +// ctx.channel().connectionClose(); + } + } + } else { + super.userEventTriggered(ctx, evt); + } + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + lossConnectCount = 0; + System.out.println("client says: " + msg.toString()); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + ctx.close(); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/LazyServerIdleStateHandler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/LazyServerIdleStateHandler.java new file mode 100644 index 00000000..2517148b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/LazyServerIdleStateHandler.java @@ -0,0 +1,537 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package org.framework.smart.agent.network.heartbeat.server.netty.handler; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.*; +import io.netty.handler.timeout.*; +import io.netty.util.concurrent.Future; +import io.netty.util.internal.ObjectUtil; + +import java.util.concurrent.TimeUnit; + +/** + * Raises a {@link ReadTimeoutException} when no data was read within a certain + * period of time. + * + *

+ * // The connection is closed when there is no inbound traffic
+ * // for 30 seconds.
+ *
+ * public class MyChannelInitializer extends {@link ChannelInitializer}<{@link Channel}> {
+ *     public void initChannel({@link Channel} channel) {
+ *         channel.pipeline().addLast("readTimeoutHandler", new {@link LazyServerIdleStateHandler}(30));
+ *         channel.pipeline().addLast("myHandler", new MyHandler());
+ *     }
+ * }
+ *
+ * // Handler should handle the {@link ReadTimeoutException}.
+ * public class MyHandler extends {@link ChannelDuplexHandler} {
+ *     {@code @Override}
+ *     public void exceptionCaught({@link ChannelHandlerContext} ctx, {@link Throwable} cause)
+ *             throws {@link Exception} {
+ *         if (cause instanceof {@link ReadTimeoutException}) {
+ *             // do something
+ *         } else {
+ *             super.exceptionCaught(ctx, cause);
+ *         }
+ *     }
+ * }
+ *
+ * {@link ServerBootstrap} bootstrap = ...;
+ * ...
+ * bootstrap.childHandler(new MyChannelInitializer());
+ * ...
+ * 
+ * + * @see WriteTimeoutHandler + * @see IdleStateHandler + */ +public class LazyServerIdleStateHandler extends ChannelDuplexHandler { + private static final long MIN_TIMEOUT_NANOS = TimeUnit.MILLISECONDS.toNanos(1); + private final boolean observeOutput; + private final long readerIdleTimeNanos; + private final long writerIdleTimeNanos; + private final long allIdleTimeNanos; + private Future readerIdleTimeout; + private long lastReadTime; + private boolean firstReaderIdleEvent = true; + private Future writerIdleTimeout; + private long lastWriteTime; + private boolean firstWriterIdleEvent = true; + private Future allIdleTimeout; + private boolean firstAllIdleEvent = true; + // Not create a new ChannelFutureListener per write operation to reduce GC pressure. + private final ChannelFutureListener writeListener = new ChannelFutureListener() { + @Override + public void operationComplete(ChannelFuture future) throws Exception { + lastWriteTime = ticksInNanos(); + firstWriterIdleEvent = firstAllIdleEvent = true; + } + }; + private byte state; // 0 - none, 1 - initialized, 2 - destroyed + private boolean reading; + + private long lastChangeCheckTimeStamp; + private int lastMessageHashCode; + private long lastPendingWriteBytes; + private long lastFlushProgress; + + /** + * Creates a new instance firing {@link IdleStateEvent}s. + * + * @param readerIdleTimeSeconds an {@link IdleStateEvent} whose state is {@link IdleState#READER_IDLE} + * will be triggered when no read was performed for the specified + * period of time. Specify {@code 0} to disable. + * @param writerIdleTimeSeconds an {@link IdleStateEvent} whose state is {@link IdleState#WRITER_IDLE} + * will be triggered when no write was performed for the specified + * period of time. Specify {@code 0} to disable. + * @param allIdleTimeSeconds an {@link IdleStateEvent} whose state is {@link IdleState#ALL_IDLE} + * will be triggered when neither read nor write was performed for + * the specified period of time. Specify {@code 0} to disable. + */ + public LazyServerIdleStateHandler( + int readerIdleTimeSeconds, + int writerIdleTimeSeconds, + int allIdleTimeSeconds) { + + this(readerIdleTimeSeconds, writerIdleTimeSeconds, allIdleTimeSeconds, + TimeUnit.SECONDS); + } + + /** + * @see #LazyServerIdleStateHandler(boolean, long, long, long, TimeUnit) + */ + public LazyServerIdleStateHandler( + long readerIdleTime, long writerIdleTime, long allIdleTime, + TimeUnit unit) { + this(false, readerIdleTime, writerIdleTime, allIdleTime, unit); + } + + /** + * Creates a new instance firing {@link IdleStateEvent}s. + * + * @param observeOutput whether or not the consumption of {@code bytes} should be taken into + * consideration when assessing write idleness. The default is {@code false}. + * @param readerIdleTime an {@link IdleStateEvent} whose state is {@link IdleState#READER_IDLE} + * will be triggered when no read was performed for the specified + * period of time. Specify {@code 0} to disable. + * @param writerIdleTime an {@link IdleStateEvent} whose state is {@link IdleState#WRITER_IDLE} + * will be triggered when no write was performed for the specified + * period of time. Specify {@code 0} to disable. + * @param allIdleTime an {@link IdleStateEvent} whose state is {@link IdleState#ALL_IDLE} + * will be triggered when neither read nor write was performed for + * the specified period of time. Specify {@code 0} to disable. + * @param unit the {@link TimeUnit} of {@code readerIdleTime}, + * {@code writeIdleTime}, and {@code allIdleTime} + */ + public LazyServerIdleStateHandler(boolean observeOutput, + long readerIdleTime, long writerIdleTime, long allIdleTime, + TimeUnit unit) { + ObjectUtil.checkNotNull(unit, "unit"); + + this.observeOutput = observeOutput; + + if (readerIdleTime <= 0) { + readerIdleTimeNanos = 0; + } else { + readerIdleTimeNanos = Math.max(unit.toNanos(readerIdleTime), MIN_TIMEOUT_NANOS); + } + if (writerIdleTime <= 0) { + writerIdleTimeNanos = 0; + } else { + writerIdleTimeNanos = Math.max(unit.toNanos(writerIdleTime), MIN_TIMEOUT_NANOS); + } + if (allIdleTime <= 0) { + allIdleTimeNanos = 0; + } else { + allIdleTimeNanos = Math.max(unit.toNanos(allIdleTime), MIN_TIMEOUT_NANOS); + } + } + + /** + * Return the readerIdleTime that was given when instance this class in milliseconds. + */ + public long getReaderIdleTimeInMillis() { + return TimeUnit.NANOSECONDS.toMillis(readerIdleTimeNanos); + } + + /** + * Return the writerIdleTime that was given when instance this class in milliseconds. + */ + public long getWriterIdleTimeInMillis() { + return TimeUnit.NANOSECONDS.toMillis(writerIdleTimeNanos); + } + + /** + * Return the allIdleTime that was given when instance this class in milliseconds. + */ + public long getAllIdleTimeInMillis() { + return TimeUnit.NANOSECONDS.toMillis(allIdleTimeNanos); + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + if (ctx.channel().isActive() && ctx.channel().isRegistered()) { + // channelActive() event has been fired already, which means this.channelActive() will + // not be invoked. We have to initialize here instead. + initialize(ctx); + } else { + // channelActive() event has not been fired yet. this.channelActive() will be invoked + // and initialization will occur there. + } + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + destroy(); + } + + @Override + public void channelRegistered(ChannelHandlerContext ctx) throws Exception { + // Initialize early if channel is active already. + if (ctx.channel().isActive()) { + initialize(ctx); + } + super.channelRegistered(ctx); + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + // This method will be invoked only if this doHandler was added + // before channelActive() event is fired. If a user adds this doHandler + // after the channelActive() event, initialize() will be called by beforeAdd(). + initialize(ctx); + super.channelActive(ctx); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + destroy(); + super.channelInactive(ctx); + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + if (readerIdleTimeNanos > 0 || allIdleTimeNanos > 0) { + reading = true; + firstReaderIdleEvent = firstAllIdleEvent = true; + } + ctx.fireChannelRead(msg); + System.out.println("channelRead"); + } + + @Override + public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { + if ((readerIdleTimeNanos > 0 || allIdleTimeNanos > 0) && reading) { + lastReadTime = ticksInNanos(); + reading = false; + } + ctx.fireChannelReadComplete(); + System.out.println("channelReadComplete"); + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + // Allow writing with void promise if doHandler is only configured for read timeout events. + if (writerIdleTimeNanos > 0 || allIdleTimeNanos > 0) { + ctx.write(msg, promise.unvoid()).addListener(writeListener); + } else { + ctx.write(msg, promise); + } + System.out.println("write"); + } + + private void initialize(ChannelHandlerContext ctx) { + // Avoid the case where destroy() is called before scheduling timeouts. + // See: https://github.com/netty/netty/issues/143 + switch (state) { + case 1: + case 2: + return; + default: + break; + } + + state = 1; + initOutputChanged(ctx); + + lastReadTime = lastWriteTime = ticksInNanos(); + if (readerIdleTimeNanos > 0) { + readerIdleTimeout = schedule(ctx, new ReaderIdleTimeoutTask(ctx), + readerIdleTimeNanos, TimeUnit.NANOSECONDS); + } + if (writerIdleTimeNanos > 0) { + writerIdleTimeout = schedule(ctx, new WriterIdleTimeoutTask(ctx), + writerIdleTimeNanos, TimeUnit.NANOSECONDS); + } + if (allIdleTimeNanos > 0) { + allIdleTimeout = schedule(ctx, new AllIdleTimeoutTask(ctx), + allIdleTimeNanos, TimeUnit.NANOSECONDS); + } + } + + /** + * This method is visible for testing! + */ + long ticksInNanos() { + return System.nanoTime(); + } + + /** + * This method is visible for testing! + */ + Future schedule(ChannelHandlerContext ctx, Runnable task, long delay, TimeUnit unit) { + return ctx.executor().schedule(task, delay, unit); + } + + private void destroy() { + state = 2; + + if (readerIdleTimeout != null) { + readerIdleTimeout.cancel(false); + readerIdleTimeout = null; + } + if (writerIdleTimeout != null) { + writerIdleTimeout.cancel(false); + writerIdleTimeout = null; + } + if (allIdleTimeout != null) { + allIdleTimeout.cancel(false); + allIdleTimeout = null; + } + } + + /** + * Is called when an {@link IdleStateEvent} should be fired. This implementation calls + * {@link ChannelHandlerContext#fireUserEventTriggered(Object)}. + */ + protected void channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt) throws Exception { + ctx.fireUserEventTriggered(evt); + } + + /** + * Returns a {@link IdleStateEvent}. + */ + protected IdleStateEvent newIdleStateEvent(IdleState state, boolean first) { + switch (state) { + case ALL_IDLE: + return first ? IdleStateEvent.FIRST_ALL_IDLE_STATE_EVENT : IdleStateEvent.ALL_IDLE_STATE_EVENT; + case READER_IDLE: + return first ? IdleStateEvent.FIRST_READER_IDLE_STATE_EVENT : IdleStateEvent.READER_IDLE_STATE_EVENT; + case WRITER_IDLE: + return first ? IdleStateEvent.FIRST_WRITER_IDLE_STATE_EVENT : IdleStateEvent.WRITER_IDLE_STATE_EVENT; + default: + throw new IllegalArgumentException("Unhandled: state=" + state + ", first=" + first); + } + } + + /** + * @see #hasOutputChanged(ChannelHandlerContext, boolean) + */ + private void initOutputChanged(ChannelHandlerContext ctx) { + if (observeOutput) { + Channel channel = ctx.channel(); + Channel.Unsafe unsafe = channel.unsafe(); + ChannelOutboundBuffer buf = unsafe.outboundBuffer(); + + if (buf != null) { + lastMessageHashCode = System.identityHashCode(buf.current()); + lastPendingWriteBytes = buf.totalPendingWriteBytes(); + lastFlushProgress = buf.currentProgress(); + } + } + } + + /** + * Returns {@code true} if and only if the {@link IdleStateHandler} was constructed + * with {@link #observeOutput} enabled and there has been an observed change in the + * {@link ChannelOutboundBuffer} between two consecutive calls of this method. + *

+ * https://github.com/netty/netty/issues/6150 + */ + private boolean hasOutputChanged(ChannelHandlerContext ctx, boolean first) { + if (observeOutput) { + + // We can take this shortcut if the ChannelPromises that got passed into write() + // appear to complete. It indicates "change" on message level and we simply assume + // that there's change happening on byte level. If the user doesn't observe channel + // writability events then they'll eventually OOME and there's clearly a different + // problem and idleness is least of their concerns. + if (lastChangeCheckTimeStamp != lastWriteTime) { + lastChangeCheckTimeStamp = lastWriteTime; + + // But this applies only if it's the non-first call. + if (!first) { + return true; + } + } + + Channel channel = ctx.channel(); + Channel.Unsafe unsafe = channel.unsafe(); + ChannelOutboundBuffer buf = unsafe.outboundBuffer(); + + if (buf != null) { + int messageHashCode = System.identityHashCode(buf.current()); + long pendingWriteBytes = buf.totalPendingWriteBytes(); + + if (messageHashCode != lastMessageHashCode || pendingWriteBytes != lastPendingWriteBytes) { + lastMessageHashCode = messageHashCode; + lastPendingWriteBytes = pendingWriteBytes; + + if (!first) { + return true; + } + } + + long flushProgress = buf.currentProgress(); + if (flushProgress != lastFlushProgress) { + lastFlushProgress = flushProgress; + return !first; + } + } + } + + return false; + } + + private abstract static class AbstractIdleTask implements Runnable { + + private final ChannelHandlerContext ctx; + + AbstractIdleTask(ChannelHandlerContext ctx) { + this.ctx = ctx; + } + + @Override + public void run() { + if (!ctx.channel().isOpen()) { + return; + } + + run(ctx); + } + + protected abstract void run(ChannelHandlerContext ctx); + } + + private final class ReaderIdleTimeoutTask extends AbstractIdleTask { + + ReaderIdleTimeoutTask(ChannelHandlerContext ctx) { + super(ctx); + } + + @Override + protected void run(ChannelHandlerContext ctx) { + long nextDelay = readerIdleTimeNanos; + if (!reading) { + nextDelay -= ticksInNanos() - lastReadTime; + } + + if (nextDelay <= 0) { + // Reader is idle - set a new timeout and notify the callback. + readerIdleTimeout = schedule(ctx, this, readerIdleTimeNanos, TimeUnit.NANOSECONDS); + + boolean first = firstReaderIdleEvent; + firstReaderIdleEvent = false; + + try { + IdleStateEvent event = newIdleStateEvent(IdleState.READER_IDLE, first); + channelIdle(ctx, event); + } catch (Throwable t) { + ctx.fireExceptionCaught(t); + } + } else { + // Read occurred before the timeout - set a new timeout with shorter delay. + readerIdleTimeout = schedule(ctx, this, nextDelay, TimeUnit.NANOSECONDS); + } + } + } + + private final class WriterIdleTimeoutTask extends AbstractIdleTask { + + WriterIdleTimeoutTask(ChannelHandlerContext ctx) { + super(ctx); + } + + @Override + protected void run(ChannelHandlerContext ctx) { + + long lastWriteTime = LazyServerIdleStateHandler.this.lastWriteTime; + long nextDelay = writerIdleTimeNanos - (ticksInNanos() - lastWriteTime); + if (nextDelay <= 0) { + // Writer is idle - set a new timeout and notify the callback. + writerIdleTimeout = schedule(ctx, this, writerIdleTimeNanos, TimeUnit.NANOSECONDS); + + boolean first = firstWriterIdleEvent; + firstWriterIdleEvent = false; + + try { + if (hasOutputChanged(ctx, first)) { + return; + } + + IdleStateEvent event = newIdleStateEvent(IdleState.WRITER_IDLE, first); + channelIdle(ctx, event); + } catch (Throwable t) { + ctx.fireExceptionCaught(t); + } + } else { + // Write occurred before the timeout - set a new timeout with shorter delay. + writerIdleTimeout = schedule(ctx, this, nextDelay, TimeUnit.NANOSECONDS); + } + } + } + + private final class AllIdleTimeoutTask extends AbstractIdleTask { + + AllIdleTimeoutTask(ChannelHandlerContext ctx) { + super(ctx); + } + + @Override + protected void run(ChannelHandlerContext ctx) { + + long nextDelay = allIdleTimeNanos; + if (!reading) { + nextDelay -= ticksInNanos() - Math.max(lastReadTime, lastWriteTime); + } + if (nextDelay <= 0) { + // Both reader and writer are idle - set a new timeout and + // notify the callback. + allIdleTimeout = schedule(ctx, this, allIdleTimeNanos, TimeUnit.NANOSECONDS); + + boolean first = firstAllIdleEvent; + firstAllIdleEvent = false; + + try { + if (hasOutputChanged(ctx, first)) { + return; + } + + IdleStateEvent event = newIdleStateEvent(IdleState.ALL_IDLE, first); + channelIdle(ctx, event); + } catch (Throwable t) { + ctx.fireExceptionCaught(t); + } + } else { + // Either read or write occurred before the timeout - set a new + // timeout with shorter delay. + allIdleTimeout = schedule(ctx, this, nextDelay, TimeUnit.NANOSECONDS); + } + } + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/NettyServerHandler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/NettyServerHandler.java new file mode 100644 index 00000000..daae6e2f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/NettyServerHandler.java @@ -0,0 +1,133 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.handler; + +import io.netty.channel.*; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; +import lombok.extern.slf4j.Slf4j; +import org.wu.framework.core.utils.ObjectUtils; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyCommunicationIdContext; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.common.NettyRealIdContext; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelTypeAdapter; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; + +/** + * description 服务端数据处理器 + * + * @author 吴佳伟 + * @date 2023/09/13 10:27 + */ +@Slf4j +public class NettyServerHandler extends SimpleChannelInboundHandler { + + private final ChannelTypeAdapter channelTypeAdapter; + /** + * 空闲次数 + */ + private int idle_count = 1; + + public NettyServerHandler(ChannelTypeAdapter channelTypeAdapter) { + this.channelTypeAdapter = channelTypeAdapter; + } + + /** + * Is called for each message of type {@link I}. + * + * @param ctx the {@link ChannelHandlerContext} which this {@link SimpleChannelInboundHandler} + * belongs to + * @param nettyMsg the message to handle + * @throws Exception is thrown if an error occurred + */ + @Override + protected void channelRead0(ChannelHandlerContext ctx, NettyProxyMsg nettyMsg) throws Exception { + // 客户端读取到代理过来的数据了 + Channel channel = ctx.channel(); + byte type = nettyMsg.getType(); +// byte[] data = nettyMsg.getData(); +// log.info("客户端发送数据类型:{},发送数据:{}", type, new String(data)); + channelTypeAdapter.handler(channel, nettyMsg); + + } + + /** + * 超时处理 * 如果5秒没有接受客户端的心跳,就触发; * 如果超过两次,则直接关闭; + */ + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object obj) throws Exception { + Channel channel = ctx.channel(); + if (obj instanceof IdleStateEvent event) { + if (IdleState.READER_IDLE.equals(event.state())) { //如果读通道处于空闲状态,说明没有接收到心跳命令 + String clientId = ChannelAttributeKeyUtils.getClientId(channel); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(channel); + // 已经5秒没有接收到客户端:{}的信息了 + log.warn("I haven't received any information from client: {} for 5 seconds", clientId); + if (idle_count > 2) { + + if (ObjectUtils.isEmpty(visitorId)) { + // 关闭这个不活跃的channel client:{} + log.warn("Close this inactive channel client: {}", clientId); + // 给所有客户端发送 这个客户端离线了 + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setClientId(clientId); + nettyMsg.setType(MessageType.REPORT_CLIENT_DISCONNECTION); + channelTypeAdapter.handler(channel, nettyMsg); + channel.close(); + } else { + log.warn("Close visitor: [{}]'s connection", visitorId); + NettyCommunicationIdContext.clear(visitorId); + NettyRealIdContext.clear(visitorId); + } + + } + idle_count++; + } + } else { + super.userEventTriggered(ctx, obj); + } + } + + + /** + * Calls {@link ChannelHandlerContext#fireChannelInactive()} to forward + * to the next {@link ChannelInboundHandler} in the {@link ChannelPipeline}. + *

+ * Sub-classes may override this method to change behavior. + * + * @param ctx + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + boolean open = channel.isOpen(); + // 下发当前客户端通道断开连接 + + String clientId = ChannelAttributeKeyUtils.getClientId(channel); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(channel); + + if (!ObjectUtils.isEmpty(visitorId)) { + // 客户端:{},断开访客的连接:{} + log.warn("Client: {}, disconnect guest: {}", clientId, visitorId); + // 访客通道 关闭访客通道 + NettyCommunicationIdContext.clear(visitorId); + super.channelInactive(ctx); + } else if (!ObjectUtils.isEmpty(clientId)) { + // 断开客户端的连接:{} + log.warn("Disconnect client: {}", clientId); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setType(MessageType.REPORT_CLIENT_DISCONNECTION); + nettyMsg.setClientId(clientId); + channelTypeAdapter.handler(channel, nettyMsg); + super.channelInactive(ctx); + } + + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { +// super.exceptionCaught(ctx, cause); + Channel channel = ctx.channel(); + //…… + if (channel.isActive()) ctx.close(); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/VisitorHandler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/VisitorHandler.java new file mode 100644 index 00000000..5941182a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/handler/VisitorHandler.java @@ -0,0 +1,181 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.handler; + + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOption; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.util.internal.StringUtil; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.*; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.smart.agent.network.heartbeat.common.enums.ChannelFlowEnum; +import org.framework.smart.agent.network.heartbeat.common.utils.ChannelAttributeKeyUtils; +import org.framework.smart.agent.network.heartbeat.server.netty.flow.ServerChannelFlow; + +import java.util.UUID; + +@Slf4j +public class VisitorHandler extends SimpleChannelInboundHandler { + private final InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient; + private final ChannelFlowAdapter channelFlowAdapter;// 流量适配器 + + public VisitorHandler(InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient, ChannelFlowAdapter channelFlowAdapter) { + this.internalNetworkPenetrationRealClient = internalNetworkPenetrationRealClient; + this.channelFlowAdapter = channelFlowAdapter; + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + // 访客连接上代理服务器了 + Channel visitorChannel = ctx.channel(); + // 先不读取访客数据 + visitorChannel.config().setOption(ChannelOption.AUTO_READ, false); + + + // 生成访客ID + String visitorId = UUID.randomUUID().toString(); + String clientId = internalNetworkPenetrationRealClient.getClientId(); + Integer visitorPort = internalNetworkPenetrationRealClient.getVisitorPort(); + String clientTargetIp = internalNetworkPenetrationRealClient.getClientTargetIp(); + Integer clientTargetPort = internalNetworkPenetrationRealClient.getClientTargetPort(); + // 绑定访客真实通道 + NettyRealIdContext.pushReal(visitorChannel, visitorId); + // 当前通道绑定访客ID + ChannelAttributeKeyUtils.buildVisitorId(visitorChannel, visitorId); + ChannelAttributeKeyUtils.buildClientId(visitorChannel, clientId); + NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); + nettyProxyMsg.setType(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT); + nettyProxyMsg.setClientId(clientId); + nettyProxyMsg.setVisitorPort(visitorPort); + nettyProxyMsg.setClientTargetIp(clientTargetIp); + nettyProxyMsg.setClientTargetPort(clientTargetPort); + + nettyProxyMsg.setVisitorId(visitorId); + + // 客户端心跳通道 + ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId); + if (clientChannel != null) { + log.info("通过客户端:{},获取通道而后创建连接", clientId); + Channel channel = clientChannel.getChannel(); + channel.writeAndFlush(nettyProxyMsg); + } else { + log.error("无法通过客户端ID获取客户端通道"); + } + + + // 等待访客ID传输到客户端后绑定客户端真实服务后开启 + + + log.info("服务端访客端口连接成功了"); + super.channelActive(ctx); + } + + @Override + public void channelRead0(ChannelHandlerContext ctx, ByteBuf buf) { + + Channel realChannel = ctx.channel(); + String clientId = internalNetworkPenetrationRealClient.getClientId(); + String clientTargetIp = internalNetworkPenetrationRealClient.getClientTargetIp(); + Integer clientTargetPort = internalNetworkPenetrationRealClient.getClientTargetPort(); + Integer visitorPort = internalNetworkPenetrationRealClient.getVisitorPort(); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(realChannel); + if (StringUtil.isNullOrEmpty(clientId)) { + return; + } + byte[] bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + // 获取客户端通道,而后进行数据下发 + log.debug("服务端访客端口成功接收数据:{}", new String(bytes)); + + // 使用访客的通信通道 + Channel visitorCommunicationChannel = NettyCommunicationIdContext.getVisitor(visitorId); + // 绑定数据流量 + ChannelAttributeKeyUtils.buildInFlow(visitorCommunicationChannel, bytes.length); + NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); + nettyProxyMsg.setType(MessageType.DISTRIBUTE_CLIENT_TRANSFER); + nettyProxyMsg.setClientId(clientId); + nettyProxyMsg.setClientTargetIp(clientTargetIp); + nettyProxyMsg.setClientTargetPort(clientTargetPort); + nettyProxyMsg.setVisitorPort(visitorPort); + nettyProxyMsg.setVisitorId(visitorId); + nettyProxyMsg.setData(bytes); + visitorCommunicationChannel.writeAndFlush(nettyProxyMsg); + // 处理访客流量 + ServerChannelFlow serverChannelFlow = ServerChannelFlow + .builder() + .channelFlowEnum(ChannelFlowEnum.IN_FLOW) + .port(visitorPort) + .clientId(clientId) + .flow(bytes.length) + .build(); + channelFlowAdapter.handler(realChannel, serverChannelFlow); + log.debug("服务端访客端口成功发送数据了"); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel()); + if (StringUtil.isNullOrEmpty(visitorId)) { + super.channelInactive(ctx); + return; + } + // 通信通道自动读写打开 ,然后关闭通信通道 + Channel visitorChannel = NettyCommunicationIdContext.getVisitor(visitorId); + if (visitorChannel != null && visitorChannel.isActive()) { + + visitorChannel.config().setOption(ChannelOption.AUTO_READ, true); + + // 通知服务端 关闭访问通道、真实通道 + NettyProxyMsg myMsg = new NettyProxyMsg(); + myMsg.setType(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CLOSE_VISITOR); + myMsg.setVisitorId(visitorId); + visitorChannel.writeAndFlush(myMsg); + } + // 关闭 访客通信通道、访客真实通道 + NettyRealIdContext.clear(visitorId); + NettyCommunicationIdContext.clear(visitorId); + log.warn("服务端访客端口断开连接"); + super.channelInactive(ctx); + } + + @Override + public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception { + +// Channel visitorChannel = ctx.channel(); +// String vid = visitorChannel.attr(Constant.VID).get(); +// if (StringUtil.isNullOrEmpty(vid)) { +// super.channelWritabilityChanged(ctx); +// return; +// } +// Channel clientChannel = Constant.vcc.get(vid); +// if (clientChannel != null) { +// clientChannel.config().setOption(ChannelOption.AUTO_READ, visitorChannel.isWritable()); +// } + log.info("channelWritabilityChanged"); + super.channelWritabilityChanged(ctx); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + log.error("exceptionCaught"); + + Channel channel = ctx.channel(); + String clientId = ChannelAttributeKeyUtils.getClientId(channel); + String visitorId = ChannelAttributeKeyUtils.getVisitorId(channel); + // 使用通信通道 下发关闭访客 + Channel visitorChannel = NettyCommunicationIdContext.getVisitor(visitorId); + if (visitorChannel != null) { + // 下发关闭访客 + NettyProxyMsg closeRealClient = new NettyProxyMsg(); + closeRealClient.setType(MessageType.DISTRIBUTE_SINGLE_CLIENT_REAL_CONNECT_AUTO_READ); + closeRealClient.setClientId(clientId); + closeRealClient.setVisitorId(visitorId); + visitorChannel.writeAndFlush(closeRealClient); + } + + ctx.close(); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/socket/NettyOnCloudNettyServerSocket.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/socket/NettyOnCloudNettyServerSocket.java new file mode 100644 index 00000000..f534bf08 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/socket/NettyOnCloudNettyServerSocket.java @@ -0,0 +1,61 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.socket; + + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.framework.smart.agent.network.heartbeat.server.netty.filter.NettyServerFilter; + +public class NettyOnCloudNettyServerSocket { + private final EventLoopGroup bossGroup = new NioEventLoopGroup(); + private final EventLoopGroup workerGroup = new NioEventLoopGroup(); + private final NettyServerFilter nettyServerFilter;// 通道业务处理 + private ChannelFuture channelFuture; + + public NettyOnCloudNettyServerSocket(NettyServerFilter nettyServerFilter) { + this.nettyServerFilter = nettyServerFilter; + } + + /** + * 启动服务端 + * + * @throws Exception + */ + public void startServer(int serverPort) throws Exception { + try { + + ServerBootstrap b = new ServerBootstrap(); + b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) + // 给服务端channel设置属性 + .option(ChannelOption.SO_BACKLOG, 128) + + .childOption(ChannelOption.SO_KEEPALIVE, true) + .childHandler(nettyServerFilter); + channelFuture = b.bind(serverPort).sync(); + + channelFuture.addListener((ChannelFutureListener) channelFuture -> { + // 服务器已启动 + }); + channelFuture.channel().closeFuture().sync(); + } finally { + shutdown(); + // 服务器已关闭 + } + } + + public void shutdown() { + if (channelFuture != null) { + channelFuture.channel().close().syncUninterruptibly(); + } + if ((bossGroup != null) && (!bossGroup.isShutdown())) { + bossGroup.shutdownGracefully(); + } + if ((workerGroup != null) && (!workerGroup.isShutdown())) { + workerGroup.shutdownGracefully(); + } + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/socket/NettyVisitorSocket.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/socket/NettyVisitorSocket.java new file mode 100644 index 00000000..3cf49d09 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/netty/socket/NettyVisitorSocket.java @@ -0,0 +1,225 @@ +package org.framework.smart.agent.network.heartbeat.server.netty.socket; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.*; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.InternalNetworkPenetrationRealClient; +import org.framework.smart.agent.network.heartbeat.common.NettyClientVisitorContext; +import org.framework.smart.agent.network.heartbeat.common.NettyVisitorPortContext; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.smart.agent.network.heartbeat.server.netty.filter.VisitorFilter; + +import java.io.IOException; + +/** + * 访客链接socket + * + * @see NettyVisitorPortContext + * @see NettyClientVisitorContext + */ +@Slf4j +public class NettyVisitorSocket { + private final EventLoopGroup bossGroup = new NioEventLoopGroup(); + private final EventLoopGroup workerGroup = new NioEventLoopGroup(); + private final VisitorFilter visitorFilter; + @Getter + private final String clientId; + @Getter + private final int visitorPort; + + public NettyVisitorSocket(VisitorFilter visitorFilter, String clientId, int visitorPort) { + this.visitorFilter = visitorFilter; + this.clientId = clientId; + this.visitorPort = visitorPort; + } + + /** + * 启动服务代理 + * + * @throws Exception + */ + public void startServer() throws Exception { + + Channel visitor = NettyVisitorPortContext.getVisitor(visitorPort); + if (visitor == null) { + ServerBootstrap b = new ServerBootstrap(); + b + .group(bossGroup, workerGroup) + .childOption(ChannelOption.SO_KEEPALIVE, true) + .channel(NioServerSocketChannel.class) + .childHandler(visitorFilter); + ChannelFuture sync = b.bind(visitorPort).sync(); + sync.addListener((ChannelFutureListener) future -> { + if (future.isSuccess()) { + // 这里时异步处理 + log.info("客户端:[{}]访客端口:[{}] 开启", clientId, visitorPort); + NettyVisitorPortContext.pushVisitor(visitorPort, future.channel()); + + } else { + log.error("客户端:[{}]访客端口:[{}]绑定失败", clientId, visitorPort); + } + }); + NettyClientVisitorContext.pushVisitorSocket(clientId, this); + } else { + log.warn("客户端:[{}]访客端口:[{}] 重复启动", clientId, visitorPort); + } + + } + + public void close() throws IOException, InterruptedException { + if (!bossGroup.isShutdown()) { + bossGroup.shutdownGracefully(); + } + if (!workerGroup.isShutdown()) { + workerGroup.shutdownGracefully(); + } + Channel visitor = NettyVisitorPortContext.getVisitor(visitorPort); + if (visitor != null) { + + // close channel + visitor.close(); + // remove visitor + NettyVisitorPortContext.removeVisitor(visitorPort); + // remove client this + NettyClientVisitorContext.removeVisitorSocket(clientId,this); + log.warn("关闭客户端 :【{}】 访客户端口:【{}】", clientId, visitorPort); + } else { + log.warn("关闭访客端口失败 未找到客户端通道 客户端 :【{}】 访客户端口:【{}】", clientId, visitorPort); + } + } + + + public static final class NettyVisitorSocketBuilder { + + /** + * 客户端ID + */ + private String clientId; + + /** + * 客户端目标地址 + */ + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + private Integer clientTargetPort; + + + /** + * 访问端口 + */ + private Integer visitorPort; + /** + * 访客ID + */ + private String visitorId; + + /** + * 流量适配器 + */ + private ChannelFlowAdapter channelFlowAdapter; + + public static NettyVisitorSocketBuilder builder() { + return new NettyVisitorSocketBuilder(); + } + + /** + * 填充客户端 + * + * @param clientId 客户端 + * @return 返回当前对象 + */ + public NettyVisitorSocketBuilder builderClientId(String clientId) { + this.clientId = clientId; + return this; + } + + /** + * 绑定客户端目标IP + * + * @param clientTargetIp 客户端目标IP + * @return 当前对象 + */ + public NettyVisitorSocketBuilder builderClientTargetIp(String clientTargetIp) { + this.clientTargetIp = clientTargetIp; + return this; + } + + /** + * 绑定客户端目标端口 + * + * @param clientTargetPort 客户端目标端口 + * @return 当前对象 + */ + public NettyVisitorSocketBuilder builderClientTargetPort(Integer clientTargetPort) { + this.clientTargetPort = clientTargetPort; + return this; + } + + /** + * 绑定访客端口 + * + * @param visitorPort 访客端口 + * @return 当前对象 + */ + public NettyVisitorSocketBuilder builderVisitorPort(Integer visitorPort) { + this.visitorPort = visitorPort; + return this; + } + + /** + * 绑定流量适配器 + * + * @param channelFlowAdapter 流量适配器 + * @return 当前对象 + */ + public NettyVisitorSocketBuilder builderChannelFlowAdapter(ChannelFlowAdapter channelFlowAdapter) { + this.channelFlowAdapter = channelFlowAdapter; + return this; + } + + /** + * 绑定访客ID + * + * @param visitorId 访客ID + * @return 当前对象 + */ + public NettyVisitorSocketBuilder builderVisitorId(String visitorId) { + this.visitorId = visitorId; + return this; + } + + public NettyVisitorSocket build() { + if (clientId == null) { + throw new IllegalArgumentException("clientId must not null"); + } + if (clientTargetIp == null) { + throw new IllegalArgumentException("clientTargetIp must not null"); + } + if (clientTargetPort == null) { + throw new IllegalArgumentException("clientTargetPort must not null"); + } + if (visitorPort == null) { + throw new IllegalArgumentException("visitorPort must not null"); + } + InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient = InternalNetworkPenetrationRealClient + .builder() + .clientId(clientId) + .clientTargetIp(clientTargetIp) + .clientTargetPort(clientTargetPort) + .visitorPort(visitorPort) + .visitorId(visitorId).build(); + + VisitorFilter visitorFilter = new VisitorFilter(internalNetworkPenetrationRealClient, channelFlowAdapter); + return new NettyVisitorSocket(visitorFilter, clientId, visitorPort); + } + + + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/properties/ServerNodeProperties.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/properties/ServerNodeProperties.java new file mode 100644 index 00000000..262a3183 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/properties/ServerNodeProperties.java @@ -0,0 +1,39 @@ +package org.framework.smart.agent.network.heartbeat.server.properties; + +import lombok.Data; +import org.framework.smart.agent.network.heartbeat.common.enums.NetWorkMode; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * 服务端模式配置 + */ +@Configuration +@ConfigurationProperties(prefix = ServerNodeProperties.prefix) +@Data +public class ServerNodeProperties { + public static final String prefix = "spring.lazy.netty.server"; + + /** + * 模式 默认单机版 + */ + private NetWorkMode mode = NetWorkMode.STANDALONE; + + /** + * + * 集群节点host + */ + private String nodeHost; + + /** + * + * 集群节点ID + */ + private String nodeId; + + /** + * + * 集群节点端口 + */ + private Integer nodePort; +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyClientStatsChangeApplication.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyClientStatsChangeApplication.java new file mode 100644 index 00000000..40f2f3c9 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyClientStatsChangeApplication.java @@ -0,0 +1,38 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application; + +/** + * 云下心跳客户端操作 nacos 配置 + */ +public interface LazyClientStatsChangeApplication { + + + /** + * 客户端在线 + * + * @param clientId 客户端ID + */ + void clientOnLine(String clientId); + + /** + * 客户端离线 + * + * @param clientId 客户端ID + */ + void clientOffLine(String clientId); + + /** + * 客户端暂存关闭 + * + * @param clientId 客户端ID + */ + void stagingClosed(String clientId); + + + /** + * 客户端暂存开启 + * + * @param clientId 客户端ID + */ + void stagingOpened(String clientId); + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyInternalNetworkPenetrationMappingApplication.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyInternalNetworkPenetrationMappingApplication.java new file mode 100644 index 00000000..0f91ec4e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyInternalNetworkPenetrationMappingApplication.java @@ -0,0 +1,107 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application; + + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyInternalNetworkPenetrationMappingDTO; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping.LazyInternalNetworkPenetrationMapping; + +import java.util.List; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyApplication + **/ + +public interface LazyInternalNetworkPenetrationMappingApplication { + + + /** + * describe 新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingStoryCommand 新增内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result story(LazyInternalNetworkPenetrationMappingStoryCommand lazyInternalNetworkPenetrationMappingStoryCommand) ; + + /** + * describe 批量新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingStoryCommandList 批量新增内网穿透映射 + * @return {@link Result>} 内网穿透映射新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result> batchStory(List lazyInternalNetworkPenetrationMappingStoryCommandList); + + /** + * describe 更新内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingUpdateCommand 更新内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result updateOne(LazyInternalNetworkPenetrationMappingUpdateCommand lazyInternalNetworkPenetrationMappingUpdateCommand) ; + + /** + * describe 查询单个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryOneCommand 查询单个内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMappingDTO >} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result findOne(LazyInternalNetworkPenetrationMappingQueryOneCommand lazyInternalNetworkPenetrationMappingQueryOneCommand); + + /** + * describe 查询多个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryListCommand 查询多个内网穿透映射 + * @return {@link Result >} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result> findList(LazyInternalNetworkPenetrationMappingQueryListCommand lazyInternalNetworkPenetrationMappingQueryListCommand); + + /** + * describe 分页查询多个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryListCommand 分页查询多个内网穿透映射 + * @return {@link Result >} 分页内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result> findPage(int size, int current, LazyInternalNetworkPenetrationMappingQueryListCommand lazyInternalNetworkPenetrationMappingQueryListCommand); + + /** + * describe 删除内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingRemoveCommand 删除内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result remove(LazyInternalNetworkPenetrationMappingRemoveCommand lazyInternalNetworkPenetrationMappingRemoveCommand); + + /** + * 创建客户端的访问者 + * + * @param clientId 客户端ID + */ + Result createVisitor(String clientId); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyClientBlacklistApplication.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyClientBlacklistApplication.java new file mode 100644 index 00000000..de910712 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyClientBlacklistApplication.java @@ -0,0 +1,110 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyClientBlacklistDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist.*; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklist; + +import java.util.List; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyApplication + **/ + +public interface LazyNettyClientBlacklistApplication { + + + /** + * describe 新增客户端黑名单 + * + * @param lazyNettyClientBlacklistStoryCommand 新增客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result story(LazyNettyClientBlacklistStoryCommand lazyNettyClientBlacklistStoryCommand); + + /** + * describe 批量新增客户端黑名单 + * + * @param lazyNettyClientBlacklistStoryCommandList 批量新增客户端黑名单 + * @return {@link Result>} 客户端黑名单新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> batchStory(List lazyNettyClientBlacklistStoryCommandList); + + /** + * describe 更新客户端黑名单 + * + * @param lazyNettyClientBlacklistUpdateCommand 更新客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result updateOne(LazyNettyClientBlacklistUpdateCommand lazyNettyClientBlacklistUpdateCommand); + + /** + * describe 查询单个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryOneCommand 查询单个客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklistDTO >} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result findOne(LazyNettyClientBlacklistQueryOneCommand lazyNettyClientBlacklistQueryOneCommand); + + /** + * describe 查询多个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryListCommand 查询多个客户端黑名单 + * @return {@link Result >} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findList(LazyNettyClientBlacklistQueryListCommand lazyNettyClientBlacklistQueryListCommand); + + /** + * describe 分页查询多个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryListCommand 分页查询多个客户端黑名单 + * @return {@link Result >} 分页客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findPage(int size, int current, LazyNettyClientBlacklistQueryListCommand lazyNettyClientBlacklistQueryListCommand); + + /** + * describe 删除客户端黑名单 + * + * @param lazyNettyClientBlacklistRemoveCommand 删除客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result remove(LazyNettyClientBlacklistRemoveCommand lazyNettyClientBlacklistRemoveCommand); + + /** + * describe 是否存在客户端黑名单 + * + * @param lazyNettyClientBlacklist 是否存在客户端黑名单 + * @return {@link Result} 客户端黑名单是否存在 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result exists(LazyNettyClientBlacklist lazyNettyClientBlacklist); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyClientStateApplication.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyClientStateApplication.java new file mode 100644 index 00000000..9766fbe6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyClientStateApplication.java @@ -0,0 +1,109 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application; + + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientState; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication; + + +import java.util.List; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyApplication + **/ + +public interface LazyNettyClientStateApplication { + + + /** + * describe 新增客户端状态 + * + * @param lazyNettyClientStateStoryCommand 新增客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result story(LazyNettyClientStateStoryCommand lazyNettyClientStateStoryCommand); + + /** + * describe 批量新增客户端状态 + * + * @param lazyNettyClientStateStoryCommandList 批量新增客户端状态 + * @return {@link Result>} 客户端状态新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> batchStory(List lazyNettyClientStateStoryCommandList); + + /** + * describe 更新客户端状态 + * + * @param lazyNettyClientStateUpdateCommand 更新客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result updateOne(LazyNettyClientStateUpdateCommand lazyNettyClientStateUpdateCommand); + + /** + * describe 查询单个客户端状态 + * + * @param lazyNettyClientStateQueryOneCommand 查询单个客户端状态 + * @return {@link Result< LazyNettyClientStateDTO >} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result findOne(LazyNettyClientStateQueryOneCommand lazyNettyClientStateQueryOneCommand); + + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 查询多个客户端状态 + * @return {@link Result >} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findList(LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand); + + /** + * describe 分页查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 分页查询多个客户端状态 + * @return {@link Result >} 分页客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findPage(int size, int current, LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand); + + /** + * describe 删除客户端状态 + * + * @param lazyNettyClientStateRemoveCommand 删除客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result remove(LazyNettyClientStateRemoveCommand lazyNettyClientStateRemoveCommand); + + /** + * 通过客户端心跳通道发送客户端请求 + * + * @param lazyNettyClientMessageCommand 发送请求到客户端 + * @return {@link Result} + */ + Result sendMessage2HeartbeatClient(LazyNettyClientMessageCommand lazyNettyClientMessageCommand); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyServerVisitorApplication.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyServerVisitorApplication.java new file mode 100644 index 00000000..3621fcfe --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyNettyServerVisitorApplication.java @@ -0,0 +1,101 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyServerVisitorDTO; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor.LazyNettyServerVisitor; + +import java.util.List; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyApplication + **/ + +public interface LazyNettyServerVisitorApplication { + + + /** + * describe 新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorStoryCommand 新增服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result story(LazyNettyServerVisitorStoryCommand lazyNettyServerVisitorStoryCommand); + + /** + * describe 批量新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorStoryCommandList 批量新增服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result> batchStory(List lazyNettyServerVisitorStoryCommandList); + + /** + * describe 更新服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorUpdateCommand 更新服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result updateOne(LazyNettyServerVisitorUpdateCommand lazyNettyServerVisitorUpdateCommand); + + /** + * describe 查询单个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryOneCommand 查询单个服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitorDTO >} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result findOne(LazyNettyServerVisitorQueryOneCommand lazyNettyServerVisitorQueryOneCommand); + + /** + * describe 查询多个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryListCommand 查询多个服务端提前开放出来的端口 + * @return {@link Result >} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result> findList(LazyNettyServerVisitorQueryListCommand lazyNettyServerVisitorQueryListCommand); + + /** + * describe 分页查询多个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryListCommand 分页查询多个服务端提前开放出来的端口 + * @return {@link Result >} 分页服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result> findPage(int size, int current, LazyNettyServerVisitorQueryListCommand lazyNettyServerVisitorQueryListCommand); + + /** + * describe 删除服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorRemoveCommand 删除服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result remove(LazyNettyServerVisitorRemoveCommand lazyNettyServerVisitorRemoveCommand); + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyVisitorPortFlowApplication.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyVisitorPortFlowApplication.java new file mode 100644 index 00000000..2ed44605 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyVisitorPortFlowApplication.java @@ -0,0 +1,120 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorPortFlowDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlow; + +import java.util.List; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyApplication + **/ + +public interface LazyVisitorPortFlowApplication { + + + /** + * describe 新增访客端流量 + * + * @param lazyVisitorPortFlowStoryCommand 新增访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result story(LazyVisitorPortFlowStoryCommand lazyVisitorPortFlowStoryCommand); + + /** + * + * 流量增长存储 + * @param lazyVisitorPortFlowStoryCommand + * @return + */ + Result flowIncreaseStory(LazyVisitorPortFlowStoryCommand lazyVisitorPortFlowStoryCommand); + + /** + * describe 批量新增访客端流量 + * + * @param lazyVisitorPortFlowStoryCommandList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> batchStory(List lazyVisitorPortFlowStoryCommandList); + + /** + * describe 更新访客端流量 + * + * @param lazyVisitorPortFlowUpdateCommand 更新访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result updateOne(LazyVisitorPortFlowUpdateCommand lazyVisitorPortFlowUpdateCommand); + + /** + * describe 查询单个访客端流量 + * + * @param lazyVisitorPortFlowQueryOneCommand 查询单个访客端流量 + * @return {@link Result< LazyVisitorPortFlowDTO >} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result findOne(LazyVisitorPortFlowQueryOneCommand lazyVisitorPortFlowQueryOneCommand); + + /** + * describe 查询多个访客端流量 + * + * @param lazyVisitorPortFlowQueryListCommand 查询多个访客端流量 + * @return {@link Result >} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> findList(LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand); + + /** + * describe 分页查询多个访客端流量 + * + * @param lazyVisitorPortFlowQueryListCommand 分页查询多个访客端流量 + * @return {@link Result >} 分页访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> findPage(int size, int current, LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand); + + /** + * describe 删除访客端流量 + * + * @param lazyVisitorPortFlowRemoveCommand 删除访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result remove(LazyVisitorPortFlowRemoveCommand lazyVisitorPortFlowRemoveCommand); + + + /** + * 根据客户端查询流量 + * + * @param size 分页大小 + * @param current 分页 + * @param lazyVisitorPortFlowQueryListCommand 查询条件 + * @return {@link Result>} 分页访客端流量DTO对象 + */ + Result> findClientFlowPage(int size, int current, LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyVisitorPortPerDayFlowApplication.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyVisitorPortPerDayFlowApplication.java new file mode 100644 index 00000000..b37ffeb4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/LazyVisitorPortPerDayFlowApplication.java @@ -0,0 +1,122 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyClientFlowPerDayEchartsDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyClientPortFlowPerDayEchartsDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorPortPerDayFlowDTO; +import org.wu.framework.web.response.Result; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlow; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowRemoveCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowStoryCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowUpdateCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowQueryListCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowQueryOneCommand; + +import java.util.List; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication + **/ + +public interface LazyVisitorPortPerDayFlowApplication { + + + /** + * describe 新增每日统计流量 + * + * @param lazyVisitorPortPerDayFlowStoryCommand 新增每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量新增后领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result story(LazyVisitorPortPerDayFlowStoryCommand lazyVisitorPortPerDayFlowStoryCommand); + + /** + * describe 批量新增每日统计流量 + * + * @param lazyVisitorPortPerDayFlowStoryCommandList 批量新增每日统计流量 + * @return {@link Result>} 每日统计流量新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result> batchStory(List lazyVisitorPortPerDayFlowStoryCommandList); + + /** + * describe 更新每日统计流量 + * + * @param lazyVisitorPortPerDayFlowUpdateCommand 更新每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result updateOne(LazyVisitorPortPerDayFlowUpdateCommand lazyVisitorPortPerDayFlowUpdateCommand); + + /** + * describe 查询单个每日统计流量 + * + * @param lazyVisitorPortPerDayFlowQueryOneCommand 查询单个每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlowDTO >} 每日统计流量DTO对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result findOne(LazyVisitorPortPerDayFlowQueryOneCommand lazyVisitorPortPerDayFlowQueryOneCommand); + + /** + * describe 查询多个每日统计流量 + * + * @param lazyVisitorPortPerDayFlowQueryListCommand 查询多个每日统计流量 + * @return {@link Result >} 每日统计流量DTO对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result > findList(LazyVisitorPortPerDayFlowQueryListCommand lazyVisitorPortPerDayFlowQueryListCommand); + + /** + * describe 分页查询多个每日统计流量 + * + * @param lazyVisitorPortPerDayFlowQueryListCommand 分页查询多个每日统计流量 + * @return {@link Result >} 分页每日统计流量DTO对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result > findPage(int size, int current, LazyVisitorPortPerDayFlowQueryListCommand lazyVisitorPortPerDayFlowQueryListCommand); + + /** + * describe 删除每日统计流量 + * + * @param lazyVisitorPortPerDayFlowRemoveCommand 删除每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result remove(LazyVisitorPortPerDayFlowRemoveCommand lazyVisitorPortPerDayFlowRemoveCommand); + + /** + * 获取客户近七天流量数据 + * @return + */ + Result findClient7DayFlow(); + + /** + * 获取客户流量数据 + * @return + */ + Result findClientPerDayFlow(); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/InternalNetworkPenetrationMappingDTOAssembler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/InternalNetworkPenetrationMappingDTOAssembler.java new file mode 100644 index 00000000..f1e886ca --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/InternalNetworkPenetrationMappingDTOAssembler.java @@ -0,0 +1,88 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyInternalNetworkPenetrationMappingDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping.LazyInternalNetworkPenetrationMapping; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyAssembler + **/ +@Mapper +public interface InternalNetworkPenetrationMappingDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + InternalNetworkPenetrationMappingDTOAssembler INSTANCE = Mappers.getMapper(InternalNetworkPenetrationMappingDTOAssembler.class); + + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param lazyInternalNetworkPenetrationMappingStoryCommand 保存内网穿透映射对象 + * @return {@link LazyInternalNetworkPenetrationMapping} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMapping toInternalNetworkPenetrationMapping(LazyInternalNetworkPenetrationMappingStoryCommand lazyInternalNetworkPenetrationMappingStoryCommand); + + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param lazyInternalNetworkPenetrationMappingUpdateCommand 更新内网穿透映射对象 + * @return {@link LazyInternalNetworkPenetrationMapping} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMapping toInternalNetworkPenetrationMapping(LazyInternalNetworkPenetrationMappingUpdateCommand lazyInternalNetworkPenetrationMappingUpdateCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyInternalNetworkPenetrationMappingQueryOneCommand 查询单个内网穿透映射对象参数 + * @return {@link LazyInternalNetworkPenetrationMapping} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMapping toInternalNetworkPenetrationMapping(LazyInternalNetworkPenetrationMappingQueryOneCommand lazyInternalNetworkPenetrationMappingQueryOneCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyInternalNetworkPenetrationMappingQueryListCommand 查询集合内网穿透映射对象参数 + * @return {@link LazyInternalNetworkPenetrationMapping} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMapping toInternalNetworkPenetrationMapping(LazyInternalNetworkPenetrationMappingQueryListCommand lazyInternalNetworkPenetrationMappingQueryListCommand); + + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param lazyInternalNetworkPenetrationMappingRemoveCommand 删除内网穿透映射对象参数 + * @return {@link LazyInternalNetworkPenetrationMapping} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMapping toInternalNetworkPenetrationMapping(LazyInternalNetworkPenetrationMappingRemoveCommand lazyInternalNetworkPenetrationMappingRemoveCommand); + + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyInternalNetworkPenetrationMapping 内网穿透映射领域对象 + * @return {@link LazyInternalNetworkPenetrationMappingDTO} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMappingDTO fromInternalNetworkPenetrationMapping(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyClientBlacklistDTOAssembler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyClientBlacklistDTOAssembler.java new file mode 100644 index 00000000..d9fc3c5d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyClientBlacklistDTOAssembler.java @@ -0,0 +1,89 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyClientBlacklistDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklist; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyAssembler + **/ +@Mapper +public interface NettyClientBlacklistDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + NettyClientBlacklistDTOAssembler INSTANCE = Mappers.getMapper(NettyClientBlacklistDTOAssembler.class); + + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param lazyNettyClientBlacklistStoryCommand 保存客户端黑名单对象 + * @return {@link LazyNettyClientBlacklist} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklist toNettyClientBlacklist(LazyNettyClientBlacklistStoryCommand lazyNettyClientBlacklistStoryCommand); + + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param lazyNettyClientBlacklistUpdateCommand 更新客户端黑名单对象 + * @return {@link LazyNettyClientBlacklist} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklist toNettyClientBlacklist(LazyNettyClientBlacklistUpdateCommand lazyNettyClientBlacklistUpdateCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyClientBlacklistQueryOneCommand 查询单个客户端黑名单对象参数 + * @return {@link LazyNettyClientBlacklist} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklist toNettyClientBlacklist(LazyNettyClientBlacklistQueryOneCommand lazyNettyClientBlacklistQueryOneCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyClientBlacklistQueryListCommand 查询集合客户端黑名单对象参数 + * @return {@link LazyNettyClientBlacklist} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklist toNettyClientBlacklist(LazyNettyClientBlacklistQueryListCommand lazyNettyClientBlacklistQueryListCommand); + + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param lazyNettyClientBlacklistRemoveCommand 删除客户端黑名单对象参数 + * @return {@link LazyNettyClientBlacklist} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklist toNettyClientBlacklist(LazyNettyClientBlacklistRemoveCommand lazyNettyClientBlacklistRemoveCommand); + + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyNettyClientBlacklist 客户端黑名单领域对象 + * @return {@link LazyNettyClientBlacklistDTO} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklistDTO fromNettyClientBlacklist(LazyNettyClientBlacklist lazyNettyClientBlacklist); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyClientStateDTOAssembler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyClientStateDTOAssembler.java new file mode 100644 index 00000000..46774d31 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyClientStateDTOAssembler.java @@ -0,0 +1,89 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientState; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler; + + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyAssembler + **/ +@Mapper +public interface NettyClientStateDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + NettyClientStateDTOAssembler INSTANCE = Mappers.getMapper(NettyClientStateDTOAssembler.class); + + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param lazyNettyClientStateStoryCommand 保存客户端状态对象 + * @return {@link LazyNettyClientState} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientState toNettyClientState(LazyNettyClientStateStoryCommand lazyNettyClientStateStoryCommand); + + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param lazyNettyClientStateUpdateCommand 更新客户端状态对象 + * @return {@link LazyNettyClientState} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientState toNettyClientState(LazyNettyClientStateUpdateCommand lazyNettyClientStateUpdateCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyClientStateQueryOneCommand 查询单个客户端状态对象参数 + * @return {@link LazyNettyClientState} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientState toNettyClientState(LazyNettyClientStateQueryOneCommand lazyNettyClientStateQueryOneCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyClientStateQueryListCommand 查询集合客户端状态对象参数 + * @return {@link LazyNettyClientState} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientState toNettyClientState(LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand); + + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param lazyNettyClientStateRemoveCommand 删除客户端状态对象参数 + * @return {@link LazyNettyClientState} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientState toNettyClientState(LazyNettyClientStateRemoveCommand lazyNettyClientStateRemoveCommand); + + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyNettyClientState 客户端状态领域对象 + * @return {@link LazyNettyClientStateDTO} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientStateDTO fromNettyClientState(LazyNettyClientState lazyNettyClientState); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyServerVisitorDTOAssembler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyServerVisitorDTOAssembler.java new file mode 100644 index 00000000..84f596c4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/NettyServerVisitorDTOAssembler.java @@ -0,0 +1,89 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyServerVisitorDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor.LazyNettyServerVisitor; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyAssembler + **/ +@Mapper +public interface NettyServerVisitorDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + NettyServerVisitorDTOAssembler INSTANCE = Mappers.getMapper(NettyServerVisitorDTOAssembler.class); + + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param lazyNettyServerVisitorStoryCommand 保存服务端提前开放出来的端口对象 + * @return {@link LazyNettyServerVisitor} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitor toNettyServerVisitor(LazyNettyServerVisitorStoryCommand lazyNettyServerVisitorStoryCommand); + + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param lazyNettyServerVisitorUpdateCommand 更新服务端提前开放出来的端口对象 + * @return {@link LazyNettyServerVisitor} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitor toNettyServerVisitor(LazyNettyServerVisitorUpdateCommand lazyNettyServerVisitorUpdateCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyServerVisitorQueryOneCommand 查询单个服务端提前开放出来的端口对象参数 + * @return {@link LazyNettyServerVisitor} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitor toNettyServerVisitor(LazyNettyServerVisitorQueryOneCommand lazyNettyServerVisitorQueryOneCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyNettyServerVisitorQueryListCommand 查询集合服务端提前开放出来的端口对象参数 + * @return {@link LazyNettyServerVisitor} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitor toNettyServerVisitor(LazyNettyServerVisitorQueryListCommand lazyNettyServerVisitorQueryListCommand); + + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param lazyNettyServerVisitorRemoveCommand 删除服务端提前开放出来的端口对象参数 + * @return {@link LazyNettyServerVisitor} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitor toNettyServerVisitor(LazyNettyServerVisitorRemoveCommand lazyNettyServerVisitorRemoveCommand); + + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyNettyServerVisitor 服务端提前开放出来的端口领域对象 + * @return {@link LazyNettyServerVisitorDTO} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitorDTO fromNettyServerVisitor(LazyNettyServerVisitor lazyNettyServerVisitor); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/VisitorPortFlowDTOAssembler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/VisitorPortFlowDTOAssembler.java new file mode 100644 index 00000000..73051a4a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/VisitorPortFlowDTOAssembler.java @@ -0,0 +1,89 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorPortFlowDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlow; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyAssembler + **/ +@Mapper +public interface VisitorPortFlowDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorPortFlowDTOAssembler INSTANCE = Mappers.getMapper(VisitorPortFlowDTOAssembler.class); + + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param lazyVisitorPortFlowStoryCommand 保存访客端流量对象 + * @return {@link LazyVisitorPortFlow} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlow toVisitorFlow(LazyVisitorPortFlowStoryCommand lazyVisitorPortFlowStoryCommand); + + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param lazyVisitorPortFlowUpdateCommand 更新访客端流量对象 + * @return {@link LazyVisitorPortFlow} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlow toVisitorFlow(LazyVisitorPortFlowUpdateCommand lazyVisitorPortFlowUpdateCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyVisitorPortFlowQueryOneCommand 查询单个访客端流量对象参数 + * @return {@link LazyVisitorPortFlow} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlow toVisitorFlow(LazyVisitorPortFlowQueryOneCommand lazyVisitorPortFlowQueryOneCommand); + + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyVisitorPortFlowQueryListCommand 查询集合访客端流量对象参数 + * @return {@link LazyVisitorPortFlow} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlow toVisitorFlow(LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand); + + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param lazyVisitorPortFlowRemoveCommand 删除访客端流量对象参数 + * @return {@link LazyVisitorPortFlow} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlow toVisitorFlow(LazyVisitorPortFlowRemoveCommand lazyVisitorPortFlowRemoveCommand); + + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyVisitorPortFlow 访客端流量领域对象 + * @return {@link LazyVisitorPortFlowDTO} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlowDTO fromVisitorFlow(LazyVisitorPortFlow lazyVisitorPortFlow); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/VisitorPortPerDayFlowDTOAssembler.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/VisitorPortPerDayFlowDTOAssembler.java new file mode 100644 index 00000000..558327aa --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/assembler/VisitorPortPerDayFlowDTOAssembler.java @@ -0,0 +1,93 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorPortPerDayFlowDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlow; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowRemoveCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowStoryCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowUpdateCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowQueryListCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowQueryOneCommand; +import org.mapstruct.factory.Mappers; +import org.mapstruct.Mapper; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler + **/ +@Mapper +public interface VisitorPortPerDayFlowDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + + + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + VisitorPortPerDayFlowDTOAssembler INSTANCE = Mappers.getMapper(VisitorPortPerDayFlowDTOAssembler.class); + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param lazyVisitorPortPerDayFlowStoryCommand 保存每日统计流量对象 + * @return {@link LazyVisitorPortPerDayFlow} 每日统计流量领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlow toVisitorPortPerDayFlow(LazyVisitorPortPerDayFlowStoryCommand lazyVisitorPortPerDayFlowStoryCommand); + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param lazyVisitorPortPerDayFlowUpdateCommand 更新每日统计流量对象 + * @return {@link LazyVisitorPortPerDayFlow} 每日统计流量领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlow toVisitorPortPerDayFlow(LazyVisitorPortPerDayFlowUpdateCommand lazyVisitorPortPerDayFlowUpdateCommand); + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyVisitorPortPerDayFlowQueryOneCommand 查询单个每日统计流量对象参数 + * @return {@link LazyVisitorPortPerDayFlow} 每日统计流量领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlow toVisitorPortPerDayFlow(LazyVisitorPortPerDayFlowQueryOneCommand lazyVisitorPortPerDayFlowQueryOneCommand); + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param lazyVisitorPortPerDayFlowQueryListCommand 查询集合每日统计流量对象参数 + * @return {@link LazyVisitorPortPerDayFlow} 每日统计流量领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlow toVisitorPortPerDayFlow(LazyVisitorPortPerDayFlowQueryListCommand lazyVisitorPortPerDayFlowQueryListCommand); + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param lazyVisitorPortPerDayFlowRemoveCommand 删除每日统计流量对象参数 + * @return {@link LazyVisitorPortPerDayFlow} 每日统计流量领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlow toVisitorPortPerDayFlow(LazyVisitorPortPerDayFlowRemoveCommand lazyVisitorPortPerDayFlowRemoveCommand); + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyVisitorPortPerDayFlow 每日统计流量领域对象 + * @return {@link LazyVisitorPortPerDayFlowDTO} 每日统计流量DTO对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlowDTO fromVisitorPortPerDayFlow(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingQueryListCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingQueryListCommand.java new file mode 100644 index 00000000..9d1a45bc --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingQueryListCommand.java @@ -0,0 +1,74 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand; + +import java.time.LocalDateTime; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "internal_network_penetration_mapping_query_List_command", description = "内网穿透映射") +public class LazyInternalNetworkPenetrationMappingQueryListCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 客户端目标地址 + */ + @Schema(description = "客户端目标地址", name = "clientTargetIp", example = "") + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + @Schema(description = "客户端目标端口", name = "clientTargetPort", example = "") + private Integer clientTargetPort; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键自增 + */ + @Schema(description = "主键自增", name = "id", example = "") + private Long id; + + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访问端口 + */ + @Schema(description = "访问端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingQueryOneCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingQueryOneCommand.java new file mode 100644 index 00000000..1a8100cd --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingQueryOneCommand.java @@ -0,0 +1,73 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand; + +import java.time.LocalDateTime; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_internal_network_penetration_mapping_query_one_command", description = "内网穿透映射") +public class LazyInternalNetworkPenetrationMappingQueryOneCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 客户端目标地址 + */ + @Schema(description = "客户端目标地址", name = "clientTargetIp", example = "") + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + @Schema(description = "客户端目标端口", name = "clientTargetPort", example = "") + private Integer clientTargetPort; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键自增 + */ + @Schema(description = "主键自增", name = "id", example = "") + private Long id; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访问端口 + */ + @Schema(description = "访问端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingRemoveCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingRemoveCommand.java new file mode 100644 index 00000000..bfc3b8d9 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingRemoveCommand.java @@ -0,0 +1,65 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand; +import org.wu.framework.web.response.mark.ValidType; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "internal_network_penetration_mapping_remove_command", description = "内网穿透映射") +public class LazyInternalNetworkPenetrationMappingRemoveCommand { + + + /** + * 客户端ID + */ + @NotNull(message = "客户端ID 不能为空", groups = ValidType.Delete.class) + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 客户端目标地址 + */ + @NotNull(message = "客户端目标地址 不能为空", groups = ValidType.Delete.class) + @Schema(description = "客户端目标地址", name = "clientTargetIp", example = "") + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + @NotNull(message = "客户端目标端口 不能为空", groups = ValidType.Delete.class) + @Schema(description = "客户端目标端口", name = "clientTargetPort", example = "") + private Integer clientTargetPort; + + /** + * 主键自增 + */ + @Schema(description = "主键自增", name = "id", example = "") + private Long id; + + /** + * 访问端口 + */ + @NotNull(message = "访问端口 不能为空", groups = ValidType.Delete.class) + @Schema(description = "访问端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingStoryCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingStoryCommand.java new file mode 100644 index 00000000..6195fe36 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingStoryCommand.java @@ -0,0 +1,59 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "internal_network_penetration_mapping_story_command", description = "内网穿透映射") +public class LazyInternalNetworkPenetrationMappingStoryCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 客户端目标地址 + */ + @Schema(description = "客户端目标地址", name = "clientTargetIp", example = "") + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + @Schema(description = "客户端目标端口", name = "clientTargetPort", example = "") + private Integer clientTargetPort; + + /** + * 主键自增 + */ + @Schema(description = "主键自增", name = "id", example = "") + private Long id; + + /** + * 访问端口 + */ + @Schema(description = "访问端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingUpdateCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingUpdateCommand.java new file mode 100644 index 00000000..865c48f3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingUpdateCommand.java @@ -0,0 +1,64 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand; +import org.wu.framework.web.response.mark.ValidType; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "internal_network_penetration_mapping_update_command", description = "内网穿透映射") +public class LazyInternalNetworkPenetrationMappingUpdateCommand { + + /** + * 客户端ID + */ + @NotNull(message = "客户端ID 不能为空", groups = ValidType.Delete.class) + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 客户端目标地址 + */ + @NotNull(message = "客户端目标地址 不能为空", groups = ValidType.Delete.class) + @Schema(description = "客户端目标地址", name = "clientTargetIp", example = "") + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + @NotNull(message = "客户端目标端口 不能为空", groups = ValidType.Delete.class) + @Schema(description = "客户端目标端口", name = "clientTargetPort", example = "") + private Integer clientTargetPort; + + /** + * 主键自增 + */ + @Schema(description = "主键自增", name = "id", example = "") + private Long id; + + /** + * 访问端口 + */ + @NotNull(message = "访问端口 不能为空", groups = ValidType.Delete.class) + @Schema(description = "访问端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistQueryListCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistQueryListCommand.java new file mode 100644 index 00000000..9e82c87c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistQueryListCommand.java @@ -0,0 +1,57 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand; + +import java.time.LocalDateTime; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_blacklist_query_List_command", description = "客户端黑名单") +public class LazyNettyClientBlacklistQueryListCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistQueryOneCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistQueryOneCommand.java new file mode 100644 index 00000000..eb5da12f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistQueryOneCommand.java @@ -0,0 +1,57 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand; + +import java.time.LocalDateTime; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_blacklist_query_one_command", description = "客户端黑名单") +public class LazyNettyClientBlacklistQueryOneCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistRemoveCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistRemoveCommand.java new file mode 100644 index 00000000..4813bdbf --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistRemoveCommand.java @@ -0,0 +1,57 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand; + +import java.time.LocalDateTime; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_blacklist_remove_command", description = "客户端黑名单") +public class LazyNettyClientBlacklistRemoveCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistStoryCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistStoryCommand.java new file mode 100644 index 00000000..4f11e671 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistStoryCommand.java @@ -0,0 +1,61 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist; + + +import org.wu.framework.web.response.mark.ValidType; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand; + +import java.time.LocalDateTime; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_blacklist_story_command", description = "客户端黑名单") +public class LazyNettyClientBlacklistStoryCommand { + + + /** + * 客户端ID + */ + @NotNull(groups = ValidType.Create.class, message = "客户端ID不允许为空") + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistUpdateCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistUpdateCommand.java new file mode 100644 index 00000000..572b8066 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/blacklist/LazyNettyClientBlacklistUpdateCommand.java @@ -0,0 +1,57 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand; + +import java.time.LocalDateTime; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_blacklist_update_command", description = "客户端黑名单") +public class LazyNettyClientBlacklistUpdateCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientMessageCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientMessageCommand.java new file mode 100644 index 00000000..9612cf60 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientMessageCommand.java @@ -0,0 +1,38 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand; + +/** + * describe 发送请求到客户端 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "netty_client_message_command", description = "客户端状态") +public class LazyNettyClientMessageCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + + /** + * 发送的消息 + */ + @Schema(description = "发送的消息", name = "message", example = "") + private String message; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateQueryListCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateQueryListCommand.java new file mode 100644 index 00000000..d72e87ce --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateQueryListCommand.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_state_query_List_command", description = "客户端状态") +public class LazyNettyClientStateQueryListCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "onLineState", example = "") + private NettyClientStatus onLineState; + + /** + * 暂存状态(开启、关闭) + */ + @Schema(description = "暂存状态(开启、关闭)", name = "staging", example = "") + private String stagingState; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateQueryOneCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateQueryOneCommand.java new file mode 100644 index 00000000..6f038be5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateQueryOneCommand.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_state_query_one_command", description = "客户端状态") +public class LazyNettyClientStateQueryOneCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "onLineState", example = "") + private NettyClientStatus onLineState; + + /** + * 暂存状态(开启、关闭) + */ + @Schema(description = "暂存状态(开启、关闭)", name = "staging", example = "") + private String stagingState; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateRemoveCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateRemoveCommand.java new file mode 100644 index 00000000..d357908f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateRemoveCommand.java @@ -0,0 +1,70 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_state_remove_command", description = "客户端状态") +public class LazyNettyClientStateRemoveCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "onLineState", example = "") + private NettyClientStatus onLineState; + + /** + * 暂存状态(开启、关闭) + */ + @Schema(description = "暂存状态(开启、关闭)", name = "staging", example = "") + private String stagingState; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateStoryCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateStoryCommand.java new file mode 100644 index 00000000..1e9a6166 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateStoryCommand.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_state_story_command", description = "客户端状态") +public class LazyNettyClientStateStoryCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "onLineState", example = "") + private NettyClientStatus onLineState; + + /** + * 暂存状态(开启、关闭) + */ + @Schema(description = "暂存状态(开启、关闭)", name = "staging", example = "") + private String stagingState; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateUpdateCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateUpdateCommand.java new file mode 100644 index 00000000..0b6713d0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/client/state/LazyNettyClientStateUpdateCommand.java @@ -0,0 +1,74 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_state_update_command", description = "客户端状态") +public class LazyNettyClientStateUpdateCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "onLineState", example = "") + private NettyClientStatus onLineState; + + /** + * 暂存状态(开启、关闭) + */ + @Schema(description = "暂存状态(开启、关闭)", name = "staging", example = "") + private String stagingState; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorQueryListCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorQueryListCommand.java new file mode 100644 index 00000000..6d5ea16f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorQueryListCommand.java @@ -0,0 +1,63 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand; + +import java.time.LocalDateTime; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_visitor_query_List_command", description = "服务端提前开放出来的端口") +public class LazyNettyServerVisitorQueryListCommand { + + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + + /** + * 用户ID + */ + @Schema(description = "用户ID", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorQueryOneCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorQueryOneCommand.java new file mode 100644 index 00000000..e0aeee1f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorQueryOneCommand.java @@ -0,0 +1,63 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand; + +import java.time.LocalDateTime; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_visitor_query_one_command", description = "服务端提前开放出来的端口") +public class LazyNettyServerVisitorQueryOneCommand { + + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + + /** + * 用户ID + */ + @Schema(description = "用户ID", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorRemoveCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorRemoveCommand.java new file mode 100644 index 00000000..949b2814 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorRemoveCommand.java @@ -0,0 +1,63 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand; + +import java.time.LocalDateTime; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_visitor_remove_command", description = "服务端提前开放出来的端口") +public class LazyNettyServerVisitorRemoveCommand { + + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + + /** + * 用户ID + */ + @Schema(description = "用户ID", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorStoryCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorStoryCommand.java new file mode 100644 index 00000000..7dbeb594 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorStoryCommand.java @@ -0,0 +1,63 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand; + +import java.time.LocalDateTime; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_visitor_story_command", description = "服务端提前开放出来的端口") +public class LazyNettyServerVisitorStoryCommand { + + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + + /** + * 用户ID + */ + @Schema(description = "用户ID", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorUpdateCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorUpdateCommand.java new file mode 100644 index 00000000..c3d19a52 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/netty/server/visitor/LazyNettyServerVisitorUpdateCommand.java @@ -0,0 +1,63 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand; + +import java.time.LocalDateTime; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_visitor_update_command", description = "服务端提前开放出来的端口") +public class LazyNettyServerVisitorUpdateCommand { + + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + + /** + * 用户ID + */ + @Schema(description = "用户ID", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowQueryListCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowQueryListCommand.java new file mode 100644 index 00000000..3c3ee9c2 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowQueryListCommand.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand; + +import java.time.LocalDateTime; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_flow_query_List_command", description = "访客端流量") +public class LazyVisitorPortFlowQueryListCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowQueryOneCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowQueryOneCommand.java new file mode 100644 index 00000000..d572466a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowQueryOneCommand.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand; + +import java.time.LocalDateTime; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_flow_query_one_command", description = "访客端流量") +public class LazyVisitorPortFlowQueryOneCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowRemoveCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowRemoveCommand.java new file mode 100644 index 00000000..b394d833 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowRemoveCommand.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand; + +import java.time.LocalDateTime; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_flow_remove_command", description = "访客端流量") +public class LazyVisitorPortFlowRemoveCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowStoryCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowStoryCommand.java new file mode 100644 index 00000000..62bdc684 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowStoryCommand.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand; + +import java.time.LocalDateTime; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_flow_story_command", description = "访客端流量") +public class LazyVisitorPortFlowStoryCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowUpdateCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowUpdateCommand.java new file mode 100644 index 00000000..de692de7 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/flow/LazyVisitorPortFlowUpdateCommand.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand; + +import java.time.LocalDateTime; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_flow_update_command", description = "访客端流量") +public class LazyVisitorPortFlowUpdateCommand { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowQueryListCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowQueryListCommand.java new file mode 100644 index 00000000..69adace6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowQueryListCommand.java @@ -0,0 +1,91 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_per_day_flow_query_List_command",description = "每日统计流量") +public class LazyVisitorPortPerDayFlowQueryListCommand { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 日期 + */ + @Schema(description ="日期",name ="day",example = "") + private String day; + + /** + * + * 主键 + */ + @Schema(description ="主键",name ="id",example = "") + private Long id; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowQueryOneCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowQueryOneCommand.java new file mode 100644 index 00000000..869da4e5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowQueryOneCommand.java @@ -0,0 +1,91 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_per_day_flow_query_one_command",description = "每日统计流量") +public class LazyVisitorPortPerDayFlowQueryOneCommand { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 日期 + */ + @Schema(description ="日期",name ="day",example = "") + private String day; + + /** + * + * 主键 + */ + @Schema(description ="主键",name ="id",example = "") + private Long id; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowRemoveCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowRemoveCommand.java new file mode 100644 index 00000000..c4c84add --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowRemoveCommand.java @@ -0,0 +1,91 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_per_day_flow_remove_command",description = "每日统计流量") +public class LazyVisitorPortPerDayFlowRemoveCommand { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 日期 + */ + @Schema(description ="日期",name ="day",example = "") + private String day; + + /** + * + * 主键 + */ + @Schema(description ="主键",name ="id",example = "") + private Long id; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowStoryCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowStoryCommand.java new file mode 100644 index 00000000..004d62f6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowStoryCommand.java @@ -0,0 +1,91 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_per_day_flow_story_command",description = "每日统计流量") +public class LazyVisitorPortPerDayFlowStoryCommand { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 日期 + */ + @Schema(description ="日期",name ="day",example = "") + private String day; + + /** + * + * 主键 + */ + @Schema(description ="主键",name ="id",example = "") + private Long id; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowUpdateCommand.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowUpdateCommand.java new file mode 100644 index 00000000..2baeb8e5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/command/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowUpdateCommand.java @@ -0,0 +1,91 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_per_day_flow_update_command",description = "每日统计流量") +public class LazyVisitorPortPerDayFlowUpdateCommand { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 日期 + */ + @Schema(description ="日期",name ="day",example = "") + private String day; + + /** + * + * 主键 + */ + @Schema(description ="主键",name ="id",example = "") + private Long id; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientChannelDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientChannelDTO.java new file mode 100644 index 00000000..06dd1e96 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientChannelDTO.java @@ -0,0 +1,25 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelId; +import lombok.Data; + + +/** + * 客户端通道 + */ +@Data +public class LazyClientChannelDTO { + /** + * 连接信息 + */ + private String clientId; + /** + * 通道ID + */ + private ChannelId channelId; + /** + * 通道 + */ + private Channel channel; +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientFlowPerDayEchartsDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientFlowPerDayEchartsDTO.java new file mode 100644 index 00000000..39120095 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientFlowPerDayEchartsDTO.java @@ -0,0 +1,39 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 获取客户使用流量数据 + */ +@Data +@Accessors(chain = true) +public class LazyClientFlowPerDayEchartsDTO { + + + /** + * 曲线类型 + */ + private List typeList = List.of("进口流量", "出口流量", "总流量"); + + /** + * 时间 + */ + private List dayList; + /** + * 客户端入口流量 + */ + + private List clientInFlowList; + /** + * 出口流量 + */ + private List clientOutFlowList; + /** + * 全部流量 + */ + private List clientAllFlowList; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientPortFlowPerDayEchartsDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientPortFlowPerDayEchartsDTO.java new file mode 100644 index 00000000..29d0cd53 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyClientPortFlowPerDayEchartsDTO.java @@ -0,0 +1,46 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 获取客户使用流量数据 + */ +@Data +@Accessors(chain = true) +public class LazyClientPortFlowPerDayEchartsDTO { + + + /** + * 客户端ID + */ + private List clientIdList; + + /** + * 时间 + */ + private List dayList; + /** + * 客户端入口流量 + */ + + private List clientInFlowList; + /** + * 出口流量 + */ + private List clientOutFlowList; + + + @Data + public static final class ClientFlow { + + private String clientId; + + private Integer visitorPort; + + private List flowList; + + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyInternalNetworkPenetrationMappingDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyInternalNetworkPenetrationMappingDTO.java new file mode 100644 index 00000000..7ab06b46 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyInternalNetworkPenetrationMappingDTO.java @@ -0,0 +1,82 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO; + +import java.time.LocalDateTime; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "internal_network_penetration_mapping_command_dto", description = "内网穿透映射") +public class LazyInternalNetworkPenetrationMappingDTO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 客户端目标地址 + */ + @Schema(description = "客户端目标地址", name = "clientTargetIp", example = "") + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + @Schema(description = "客户端目标端口", name = "clientTargetPort", example = "") + private Integer clientTargetPort; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键自增 + */ + @Schema(description = "主键自增", name = "id", example = "") + private Long id; + + /** + * 是否删除 默认否 + */ + @Schema(description = "是否删除 默认否", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访问端口 + */ + @Schema(description = "访问端口", name = "visitorPort", example = "") + private Integer visitorPort; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyClientBlacklistDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyClientBlacklistDTO.java new file mode 100644 index 00000000..8ae2e843 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyClientBlacklistDTO.java @@ -0,0 +1,57 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO; + +import java.time.LocalDateTime; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_blacklist_command_dto", description = "客户端黑名单") +public class LazyNettyClientBlacklistDTO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateDTO.java new file mode 100644 index 00000000..68f92f20 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateDTO.java @@ -0,0 +1,76 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_state_command_dto", description = "客户端状态") +public class LazyNettyClientStateDTO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "onLineState", example = "") + private NettyClientStatus onLineState; + + /** + * 暂存状态(开启、关闭) + */ + @Schema(description = "暂存状态(开启、关闭)", name = "staging", example = "") + private String stagingState; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyServerVisitorDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyServerVisitorDTO.java new file mode 100644 index 00000000..5ddeeec4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyNettyServerVisitorDTO.java @@ -0,0 +1,63 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO; + +import java.time.LocalDateTime; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_visitor_command_dto", description = "服务端提前开放出来的端口") +public class LazyNettyServerVisitorDTO { + + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + + /** + * 用户ID + */ + @Schema(description = "用户ID", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorFlowDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorFlowDTO.java new file mode 100644 index 00000000..d58cd3e5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorFlowDTO.java @@ -0,0 +1,80 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.core.utils.ByteSizeUtil; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_flow_command_dto", description = "访客端流量") +public class LazyVisitorFlowDTO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + private Integer inFlow; + + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + /** + * 当前访客下所有端口的流量 + */ + @Schema(description = "当前访客下所有端口的流量") + private List lazyVisitorPortFlowDTOList; + + + public String getInFlow() { + return ByteSizeUtil.convertSize(inFlow); + } + + public String getOutFlow() { + return ByteSizeUtil.convertSize(outFlow); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorPortFlowDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorPortFlowDTO.java new file mode 100644 index 00000000..5a77824a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorPortFlowDTO.java @@ -0,0 +1,96 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.core.utils.ByteSizeUtil; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO; + +import java.time.LocalDateTime; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_flow_command_dto", description = "访客端流量") +public class LazyVisitorPortFlowDTO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + + public Integer getInFlowSize() { + if (inFlow == null) return 0; + return inFlow; + } + + public Integer getOutFlowSize() { + if (outFlow == null) return 0; + return outFlow; + } + + public String getInFlow() { + if (inFlow == null) return "0b"; + return ByteSizeUtil.convertSize(inFlow); + } + + public String getOutFlow() { + if (outFlow == null) return "0b"; + return ByteSizeUtil.convertSize(outFlow); + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorPortPerDayFlowDTO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorPortPerDayFlowDTO.java new file mode 100644 index 00000000..76d3b1ed --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/dto/LazyVisitorPortPerDayFlowDTO.java @@ -0,0 +1,91 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_per_day_flow_command_dto",description = "每日统计流量") +public class LazyVisitorPortPerDayFlowDTO { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 日期 + */ + @Schema(description ="日期",name ="day",example = "") + private String day; + + /** + * + * 主键 + */ + @Schema(description ="主键",name ="id",example = "") + private Long id; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyClientStatsChangeApplicationImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyClientStatsChangeApplicationImpl.java new file mode 100644 index 00000000..51153e45 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyClientStatsChangeApplicationImpl.java @@ -0,0 +1,108 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.impl; + + +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientState; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import lombok.extern.slf4j.Slf4j; +import org.framework.smart.agent.network.heartbeat.common.constant.ClientConfigKeyUtils; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientStateRepository; + + +@Slf4j +@LazyApplication +public class LazyClientStatsChangeApplicationImpl implements LazyClientStatsChangeApplication { + + private final LazyNettyClientStateRepository lazyNettyClientStateRepository; + private final ServerNodeProperties serverNodeProperties; + + + public LazyClientStatsChangeApplicationImpl(LazyNettyClientStateRepository lazyNettyClientStateRepository, + ServerNodeProperties serverNodeProperties) { + + this.lazyNettyClientStateRepository = lazyNettyClientStateRepository; + this.serverNodeProperties = serverNodeProperties; + } + + + /** + * 客户端在线 + * + * @param clientId 客户端ID + */ + @Override + public void clientOnLine(String clientId) { + // 如果可以已经在线状态不推送 + String clientStatusKey = ClientConfigKeyUtils.getClientStatusKey(clientId); +// stringRedisTemplate.opsForValue().set(clientStatusKey, NettyClientStatus.ON_LINE.name()); + LazyNettyClientState lazyNettyClientState = new LazyNettyClientState(); + lazyNettyClientState.setClientId(clientId); + lazyNettyClientState.setOnLineState(NettyClientStatus.ON_LINE); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + lazyNettyClientStateRepository.updateOnLIneState(lazyNettyClientState); + // 触发暂存扫描 +// ClientOnLineState clientOnLineState = new ClientOnLineState(); +// clientOnLineState.setClientId(clientId); +// clientOnLineState.setOnLineState(NettyClientStatus.ON_LINE.name()); +// stringRedisTemplate.convertAndSend(REDIS_CLIENT_ONLINE_OR_OFFLINE_CHANNEL,clientOnLineState); + } + + /** + * 客户端离线 + * + * @param clientId 客户端ID + */ + @Override + public void clientOffLine(String clientId) { + // 如果可以已经在线状态不推送 + String clientStatusKey = ClientConfigKeyUtils.getClientStatusKey(clientId); +// stringRedisTemplate.opsForValue().set(clientStatusKey, NettyClientStatus.OFF_LINE.name()); + // 修改客户端状态 离线 + LazyNettyClientState lazyNettyClientState = new LazyNettyClientState(); + lazyNettyClientState.setClientId(clientId); + lazyNettyClientState.setOnLineState(NettyClientStatus.OFF_LINE); + lazyNettyClientState.setStagingState("OPENED"); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + lazyNettyClientStateRepository.updateOnLIneState(lazyNettyClientState); +// // 触发暂存扫描 +// ClientOnLineState clientOnLineState = new ClientOnLineState(); +// clientOnLineState.setClientId(clientId); +// clientOnLineState.setOnLineState(NettyClientStatus.OFF_LINE.name()); +// stringRedisTemplate.convertAndSend(REDIS_CLIENT_ONLINE_OR_OFFLINE_CHANNEL,clientOnLineState); + + } + + /** + * 客户端暂存关闭 + * + * @param clientId 客户端ID + */ + @Override + public void stagingClosed(String clientId) { + LazyNettyClientState lazyNettyClientState = new LazyNettyClientState(); + lazyNettyClientState.setClientId(clientId); + lazyNettyClientState.setStagingState("CLOSED"); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + lazyNettyClientStateRepository.updateStagingState(lazyNettyClientState); + } + + /** + * 客户端暂存开启 + * + * @param clientId 客户端ID + */ + @Override + public void stagingOpened(String clientId) { + LazyNettyClientState lazyNettyClientState = new LazyNettyClientState(); + lazyNettyClientState.setClientId(clientId); + lazyNettyClientState.setStagingState("OPENED"); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + lazyNettyClientStateRepository.updateStagingState(lazyNettyClientState); + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyInternalNetworkPenetrationMappingApplicationImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyInternalNetworkPenetrationMappingApplicationImpl.java new file mode 100644 index 00000000..ac41a727 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyInternalNetworkPenetrationMappingApplicationImpl.java @@ -0,0 +1,299 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.impl; + +import org.framework.smart.agent.network.heartbeat.common.NettyClientVisitorContext; +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyInternalNetworkPenetrationMappingDTO; +import org.springframework.transaction.annotation.Transactional; +import org.wu.framework.core.utils.ObjectUtils; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl; +import org.framework.smart.agent.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyInternalNetworkPenetrationMappingApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler.InternalNetworkPenetrationMappingDTOAssembler; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping.LazyInternalNetworkPenetrationMapping; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping.LazyInternalNetworkPenetrationMappingRepository; +import org.framework.smart.agent.network.heartbeat.server.netty.socket.NettyVisitorSocket; + +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyApplicationImpl + **/ +@Slf4j +@LazyApplication +public class LazyInternalNetworkPenetrationMappingApplicationImpl implements LazyInternalNetworkPenetrationMappingApplication { + + @Resource + LazyInternalNetworkPenetrationMappingRepository lazyInternalNetworkPenetrationMappingRepository; + + @Resource + ChannelFlowAdapter channelFlowAdapter; + + @Resource + ServerNodeProperties serverNodeProperties; + + + /** + * describe 新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingStoryCommand 新增内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result story(LazyInternalNetworkPenetrationMappingStoryCommand lazyInternalNetworkPenetrationMappingStoryCommand) { + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping = InternalNetworkPenetrationMappingDTOAssembler.INSTANCE.toInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMappingStoryCommand); + lazyInternalNetworkPenetrationMapping.setIsDeleted(false); + String serverId = serverNodeProperties.getNodeId(); + lazyInternalNetworkPenetrationMapping.setServerId(serverId); + + String clientId = lazyInternalNetworkPenetrationMapping.getClientId(); + String clientTargetIp = lazyInternalNetworkPenetrationMapping.getClientTargetIp(); + Integer clientTargetPort = lazyInternalNetworkPenetrationMapping.getClientTargetPort(); + Integer visitorPort = lazyInternalNetworkPenetrationMapping.getVisitorPort(); + + + this.changeSocket(clientId, clientTargetIp, clientTargetPort, visitorPort); + return lazyInternalNetworkPenetrationMappingRepository.story(lazyInternalNetworkPenetrationMapping); + } + + /** + * describe 批量新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingStoryCommandList 批量新增内网穿透映射 + * @return {@link Result>} 内网穿透映射新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Transactional + @Override + public Result> batchStory(List lazyInternalNetworkPenetrationMappingStoryCommandList) { + List lazyInternalNetworkPenetrationMappingList = + lazyInternalNetworkPenetrationMappingStoryCommandList + .stream() + .map(lazyInternalNetworkPenetrationMappingStoryCommand -> { + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping = InternalNetworkPenetrationMappingDTOAssembler.INSTANCE.toInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMappingStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyInternalNetworkPenetrationMapping.setServerId(serverId); + return lazyInternalNetworkPenetrationMapping; + }) + .collect(Collectors.toList()); + + Result> batchStory = lazyInternalNetworkPenetrationMappingRepository.batchStory(lazyInternalNetworkPenetrationMappingList); + // 开启端口 + for (LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping : lazyInternalNetworkPenetrationMappingList) { + String clientId = lazyInternalNetworkPenetrationMapping.getClientId(); + String clientTargetIp = lazyInternalNetworkPenetrationMapping.getClientTargetIp(); + Integer clientTargetPort = lazyInternalNetworkPenetrationMapping.getClientTargetPort(); + Integer visitorPort = lazyInternalNetworkPenetrationMapping.getVisitorPort(); + this.changeSocket(clientId, clientTargetIp, clientTargetPort, visitorPort); + } + return batchStory; + } + + /** + * describe 更新内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingUpdateCommand 更新内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Transactional + @Override + public Result updateOne(LazyInternalNetworkPenetrationMappingUpdateCommand lazyInternalNetworkPenetrationMappingUpdateCommand) { + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping = InternalNetworkPenetrationMappingDTOAssembler.INSTANCE.toInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMappingUpdateCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyInternalNetworkPenetrationMapping.setServerId(serverId); + // 删除绑定数据 + Result story = lazyInternalNetworkPenetrationMappingRepository.story(lazyInternalNetworkPenetrationMapping); + String clientId = lazyInternalNetworkPenetrationMapping.getClientId(); + String clientTargetIp = lazyInternalNetworkPenetrationMapping.getClientTargetIp(); + Integer clientTargetPort = lazyInternalNetworkPenetrationMapping.getClientTargetPort(); + Integer visitorPort = lazyInternalNetworkPenetrationMapping.getVisitorPort(); + this.changeSocket(clientId, clientTargetIp, clientTargetPort, visitorPort); + return story; + } + + + /** + * 变更 网络穿透 + * + * @param clientId 客户端ID + * @param clientTargetIp 客户端目标IP + * @param clientTargetPort 客户端莫表端口 + * @param visitorPort 访客端口 + */ + private void changeSocket(String clientId, String clientTargetIp, Integer clientTargetPort, Integer visitorPort) { + // 删除 客户端映射 + this.changeCloseSocket(clientId, visitorPort); + // 更新 客户端映射 + createVisitor(clientId, clientTargetIp, clientTargetPort, visitorPort); + } + + + /** + * 删除 通道 + * + * @param clientId 客户端ID + * @param visitorPort 访客端口 + */ + private void changeCloseSocket(String clientId, Integer visitorPort) { + // 删除 客户端映射 + List nettyVisitorSocketList = NettyClientVisitorContext.getVisitorSockets(clientId); + if (!ObjectUtils.isEmpty(nettyVisitorSocketList)) { + nettyVisitorSocketList = nettyVisitorSocketList.stream() + .filter(nettyVisitorSocket -> nettyVisitorSocket.getVisitorPort() == visitorPort).toList(); + if (!ObjectUtils.isEmpty(nettyVisitorSocketList)) { + // 关闭端口 + for (NettyVisitorSocket nettyVisitorSocket : nettyVisitorSocketList) { + try { + nettyVisitorSocket.close(); + } catch (IOException | InterruptedException e) { + throw new RuntimeException(e); + } + } + } + } + } + + /** + * describe 查询单个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryOneCommand 查询单个内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMappingDTO >} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + @Override + public Result findOne(LazyInternalNetworkPenetrationMappingQueryOneCommand lazyInternalNetworkPenetrationMappingQueryOneCommand) { + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping = InternalNetworkPenetrationMappingDTOAssembler.INSTANCE.toInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMappingQueryOneCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyInternalNetworkPenetrationMapping.setServerId(serverId); + return lazyInternalNetworkPenetrationMappingRepository.findOne(lazyInternalNetworkPenetrationMapping).convert(InternalNetworkPenetrationMappingDTOAssembler.INSTANCE::fromInternalNetworkPenetrationMapping); + } + + /** + * describe 查询多个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryListCommand 查询多个内网穿透映射 + * @return {@link Result>} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result> findList(LazyInternalNetworkPenetrationMappingQueryListCommand lazyInternalNetworkPenetrationMappingQueryListCommand) { + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping = InternalNetworkPenetrationMappingDTOAssembler.INSTANCE.toInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMappingQueryListCommand); + + String serverId = serverNodeProperties.getNodeId(); + lazyInternalNetworkPenetrationMapping.setServerId(serverId); + return lazyInternalNetworkPenetrationMappingRepository.findList(lazyInternalNetworkPenetrationMapping).convert(internalNetworkPenetrationMappings -> internalNetworkPenetrationMappings.stream().map(InternalNetworkPenetrationMappingDTOAssembler.INSTANCE::fromInternalNetworkPenetrationMapping).collect(Collectors.toList())); + } + + /** + * describe 分页查询多个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryListCommand 分页查询多个内网穿透映射 + * @return {@link Result>} 分页内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyInternalNetworkPenetrationMappingQueryListCommand lazyInternalNetworkPenetrationMappingQueryListCommand) { + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping = InternalNetworkPenetrationMappingDTOAssembler.INSTANCE.toInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMappingQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyInternalNetworkPenetrationMapping.setServerId(serverId); + return lazyInternalNetworkPenetrationMappingRepository.findPage(size, current, lazyInternalNetworkPenetrationMapping).convert(page -> page.convert(InternalNetworkPenetrationMappingDTOAssembler.INSTANCE::fromInternalNetworkPenetrationMapping)); + } + + /** + * describe 删除内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingRemoveCommand 删除内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Transactional + @Override + public Result remove(LazyInternalNetworkPenetrationMappingRemoveCommand lazyInternalNetworkPenetrationMappingRemoveCommand) { + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping = InternalNetworkPenetrationMappingDTOAssembler.INSTANCE.toInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMappingRemoveCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyInternalNetworkPenetrationMapping.setServerId(serverId); + Result remove = lazyInternalNetworkPenetrationMappingRepository.remove(lazyInternalNetworkPenetrationMapping); + // 删除端口映射 + String clientId = lazyInternalNetworkPenetrationMappingRemoveCommand.getClientId(); + Integer visitorPort = lazyInternalNetworkPenetrationMappingRemoveCommand.getVisitorPort(); + this.changeCloseSocket(clientId, visitorPort); + return remove; + } + + /** + * 创建客户端的访问者 + * + * @param clientId 客户端ID + */ + @Override + public Result createVisitor(String clientId) { + // 查询代理信息 + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping = new LazyInternalNetworkPenetrationMapping(); + lazyInternalNetworkPenetrationMapping.setIsDeleted(false); + lazyInternalNetworkPenetrationMapping.setClientId(clientId); + return lazyInternalNetworkPenetrationMappingRepository + .findList(lazyInternalNetworkPenetrationMapping) + .applyOther(internalNetworkPenetrationMappings -> { + for (LazyInternalNetworkPenetrationMapping networkPenetrationMapping : internalNetworkPenetrationMappings) { + Integer visitorPort = networkPenetrationMapping.getVisitorPort(); + String clientTargetIp = networkPenetrationMapping.getClientTargetIp(); + Integer clientTargetPort = networkPenetrationMapping.getClientTargetPort(); + this.createVisitor(clientId, clientTargetIp, clientTargetPort, visitorPort); + } + return ResultFactory.successOf(); + }); + } + + /** + * 创建访客 + * + * @param clientId 客户端ID + * @param clientTargetIp 客户端目标IP + * @param clientTargetPort 客户端目标端口 + * @param visitorPort 访客端口 + */ + private void createVisitor(String clientId, String clientTargetIp, Integer clientTargetPort, Integer visitorPort) { + // 更新 客户端映射 + NettyVisitorSocket nettyVisitorSocket = NettyVisitorSocket.NettyVisitorSocketBuilder + .builder() + .builderClientId(clientId) + .builderClientTargetIp(clientTargetIp) + .builderClientTargetPort(clientTargetPort) + .builderVisitorPort(visitorPort) + .builderChannelFlowAdapter(channelFlowAdapter) + .build(); + try { + nettyVisitorSocket.startServer(); + } catch (Exception e) { + log.error("客户端:{},网络端口:{},开放失败", clientId, visitorPort); + throw new RuntimeException(e); + } + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyClientBlacklistApplicationImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyClientBlacklistApplicationImpl.java new file mode 100644 index 00000000..e1fbc547 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyClientBlacklistApplicationImpl.java @@ -0,0 +1,196 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.impl; + +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyClientBlacklistDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist.*; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import io.netty.channel.Channel; +import jakarta.annotation.Resource; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyNettyClientBlacklistApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler.NettyClientBlacklistDTOAssembler; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklist; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklistRepository; + +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyApplicationImpl + **/ +@LazyApplication +public class LazyNettyClientBlacklistApplicationImpl implements LazyNettyClientBlacklistApplication { + + @Resource + LazyNettyClientBlacklistRepository lazyNettyClientBlacklistRepository; + @Resource + ServerNodeProperties serverNodeProperties; + + /** + * describe 新增客户端黑名单 + * + * @param lazyNettyClientBlacklistStoryCommand 新增客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result story(LazyNettyClientBlacklistStoryCommand lazyNettyClientBlacklistStoryCommand) { + LazyNettyClientBlacklist lazyNettyClientBlacklist = NettyClientBlacklistDTOAssembler.INSTANCE.toNettyClientBlacklist(lazyNettyClientBlacklistStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientBlacklist.setServerId(serverId); + // 添加和名单,客户端下线 + Result story = lazyNettyClientBlacklistRepository.story(lazyNettyClientBlacklist); + // 获取客户端channel 发送下下通知 + String clientId = lazyNettyClientBlacklist.getClientId(); + ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId.getBytes(StandardCharsets.UTF_8)); + if (null != clientChannel) { + // 模拟客户端发送下线通知 + Channel channel = clientChannel.getChannel(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setClientId(clientId); + nettyMsg.setType(MessageType.REPORT_CLIENT_DISCONNECTION); + + channel.writeAndFlush(nettyMsg); + } + + return story; + } + + /** + * describe 批量新增客户端黑名单 + * + * @param lazyNettyClientBlacklistStoryCommandList 批量新增客户端黑名单 + * @return {@link Result>} 客户端黑名单新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyClientBlacklistStoryCommandList) { + List lazyNettyClientBlacklistList = lazyNettyClientBlacklistStoryCommandList + .stream() + .map( + lazyNettyClientBlacklistStoryCommand -> { + LazyNettyClientBlacklist lazyNettyClientBlacklist = NettyClientBlacklistDTOAssembler.INSTANCE.toNettyClientBlacklist(lazyNettyClientBlacklistStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientBlacklist.setServerId(serverId); + return lazyNettyClientBlacklist; + } + + ) + .collect(Collectors.toList()); + return lazyNettyClientBlacklistRepository.batchStory(lazyNettyClientBlacklistList); + } + + /** + * describe 更新客户端黑名单 + * + * @param lazyNettyClientBlacklistUpdateCommand 更新客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result updateOne(LazyNettyClientBlacklistUpdateCommand lazyNettyClientBlacklistUpdateCommand) { + LazyNettyClientBlacklist lazyNettyClientBlacklist = NettyClientBlacklistDTOAssembler.INSTANCE.toNettyClientBlacklist(lazyNettyClientBlacklistUpdateCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientBlacklist.setServerId(serverId); + return lazyNettyClientBlacklistRepository.story(lazyNettyClientBlacklist); + } + + /** + * describe 查询单个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryOneCommand 查询单个客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklistDTO >} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result findOne(LazyNettyClientBlacklistQueryOneCommand lazyNettyClientBlacklistQueryOneCommand) { + LazyNettyClientBlacklist lazyNettyClientBlacklist = NettyClientBlacklistDTOAssembler.INSTANCE.toNettyClientBlacklist(lazyNettyClientBlacklistQueryOneCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientBlacklist.setServerId(serverId); + return lazyNettyClientBlacklistRepository.findOne(lazyNettyClientBlacklist).convert(NettyClientBlacklistDTOAssembler.INSTANCE::fromNettyClientBlacklist); + } + + /** + * describe 查询多个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryListCommand 查询多个客户端黑名单 + * @return {@link Result>} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> findList(LazyNettyClientBlacklistQueryListCommand lazyNettyClientBlacklistQueryListCommand) { + LazyNettyClientBlacklist lazyNettyClientBlacklist = NettyClientBlacklistDTOAssembler.INSTANCE.toNettyClientBlacklist(lazyNettyClientBlacklistQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientBlacklist.setServerId(serverId); + return lazyNettyClientBlacklistRepository.findList(lazyNettyClientBlacklist).convert(nettyClientBlacklists -> nettyClientBlacklists.stream().map(NettyClientBlacklistDTOAssembler.INSTANCE::fromNettyClientBlacklist).collect(Collectors.toList())); + } + + /** + * describe 分页查询多个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryListCommand 分页查询多个客户端黑名单 + * @return {@link Result>} 分页客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyClientBlacklistQueryListCommand lazyNettyClientBlacklistQueryListCommand) { + LazyNettyClientBlacklist lazyNettyClientBlacklist = NettyClientBlacklistDTOAssembler.INSTANCE.toNettyClientBlacklist(lazyNettyClientBlacklistQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientBlacklist.setServerId(serverId); + return lazyNettyClientBlacklistRepository.findPage(size, current, lazyNettyClientBlacklist).convert(page -> page.convert(NettyClientBlacklistDTOAssembler.INSTANCE::fromNettyClientBlacklist)); + } + + /** + * describe 删除客户端黑名单 + * + * @param lazyNettyClientBlacklistRemoveCommand 删除客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result remove(LazyNettyClientBlacklistRemoveCommand lazyNettyClientBlacklistRemoveCommand) { + LazyNettyClientBlacklist lazyNettyClientBlacklist = NettyClientBlacklistDTOAssembler.INSTANCE.toNettyClientBlacklist(lazyNettyClientBlacklistRemoveCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientBlacklist.setServerId(serverId); + return lazyNettyClientBlacklistRepository.remove(lazyNettyClientBlacklist); + } + + /** + * describe 是否存在客户端黑名单 + * + * @param lazyNettyClientBlacklist 是否存在客户端黑名单 + * @return {@link Result} 客户端黑名单是否存在 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + @Override + public Result exists(LazyNettyClientBlacklist lazyNettyClientBlacklist) { + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientBlacklist.setServerId(serverId); + return lazyNettyClientBlacklistRepository.exists(lazyNettyClientBlacklist); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyClientStateApplicationImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyClientStateApplicationImpl.java new file mode 100644 index 00000000..084e7462 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyClientStateApplicationImpl.java @@ -0,0 +1,211 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.impl; + + +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientState; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import io.netty.channel.Channel; +import jakarta.annotation.Resource; +import org.wu.framework.core.utils.ObjectUtils; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyClientVisitorContext; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyNettyClientStateApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler.NettyClientStateDTOAssembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientStateRepository; +import org.framework.smart.agent.network.heartbeat.server.netty.socket.NettyVisitorSocket; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyApplicationImpl + **/ +@LazyApplication +public class LazyNettyClientStateApplicationImpl implements LazyNettyClientStateApplication { + + @Resource + LazyNettyClientStateRepository lazyNettyClientStateRepository; + @Resource + ServerNodeProperties serverNodeProperties; + + /** + * describe 新增客户端状态 + * + * @param lazyNettyClientStateStoryCommand 新增客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result story(LazyNettyClientStateStoryCommand lazyNettyClientStateStoryCommand) { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateStoryCommand); + + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + return lazyNettyClientStateRepository.story(lazyNettyClientState); + } + + /** + * describe 批量新增客户端状态 + * + * @param lazyNettyClientStateStoryCommandList 批量新增客户端状态 + * @return {@link Result>} 客户端状态新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyClientStateStoryCommandList) { + List lazyNettyClientStateList = lazyNettyClientStateStoryCommandList + .stream() + .map(lazyNettyClientStateStoryCommand -> { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + return lazyNettyClientState; + }) + .collect(Collectors.toList()); + return lazyNettyClientStateRepository.batchStory(lazyNettyClientStateList); + } + + /** + * describe 更新客户端状态 + * + * @param lazyNettyClientStateUpdateCommand 更新客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result updateOne(LazyNettyClientStateUpdateCommand lazyNettyClientStateUpdateCommand) { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateUpdateCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + return lazyNettyClientStateRepository.story(lazyNettyClientState); + } + + /** + * describe 查询单个客户端状态 + * + * @param lazyNettyClientStateQueryOneCommand 查询单个客户端状态 + * @return {@link Result< LazyNettyClientStateDTO >} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result findOne(LazyNettyClientStateQueryOneCommand lazyNettyClientStateQueryOneCommand) { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateQueryOneCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + return lazyNettyClientStateRepository.findOne(lazyNettyClientState).convert(NettyClientStateDTOAssembler.INSTANCE::fromNettyClientState); + } + + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 查询多个客户端状态 + * @return {@link Result>} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> findList(LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand) { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + return lazyNettyClientStateRepository.findList(lazyNettyClientState).convert(nettyClientStates -> nettyClientStates.stream().map(NettyClientStateDTOAssembler.INSTANCE::fromNettyClientState).collect(Collectors.toList())); + } + + /** + * describe 分页查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 分页查询多个客户端状态 + * @return {@link Result>} 分页客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand) { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + return lazyNettyClientStateRepository.findPage(size, current, lazyNettyClientState).convert(page -> page.convert(NettyClientStateDTOAssembler.INSTANCE::fromNettyClientState)); + } + + /** + * describe 删除客户端状态 + * + * @param lazyNettyClientStateRemoveCommand 删除客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result remove(LazyNettyClientStateRemoveCommand lazyNettyClientStateRemoveCommand) { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateRemoveCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + // 获取当前客户端通道 而后关闭 + String clientId = lazyNettyClientStateRemoveCommand.getClientId(); + // 心跳关闭 + ChannelContext.clear(clientId); + // 关闭访客 + List nettyVisitorSocketList = NettyClientVisitorContext.getVisitorSockets(clientId); + if (!ObjectUtils.isEmpty(nettyVisitorSocketList)) { + for (NettyVisitorSocket nettyVisitorSocket : nettyVisitorSocketList) { + try { + nettyVisitorSocket.close(); + } catch (IOException | InterruptedException e) { + throw new RuntimeException(e); + } + } + } + return lazyNettyClientStateRepository.remove(lazyNettyClientState); + } + + /** + * 通过客户端心跳通道发送客户端请求 + * + * @param lazyNettyClientMessageCommand 发送请求到客户端 + * @return {@link Result} + */ + @Override + public Result sendMessage2HeartbeatClient(LazyNettyClientMessageCommand lazyNettyClientMessageCommand) { + // 获取客户端ID + String clientId = lazyNettyClientMessageCommand.getClientId(); + String message = lazyNettyClientMessageCommand.getMessage(); + ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId); + if (clientChannel == null) { + return ResultFactory.errorOf("客户端:" + clientId + "不存在"); + } + // 发送消息到客户端 + Channel channel = clientChannel.getChannel(); + NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); + nettyProxyMsg.setClientId("服务端"); + nettyProxyMsg.setData(message.getBytes(StandardCharsets.UTF_8)); + nettyProxyMsg.setType(MessageType.DISTRIBUTE_SINGLE_CLIENT_MESSAGE); + channel.writeAndFlush(nettyProxyMsg); + return ResultFactory.successOf(); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyServerVisitorApplicationImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyServerVisitorApplicationImpl.java new file mode 100644 index 00000000..aeb47c2d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyNettyServerVisitorApplicationImpl.java @@ -0,0 +1,162 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.impl; + +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyServerVisitorDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor.*; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import jakarta.annotation.Resource; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyNettyServerVisitorApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler.NettyServerVisitorDTOAssembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor.LazyNettyServerVisitor; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor.LazyNettyServerVisitorRepository; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyApplicationImpl + **/ +@LazyApplication +public class LazyNettyServerVisitorApplicationImpl implements LazyNettyServerVisitorApplication { + + @Resource + LazyNettyServerVisitorRepository lazyNettyServerVisitorRepository; + + @Resource + ServerNodeProperties serverNodeProperties; + + /** + * describe 新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorStoryCommand 新增服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result story(LazyNettyServerVisitorStoryCommand lazyNettyServerVisitorStoryCommand) { + LazyNettyServerVisitor lazyNettyServerVisitor = NettyServerVisitorDTOAssembler.INSTANCE.toNettyServerVisitor(lazyNettyServerVisitorStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyServerVisitor.setServerId(serverId); + return lazyNettyServerVisitorRepository.story(lazyNettyServerVisitor); + } + + /** + * describe 批量新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorStoryCommandList 批量新增服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyServerVisitorStoryCommandList) { + List lazyNettyServerVisitorList = lazyNettyServerVisitorStoryCommandList + .stream() + .map(lazyNettyServerVisitorStoryCommand -> { + LazyNettyServerVisitor lazyNettyServerVisitor = NettyServerVisitorDTOAssembler.INSTANCE.toNettyServerVisitor(lazyNettyServerVisitorStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyServerVisitor.setServerId(serverId); + return lazyNettyServerVisitor; + } + ) + .collect(Collectors.toList()); + return lazyNettyServerVisitorRepository.batchStory(lazyNettyServerVisitorList); + } + + /** + * describe 更新服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorUpdateCommand 更新服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result updateOne(LazyNettyServerVisitorUpdateCommand lazyNettyServerVisitorUpdateCommand) { + LazyNettyServerVisitor lazyNettyServerVisitor = NettyServerVisitorDTOAssembler.INSTANCE.toNettyServerVisitor(lazyNettyServerVisitorUpdateCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyServerVisitor.setServerId(serverId); + return lazyNettyServerVisitorRepository.story(lazyNettyServerVisitor); + } + + /** + * describe 查询单个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryOneCommand 查询单个服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitorDTO >} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result findOne(LazyNettyServerVisitorQueryOneCommand lazyNettyServerVisitorQueryOneCommand) { + LazyNettyServerVisitor lazyNettyServerVisitor = NettyServerVisitorDTOAssembler.INSTANCE.toNettyServerVisitor(lazyNettyServerVisitorQueryOneCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyServerVisitor.setServerId(serverId); + return lazyNettyServerVisitorRepository.findOne(lazyNettyServerVisitor).convert(NettyServerVisitorDTOAssembler.INSTANCE::fromNettyServerVisitor); + } + + /** + * describe 查询多个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryListCommand 查询多个服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result> findList(LazyNettyServerVisitorQueryListCommand lazyNettyServerVisitorQueryListCommand) { + LazyNettyServerVisitor lazyNettyServerVisitor = NettyServerVisitorDTOAssembler.INSTANCE.toNettyServerVisitor(lazyNettyServerVisitorQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyServerVisitor.setServerId(serverId); + return lazyNettyServerVisitorRepository.findList(lazyNettyServerVisitor).convert(nettyServerVisitors -> nettyServerVisitors.stream().map(NettyServerVisitorDTOAssembler.INSTANCE::fromNettyServerVisitor).collect(Collectors.toList())); + } + + /** + * describe 分页查询多个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryListCommand 分页查询多个服务端提前开放出来的端口 + * @return {@link Result>} 分页服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyServerVisitorQueryListCommand lazyNettyServerVisitorQueryListCommand) { + LazyNettyServerVisitor lazyNettyServerVisitor = NettyServerVisitorDTOAssembler.INSTANCE.toNettyServerVisitor(lazyNettyServerVisitorQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyServerVisitor.setServerId(serverId); + return lazyNettyServerVisitorRepository.findPage(size, current, lazyNettyServerVisitor).convert(page -> page.convert(NettyServerVisitorDTOAssembler.INSTANCE::fromNettyServerVisitor)); + } + + /** + * describe 删除服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorRemoveCommand 删除服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result remove(LazyNettyServerVisitorRemoveCommand lazyNettyServerVisitorRemoveCommand) { + LazyNettyServerVisitor lazyNettyServerVisitor = NettyServerVisitorDTOAssembler.INSTANCE.toNettyServerVisitor(lazyNettyServerVisitorRemoveCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyServerVisitor.setServerId(serverId); + return lazyNettyServerVisitorRepository.remove(lazyNettyServerVisitor); + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyVisitorPortFlowApplicationImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyVisitorPortFlowApplicationImpl.java new file mode 100644 index 00000000..8a270270 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyVisitorPortFlowApplicationImpl.java @@ -0,0 +1,294 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.impl; + +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler.VisitorPortFlowDTOAssembler; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler.VisitorPortPerDayFlowDTOAssembler; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowStoryCommand; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorPortFlowDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlow; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlowRepository; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlow; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowRepository; +import org.wu.framework.core.utils.ObjectUtils; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyApplicationImpl + **/ +@LazyApplication +public class LazyVisitorPortFlowApplicationImpl implements LazyVisitorPortFlowApplication { + + @Resource + LazyVisitorPortFlowRepository lazyVisitorPortFlowRepository; + + @Resource + LazyVisitorPortPerDayFlowRepository lazyVisitorPortPerDayFlowRepository; + @Resource + ServerNodeProperties serverNodeProperties; + + /** + * describe 新增访客端流量 + * + * @param lazyVisitorPortFlowStoryCommand 新增访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result story(LazyVisitorPortFlowStoryCommand lazyVisitorPortFlowStoryCommand) { + LazyVisitorPortFlow lazyVisitorPortFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(lazyVisitorPortFlowStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortFlow.setServerId(serverId); + return lazyVisitorPortFlowRepository.story(lazyVisitorPortFlow); + } + + /** + * 流量增长存储 + * 访客 ID 访客 端口必须 + * + * @param lazyVisitorPortFlowStoryCommand + * @return + */ + @Override + public Result flowIncreaseStory(LazyVisitorPortFlowStoryCommand lazyVisitorPortFlowStoryCommand) { + String clientId = lazyVisitorPortFlowStoryCommand.getClientId(); + Integer visitorPort = lazyVisitorPortFlowStoryCommand.getVisitorPort(); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortFlowStoryCommand.setServerId(serverId); + + Integer realOutFlow = ObjectUtils.isEmpty(lazyVisitorPortFlowStoryCommand.getOutFlow()) ? 0 : lazyVisitorPortFlowStoryCommand.getOutFlow(); + Integer realInFlow = ObjectUtils.isEmpty(lazyVisitorPortFlowStoryCommand.getInFlow()) ? 0 : lazyVisitorPortFlowStoryCommand.getInFlow(); + // 查询是否存在已有流量 而后进行统计汇总 + LazyVisitorPortFlow findOneLazyVisitorPortFlowQuery = new LazyVisitorPortFlow(); + findOneLazyVisitorPortFlowQuery.setClientId(clientId); + findOneLazyVisitorPortFlowQuery.setVisitorPort(visitorPort); + + findOneLazyVisitorPortFlowQuery.setServerId(serverId); + lazyVisitorPortFlowRepository.findOne(findOneLazyVisitorPortFlowQuery).accept(existVisitorFlow -> { + Integer inFlow = existVisitorFlow.getInFlow(); + Integer outFlow = existVisitorFlow.getOutFlow(); + if (!ObjectUtils.isEmpty(inFlow)) { + lazyVisitorPortFlowStoryCommand.setInFlow(realInFlow + inFlow); + } + if (!ObjectUtils.isEmpty(outFlow)) { + lazyVisitorPortFlowStoryCommand.setOutFlow(realOutFlow + outFlow); + } + }); + LazyVisitorPortFlow lazyVisitorPortFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(lazyVisitorPortFlowStoryCommand); + lazyVisitorPortFlowRepository.story(lazyVisitorPortFlow); + + // 日流量统计 + LazyVisitorPortPerDayFlowStoryCommand lazyVisitorPortPerDayFlowStoryCommand = new LazyVisitorPortPerDayFlowStoryCommand(); + lazyVisitorPortPerDayFlowStoryCommand.setClientId(clientId); + lazyVisitorPortPerDayFlowStoryCommand.setVisitorPort(visitorPort); + lazyVisitorPortPerDayFlowStoryCommand.setDay(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + + lazyVisitorPortPerDayFlowStoryCommand.setOutFlow(realOutFlow); + lazyVisitorPortPerDayFlowStoryCommand.setInFlow(realInFlow); + lazyVisitorPortPerDayFlowStoryCommand.setServerId(serverId); + + LazyVisitorPortPerDayFlow findOneLazyVisitorPortPerDayFlowQuery = new LazyVisitorPortPerDayFlow(); + findOneLazyVisitorPortPerDayFlowQuery.setClientId(clientId); + findOneLazyVisitorPortPerDayFlowQuery.setVisitorPort(visitorPort); + findOneLazyVisitorPortPerDayFlowQuery.setDay(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + findOneLazyVisitorPortPerDayFlowQuery.setServerId(serverId); + + lazyVisitorPortPerDayFlowRepository.findOne(findOneLazyVisitorPortPerDayFlowQuery).accept(existVisitorPortPerDayFlow -> { + Integer inFlow = existVisitorPortPerDayFlow.getInFlow(); + Integer outFlow = existVisitorPortPerDayFlow.getOutFlow(); + if (!ObjectUtils.isEmpty(inFlow)) { + lazyVisitorPortPerDayFlowStoryCommand.setInFlow(realInFlow + inFlow); + } + if (!ObjectUtils.isEmpty(outFlow)) { + lazyVisitorPortPerDayFlowStoryCommand.setOutFlow(realOutFlow + outFlow); + } + }); + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = VisitorPortPerDayFlowDTOAssembler.INSTANCE.toVisitorPortPerDayFlow(lazyVisitorPortPerDayFlowStoryCommand); + lazyVisitorPortPerDayFlowRepository.story(lazyVisitorPortPerDayFlow); + + return ResultFactory.successOf(); + + } + + /** + * describe 批量新增访客端流量 + * + * @param lazyVisitorPortFlowStoryCommandList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> batchStory(List lazyVisitorPortFlowStoryCommandList) { + List lazyVisitorPortFlowList = lazyVisitorPortFlowStoryCommandList + .stream() + .map(visitorPortFlowStoryCommand -> { + LazyVisitorPortFlow visitorFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(visitorPortFlowStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + visitorFlow.setServerId(serverId); + return visitorFlow; + } + + ) + .collect(Collectors.toList()); + return lazyVisitorPortFlowRepository.batchStory(lazyVisitorPortFlowList); + } + + /** + * describe 更新访客端流量 + * + * @param lazyVisitorPortFlowUpdateCommand 更新访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result updateOne(LazyVisitorPortFlowUpdateCommand lazyVisitorPortFlowUpdateCommand) { + LazyVisitorPortFlow lazyVisitorPortFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(lazyVisitorPortFlowUpdateCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortFlow.setServerId(serverId); + return lazyVisitorPortFlowRepository.story(lazyVisitorPortFlow); + } + + /** + * describe 查询单个访客端流量 + * + * @param lazyVisitorPortFlowQueryOneCommand 查询单个访客端流量 + * @return {@link Result< LazyVisitorFlowDTO >} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result findOne(LazyVisitorPortFlowQueryOneCommand lazyVisitorPortFlowQueryOneCommand) { + LazyVisitorPortFlow lazyVisitorPortFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(lazyVisitorPortFlowQueryOneCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortFlow.setServerId(serverId); + return lazyVisitorPortFlowRepository.findOne(lazyVisitorPortFlow).convert(VisitorPortFlowDTOAssembler.INSTANCE::fromVisitorFlow); + } + + /** + * describe 查询多个访客端流量 + * + * @param visitorFlowQueryListCommand 查询多个访客端流量 + * @return {@link Result>} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> findList(LazyVisitorPortFlowQueryListCommand visitorFlowQueryListCommand) { + LazyVisitorPortFlow lazyVisitorPortFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(visitorFlowQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortFlow.setServerId(serverId); + return lazyVisitorPortFlowRepository.findList(lazyVisitorPortFlow).convert(visitorFlows -> visitorFlows.stream().map(VisitorPortFlowDTOAssembler.INSTANCE::fromVisitorFlow).collect(Collectors.toList())); + } + + /** + * describe 分页查询多个访客端流量 + * + * @param lazyVisitorPortFlowQueryListCommand 分页查询多个访客端流量 + * @return {@link Result>} 分页访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand) { + LazyVisitorPortFlow lazyVisitorPortFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(lazyVisitorPortFlowQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortFlow.setServerId(serverId); + return lazyVisitorPortFlowRepository.findPage(size, current, lazyVisitorPortFlow).convert(page -> page.convert(VisitorPortFlowDTOAssembler.INSTANCE::fromVisitorFlow)); + } + + /** + * describe 删除访客端流量 + * + * @param lazyVisitorPortFlowRemoveCommand 删除访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result remove(LazyVisitorPortFlowRemoveCommand lazyVisitorPortFlowRemoveCommand) { + LazyVisitorPortFlow lazyVisitorPortFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(lazyVisitorPortFlowRemoveCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortFlow.setServerId(serverId); + return lazyVisitorPortFlowRepository.remove(lazyVisitorPortFlow); + } + + /** + * 根据客户端查询流量 + * + * @param size 分页大小 + * @param current 分页 + * @param lazyVisitorPortFlowQueryListCommand 查询条件 + * @return {@link Result>} 分页访客端流量DTO对象 + */ + @Override + public Result> findClientFlowPage(int size, int current, LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand) { + LazyVisitorPortFlow lazyVisitorPortFlow = VisitorPortFlowDTOAssembler.INSTANCE.toVisitorFlow(lazyVisitorPortFlowQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortFlow.setServerId(serverId); + return lazyVisitorPortFlowRepository.findPageGroupByClientId(size, current, lazyVisitorPortFlow).convert(visitorPortFlowLazyPage -> { + List clientIdList = visitorPortFlowLazyPage + .getRecord() + .stream() + .map(LazyVisitorPortFlow::getClientId) + .toList(); + List lazyVisitorPortFlowList = lazyVisitorPortFlowRepository.findListByClientIds(clientIdList, serverId); + + + // 根据客户端进行分组 + + List lazyVisitorPortFlowDTOList = lazyVisitorPortFlowList.stream().map(VisitorPortFlowDTOAssembler.INSTANCE::fromVisitorFlow).toList(); + + + Map> client_port_flow_map = lazyVisitorPortFlowDTOList.stream().collect(Collectors.groupingBy(visitorPortFlowDTO -> visitorPortFlowDTO.getClientId())); + + Map client_in_flow = lazyVisitorPortFlowDTOList.stream() + .collect( + Collectors.groupingBy(LazyVisitorPortFlowDTO::getClientId, + Collectors.summingInt(LazyVisitorPortFlowDTO::getInFlowSize))); + + Map client_out_flow = lazyVisitorPortFlowDTOList.stream() + .collect( + Collectors.groupingBy(LazyVisitorPortFlowDTO::getClientId, + Collectors.summingInt(LazyVisitorPortFlowDTO::getOutFlowSize))); + + return visitorPortFlowLazyPage.convert(visitorPortFlow1 -> { + String clientId = visitorPortFlow1.getClientId(); + LazyVisitorFlowDTO lazyVisitorFlowDTO = new LazyVisitorFlowDTO(); + lazyVisitorFlowDTO.setClientId(clientId); + lazyVisitorFlowDTO.setInFlow(client_in_flow.getOrDefault(clientId, 0)); + lazyVisitorFlowDTO.setOutFlow(client_out_flow.getOrDefault(clientId, 0)); + lazyVisitorFlowDTO.setLazyVisitorPortFlowDTOList(client_port_flow_map.getOrDefault(clientId, new ArrayList<>())); + return lazyVisitorFlowDTO; + }); + }); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyVisitorPortPerDayFlowApplicationImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyVisitorPortPerDayFlowApplicationImpl.java new file mode 100644 index 00000000..128c6c11 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/application/impl/LazyVisitorPortPerDayFlowApplicationImpl.java @@ -0,0 +1,302 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.application.impl; + +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.server.properties.ServerNodeProperties; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyVisitorPortPerDayFlowApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.assembler.VisitorPortPerDayFlowDTOAssembler; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyClientFlowPerDayEchartsDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyClientPortFlowPerDayEchartsDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorPortPerDayFlowDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientState; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientStateRepository; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlow; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowRepository; +import org.wu.framework.core.utils.ObjectUtils; +import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl + **/ +@LazyApplication +public class LazyVisitorPortPerDayFlowApplicationImpl implements LazyVisitorPortPerDayFlowApplication { + + @Resource + LazyVisitorPortPerDayFlowRepository lazyVisitorPortPerDayFlowRepository; + + @Resource + LazyNettyClientStateRepository lazyNettyClientStateRepository; + + @Resource + ServerNodeProperties serverNodeProperties; + + /** + * describe 新增每日统计流量 + * + * @param lazyVisitorPortPerDayFlowStoryCommand 新增每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量新增后领域对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result story(LazyVisitorPortPerDayFlowStoryCommand lazyVisitorPortPerDayFlowStoryCommand) { + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = VisitorPortPerDayFlowDTOAssembler.INSTANCE.toVisitorPortPerDayFlow(lazyVisitorPortPerDayFlowStoryCommand); + + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortPerDayFlow.setServerId(serverId); + return lazyVisitorPortPerDayFlowRepository.story(lazyVisitorPortPerDayFlow); + } + + /** + * describe 批量新增每日统计流量 + * + * @param lazyVisitorPortPerDayFlowStoryCommandList 批量新增每日统计流量 + * @return {@link Result>} 每日统计流量新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result> batchStory(List lazyVisitorPortPerDayFlowStoryCommandList) { + List lazyVisitorPortPerDayFlowList = lazyVisitorPortPerDayFlowStoryCommandList + .stream() + .map(lazyVisitorPortPerDayFlowStoryCommand -> { + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = VisitorPortPerDayFlowDTOAssembler.INSTANCE.toVisitorPortPerDayFlow(lazyVisitorPortPerDayFlowStoryCommand); + String serverId = serverNodeProperties.getNodeId(); + + lazyVisitorPortPerDayFlow.setServerId(serverId); + return lazyVisitorPortPerDayFlow; + } + ) + .collect(Collectors.toList()); + return lazyVisitorPortPerDayFlowRepository.batchStory(lazyVisitorPortPerDayFlowList); + } + + /** + * describe 更新每日统计流量 + * + * @param lazyVisitorPortPerDayFlowUpdateCommand 更新每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量领域对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result updateOne(LazyVisitorPortPerDayFlowUpdateCommand lazyVisitorPortPerDayFlowUpdateCommand) { + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = VisitorPortPerDayFlowDTOAssembler.INSTANCE.toVisitorPortPerDayFlow(lazyVisitorPortPerDayFlowUpdateCommand); + String serverId = serverNodeProperties.getNodeId(); + + lazyVisitorPortPerDayFlow.setServerId(serverId); return lazyVisitorPortPerDayFlowRepository.story(lazyVisitorPortPerDayFlow); + } + + /** + * describe 查询单个每日统计流量 + * + * @param lazyVisitorPortPerDayFlowQueryOneCommand 查询单个每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlowDTO >} 每日统计流量DTO对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result findOne(LazyVisitorPortPerDayFlowQueryOneCommand lazyVisitorPortPerDayFlowQueryOneCommand) { + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = VisitorPortPerDayFlowDTOAssembler.INSTANCE.toVisitorPortPerDayFlow(lazyVisitorPortPerDayFlowQueryOneCommand); + String serverId = serverNodeProperties.getNodeId(); + + lazyVisitorPortPerDayFlow.setServerId(serverId); return lazyVisitorPortPerDayFlowRepository.findOne(lazyVisitorPortPerDayFlow).convert(VisitorPortPerDayFlowDTOAssembler.INSTANCE::fromVisitorPortPerDayFlow); + } + + /** + * describe 查询多个每日统计流量 + * + * @param lazyVisitorPortPerDayFlowQueryListCommand 查询多个每日统计流量 + * @return {@link Result>} 每日统计流量DTO对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result> findList(LazyVisitorPortPerDayFlowQueryListCommand lazyVisitorPortPerDayFlowQueryListCommand) { + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = VisitorPortPerDayFlowDTOAssembler.INSTANCE.toVisitorPortPerDayFlow(lazyVisitorPortPerDayFlowQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + + lazyVisitorPortPerDayFlow.setServerId(serverId); return lazyVisitorPortPerDayFlowRepository.findList(lazyVisitorPortPerDayFlow).convert(visitorPortPerDayFlows -> visitorPortPerDayFlows.stream().map(VisitorPortPerDayFlowDTOAssembler.INSTANCE::fromVisitorPortPerDayFlow).collect(Collectors.toList())); + } + + /** + * describe 分页查询多个每日统计流量 + * + * @param lazyVisitorPortPerDayFlowQueryListCommand 分页查询多个每日统计流量 + * @return {@link Result>} 分页每日统计流量DTO对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result> findPage(int size, int current, LazyVisitorPortPerDayFlowQueryListCommand lazyVisitorPortPerDayFlowQueryListCommand) { + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = VisitorPortPerDayFlowDTOAssembler.INSTANCE.toVisitorPortPerDayFlow(lazyVisitorPortPerDayFlowQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + + lazyVisitorPortPerDayFlow.setServerId(serverId); return lazyVisitorPortPerDayFlowRepository.findPage(size, current, lazyVisitorPortPerDayFlow).convert(page -> page.convert(VisitorPortPerDayFlowDTOAssembler.INSTANCE::fromVisitorPortPerDayFlow)); + } + + /** + * describe 删除每日统计流量 + * + * @param lazyVisitorPortPerDayFlowRemoveCommand 删除每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result remove(LazyVisitorPortPerDayFlowRemoveCommand lazyVisitorPortPerDayFlowRemoveCommand) { + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = VisitorPortPerDayFlowDTOAssembler.INSTANCE.toVisitorPortPerDayFlow(lazyVisitorPortPerDayFlowRemoveCommand); + String serverId = serverNodeProperties.getNodeId(); + + lazyVisitorPortPerDayFlow.setServerId(serverId); return lazyVisitorPortPerDayFlowRepository.remove(lazyVisitorPortPerDayFlow); + } + + /** + * 获取客户近七天流量数据 + * + * @return + */ + @Override + public Result findClient7DayFlow() { + + LazyClientPortFlowPerDayEchartsDTO lazyClientPortFlowPerDayEchartsDTO = new LazyClientPortFlowPerDayEchartsDTO(); + + + int dayLength = 7; + // 流量日期 + List dayList = Stream.iterate(1, n -> n + 1).limit(dayLength).map(index -> { + LocalDate minus = LocalDate.now().minusDays(dayLength - index); + return minus.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + }).toList(); + lazyClientPortFlowPerDayEchartsDTO.setDayList(dayList); + LazyNettyClientState lazyNettyClientState = new LazyNettyClientState(); + String serverId = serverNodeProperties.getNodeId(); + + lazyNettyClientState.setServerId(serverId); + // 客户端ID + List clientIdList = lazyNettyClientStateRepository.findList(lazyNettyClientState) + .applyOther(nettyClientStates -> nettyClientStates + .stream().map(LazyNettyClientState::getClientId) + .toList()); + lazyClientPortFlowPerDayEchartsDTO.setClientIdList(clientIdList); + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow1 = new LazyVisitorPortPerDayFlow(); + lazyVisitorPortPerDayFlow1.setServerId(serverId); + List lazyVisitorPortPerDayFlowList = lazyVisitorPortPerDayFlowRepository.findList(lazyVisitorPortPerDayFlow1) + .applyOther(clientPerDayFlows -> clientPerDayFlows); + + List> collect = lazyVisitorPortPerDayFlowList + .stream() + .collect(Collectors + .groupingBy( + LazyVisitorPortPerDayFlow::getClientId))// 客户端分组 + .values() + .stream() + .map( + visitorPortPerDayFlows -> visitorPortPerDayFlows + .stream() + .collect(Collectors.groupingBy(LazyVisitorPortPerDayFlow::getVisitorPort)) // 访客分组 + .values() + .stream() + .toList() + ) + .collect(Collectors.flatMapping( + Collection::stream, + Collectors.toList())); + + + // in flow + List clientInFlowList = collect.stream().map(visitorPortPerDayFlows -> { + LazyClientPortFlowPerDayEchartsDTO.ClientFlow clientFlow = new LazyClientPortFlowPerDayEchartsDTO.ClientFlow(); + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = visitorPortPerDayFlows.stream().findFirst().get(); + String clientId = lazyVisitorPortPerDayFlow.getClientId(); + Integer visitorPort = lazyVisitorPortPerDayFlow.getVisitorPort(); + clientFlow.setClientId(clientId); + clientFlow.setVisitorPort(visitorPort); + Map portPerDayFlowMap = visitorPortPerDayFlows.stream() + .collect(Collectors.toMap(LazyVisitorPortPerDayFlow::getDay, LazyVisitorPortPerDayFlow::getInFlow, (A, B) -> A)); + List flowList = dayList.stream().map(day -> portPerDayFlowMap.getOrDefault(day, 0)).toList(); + clientFlow.setFlowList(flowList); + return clientFlow; + }).toList(); + + + lazyClientPortFlowPerDayEchartsDTO.setClientInFlowList(clientInFlowList); + + + // out flow + List clientOutFlowList = collect.stream().map(visitorPortPerDayFlows -> { + LazyClientPortFlowPerDayEchartsDTO.ClientFlow clientFlow = new LazyClientPortFlowPerDayEchartsDTO.ClientFlow(); + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow = visitorPortPerDayFlows.stream().findFirst().get(); + String clientId = lazyVisitorPortPerDayFlow.getClientId(); + Integer visitorPort = lazyVisitorPortPerDayFlow.getVisitorPort(); + clientFlow.setClientId(clientId); + clientFlow.setVisitorPort(visitorPort); + Map portPerDayFlowMap = visitorPortPerDayFlows.stream() + .collect(Collectors.toMap(LazyVisitorPortPerDayFlow::getDay, LazyVisitorPortPerDayFlow::getOutFlow, (A, B) -> A)); + List flowList = dayList.stream().map(day -> portPerDayFlowMap.getOrDefault(day, 0)).toList(); + clientFlow.setFlowList(flowList); + return clientFlow; + }).toList(); + + lazyClientPortFlowPerDayEchartsDTO.setClientOutFlowList(clientOutFlowList); + + + // + return ResultFactory.successOf(lazyClientPortFlowPerDayEchartsDTO); + } + + /** + * 获取客户流量数据 + * + * @return + */ + @Override + public Result findClientPerDayFlow() { + LazyClientFlowPerDayEchartsDTO lazyClientFlowPerDayEchartsDTO = new LazyClientFlowPerDayEchartsDTO(); + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow1 = new LazyVisitorPortPerDayFlow(); + String serverId = serverNodeProperties.getNodeId(); + lazyVisitorPortPerDayFlow1.setServerId(serverId); + List lazyVisitorPortPerDayFlowList = + lazyVisitorPortPerDayFlowRepository.findList(lazyVisitorPortPerDayFlow1).applyOther(clientPerDayFlows -> clientPerDayFlows) + ; + if(ObjectUtils.isEmpty(lazyVisitorPortPerDayFlowList)){ + return ResultFactory.successOf(lazyClientFlowPerDayEchartsDTO); + } + + List dayList = lazyVisitorPortPerDayFlowList.stream().map(LazyVisitorPortPerDayFlow::getDay).toList(); + + List clientInFlowList = lazyVisitorPortPerDayFlowList.stream().map(LazyVisitorPortPerDayFlow::getInFlow).toList(); + List clientOutFlowList = + lazyVisitorPortPerDayFlowList.stream().map(LazyVisitorPortPerDayFlow::getOutFlow).toList(); + List clientAllFlowList = lazyVisitorPortPerDayFlowList.stream().map(visitorPortPerDayFlow -> ObjectUtils.isEmpty(visitorPortPerDayFlow.getInFlow()) ? 0 : visitorPortPerDayFlow.getInFlow() + + (ObjectUtils.isEmpty(visitorPortPerDayFlow.getOutFlow()) ? 0 : visitorPortPerDayFlow.getOutFlow())).toList(); + + lazyClientFlowPerDayEchartsDTO.setDayList(dayList); + lazyClientFlowPerDayEchartsDTO.setClientInFlowList(clientInFlowList); + lazyClientFlowPerDayEchartsDTO.setClientOutFlowList(clientOutFlowList); + lazyClientFlowPerDayEchartsDTO.setClientAllFlowList(clientAllFlowList); + return ResultFactory.successOf(lazyClientFlowPerDayEchartsDTO); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyChannelController.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyChannelController.java new file mode 100644 index 00000000..9a33bc8e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyChannelController.java @@ -0,0 +1,110 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.controller; + + +import org.wu.framework.web.spring.EasyController; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import io.netty.channel.Channel; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.framework.smart.agent.network.heartbeat.common.ChannelContext; +import org.framework.smart.agent.network.heartbeat.common.InternalNetworkPenetrationRealClient; +import org.framework.smart.agent.network.heartbeat.common.MessageType; +import org.framework.smart.agent.network.heartbeat.common.NettyProxyMsg; + +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * 通道管理 + */ +@Slf4j +@Tag(name = "服务端Netty通道管理") +@EasyController("/channel") +public class LazyChannelController { + + @Operation(summary = "服务端访问客户端") + @GetMapping("/{clientId}") + public void fetchClientId(@PathVariable("clientId") String clientId) { + log.info("clientId:" + clientId); + // 获取客户端channel + ChannelContext.ClientChannel clientChannel = ChannelContext.get(clientId.getBytes(StandardCharsets.UTF_8)); + + if (clientChannel == null) { + if (log.isDebugEnabled()) { + for (ChannelContext.ClientChannel exisitClientChannel : ChannelContext.get()) { + log.debug("当前存在的通道:{}", new String(exisitClientChannel.getClientId())); + } + } + return; + } + // 发送消息 + Channel channel = clientChannel.getChannel(); + NettyProxyMsg nettyMsg = new NettyProxyMsg(); + nettyMsg.setClientId(clientId); + // 下发 客户端消息 + nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_TRANSFER); + + channel.writeAndFlush(nettyMsg); + } + + /** + * 获取当前服务端所有通道 + */ + @Operation(summary = "获取当前服务端所有通道") + @GetMapping("/findClientIdList") + public Result> findClientIdList() { + List clientChannels = ChannelContext.get(); + return ResultFactory.successOf(clientChannels.stream().map(clientChannel -> new String(clientChannel.getClientId())).toList()); + } + + /** + * 批量调度客户端 数据转换接收 + */ + @Operation(summary = "批量调度客户端 数据转换接收") + @PostMapping("/batchTransfer") + public Result> batchTransfer(@RequestBody InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient) { + + String data = "GET /swagger-ui/index.html HTTP/1.1\n" + + "Host: 127.0.0.1:19080\n" + + "Connection: keep-alive\n" + + "Cache-Control: max-age=0\n" + + "sec-ch-ua: \"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"\n" + + "sec-ch-ua-mobile: ?0\n" + + "sec-ch-ua-platform: \"macOS\"\n" + + "Upgrade-Insecure-Requests: 1\n" + + "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\n" + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\n" + + "Sec-Fetch-Site: none\n" + + "Sec-Fetch-Mode: navigate\n" + + "Sec-Fetch-User: ?1\n" + + "Sec-Fetch-Dest: document\n" + + "Accept-Encoding: gzip, deflate, br\n" + + "Accept-Language: zh-CN,zh;q=0.9\n" + + "Cookie: XXL_JOB_LOGIN_IDENTITY=7b226964223a312c22757365726e616d65223a2261646d696e222c2270617373776f7264223a226531306164633339343962613539616262653536653035376632306638383365222c22726f6c65223a312c227065726d697373696f6e223a6e756c6c7d; Hm_lvt_173e771eef816c412396d2cb4fe2d632=1703040917\n"; + + List clientChannels = ChannelContext.get(); + String clientTargetIp = internalNetworkPenetrationRealClient.getClientTargetIp(); + Integer clientTargetPort = internalNetworkPenetrationRealClient.getClientTargetPort(); + Integer visitorPort = internalNetworkPenetrationRealClient.getVisitorPort(); + for (ChannelContext.ClientChannel clientChannel : clientChannels) { + Channel channel = clientChannel.getChannel(); + NettyProxyMsg nettyProxyMsg = new NettyProxyMsg(); + // 下发 客户端消息 + nettyProxyMsg.setType(MessageType.DISTRIBUTE_CLIENT_TRANSFER); + nettyProxyMsg.setClientId(clientChannel.getClientId()); + nettyProxyMsg.setVisitorPort(visitorPort); + nettyProxyMsg.setClientTargetIp(clientTargetIp); + nettyProxyMsg.setClientTargetPort(clientTargetPort); + nettyProxyMsg.setData(data.getBytes(StandardCharsets.UTF_8)); + channel.writeAndFlush(nettyProxyMsg); + } + return ResultFactory.successOf(); + } + +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyInternalNetworkPenetrationMappingProvider.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyInternalNetworkPenetrationMappingProvider.java new file mode 100644 index 00000000..dc97c979 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyInternalNetworkPenetrationMappingProvider.java @@ -0,0 +1,145 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.controller; + + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.internal.network.penetration.mapping.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyInternalNetworkPenetrationMappingDTO; +import org.springframework.validation.annotation.Validated; +import org.wu.framework.web.response.mark.ValidType; +import org.wu.framework.web.spring.EasyController; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyInternalNetworkPenetrationMappingApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping.LazyInternalNetworkPenetrationMapping; + +import java.util.List; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyController + **/ +@Tag(name = "内网穿透映射提供者") +@EasyController("/internal/network/penetration/mapping") +public class LazyInternalNetworkPenetrationMappingProvider { + + @Resource + private LazyInternalNetworkPenetrationMappingApplication lazyInternalNetworkPenetrationMappingApplication; + + /** + * describe 新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingStoryCommand 新增内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Operation(summary = "新增内网穿透映射") + @PostMapping("/story") + public Result story(@RequestBody LazyInternalNetworkPenetrationMappingStoryCommand lazyInternalNetworkPenetrationMappingStoryCommand) { + return lazyInternalNetworkPenetrationMappingApplication.story(lazyInternalNetworkPenetrationMappingStoryCommand); + } + + /** + * describe 批量新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingStoryCommandList 批量新增内网穿透映射 + * @return {@link Result>} 内网穿透映射新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Operation(summary = "批量新增内网穿透映射") + @PostMapping("/batchStory") + public Result> batchStory(@RequestBody List lazyInternalNetworkPenetrationMappingStoryCommandList) { + return lazyInternalNetworkPenetrationMappingApplication.batchStory(lazyInternalNetworkPenetrationMappingStoryCommandList); + } + + /** + * describe 更新内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingUpdateCommand 更新内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Operation(summary = "更新内网穿透映射") + @PutMapping("/updateOne") + public Result updateOne( + @Validated(ValidType.Update.class) + @RequestBody LazyInternalNetworkPenetrationMappingUpdateCommand lazyInternalNetworkPenetrationMappingUpdateCommand) { + return lazyInternalNetworkPenetrationMappingApplication.updateOne(lazyInternalNetworkPenetrationMappingUpdateCommand); + } + + /** + * describe 查询单个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryOneCommand 查询单个内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMappingDTO >} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Operation(summary = "查询单个内网穿透映射") + @GetMapping("/findOne") + public Result findOne(@ModelAttribute LazyInternalNetworkPenetrationMappingQueryOneCommand lazyInternalNetworkPenetrationMappingQueryOneCommand) { + return lazyInternalNetworkPenetrationMappingApplication.findOne(lazyInternalNetworkPenetrationMappingQueryOneCommand); + } + + /** + * describe 查询多个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryListCommand 查询多个内网穿透映射 + * @return {@link Result>} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Operation(summary = "查询多个内网穿透映射") + @GetMapping("/findList") + public Result> findList(@ModelAttribute LazyInternalNetworkPenetrationMappingQueryListCommand lazyInternalNetworkPenetrationMappingQueryListCommand) { + return lazyInternalNetworkPenetrationMappingApplication.findList(lazyInternalNetworkPenetrationMappingQueryListCommand); + } + + /** + * describe 分页查询多个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingQueryListCommand 分页查询多个内网穿透映射 + * @return {@link Result>} 分页内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Operation(summary = "分页查询多个内网穿透映射") + @GetMapping("/findPage") + public Result> findPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyInternalNetworkPenetrationMappingQueryListCommand lazyInternalNetworkPenetrationMappingQueryListCommand) { + return lazyInternalNetworkPenetrationMappingApplication.findPage(size, current, lazyInternalNetworkPenetrationMappingQueryListCommand); + } + + /** + * describe 删除内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingRemoveCommand 删除内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Operation(summary = "删除内网穿透映射") + @DeleteMapping("/remove") + public Result remove( + @Validated(ValidType.Delete.class) + @ModelAttribute LazyInternalNetworkPenetrationMappingRemoveCommand lazyInternalNetworkPenetrationMappingRemoveCommand) { + return lazyInternalNetworkPenetrationMappingApplication.remove(lazyInternalNetworkPenetrationMappingRemoveCommand); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyClientBlacklistProvider.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyClientBlacklistProvider.java new file mode 100644 index 00000000..25ed1a20 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyClientBlacklistProvider.java @@ -0,0 +1,142 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.controller; + + + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.blacklist.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyClientBlacklistDTO; +import org.wu.framework.web.spring.EasyController; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.mark.ValidType; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyNettyClientBlacklistApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklist; + +import java.util.List; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyController + **/ +@Tag(name = "客户端黑名单提供者") +@EasyController("/netty/client/blacklist") +public class LazyNettyClientBlacklistProvider { + + @Resource + private LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication; + + /** + * describe 新增客户端黑名单 + * + * @param lazyNettyClientBlacklistStoryCommand 新增客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "新增客户端黑名单") + @PostMapping("/story") + public Result story(@Validated(ValidType.Create.class) @RequestBody LazyNettyClientBlacklistStoryCommand lazyNettyClientBlacklistStoryCommand) { + return lazyNettyClientBlacklistApplication.story(lazyNettyClientBlacklistStoryCommand); + } + + /** + * describe 批量新增客户端黑名单 + * + * @param lazyNettyClientBlacklistStoryCommandList 批量新增客户端黑名单 + * @return {@link Result>} 客户端黑名单新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "批量新增客户端黑名单") + @PostMapping("/batchStory") + public Result> batchStory(@Validated(ValidType.Create.class) @RequestBody List lazyNettyClientBlacklistStoryCommandList) { + return lazyNettyClientBlacklistApplication.batchStory(lazyNettyClientBlacklistStoryCommandList); + } + + /** + * describe 更新客户端黑名单 + * + * @param lazyNettyClientBlacklistUpdateCommand 更新客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "更新客户端黑名单") + @PutMapping("/updateOne") + public Result updateOne(@RequestBody LazyNettyClientBlacklistUpdateCommand lazyNettyClientBlacklistUpdateCommand) { + return lazyNettyClientBlacklistApplication.updateOne(lazyNettyClientBlacklistUpdateCommand); + } + + /** + * describe 查询单个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryOneCommand 查询单个客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklistDTO >} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "查询单个客户端黑名单") + @GetMapping("/findOne") + public Result findOne(@ModelAttribute LazyNettyClientBlacklistQueryOneCommand lazyNettyClientBlacklistQueryOneCommand) { + return lazyNettyClientBlacklistApplication.findOne(lazyNettyClientBlacklistQueryOneCommand); + } + + /** + * describe 查询多个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryListCommand 查询多个客户端黑名单 + * @return {@link Result>} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "查询多个客户端黑名单") + @GetMapping("/findList") + public Result> findList(@ModelAttribute LazyNettyClientBlacklistQueryListCommand lazyNettyClientBlacklistQueryListCommand) { + return lazyNettyClientBlacklistApplication.findList(lazyNettyClientBlacklistQueryListCommand); + } + + /** + * describe 分页查询多个客户端黑名单 + * + * @param lazyNettyClientBlacklistQueryListCommand 分页查询多个客户端黑名单 + * @return {@link Result>} 分页客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "分页查询多个客户端黑名单") + @GetMapping("/findPage") + public Result> findPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyNettyClientBlacklistQueryListCommand lazyNettyClientBlacklistQueryListCommand) { + return lazyNettyClientBlacklistApplication.findPage(size, current, lazyNettyClientBlacklistQueryListCommand); + } + + /** + * describe 删除客户端黑名单 + * + * @param lazyNettyClientBlacklistRemoveCommand 删除客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "删除客户端黑名单") + @DeleteMapping("/remove") + public Result remove(@ModelAttribute LazyNettyClientBlacklistRemoveCommand lazyNettyClientBlacklistRemoveCommand) { + return lazyNettyClientBlacklistApplication.remove(lazyNettyClientBlacklistRemoveCommand); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyClientStateProvider.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyClientStateProvider.java new file mode 100644 index 00000000..06196f75 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyClientStateProvider.java @@ -0,0 +1,154 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.controller; + + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.client.state.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientState; +import org.wu.framework.web.spring.EasyController; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyNettyClientStateApplication; + +import java.util.List; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyController + **/ +@Tag(name = "客户端状态提供者") +@EasyController("/netty/client/state") +public class LazyNettyClientStateProvider { + + @Resource + private LazyNettyClientStateApplication lazyNettyClientStateApplication; + + /** + * describe 新增客户端状态 + * + * @param lazyNettyClientStateStoryCommand 新增客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "新增客户端状态") + @PostMapping("/story") + public Result story(@RequestBody LazyNettyClientStateStoryCommand lazyNettyClientStateStoryCommand) { + return lazyNettyClientStateApplication.story(lazyNettyClientStateStoryCommand); + } + + /** + * describe 批量新增客户端状态 + * + * @param lazyNettyClientStateStoryCommandList 批量新增客户端状态 + * @return {@link Result >} 客户端状态新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "批量新增客户端状态") + @PostMapping("/batchStory") + public Result> batchStory(@RequestBody List lazyNettyClientStateStoryCommandList) { + return lazyNettyClientStateApplication.batchStory(lazyNettyClientStateStoryCommandList); + } + + /** + * describe 更新客户端状态 + * + * @param lazyNettyClientStateUpdateCommand 更新客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "更新客户端状态") + @PutMapping("/updateOne") + public Result updateOne(@RequestBody LazyNettyClientStateUpdateCommand lazyNettyClientStateUpdateCommand) { + return lazyNettyClientStateApplication.updateOne(lazyNettyClientStateUpdateCommand); + } + + /** + * describe 查询单个客户端状态 + * + * @param lazyNettyClientStateQueryOneCommand 查询单个客户端状态 + * @return {@link Result< LazyNettyClientStateDTO >} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "查询单个客户端状态") + @GetMapping("/findOne") + public Result findOne(@ModelAttribute LazyNettyClientStateQueryOneCommand lazyNettyClientStateQueryOneCommand) { + return lazyNettyClientStateApplication.findOne(lazyNettyClientStateQueryOneCommand); + } + + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 查询多个客户端状态 + * @return {@link Result>} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "查询多个客户端状态") + @GetMapping("/findList") + public Result> findList(@ModelAttribute LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand) { + return lazyNettyClientStateApplication.findList(lazyNettyClientStateQueryListCommand); + } + + /** + * describe 分页查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 分页查询多个客户端状态 + * @return {@link Result< LazyPage < LazyNettyClientStateDTO >>} 分页客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "分页查询多个客户端状态") + @GetMapping("/findPage") + public Result> findPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand) { + return lazyNettyClientStateApplication.findPage(size, current, lazyNettyClientStateQueryListCommand); + } + + /** + * describe 删除客户端状态 + * + * @param lazyNettyClientStateRemoveCommand 删除客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "删除客户端状态") + @DeleteMapping("/remove") + public Result remove(@ModelAttribute LazyNettyClientStateRemoveCommand lazyNettyClientStateRemoveCommand) { + return lazyNettyClientStateApplication.remove(lazyNettyClientStateRemoveCommand); + } + + /** + * describe 通过客户端心跳通道发送客户端请求 + * + * @param lazyNettyClientMessageCommand 发送请求到客户端 + * @return {@link Result< LazyNettyClientState >} + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "通过客户端心跳通道发送客户端请求") + @PostMapping("/sendMessage2HeartbeatClient") + public Result sendMessage2HeartbeatClient(@RequestBody LazyNettyClientMessageCommand lazyNettyClientMessageCommand) { + return lazyNettyClientStateApplication.sendMessage2HeartbeatClient(lazyNettyClientMessageCommand); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyServerVisitorProvider.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyServerVisitorProvider.java new file mode 100644 index 00000000..3215c37b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyNettyServerVisitorProvider.java @@ -0,0 +1,138 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.controller; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.netty.server.visitor.*; +import org.wu.framework.web.spring.EasyController; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyNettyServerVisitorApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyNettyServerVisitorDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor.LazyNettyServerVisitor; + +import java.util.List; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyController + **/ +@Tag(name = "服务端提前开放出来的端口提供者") +@EasyController("/netty/server/visitor") +public class LazyNettyServerVisitorProvider { + + @Resource + private LazyNettyServerVisitorApplication lazyNettyServerVisitorApplication; + + /** + * describe 新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorStoryCommand 新增服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Operation(summary = "新增服务端提前开放出来的端口") + @PostMapping("/story") + public Result story(@RequestBody LazyNettyServerVisitorStoryCommand lazyNettyServerVisitorStoryCommand) { + return lazyNettyServerVisitorApplication.story(lazyNettyServerVisitorStoryCommand); + } + + /** + * describe 批量新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorStoryCommandList 批量新增服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Operation(summary = "批量新增服务端提前开放出来的端口") + @PostMapping("/batchStory") + public Result> batchStory(@RequestBody List lazyNettyServerVisitorStoryCommandList) { + return lazyNettyServerVisitorApplication.batchStory(lazyNettyServerVisitorStoryCommandList); + } + + /** + * describe 更新服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorUpdateCommand 更新服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Operation(summary = "更新服务端提前开放出来的端口") + @PutMapping("/updateOne") + public Result updateOne(@RequestBody LazyNettyServerVisitorUpdateCommand lazyNettyServerVisitorUpdateCommand) { + return lazyNettyServerVisitorApplication.updateOne(lazyNettyServerVisitorUpdateCommand); + } + + /** + * describe 查询单个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryOneCommand 查询单个服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitorDTO >} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Operation(summary = "查询单个服务端提前开放出来的端口") + @GetMapping("/findOne") + public Result findOne(@ModelAttribute LazyNettyServerVisitorQueryOneCommand lazyNettyServerVisitorQueryOneCommand) { + return lazyNettyServerVisitorApplication.findOne(lazyNettyServerVisitorQueryOneCommand); + } + + /** + * describe 查询多个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryListCommand 查询多个服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Operation(summary = "查询多个服务端提前开放出来的端口") + @GetMapping("/findList") + public Result> findList(@ModelAttribute LazyNettyServerVisitorQueryListCommand lazyNettyServerVisitorQueryListCommand) { + return lazyNettyServerVisitorApplication.findList(lazyNettyServerVisitorQueryListCommand); + } + + /** + * describe 分页查询多个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorQueryListCommand 分页查询多个服务端提前开放出来的端口 + * @return {@link Result>} 分页服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Operation(summary = "分页查询多个服务端提前开放出来的端口") + @GetMapping("/findPage") + public Result> findPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyNettyServerVisitorQueryListCommand lazyNettyServerVisitorQueryListCommand) { + return lazyNettyServerVisitorApplication.findPage(size, current, lazyNettyServerVisitorQueryListCommand); + } + + /** + * describe 删除服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorRemoveCommand 删除服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Operation(summary = "删除服务端提前开放出来的端口") + @DeleteMapping("/remove") + public Result remove(@ModelAttribute LazyNettyServerVisitorRemoveCommand lazyNettyServerVisitorRemoveCommand) { + return lazyNettyServerVisitorApplication.remove(lazyNettyServerVisitorRemoveCommand); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyVisitorPortFlowProvider.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyVisitorPortFlowProvider.java new file mode 100644 index 00000000..0ace417e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyVisitorPortFlowProvider.java @@ -0,0 +1,154 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.controller; + +import org.framework.smart.agent.network.heartbeat.server.standalone.application.command.visitor.flow.*; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorPortFlowDTO; +import org.wu.framework.web.spring.EasyController; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.web.bind.annotation.*; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyVisitorPortFlowApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyVisitorFlowDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlow; + +import java.util.List; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyController + **/ +@Tag(name = "访客端流量提供者") +@EasyController("/visitor/port/flow") +public class LazyVisitorPortFlowProvider { + + @Resource + private LazyVisitorPortFlowApplication lazyVisitorPortFlowApplication; + + /** + * describe 新增访客端流量 + * + * @param lazyVisitorPortFlowStoryCommand 新增访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "新增访客端流量") + @PostMapping("/story") + public Result story(@RequestBody LazyVisitorPortFlowStoryCommand lazyVisitorPortFlowStoryCommand) { + return lazyVisitorPortFlowApplication.story(lazyVisitorPortFlowStoryCommand); + } + + /** + * describe 批量新增访客端流量 + * + * @param lazyVisitorPortFlowStoryCommandList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "批量新增访客端流量") + @PostMapping("/batchStory") + public Result> batchStory(@RequestBody List lazyVisitorPortFlowStoryCommandList) { + return lazyVisitorPortFlowApplication.batchStory(lazyVisitorPortFlowStoryCommandList); + } + + /** + * describe 更新访客端流量 + * + * @param lazyVisitorPortFlowUpdateCommand 更新访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "更新访客端流量") + @PutMapping("/updateOne") + public Result updateOne(@RequestBody LazyVisitorPortFlowUpdateCommand lazyVisitorPortFlowUpdateCommand) { + return lazyVisitorPortFlowApplication.updateOne(lazyVisitorPortFlowUpdateCommand); + } + + /** + * describe 查询单个访客端流量 + * + * @param lazyVisitorPortFlowQueryOneCommand 查询单个访客端流量 + * @return {@link Result< LazyVisitorPortFlowDTO >} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "查询单个访客端流量") + @GetMapping("/findOne") + public Result findOne(@ModelAttribute LazyVisitorPortFlowQueryOneCommand lazyVisitorPortFlowQueryOneCommand) { + return lazyVisitorPortFlowApplication.findOne(lazyVisitorPortFlowQueryOneCommand); + } + + /** + * describe 查询多个访客端流量 + * + * @param lazyVisitorPortFlowQueryListCommand 查询多个访客端流量 + * @return {@link Result>} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "查询多个访客端流量") + @GetMapping("/findList") + public Result> findList(@ModelAttribute LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand) { + return lazyVisitorPortFlowApplication.findList(lazyVisitorPortFlowQueryListCommand); + } + + /** + * describe 分页查询多个访客端流量 + * + * @param lazyVisitorPortFlowQueryListCommand 分页查询多个访客端流量 + * @return {@link Result>} 分页访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "分页查询多个访客端流量") + @GetMapping("/findPage") + public Result> findPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand) { + return lazyVisitorPortFlowApplication.findPage(size, current, lazyVisitorPortFlowQueryListCommand); + } + + /** + * 根据客户端查询流量 + * + * @param size 分页大小 + * @param current 分页 + * @param lazyVisitorPortFlowQueryListCommand 查询条件 + * @return {@link Result>} 分页访客端流量DTO对象 + */ + @Operation(summary = "分页查询多个访客端流量") + @GetMapping("/findClientFlowPage") + public Result> findClientFlowPage(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyVisitorPortFlowQueryListCommand lazyVisitorPortFlowQueryListCommand) { + return lazyVisitorPortFlowApplication.findClientFlowPage(size, current, lazyVisitorPortFlowQueryListCommand); + } + + /** + * describe 删除访客端流量 + * + * @param lazyVisitorPortFlowRemoveCommand 删除访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "删除访客端流量") + @DeleteMapping("/remove") + public Result remove(@ModelAttribute LazyVisitorPortFlowRemoveCommand lazyVisitorPortFlowRemoveCommand) { + return lazyVisitorPortFlowApplication.remove(lazyVisitorPortFlowRemoveCommand); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyVisitorPortPerDayFlowProvider.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyVisitorPortPerDayFlowProvider.java new file mode 100644 index 00000000..19e4ac0b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/controller/LazyVisitorPortPerDayFlowProvider.java @@ -0,0 +1,49 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.LazyVisitorPortPerDayFlowApplication; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyClientFlowPerDayEchartsDTO; +import org.framework.smart.agent.network.heartbeat.server.standalone.application.dto.LazyClientPortFlowPerDayEchartsDTO; +import org.springframework.web.bind.annotation.GetMapping; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.spring.EasyController; + +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyController + **/ +@Tag(name = "每日统计流量提供者") +@EasyController("/visitor/port/per/day/flow") +public class LazyVisitorPortPerDayFlowProvider { + @Resource + private LazyVisitorPortPerDayFlowApplication lazyVisitorPortPerDayFlowApplication; + + + /** + * describe 获取客户近七天流量数据 + * + * @author Jia wei Wu + **/ + + @Operation(summary = "获取客户近七天流量数据") + @GetMapping("/findClient7DayFlow") + public Result findClientPort7DayFlow() { + return lazyVisitorPortPerDayFlowApplication.findClient7DayFlow(); + } + + /** + * 获取客户流量数据 + * @return + */ + @Operation(summary = "获取客户流量数据") + @GetMapping("/findClientPerDayFlow") + public Result findClientPerDayFlow() { + return lazyVisitorPortPerDayFlowApplication.findClientPerDayFlow(); + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMapping.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMapping.java new file mode 100644 index 00000000..64ada98b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMapping.java @@ -0,0 +1,82 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain; + +import java.time.LocalDateTime; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "internal_network_penetration_mapping", description = "内网穿透映射") +public class LazyInternalNetworkPenetrationMapping { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 客户端目标地址 + */ + @Schema(description = "客户端目标地址", name = "clientTargetIp", example = "") + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + @Schema(description = "客户端目标端口", name = "clientTargetPort", example = "") + private Integer clientTargetPort; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键自增 + */ + @Schema(description = "主键自增", name = "id", example = "") + private Long id; + + /** + * 是否删除 默认否 + */ + @Schema(description = "是否删除 默认否", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访问端口 + */ + @Schema(description = "访问端口", name = "visitorPort", example = "") + private Integer visitorPort; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingRepository.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingRepository.java new file mode 100644 index 00000000..285a227b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/internal/network/penetration/mapping/LazyInternalNetworkPenetrationMappingRepository.java @@ -0,0 +1,99 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository; + +import java.util.List; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyDomainRepository + **/ + +public interface LazyInternalNetworkPenetrationMappingRepository { + + + /** + * describe 新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 新增内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result story(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping); + + /** + * describe 批量新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingList 批量新增内网穿透映射 + * @return {@link Result>} 内网穿透映射新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result> batchStory(List lazyInternalNetworkPenetrationMappingList); + + /** + * describe 查询单个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 查询单个内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result findOne(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping); + + /** + * describe 查询多个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 查询多个内网穿透映射 + * @return {@link Result>} 内网穿透映射DTO对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result> findList(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping); + + /** + * describe 分页查询多个内网穿透映射 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyInternalNetworkPenetrationMapping 分页查询多个内网穿透映射 + * @return {@link Result>} 分页内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result> findPage(int size, int current, LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping); + + /** + * describe 删除内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 删除内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result remove(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping); + + /** + * describe 是否存在内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 是否存在内网穿透映射 + * @return {@link Result} 内网穿透映射是否存在 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + Result exists(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping); + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/blacklist/LazyNettyClientBlacklist.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/blacklist/LazyNettyClientBlacklist.java new file mode 100644 index 00000000..f74ed4f6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/blacklist/LazyNettyClientBlacklist.java @@ -0,0 +1,57 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain; + +import java.time.LocalDateTime; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_blacklist", description = "客户端黑名单") +public class LazyNettyClientBlacklist { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/blacklist/LazyNettyClientBlacklistRepository.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/blacklist/LazyNettyClientBlacklistRepository.java new file mode 100644 index 00000000..9f4a38a8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/blacklist/LazyNettyClientBlacklistRepository.java @@ -0,0 +1,99 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository; + +import java.util.List; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyDomainRepository + **/ + +public interface LazyNettyClientBlacklistRepository { + + + /** + * describe 新增客户端黑名单 + * + * @param lazyNettyClientBlacklist 新增客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result story(LazyNettyClientBlacklist lazyNettyClientBlacklist); + + /** + * describe 批量新增客户端黑名单 + * + * @param lazyNettyClientBlacklistList 批量新增客户端黑名单 + * @return {@link Result>} 客户端黑名单新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> batchStory(List lazyNettyClientBlacklistList); + + /** + * describe 查询单个客户端黑名单 + * + * @param lazyNettyClientBlacklist 查询单个客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result findOne(LazyNettyClientBlacklist lazyNettyClientBlacklist); + + /** + * describe 查询多个客户端黑名单 + * + * @param lazyNettyClientBlacklist 查询多个客户端黑名单 + * @return {@link Result>} 客户端黑名单DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findList(LazyNettyClientBlacklist lazyNettyClientBlacklist); + + /** + * describe 分页查询多个客户端黑名单 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyClientBlacklist 分页查询多个客户端黑名单 + * @return {@link Result>} 分页客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findPage(int size, int current, LazyNettyClientBlacklist lazyNettyClientBlacklist); + + /** + * describe 删除客户端黑名单 + * + * @param lazyNettyClientBlacklist 删除客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result remove(LazyNettyClientBlacklist lazyNettyClientBlacklist); + + /** + * describe 是否存在客户端黑名单 + * + * @param lazyNettyClientBlacklist 是否存在客户端黑名单 + * @return {@link Result} 客户端黑名单是否存在 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result exists(LazyNettyClientBlacklist lazyNettyClientBlacklist); + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/state/LazyNettyClientState.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/state/LazyNettyClientState.java new file mode 100644 index 00000000..6994a07d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/state/LazyNettyClientState.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_state", description = "客户端状态") +public class LazyNettyClientState { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "onLineState", example = "") + private NettyClientStatus onLineState; + + /** + * 暂存状态(开启、关闭) + */ + @Schema(description = "暂存状态(开启、关闭)", name = "staging", example = "") + private String stagingState; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/state/LazyNettyClientStateRepository.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/state/LazyNettyClientStateRepository.java new file mode 100644 index 00000000..f4136ea2 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/client/state/LazyNettyClientStateRepository.java @@ -0,0 +1,114 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository; + +import java.util.List; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyDomainRepository + **/ + +public interface LazyNettyClientStateRepository { + + + /** + * describe 新增客户端状态 + * + * @param lazyNettyClientState 新增客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result story(LazyNettyClientState lazyNettyClientState); + + /** + * describe 批量新增客户端状态 + * + * @param lazyNettyClientStateList 批量新增客户端状态 + * @return {@link Result>} 客户端状态新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> batchStory(List lazyNettyClientStateList); + + /** + * describe 查询单个客户端状态 + * + * @param lazyNettyClientState 查询单个客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result findOne(LazyNettyClientState lazyNettyClientState); + + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientState 查询多个客户端状态 + * @return {@link Result>} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findList(LazyNettyClientState lazyNettyClientState); + + /** + * describe 分页查询多个客户端状态 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyClientState 分页查询多个客户端状态 + * @return {@link Result>} 分页客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findPage(int size, int current, LazyNettyClientState lazyNettyClientState); + + /** + * describe 删除客户端状态 + * + * @param lazyNettyClientState 删除客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result remove(LazyNettyClientState lazyNettyClientState); + + /** + * describe 是否存在客户端状态 + * + * @param lazyNettyClientState 是否存在客户端状态 + * @return {@link Result} 客户端状态是否存在 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result exists(LazyNettyClientState lazyNettyClientState); + + /** + * 修改客户端在线状态 + * + * @param lazyNettyClientState 客户端状态 + * @return Result + */ + Result updateOnLIneState(LazyNettyClientState lazyNettyClientState); + + /** + * 修改客户端暂存状态 + * + * @param lazyNettyClientState 客户端信息 + * @return Result + */ + Result updateStagingState(LazyNettyClientState lazyNettyClientState); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/server/visitor/LazyNettyServerVisitor.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/server/visitor/LazyNettyServerVisitor.java new file mode 100644 index 00000000..9d1d6e74 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/server/visitor/LazyNettyServerVisitor.java @@ -0,0 +1,63 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain; + +import java.time.LocalDateTime; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_server_visitor", description = "服务端提前开放出来的端口") +public class LazyNettyServerVisitor { + + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + + /** + * 用户ID + */ + @Schema(description = "用户ID", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/server/visitor/LazyNettyServerVisitorRepository.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/server/visitor/LazyNettyServerVisitorRepository.java new file mode 100644 index 00000000..3c100ae6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/netty/server/visitor/LazyNettyServerVisitorRepository.java @@ -0,0 +1,99 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository; + +import java.util.List; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyDomainRepository + **/ + +public interface LazyNettyServerVisitorRepository { + + + /** + * describe 新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 新增服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result story(LazyNettyServerVisitor lazyNettyServerVisitor); + + /** + * describe 批量新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorList 批量新增服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result> batchStory(List lazyNettyServerVisitorList); + + /** + * describe 查询单个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 查询单个服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result findOne(LazyNettyServerVisitor lazyNettyServerVisitor); + + /** + * describe 查询多个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 查询多个服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口DTO对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result> findList(LazyNettyServerVisitor lazyNettyServerVisitor); + + /** + * describe 分页查询多个服务端提前开放出来的端口 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyServerVisitor 分页查询多个服务端提前开放出来的端口 + * @return {@link Result>} 分页服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result> findPage(int size, int current, LazyNettyServerVisitor lazyNettyServerVisitor); + + /** + * describe 删除服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 删除服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result remove(LazyNettyServerVisitor lazyNettyServerVisitor); + + /** + * describe 是否存在服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 是否存在服务端提前开放出来的端口 + * @return {@link Result} 服务端提前开放出来的端口是否存在 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + Result exists(LazyNettyServerVisitor lazyNettyServerVisitor); + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/LazyClientPerDayFlow.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/LazyClientPerDayFlow.java new file mode 100644 index 00000000..2f3760d6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/LazyClientPerDayFlow.java @@ -0,0 +1,70 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * describe 客户端每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_per_day_flow",description = "客户端每日统计流量") +public class LazyClientPerDayFlow { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + private String clientId; + + + /** + * + * 日期 + */ + @Schema(description ="日期",name ="day",example = "") + private String day; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/flow/LazyVisitorPortFlow.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/flow/LazyVisitorPortFlow.java new file mode 100644 index 00000000..5b2a974f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/flow/LazyVisitorPortFlow.java @@ -0,0 +1,75 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain; + +import java.time.LocalDateTime; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_flow", description = "访客端流量") +public class LazyVisitorPortFlow { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/flow/LazyVisitorPortFlowRepository.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/flow/LazyVisitorPortFlowRepository.java new file mode 100644 index 00000000..8899ebd3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/flow/LazyVisitorPortFlowRepository.java @@ -0,0 +1,117 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.web.response.Result; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository; + +import java.util.List; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyDomainRepository + **/ + +public interface LazyVisitorPortFlowRepository { + + + /** + * describe 新增访客端流量 + * + * @param lazyVisitorPortFlow 新增访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result story(LazyVisitorPortFlow lazyVisitorPortFlow); + + /** + * describe 批量新增访客端流量 + * + * @param lazyVisitorPortFlowList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> batchStory(List lazyVisitorPortFlowList); + + /** + * describe 查询单个访客端流量 + * + * @param lazyVisitorPortFlow 查询单个访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result findOne(LazyVisitorPortFlow lazyVisitorPortFlow); + + /** + * describe 查询多个访客端流量 + * + * @param lazyVisitorPortFlow 查询多个访客端流量 + * @return {@link Result>} 访客端流量DTO对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> findList(LazyVisitorPortFlow lazyVisitorPortFlow); + + /** + * describe 分页查询多个访客端流量 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyVisitorPortFlow 分页查询多个访客端流量 + * @return {@link Result>} 分页访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> findPage(int size, int current, LazyVisitorPortFlow lazyVisitorPortFlow); + + /** + * describe 删除访客端流量 + * + * @param lazyVisitorPortFlow 删除访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result remove(LazyVisitorPortFlow lazyVisitorPortFlow); + + /** + * describe 是否存在访客端流量 + * + * @param lazyVisitorPortFlow 是否存在访客端流量 + * @return {@link Result} 访客端流量是否存在 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result exists(LazyVisitorPortFlow lazyVisitorPortFlow); + + /** + * 根据客户端查询流量 + * + * @param size 分页大小 + * @param current 分页 + * @param lazyVisitorPortFlow 查询条件 + * @return {@link Result>} 分页访客端流量DTO对象 + */ + Result> findPageGroupByClientId(int size, int current, LazyVisitorPortFlow lazyVisitorPortFlow); + + /** + * 根据客户端ID查询出 客户端所有的进出口流量 + * + * @param clientIdList 客户端ID + * @param serverId 服务ID + * @return 客户端所有的进出口流量 + */ + List findListByClientIds(List clientIdList, String serverId); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/port/per/day/flow/LazyVisitorPortPerDayFlow.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/port/per/day/flow/LazyVisitorPortPerDayFlow.java new file mode 100644 index 00000000..e650c287 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/port/per/day/flow/LazyVisitorPortPerDayFlow.java @@ -0,0 +1,91 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_visitor_port_per_day_flow",description = "每日统计流量") +public class LazyVisitorPortPerDayFlow { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + private String clientId; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + private LocalDateTime createTime; + + /** + * + * 日期 + */ + @Schema(description ="日期",name ="day",example = "") + private String day; + + /** + * + * 主键 + */ + @Schema(description ="主键",name ="id",example = "") + private Long id; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowRepository.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowRepository.java new file mode 100644 index 00000000..0138dabf --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/domain/model/visitor/port/per/day/flow/LazyVisitorPortPerDayFlowRepository.java @@ -0,0 +1,110 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.LazyClientPerDayFlow; +import org.wu.framework.web.response.Result; + +import java.util.List; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository + **/ + +public interface LazyVisitorPortPerDayFlowRepository { + + + /** + * describe 新增每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 新增每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量新增后领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result story(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow); + + /** + * describe 批量新增每日统计流量 + * + * @param lazyVisitorPortPerDayFlowList 批量新增每日统计流量 + * @return {@link Result>} 每日统计流量新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result> batchStory(List lazyVisitorPortPerDayFlowList); + + /** + * describe 查询单个每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 查询单个每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量DTO对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result findOne(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow); + + /** + * describe 查询多个每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 查询多个每日统计流量 + * @return {@link Result>} 每日统计流量DTO对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result> findList(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow); + + /** + * describe 分页查询多个每日统计流量 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyVisitorPortPerDayFlow 分页查询多个每日统计流量 + * @return {@link Result>} 分页每日统计流量领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result> findPage(int size, int current, LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow); + + /** + * describe 删除每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 删除每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result remove(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow); + + /** + * describe 是否存在每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 是否存在每日统计流量 + * @return {@link Result} 每日统计流量是否存在 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + Result exists(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow); + + /** + * 获取客户端每天流量 + * @return 客户端每天流量 + */ + Result> findClientPerDayFlowList(); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyInternalNetworkPenetrationMappingConverter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyInternalNetworkPenetrationMappingConverter.java new file mode 100644 index 00000000..21a93eb1 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyInternalNetworkPenetrationMappingConverter.java @@ -0,0 +1,47 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter; + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyInternalNetworkPenetrationMappingDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping.LazyInternalNetworkPenetrationMapping; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface LazyInternalNetworkPenetrationMappingConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMappingConverter INSTANCE = Mappers.getMapper(LazyInternalNetworkPenetrationMappingConverter.class); + + /** + * describe 实体对象 转换成领域对象 + * + * @param lazyInternalNetworkPenetrationMappingDO 内网穿透映射实体对象 + * @return {@link LazyInternalNetworkPenetrationMapping} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMapping toInternalNetworkPenetrationMapping(LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO); + + /** + * describe 领域对象 转换成实体对象 + * + * @param lazyInternalNetworkPenetrationMapping 内网穿透映射领域对象 + * @return {@link LazyInternalNetworkPenetrationMappingDO} 内网穿透映射实体对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + LazyInternalNetworkPenetrationMappingDO fromInternalNetworkPenetrationMapping(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyClientBlacklistConverter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyClientBlacklistConverter.java new file mode 100644 index 00000000..d2bf4544 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyClientBlacklistConverter.java @@ -0,0 +1,48 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter; + + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientBlacklistDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklist; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface LazyNettyClientBlacklistConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklistConverter INSTANCE = Mappers.getMapper(LazyNettyClientBlacklistConverter.class); + + /** + * describe 实体对象 转换成领域对象 + * + * @param lazyNettyClientBlacklistDO 客户端黑名单实体对象 + * @return {@link LazyNettyClientBlacklist} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklist toNettyClientBlacklist(LazyNettyClientBlacklistDO lazyNettyClientBlacklistDO); + + /** + * describe 领域对象 转换成实体对象 + * + * @param lazyNettyClientBlacklist 客户端黑名单领域对象 + * @return {@link LazyNettyClientBlacklistDO} 客户端黑名单实体对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientBlacklistDO fromNettyClientBlacklist(LazyNettyClientBlacklist lazyNettyClientBlacklist); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyClientStateConverter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyClientStateConverter.java new file mode 100644 index 00000000..ec4ef351 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyClientStateConverter.java @@ -0,0 +1,47 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter; + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientStateDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientState; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface LazyNettyClientStateConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientStateConverter INSTANCE = Mappers.getMapper(LazyNettyClientStateConverter.class); + + /** + * describe 实体对象 转换成领域对象 + * + * @param lazyNettyClientStateDO 客户端状态实体对象 + * @return {@link LazyNettyClientState} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientState toNettyClientState(LazyNettyClientStateDO lazyNettyClientStateDO); + + /** + * describe 领域对象 转换成实体对象 + * + * @param lazyNettyClientState 客户端状态领域对象 + * @return {@link LazyNettyClientStateDO} 客户端状态实体对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientStateDO fromNettyClientState(LazyNettyClientState lazyNettyClientState); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyServerVisitorConverter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyServerVisitorConverter.java new file mode 100644 index 00000000..a1f2e42c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyNettyServerVisitorConverter.java @@ -0,0 +1,47 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter; + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyServerVisitorDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor.LazyNettyServerVisitor; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface LazyNettyServerVisitorConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitorConverter INSTANCE = Mappers.getMapper(LazyNettyServerVisitorConverter.class); + + /** + * describe 实体对象 转换成领域对象 + * + * @param lazyNettyServerVisitorDO 服务端提前开放出来的端口实体对象 + * @return {@link LazyNettyServerVisitor} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitor toNettyServerVisitor(LazyNettyServerVisitorDO lazyNettyServerVisitorDO); + + /** + * describe 领域对象 转换成实体对象 + * + * @param lazyNettyServerVisitor 服务端提前开放出来的端口领域对象 + * @return {@link LazyNettyServerVisitorDO} 服务端提前开放出来的端口实体对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + LazyNettyServerVisitorDO fromNettyServerVisitor(LazyNettyServerVisitor lazyNettyServerVisitor); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyVisitorPortFlowConverter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyVisitorPortFlowConverter.java new file mode 100644 index 00000000..1930ac9e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyVisitorPortFlowConverter.java @@ -0,0 +1,47 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter; + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyVisitorPortFlowDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlow; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface LazyVisitorPortFlowConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlowConverter INSTANCE = Mappers.getMapper(LazyVisitorPortFlowConverter.class); + + /** + * describe 实体对象 转换成领域对象 + * + * @param lazyVisitorPortFlowDO 访客端流量实体对象 + * @return {@link LazyVisitorPortFlow} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlow toVisitorFlow(LazyVisitorPortFlowDO lazyVisitorPortFlowDO); + + /** + * describe 领域对象 转换成实体对象 + * + * @param lazyVisitorPortFlow 访客端流量领域对象 + * @return {@link LazyVisitorPortFlowDO} 访客端流量实体对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + LazyVisitorPortFlowDO fromVisitorFlow(LazyVisitorPortFlow lazyVisitorPortFlow); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyVisitorPortPerDayFlowConverter.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyVisitorPortPerDayFlowConverter.java new file mode 100644 index 00000000..a5dc7423 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/converter/LazyVisitorPortPerDayFlowConverter.java @@ -0,0 +1,48 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlow; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyVisitorPortPerDayFlowDO; +import org.mapstruct.factory.Mappers; +import org.mapstruct.Mapper; +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface LazyVisitorPortPerDayFlowConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + + + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlowConverter INSTANCE = Mappers.getMapper(LazyVisitorPortPerDayFlowConverter.class); + /** + * describe 实体对象 转换成领域对象 + * + * @param lazyVisitorPortPerDayFlowDO 每日统计流量实体对象 + * @return {@link LazyVisitorPortPerDayFlow} 每日统计流量领域对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlow toVisitorPortPerDayFlow(LazyVisitorPortPerDayFlowDO lazyVisitorPortPerDayFlowDO); + /** + * describe 领域对象 转换成实体对象 + * + * @param lazyVisitorPortPerDayFlow 每日统计流量领域对象 + * @return {@link LazyVisitorPortPerDayFlowDO} 每日统计流量实体对象 + + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + LazyVisitorPortPerDayFlowDO fromVisitorPortPerDayFlow(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow); +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyInternalNetworkPenetrationMappingDO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyInternalNetworkPenetrationMappingDO.java new file mode 100644 index 00000000..fd96d3d6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyInternalNetworkPenetrationMappingDO.java @@ -0,0 +1,94 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity; +import org.wu.framework.lazy.orm.core.stereotype.*; + +import java.time.LocalDateTime; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "lazy_internal_network_penetration_mapping", comment = "内网穿透映射") +@Schema(title = "lazy_internal_network_penetration_mapping", description = "内网穿透映射") +public class LazyInternalNetworkPenetrationMappingDO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + @LazyTableField(name = "client_id", comment = "客户端ID", columnType = "varchar(255)") + private String clientId; + + /** + * 客户端目标地址 + */ + @Schema(description = "客户端目标地址", name = "clientTargetIp", example = "") + @LazyTableField(name = "client_target_ip", comment = "客户端目标地址", columnType = "varchar(255)", defaultValue = "'0.0.0.0'") + private String clientTargetIp; + + /** + * 客户端目标端口 + */ + @Schema(description = "客户端目标端口", name = "clientTargetPort", example = "") + @LazyTableField(name = "client_target_port", comment = "客户端目标端口", columnType = "int", notNull = true) + private Integer clientTargetPort; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + @LazyTableFieldCreateTime + private LocalDateTime createTime; + + /** + * 主键自增 + */ + @Schema(description = "主键自增", name = "id", example = "") + @LazyTableFieldId + private Long id; + + /** + * 是否删除 默认否 + */ + @Schema(description = "是否删除 默认否", name = "isDeleted", example = "") + @LazyTableField(name = "is_deleted", comment = "是否删除 默认否", columnType = "tinyint", defaultValue = "'0'") + private Boolean isDeleted; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + @LazyTableFieldUpdateTime + private LocalDateTime updateTime; + + /** + * 访问端口 + */ + @Schema(description = "访问端口", name = "visitorPort", example = "") + @LazyTableFieldUnique(comment = "访问端口", notNull = true) + private Integer visitorPort; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + @LazyTableField(comment = "描述") + private String describe; + /** + * 服务端ID + */ + @LazyTableFieldUnique(name = "server_id", comment = "服务端ID") + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientBlacklistDO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientBlacklistDO.java new file mode 100644 index 00000000..4564e18c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientBlacklistDO.java @@ -0,0 +1,66 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity; +import org.wu.framework.lazy.orm.core.stereotype.*; + +import java.time.LocalDateTime; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "lazy_netty_client_blacklist", comment = "客户端黑名单") +@Schema(title = "lazy_netty_client_blacklist", description = "客户端黑名单") +public class LazyNettyClientBlacklistDO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + @LazyTableFieldUnique(name = "client_id", comment = "客户端ID", columnType = "varchar(255)") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + @LazyTableFieldCreateTime + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + @LazyTableFieldId(name = "id", comment = "主键") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + @LazyTableField(name = "is_deleted", comment = "是否删除", columnType = "tinyint") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + @LazyTableFieldUpdateTime + private LocalDateTime updateTime; + /** + * 服务端ID + */ + @LazyTableFieldUnique(name = "server_id", comment = "服务端ID",notNull = true) + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateDO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateDO.java new file mode 100644 index 00000000..be59b64c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateDO.java @@ -0,0 +1,88 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity; +import org.wu.framework.lazy.orm.core.stereotype.*; +import org.framework.smart.agent.network.heartbeat.common.enums.NettyClientStatus; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "lazy_netty_client_state", comment = "客户端状态") +@Schema(title = "lazy_netty_client_state", description = "客户端状态") +public class LazyNettyClientStateDO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + @LazyTableFieldUnique(name = "client_id", comment = "客户端ID", columnType = "varchar(255)") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + @LazyTableFieldCreateTime + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + @LazyTableFieldId(name = "id", comment = "主键") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + @LazyTableField(name = "is_deleted", comment = "是否删除", defaultValue = "'0'", columnType = "tinyint") + private Boolean isDeleted; + + /** + * 在线状态(true在线,false离线) + */ + @Schema(description = "在线状态(true在线,false离线)", name = "onLineState", example = "") + @LazyTableField(name = "on_line_state", comment = "在线状态(true在线,false离线)", columnType = "varchar(255)") + private NettyClientStatus onLineState; + + /** + * 暂存状态(开启、关闭) + */ + @Schema(description = "暂存状态(开启、关闭)", name = "staging", example = "") + @LazyTableField(name = "staging_state", comment = "暂存状态(开启、关闭)", columnType = "varchar(255)") + private String stagingState; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + @LazyTableFieldUpdateTime + private LocalDateTime updateTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + @LazyTableField(comment = "描述") + private String describe; + /** + * 服务端ID + */ + @LazyTableFieldUnique(name = "server_id", comment = "服务端ID",notNull = true) + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyServerVisitorDO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyServerVisitorDO.java new file mode 100644 index 00000000..06a875fe --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyServerVisitorDO.java @@ -0,0 +1,73 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity; +import org.wu.framework.lazy.orm.core.stereotype.*; + +import java.time.LocalDateTime; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "lazy_netty_server_visitor", comment = "服务端提前开放出来的端口") +@Schema(title = "lazy_netty_server_visitor", description = "服务端提前开放出来的端口") +public class LazyNettyServerVisitorDO { + + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + @LazyTableField(name = "create_time", comment = "创建时间", defaultValue = "CURRENT_TIMESTAMP", upsertStrategy = LazyFieldStrategy.NEVER, extra = " on update CURRENT_TIMESTAMP") + private LocalDateTime createTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + @LazyTableField(name = "describe", comment = "描述", columnType = "varchar(255)") + private String describe; + + /** + * 用户ID + */ + @Schema(description = "用户ID", name = "id", example = "") + @LazyTableFieldId(name = "id", comment = "用户ID") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + @LazyTableField(name = "is_deleted", comment = "是否删除") + private Boolean isDeleted; + + /** + * 更新时间 + */ + @Schema(description = "更新时间", name = "updateTime", example = "") + @LazyTableField(name = "update_time", comment = "更新时间", defaultValue = "CURRENT_TIMESTAMP", upsertStrategy = LazyFieldStrategy.NEVER, extra = " on update CURRENT_TIMESTAMP") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + @LazyTableFieldUnique(name = "visitor_port", comment = "访客端口", columnType = "int") + private Integer visitorPort; + /** + * 服务端ID + */ + @LazyTableFieldUnique(name = "server_id", comment = "服务端ID",notNull = true) + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortFlowDO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortFlowDO.java new file mode 100644 index 00000000..9523f870 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortFlowDO.java @@ -0,0 +1,88 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity; +import org.wu.framework.lazy.orm.core.stereotype.*; + +import java.time.LocalDateTime; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "lazy_visitor_port_flow", comment = "访客端流量") +@Schema(title = "lazy_visitor_port_flow", description = "访客端流量") +public class LazyVisitorPortFlowDO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + @LazyTableFieldUnique(name = "client_id", comment = "客户端ID", columnType = "varchar(50)") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + @LazyTableFieldCreateTime + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + @LazyTableFieldId(name = "id", comment = "主键") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + @LazyTableField(name = "in_flow", comment = "当前访客当前进口流量", columnType = "int") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + @LazyTableField(name = "is_deleted", comment = "是否删除", defaultValue = "'0'", upsertStrategy = LazyFieldStrategy.NEVER, columnType = "tinyint") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + @LazyTableField(name = "out_flow", comment = "当前访客出口流量", columnType = "int") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + @LazyTableFieldUpdateTime + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + @LazyTableFieldUnique(name = "visitor_port", comment = "访客端口", columnType = "int") + private Integer visitorPort; /** + /** + * 服务端ID + */ + @LazyTableFieldUnique(name = "server_id", comment = "服务端ID",notNull = true) + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortPerDayFlowDO.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortPerDayFlowDO.java new file mode 100644 index 00000000..ff249078 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/entity/LazyVisitorPortPerDayFlowDO.java @@ -0,0 +1,101 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.wu.framework.lazy.orm.core.stereotype.LazyTable; +import org.wu.framework.lazy.orm.core.stereotype.LazyTableField; +import org.wu.framework.lazy.orm.core.stereotype.*; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.lang.String; +import java.time.LocalDateTime; + +import org.wu.framework.lazy.orm.core.stereotype.LazyTableFieldId; + +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; + +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "lazy_visitor_port_per_day_flow", comment = "每日统计流量") +@Schema(title = "lazy_visitor_port_per_day_flow", description = "每日统计流量") +public class LazyVisitorPortPerDayFlowDO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + @LazyTableFieldUnique(name = "client_id", comment = "客户端ID", columnType = "varchar(50)") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + @LazyTableField(name = "create_time", comment = "创建时间", defaultValue = "CURRENT_TIMESTAMP", upsertStrategy = LazyFieldStrategy.NEVER, extra = "") + private LocalDateTime createTime; + + /** + * 日期 + */ + @Schema(description = "日期", name = "day", example = "") + @LazyTableFieldUnique(name = "day", comment = "日期", columnType = "varchar(255)") + private String day; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + @LazyTableFieldId(name = "id", comment = "主键") + private Long id; + + /** + * 当前访客当前进口流量 + */ + @Schema(description = "当前访客当前进口流量", name = "inFlow", example = "") + @LazyTableField(name = "in_flow", comment = "当前访客当前进口流量", columnType = "int") + private Integer inFlow; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + @LazyTableField(name = "is_deleted", comment = "是否删除", defaultValue = "'0'", upsertStrategy = LazyFieldStrategy.NEVER, columnType = "tinyint") + private Boolean isDeleted; + + /** + * 当前访客出口流量 + */ + @Schema(description = "当前访客出口流量", name = "outFlow", example = "") + @LazyTableField(name = "out_flow", comment = "当前访客出口流量", columnType = "int") + private Integer outFlow; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + @LazyTableField(name = "update_time", comment = "修改时间", defaultValue = "CURRENT_TIMESTAMP", upsertStrategy = LazyFieldStrategy.NEVER, extra = " on update CURRENT_TIMESTAMP") + private LocalDateTime updateTime; + + /** + * 访客端口 + */ + @Schema(description = "访客端口", name = "visitorPort", example = "") + @LazyTableFieldUnique(name = "visitor_port", comment = "访客端口", columnType = "int") + private Integer visitorPort; + /** + * 服务端ID + */ + @LazyTableFieldUnique(name = "server_id", comment = "服务端ID",notNull = true) + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyInternalNetworkPenetrationMappingMapper.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyInternalNetworkPenetrationMappingMapper.java new file mode 100644 index 00000000..7474d9f9 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyInternalNetworkPenetrationMappingMapper.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.mapper; + +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyInternalNetworkPenetrationMappingMapper { + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyClientBlacklistMapper.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyClientBlacklistMapper.java new file mode 100644 index 00000000..396e03bf --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyClientBlacklistMapper.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.mapper; + +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyNettyClientBlacklistMapper { + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyClientStateMapper.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyClientStateMapper.java new file mode 100644 index 00000000..f7640846 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyClientStateMapper.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.mapper; + +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyNettyClientStateMapper { + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyServerVisitorMapper.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyServerVisitorMapper.java new file mode 100644 index 00000000..b2663f06 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyServerVisitorMapper.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.mapper; + +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyNettyServerVisitorMapper { + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyServerVisitorPortMapper.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyServerVisitorPortMapper.java new file mode 100644 index 00000000..5f1cc430 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyNettyServerVisitorPortMapper.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.mapper; + +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:13 下午 + * @see DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyNettyServerVisitorPortMapper { + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyVisitorPortFlowMapper.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyVisitorPortFlowMapper.java new file mode 100644 index 00000000..27bb91c0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyVisitorPortFlowMapper.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.mapper; + +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyVisitorPortFlowMapper { + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyVisitorPortPerDayFlowMapper.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyVisitorPortPerDayFlowMapper.java new file mode 100644 index 00000000..55d14695 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/mapper/LazyVisitorPortPerDayFlowMapper.java @@ -0,0 +1,15 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.mapper; + +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper + **/ + +public interface LazyVisitorPortPerDayFlowMapper { + + + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyInternalNetworkPenetrationMappingRepositoryImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyInternalNetworkPenetrationMappingRepositoryImpl.java new file mode 100644 index 00000000..505b12d6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyInternalNetworkPenetrationMappingRepositoryImpl.java @@ -0,0 +1,148 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.persistence; + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyInternalNetworkPenetrationMappingDO; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Repository; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter.LazyInternalNetworkPenetrationMappingConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping.LazyInternalNetworkPenetrationMapping; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.internal.network.penetration.mapping.LazyInternalNetworkPenetrationMappingRepository; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 内网穿透映射 + * + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + * @see DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class LazyInternalNetworkPenetrationMappingRepositoryImpl implements LazyInternalNetworkPenetrationMappingRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 新增内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result story(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping) { + LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO = LazyInternalNetworkPenetrationMappingConverter.INSTANCE.fromInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMapping); + lazyInternalNetworkPenetrationMappingDO.setIsDeleted(false); + lazyLambdaStream.upsertRemoveNull(lazyInternalNetworkPenetrationMappingDO); + return ResultFactory.successOf(); + } + + /** + * describe 批量新增内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMappingList 批量新增内网穿透映射 + * @return {@link Result>} 内网穿透映射新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result> batchStory(List lazyInternalNetworkPenetrationMappingList) { + List lazyInternalNetworkPenetrationMappingDOList = lazyInternalNetworkPenetrationMappingList.stream().map(LazyInternalNetworkPenetrationMappingConverter.INSTANCE::fromInternalNetworkPenetrationMapping).collect(Collectors.toList()); + lazyLambdaStream.upsert(lazyInternalNetworkPenetrationMappingDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 查询单个内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result findOne(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping) { + LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO = LazyInternalNetworkPenetrationMappingConverter.INSTANCE.fromInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMapping); + LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMappingOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyInternalNetworkPenetrationMappingDO), LazyInternalNetworkPenetrationMapping.class); + return ResultFactory.successOf(lazyInternalNetworkPenetrationMappingOne); + } + + /** + * describe 查询多个内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 查询多个内网穿透映射 + * @return {@link Result>} 内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result> findList(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping) { + LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO = LazyInternalNetworkPenetrationMappingConverter.INSTANCE.fromInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMapping); + List lazyInternalNetworkPenetrationMappingList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyInternalNetworkPenetrationMappingDO), LazyInternalNetworkPenetrationMapping.class); + return ResultFactory.successOf(lazyInternalNetworkPenetrationMappingList); + } + + /** + * describe 分页查询多个内网穿透映射 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyInternalNetworkPenetrationMapping 分页查询多个内网穿透映射 + * @return {@link Result>} 分页内网穿透映射领域对象 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping) { + LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO = LazyInternalNetworkPenetrationMappingConverter.INSTANCE.fromInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMapping); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage internalNetworkPenetrationMappingLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyInternalNetworkPenetrationMappingDO), lazyPage, LazyInternalNetworkPenetrationMapping.class); + return ResultFactory.successOf(internalNetworkPenetrationMappingLazyPage); + } + + /** + * describe 删除内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 删除内网穿透映射 + * @return {@link Result< LazyInternalNetworkPenetrationMapping >} 内网穿透映射 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result remove(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping) { + LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO = LazyInternalNetworkPenetrationMappingConverter.INSTANCE.fromInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMapping); + lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyInternalNetworkPenetrationMappingDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在内网穿透映射 + * + * @param lazyInternalNetworkPenetrationMapping 内网穿透映射领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + * @author Jia wei Wu + * @date 2023/12/29 05:21 下午 + **/ + + @Override + public Result exists(LazyInternalNetworkPenetrationMapping lazyInternalNetworkPenetrationMapping) { + LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO = LazyInternalNetworkPenetrationMappingConverter.INSTANCE.fromInternalNetworkPenetrationMapping(lazyInternalNetworkPenetrationMapping); + Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyInternalNetworkPenetrationMappingDO)); + return ResultFactory.successOf(exists); + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientBlacklistRepositoryImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientBlacklistRepositoryImpl.java new file mode 100644 index 00000000..51873a76 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientBlacklistRepositoryImpl.java @@ -0,0 +1,147 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.persistence; + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientBlacklistDO; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Repository; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyClientBlacklistConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklist; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.blacklist.LazyNettyClientBlacklistRepository; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 客户端黑名单 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class LazyNettyClientBlacklistRepositoryImpl implements LazyNettyClientBlacklistRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增客户端黑名单 + * + * @param lazyNettyClientBlacklist 新增客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result story(LazyNettyClientBlacklist lazyNettyClientBlacklist) { + LazyNettyClientBlacklistDO lazyNettyClientBlacklistDO = LazyNettyClientBlacklistConverter.INSTANCE.fromNettyClientBlacklist(lazyNettyClientBlacklist); + lazyLambdaStream.upsert(lazyNettyClientBlacklistDO); + return ResultFactory.successOf(); + } + + /** + * describe 批量新增客户端黑名单 + * + * @param lazyNettyClientBlacklistList 批量新增客户端黑名单 + * @return {@link Result>} 客户端黑名单新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyClientBlacklistList) { + List lazyNettyClientBlacklistDOList = lazyNettyClientBlacklistList.stream().map(LazyNettyClientBlacklistConverter.INSTANCE::fromNettyClientBlacklist).collect(Collectors.toList()); + lazyLambdaStream.upsert(lazyNettyClientBlacklistDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个客户端黑名单 + * + * @param lazyNettyClientBlacklist 查询单个客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result findOne(LazyNettyClientBlacklist lazyNettyClientBlacklist) { + LazyNettyClientBlacklistDO lazyNettyClientBlacklistDO = LazyNettyClientBlacklistConverter.INSTANCE.fromNettyClientBlacklist(lazyNettyClientBlacklist); + LazyNettyClientBlacklist lazyNettyClientBlacklistOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyNettyClientBlacklistDO), LazyNettyClientBlacklist.class); + return ResultFactory.successOf(lazyNettyClientBlacklistOne); + } + + /** + * describe 查询多个客户端黑名单 + * + * @param lazyNettyClientBlacklist 查询多个客户端黑名单 + * @return {@link Result>} 客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> findList(LazyNettyClientBlacklist lazyNettyClientBlacklist) { + LazyNettyClientBlacklistDO lazyNettyClientBlacklistDO = LazyNettyClientBlacklistConverter.INSTANCE.fromNettyClientBlacklist(lazyNettyClientBlacklist); + List lazyNettyClientBlacklistList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyNettyClientBlacklistDO), LazyNettyClientBlacklist.class); + return ResultFactory.successOf(lazyNettyClientBlacklistList); + } + + /** + * describe 分页查询多个客户端黑名单 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyClientBlacklist 分页查询多个客户端黑名单 + * @return {@link Result>} 分页客户端黑名单领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyClientBlacklist lazyNettyClientBlacklist) { + LazyNettyClientBlacklistDO lazyNettyClientBlacklistDO = LazyNettyClientBlacklistConverter.INSTANCE.fromNettyClientBlacklist(lazyNettyClientBlacklist); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage nettyClientBlacklistLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyNettyClientBlacklistDO), lazyPage, LazyNettyClientBlacklist.class); + return ResultFactory.successOf(nettyClientBlacklistLazyPage); + } + + /** + * describe 删除客户端黑名单 + * + * @param lazyNettyClientBlacklist 删除客户端黑名单 + * @return {@link Result< LazyNettyClientBlacklist >} 客户端黑名单 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result remove(LazyNettyClientBlacklist lazyNettyClientBlacklist) { + LazyNettyClientBlacklistDO lazyNettyClientBlacklistDO = LazyNettyClientBlacklistConverter.INSTANCE.fromNettyClientBlacklist(lazyNettyClientBlacklist); + // lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyNettyClientBlacklistDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在客户端黑名单 + * + * @param lazyNettyClientBlacklist 客户端黑名单领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result exists(LazyNettyClientBlacklist lazyNettyClientBlacklist) { + LazyNettyClientBlacklistDO lazyNettyClientBlacklistDO = LazyNettyClientBlacklistConverter.INSTANCE.fromNettyClientBlacklist(lazyNettyClientBlacklist); + Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyNettyClientBlacklistDO)); + return ResultFactory.successOf(exists); + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientStateRepositoryImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientStateRepositoryImpl.java new file mode 100644 index 00000000..4e9ba120 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientStateRepositoryImpl.java @@ -0,0 +1,184 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.persistence; + +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientState; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.client.state.LazyNettyClientStateRepository; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyClientStateConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientStateDO; +import org.springframework.stereotype.Repository; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class LazyNettyClientStateRepositoryImpl implements LazyNettyClientStateRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增客户端状态 + * + * @param lazyNettyClientState 新增客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态新增后领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result story(LazyNettyClientState lazyNettyClientState) { + + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + lazyLambdaStream.upsert(lazyNettyClientStateDO); + return ResultFactory.successOf(); + } + + /** + * describe 批量新增客户端状态 + * + * @param lazyNettyClientStateList 批量新增客户端状态 + * @return {@link Result>} 客户端状态新增后领域对象集合 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyClientStateList) { + List lazyNettyClientStateDOList = lazyNettyClientStateList.stream().map(LazyNettyClientStateConverter.INSTANCE::fromNettyClientState).collect(Collectors.toList()); + lazyLambdaStream.upsert(lazyNettyClientStateDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个客户端状态 + * + * @param lazyNettyClientState 查询单个客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result findOne(LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + lazyNettyClientStateDO.setIsDeleted(false); + LazyNettyClientState lazyNettyClientStateOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyNettyClientStateDO), LazyNettyClientState.class); + return ResultFactory.successOf(lazyNettyClientStateOne); + } + + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientState 查询多个客户端状态 + * @return {@link Result>} 客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> findList(LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + List lazyNettyClientStateList = lazyLambdaStream + .selectList(LazyWrappers.lambdaWrapperBean(lazyNettyClientStateDO) + .eq(LazyNettyClientStateDO::getIsDeleted, false) + .orderByDesc(LazyNettyClientStateDO::getCreateTime) + , LazyNettyClientState.class); + return ResultFactory.successOf(lazyNettyClientStateList); + } + + /** + * describe 分页查询多个客户端状态 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyClientState 分页查询多个客户端状态 + * @return {@link Result>} 分页客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage nettyClientStateLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyNettyClientStateDO), lazyPage, LazyNettyClientState.class); + return ResultFactory.successOf(nettyClientStateLazyPage); + } + + /** + * describe 删除客户端状态 + * + * @param lazyNettyClientState 删除客户端状态 + * @return {@link Result< LazyNettyClientState >} 客户端状态 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result remove(LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyNettyClientStateDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在客户端状态 + * + * @param lazyNettyClientState 客户端状态领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Override + public Result exists(LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyNettyClientStateDO)); + return ResultFactory.successOf(exists); + } + + /** + * 修改客户端状态 + * + * @param lazyNettyClientState 客户端状态 + * @return Result + */ + @Override + public Result updateOnLIneState(LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + // 查询客户端是否存在 + // 存在更新客户端在线状态 + // 不存在新增一条 + lazyLambdaStream.upsertRemoveNull(lazyNettyClientStateDO); + return ResultFactory.successOf(); + } + + /** + * 修改客户端暂存状态 + * + * @param lazyNettyClientState 客户端信息 + * @return Result + */ + @Override + public Result updateStagingState(LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + // 查询客户端是否存在 + // 存在更新客户端在线状态 + // 不存在新增一条 + lazyLambdaStream.upsertRemoveNull(lazyNettyClientStateDO); + return ResultFactory.successOf(); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerVisitorRepositoryImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerVisitorRepositoryImpl.java new file mode 100644 index 00000000..94014aad --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerVisitorRepositoryImpl.java @@ -0,0 +1,155 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.persistence; + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyServerVisitorDO; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Repository; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor.LazyNettyServerVisitor; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.netty.server.visitor.LazyNettyServerVisitorRepository; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyServerVisitorConverter; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 服务端提前开放出来的端口 + * + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + * @see DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class LazyNettyServerVisitorRepositoryImpl implements LazyNettyServerVisitorRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 新增服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result story(LazyNettyServerVisitor lazyNettyServerVisitor) { + LazyNettyServerVisitorDO lazyNettyServerVisitorDO = LazyNettyServerVisitorConverter.INSTANCE.fromNettyServerVisitor(lazyNettyServerVisitor); + lazyLambdaStream.upsertRemoveNull(lazyNettyServerVisitorDO); + return ResultFactory.successOf(); + } + + /** + * describe 批量新增服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitorList 批量新增服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result> batchStory(List lazyNettyServerVisitorList) { + List lazyNettyServerVisitorDOList = lazyNettyServerVisitorList.stream().map(LazyNettyServerVisitorConverter.INSTANCE::fromNettyServerVisitor).collect(Collectors.toList()); + lazyLambdaStream.upsert(lazyNettyServerVisitorDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 查询单个服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result findOne(LazyNettyServerVisitor lazyNettyServerVisitor) { + LazyNettyServerVisitorDO lazyNettyServerVisitorDO = LazyNettyServerVisitorConverter.INSTANCE.fromNettyServerVisitor(lazyNettyServerVisitor); + LazyNettyServerVisitor lazyNettyServerVisitorOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyNettyServerVisitorDO), LazyNettyServerVisitor.class); + return ResultFactory.successOf(lazyNettyServerVisitorOne); + } + + /** + * describe 查询多个服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 查询多个服务端提前开放出来的端口 + * @return {@link Result>} 服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result> findList(LazyNettyServerVisitor lazyNettyServerVisitor) { + LazyNettyServerVisitorDO lazyNettyServerVisitorDO = LazyNettyServerVisitorConverter.INSTANCE.fromNettyServerVisitor(lazyNettyServerVisitor); + List lazyNettyServerVisitorList = lazyLambdaStream + .selectList( + LazyWrappers.lambdaWrapperBean(lazyNettyServerVisitorDO) + .orderByDesc(LazyNettyServerVisitorDO::getCreateTime) + , LazyNettyServerVisitor.class); + return ResultFactory.successOf(lazyNettyServerVisitorList); + } + + /** + * describe 分页查询多个服务端提前开放出来的端口 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyServerVisitor 分页查询多个服务端提前开放出来的端口 + * @return {@link Result>} 分页服务端提前开放出来的端口领域对象 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyNettyServerVisitor lazyNettyServerVisitor) { + LazyNettyServerVisitorDO lazyNettyServerVisitorDO = LazyNettyServerVisitorConverter.INSTANCE.fromNettyServerVisitor(lazyNettyServerVisitor); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage nettyServerVisitorLazyPage = lazyLambdaStream + .selectPage( + LazyWrappers.lambdaWrapperBean(lazyNettyServerVisitorDO) + .orderByDesc(LazyNettyServerVisitorDO::getCreateTime) + , lazyPage, LazyNettyServerVisitor.class); + return ResultFactory.successOf(nettyServerVisitorLazyPage); + } + + /** + * describe 删除服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 删除服务端提前开放出来的端口 + * @return {@link Result< LazyNettyServerVisitor >} 服务端提前开放出来的端口 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result remove(LazyNettyServerVisitor lazyNettyServerVisitor) { + LazyNettyServerVisitorDO lazyNettyServerVisitorDO = LazyNettyServerVisitorConverter.INSTANCE.fromNettyServerVisitor(lazyNettyServerVisitor); + lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyNettyServerVisitorDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在服务端提前开放出来的端口 + * + * @param lazyNettyServerVisitor 服务端提前开放出来的端口领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + * @author Jia wei Wu + * @date 2024/01/16 02:21 下午 + **/ + + @Override + public Result exists(LazyNettyServerVisitor lazyNettyServerVisitor) { + LazyNettyServerVisitorDO lazyNettyServerVisitorDO = LazyNettyServerVisitorConverter.INSTANCE.fromNettyServerVisitor(lazyNettyServerVisitor); + Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyNettyServerVisitorDO)); + return ResultFactory.successOf(exists); + } + +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyVisitorPortFlowRepositoryImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyVisitorPortFlowRepositoryImpl.java new file mode 100644 index 00000000..799b206c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyVisitorPortFlowRepositoryImpl.java @@ -0,0 +1,189 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.persistence; + + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyVisitorPortFlowDO; +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Repository; +import org.wu.framework.core.utils.ObjectUtils; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlow; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlowRepository; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter.LazyVisitorPortFlowConverter; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class LazyVisitorPortFlowRepositoryImpl implements LazyVisitorPortFlowRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增访客端流量 + * + * @param lazyVisitorPortFlow 新增访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量新增后领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result story(LazyVisitorPortFlow lazyVisitorPortFlow) { + LazyVisitorPortFlowDO lazyVisitorPortFlowDO = LazyVisitorPortFlowConverter.INSTANCE.fromVisitorFlow(lazyVisitorPortFlow); + lazyLambdaStream.upsertRemoveNull(lazyVisitorPortFlowDO); + return ResultFactory.successOf(); + } + + /** + * describe 批量新增访客端流量 + * + * @param lazyVisitorPortFlowList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> batchStory(List lazyVisitorPortFlowList) { + List lazyVisitorPortFlowDOList = lazyVisitorPortFlowList.stream().map(LazyVisitorPortFlowConverter.INSTANCE::fromVisitorFlow).collect(Collectors.toList()); + lazyLambdaStream.upsert(lazyVisitorPortFlowDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个访客端流量 + * + * @param lazyVisitorPortFlow 查询单个访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result findOne(LazyVisitorPortFlow lazyVisitorPortFlow) { + LazyVisitorPortFlowDO lazyVisitorPortFlowDO = LazyVisitorPortFlowConverter.INSTANCE.fromVisitorFlow(lazyVisitorPortFlow); + LazyVisitorPortFlow lazyVisitorPortFlowOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyVisitorPortFlowDO), LazyVisitorPortFlow.class); + return ResultFactory.successOf(lazyVisitorPortFlowOne); + } + + /** + * describe 查询多个访客端流量 + * + * @param lazyVisitorPortFlow 查询多个访客端流量 + * @return {@link Result>} 访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> findList(LazyVisitorPortFlow lazyVisitorPortFlow) { + LazyVisitorPortFlowDO lazyVisitorPortFlowDO = LazyVisitorPortFlowConverter.INSTANCE.fromVisitorFlow(lazyVisitorPortFlow); + List lazyVisitorPortFlowList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyVisitorPortFlowDO), LazyVisitorPortFlow.class); + return ResultFactory.successOf(lazyVisitorPortFlowList); + } + + /** + * describe 分页查询多个访客端流量 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyVisitorPortFlow 分页查询多个访客端流量 + * @return {@link Result>} 分页访客端流量领域对象 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> findPage(int size, int current, LazyVisitorPortFlow lazyVisitorPortFlow) { + LazyVisitorPortFlowDO lazyVisitorPortFlowDO = LazyVisitorPortFlowConverter.INSTANCE.fromVisitorFlow(lazyVisitorPortFlow); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage visitorFlowLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyVisitorPortFlowDO), lazyPage, LazyVisitorPortFlow.class); + return ResultFactory.successOf(visitorFlowLazyPage); + } + + /** + * describe 删除访客端流量 + * + * @param lazyVisitorPortFlow 删除访客端流量 + * @return {@link Result< LazyVisitorPortFlow >} 访客端流量 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result remove(LazyVisitorPortFlow lazyVisitorPortFlow) { + LazyVisitorPortFlowDO lazyVisitorPortFlowDO = LazyVisitorPortFlowConverter.INSTANCE.fromVisitorFlow(lazyVisitorPortFlow); + lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyVisitorPortFlowDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在访客端流量 + * + * @param lazyVisitorPortFlow 访客端流量领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result exists(LazyVisitorPortFlow lazyVisitorPortFlow) { + LazyVisitorPortFlowDO lazyVisitorPortFlowDO = LazyVisitorPortFlowConverter.INSTANCE.fromVisitorFlow(lazyVisitorPortFlow); + Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyVisitorPortFlowDO)); + return ResultFactory.successOf(exists); + } + + /** + * 根据客户端查询流量 + * + * @param size 分页大小 + * @param current 分页 + * @param lazyVisitorPortFlow 查询条件 + * @return {@link Result>} 分页访客端流量DTO对象 + */ + @Override + public Result> findPageGroupByClientId(int size, int current, LazyVisitorPortFlow lazyVisitorPortFlow) { + LazyVisitorPortFlowDO lazyVisitorPortFlowDO = LazyVisitorPortFlowConverter.INSTANCE.fromVisitorFlow(lazyVisitorPortFlow); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage visitorFlowLazyPage = lazyLambdaStream + .selectPage( + LazyWrappers.lambdaWrapperBean(lazyVisitorPortFlowDO) + .groupBy(LazyVisitorPortFlowDO::getClientId), + lazyPage, + LazyVisitorPortFlow.class); + return ResultFactory.successOf(visitorFlowLazyPage); + } + + /** + * 根据客户端ID查询出 客户端所有的进出口流量 + * + * @param clientIdList 客户端ID + * @param serverId 服务端ID + * @return 客户端所有的进出口流量 + */ + @Override + public List findListByClientIds(List clientIdList, String serverId) { + if (ObjectUtils.isEmpty(clientIdList)) { + return new ArrayList<>(); + } + return lazyLambdaStream.selectList( + LazyWrappers.lambdaWrapper() + .in(LazyVisitorPortFlowDO::getClientId, clientIdList) + .eq(LazyVisitorPortFlowDO::getServerId, serverId), + LazyVisitorPortFlow.class); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyVisitorPortPerDayFlowRepositoryImpl.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyVisitorPortPerDayFlowRepositoryImpl.java new file mode 100644 index 00000000..962567d8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/persistence/LazyVisitorPortPerDayFlowRepositoryImpl.java @@ -0,0 +1,170 @@ +package org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.persistence; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.LazyClientPerDayFlow; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyVisitorPortPerDayFlowDO; +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.converter.LazyVisitorPortPerDayFlowConverter; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowRepository; +import org.springframework.stereotype.Repository; + +import java.util.stream.Collectors; + +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyFunctionWrappers; +import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; +import org.wu.framework.web.response.Result; +import org.wu.framework.web.response.ResultFactory; +import jakarta.annotation.Resource; +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.port.per.day.flow.LazyVisitorPortPerDayFlow; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; + +import java.util.List; + +import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; + +/** + * describe 每日统计流量 + * + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + * @see org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class LazyVisitorPortPerDayFlowRepositoryImpl implements LazyVisitorPortPerDayFlowRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 新增每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量新增后领域对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result story(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow) { + LazyVisitorPortPerDayFlowDO lazyVisitorPortPerDayFlowDO = LazyVisitorPortPerDayFlowConverter.INSTANCE.fromVisitorPortPerDayFlow(lazyVisitorPortPerDayFlow); + lazyLambdaStream.upsert(lazyVisitorPortPerDayFlowDO); + return ResultFactory.successOf(); + } + + /** + * describe 批量新增每日统计流量 + * + * @param lazyVisitorPortPerDayFlowList 批量新增每日统计流量 + * @return {@link Result>} 每日统计流量新增后领域对象集合 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result> batchStory(List lazyVisitorPortPerDayFlowList) { + List lazyVisitorPortPerDayFlowDOList = lazyVisitorPortPerDayFlowList.stream().map(LazyVisitorPortPerDayFlowConverter.INSTANCE::fromVisitorPortPerDayFlow).collect(Collectors.toList()); + lazyLambdaStream.upsert(lazyVisitorPortPerDayFlowDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 查询单个每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量领域对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result findOne(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow) { + LazyVisitorPortPerDayFlowDO lazyVisitorPortPerDayFlowDO = LazyVisitorPortPerDayFlowConverter.INSTANCE.fromVisitorPortPerDayFlow(lazyVisitorPortPerDayFlow); + LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlowOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(lazyVisitorPortPerDayFlowDO), LazyVisitorPortPerDayFlow.class); + return ResultFactory.successOf(lazyVisitorPortPerDayFlowOne); + } + + /** + * describe 查询多个每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 查询多个每日统计流量 + * @return {@link Result>} 每日统计流量领域对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result> findList(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow) { + LazyVisitorPortPerDayFlowDO lazyVisitorPortPerDayFlowDO = LazyVisitorPortPerDayFlowConverter.INSTANCE.fromVisitorPortPerDayFlow(lazyVisitorPortPerDayFlow); + List lazyVisitorPortPerDayFlowList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(lazyVisitorPortPerDayFlowDO), LazyVisitorPortPerDayFlow.class); + return ResultFactory.successOf(lazyVisitorPortPerDayFlowList); + } + + /** + * describe 分页查询多个每日统计流量 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyVisitorPortPerDayFlow 分页查询多个每日统计流量 + * @return {@link Result>} 分页每日统计流量领域对象 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result> findPage(int size, int current, LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow) { + LazyVisitorPortPerDayFlowDO lazyVisitorPortPerDayFlowDO = LazyVisitorPortPerDayFlowConverter.INSTANCE.fromVisitorPortPerDayFlow(lazyVisitorPortPerDayFlow); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage visitorPortPerDayFlowLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(lazyVisitorPortPerDayFlowDO), lazyPage, LazyVisitorPortPerDayFlow.class); + return ResultFactory.successOf(visitorPortPerDayFlowLazyPage); + } + + /** + * describe 删除每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 删除每日统计流量 + * @return {@link Result< LazyVisitorPortPerDayFlow >} 每日统计流量 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result remove(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow) { + LazyVisitorPortPerDayFlowDO lazyVisitorPortPerDayFlowDO = LazyVisitorPortPerDayFlowConverter.INSTANCE.fromVisitorPortPerDayFlow(lazyVisitorPortPerDayFlow); + lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(lazyVisitorPortPerDayFlowDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在每日统计流量 + * + * @param lazyVisitorPortPerDayFlow 每日统计流量领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + * @author Jia wei Wu + * @date 2024/03/19 09:53 上午 + **/ + + @Override + public Result exists(LazyVisitorPortPerDayFlow lazyVisitorPortPerDayFlow) { + LazyVisitorPortPerDayFlowDO lazyVisitorPortPerDayFlowDO = LazyVisitorPortPerDayFlowConverter.INSTANCE.fromVisitorPortPerDayFlow(lazyVisitorPortPerDayFlow); + Boolean exists = lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(lazyVisitorPortPerDayFlowDO)); + return ResultFactory.successOf(exists); + } + + /** + * 获取客户端每天流量 + * + * @return 客户端每天流量 + */ + @Override + public Result> findClientPerDayFlowList() { + List lazyClientPerDayFlowList = lazyLambdaStream + .selectList( + LazyWrappers.lambdaWrapper() + .groupBy(LazyVisitorPortPerDayFlowDO::getClientId, LazyVisitorPortPerDayFlowDO::getDay) + .orderByAsc(LazyVisitorPortPerDayFlowDO::getDay) + .functionAs(LazyFunctionWrappers.function().sum(LazyVisitorPortPerDayFlowDO::getInFlow), LazyClientPerDayFlow::getInFlow) + .functionAs(LazyFunctionWrappers.function().sum(LazyVisitorPortPerDayFlowDO::getOutFlow), LazyClientPerDayFlow::getOutFlow) + , + LazyClientPerDayFlow.class + ); + return ResultFactory.successOf(lazyClientPerDayFlowList); + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/xml/LazyVisitorPortFlowMapper.xml b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/xml/LazyVisitorPortFlowMapper.xml new file mode 100644 index 00000000..53bb1fd4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/xml/LazyVisitorPortFlowMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/xml/LazyVisitorPortPerDayFlowMapper.xml b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/xml/LazyVisitorPortPerDayFlowMapper.xml new file mode 100644 index 00000000..8f7ec549 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/standalone/infrastructure/xml/LazyVisitorPortPerDayFlowMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/ui/NettyServerLazyUI.java b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/ui/NettyServerLazyUI.java new file mode 100644 index 00000000..aabff2f9 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/java/org/framework/smart/agent/network/heartbeat/server/ui/NettyServerLazyUI.java @@ -0,0 +1,65 @@ +package org.framework.smart.agent.network.heartbeat.server.ui; + +import org.springframework.context.annotation.Configuration; +import org.wu.framework.web.ui.LazyUI; + +/** + * netty 客户端本地UI + */ +@Configuration +public class NettyServerLazyUI implements LazyUI { + public static final String UI_URL = "/netty-server-ui/**"; + public static final String UI_URL_INDEX = "/netty-server-ui/index.html"; + public static final String CLASSPATH = "classpath:/netty-server-ui/v1/"; + + /** + * 是否支持 default false + *

+ * pathPatterns 格式 /acw-client-ui/** + * locations 格式 classpath:/acw-local-client/v1/ + *

+ * + * @return true、false + */ + @Override + public boolean support() { + return true; + } + + /** + * @return UI 描述 + */ + @Override + public String desc() { + return "Netty 服务端 UI"; + } + + /** + * @return UI 访问的path + * 例如:/acw-client-ui/** + */ + @Override + public String pathPatterns() { + return UI_URL; + } + + /** + * 返回页面首页地址 + * + * @return String + * 例如 /acw-client-ui/index.html + */ + @Override + public String index() { + return UI_URL_INDEX; + } + + /** + * @return 文件资源 + * 例如:classpath:/acw-local-client/v1/ + */ + @Override + public String locations() { + return CLASSPATH; + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/main/resources/META-INF/spring.factories b/wu-smart-agent-network-heartbeat-server/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..6ce8e757 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/resources/META-INF/spring.factories @@ -0,0 +1,8 @@ +# Auto Configure +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +org.framework.smart.agent.network.heartbeat.server.EnableHeartbeatServerAutoConfiguration,\ +org.framework.smart.agent.network.heartbeat.server.config.HeartbeatServerConfiguration,\ +org.framework.smart.agent.network.heartbeat.server.init.InitServerSocket,\ +org.framework.smart.agent.network.heartbeat.server.init.InitClusterNode,\ +org.framework.smart.agent.network.heartbeat.server.config.ServerFlowConfiguration,\ +org.framework.smart.agent.network.heartbeat.server.EnableHeartbeatServerClusterAutoConfiguration diff --git a/wu-smart-agent-network-heartbeat-server/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/wu-smart-agent-network-heartbeat-server/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..bf2529bc --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,6 @@ +org.framework.smart.agent.network.heartbeat.server.EnableHeartbeatServerAutoConfiguration +org.framework.smart.agent.network.heartbeat.server.config.HeartbeatServerConfiguration +org.framework.smart.agent.network.heartbeat.server.init.InitServerSocket +org.framework.smart.agent.network.heartbeat.server.init.InitClusterNode +org.framework.smart.agent.network.heartbeat.server.config.ServerFlowConfiguration +org.framework.smart.agent.network.heartbeat.server.EnableHeartbeatServerClusterAutoConfiguration diff --git a/wu-smart-agent-network-heartbeat-server/src/test/java/org/framework/smart/agent/network/heartbeat/server/domain/model/visitor/flow/InternalNetworkPenetrationMappingTest.java b/wu-smart-agent-network-heartbeat-server/src/test/java/org/framework/smart/agent/network/heartbeat/server/domain/model/visitor/flow/InternalNetworkPenetrationMappingTest.java new file mode 100644 index 00000000..ada247e8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/test/java/org/framework/smart/agent/network/heartbeat/server/domain/model/visitor/flow/InternalNetworkPenetrationMappingTest.java @@ -0,0 +1,39 @@ +package org.framework.smart.agent.network.heartbeat.server.domain.model.visitor.flow; + +import org.framework.smart.agent.network.heartbeat.server.standalone.infrastructure.entity.LazyInternalNetworkPenetrationMappingDO; +import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; +import org.wu.framework.lazy.orm.database.sql.expand.database.persistence.factory.LazyLambdaStreamFactory; + +public class InternalNetworkPenetrationMappingTest { + public static void main(String[] args) { +// DynamicLazyDataSourceTypeHolder.push(LazyDataSourceType.MySQL); + LazyLambdaStream lazyLambdaStream = LazyLambdaStreamFactory.createLazyLambdaStream( + "127.0.0.1", + 3306, + "wu_lazy_cloud_netty_server", + "root", + "wujiawei" + ); + int temp_port = 800; + for (int i = 0; i < 10; i++) { + temp_port += 1; + LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO = new LazyInternalNetworkPenetrationMappingDO(); + lazyInternalNetworkPenetrationMappingDO.setClientId("temp_id"); + lazyInternalNetworkPenetrationMappingDO.setClientTargetIp("127.0.0.1"); + lazyInternalNetworkPenetrationMappingDO.setClientTargetPort(3000 + temp_port); + lazyInternalNetworkPenetrationMappingDO.setVisitorPort(temp_port); + lazyLambdaStream.upsertRemoveNull(lazyInternalNetworkPenetrationMappingDO); + } + + temp_port = 900; + for (int i = 0; i < 10; i++) { + temp_port += 1; + LazyInternalNetworkPenetrationMappingDO lazyInternalNetworkPenetrationMappingDO = new LazyInternalNetworkPenetrationMappingDO(); + lazyInternalNetworkPenetrationMappingDO.setClientId("temp_id_client"); + lazyInternalNetworkPenetrationMappingDO.setClientTargetIp("127.0.0.1"); + lazyInternalNetworkPenetrationMappingDO.setClientTargetPort(3000 + temp_port); + lazyInternalNetworkPenetrationMappingDO.setVisitorPort(temp_port); + lazyLambdaStream.upsertRemoveNull(lazyInternalNetworkPenetrationMappingDO); + } + } +} diff --git a/wu-smart-agent-network-heartbeat-server/src/test/java/org/framework/smart/agent/network/heartbeat/server/domain/model/visitor/flow/VisitorPortFlowTest.java b/wu-smart-agent-network-heartbeat-server/src/test/java/org/framework/smart/agent/network/heartbeat/server/domain/model/visitor/flow/VisitorPortFlowTest.java new file mode 100644 index 00000000..ed46d669 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-server/src/test/java/org/framework/smart/agent/network/heartbeat/server/domain/model/visitor/flow/VisitorPortFlowTest.java @@ -0,0 +1,45 @@ +package org.framework.smart.agent.network.heartbeat.server.domain.model.visitor.flow; + +import org.framework.smart.agent.network.heartbeat.server.standalone.domain.model.visitor.flow.LazyVisitorPortFlow; +import org.springframework.util.StopWatch; +import org.wu.framework.core.ReflexUtils; +import org.wu.framework.core.utils.DataTransformUntil; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.List; + +class VisitorPortFlowTest { + + public static void main(String[] args) { + // 反射测试 + List lazyVisitorPortFlows = DataTransformUntil.simulationBeanList(LazyVisitorPortFlow.class, 10000000); + + StopWatch stopWatch = new StopWatch(); + stopWatch.start("常规获取"); + for (LazyVisitorPortFlow lazyVisitorPortFlow : lazyVisitorPortFlows) { + Integer inFlow = lazyVisitorPortFlow.getInFlow(); + } + stopWatch.stop(); + + stopWatch.start("反射获取"); + Field declaredField = ReflexUtils.findDeclaredField(LazyVisitorPortFlow.class, "inFlow"); + declaredField.setAccessible(true); + + for (LazyVisitorPortFlow lazyVisitorPortFlow : lazyVisitorPortFlows) { + Object inFlow = ReflexUtils.findDeclaredFieldBean(lazyVisitorPortFlow, declaredField); + } + stopWatch.stop(); + + stopWatch.start("反射Get获取"); + Method declaredMethod = ReflexUtils.findDeclaredMethod(LazyVisitorPortFlow.class, "getInFlow"); + declaredMethod.setAccessible(true); + for (LazyVisitorPortFlow lazyVisitorPortFlow : lazyVisitorPortFlows) { + Object inFlow = ReflexUtils.invokeDeclaredMethod(lazyVisitorPortFlow, declaredMethod); + } + stopWatch.stop(); + + System.out.println(stopWatch.prettyPrint()); + + } +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/pom.xml b/wu-smart-agent-network-heartbeat-start/pom.xml new file mode 100644 index 00000000..653381d0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/pom.xml @@ -0,0 +1,48 @@ + + + 4.0.0 + + top.wu2020 + wu-smart-agent-network + 1.2.6-JDK17-SNAPSHOT + + + wu-smart-agent-network-heartbeat-start + + wu-smart-agent-network-heartbeat-start + wu-smart-agent-network-heartbeat-start + pom + + + + wu-smart-agent-network-heartbeat-client-start + wu-smart-agent-network-heartbeat-server-start + wu-smart-agent-network-heartbeat-server-cluster-start + + + 17 + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/Dockerfile b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/Dockerfile new file mode 100644 index 00000000..a149bd23 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/Dockerfile @@ -0,0 +1,22 @@ +FROM registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-framework-parent:jdk-17.0.7-x64 +MAINTAINER wujiawei <1207537021@qq.com> + +RUN echo "Asia/Shanghai" > /etc/timezone + + + +ENV APP_JAR_NAME=$APP_NAME \ + JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom" \ + PARAMS="" + + +COPY target/*.jar /app.jar + + + +ENTRYPOINT exec java -server $JAVA_OPTS -jar /app.jar $PARAMS + + + + + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/Native-Dockerfile b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/Native-Dockerfile new file mode 100644 index 00000000..d365b997 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/Native-Dockerfile @@ -0,0 +1,16 @@ +FROM alpine + +MAINTAINER wujiawei <1207537021@qq.com> + +RUN echo "Asia/Shanghai" > /etc/timezone + + +COPY target/wu-smart-agent-network-heartbeat-client /native-app + +ENTRYPOINT ["/bin/sh" ,"-c", "exec ./native-app"] + + + + + + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/README.md b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/README.md new file mode 100644 index 00000000..918cb88d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/README.md @@ -0,0 +1,77 @@ + + +```shell +mvn clean package -Pnative +``` + + +## BUILD IMAGE +```shell +mvn spring-boot:build-image -Pnative + +docker tag docker.io/library/wu-smart-agent-network-heartbeat-client-start:1.2.6-JDK17-SNAPSHOT registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client-start:1.2.6-JDK17-NATIVE-SNAPSHOT + +docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client-start:1.2.6-JDK17-NATIVE-SNAPSHOT + +``` + +### 构建docker镜像 + + +```shell + +#docker login --username=1207537021@qq.com registry.cn-hangzhou.aliyuncs.com + +mvn clean install + +docker build -t registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client-start:1.2.6-JDK17-SNAPSHOT . +docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client-start:1.2.6-JDK17-SNAPSHOT + +``` + + +### run +```shell + +docker run -d -it --privileged --name client -p 6004:6004 registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client-start:1.2.6-JDK17-NATIVE-SNAPSHOT + +``` + +```yaml +# 只在 worker 节点执行 +# 替换 x.x.x.x 为 master 节点的内网 IP +export MASTER_IP=124.222.48.62 +# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME +export APISERVER_NAME=apiserver.demo +echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts + +# 替换为 master 节点上 kubeadm token create 命令的输出 +kubeadm join apiserver.demo:6443 --token 2wtcsg.0af26p9wzfgvyf5a --discovery-token-ca-cert-hash sha256:92f267bdf14c4cd31d3d767d6ff6a6fbdbb83357720d73b91b42d408d5e4a5e7 + +``` + + +```shell + # 创建虚拟网卡 + cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <- + registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-client-start:1.2.6-JDK17-NATIVE-SNAPSHOT + imagePullPolicy: Always + name: wu-smart-agent-network-heartbeat-client-start + resources: {} + securityContext: + privileged: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/pom.xml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/pom.xml new file mode 100644 index 00000000..fc94013d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/pom.xml @@ -0,0 +1,67 @@ + + + + top.wu2020 + wu-smart-agent-network-heartbeat-start + 1.2.6-JDK17-SNAPSHOT + + 4.0.0 + + wu-smart-agent-network-heartbeat-client-start + 云下心跳客户端 + + + 17 + 17 + + + + + top.wu2020 + wu-smart-agent-network-heartbeat-client + + + + + + + + org.graalvm.buildtools + native-maven-plugin + 0.9.23 + + + ${project.artifactId} + + org.framework.smart.agent.network.heartbeat.client.LazyCloudHeartbeatClientStart + + --no-fallback + + + + + build-native + + compile-no-fork + + package + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/java/org/framework/smart/agent/network/heartbeat/client/LazyCloudHeartbeatClientStart.java b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/java/org/framework/smart/agent/network/heartbeat/client/LazyCloudHeartbeatClientStart.java new file mode 100644 index 00000000..cae204a6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/java/org/framework/smart/agent/network/heartbeat/client/LazyCloudHeartbeatClientStart.java @@ -0,0 +1,17 @@ +package org.framework.smart.agent.network.heartbeat.client; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.wu.framework.lazy.orm.core.stereotype.LazyScan; + +/** + * 云上云下-云下心跳服务器 + */ + +@LazyScan(scanBasePackages = "org.framework.smart.agent.network.heartbeat.client.infrastructure.entity") +@SpringBootApplication +public class LazyCloudHeartbeatClientStart { + public static void main(String[] args) { + SpringApplication.run(LazyCloudHeartbeatClientStart.class,args); + } +} diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application-dev.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application-dev.yml new file mode 100644 index 00000000..a36b12ca --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application-dev.yml @@ -0,0 +1,24 @@ +spring: + lazy: + netty: + client: + inet-host: 127.0.0.1 + inet-port: 7001 + inet-path: wu-smart-agent-network-heartbeat-server +# inet-host: 124.222.48.62 # 服务端地址 +# inet-port: 30676 #服务端端口 + # inet-path: wu-smart-agent-network-heartbeat-server + client-id: wujiawei # 客户端ID + # client-id: temp_id # 客户端ID + data: + redis: + host: 192.168.17.221 + port: 30553 + password: wujiawei + database: 2 + + + datasource: + url: jdbc:h2:~/client_heartbeat;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE;DATABASE_TO_UPPER=true;MODE=MySQL;CASE_INSENSITIVE_IDENTIFIERS=TRUE + username: sa + driver-class-name: org.h2.Driver diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application-prod.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application-prod.yml new file mode 100644 index 00000000..cac8735b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application-prod.yml @@ -0,0 +1,5 @@ +spring: + datasource: + url: jdbc:h2:~/client_heartbeat + username: sa + driver-class-name: org.h2.Driver \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application.yml new file mode 100644 index 00000000..1cf11e20 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-client-start/src/main/resources/application.yml @@ -0,0 +1,19 @@ + +server: + port: 6004 + +spring: + profiles: + active: dev + lazy: + enable-auto-schema: true + +--- +## 客户端设置 +#spring: +# lazy: +# netty: +# client: +# client-id: 1024 +# inet-host: 127.0.0.1 +# inet-port: 7101 \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/Dockerfile b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/Dockerfile new file mode 100644 index 00000000..a149bd23 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/Dockerfile @@ -0,0 +1,22 @@ +FROM registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-framework-parent:jdk-17.0.7-x64 +MAINTAINER wujiawei <1207537021@qq.com> + +RUN echo "Asia/Shanghai" > /etc/timezone + + + +ENV APP_JAR_NAME=$APP_NAME \ + JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom" \ + PARAMS="" + + +COPY target/*.jar /app.jar + + + +ENTRYPOINT exec java -server $JAVA_OPTS -jar /app.jar $PARAMS + + + + + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/README.md b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/README.md new file mode 100644 index 00000000..d2506477 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/README.md @@ -0,0 +1,38 @@ +# DOCKER JDK IMAGE + + +### 打包可执行文件 + +```shell +mvn clean package -Pnative +``` + +## BUILD IMAGE +```shell +mvn spring-boot:build-image -Pnative + +docker tag docker.io/library/wu-smart-agent-network-heartbeat-server-cluster-start:1.2.6-JDK17-SNAPSHOT registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-cluster-start:1.2.6-JDK17-NATIVE-SNAPSHOT + +docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-cluster-start:1.2.6-JDK17-NATIVE-SNAPSHOT + +``` + +```shell + +#docker login --username=1207537021@qq.com registry.cn-hangzhou.aliyuncs.com + +mvn clean install + +docker build -t registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-cluster-start:1.2.6-JDK17-SNAPSHOT . +docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-cluster-start:1.2.6-JDK17-SNAPSHOT + +``` + + +```RUN +docker run -d -it -p 18080:18080 --name wu-smart-agent-network-heartbeat-server-cluster-start registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-cluster-start:1.2.6-JDK17-SNAPSHOT + +http://127.0.0.1:18080/swagger-ui/index.html + +``` + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/jar-memory.png b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/jar-memory.png new file mode 100644 index 00000000..472fe181 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/jar-memory.png differ diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/k8s-node-pod.md b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/k8s-node-pod.md new file mode 100644 index 00000000..92fe7625 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/k8s-node-pod.md @@ -0,0 +1,161 @@ +# 记录一次k8s pod之间ip无法访问,问题排查与定位 + +![img.png](../../k8s-node-pod-network-k8snodepod.png) + +### 问题展现现象 +node之间通信正常 +部分node上的pod无法通信 +### 排查有问题node +#### 使用启动网络测试工具 +##### 环境准备 + +docker + +数据库mysql + + +##### 使用有状态副本集合 + +```bash +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + annotations: + k8s.kuboard.cn/displayName: 有状态内网穿透集群 + labels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + name: network-server-cluster-start + namespace: default +spec: + podManagementPolicy: OrderedReady + replicas: 10 + revisionHistoryLimit: 10 + selector: + matchLabels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + serviceName: network-server-cluster-start + template: + metadata: + labels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchLabels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + topologyKey: kubernetes.io/hostname + containers: + - env: + - name: spring.datasource.url + value: >- + jdbc:mysql://mysql-host:mysql-port/wu_lazy_cloud_netty_server_cluster?allowMultiQueries=true&useUnicode=true&autoReconnect=true&useAffectedRows=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&databaseTerm=SCHEMA + - name: JAVA_OPTS + value: '-Xms64m -Xmx128m' + - name: spring.datasource.username + value: root + - name: spring.datasource.password + value: laihui + - name: spring.lazy.netty.server.node-id + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: spring.lazy.netty.server.node-port + value: '7101' + envFrom: + - configMapRef: + name: wu-smart-agent-network-heartbeat-server-cluster-start-conf + image: >- + registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-cluster-start:1.2.6-JDK17-NATIVE-SNAPSHOT + imagePullPolicy: Always + name: network-server-cluster-start + ports: + - containerPort: 7101 + hostPort: 7101 + name: tcp7101 + protocol: TCP + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + updateStrategy: + rollingUpdate: + partition: 0 + type: RollingUpdate + +--- +apiVersion: v1 +kind: Service +metadata: + annotations: {} + labels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + name: network-server-cluster-start + namespace: default +spec: + ipFamilyPolicy: SingleStack + ports: + - name: 6eqe4d + port: 7101 + protocol: TCP + targetPort: 7101 + selector: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + sessionAffinity: None + type: ClusterIP + + +--- +apiVersion: v1 +data: + spring.lazy.netty.server.node-host: '${HOSTNAME}.network-server-cluster-start.default.svc.cluster.local' +kind: ConfigMap +metadata: + name: wu-smart-agent-network-heartbeat-server-cluster-start-conf + namespace: default + +--- +apiVersion: v1 +kind: Service +metadata: + annotations: {} + name: network-server-cluster-start-web + namespace: default +spec: + ports: + - name: sjmxma + nodePort: 33201 + port: 6101 + protocol: TCP + targetPort: 6101 + selector: + k8s.kuboard.cn/name: network-server-cluster-start + sessionAffinity: None + type: NodePort + + +``` +##### 配置参数需要调整的 +::: tip 其中 mysql-host、mysql-port 替换成你本地具体数据库 +::: 注意副本数量调整为你可以调度的节点数据量 + +##### 打开页面 http://集群IP:33201/netty-server-ui/index.html (默认账号/密码:admin/admin) +##### 初始化菜单、添加角色、用户授权角色 +##### 打开集群管理页面(查看异常状态节点) +![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/88a473b88ee24e86b4a4915c98652636.png) + + + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/k8s.yaml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/k8s.yaml new file mode 100644 index 00000000..7ddd6dd1 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/k8s.yaml @@ -0,0 +1,129 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + annotations: + k8s.kuboard.cn/displayName: 有状态内网穿透集群 + labels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + name: network-server-cluster-start + namespace: default +spec: + podManagementPolicy: OrderedReady + replicas: 10 + revisionHistoryLimit: 10 + selector: + matchLabels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + serviceName: network-server-cluster-start + template: + metadata: + labels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchLabels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + topologyKey: kubernetes.io/hostname + containers: + - env: + - name: spring.datasource.url + value: >- + jdbc:mysql://cloud-mysql.middleground-management:3306/wu_lazy_cloud_netty_server_cluster?allowMultiQueries=true&useUnicode=true&autoReconnect=true&useAffectedRows=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&databaseTerm=SCHEMA + - name: JAVA_OPTS + value: '-Xms64m -Xmx128m' + - name: spring.datasource.username + value: root + - name: spring.datasource.password + value: laihui + - name: spring.lazy.netty.server.node-id + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: spring.lazy.netty.server.node-port + value: '7101' + envFrom: + - configMapRef: + name: wu-smart-agent-network-heartbeat-server-cluster-start-conf + image: >- + registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-cluster-start:1.2.6-JDK17-NATIVE-SNAPSHOT + imagePullPolicy: Always + name: network-server-cluster-start + ports: + - containerPort: 7101 + hostPort: 7101 + name: tcp7101 + protocol: TCP + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + updateStrategy: + rollingUpdate: + partition: 0 + type: RollingUpdate + +--- +apiVersion: v1 +kind: Service +metadata: + annotations: {} + labels: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + name: network-server-cluster-start + namespace: default +spec: + ipFamilyPolicy: SingleStack + ports: + - name: 6eqe4d + port: 7101 + protocol: TCP + targetPort: 7101 + selector: + k8s.kuboard.cn/layer: svc + k8s.kuboard.cn/name: network-server-cluster-start + sessionAffinity: None + type: ClusterIP + + +--- +apiVersion: v1 +data: + spring.lazy.netty.server.node-host: '${HOSTNAME}.network-server-cluster-start.default.svc.cluster.local' +kind: ConfigMap +metadata: + name: wu-smart-agent-network-heartbeat-server-cluster-start-conf + namespace: default + +--- +apiVersion: v1 +kind: Service +metadata: + annotations: {} + name: network-server-cluster-start-web + namespace: default +spec: + ports: + - name: sjmxma + nodePort: 33201 + port: 6101 + protocol: TCP + targetPort: 6101 + selector: + k8s.kuboard.cn/name: network-server-cluster-start + sessionAffinity: None + type: NodePort + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/pom.xml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/pom.xml new file mode 100644 index 00000000..dc441cc1 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/pom.xml @@ -0,0 +1,71 @@ + + + + top.wu2020 + wu-smart-agent-network-heartbeat-start + 1.2.6-JDK17-SNAPSHOT + + + 4.0.0 + + wu-smart-agent-network-heartbeat-server-cluster-start + 云上心跳服务端 + + + 17 + 17 + + + + + top.wu2020 + wu-smart-agent-network-heartbeat-server-cluster + + + top.wu2020 + wu-smart-acw-client + + + + + + + + org.graalvm.buildtools + native-maven-plugin + 0.9.23 + + + ${project.artifactId} + + org.framework.smart.agent.network.heartbeat.server.cluster.start.LazyCloudHeartbeatServerClusterStart + + --no-fallback + + + + + build-native + + compile-no-fork + + package + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/start/LazyCloudHeartbeatServerClusterStart.java b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/start/LazyCloudHeartbeatServerClusterStart.java new file mode 100644 index 00000000..77ec6b04 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/java/org/framework/smart/agent/network/heartbeat/server/cluster/start/LazyCloudHeartbeatServerClusterStart.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.server.cluster.start; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 云上云下-云上心跳服务器 + */ +@Slf4j +@SpringBootApplication +public class LazyCloudHeartbeatServerClusterStart { + public static void main(String[] args) { + SpringApplication.run(LazyCloudHeartbeatServerClusterStart.class,args); + } +} diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application-dev.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application-dev.yml new file mode 100644 index 00000000..144ff444 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application-dev.yml @@ -0,0 +1,6 @@ +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/wu_lazy_cloud_netty_server_cluster?allowMultiQueries=true&useUnicode=true&autoReconnect=true&useAffectedRows=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&databaseTerm=SCHEMA + username: root + password: wujiawei + driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application-prod.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application-prod.yml new file mode 100644 index 00000000..cb32e4e4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application-prod.yml @@ -0,0 +1,8 @@ +spring: + datasource: + url: jdbc:mysql://${MAIN_DB_HOST}/wu_lazy_cloud_netty_server_cluster?allowMultiQueries=true&useUnicode=true&autoReconnect=true&useAffectedRows=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&databaseTerm=SCHEMA + username: root + password: wujiawei + driver-class-name: com.mysql.cj.jdbc.Driver + main: + allow-bean-definition-overriding: true \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application.yml new file mode 100644 index 00000000..80e03eff --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-cluster-start/src/main/resources/application.yml @@ -0,0 +1,25 @@ + +server: + port: 6101 + +spring: + profiles: + active: dev + lazy: + enable-auto-schema: true + authorization: + un-check-api-path: + - /v1/api/lazy/netty/server/properties/** + - /v1/api/project/dataSource/** +--- +spring: + lazy: + netty: + server: + mode: cluster # 模式:集群、单机版 + node-id: default #当前服务ID + node-host: 127.0.0.1 # 当前节点host + node-port: 7101 # 当前节点端口 + + + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/Dockerfile b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/Dockerfile new file mode 100644 index 00000000..a149bd23 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/Dockerfile @@ -0,0 +1,22 @@ +FROM registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-framework-parent:jdk-17.0.7-x64 +MAINTAINER wujiawei <1207537021@qq.com> + +RUN echo "Asia/Shanghai" > /etc/timezone + + + +ENV APP_JAR_NAME=$APP_NAME \ + JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom" \ + PARAMS="" + + +COPY target/*.jar /app.jar + + + +ENTRYPOINT exec java -server $JAVA_OPTS -jar /app.jar $PARAMS + + + + + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/README.md b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/README.md new file mode 100644 index 00000000..b2638b1c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/README.md @@ -0,0 +1,39 @@ +# DOCKER JDK IMAGE + + +### 打包可执行文件 + +```shell +mvn clean package -Pnative +``` + +## BUILD IMAGE +```shell +mvn spring-boot:build-image -Pnative + +docker tag docker.io/library/wu-smart-agent-network-heartbeat-server-start:1.2.6-JDK17-SNAPSHOT registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-start:1.2.6-JDK17-NATIVE-SNAPSHOT + +docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-start:1.2.6-JDK17-NATIVE-SNAPSHOT + +``` + +```shell + +#docker login --username=1207537021@qq.com registry.cn-hangzhou.aliyuncs.com + +mvn clean install + +docker build -t registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-start:1.2.6-JDK17-SNAPSHOT . +docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-start:1.2.6-JDK17-SNAPSHOT + +``` + + +```RUN +docker run -d -it -p 18080:18080 --name wu-smart-agent-network-heartbeat-server-start registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-start:1.2.6-JDK17-SNAPSHOT + +http://127.0.0.1:18080/swagger-ui/index.html + + +``` + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/jar-memory.png b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/jar-memory.png new file mode 100644 index 00000000..472fe181 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/jar-memory.png differ diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/k8s.yaml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/k8s.yaml new file mode 100644 index 00000000..0d88519c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/k8s.yaml @@ -0,0 +1,89 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: {} + labels: + k8s.kuboard.cn/layer: gateway + k8s.kuboard.cn/name: wu-lazy-cloud-heartbeat-server + name: wu-lazy-cloud-heartbeat-server + namespace: default +spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + k8s.kuboard.cn/layer: gateway + k8s.kuboard.cn/name: wu-lazy-cloud-heartbeat-server + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + labels: + k8s.kuboard.cn/layer: gateway + k8s.kuboard.cn/name: wu-lazy-cloud-heartbeat-server + spec: + containers: + - env: + - name: spring.datasource.url + value: >- + jdbc:mysql://cloud-mysql:3306/wu_lazy_cloud_netty_server?allowMultiQueries=true&useUnicode=true&autoReconnect=true&useAffectedRows=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&databaseTerm=SCHEMA + - name: JAVA_OPTS + value: '-Xms64m -Xmx128m' + - name: spring.datasource.username + value: root + - name: spring.datasource.password + value: wujiawei + - name: spring.datasource.driver-class-name + value: com.mysql.cj.jdbc.Driver + image: >- + registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-heartbeat-server-start:1.2.6-JDK17-NATIVE-SNAPSHOT + imagePullPolicy: Always + name: wu-lazy-cloud-heartbeat-server + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + + +--- +apiVersion: v1 +kind: Service +metadata: + annotations: {} + labels: + k8s.kuboard.cn/layer: gateway + k8s.kuboard.cn/name: wu-smart-agent-network-heartbeat-server + name: wu-smart-agent-network-heartbeat-server + namespace: default +spec: + ports: + - name: pecjjh + nodePort: 30676 + port: 7001 + protocol: TCP + targetPort: 7001 + - name: z4bg3n + nodePort: 30273 + port: 30273 + protocol: TCP + targetPort: 30273 + - name: wfcigf + nodePort: 30576 + port: 6001 + protocol: TCP + targetPort: 6001 + selector: + k8s.kuboard.cn/layer: gateway + k8s.kuboard.cn/name: wu-smart-agent-network-heartbeat-server + sessionAffinity: None + type: NodePort + diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/pom.xml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/pom.xml new file mode 100644 index 00000000..67a79cf3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/pom.xml @@ -0,0 +1,67 @@ + + + + top.wu2020 + wu-smart-agent-network-heartbeat-start + 1.2.6-JDK17-SNAPSHOT + + + 4.0.0 + + wu-smart-agent-network-heartbeat-server-start + 云上心跳服务端 + + + 17 + 17 + + + + + top.wu2020 + wu-smart-agent-network-heartbeat-server + + + + + + + + org.graalvm.buildtools + native-maven-plugin + 0.9.23 + + + ${project.artifactId} + + org.framework.smart.agent.network.heartbeat.server.LazyCloudHeartbeatServerStart + + --no-fallback + + + + + build-native + + compile-no-fork + + package + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/java/org/framework/smart/agent/network/heartbeat/server/LazyCloudHeartbeatServerStart.java b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/java/org/framework/smart/agent/network/heartbeat/server/LazyCloudHeartbeatServerStart.java new file mode 100644 index 00000000..88c793e8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/java/org/framework/smart/agent/network/heartbeat/server/LazyCloudHeartbeatServerStart.java @@ -0,0 +1,16 @@ +package org.framework.smart.agent.network.heartbeat.server; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 云上云下-云上心跳服务器 + */ +@Slf4j +@SpringBootApplication +public class LazyCloudHeartbeatServerStart { + public static void main(String[] args) { + SpringApplication.run(LazyCloudHeartbeatServerStart.class,args); + } +} diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application-dev.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application-dev.yml new file mode 100644 index 00000000..88385798 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application-dev.yml @@ -0,0 +1,15 @@ + +--- +## h2 配置 +spring: + datasource: + url: jdbc:h2:./wu_lazy_cloud_netty_server:wu_lazy_cloud_netty_server;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE;DATABASE_TO_UPPER=true;MODE=MySQL;CASE_INSENSITIVE_IDENTIFIERS=TRUE + username: sa + driver-class-name: org.h2.Driver +--- +#spring: +# datasource: +# url: jdbc:mysql://127.0.0.1:3306/wu_lazy_cloud_netty_server?allowMultiQueries=true&useUnicode=true&autoReconnect=true&useAffectedRows=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&databaseTerm=SCHEMA +# username: root +# password: wujiawei +# driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application-prod.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application-prod.yml new file mode 100644 index 00000000..e9f3704c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application-prod.yml @@ -0,0 +1,8 @@ +spring: + datasource: + url: jdbc:mysql://${MAIN_DB_HOST}/wu_lazy_cloud_netty_server?allowMultiQueries=true&useUnicode=true&autoReconnect=true&useAffectedRows=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&databaseTerm=SCHEMA + username: root + password: wujiawei + driver-class-name: com.mysql.cj.jdbc.Driver + main: + allow-bean-definition-overriding: true \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application.yml b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application.yml new file mode 100644 index 00000000..6b24b9c3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-start/wu-smart-agent-network-heartbeat-server-start/src/main/resources/application.yml @@ -0,0 +1,35 @@ +server: + port: 6001 + +spring: + profiles: + active: dev + lazy: + enable-auto-schema: true + netty: + server: + mode: standalone # 模式:集群、单机版 + node-id: default #当前服务ID + node-host: 127.0.0.1 # 当前节点host + node-port: 7001 # 当前节点端口 + ddl-configure: + ddl-auto: create + +--- +# 添加api 过滤 +spring: + lazy: + authorization: + un-check-api-path: + - /acw-client/java/api/** + - /v1/online/** + - /v1/api/** +--- +# 服务端与客户端集成 +#spring: +# lazy: +# netty: +# client: +# inet-host: ${spring.lazy.netty.server.node-host} +# inet-port: ${spring.lazy.netty.server.node-port} +# client-id: standalone \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/.gitignore b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/.gitignore new file mode 100644 index 00000000..8ee54e8d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/README.md b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/README.md new file mode 100644 index 00000000..44566884 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/README.md @@ -0,0 +1,29 @@ +# acw-local-client + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run serve +``` + +### Compile and Minify for Production + +```sh +npm run build +``` diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/index.html b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/index.html new file mode 100644 index 00000000..c3a83305 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/index.html @@ -0,0 +1,13 @@ + + + + + + + Java 使用 Lazy ORM 网络穿透客户端! + + +
+ + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/jsconfig.json b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/jsconfig.json new file mode 100644 index 00000000..5a1f2d22 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/package-lock.json b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/package-lock.json new file mode 100644 index 00000000..524f11ae --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/package-lock.json @@ -0,0 +1,2941 @@ +{ + "name": "acw-local-client", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "acw-local-client", + "version": "0.0.0", + "dependencies": { + "element-plus": "^2.5.6", + "unplugin-auto-import": "^0.17.5", + "unplugin-vue-components": "^0.26.0", + "vue": "^3.4.15" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.3", + "axios": "^1.6.7", + "vite": "^5.0.11" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.7", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz", + "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==" + }, + "node_modules/@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.19", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", + "dependencies": { + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.6", + "postcss": "^8.4.33", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", + "dependencies": { + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", + "dependencies": { + "@vue/shared": "3.4.19" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", + "dependencies": { + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", + "dependencies": { + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", + "dependencies": { + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" + }, + "peerDependencies": { + "vue": "3.4.19" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==" + }, + "node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==" + }, + "node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "dependencies": { + "vue-demi": "*" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/element-plus": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.5.6.tgz", + "integrity": "sha512-zctKTiyIDmcnMp3K5WG1hglgraW9EbiCLiIDVtaMCS5mPMl2fRKdS0vOFGnECIq9taFoxnyoDwxHD81nv0B4RA==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true, + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mlly": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.6.0.tgz", + "integrity": "sha512-YOvg9hfYQmnaB56Yb+KrJE2u0Yzz5zR+sLejEvF4fzwzV1Al6hkf2vyHTwqCRyv0hCi9rVCqVoXpyYevQIRwLQ==", + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", + "devOptional": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dependencies": { + "acorn": "^8.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ufo": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==" + }, + "node_modules/unimport": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.7.1.tgz", + "integrity": "sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "acorn": "^8.11.2", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "mlly": "^1.4.2", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "scule": "^1.1.1", + "strip-literal": "^1.3.0", + "unplugin": "^1.5.1" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unimport/node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/unplugin": { + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.7.1.tgz", + "integrity": "sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw==", + "dependencies": { + "acorn": "^8.11.3", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.6.1" + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.17.5", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.17.5.tgz", + "integrity": "sha512-fHNDkDSxv3PGagX1wmKBYBkgaM4AKAgZmdJw/bxjhNljx9KSXSgHpGfX0MwUrq9qw6q1bhHIZVWyOwoY2koo4w==", + "dependencies": { + "@antfu/utils": "^0.7.7", + "@rollup/pluginutils": "^5.1.0", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "minimatch": "^9.0.3", + "unimport": "^3.7.1", + "unplugin": "^1.6.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/unplugin-vue-components": { + "version": "0.26.0", + "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.26.0.tgz", + "integrity": "sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==", + "dependencies": { + "@antfu/utils": "^0.7.6", + "@rollup/pluginutils": "^5.0.4", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.3", + "minimatch": "^9.0.3", + "resolve": "^1.22.4", + "unplugin": "^1.4.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.1.4.tgz", + "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", + "dependencies": { + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==" + } + }, + "dependencies": { + "@antfu/utils": { + "version": "0.7.7", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz", + "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==" + }, + "@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==" + }, + "@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==" + }, + "@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "requires": {} + }, + "@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "dev": true, + "optional": true + }, + "@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "requires": { + "@floating-ui/utils": "^0.2.1" + } + }, + "@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "requires": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@popperjs/core": { + "version": "npm:@sxzz/popperjs-es@2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" + }, + "@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", + "dev": true, + "optional": true + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "requires": { + "@types/lodash": "*" + } + }, + "@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "requires": {} + }, + "@vue/compiler-core": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", + "requires": { + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.19", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-dom": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", + "requires": { + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" + } + }, + "@vue/compiler-sfc": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", + "requires": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.6", + "postcss": "^8.4.33", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-ssr": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", + "requires": { + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" + } + }, + "@vue/reactivity": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", + "requires": { + "@vue/shared": "3.4.19" + } + }, + "@vue/runtime-core": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", + "requires": { + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" + } + }, + "@vue/runtime-dom": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", + "requires": { + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", + "csstype": "^3.1.3" + } + }, + "@vue/server-renderer": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", + "requires": { + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" + } + }, + "@vue/shared": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==" + }, + "@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "requires": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "requires": {} + } + } + }, + "@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==" + }, + "@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "requires": { + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "requires": {} + } + } + }, + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "axios": { + "version": "1.6.7", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "element-plus": { + "version": "2.5.6", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.5.6.tgz", + "integrity": "sha512-zctKTiyIDmcnMp3K5WG1hglgraW9EbiCLiIDVtaMCS5mPMl2fRKdS0vOFGnECIq9taFoxnyoDwxHD81nv0B4RA==", + "requires": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "requires": { + "hasown": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + }, + "local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "requires": {} + }, + "magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mlly": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.6.0.tgz", + "integrity": "sha512-YOvg9hfYQmnaB56Yb+KrJE2u0Yzz5zR+sLejEvF4fzwzV1Al6hkf2vyHTwqCRyv0hCi9rVCqVoXpyYevQIRwLQ==", + "requires": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "requires": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rollup": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", + "devOptional": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "scule": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "requires": { + "acorn": "^8.10.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "ufo": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==" + }, + "unimport": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.7.1.tgz", + "integrity": "sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==", + "requires": { + "@rollup/pluginutils": "^5.1.0", + "acorn": "^8.11.2", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "mlly": "^1.4.2", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "scule": "^1.1.1", + "strip-literal": "^1.3.0", + "unplugin": "^1.5.1" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "requires": { + "@types/estree": "^1.0.0" + } + }, + "local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } + } + } + }, + "unplugin": { + "version": "1.7.1", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.7.1.tgz", + "integrity": "sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw==", + "requires": { + "acorn": "^8.11.3", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.6.1" + } + }, + "unplugin-auto-import": { + "version": "0.17.5", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.17.5.tgz", + "integrity": "sha512-fHNDkDSxv3PGagX1wmKBYBkgaM4AKAgZmdJw/bxjhNljx9KSXSgHpGfX0MwUrq9qw6q1bhHIZVWyOwoY2koo4w==", + "requires": { + "@antfu/utils": "^0.7.7", + "@rollup/pluginutils": "^5.1.0", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "minimatch": "^9.0.3", + "unimport": "^3.7.1", + "unplugin": "^1.6.0" + }, + "dependencies": { + "local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } + } + } + }, + "unplugin-vue-components": { + "version": "0.26.0", + "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.26.0.tgz", + "integrity": "sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==", + "requires": { + "@antfu/utils": "^0.7.6", + "@rollup/pluginutils": "^5.0.4", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.3", + "minimatch": "^9.0.3", + "resolve": "^1.22.4", + "unplugin": "^1.4.0" + } + }, + "vite": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.1.4.tgz", + "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", + "dev": true, + "requires": { + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + } + }, + "vue": { + "version": "3.4.19", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", + "requires": { + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + }, + "webpack-virtual-modules": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==" + } + } +} diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/package.json b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/package.json new file mode 100644 index 00000000..e53cbf0c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/package.json @@ -0,0 +1,23 @@ +{ + "name": "acw-local-client", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "serve": "vite --host", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "element-plus": "^2.5.6", + "unplugin-auto-import": "^0.17.5", + "unplugin-vue-components": "^0.26.0", + "vue": "^3.4.15" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.3", + "axios": "^1.6.7", + "vite": "^5.0.11" + } +} diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/public/favicon.ico b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/public/favicon.ico new file mode 100644 index 00000000..df36fcfb Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/public/favicon.ico differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/App.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/App.vue new file mode 100644 index 00000000..b2722433 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/App.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/LazyORMlog.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/LazyORMlog.png new file mode 100644 index 00000000..aeaafe50 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/LazyORMlog.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/base.css b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/base.css new file mode 100644 index 00000000..8816868a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/base.css @@ -0,0 +1,86 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/logo.svg b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/logo.svg new file mode 100644 index 00000000..75656603 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/main.css b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/main.css new file mode 100644 index 00000000..36fb845b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/assets/main.css @@ -0,0 +1,35 @@ +@import './base.css'; + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/HelloWorld.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/HelloWorld.vue new file mode 100644 index 00000000..4be79e64 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/HelloWorld.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/LocalClientProperties.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/LocalClientProperties.vue new file mode 100644 index 00000000..6cd9bb85 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/LocalClientProperties.vue @@ -0,0 +1,227 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/TheWelcome.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/TheWelcome.vue new file mode 100644 index 00000000..dab95367 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/TheWelcome.vue @@ -0,0 +1,88 @@ + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/WelcomeItem.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/WelcomeItem.vue new file mode 100644 index 00000000..6d7086ae --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/WelcomeItem.vue @@ -0,0 +1,87 @@ + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconCommunity.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconCommunity.vue new file mode 100644 index 00000000..2dc8b055 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconDocumentation.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconDocumentation.vue new file mode 100644 index 00000000..6d4791cf --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconEcosystem.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconEcosystem.vue new file mode 100644 index 00000000..c3a4f078 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconSupport.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconSupport.vue new file mode 100644 index 00000000..7452834d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconTooling.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconTooling.vue new file mode 100644 index 00000000..660598d7 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/main.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/main.js new file mode 100644 index 00000000..5ed91a10 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/src/main.js @@ -0,0 +1,15 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import App from './App.vue' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' + +const app=createApp(App); + +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} +app.use(ElementPlus) +app.mount('#app') diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/vite.config.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/vite.config.js new file mode 100644 index 00000000..3e201dfa --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/vite.config.js @@ -0,0 +1,54 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' +import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' + +// https://vitejs.dev/config/ +export default defineConfig({ + outputDir: '../wu-smart-agent-network-heartbeat-client/src/resources/network-local-client-ui/v1', // 构建时输出目录 + base: './', + plugins: [ + vue(), + AutoImport({ + resolvers: [ElementPlusResolver()], + }), + Components({ + resolvers: [ElementPlusResolver()], + }), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + publicPath: "", + productionSourceMap: false, + server: { + port: "38080", // 请求地址的端口号,在本项目是38080 + proxy: { + '/v1/api': { + target: "http://127.0.0.1:6004", // 真实的服务器地址 + changeOrigin: true, // + secure: false, // 默认情况下,不接受运行在 HTTPS 上,且使用了无效证书的后端服务器。如果你想要接受设为false + ws: false, // 是否启用websockets + // 是否重写 + pathRewrite: { + "^/v1/api": "/v1/api", + }, + }, + '/upload': { + target: 'http://localhost:3300/upload', + changeOrigin: true, + ws: true, + rewrite: (path) => path.replace(new RegExp(`^/upload`), ''), + }, + }, + warmup: { + clientFiles: ['./index.html', './src/{views,components}/*'], + }, + }, +}) diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/yarn.lock b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/yarn.lock new file mode 100644 index 00000000..99e64c5b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-client-ui/yarn.lock @@ -0,0 +1,1009 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@antfu/utils@^0.7.6", "@antfu/utils@^0.7.7": + version "0.7.7" + resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb" + integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg== + +"@babel/parser@^7.23.9": + version "7.24.1" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" + integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== + +"@ctrl/tinycolor@^3.4.1": + version "3.6.1" + resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31" + integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + +"@element-plus/icons-vue@^2.3.1": + version "2.3.1" + resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz#1f635ad5fdd5c85ed936481525570e82b5a8307a" + integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg== + +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + +"@floating-ui/core@^1.0.0": + version "1.6.0" + resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" + integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== + dependencies: + "@floating-ui/utils" "^0.2.1" + +"@floating-ui/dom@^1.0.1": + version "1.6.3" + resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.3.tgz#954e46c1dd3ad48e49db9ada7218b0985cee75ef" + integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw== + dependencies: + "@floating-ui/core" "^1.0.0" + "@floating-ui/utils" "^0.2.0" + +"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1": + version "0.2.1" + resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" + integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== + +"@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7": + version "2.11.7" + resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671" + integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ== + +"@rollup/pluginutils@^5.0.4", "@rollup/pluginutils@^5.1.0": + version "5.1.0" + resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rollup/rollup-android-arm-eabi@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz#fbf098f49d96a8cac9056f22f5fd80906ef3af85" + integrity sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g== + +"@rollup/rollup-android-arm64@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz#0d2448251040fce19a98eee505dff5b3c8ec9b98" + integrity sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ== + +"@rollup/rollup-darwin-arm64@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz#78db4d4da5b1b84c22adbe25c8a4961b3f22d3af" + integrity sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA== + +"@rollup/rollup-darwin-x64@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz#fcc05af54379f8ee5c7e954987d4514c6fd0fb42" + integrity sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A== + +"@rollup/rollup-linux-arm-gnueabihf@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz#2ce200efa1ef4a56ee2af7b453edc74a259d7d31" + integrity sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ== + +"@rollup/rollup-linux-arm64-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz#5a24aac882bff9abfda3f45f6f1db2166c342a4a" + integrity sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ== + +"@rollup/rollup-linux-arm64-musl@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz#f1fb4c6f961d3f3397231a99e621d199200e4ea9" + integrity sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA== + +"@rollup/rollup-linux-powerpc64le-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz#46b2463d94ac3af3e0f7a2947b695397bc13b755" + integrity sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ== + +"@rollup/rollup-linux-riscv64-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz#47b932ee59a5395a3a341b0493e361d9e6032cf2" + integrity sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw== + +"@rollup/rollup-linux-s390x-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz#8e14a1b3c3b9a4440c70a9c1ba12d32aa21f9712" + integrity sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg== + +"@rollup/rollup-linux-x64-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz#270e939194b66df77bcb33dd9a5ddf7784bd7997" + integrity sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A== + +"@rollup/rollup-linux-x64-musl@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz#e8dd0f3c2046acbda2934490b36552e856a3bc6a" + integrity sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA== + +"@rollup/rollup-win32-arm64-msvc@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz#f8b65a4a7e7a6b383e7b14439129b2f474ff123c" + integrity sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA== + +"@rollup/rollup-win32-ia32-msvc@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz#bc1c5a4fbc4337d6cb15da80a4de95fd53ab3573" + integrity sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw== + +"@rollup/rollup-win32-x64-msvc@4.13.2": + version "4.13.2" + resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz#851959c4c1c3c6647aba1f388198c8243aed6917" + integrity sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ== + +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/lodash-es@^4.17.6": + version "4.17.12" + resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*", "@types/lodash@^4.14.182": + version "4.17.0" + resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" + integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== + +"@types/web-bluetooth@^0.0.16": + version "0.0.16" + resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8" + integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ== + +"@vitejs/plugin-vue@^5.0.3": + version "5.0.4" + resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz#508d6a0f2440f86945835d903fcc0d95d1bb8a37" + integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ== + +"@vue/compiler-core@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.21.tgz#868b7085378fc24e58c9aed14c8d62110a62be1a" + integrity sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og== + dependencies: + "@babel/parser" "^7.23.9" + "@vue/shared" "3.4.21" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz#0077c355e2008207283a5a87d510330d22546803" + integrity sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA== + dependencies: + "@vue/compiler-core" "3.4.21" + "@vue/shared" "3.4.21" + +"@vue/compiler-sfc@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz#4af920dc31ab99e1ff5d152b5fe0ad12181145b2" + integrity sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ== + dependencies: + "@babel/parser" "^7.23.9" + "@vue/compiler-core" "3.4.21" + "@vue/compiler-dom" "3.4.21" + "@vue/compiler-ssr" "3.4.21" + "@vue/shared" "3.4.21" + estree-walker "^2.0.2" + magic-string "^0.30.7" + postcss "^8.4.35" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz#b84ae64fb9c265df21fc67f7624587673d324fef" + integrity sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q== + dependencies: + "@vue/compiler-dom" "3.4.21" + "@vue/shared" "3.4.21" + +"@vue/reactivity@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.21.tgz#affd3415115b8ebf4927c8d2a0d6a24bccfa9f02" + integrity sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw== + dependencies: + "@vue/shared" "3.4.21" + +"@vue/runtime-core@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.21.tgz#3749c3f024a64c4c27ecd75aea4ca35634db0062" + integrity sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA== + dependencies: + "@vue/reactivity" "3.4.21" + "@vue/shared" "3.4.21" + +"@vue/runtime-dom@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz#91f867ef64eff232cac45095ab28ebc93ac74588" + integrity sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw== + dependencies: + "@vue/runtime-core" "3.4.21" + "@vue/shared" "3.4.21" + csstype "^3.1.3" + +"@vue/server-renderer@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.21.tgz#150751579d26661ee3ed26a28604667fa4222a97" + integrity sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg== + dependencies: + "@vue/compiler-ssr" "3.4.21" + "@vue/shared" "3.4.21" + +"@vue/shared@3.4.21": + version "3.4.21" + resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.21.tgz#de526a9059d0a599f0b429af7037cd0c3ed7d5a1" + integrity sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g== + +"@vueuse/core@^9.1.0": + version "9.13.0" + resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz#2f69e66d1905c1e4eebc249a01759cf88ea00cf4" + integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw== + dependencies: + "@types/web-bluetooth" "^0.0.16" + "@vueuse/metadata" "9.13.0" + "@vueuse/shared" "9.13.0" + vue-demi "*" + +"@vueuse/metadata@9.13.0": + version "9.13.0" + resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz#bc25a6cdad1b1a93c36ce30191124da6520539ff" + integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ== + +"@vueuse/shared@9.13.0": + version "9.13.0" + resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz#089ff4cc4e2e7a4015e57a8f32e4b39d096353b9" + integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw== + dependencies: + vue-demi "*" + +acorn@^8.10.0, acorn@^8.11.2, acorn@^8.11.3: + version "8.11.3" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +async-validator@^4.2.5: + version "4.2.5" + resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.6.7: + version "1.6.8" + resolved "https://registry.npmmirror.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +chokidar@^3.5.3, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +dayjs@^1.11.3: + version "1.11.10" + resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +element-plus@^2.5.6: + version "2.6.3" + resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.6.3.tgz#15e82e7dc0646c5d1e01b508d0e577d764829b1c" + integrity sha512-U4L/mr+1r+EmAUYUHrs0V/8hHMdBGP07rPymSC72LZCN4jK1UwygQYICegTQ5us4mxeqBvW6wfoEfo003fwCqw== + dependencies: + "@ctrl/tinycolor" "^3.4.1" + "@element-plus/icons-vue" "^2.3.1" + "@floating-ui/dom" "^1.0.1" + "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7" + "@types/lodash" "^4.14.182" + "@types/lodash-es" "^4.17.6" + "@vueuse/core" "^9.1.0" + async-validator "^4.2.5" + dayjs "^1.11.3" + escape-html "^1.0.3" + lodash "^4.17.21" + lodash-es "^4.17.21" + lodash-unified "^1.0.2" + memoize-one "^6.0.0" + normalize-wheel-es "^1.2.0" + +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +esbuild@^0.20.1: + version "0.20.2" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +fast-glob@^3.3.1, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + +local-pkg@^0.5.0: + version "0.5.0" + resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" + integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== + dependencies: + mlly "^1.4.2" + pkg-types "^1.0.3" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash-unified@^1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz#80b1eac10ed2eb02ed189f08614a29c27d07c894" + integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +magic-string@^0.30.3, magic-string@^0.30.5, magic-string@^0.30.7: + version "0.30.8" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" + integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +mlly@^1.2.0, mlly@^1.4.2: + version "1.6.1" + resolved "https://registry.npmmirror.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f" + integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-wheel-es@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz#0fa2593d619f7245a541652619105ab076acf09e" + integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + +postcss@^8.4.35, postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rollup@^4.13.0: + version "4.13.2" + resolved "https://registry.npmmirror.com/rollup/-/rollup-4.13.2.tgz#ac57d2dc48e8f5562f5a6daadb9caee590069262" + integrity sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.13.2" + "@rollup/rollup-android-arm64" "4.13.2" + "@rollup/rollup-darwin-arm64" "4.13.2" + "@rollup/rollup-darwin-x64" "4.13.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.13.2" + "@rollup/rollup-linux-arm64-gnu" "4.13.2" + "@rollup/rollup-linux-arm64-musl" "4.13.2" + "@rollup/rollup-linux-powerpc64le-gnu" "4.13.2" + "@rollup/rollup-linux-riscv64-gnu" "4.13.2" + "@rollup/rollup-linux-s390x-gnu" "4.13.2" + "@rollup/rollup-linux-x64-gnu" "4.13.2" + "@rollup/rollup-linux-x64-musl" "4.13.2" + "@rollup/rollup-win32-arm64-msvc" "4.13.2" + "@rollup/rollup-win32-ia32-msvc" "4.13.2" + "@rollup/rollup-win32-x64-msvc" "4.13.2" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +scule@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3" + integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== + +source-map-js@^1.0.2, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +strip-literal@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" + integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== + dependencies: + acorn "^8.10.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ufo@^1.3.2: + version "1.5.3" + resolved "https://registry.npmmirror.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== + +unimport@^3.7.1: + version "3.7.1" + resolved "https://registry.npmmirror.com/unimport/-/unimport-3.7.1.tgz#37250d0f3f2dcf1e1b66ed13728db0e9f50ba0c3" + integrity sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ== + dependencies: + "@rollup/pluginutils" "^5.1.0" + acorn "^8.11.2" + escape-string-regexp "^5.0.0" + estree-walker "^3.0.3" + fast-glob "^3.3.2" + local-pkg "^0.5.0" + magic-string "^0.30.5" + mlly "^1.4.2" + pathe "^1.1.1" + pkg-types "^1.0.3" + scule "^1.1.1" + strip-literal "^1.3.0" + unplugin "^1.5.1" + +unplugin-auto-import@^0.17.5: + version "0.17.5" + resolved "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.17.5.tgz#5ae7164fddd1560e96bf9be23b2f5ef46c808ca6" + integrity sha512-fHNDkDSxv3PGagX1wmKBYBkgaM4AKAgZmdJw/bxjhNljx9KSXSgHpGfX0MwUrq9qw6q1bhHIZVWyOwoY2koo4w== + dependencies: + "@antfu/utils" "^0.7.7" + "@rollup/pluginutils" "^5.1.0" + fast-glob "^3.3.2" + local-pkg "^0.5.0" + magic-string "^0.30.5" + minimatch "^9.0.3" + unimport "^3.7.1" + unplugin "^1.6.0" + +unplugin-vue-components@^0.26.0: + version "0.26.0" + resolved "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.26.0.tgz#6d79caa770039a1eb3d7c09fdd28778ea20afef3" + integrity sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ== + dependencies: + "@antfu/utils" "^0.7.6" + "@rollup/pluginutils" "^5.0.4" + chokidar "^3.5.3" + debug "^4.3.4" + fast-glob "^3.3.1" + local-pkg "^0.4.3" + magic-string "^0.30.3" + minimatch "^9.0.3" + resolve "^1.22.4" + unplugin "^1.4.0" + +unplugin@^1.4.0, unplugin@^1.5.1, unplugin@^1.6.0: + version "1.10.1" + resolved "https://registry.npmmirror.com/unplugin/-/unplugin-1.10.1.tgz#8ceda065dc71bc67d923dea0920f05c67f2cd68c" + integrity sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg== + dependencies: + acorn "^8.11.3" + chokidar "^3.6.0" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.6.1" + +vite@^5.0.11: + version "5.2.7" + resolved "https://registry.npmmirror.com/vite/-/vite-5.2.7.tgz#e1b8a985eb54fcb9467d7f7f009d87485016df6e" + integrity sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA== + dependencies: + esbuild "^0.20.1" + postcss "^8.4.38" + rollup "^4.13.0" + optionalDependencies: + fsevents "~2.3.3" + +vue-demi@*: + version "0.14.7" + resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2" + integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA== + +vue@^3.4.15: + version "3.4.21" + resolved "https://registry.npmmirror.com/vue/-/vue-3.4.21.tgz#69ec30e267d358ee3a0ce16612ba89e00aaeb731" + integrity sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA== + dependencies: + "@vue/compiler-dom" "3.4.21" + "@vue/compiler-sfc" "3.4.21" + "@vue/runtime-dom" "3.4.21" + "@vue/server-renderer" "3.4.21" + "@vue/shared" "3.4.21" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/.eslintignore b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/.eslintignore new file mode 100644 index 00000000..234d3f73 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/.eslintignore @@ -0,0 +1 @@ +# * \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/.eslintrc.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/.eslintrc.js new file mode 100644 index 00000000..cc717dce --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/.eslintrc.js @@ -0,0 +1,31 @@ +module.exports = { + root: true, + + env: { + node: true, + }, + + extends: [ + "plugin:vue/vue3-essential", + "eslint:recommended", + "@vue/prettier", + ], + + parserOptions: { + parser: "@babel/eslint-parser", + }, + // "writable" 以允许重写变量,或 "readonly" 不允许重写变量 + globals: { + XE: "readonly", + VE_ENV: "readonly", + VE_API: "readonly", + }, + + rules: { + indent: [2, 4, { SwitchCase: 1 }], + "prettier/prettier": [2, { tabWidth: 4, endOfLine: "auto" }], + "no-console": "off", + "no-debugger": "off", + "vue/multi-word-component-names": 0, + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/Dockerfile b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/Dockerfile new file mode 100755 index 00000000..ebbe90b6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/Dockerfile @@ -0,0 +1,11 @@ +FROM nginx:1.13.0-alpine +COPY dist /usr/share/nginx/html/ + +##将nginx配置模板复制过去到指定目录 +COPY default.template /etc/nginx/conf.d/ + +#将docker环境下的命令行路径切换到/etc/nginx/conf.d下执行 +WORKDIR /etc/nginx/conf.d +#添加环境变量的写入 + +ENTRYPOINT envsubst < default.template > default.conf && cat default.conf && nginx -g 'daemon off;' diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/LICENSE b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/LICENSE new file mode 100644 index 00000000..bef0995c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Asa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/README.md b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/README.md new file mode 100644 index 00000000..057353a1 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/README.md @@ -0,0 +1,296 @@ + + +![logo](https://i.bmp.ovh/imgs/2021/08/f828888bb4064c64.png) + +# wu-smart-agent-network + +**[✈ 国内加速链接](https://gitee.com/asaasa/wu-smart-agent-network)** +**[✈ 效果预览](https://wu-smart-agent-network.vercel.app/)** +**[✈ 效果预览(备用地址)](http://asaasa.gitee.io/xujianhua)** +**走过路过的老铁,帮忙点个小 ⭐⭐⭐⭐⭐,🤝🤝🤝🤝🤝,🙏🙏🙏🙏🙏** + +## 项目简介 + +基于**vue3**和**element-plus**开发的企业后台管理模板. + +--- + +![登录页](https://i.bmp.ovh/imgs/2021/08/d9cc587a8b230dec.png) +![404](https://i.bmp.ovh/imgs/2021/08/c8d46b772369167d.png) +![用户管理](https://i.bmp.ovh/imgs/2021/08/6ea6b416eebca641.png) +![菜单管理](https://i.bmp.ovh/imgs/2021/08/682c150eef16bf17.png) +![角色管理](https://i.bmp.ovh/imgs/2021/08/7ff5cda434a2000b.png) +![iframe页面](https://i.bmp.ovh/imgs/2021/08/a101fec1b5769d7b.png) + +## 功能特性 + +项目使用了最新的**vue3 全家桶**+**element-plus**+**mockjs**+**axios**+**eChart5**.项目继成了**mockServe**,可脱离后端自主开发测试 +对**axios**深度封装,采用动态路由,路由配置更简单,**mockServe**独立开发测试时可在 nodework 直观查看接口数据 +基于 node 实现自动化开发 + +## 环境依赖 + +**node 14+**, **vueCli 4+** + +## 部署步骤 + +**npm i** +**npm run serve** +**yarn build / npm run build** +**yarn build --report** + + +## 目录结构描述 + +``` +│ .browserslistrc 浏览器兼容配置 +│ .eslintrc.js eslint配置文件 +│ .gitignore git配置文件 +│ babel.config.js babel配置文件 +│ jsconfig.json js配置文件 +│ LICENSE 开源认证 +│ package-lock.json +│ package.json +│ README.md 项目说明 +│ vue.config.js vue配置文件 +│ +├─.vscode vscode配置文件 +│ settings.json +│ +├─node_modules +├─public +│ favicon.ico +│ index.html +│ +└─src + │ App.vue + │ main.js + │ config.js + │ + ├─api api管理模块 + │ │ index.js api管理入口文件 + │ │ mock-server.js mock服务配置文件 + │ │ + │ └─modules api分模块管理 + │ system.js 模块api文件 + │ + ├─assets 静态文件 + │ logo.png + │ + ├─components 公共组件目录 + │ │ Common.vue + │ │ FunctionPage.vue + │ │ + │ ├─dashboard + │ │ LiveChart.vue + │ │ Shortcuts.vue + │ │ + │ └─layout + │ │ NavigateBar.vue + │ │ SideBar.vue + │ │ + │ └─components + │ Breadcrumb.vue + │ Hamburger.vue + │ Logo.vue + │ Personal.vue + │ SlideMenu.vue + │ + ├─directives 自定义指令目录 + │ │ index.js 自定义指令入口文件 + │ │ + │ └─modules 自定义指令模块目录 + │ permission.js + │ resize.js + │ + ├─plugins 插件目录 + │ axios-plus.js + │ element.js + │ mock.js + │ permission.js + │ + ├─router router目录 + │ globalRoutes.js + │ index.js + │ mainRoutes.js + │ + ├─store vuex目录 + │ │ getters.js + │ │ index.js + │ │ + │ └─modules vuex模块目录 + │ app.js + │ + ├─styles 样式目录 + │ common.scss + │ variables.scss.js + │ + ├─utils 公共方法 + │ index.js + │ validate.js + │ + └─views + │ 404.vue + │ AppMain.vue + │ Home.vue + │ IFrame.vue + │ Login.vue + │ + └─pages + │ common.js + │ + ├─leisure + │ Game.vue + │ + └─system + │ Menus.vue + │ Roles.vue + │ Users.vue + │ + └─components + MenuEdit.vue + RoleEdit.vue + UsersEdit.vue + UsersEditRoute.vue +``` + +## 使用文档 + +### 自定义指令 + +**v-permission="[array]"** +自定义权限指令,参数为一个数组,数组元素为按钮所对应的 key 值 + +```js +{{ buttons.add.name }} + +``` + +**v-resize="myChart"** +监听 echart 容器的自定义指令,参数为 echart 实例 + +```js +
+``` + +### 动态路由 + +动态路由的配置可查看 [src\plugins\permission.js](src\plugins\permission.js) +主要原理就是根据后端接口返回的树形菜单数据,动态生成路由表并挂载.具体需求字段可在[src\plugins\permission.js](src\plugins\permission.js)中的**fnAddDynamicMenuRoutes**方法中进行配置修改 + +```js +let route = { + path: menuList[i].url.replace(/\//g, "-") + `-${menuList[i].id}`, + component: null, + name: menuList[i].url.replace(/\//g, "-") + `-${menuList[i].id}`, + // meta: { + // } +}; +// url以http[s]://开头, 通过iframe展示 +if (menuList[i].iframe == 1) { + route["path"] = `i-${menuList[i].id}`; + route["name"] = `i-${menuList[i].id}`; + route["props"] = { url: menuList[i].url }; + route["component"] = () => import("@/views/IFrame.vue"); +} else { + const l = "views/pages/" + menuList[i].url; + route["component"] = () => import("@/" + l + ".vue"); +} +routes.push(route); +``` + +根据需求可以添加更多路由配置或定制化字段,如路由别名等 + +### 接口配置 + +项目中对 axios 做了封装配置中添加**Global**字段用来控制是否显示全屏 load,默认为 true,如需修改添加 axios 配置可在[src\plugins\axios-plus.js](src\plugins\axios.js)中进行 + +#### 添加接口 + +本项目对 mock 做了深度集成,在使用其他项目时,mock 接口和项目接口往往都是分开维护很不方便.所以就放在了一起.只用在一处添加即可.接口目录为[src\api\modules](src\api\modules)**不要修改此目录名称**.在该目录下添加对应的接口文件. + +```js +module.exports = { + login: { + //接口名称 必须 + url: "/login", //接口地址 必须 + type: "post", //请求类型 必须 + mock: true, //mock细粒度控制开关,非必须,不填则为false + response: (opt) => { + //启用mock时的返回数据 opt为请求数据头 + const { + body: { userName, pwd }, + } = opt; + let data = { + code: "00", + message: "登录成功!", + token: new Date().getTime(), + uname: userName, + }; + if (userName == "Administrator") { + if (pwd != "123456") { + data = { + code: "01", + message: "密码错误", + }; + } + } + return data; + }, + }, +}; +``` + +必须使用**module.exports**导出 + +#### 接口的使用 + +项目中已将封装后 axios 实例挂载到自定义字段 window.VE_API 上.调用方式为: + +```js +VE_API [ fileName ][ portName ] (params,[config]) //有全局loading +VE_API [ fileName ][ portName ] (params,{Global:false}) //没有全局loading +``` + +### 菜单配置 + +项目中的菜单时根据后端返回的树形结构数据动态生成,具体可查看[src\components\layout\components\SlideMenu.vue](src\components\layout\components\SlideMenu.vue) + +## 声明 + +个人开发维护! 欢迎交流学习! + +设置阿里云镜像仓库 +```shell +npm config set registry http://registry.npm.taobao.org/ +``` + +### 打包 + +```shell +yarn run build +``` + +### 拷贝前端 +```shell +echo "开始拷贝前端UI" +rm -rf ../wu-smart-agent-network-heartbeat-server/src/resources/static +cp -r ../wu-smart-agent-network-ui/dist/* ../wu-smart-agent-network-heartbeat-server/src/main/resources/static/ + +``` + +docker login --username=1207537021@qq.com registry.cn-hangzhou.aliyuncs.com +```shell +docker build -t registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-ui:ui-master . +docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-smart-agent-network-ui:ui-master + +``` diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/babel.config.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/babel.config.js new file mode 100644 index 00000000..4684ac3e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/babel.config.js @@ -0,0 +1,4 @@ +module.exports = { + presets: ["@vue/cli-plugin-babel/preset"], + plugins: ["@vue/babel-plugin-jsx"], +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/default.template b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/default.template new file mode 100644 index 00000000..5808d5ce --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/default.template @@ -0,0 +1,45 @@ +server { + listen 80; + server_name localhost; + + #charset koi8-r; + #access_log /var/log/nginx/log/host.access.log main; + + location / { + root /usr/share/nginx/html; + add_header version '${vue_http_response_version}'; + index index.html index.htm; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/jsconfig.json b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/jsconfig.json new file mode 100644 index 00000000..460828e6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src/*"] +} diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/package-lock.json b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/package-lock.json new file mode 100644 index 00000000..94382316 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/package-lock.json @@ -0,0 +1,24510 @@ +{ + "name": "wu-smart-agent-network", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "wu-smart-agent-network", + "version": "0.1.0", + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "@icon-park/vue-next": "^1.4.2", + "@vueuse/core": "^10.2.1", + "axios": "^1.4.0", + "clipboard": "^2.0.11", + "core-js": "^3.20.3", + "dayjs": "^1.11.9", + "echarts": "^5.4.3", + "element-plus": "^2.3.8", + "normalize.css": "^8.0.1", + "nprogress": "^0.2.0", + "qs": "^6.11.2", + "sortablejs": "^1.15.0", + "uuid": "^9.0.1", + "vue": "^3.3.4", + "vue-clipboard3": "^2.0.0", + "vue-router": "^4.2.4", + "vue3-json-viewer": "^2.2.2", + "vuex": "^4.1.0", + "xe-utils": "^3.5.11", + "zdog": "^1.1.3" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.22.9", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/cli-plugin-babel": "^5.0.8", + "@vue/cli-plugin-eslint": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-service": "^5.0.8", + "@vue/compiler-sfc": "^3.3.4", + "@vue/eslint-config-prettier": "^8.0.0", + "compression-webpack-plugin": "^10.0.0", + "eslint": "^8.46.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-vue": "^9.16.0", + "lint-staged": "^13.2.3", + "mockjs": "^1.1.0", + "prettier": "^3.0.0", + "sass": "^1.64.1", + "sass-loader": "^13.3.2", + "terser-webpack-plugin": "^5.3.9", + "vue-cli-plugin-axios": "^0.0.4", + "vue-cli-plugin-element-plus": "^0.0.13", + "webpack": "5.78.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@achrinza/node-ipc": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz", + "integrity": "sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + }, + "engines": { + "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", + "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.23.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz", + "integrity": "sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", + "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", + "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.5.tgz", + "integrity": "sha512-6IsY8jOeWibsengGlWIezp7cuZEFzNlAghFpzh9wiZwhQ42/hRcPnY/QV9HJoKTlujupinSlnQPiEy/u2C1ZfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.23.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", + "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", + "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.4.tgz", + "integrity": "sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.5.tgz", + "integrity": "sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.4", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.5", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", + "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.5", + "@babel/types": "^7.23.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz", + "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==", + "license": "MIT" + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@icon-park/vue-next": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@icon-park/vue-next/-/vue-next-1.4.2.tgz", + "integrity": "sha512-+QklF255wkfBOabY+xw6FAI0Bwln/RhdwCunNy/9sKdKuChtaU67QZqU67KGAvZUTeeBgsL+yaHHxqfQeGZXEQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 8.0.0", + "npm": ">= 5.0.0" + }, + "peerDependencies": { + "vue": "3.x" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "easy-stack": "1.0.1" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.8.tgz", + "integrity": "sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz", + "integrity": "sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", + "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/send/node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", + "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", + "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "@vue/babel-helper-vue-transform-on": "^1.1.5", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-jsx/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vue/babel-plugin-jsx/node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-preset-app": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", + "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/helper-compilation-targets": "^7.12.16", + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/runtime": "^7.12.13", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.8.3", + "core-js-compat": "^3.8.3", + "semver": "^7.3.4" + }, + "peerDependencies": { + "@babel/core": "*", + "core-js": "^3", + "vue": "^2 || ^3.2.13" + }, + "peerDependenciesMeta": { + "core-js": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-preset-app/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/babel-preset-app/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", + "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", + "@vue/babel-sugar-functional-vue": "^1.4.0", + "@vue/babel-sugar-inject-h": "^1.4.0", + "@vue/babel-sugar-v-model": "^1.4.0", + "@vue/babel-sugar-v-on": "^1.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "vue": "*" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-sugar-composition-api-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-render-instance": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", + "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-babel": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", + "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.16", + "@vue/babel-preset-app": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "babel-loader": "^8.2.2", + "thread-loader": "^3.0.0", + "webpack": "^5.54.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-babel/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-plugin-eslint": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz", + "integrity": "sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/cli-shared-utils": "^5.0.8", + "eslint-webpack-plugin": "^3.1.0", + "globby": "^11.0.2", + "webpack": "^5.54.0", + "yorkie": "^2.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", + "eslint": ">=7.5.0" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/eslint-webpack-plugin/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@vue/cli-plugin-router": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", + "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/cli-shared-utils": "^5.0.8" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-vuex": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", + "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-service": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz", + "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@vue/cli-overlay": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.5.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^17.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": "^12.0.0 || >= 14.0.0" + }, + "peerDependencies": { + "vue-template-compiler": "^2.0.0", + "webpack-sources": "*" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "less-loader": { + "optional": true + }, + "pug-plain-loader": { + "optional": true + }, + "raw-loader": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vue/cli-service/node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/@soda/friendly-errors-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15": { + "name": "vue-loader", + "version": "15.11.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "prettier": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@vue/cli-service/node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@vue/cli-service/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/cli-service/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/cli-service/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@vue/cli-service/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/@vue/cli-service/node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@vue/cli-service/node_modules/css-minimizer-webpack-plugin/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/@vue/cli-service/node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-service/node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@vue/cli-service/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/cli-service/node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/html-webpack-plugin": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz", + "integrity": "sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/@vue/cli-service/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/@vue/cli-service/node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-service/node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/progress-webpack-plugin": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", + "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-service/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-service/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/cli-service/node_modules/thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/thread-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/@vue/cli-service/node_modules/vue-loader": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.3.1.tgz", + "integrity": "sha512-nmVu7KU8geOyzsStyyaxID/uBGDMS8BkPXb6Lu2SNkMawriIbb+hYrNtgftHMKxOSkjjjTF5OSSwPo3KP59egg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/vue-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vue/cli-service/node_modules/vue-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vue/cli-service/node_modules/vue-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/vue-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-service/node_modules/vue-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/vue-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-middleware/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-server/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/@vue/cli-service/node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@vue/cli-service/node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.11.tgz", + "integrity": "sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.5", + "@vue/shared": "3.3.11", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz", + "integrity": "sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.3.11", + "@vue/shared": "3.3.11" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz", + "integrity": "sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.5", + "@vue/compiler-core": "3.3.11", + "@vue/compiler-dom": "3.3.11", + "@vue/compiler-ssr": "3.3.11", + "@vue/reactivity-transform": "3.3.11", + "@vue/shared": "3.3.11", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.32", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz", + "integrity": "sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.11", + "@vue/shared": "3.3.11" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==", + "license": "MIT" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz", + "integrity": "sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^5.0.0" + }, + "peerDependencies": { + "eslint": ">= 8.0.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.11.tgz", + "integrity": "sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.3.11" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz", + "integrity": "sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.5", + "@vue/compiler-core": "3.3.11", + "@vue/shared": "3.3.11", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.11.tgz", + "integrity": "sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.3.11", + "@vue/shared": "3.3.11" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz", + "integrity": "sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==", + "license": "MIT", + "dependencies": { + "@vue/runtime-core": "3.3.11", + "@vue/shared": "3.3.11", + "csstype": "^3.1.2" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.11.tgz", + "integrity": "sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.3.11", + "@vue/shared": "3.3.11" + }, + "peerDependencies": { + "vue": "3.3.11" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.11.tgz", + "integrity": "sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==", + "license": "MIT" + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.0.tgz", + "integrity": "sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.7.0", + "@vueuse/shared": "10.7.0", + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.0.tgz", + "integrity": "sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.0.tgz", + "integrity": "sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", + "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", + "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", + "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", + "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/bonjour-service/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001566", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", + "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "license": "MIT", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression-webpack-plugin": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-10.0.0.tgz", + "integrity": "sha512-wLXLIBwpul/ALcm7Aj+69X0pYT3BYt6DdPn3qrgBIh9YejV9Bju9ShhlAsjujLyWMo6SAweFIWaUoFmXZNuNrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", + "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", + "license": "MIT" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-gateway/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.608", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.608.tgz", + "integrity": "sha512-J2f/3iIIm3Mo0npneITZ2UPe4B1bg8fTNrFjD8715F/k1BvbviRuqYGkET1PgprrczXYTHFvotbBOmUp6KE0uA==", + "dev": true, + "license": "ISC" + }, + "node_modules/element-plus": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.4.3.tgz", + "integrity": "sha512-b3q26j+lM4SBqiyzw8HybybGnP2pk4MWgrnzzzYW5qKQUgV6EG1Zg7nMCfgCVccI8tNvZoTiUHb2mFaiB9qT8w==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/element-plus/node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==", + "license": "MIT" + }, + "node_modules/element-plus/node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "license": "MIT", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.19.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz", + "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.3.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "license": "MIT", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "read-pkg-up": "^7.0.1" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz", + "integrity": "sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "launch-editor": "^2.6.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/lru-cache/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz", + "integrity": "sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mockjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz", + "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==", + "dev": true, + "dependencies": { + "commander": "*" + }, + "bin": { + "random": "bin/random" + } + }, + "node_modules/mockjs/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "license": "MIT" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/sortablejs": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.1.tgz", + "integrity": "sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/synckit": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", + "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/utils": "^2.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "license": "MIT" + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vue": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.11.tgz", + "integrity": "sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.11", + "@vue/compiler-sfc": "3.3.11", + "@vue/runtime-dom": "3.3.11", + "@vue/server-renderer": "3.3.11", + "@vue/shared": "3.3.11" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-cli-plugin-axios": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-axios/-/vue-cli-plugin-axios-0.0.4.tgz", + "integrity": "sha512-p2b/fvPJuPBnvU8027PAAuU5DiOzUn2lku8XLG/f6c8FU0N+/MXWZAlOuHhqd9e7+KIZitwe/c8qlmv7TglbTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-cli-plugin-element-plus": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-element-plus/-/vue-cli-plugin-element-plus-0.0.13.tgz", + "integrity": "sha512-ctG5mynJIyGLFBhS2JpzXmBWT3JRXwzMm5AoANUmBlbZHTruct1xQF2OKM/mfJv6tSfqCcEfgH8rGCAY5ca83Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-clipboard3": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz", + "integrity": "sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==", + "dependencies": { + "clipboard": "^2.0.6" + } + }, + "node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", + "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue3-json-viewer": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/vue3-json-viewer/-/vue3-json-viewer-2.2.2.tgz", + "integrity": "sha512-56l3XDGggnpwEqZieXsSMhNT4NhtO6d7zuSAxHo4i0UVxymyY2jRb7UMQOU1ztChKALZCAzX7DlgrsnEhxu77A==", + "license": "ISC", + "dependencies": { + "clipboard": "^2.0.10" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "5.78.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz", + "integrity": "sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", + "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "is-plain-object": "^5.0.0", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xe-utils": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.14.tgz", + "integrity": "sha512-Xq6mS8dWwHBQsQUEBXcZYSaBV0KnNLoVWd0vRRDI3nKpbNxfs/LSCK0W21g1edLFnXYfKqg7hh5dakr3RtYY0A==", + "license": "MIT" + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/yorkie/node_modules/execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/zdog": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/zdog/-/zdog-1.1.3.tgz", + "integrity": "sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==", + "license": "MIT" + }, + "node_modules/zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@achrinza/node-ipc": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz", + "integrity": "sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg==", + "dev": true, + "requires": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + } + }, + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true + }, + "@babel/core": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/eslint-parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", + "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", + "dev": true, + "requires": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "dev": true, + "requires": { + "@babel/types": "^7.23.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz", + "integrity": "sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", + "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "requires": { + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + } + }, + "@babel/helpers": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5" + } + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", + "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.5.tgz", + "integrity": "sha512-6IsY8jOeWibsengGlWIezp7cuZEFzNlAghFpzh9wiZwhQ42/hRcPnY/QV9HJoKTlujupinSlnQPiEy/u2C1ZfQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.23.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.23.3" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", + "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", + "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.4.tgz", + "integrity": "sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "semver": "^6.3.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.5.tgz", + "integrity": "sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.4", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.5", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", + "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.5", + "@babel/types": "^7.23.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==" + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "requires": {} + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "dev": true + }, + "@floating-ui/core": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz", + "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==", + "requires": { + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "requires": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "@icon-park/vue-next": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@icon-park/vue-next/-/vue-next-1.4.2.tgz", + "integrity": "sha512-+QklF255wkfBOabY+xw6FAI0Bwln/RhdwCunNy/9sKdKuChtaU67QZqU67KGAvZUTeeBgsL+yaHHxqfQeGZXEQ==", + "requires": {} + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "requires": { + "eslint-scope": "5.1.1" + } + }, + "@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "requires": { + "easy-stack": "1.0.1" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "dependencies": { + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + } + } + }, + "@polka/url": { + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "dev": true + }, + "@popperjs/core": { + "version": "npm:@sxzz/popperjs-es@2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" + }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.44.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.8.tgz", + "integrity": "sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "requires": { + "@types/lodash": "*" + } + }, + "@types/mime": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz", + "integrity": "sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "@types/node": { + "version": "20.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", + "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/node-forge": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + }, + "dependencies": { + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + } + } + }, + "@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + }, + "@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", + "dev": true + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", + "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", + "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "@vue/babel-helper-vue-transform-on": "^1.1.5", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true + } + } + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-preset-app": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", + "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@babel/helper-compilation-targets": "^7.12.16", + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/runtime": "^7.12.13", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.8.3", + "core-js-compat": "^3.8.3", + "semver": "^7.3.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@vue/babel-preset-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", + "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", + "@vue/babel-sugar-functional-vue": "^1.4.0", + "@vue/babel-sugar-inject-h": "^1.4.0", + "@vue/babel-sugar-v-model": "^1.4.0", + "@vue/babel-sugar-v-on": "^1.4.0" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0" + } + }, + "@vue/cli-overlay": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", + "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", + "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@vue/babel-preset-app": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "babel-loader": "^8.2.2", + "thread-loader": "^3.0.0", + "webpack": "^5.54.0" + }, + "dependencies": { + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "requires": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + } + } + }, + "@vue/cli-plugin-eslint": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz", + "integrity": "sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^5.0.8", + "eslint-webpack-plugin": "^3.1.0", + "globby": "^11.0.2", + "webpack": "^5.54.0", + "yorkie": "^2.0.0" + }, + "dependencies": { + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dev": true, + "requires": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + } + } + }, + "@vue/cli-plugin-router": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", + "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^5.0.8" + } + }, + "@vue/cli-plugin-vuex": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", + "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", + "dev": true, + "requires": {} + }, + "@vue/cli-service": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz", + "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@vue/cli-overlay": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.5.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^17.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + }, + "dependencies": { + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@vue/vue-loader-v15": { + "version": "npm:vue-loader@15.11.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "requires": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + } + }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz", + "integrity": "sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, + "progress-webpack-plugin": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", + "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "requires": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "vue-loader": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.3.1.tgz", + "integrity": "sha512-nmVu7KU8geOyzsStyyaxID/uBGDMS8BkPXb6Lu2SNkMawriIbb+hYrNtgftHMKxOSkjjjTF5OSSwPo3KP59egg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true, + "requires": {} + } + } + }, + "@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@vue/compiler-core": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.11.tgz", + "integrity": "sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==", + "requires": { + "@babel/parser": "^7.23.5", + "@vue/shared": "3.3.11", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-dom": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz", + "integrity": "sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==", + "requires": { + "@vue/compiler-core": "3.3.11", + "@vue/shared": "3.3.11" + } + }, + "@vue/compiler-sfc": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz", + "integrity": "sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==", + "requires": { + "@babel/parser": "^7.23.5", + "@vue/compiler-core": "3.3.11", + "@vue/compiler-dom": "3.3.11", + "@vue/compiler-ssr": "3.3.11", + "@vue/reactivity-transform": "3.3.11", + "@vue/shared": "3.3.11", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.32", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-ssr": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz", + "integrity": "sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==", + "requires": { + "@vue/compiler-dom": "3.3.11", + "@vue/shared": "3.3.11" + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true + } + } + }, + "@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "@vue/eslint-config-prettier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz", + "integrity": "sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==", + "dev": true, + "requires": { + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^5.0.0" + } + }, + "@vue/reactivity": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.11.tgz", + "integrity": "sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==", + "requires": { + "@vue/shared": "3.3.11" + } + }, + "@vue/reactivity-transform": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz", + "integrity": "sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==", + "requires": { + "@babel/parser": "^7.23.5", + "@vue/compiler-core": "3.3.11", + "@vue/shared": "3.3.11", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5" + } + }, + "@vue/runtime-core": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.11.tgz", + "integrity": "sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==", + "requires": { + "@vue/reactivity": "3.3.11", + "@vue/shared": "3.3.11" + } + }, + "@vue/runtime-dom": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz", + "integrity": "sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==", + "requires": { + "@vue/runtime-core": "3.3.11", + "@vue/shared": "3.3.11", + "csstype": "^3.1.2" + } + }, + "@vue/server-renderer": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.11.tgz", + "integrity": "sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==", + "requires": { + "@vue/compiler-ssr": "3.3.11", + "@vue/shared": "3.3.11" + } + }, + "@vue/shared": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.11.tgz", + "integrity": "sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==" + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@vueuse/core": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.0.tgz", + "integrity": "sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==", + "requires": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.7.0", + "@vueuse/shared": "10.7.0", + "vue-demi": ">=0.14.6" + } + }, + "@vueuse/metadata": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.0.tgz", + "integrity": "sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==" + }, + "@vueuse/shared": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.0.tgz", + "integrity": "sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==", + "requires": { + "vue-demi": ">=0.14.6" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", + "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "dev": true + }, + "address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", + "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", + "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.33.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", + "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.3" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "requires": { + "run-applescript": "^5.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001566", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", + "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + } + }, + "cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "compression-webpack-plugin": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-10.0.0.tgz", + "integrity": "sha512-wLXLIBwpul/ALcm7Aj+69X0pYT3BYt6DdPn3qrgBIh9YejV9Bju9ShhlAsjujLyWMo6SAweFIWaUoFmXZNuNrg==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "core-js": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", + "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==" + }, + "core-js-compat": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "dev": true, + "requires": { + "browserslist": "^4.22.2" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "requires": {} + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true + }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "dependencies": { + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + } + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "requires": { + "tslib": "2.3.0", + "zrender": "5.4.4" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.608", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.608.tgz", + "integrity": "sha512-J2f/3iIIm3Mo0npneITZ2UPe4B1bg8fTNrFjD8715F/k1BvbviRuqYGkET1PgprrczXYTHFvotbBOmUp6KE0uA==", + "dev": true + }, + "element-plus": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.4.3.tgz", + "integrity": "sha512-b3q26j+lM4SBqiyzw8HybybGnP2pk4MWgrnzzzYW5qKQUgV6EG1Zg7nMCfgCVccI8tNvZoTiUHb2mFaiB9qT8w==", + "requires": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "dependencies": { + "@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "requires": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + } + }, + "@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==" + }, + "@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "requires": { + "vue-demi": "*" + } + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + } + }, + "eslint-plugin-vue": { + "version": "9.19.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz", + "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.3.1", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "requires": { + "delegate": "^3.1.2" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + } + } + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + } + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true + }, + "immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "requires": { + "read-pkg-up": "^7.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + }, + "dependencies": { + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + } + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "launch-editor-middleware": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz", + "integrity": "sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g==", + "dev": true, + "requires": { + "launch-editor": "^2.6.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lint-staged": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", + "dev": true, + "requires": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + }, + "commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true + } + } + }, + "listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dev": true, + "requires": { + "type-fest": "^1.0.2" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "requires": { + "restore-cursor": "^4.0.0" + } + }, + "log-update": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "dev": true, + "requires": { + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" + } + }, + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } + } + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "requires": {} + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + }, + "dependencies": { + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } + }, + "magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz", + "integrity": "sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mockjs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz", + "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==", + "dev": true, + "requires": { + "commander": "*" + }, + "dependencies": { + "commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true + } + } + }, + "module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + } + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "requires": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "requires": {} + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "requires": { + "neo-async": "^2.6.2" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "requires": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "sortablejs": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.1.tgz", + "integrity": "sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "synckit": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", + "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.4.2", + "tslib": "^2.6.2" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vue": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.11.tgz", + "integrity": "sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==", + "requires": { + "@vue/compiler-dom": "3.3.11", + "@vue/compiler-sfc": "3.3.11", + "@vue/runtime-dom": "3.3.11", + "@vue/server-renderer": "3.3.11", + "@vue/shared": "3.3.11" + } + }, + "vue-cli-plugin-axios": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-axios/-/vue-cli-plugin-axios-0.0.4.tgz", + "integrity": "sha512-p2b/fvPJuPBnvU8027PAAuU5DiOzUn2lku8XLG/f6c8FU0N+/MXWZAlOuHhqd9e7+KIZitwe/c8qlmv7TglbTg==", + "dev": true + }, + "vue-cli-plugin-element-plus": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-element-plus/-/vue-cli-plugin-element-plus-0.0.13.tgz", + "integrity": "sha512-ctG5mynJIyGLFBhS2JpzXmBWT3JRXwzMm5AoANUmBlbZHTruct1xQF2OKM/mfJv6tSfqCcEfgH8rGCAY5ca83Q==", + "dev": true + }, + "vue-clipboard3": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz", + "integrity": "sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==", + "requires": { + "clipboard": "^2.0.6" + } + }, + "vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "requires": {} + }, + "vue-eslint-parser": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", + "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "dependencies": { + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "requires": { + "@vue/devtools-api": "^6.5.0" + } + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vue3-json-viewer": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/vue3-json-viewer/-/vue3-json-viewer-2.2.2.tgz", + "integrity": "sha512-56l3XDGggnpwEqZieXsSMhNT4NhtO6d7zuSAxHo4i0UVxymyY2jRb7UMQOU1ztChKALZCAzX7DlgrsnEhxu77A==", + "requires": { + "clipboard": "^2.0.10" + } + }, + "vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "requires": { + "@vue/devtools-api": "^6.0.0-beta.11" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "webpack": { + "version": "5.78.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz", + "integrity": "sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", + "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "is-plain-object": "^5.0.0", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + } + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.19", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", + "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "requires": {} + }, + "xe-utils": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.14.tgz", + "integrity": "sha512-Xq6mS8dWwHBQsQUEBXcZYSaBV0KnNLoVWd0vRRDI3nKpbNxfs/LSCK0W21g1edLFnXYfKqg7hh5dakr3RtYY0A==" + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, + "yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "requires": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", + "dev": true + } + } + }, + "zdog": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/zdog/-/zdog-1.1.3.tgz", + "integrity": "sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==" + }, + "zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "requires": { + "tslib": "2.3.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + } + } +} diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/package.json b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/package.json new file mode 100644 index 00000000..2a3fd37a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/package.json @@ -0,0 +1,69 @@ +{ + "name": "wu-smart-agent-network", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "@icon-park/vue-next": "^1.4.2", + "@vueuse/core": "^10.2.1", + "axios": "^1.4.0", + "clipboard": "^2.0.11", + "core-js": "^3.20.3", + "dayjs": "^1.11.9", + "echarts": "^5.4.3", + "element-plus": "^2.3.8", + "normalize.css": "^8.0.1", + "nprogress": "^0.2.0", + "qs": "^6.11.2", + "sortablejs": "^1.15.0", + "sql-formatter": "^4.0.2", + "swiper": "^11.0.7", + "uuid": "^9.0.1", + "vue": "^3.3.4", + "vue-clipboard3": "^2.0.0", + "vue-codemirror": "^6.1.1", + "vue-codemirror-lite": "^1.0.4", + "vue-router": "^4.2.4", + "vue3-json-viewer": "^2.2.2", + "vuex": "^4.1.0", + "xe-utils": "^3.5.11", + "zdog": "^1.1.3" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.22.9", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/cli-plugin-babel": "^5.0.8", + "@vue/cli-plugin-eslint": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-service": "^5.0.8", + "@vue/compiler-sfc": "^3.3.4", + "@vue/eslint-config-prettier": "^8.0.0", + "compression-webpack-plugin": "^10.0.0", + "eslint": "^8.46.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-vue": "^9.16.0", + "lint-staged": "^13.2.3", + "mockjs": "^1.1.0", + "prettier": "^3.0.0", + "sass": "^1.64.1", + "sass-loader": "^13.3.2", + "terser-webpack-plugin": "^5.3.9", + "vue-cli-plugin-axios": "^0.0.4", + "vue-cli-plugin-element-plus": "^0.0.13", + "webpack": "5.78.0" + }, + "gitHooks": { + "pre-commit": "lint-staged" + }, + "lint-staged": { + "*.{js,jsx,vue}": [ + "vue-cli-service lint --fix" + ] + } +} diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/favicon.ico b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/favicon.ico new file mode 100644 index 00000000..1aa85a35 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/favicon.ico differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/favicon.ico1 b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/favicon.ico1 new file mode 100644 index 00000000..9729dee6 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/favicon.ico1 differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/index.html b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/index.html new file mode 100644 index 00000000..f50150b4 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/public/index.html @@ -0,0 +1,22 @@ + + + + + + + + + 内网穿透UI + + + +
+ + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/App.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/App.vue new file mode 100644 index 00000000..75cdd22d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/App.vue @@ -0,0 +1,6 @@ + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/index.js new file mode 100644 index 00000000..02882c8f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/index.js @@ -0,0 +1,41 @@ +const path = require("path"); +const fs = require("fs"); +const getPathInfo = (p) => path.parse(p); + +/** + * @description // 递归读取文件,类似于webpack的require.context() + * + * @param {String} directory 文件目录 + * @param {Boolean} useSubdirectories 是否查询子目录,默认false + * @param {array} extList 查询文件后缀,默认 ['.js'] + * + */ +function autoLoadFile(directory, useSubdirectories = false, extList = [".js"]) { + const filesList = {}; + // 递归读取文件 + function readFileList(directory, useSubdirectories, extList) { + const files = fs.readdirSync(directory); + files.forEach((item) => { + const fullPath = path.join(directory, item); + const stat = fs.statSync(fullPath); + if (stat.isDirectory() && useSubdirectories) { + readFileList( + path.join(directory, item), + useSubdirectories, + extList, + ); + } else { + const info = getPathInfo(fullPath); + + if (extList.includes(info.ext)) { + filesList[info.name] = require(fullPath); + } + } + }); + } + readFileList(directory, useSubdirectories, extList); + + return filesList; +} + +module.exports = autoLoadFile(path.join(__dirname, "./modules")); diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/mock-server.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/mock-server.js new file mode 100644 index 00000000..1f49e421 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/mock-server.js @@ -0,0 +1,103 @@ +// const bodyParser = require("body-parser"); +const express = require("express"); +const chokidar = require("chokidar"); +const chalk = require("chalk"); +const path = require("path"); +const Mock = require("mockjs"); +const apiDir = path.join(process.cwd(), "src/api"); + +// 注册mock接口路径 +function registerRoutes(app) { + let mockLastIndex; + let mocksForServer = new Array(); + const api = require("./index.js"); + Object.keys(api).map((route) => { + Object.keys(api[route]).map((item) => { + api[route][item].mock && + mocksForServer.push( + responseFake( + api[route][item].url, + api[route][item].type, + api[route][item].response, + ), + ); + }); + }); + // 注册接口 + for (const mock of mocksForServer) { + app[mock.type](mock.url, mock.response); + mockLastIndex = app._router.stack.length; + // console.log(app._router.stack[12]) + } + // 获取接口的长度 + const mockRoutesLength = mocksForServer.length; + // 注意:mockRoutesLength并不等于定于路由路径的数量,还包括其他路由 + // console.log(mockRoutesLength,mockLastIndex) + return { + mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength, + }; +} +// 模拟mock server +const responseFake = (url, type, respond) => { + return { + url: url, + type: type || "get", + response: (req, res) => { + console.log(chalk.red("请求", req.path)); + res.json( + Mock.mock( + respond instanceof Function ? respond(req, res) : respond, + ), + ); + }, + }; +}; +// 移除路由 +function unregisterRoutes() { + Object.keys(require.cache).forEach((i) => { + console.log(apiDir, i); + if (i.includes(apiDir)) { + delete require.cache[require.resolve(i)]; + } + }); +} + +// 导出服务器app +module.exports = (app) => { + // 解析post数据 + app.use(express.json()); + app.use( + express.urlencoded({ + extended: true, + }), + ); + + // 注册路由表到app上 + const mockRoutes = registerRoutes(app); + let mockRoutesLength = mockRoutes.mockRoutesLength; + let mockStartIndex = mockRoutes.mockStartIndex; + //* 观察mock下的文件变化(不包括mock-server.js),热更新文件,这样添加数据路由就不用重启了 + chokidar + .watch(apiDir, { + ignored: /mock-server/, + ignoreInitial: true, + }) + .on("all", (event, path) => { + try { + // 先移除之前的路由 + app._router.stack.splice(mockStartIndex, mockRoutesLength); + // 清除缓冲 + unregisterRoutes(); + // 重新注册路由 + const mockRoutes = registerRoutes(app); + mockRoutesLength = mockRoutes.mockRoutesLength; + mockStartIndex = mockRoutes.mockStartIndex; + console.log( + chalk.magentaBright(`\n > 接口更新成功 --> 详情 ${path}`), + ); + } catch (err) { + console.log(chalk.redBright(err)); + } + }); +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/cloudNetwork.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/cloudNetwork.js new file mode 100644 index 00000000..b654cb3c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/cloudNetwork.js @@ -0,0 +1,63 @@ +module.exports = { + cloudClientFindPage: { + url: "/netty/client/state/findPage", + type: "get", + }, + cloudClusterNodeFindPage: { + url: "/lazy/netty/cluster/node/findPage", + type: "get", + }, + cloudClientFindList: { + url: "/netty/client/state/findList", + type: "get", + }, + cloudClientDelete: { + url: "/netty/client/state/remove", + type: "delete", + }, + sendMessage2HeartbeatClient: { + url: "/netty/client/state/sendMessage2HeartbeatClient", + type: "post", + }, + visitorPage: { + url: "/netty/server/visitor/findPage", + type: "get", + }, + visitorList: { + url: "/netty/server/visitor/findList", + type: "get", + }, + visitorDelete: { + url: "/netty/server/visitor/remove", + type: "delete", + }, + visitorSave: { + url: "/netty/server/visitor/story", + type: "post", + }, + visitorUpdate: { + url: "/netty/server/visitor/updateOne", + type: "put", + }, + + visitorClientFlowPage: { + url: "/visitor/port/flow/findClientFlowPage", + type: "get", + }, + networkMappingPage: { + url: "/internal/network/penetration/mapping/findPage", + type: "get", + }, + networkMappingDelete: { + url: "/internal/network/penetration/mapping/remove", + type: "delete", + }, + networkMappingSave: { + url: "/internal/network/penetration/mapping/story", + type: "post", + }, + networkMappingUpdate: { + url: "/internal/network/penetration/mapping/updateOne", + type: "put", + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/cloudNetworkReport.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/cloudNetworkReport.js new file mode 100644 index 00000000..aed8615d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/cloudNetworkReport.js @@ -0,0 +1,10 @@ +module.exports = { + findClient7DayFlow: { + url: "/visitor/port/per/day/flow/findClient7DayFlow", + type: "get", + }, + findClientPerDayFlow: { + url: "/visitor/port/per/day/flow/findClientPerDayFlow", + type: "get", + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/system.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/system.js new file mode 100644 index 00000000..fdbf6ce1 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/api/modules/system.js @@ -0,0 +1,1204 @@ +// const Mock = require("mockjs"); //引入 +const { moduleName } = require("@/config"); +/** + * @description: 列表查询 + * @param {*} + * @return {*} + */ +const searchList = (sRole, sLimit, sPage, sList, sName) => { + let list = sList; + if (sRole !== null && sRole !== "" && sRole !== undefined) { + list = sList.filter((item) => item[sName] + "" === sRole + ""); + } + const res = {}; + res.total = list.length; + res.page = sPage * 1; + res.limit = sLimit * 1; + res.list = list.slice((sPage - 1) * sLimit, (sPage - 1) * sLimit + sLimit); + return { + message: "查询成功!", + code: "00", + data: res, + }; +}; +/** + * @description: 列表添加 + * @param {*} + * @return {*} + */ +const addList = (opt, list, name, sName) => { + const flag = list.some((item) => { + if (item.type !== "undefined") { + if (item.type === 2) { + return false; + } + } + return item[sName] == name; + }); + let res = { + message: "添加成功!", + code: "00", + }; + if (flag) { + res = { + message: "名称已存在", + code: "01", + }; + } else { + let item = { + id: list[list.length - 1].id + 1, + ...opt.body, + }; + list.push(item); + } + return res; +}; +const menuList = [ + { + parentId: -1, + id: 100, + name: "系统设置", //看官网,这个名字是3-5之间的 + url: "", + menu: "", + type: 0, + icon: "Setting", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 100, + id: 1, + name: "用户管理", //看官网,这个名字是3-5之间的 + url: "system/Users", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "UserFilled", + sort: 2, + iframe: 0, + module: moduleName, + }, + { + parentId: 1, + id: 2, + name: "查询", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "search", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 1, + id: 3, + name: "添加", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "add", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 1, + id: 4, + name: "编辑", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "edit", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 100, + id: 5, + name: "菜单管理", //看官网,这个名字是3-5之间的 + url: "settings/Menus", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "Menu", + sort: 1, + iframe: 0, + module: moduleName, + }, + { + parentId: 5, + id: 6, + name: "查询", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "search", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 5, + id: 7, + name: "添加", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "add", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 5, + id: 8, + name: "编辑", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "edit", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 5, + id: 9, + name: "添加子级", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "addChild", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 5, + id: 10, + name: "添加按钮", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "addBtn", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 100, + id: 11, + name: "角色管理", //看官网,这个名字是3-5之间的 + url: "system/Roles", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "HelpFilled", + sort: 3, + iframe: 0, + module: moduleName, + }, + { + parentId: 11, + id: 12, + name: "查询", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "search", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 11, + id: 13, + name: "添加", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "add", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 11, + id: 14, + name: "编辑", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "edit", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: -1, + id: 15, + name: "参考资料", //看官网,这个名字是3-5之间的 + url: "", + menu: "", + type: 0, + icon: "DocumentCopy", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 15, + id: 16, + name: "vue3.0", //看官网,这个名字是3-5之间的 + url: "https://www.vue3js.cn/docs/zh/", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "Promotion", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentId: 15, + id: 17, + name: "element-plus", //看官网,这个名字是3-5之间的 + url: "https://element-plus.org/#/zh-CN", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "ElemeFilled", + sort: 1, + iframe: 1, + module: moduleName, + }, +]; +const userList = [ + { + id: -1, + name: "Administrator", + userName: "超级管理员", + password: "123456", + role: -1, + status: 1, + }, + { + id: 0, + name: "admin", + userName: "管理员", + password: "123456", + role: 0, + status: 1, + }, +]; +const roleList = [ + { + id: -1, + name: "super", + roleName: "超级管理员", + status: "1", + role: menuList, + }, + { + id: 0, + name: "ceshi", + roleName: "测试", + status: "0", + role: menuList, + }, +]; + +const user = { + name: "", + userId: "", + roleId: "", + menus: null, +}; + +module.exports = { + userList: { + url: "/sys/user/retrieve", + type: "get", + mock: true, + response: (opt) => { + const { + body: { role, limit, page }, + } = opt; + return searchList(role, limit, page, userList, "role"); + }, + }, + userExportList: { + url: "/sys/user/export/List", + type: "get", + }, + userPage: { + url: "/sys/user/findPage", + type: "get", + }, + userAdd: { + url: "/sys/user/story", + type: "post", + }, + userEdit: { + url: "/sys/user/updateOne", + type: "put", + }, + userDel: { + url: "/sys/user/{{id}}", + type: "deleteUrl", + }, + userStatus: { + url: "/sys/user/status", + type: "post", + mock: true, + response: (opt) => { + const { + body: { id, status }, + } = opt; + if (id === -1) { + return { + message: "系统超级管理员账户不能停用!", + code: "01", + }; + } + userList.find((item) => item.id === id).status = status; + return { + message: "切换成功!", + code: "00", + }; + }, + }, + + menuList: { + url: "/menu/findList", + type: "get", + }, + menuAdd: { + url: "/menu/story", + type: "post", + mock: true, + response: (opt) => { + const { + body: { name }, + } = opt; + return addList(opt, menuList, name, "name"); + }, + }, + menuEdit: { + url: "/menu/update", + type: "put", + }, + menuUpsert: { + url: "/menu/upsert", + type: "post", + }, + menuDel: { + url: "/menu/delete", + type: "delete", + }, + + roleList: { + url: "/role/retrieve", + type: "get", + }, + roleOne: { + url: "/role/findOne", + type: "get", + }, + rolePage: { + url: "/role/retrieve/page", + type: "get", + mock: true, + response: (opt) => { + const { + body: { name, limit, page }, + } = opt; + return searchList(name, limit, page, roleList, "name"); + }, + }, + roleAdd: { + url: "/role/story", + type: "post", + }, + roleEdit: { + url: "/role/updateOne", + type: "put", + }, + roleDel: { + url: "/role/{{id}}", + type: "deleteUrl", + }, + requestLogFindPage: { + url: "/request/log/findPage", + type: "get", + }, + + userMenuList: { + url: "/sys/user/findUserMenuList", + type: "get", + mock: true, + response: () => { + user.menus = roleList.find((item) => item.id === user.roleId).role; + return { + message: "查询成功!", + code: "00", + list: user.menus, + }; + }, + }, + login: { + url: "/token/access_token", + type: "post", + }, + resolvingUser: { + url: "/token/user/{{accessToken}}", + type: "getUrl", + }, + register: { + url: "/token/create_user", + type: "post", + }, + dictionaryPage: { + url: "/dictionary/retrieve/page", + type: "get", + }, + dictionaryDelete: { + url: "/dictionary/{{id}}", + type: "deleteUrl", + }, + dictionaryAdd: { + url: "/dictionary/save", + type: "post", + }, + dictionaryEdit: { + url: "/dictionary/update", + type: "put", + }, + dictionaryDataPage: { + url: "/dictionary/data/retrieve/page", + type: "get", + }, + dictionaryDataList: { + url: "/dictionary/data/retrieve", + type: "get", + }, + dictionaryDataDelete: { + url: "/dictionary/data/{{id}}", + type: "deleteUrl", + }, + dictionaryDataAdd: { + url: "/dictionary/data/save", + type: "post", + }, + dictionaryDataEdit: { + url: "/dictionary/data/update", + type: "put", + }, + + upsertAdd: { + url: "/upsert/task/save", + type: "post", + }, + upsertPage: { + url: "/upsert/task/retrieve/page", + type: "get", + }, + upsertEdit: { + url: "/upsert/task/update", + type: "put", + }, + upsertDelete: { + url: "/upsert/task/{{id}}", + type: "deleteUrl", + }, + databaseInstanceAdd: { + url: "/database/instance/save", + type: "post", + }, + databaseInstanceTest: { + url: "/database/instance/testConnection", + type: "post", + }, + databaseInstancePage: { + url: "/database/instance/retrieve/page", + type: "get", + }, + databaseInstanceList: { + url: "/database/instance/retrieve", + type: "get", + }, + databaseInstanceEdit: { + url: "/database/instance/update", + type: "put", + }, + databaseInstanceDelete: { + url: "/database/instance/{{id}}", + type: "deleteUrl", + }, + databaseInstanceReload: { + url: "/database/instance/reload/{{id}}", + type: "patchUrl", + }, + + acwTableAssociationRelationPage: { + url: "/lazy/acw/table/association/relation/findPage", + type: "get", + }, + acwTableAssociationRelationList: { + url: "/lazy/acw/table/association/relation/findList", + type: "get", + }, + acwTableAssociationRelationStory: { + url: "/lazy/acw/table/association/relation/story", + type: "post", + }, + acwTableAssociationRelationDelete: { + url: "/lazy/acw/table/association/relation/remove", + type: "deleteUrl", + }, + acwTableAssociationRelationReload: { + url: "/lazy/acw/table/association/relation/reload/{{id}}", + type: "patchUrl", + }, + acwTableAssociationRelationAnalysisSchema: { + url: "/lazy/acw/table/association/relation/analysisSchema", + type: "put", + }, + // 数据库备份API 开始 + databaseInstanceBackUpPage: { + url: "/lazy/database/instance/back/ups/findPage", + type: "get", + }, + databaseInstanceBackUpDelete: { + url: "/lazy/database/instance/back/ups/remove", + type: "delete", + }, + databaseInstanceBackUp: { + url: "/lazy/database/instance/back/ups/backUps", + type: "patch", + }, + databaseSchemaBackUpPage: { + url: "/lazy/database/schema/back/ups/findPage", + type: "get", + }, + databaseSchemaBackUp: { + url: "/lazy/database/schema/back/ups/backUps", + type: "patch", + }, + databaseSchemaBackUpRemove: { + url: "/lazy/database/schema/back/ups/remove", + type: "delete", + }, + // 数据库备份API 结束 + // redis api实例 开始 + redisInstancePage: { + url: "/lazy/acw/redis/instance/findPage", + type: "get", + }, + redisInstanceDelete: { + url: "/lazy/acw/redis/instance/remove", + type: "delete", + }, + redisInstanceStory: { + url: "/lazy/acw/redis/instance/story", + type: "post", + }, + redisInstanceTest: { + url: "/lazy/acw/redis/instance/test", + type: "post", + }, + redisInstanceConsoleFindDataBases: { + url: "/lazy/acw/redis/console/findDataBases", + type: "get", + }, + redisInstanceConsoleFindKeys: { + url: "/lazy/acw/redis/console/findKeys", + type: "get", + }, + + redisInstanceConsoleFindKeysValues: { + url: "/lazy/acw/redis/console/findKeysValues", + type: "get", + }, + redisInstanceConsoleFindKeyValue: { + url: "/lazy/acw/redis/console/findKeyValue", + type: "get", + }, + redisInstanceConsoleSetKey: { + url: "/lazy/acw/redis/console/setKey", + type: "post", + }, + redisInstanceConsoleRemoveKey: { + url: "/lazy/acw/redis/console/removeKey", + type: "put", + }, + // redis api实例 结束 + schemaAdd: { + url: "/schema/save", + type: "post", + }, + schemaPage: { + url: "/schema/retrieve/page", + type: "get", + }, + schemaList: { + url: "/schema/findList", + type: "get", + }, + schemaEdit: { + url: "/schema/update", + type: "put", + }, + schemaDelete: { + url: "/schema/{{id}}", + type: "deleteUrl", + }, + batchDeleteInstanceSchema: { + url: "/schema/delete/batchDeleteInstanceSchema", + type: "deleteBody", + }, + batchExportSchemaData: { + url: "/schema/batchExportSchemaData", + type: "post", + }, + schemaReload: { + url: "/schema/reload/{{instanceId}}/{{schema}}", + type: "patchUrl", + }, + aceSchemaImportData: { + url: "/schema/batchImportSchemaData", + type: "post", + }, + schemaDeriveView: { + url: "/schema/schemaDeriveView", + type: "post", + }, + tableAutoStuffedRecordAdd: { + url: "/database/table/auto/stuffed/record/save", + type: "post", + }, + tableAutoStuffedRecordBatchAdd: { + url: "/database/table/auto/stuffed/record/batchSave", + type: "post", + }, + tableAutoStuffedRecordPage: { + url: "/database/table/auto/stuffed/record/findPage", + type: "get", + }, + tableAutoStuffedRecordList: { + url: "/database/table/auto/stuffed/record/findList", + type: "get", + }, + tableAutoStuffedRecordEdit: { + url: "/database/table/auto/stuffed/record/update", + type: "put", + }, + tableAutoStuffedRecordDelete: { + url: "/database/table/auto/stuffed/record/{{id}}", + type: "deleteUrl", + }, + tableAutoStuffedRecordBatchDelete: { + url: "/database/table/auto/stuffed/record/batch", + type: "deleteBody", + }, + tableAdd: { + url: "/table/storage", + type: "post", + }, + tablePage: { + url: "/table/retrieve/page", + type: "get", + }, + tableList: { + url: "/table/retrieve", + type: "get", + }, + tableDelete: { + url: "/table/delete/{{instanceId}}/{{schemaName}}/{{tableName}}", + type: "deleteUrl", + }, + batchDeleteTableDelete: { + url: "/table/batchDelete", + type: "deleteBody", + }, + slqAuditPage: { + url: "/sql/audit/findPage", + type: "get", + }, + slqAuditExport: { + url: "/sql/audit/export/findList", + type: "get", + }, + batchDeleteSlqAudit: { + url: "/sql/audit/batch", + type: "deleteBody", + }, + generateJavaModel: { + url: "/table/generate/java/model/{{instanceId}}/{{schemaName}}/{{tableName}}", + type: "getUrl", + }, + generateLocalJava: { + url: "/table/generate/local/java", + type: "post", + }, + clientGenerateLocalJava: { + url: "/acw/client/java/path/generate/local/java", + type: "post", + }, + tableExportInsertSql: { + url: "/table/export/insert/sql", + type: "get", + }, + tableExportUpsertSql: { + url: "/table/export/upsert/sql", + type: "get", + }, + exportTableStructureExcel: { + url: "/table/export/table/structure/excel", + type: "get", + }, + exportTableStructureMd: { + url: "/table/export/table/structure/md", + type: "get", + }, + exportTableStructureSql: { + url: "/table/export/table/structure/sql", + type: "get", + }, + findTableColumnList: { + url: "/table/table/structure/findTableColumnList", + type: "get", + }, + applicationAdd: { + url: "/application/save", + type: "post", + }, + applicationPage: { + url: "/application/retrieve/page", + type: "get", + }, + applicationList: { + url: "/application/retrieve", + type: "get", + }, + applicationEdit: { + url: "/application/update", + type: "put", + }, + applicationDelete: { + url: "/application/{{id}}", + type: "deleteUrl", + }, + applicationFindTables: { + url: "/application/findTables/{{applicationId}}", + type: "getUrl", + }, + projectAdd: { + url: "/project/save", + type: "post", + }, + projectPage: { + url: "/project/retrieve/page", + type: "get", + }, + projectList: { + url: "/project/retrieve", + type: "get", + }, + projectEdit: { + url: "/project/update", + type: "put", + }, + projectDelete: { + url: "/project/{{id}}", + type: "deleteUrl", + }, + interfaceAdd: { + url: "/interface/save", + type: "post", + }, + interfacePage: { + url: "/interface/retrieve/page", + type: "get", + }, + interfaceList: { + url: "/interface/retrieve", + type: "get", + }, + interfaceEdit: { + url: "/interface/update", + type: "put", + }, + interfaceDelete: { + url: "/interface/{{id}}", + type: "deleteUrl", + }, + apiAdd: { + url: "/api/save", + type: "post", + }, + apiPage: { + url: "/api/retrieve/page", + type: "get", + }, + apiList: { + url: "/api/retrieve", + type: "get", + }, + apiEdit: { + url: "/api/update", + type: "put", + }, + apiDelete: { + url: "/api/{{id}}", + type: "deleteUrl", + }, + clientApiAdd: { + url: "/lazy/interface_/info/story", + type: "post", + }, + clientApiSQLAdd: { + url: "/lazy/interface_/info/story-sql", + type: "post", + }, + clientApiPage: { + url: "/lazy/interface_/info/findPage", + type: "get", + }, + clientApiList: { + url: "/lazy/interface_/info/findList", + type: "get", + }, + clientApiFindOne: { + url: "/lazy/interface_/info/findOne", + type: "get", + }, + clientApiEdit: { + url: "/lazy/interface_/info/updateOne", + type: "put", + }, + clientApiDelete: { + url: "/lazy/interface_/info/remove", + type: "deleteUrl", + }, + clientApiDerivativeCode: { + url: "/lazy/interface_/info/derivativeCode", + type: "put", + }, + + clientInstancePage: { + url: "/acw/client/instance/findPage", + type: "get", + }, + clientInstanceList: { + url: "/acw/client/instance/findList", + type: "get", + }, + cloudClientFindList: { + url: "/netty/client/state/findList", + type: "get", + }, + cloudClientFindPage: { + url: "/netty/client/state/findPage", + type: "get", + }, + clientInstanceFindOne: { + url: "/acw/client/instance/findOne", + type: "get", + }, + + clientJavaPathPage: { + url: "/acw/client/java/path/findPage", + type: "get", + }, + clientJavaPathList: { + url: "/acw/client/java/path/findList", + type: "get", + }, + clientJavaPathFindOne: { + url: "/acw/client/java/path/findOne", + type: "get", + }, + + clientFindDefaultSchema: { + url: "/current/project/dataSource/findDefaultSchema", + type: "get", + }, + + clientFindSchemaList: { + url: "/current/project/dataSource/findSchemaList", + type: "get", + }, + clientFindTableList: { + url: "/current/project/dataSource/findTableList", + type: "get", + }, + clientFindColumnList: { + url: "/current/project/dataSource/findColumnList", + type: "get", + }, + databaseTableColumnAdd: { + url: "/database/table/column/save", + type: "post", + }, + databaseTableColumnPage: { + url: "/database/table/column/retrieve/page", + type: "get", + }, + databaseTablesColumnList: { + url: "/database/table/column/tableIds/{{instanceId}}/{{schemaName}}/{{tableNameList}}", + type: "getUrl", + }, + databaseTableColumnList: { + url: "/database/table/column/{{instanceId}}/{{schemaName}}/{{tableName}}", + type: "getUrl", + }, + findDatabaseTableColumnList: { + url: "/database/table/column/findColumn/{{instanceId}}/{{schemaName}}/{{tableName}}", + type: "getUrl", + }, + findInstanceSchemaColumnList: { + url: "/database/table/column/findInstanceSchemaColumnList/{{instanceId}}/{{schemaName}}", + type: "getUrl", + }, + databaseTableColumnEdit: { + url: "/database/table/column/update", + type: "put", + }, + databaseTableColumnDelete: { + url: "/database/table/column/{{id}}", + type: "deleteUrl", + }, + playMusicInsertOrUpdate: { + url: "/play/music/story", + type: "post", + }, + playMusicPage: { + url: "/play/music/findPage", + type: "get", + }, + playMusicList: { + url: "/play/music/findList", + type: "get", + }, + playMusicEdit: { + url: "/play/music/update", + type: "put", + }, + playMusicDelete: { + url: "/play/music/remove", + type: "delete", + }, + playMusicFindData: { + url: "/play/music/findOne", + type: "get", + }, + playFileAdd: { + url: "/play/file/add", + type: "post", + }, + playFilePage: { + url: "/play/file/findPage", + type: "get", + }, + playFileList: { + url: "/play/file/findList", + type: "get", + }, + playFileData: { + url: "/play/file/retrieve/data/{{id}}", + type: "getUrl", + }, + playFileEdit: { + url: "/play/file/update", + type: "put", + }, + playFileDelete: { + url: "/play/file/remove", + type: "delete", + }, + playFileResourceList: { + url: "/play/file/getFileResourceList", + type: "get", + }, + downLocalFile: { + url: "/play/file/retrieve/local/file", + type: "get", + }, + docPdfMerge: { + url: "/doc/pdf/merge/merge", + type: "post", + }, + docJson2Excel: { + url: "/doc/excel/json2Excel", + type: "post", + }, + sqlConsole: { + url: "/console/execute/sql/statement", + type: "get", + }, + sqlConsoleExport: { + url: "/console/execute/sql/statement/export", + type: "get", + }, + sqlConsoleUpsertExport: { + url: "/console/execute/upsert/sql/statement/export", + type: "get", + }, + tableSqlConsole: { + url: "/table/console/execute/table/sql/statement", + type: "post", + }, + tableColumnSqlConsole: { + url: "/table/console/execute/table/sql/statement/column", + type: "post", + }, + tableRowStory: { + url: "/table/console/execute/upsert/table/sql", + type: "post", + }, + tableRowDelete: { + url: "/table/console/execute/delete/table/sql", + type: "post", + }, + tableRowBatchDelete: { + url: "/table/console/execute/batch/delete/table/sql", + type: "post", + }, + tableSqlConsoleExport: { + url: "/table/console/execute/table/sql/statement/export", + type: "post", + }, + tableSqlConsoleUpsertExport: { + url: "/table/console/execute/upsert/table/sql/statement/export", + type: "post", + }, + tableSqlConsoleMdExport: { + url: "/table/console/execute/md/table/sql/statement/export", + type: "post", + }, + translate: { + url: "/translate", + type: "get", + }, + shortcutsData: { + url: "/shortcuts/data", + type: "get", + }, + jvmRunTimeMemory: { + url: "/jvm/runTimeMemory", + type: "get", + }, + jvmGC: { + url: "/jvm/gc", + type: "get", + }, + jvmCPU: { + url: "/jvm/cpu", + type: "get", + }, + // 自动化开始 + automationStory: { + url: "/lazy/automation/story", + type: "post", + }, + automationFindPage: { + url: "/lazy/automation/findPage", + type: "get", + }, + automationFindOne: { + url: "/lazy/automation/findOne", + type: "get", + }, + automationRemove: { + url: "/lazy/automation/remove", + type: "delete", + }, + + automationNodeStory: { + url: "/lazy/automation/node/story", + type: "post", + }, + automationNodeRemove: { + url: "/lazy/automation/node/remove", + type: "delete", + }, + + automationNodeHttpActionStory: { + url: "/lazy/automation/node/http/action/story", + type: "post", + }, + automationNodeHttpActionRemove: { + url: "/lazy/automation/node/http/action/remove", + type: "delete", + }, + + ttsTimbreStory: { + url: "/tts/timbre/story", + type: "post", + }, + ttsTimbreFindPage: { + url: "/tts/timbre/findPage", + type: "get", + }, + ttsTimbreFindList: { + url: "/tts/timbre/findList", + type: "get", + }, + ttsTimbreUpdateOne: { + url: "/tts/timbre/updateOne", + type: "put", + }, + ttsTimbreRemove: { + url: "/tts/timbre/remove", + type: "delete", + }, + + ttsChineseCharactersStory: { + url: "/tts/chinese/characters/story", + type: "post", + }, + ttsChineseCharactersFindPage: { + url: "/tts/chinese/characters/findPage", + type: "get", + }, + ttsChineseCharactersFindList: { + url: "/tts/chinese/characters/findList", + type: "get", + }, + ttsChineseCharactersUpdateOne: { + url: "/tts/chinese/characters/updateOne", + type: "put", + }, + ttsChineseCharactersRemove: { + url: "/tts/chinese/characters/remove", + type: "delete", + }, + + ttsChineseCharactersTimbreStory: { + url: "/tts/chinese/characters/timbre/story", + type: "post", + }, + ttsChineseCharactersTimbreFindPage: { + url: "/tts/chinese/characters/timbre/findPage", + type: "get", + }, + ttsChineseCharactersTimbreFindList: { + url: "/tts/chinese/characters/timbre/findList", + type: "get", + }, + ttsChineseCharactersTimbreUpdateOne: { + url: "/tts/chinese/characters/timbre/updateOne", + type: "put", + }, + ttsChineseCharactersTimbreRemove: { + url: "/tts/chinese/characters/timbre/remove", + type: "delete", + }, + ttsChineseCharactersTimbreTextToBytes: { + url: "/tts/chinese/characters/timbre/textToBytes", + type: "get", + }, + automationNodeHttpActionExecuteOne: { + url: "/lazy/automation/node/http/action/executeOne/{{actionId}}", + type: "patchUrl", + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/json/china.json b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/json/china.json new file mode 100644 index 00000000..4f1250ce --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/json/china.json @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":110000,"name":"北京市","center":[116.405285,39.904989],"centroid":[116.41995,40.18994],"childrenNum":16,"level":"province","parent":{"adcode":100000},"subFeatureIndex":0,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[117.348611,40.581141],[117.389879,40.561593],[117.429915,40.576141],[117.412669,40.605226],[117.467487,40.649738],[117.467487,40.649738],[117.501364,40.636569],[117.514914,40.660181],[117.493973,40.675161],[117.408973,40.686961],[117.342451,40.673799],[117.319662,40.657911],[117.278394,40.664267],[117.208177,40.694675],[117.117018,40.70012],[117.11209,40.707379],[117.012308,40.693767],[116.964881,40.709647],[116.926692,40.745022],[116.924229,40.773581],[116.848468,40.839264],[116.81336,40.848319],[116.759773,40.889954],[116.713577,40.909858],[116.722201,40.927495],[116.677853,40.970888],[116.698795,41.021477],[116.688324,41.044501],[116.647672,41.059394],[116.615643,41.053076],[116.623034,41.021026],[116.598397,40.974503],[116.5676,40.992574],[116.519557,40.98128],[116.519557,40.98128],[116.455499,40.980828],[116.447492,40.953715],[116.477057,40.899907],[116.398216,40.90624],[116.370499,40.94377],[116.339702,40.929303],[116.334159,40.90443],[116.438253,40.81934],[116.46597,40.774487],[116.453651,40.765876],[116.316912,40.772221],[116.311369,40.754996],[116.273181,40.762703],[116.247311,40.791707],[116.22021,40.744115],[116.204812,40.740035],[116.171551,40.695582],[116.162928,40.662451],[116.133979,40.666536],[116.09887,40.630665],[116.005247,40.583868],[115.982457,40.578868],[115.971986,40.6025],[115.907929,40.617493],[115.885139,40.595229],[115.827857,40.587504],[115.819849,40.55932],[115.784741,40.55841],[115.755176,40.540221],[115.736082,40.503372],[115.781045,40.49336],[115.771806,40.443734],[115.864197,40.359422],[115.917784,40.354405],[115.95166,40.281852],[115.968907,40.264045],[115.89869,40.234354],[115.870356,40.185909],[115.855574,40.188652],[115.847567,40.147036],[115.806299,40.15344],[115.773654,40.176307],[115.75456,40.145663],[115.75456,40.145663],[115.599959,40.119583],[115.59072,40.096239],[115.527278,40.076092],[115.485394,40.040364],[115.454597,40.029825],[115.450286,39.992697],[115.428728,39.984443],[115.426264,39.950502],[115.481083,39.935819],[115.522967,39.899099],[115.515575,39.892212],[115.515575,39.892212],[115.526046,39.87568],[115.514344,39.837549],[115.567314,39.816407],[115.552532,39.794799],[115.50572,39.784222],[115.483547,39.798477],[115.483547,39.798477],[115.443511,39.785601],[115.439815,39.752022],[115.486626,39.741899],[115.491554,39.670074],[115.478619,39.650723],[115.478619,39.650723],[115.522351,39.640124],[115.518039,39.597252],[115.545756,39.618922],[115.587024,39.589873],[115.633836,39.599557],[115.633836,39.599557],[115.667712,39.615234],[115.698509,39.577881],[115.698509,39.577881],[115.699125,39.570039],[115.699125,39.570039],[115.716988,39.56035],[115.716988,39.56035],[115.718835,39.553891],[115.718835,39.553891],[115.720683,39.551122],[115.720683,39.551122],[115.722531,39.5442],[115.721299,39.543738],[115.722531,39.5442],[115.722531,39.543738],[115.721299,39.543738],[115.722531,39.543738],[115.724995,39.5442],[115.724995,39.5442],[115.738545,39.540046],[115.738545,39.539585],[115.738545,39.540046],[115.738545,39.539585],[115.752712,39.515581],[115.806299,39.510041],[115.806299,39.510041],[115.821081,39.522968],[115.821081,39.522968],[115.828473,39.541431],[115.867893,39.546507],[115.867893,39.546507],[115.91532,39.582955],[115.91532,39.582955],[115.910393,39.600479],[115.910393,39.600479],[115.957204,39.560812],[115.978146,39.595868],[115.995392,39.576958],[116.026189,39.587567],[116.036044,39.571884],[116.09887,39.575113],[116.130283,39.567732],[116.151841,39.583416],[116.198652,39.589412],[116.240536,39.564041],[116.257782,39.500344],[116.307057,39.488337],[116.337854,39.455536],[116.361876,39.455074],[116.361876,39.455074],[116.434557,39.442597],[116.454883,39.453226],[116.444412,39.482332],[116.411767,39.482794],[116.401912,39.528046],[116.443796,39.510041],[116.437637,39.526661],[116.478289,39.535431],[116.473361,39.552968],[116.50847,39.551122],[116.524484,39.596329],[116.592237,39.621227],[116.592237,39.621227],[116.620571,39.601863],[116.664918,39.605552],[116.723432,39.59264],[116.724048,39.59264],[116.723432,39.59264],[116.724048,39.59264],[116.726512,39.595407],[116.726512,39.595407],[116.709266,39.618],[116.748686,39.619844],[116.79057,39.595868],[116.812128,39.615695],[116.8497,39.66777],[116.906366,39.677444],[116.90575,39.688037],[116.889736,39.687576],[116.887272,39.72533],[116.916837,39.731314],[116.902055,39.763523],[116.949482,39.778703],[116.918069,39.84628],[116.907598,39.832494],[116.865714,39.843982],[116.812128,39.889916],[116.78441,39.891294],[116.782563,39.947749],[116.757925,39.967934],[116.781331,40.034866],[116.820135,40.02845],[116.831222,40.051359],[116.867562,40.041739],[116.927924,40.055024],[116.945171,40.04128],[117.025243,40.030283],[117.051728,40.059605],[117.105315,40.074261],[117.105315,40.074261],[117.140423,40.064185],[117.159517,40.077008],[117.204481,40.069681],[117.210024,40.082045],[117.224191,40.094865],[117.224191,40.094865],[117.254988,40.114548],[117.254988,40.114548],[117.254988,40.114548],[117.274082,40.105852],[117.307343,40.136971],[117.349227,40.136513],[117.367089,40.172649],[117.367089,40.173106],[117.367089,40.173106],[117.367089,40.172649],[117.383719,40.188195],[117.389879,40.227958],[117.351075,40.229786],[117.331365,40.289613],[117.295024,40.2782],[117.271618,40.325211],[117.271618,40.325211],[117.243285,40.369453],[117.226039,40.368997],[117.234046,40.417312],[117.263611,40.442367],[117.208793,40.501552],[117.262995,40.512927],[117.247597,40.539766],[117.269771,40.560684],[117.348611,40.581141],[117.348611,40.581141]]]]}},{"type":"Feature","properties":{"adcode":120000,"name":"天津市","center":[117.190182,39.125596],"centroid":[117.347043,39.288036],"childrenNum":16,"level":"province","parent":{"adcode":100000},"subFeatureIndex":1,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[117.765602,39.400527],[117.846906,39.407926],[117.871543,39.411625],[117.870311,39.455074],[117.899877,39.474479],[117.912195,39.517428],[117.912195,39.517428],[117.904804,39.533585],[117.933753,39.574191],[117.868464,39.59679],[117.829659,39.589873],[117.766834,39.598635],[117.753899,39.579726],[117.753899,39.579726],[117.745276,39.547892],[117.715711,39.529892],[117.707088,39.576036],[117.684914,39.58895],[117.654117,39.575113],[117.637486,39.603246],[117.66274,39.636437],[117.668899,39.666849],[117.627015,39.703693],[117.57774,39.726711],[117.595603,39.74604],[117.56111,39.754782],[117.546327,39.775943],[117.561726,39.799856],[117.529081,39.859144],[117.529081,39.859144],[117.508139,39.901854],[117.508139,39.901854],[117.512451,39.90874],[117.512451,39.90874],[117.513067,39.910576],[117.513067,39.910576],[117.514914,39.946832],[117.534625,39.954631],[117.546327,39.999116],[117.594987,39.994531],[117.594987,39.994531],[117.614697,39.97252],[117.671363,39.973896],[117.691073,39.984902],[117.756363,39.965181],[117.781616,39.966558],[117.781616,39.966558],[117.795167,39.996823],[117.795167,39.996823],[117.793319,40.005534],[117.793319,40.005534],[117.768681,40.022034],[117.768681,40.022034],[117.744044,40.018368],[117.74774,40.047236],[117.776073,40.059605],[117.752667,40.081588],[117.71879,40.082045],[117.71879,40.082045],[117.675059,40.082045],[117.655965,40.109514],[117.655965,40.109514],[117.654117,40.114548],[117.654117,40.114548],[117.651653,40.122786],[117.651653,40.122786],[117.613465,40.158014],[117.613465,40.158014],[117.609769,40.160301],[117.609769,40.160301],[117.576508,40.178593],[117.571581,40.219276],[117.548791,40.232527],[117.505059,40.227044],[117.450241,40.252627],[117.415748,40.248973],[117.389879,40.227958],[117.383719,40.188195],[117.367089,40.172649],[117.367089,40.173106],[117.367089,40.173106],[117.367089,40.172649],[117.349227,40.136513],[117.307343,40.136971],[117.274082,40.105852],[117.254988,40.114548],[117.254988,40.114548],[117.254988,40.114548],[117.224191,40.094865],[117.224191,40.094865],[117.210024,40.082045],[117.192162,40.066475],[117.198322,39.992697],[117.150894,39.944996],[117.162597,39.876598],[117.162597,39.876598],[117.227887,39.852712],[117.247597,39.860981],[117.251908,39.834332],[117.192162,39.832953],[117.156438,39.817326],[117.15767,39.796638],[117.205713,39.763984],[117.161981,39.748801],[117.165061,39.718886],[117.165061,39.718886],[117.177996,39.645194],[117.152742,39.623532],[117.10901,39.625375],[117.10901,39.625375],[117.016004,39.653949],[116.983359,39.638742],[116.983359,39.638742],[116.964265,39.64335],[116.948866,39.680668],[116.948866,39.680668],[116.944555,39.695405],[116.944555,39.695405],[116.932236,39.706456],[116.932236,39.706456],[116.90575,39.688037],[116.906366,39.677444],[116.8497,39.66777],[116.812128,39.615695],[116.808432,39.576497],[116.78749,39.554352],[116.819519,39.528507],[116.820751,39.482332],[116.785026,39.465702],[116.832454,39.435664],[116.876185,39.43474],[116.839845,39.413474],[116.840461,39.378326],[116.818287,39.3737],[116.829374,39.338994],[116.870642,39.357506],[116.889736,39.338068],[116.87249,39.291304],[116.881729,39.225966],[116.881729,39.225966],[116.855859,39.215766],[116.870026,39.153607],[116.909446,39.150822],[116.912526,39.110898],[116.91191,39.111362],[116.91191,39.111362],[116.912526,39.110898],[116.871874,39.054688],[116.812744,39.05097],[116.812744,39.05097],[116.783179,39.05097],[116.783179,39.05097],[116.754229,39.034701],[116.754229,39.034701],[116.754845,39.003084],[116.72836,38.975174],[116.708034,38.931892],[116.722201,38.896968],[116.723432,38.852706],[116.75115,38.831264],[116.737599,38.784629],[116.746222,38.754299],[116.794265,38.744498],[116.794265,38.744498],[116.858939,38.741231],[116.877417,38.680522],[116.948866,38.689398],[116.950714,38.689398],[116.95133,38.689398],[116.950714,38.689398],[116.948866,38.689398],[116.95133,38.689398],[117.038793,38.688464],[117.068358,38.680522],[117.055424,38.639398],[117.070822,38.608072],[117.109626,38.584685],[117.150894,38.617892],[117.183539,38.61836],[117.183539,38.61836],[117.213104,38.639866],[117.213104,38.639866],[117.258684,38.608072],[117.258684,38.608072],[117.238358,38.580943],[117.25314,38.556143],[117.368937,38.564566],[117.432379,38.601524],[117.47919,38.616489],[117.55803,38.613683],[117.639334,38.626776],[117.65658,38.66043],[117.729261,38.680055],[117.740964,38.700141],[117.740964,38.753833],[117.671363,38.772032],[117.646725,38.788827],[117.64611,38.828933],[117.752051,38.847579],[117.778536,38.869016],[117.847522,38.855502],[117.875855,38.920252],[117.898029,38.948649],[117.855529,38.957492],[117.837667,39.057011],[117.871543,39.122506],[117.96455,39.172631],[117.977485,39.206028],[118.032919,39.219939],[118.034767,39.218548],[118.064948,39.231065],[118.064948,39.256094],[118.036615,39.264898],[118.024296,39.289451],[118.024296,39.289451],[117.982412,39.298714],[117.982412,39.298714],[117.979333,39.300566],[117.979333,39.300566],[117.973173,39.312143],[117.973173,39.312143],[117.965782,39.314921],[117.965782,39.314921],[117.919587,39.318162],[117.919587,39.318162],[117.88879,39.332051],[117.854913,39.328348],[117.854297,39.328348],[117.854913,39.328348],[117.854297,39.328348],[117.850601,39.363984],[117.850601,39.363984],[117.810565,39.354729],[117.805022,39.373237],[117.784696,39.376938],[117.74466,39.354729],[117.670747,39.357969],[117.669515,39.322792],[117.594987,39.349176],[117.536472,39.338068],[117.521074,39.357043],[117.570965,39.404689],[117.601146,39.419485],[117.614081,39.407001],[117.668899,39.412087],[117.673211,39.386652],[117.699696,39.407463],[117.765602,39.400527]]],[[[117.805022,39.373237],[117.852449,39.380639],[117.846906,39.407926],[117.765602,39.400527],[117.784696,39.376938],[117.805022,39.373237]]]]}},{"type":"Feature","properties":{"adcode":130000,"name":"河北省","center":[114.502461,38.045474],"childrenNum":11,"level":"province","parent":{"adcode":100000},"subFeatureIndex":2,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[117.467487,40.649738],[117.412669,40.605226],[117.429915,40.576141],[117.389879,40.561593],[117.348611,40.581141],[117.348611,40.581141],[117.269771,40.560684],[117.247597,40.539766],[117.262995,40.512927],[117.208793,40.501552],[117.263611,40.442367],[117.234046,40.417312],[117.226039,40.368997],[117.243285,40.369453],[117.271618,40.325211],[117.271618,40.325211],[117.295024,40.2782],[117.331365,40.289613],[117.351075,40.229786],[117.389879,40.227958],[117.415748,40.248973],[117.450241,40.252627],[117.505059,40.227044],[117.548791,40.232527],[117.571581,40.219276],[117.576508,40.178593],[117.609769,40.160301],[117.609769,40.160301],[117.613465,40.158014],[117.613465,40.158014],[117.651653,40.122786],[117.651653,40.122786],[117.654117,40.114548],[117.654117,40.114548],[117.655965,40.109514],[117.655965,40.109514],[117.675059,40.082045],[117.71879,40.082045],[117.71879,40.082045],[117.752667,40.081588],[117.776073,40.059605],[117.74774,40.047236],[117.744044,40.018368],[117.768681,40.022034],[117.768681,40.022034],[117.793319,40.005534],[117.793319,40.005534],[117.795167,39.996823],[117.795167,39.996823],[117.781616,39.966558],[117.781616,39.966558],[117.756363,39.965181],[117.691073,39.984902],[117.671363,39.973896],[117.614697,39.97252],[117.594987,39.994531],[117.594987,39.994531],[117.546327,39.999116],[117.534625,39.954631],[117.514914,39.946832],[117.513067,39.910576],[117.513067,39.910576],[117.512451,39.90874],[117.512451,39.90874],[117.508139,39.901854],[117.508139,39.901854],[117.529081,39.859144],[117.529081,39.859144],[117.561726,39.799856],[117.546327,39.775943],[117.56111,39.754782],[117.595603,39.74604],[117.57774,39.726711],[117.627015,39.703693],[117.668899,39.666849],[117.66274,39.636437],[117.637486,39.603246],[117.654117,39.575113],[117.684914,39.58895],[117.707088,39.576036],[117.715711,39.529892],[117.745276,39.547892],[117.753899,39.579726],[117.753899,39.579726],[117.766834,39.598635],[117.829659,39.589873],[117.868464,39.59679],[117.933753,39.574191],[117.904804,39.533585],[117.912195,39.517428],[117.912195,39.517428],[117.899877,39.474479],[117.870311,39.455074],[117.871543,39.411625],[117.846906,39.407926],[117.852449,39.380639],[117.805022,39.373237],[117.810565,39.354729],[117.850601,39.363984],[117.850601,39.363984],[117.854297,39.328348],[117.854913,39.328348],[117.854297,39.328348],[117.854913,39.328348],[117.88879,39.332051],[117.919587,39.318162],[117.919587,39.318162],[117.965782,39.314921],[117.965782,39.314921],[117.973173,39.312143],[117.973173,39.312143],[117.979333,39.300566],[117.979333,39.300566],[117.982412,39.298714],[117.982412,39.298714],[118.024296,39.289451],[118.024296,39.289451],[118.036615,39.264898],[118.064948,39.256094],[118.064948,39.231065],[118.034767,39.218548],[118.026144,39.201854],[118.070492,39.213911],[118.077883,39.201854],[118.12531,39.182838],[118.162883,39.136433],[118.1906,39.080708],[118.225092,39.034701],[118.319331,39.009594],[118.366143,39.016104],[118.377845,38.971917],[118.491178,38.909077],[118.539837,38.910008],[118.604511,38.971452],[118.570634,38.999363],[118.533062,39.090928],[118.588497,39.107648],[118.578642,39.130863],[118.637156,39.157319],[118.76096,39.133648],[118.814546,39.138754],[118.857662,39.162888],[118.897082,39.151286],[118.920488,39.171703],[118.951285,39.178662],[118.896466,39.139683],[118.890307,39.118792],[118.926031,39.123435],[118.97777,39.163352],[119.023966,39.187012],[119.038132,39.211593],[119.096031,39.24219],[119.121284,39.281576],[119.185342,39.342234],[119.272805,39.363521],[119.317153,39.4107],[119.316537,39.437051],[119.269726,39.498497],[119.366428,39.734996],[119.474217,39.813189],[119.536427,39.809052],[119.520413,39.840306],[119.540739,39.888079],[119.588166,39.910576],[119.620195,39.904609],[119.642369,39.925264],[119.681789,39.922511],[119.726137,39.940867],[119.787115,39.950502],[119.820375,39.979399],[119.842549,39.956007],[119.872114,39.960594],[119.854252,39.98857],[119.845629,40.000949],[119.845629,40.000949],[119.854252,40.033033],[119.81668,40.050443],[119.81668,40.050443],[119.787115,40.041739],[119.787115,40.041739],[119.783419,40.046778],[119.783419,40.046778],[119.772332,40.08113],[119.736608,40.104936],[119.760629,40.136056],[119.745847,40.207851],[119.716898,40.195966],[119.671934,40.23938],[119.639289,40.231613],[119.639289,40.231613],[119.651608,40.271808],[119.598021,40.334335],[119.586934,40.375381],[119.604797,40.455119],[119.553674,40.502007],[119.572152,40.523846],[119.559217,40.547952],[119.503783,40.553864],[119.477913,40.533399],[119.429254,40.540221],[119.30237,40.530215],[119.256175,40.543404],[119.22045,40.569322],[119.230921,40.603863],[119.177951,40.609315],[119.162552,40.600228],[119.14469,40.632482],[119.184726,40.680153],[119.165632,40.69286],[119.115125,40.666536],[119.054763,40.664721],[119.028277,40.692406],[119.011031,40.687414],[118.96114,40.72008],[118.950053,40.747743],[118.895234,40.75409],[118.907553,40.775394],[118.878604,40.783098],[118.845959,40.822057],[118.873061,40.847866],[118.90201,40.960946],[118.916792,40.969984],[118.977154,40.959138],[118.977154,40.959138],[119.00056,40.967273],[119.013495,41.007479],[118.951901,41.018317],[118.937118,41.052625],[118.964836,41.079246],[119.037516,41.067516],[119.080632,41.095936],[119.081248,41.131555],[119.126212,41.138767],[119.189038,41.198234],[119.169943,41.222996],[119.204436,41.222546],[119.209364,41.244599],[119.2494,41.279689],[119.239545,41.31431],[119.211827,41.308016],[119.197661,41.282837],[119.168712,41.294978],[119.092951,41.293629],[118.980234,41.305769],[118.949437,41.317906],[118.890923,41.300823],[118.844727,41.342622],[118.843496,41.374516],[118.770199,41.352956],[118.741866,41.324198],[118.677192,41.35026],[118.629765,41.346666],[118.528135,41.355202],[118.412338,41.331838],[118.380309,41.312062],[118.348896,41.342622],[118.361215,41.384844],[118.348896,41.428384],[118.327338,41.450816],[118.271904,41.471446],[118.315636,41.512688],[118.302701,41.55256],[118.215237,41.59554],[118.206614,41.650566],[118.159187,41.67605],[118.155491,41.712694],[118.132702,41.733241],[118.140093,41.784134],[118.178281,41.814917],[118.236179,41.80778],[118.247266,41.773869],[118.29223,41.772976],[118.335346,41.845241],[118.340273,41.87243],[118.268824,41.930336],[118.306396,41.940131],[118.313788,41.98819],[118.291614,42.007759],[118.239875,42.024655],[118.286686,42.033991],[118.296541,42.057545],[118.27252,42.083312],[118.239259,42.092639],[118.212774,42.081091],[118.220165,42.058434],[118.194296,42.031324],[118.116687,42.037102],[118.155491,42.081091],[118.097593,42.105072],[118.089586,42.12283],[118.106216,42.172082],[118.033535,42.199132],[117.977485,42.229716],[117.974405,42.25054],[118.047702,42.280656],[118.060021,42.298364],[118.008898,42.346595],[118.024296,42.385064],[117.997811,42.416884],[117.874007,42.510038],[117.856761,42.539148],[117.797631,42.585431],[117.801326,42.612744],[117.779768,42.61847],[117.708935,42.588515],[117.667051,42.582347],[117.60053,42.603054],[117.537088,42.603054],[117.530313,42.590278],[117.475494,42.602613],[117.435458,42.585431],[117.434226,42.557224],[117.387415,42.517537],[117.387415,42.517537],[117.410205,42.519743],[117.413284,42.471645],[117.390495,42.461933],[117.332596,42.46105],[117.332596,42.46105],[117.275314,42.481797],[117.275314,42.481797],[117.188467,42.468114],[117.188467,42.468114],[117.135496,42.468996],[117.09546,42.484004],[117.080061,42.463699],[117.080061,42.463699],[117.01662,42.456193],[117.01662,42.456193],[117.009228,42.44957],[117.009228,42.44957],[117.005533,42.43367],[117.005533,42.43367],[116.99075,42.425719],[116.99075,42.425719],[116.974736,42.426603],[116.974736,42.426603],[116.97104,42.427486],[116.97104,42.427486],[116.944555,42.415116],[116.944555,42.415116],[116.936547,42.410256],[116.936547,42.410256],[116.921765,42.403628],[116.921765,42.403628],[116.910062,42.395231],[116.910062,42.395231],[116.910678,42.394789],[116.910678,42.394789],[116.886656,42.366496],[116.897743,42.297479],[116.918685,42.229716],[116.903287,42.190708],[116.789338,42.200462],[116.825062,42.155669],[116.850316,42.156556],[116.890352,42.092639],[116.879881,42.018431],[116.796113,41.977958],[116.748686,41.984186],[116.727744,41.951259],[116.66923,41.947698],[116.639049,41.929891],[116.597165,41.935679],[116.553433,41.928555],[116.510933,41.974399],[116.4826,41.975734],[116.453651,41.945917],[116.393289,41.942802],[116.414231,41.982407],[116.373579,42.009983],[116.310137,41.997086],[116.298434,41.96817],[116.223906,41.932562],[116.212819,41.885352],[116.194341,41.861734],[116.122892,41.861734],[116.106877,41.831419],[116.129051,41.805996],[116.09887,41.776547],[116.034196,41.782795],[116.007095,41.79752],[116.007095,41.797966],[116.007095,41.79752],[116.007095,41.797966],[115.994776,41.828743],[115.954124,41.874213],[115.916552,41.945027],[115.85311,41.927665],[115.834632,41.93835],[115.811226,41.912525],[115.726227,41.870202],[115.688038,41.867528],[115.654162,41.829189],[115.57409,41.80555],[115.519887,41.76762],[115.488474,41.760924],[115.42996,41.728775],[115.346808,41.712247],[115.319091,41.691693],[115.360975,41.661297],[115.345576,41.635807],[115.377605,41.603148],[115.310468,41.592854],[115.290142,41.622835],[115.26612,41.616124],[115.256881,41.580768],[115.20391,41.571367],[115.195287,41.602253],[115.0992,41.62373],[115.056085,41.602253],[115.016049,41.615229],[114.860832,41.60091],[114.895325,41.636255],[114.902716,41.695715],[114.89594,41.76762],[114.868839,41.813579],[114.922426,41.825175],[114.939056,41.846132],[114.923658,41.871093],[114.915035,41.960605],[114.9021,42.015763],[114.860832,42.054879],[114.86268,42.097967],[114.825723,42.139695],[114.79431,42.149457],[114.789383,42.130819],[114.75489,42.115727],[114.675434,42.12061],[114.647717,42.109512],[114.560254,42.132595],[114.510978,42.110844],[114.502355,42.06732],[114.480181,42.064654],[114.467863,42.025989],[114.511594,41.981962],[114.478334,41.951704],[114.419203,41.942356],[114.352066,41.953484],[114.343443,41.926774],[114.282465,41.863517],[114.200545,41.789934],[114.215328,41.75646],[114.206704,41.7386],[114.237501,41.698843],[114.215328,41.68499],[114.259059,41.623282],[114.226414,41.616572],[114.221487,41.582111],[114.230726,41.513584],[114.101379,41.537779],[114.032394,41.529715],[113.976959,41.505966],[113.953553,41.483553],[113.933227,41.487139],[113.919677,41.454404],[113.877793,41.431076],[113.871017,41.413126],[113.94493,41.392477],[113.92522,41.325546],[113.899351,41.316108],[113.914749,41.294529],[113.95109,41.282837],[113.971416,41.239649],[113.992357,41.269794],[114.016379,41.231999],[113.996669,41.19238],[113.960945,41.171211],[113.920293,41.172112],[113.877793,41.115777],[113.819279,41.09774],[113.868554,41.06887],[113.973263,40.983087],[113.994821,40.938798],[114.057647,40.925234],[114.041633,40.917546],[114.055183,40.867782],[114.073661,40.857372],[114.044712,40.830661],[114.080437,40.790348],[114.104458,40.797597],[114.103227,40.770861],[114.134639,40.737314],[114.162357,40.71373],[114.183299,40.67153],[114.236269,40.607043],[114.283081,40.590685],[114.273842,40.552954],[114.293552,40.55159],[114.282465,40.494725],[114.267066,40.474242],[114.299711,40.44009],[114.286161,40.425057],[114.31203,40.372645],[114.381015,40.36307],[114.390254,40.351213],[114.438914,40.371733],[114.481413,40.34802],[114.530688,40.345283],[114.510978,40.302851],[114.46971,40.268155],[114.406269,40.246232],[114.362537,40.249886],[114.292936,40.230242],[114.255364,40.236182],[114.235654,40.198252],[114.180219,40.191395],[114.135871,40.175392],[114.097683,40.193681],[114.073046,40.168533],[114.073046,40.168533],[114.101995,40.099901],[114.086596,40.071513],[114.045944,40.056856],[114.018227,40.103563],[113.989278,40.11226],[113.959097,40.033491],[113.910438,40.015618],[114.029314,39.985819],[114.028082,39.959218],[114.047176,39.916085],[114.067502,39.922511],[114.17406,39.897722],[114.212248,39.918839],[114.229494,39.899558],[114.204241,39.885324],[114.215943,39.8619],[114.286776,39.871087],[114.285545,39.858225],[114.395182,39.867412],[114.406885,39.833413],[114.390254,39.819165],[114.41674,39.775943],[114.409964,39.761683],[114.408117,39.652106],[114.431522,39.613851],[114.49558,39.608318],[114.51529,39.564964],[114.568877,39.573729],[114.532536,39.486027],[114.501739,39.476789],[114.496812,39.438437],[114.469095,39.400989],[114.466631,39.329736],[114.430906,39.307513],[114.437066,39.259337],[114.416124,39.242654],[114.47587,39.21623],[114.443841,39.174023],[114.388406,39.176807],[114.360689,39.134112],[114.369928,39.107648],[114.345907,39.075133],[114.252284,39.073739],[114.180835,39.049111],[114.157429,39.061194],[114.10877,39.052364],[114.082901,39.09325],[114.082901,39.09325],[114.064422,39.094179],[114.050872,39.135969],[114.006524,39.122971],[113.994821,39.095572],[113.961561,39.100681],[113.930148,39.063517],[113.898119,39.067699],[113.80696,38.989595],[113.776779,38.986804],[113.76754,38.959819],[113.776163,38.885788],[113.795257,38.860628],[113.855619,38.828933],[113.836525,38.795824],[113.839605,38.7585],[113.802648,38.763166],[113.775547,38.709949],[113.720728,38.713218],[113.70225,38.651551],[113.612939,38.645942],[113.603084,38.587024],[113.561816,38.558483],[113.546417,38.492936],[113.583374,38.459671],[113.537794,38.417952],[113.525475,38.383245],[113.557504,38.343359],[113.54457,38.270569],[113.570439,38.237202],[113.598772,38.22733],[113.64312,38.232031],[113.678844,38.20523],[113.711489,38.213695],[113.720728,38.174656],[113.797105,38.162894],[113.831597,38.16854],[113.811271,38.117707],[113.876561,38.055059],[113.872249,37.990471],[113.901198,37.984811],[113.936307,37.922993],[113.959097,37.906468],[113.976959,37.816696],[114.006524,37.813386],[114.044712,37.761834],[113.996669,37.730128],[113.993589,37.706932],[114.068118,37.721608],[114.12848,37.698409],[114.139567,37.675676],[114.115545,37.619761],[114.118625,37.59084],[114.036705,37.494037],[114.014531,37.42468],[113.973879,37.40329],[113.962792,37.355734],[113.90243,37.310052],[113.886416,37.239095],[113.853155,37.215269],[113.832213,37.167594],[113.773083,37.151855],[113.773699,37.107004],[113.758301,37.075497],[113.788482,37.059739],[113.771851,37.016745],[113.791561,36.98759],[113.76138,36.956034],[113.792793,36.894796],[113.773083,36.85506],[113.731815,36.858891],[113.731815,36.878521],[113.696707,36.882351],[113.676381,36.855539],[113.680692,36.789907],[113.600004,36.752995],[113.549497,36.752515],[113.535946,36.732373],[113.499606,36.740527],[113.465113,36.707908],[113.506997,36.705029],[113.476816,36.655114],[113.486671,36.635427],[113.54457,36.62342],[113.539642,36.594116],[113.569823,36.585947],[113.588917,36.547974],[113.559968,36.528741],[113.554425,36.494589],[113.587069,36.460904],[113.635729,36.451277],[113.670221,36.425278],[113.708409,36.423352],[113.731199,36.363135],[113.755221,36.366026],[113.813119,36.332285],[113.856851,36.329392],[113.84946,36.347711],[113.882104,36.353977],[113.911054,36.314927],[113.962792,36.353977],[113.981887,36.31782],[114.002828,36.334214],[114.056415,36.329392],[114.04348,36.303353],[114.080437,36.269585],[114.129096,36.280199],[114.175907,36.264759],[114.170364,36.245938],[114.170364,36.245938],[114.203009,36.245456],[114.2104,36.272962],[114.241197,36.251247],[114.257827,36.263794],[114.299095,36.245938],[114.345291,36.255591],[114.356378,36.230492],[114.408117,36.224699],[114.417356,36.205868],[114.466015,36.197658],[114.480181,36.177855],[114.533152,36.171575],[114.586739,36.141133],[114.588587,36.118414],[114.640326,36.137266],[114.720398,36.140166],[114.734564,36.15563],[114.771521,36.124699],[114.857752,36.127599],[114.858368,36.144516],[114.912571,36.140649],[114.926737,36.089403],[114.914419,36.052155],[114.998186,36.069572],[115.04623,36.112613],[115.048693,36.161912],[115.06286,36.178338],[115.104744,36.172058],[115.12507,36.209731],[115.1842,36.193312],[115.201446,36.210214],[115.201446,36.210214],[115.202678,36.209248],[115.202678,36.209248],[115.202678,36.208765],[115.202678,36.208765],[115.242098,36.19138],[115.279055,36.13775],[115.30246,36.127599],[115.312931,36.088436],[115.365902,36.099074],[115.376989,36.128083],[115.450902,36.152248],[115.465068,36.170125],[115.483547,36.148865],[115.474923,36.248352],[115.466916,36.258969],[115.466916,36.258969],[115.462605,36.276339],[115.417025,36.292742],[115.423185,36.32216],[115.366518,36.30914],[115.368982,36.342409],[115.340033,36.398307],[115.297533,36.413239],[115.317243,36.454166],[115.291374,36.460423],[115.272895,36.497476],[115.33141,36.550378],[115.355431,36.627262],[115.365902,36.621979],[115.420105,36.686795],[115.451518,36.702151],[115.479851,36.760187],[115.524815,36.763543],[115.683727,36.808117],[115.71206,36.883308],[115.75764,36.902453],[115.79706,36.968945],[115.776734,36.992848],[115.85619,37.060694],[115.888219,37.112254],[115.879596,37.150901],[115.91224,37.177132],[115.909777,37.20669],[115.969523,37.239572],[115.975682,37.337179],[116.024341,37.360015],[116.085935,37.373809],[116.106261,37.368577],[116.169087,37.384271],[116.193109,37.365723],[116.236224,37.361442],[116.2855,37.404241],[116.226369,37.428007],[116.243,37.447965],[116.224522,37.479791],[116.240536,37.489764],[116.240536,37.489764],[116.27626,37.466967],[116.290427,37.484065],[116.278724,37.524895],[116.295355,37.554316],[116.336007,37.581355],[116.36742,37.566177],[116.379738,37.522047],[116.38097,37.522522],[116.379738,37.522047],[116.38097,37.522522],[116.433941,37.473142],[116.448108,37.503059],[116.4826,37.521573],[116.575607,37.610754],[116.604556,37.624975],[116.66307,37.686096],[116.679085,37.728708],[116.724664,37.744327],[116.753613,37.77035],[116.753613,37.793054],[116.804736,37.848837],[116.837997,37.835132],[116.919301,37.846002],[117.027091,37.832296],[117.074518,37.848837],[117.150278,37.839385],[117.185387,37.849783],[117.271618,37.839858],[117.320278,37.861596],[117.400966,37.844584],[117.438538,37.854035],[117.481038,37.914967],[117.513067,37.94329],[117.524154,37.989527],[117.557414,38.046105],[117.557414,38.046105],[117.586979,38.071551],[117.704624,38.076262],[117.746508,38.12524],[117.771145,38.134655],[117.766834,38.158658],[117.789007,38.180772],[117.808718,38.22827],[117.848754,38.255062],[117.895565,38.301572],[117.948536,38.346644],[117.957775,38.376208],[117.937449,38.387936],[117.84629,38.368232],[117.781,38.373862],[117.730493,38.424985],[117.72495,38.457328],[117.678754,38.477008],[117.644878,38.52759],[117.68553,38.539293],[117.638102,38.54491],[117.639334,38.626776],[117.55803,38.613683],[117.47919,38.616489],[117.432379,38.601524],[117.368937,38.564566],[117.25314,38.556143],[117.238358,38.580943],[117.258684,38.608072],[117.258684,38.608072],[117.213104,38.639866],[117.213104,38.639866],[117.183539,38.61836],[117.183539,38.61836],[117.150894,38.617892],[117.109626,38.584685],[117.070822,38.608072],[117.055424,38.639398],[117.068358,38.680522],[117.038793,38.688464],[116.95133,38.689398],[116.948866,38.689398],[116.950714,38.689398],[116.95133,38.689398],[116.950714,38.689398],[116.948866,38.689398],[116.877417,38.680522],[116.858939,38.741231],[116.794265,38.744498],[116.794265,38.744498],[116.746222,38.754299],[116.737599,38.784629],[116.75115,38.831264],[116.723432,38.852706],[116.722201,38.896968],[116.708034,38.931892],[116.72836,38.975174],[116.754845,39.003084],[116.754229,39.034701],[116.754229,39.034701],[116.783179,39.05097],[116.783179,39.05097],[116.812744,39.05097],[116.812744,39.05097],[116.871874,39.054688],[116.912526,39.110898],[116.91191,39.111362],[116.91191,39.111362],[116.912526,39.110898],[116.909446,39.150822],[116.870026,39.153607],[116.855859,39.215766],[116.881729,39.225966],[116.881729,39.225966],[116.87249,39.291304],[116.889736,39.338068],[116.870642,39.357506],[116.829374,39.338994],[116.818287,39.3737],[116.840461,39.378326],[116.839845,39.413474],[116.876185,39.43474],[116.832454,39.435664],[116.785026,39.465702],[116.820751,39.482332],[116.819519,39.528507],[116.78749,39.554352],[116.808432,39.576497],[116.812128,39.615695],[116.79057,39.595868],[116.748686,39.619844],[116.709266,39.618],[116.726512,39.595407],[116.726512,39.595407],[116.724048,39.59264],[116.723432,39.59264],[116.724048,39.59264],[116.723432,39.59264],[116.664918,39.605552],[116.620571,39.601863],[116.592237,39.621227],[116.592237,39.621227],[116.524484,39.596329],[116.50847,39.551122],[116.473361,39.552968],[116.478289,39.535431],[116.437637,39.526661],[116.443796,39.510041],[116.401912,39.528046],[116.411767,39.482794],[116.444412,39.482332],[116.454883,39.453226],[116.434557,39.442597],[116.361876,39.455074],[116.361876,39.455074],[116.337854,39.455536],[116.307057,39.488337],[116.257782,39.500344],[116.240536,39.564041],[116.198652,39.589412],[116.151841,39.583416],[116.130283,39.567732],[116.09887,39.575113],[116.036044,39.571884],[116.026189,39.587567],[115.995392,39.576958],[115.978146,39.595868],[115.957204,39.560812],[115.910393,39.600479],[115.910393,39.600479],[115.91532,39.582955],[115.91532,39.582955],[115.867893,39.546507],[115.867893,39.546507],[115.828473,39.541431],[115.821081,39.522968],[115.821081,39.522968],[115.806299,39.510041],[115.806299,39.510041],[115.752712,39.515581],[115.738545,39.539585],[115.738545,39.540046],[115.738545,39.539585],[115.738545,39.540046],[115.724995,39.5442],[115.724995,39.5442],[115.722531,39.543738],[115.721299,39.543738],[115.722531,39.543738],[115.722531,39.5442],[115.721299,39.543738],[115.722531,39.5442],[115.720683,39.551122],[115.720683,39.551122],[115.718835,39.553891],[115.718835,39.553891],[115.716988,39.56035],[115.716988,39.56035],[115.699125,39.570039],[115.699125,39.570039],[115.698509,39.577881],[115.698509,39.577881],[115.667712,39.615234],[115.633836,39.599557],[115.633836,39.599557],[115.587024,39.589873],[115.545756,39.618922],[115.518039,39.597252],[115.522351,39.640124],[115.478619,39.650723],[115.478619,39.650723],[115.491554,39.670074],[115.486626,39.741899],[115.439815,39.752022],[115.443511,39.785601],[115.483547,39.798477],[115.483547,39.798477],[115.50572,39.784222],[115.552532,39.794799],[115.567314,39.816407],[115.514344,39.837549],[115.526046,39.87568],[115.515575,39.892212],[115.515575,39.892212],[115.522967,39.899099],[115.481083,39.935819],[115.426264,39.950502],[115.428728,39.984443],[115.450286,39.992697],[115.454597,40.029825],[115.485394,40.040364],[115.527278,40.076092],[115.59072,40.096239],[115.599959,40.119583],[115.75456,40.145663],[115.75456,40.145663],[115.773654,40.176307],[115.806299,40.15344],[115.847567,40.147036],[115.855574,40.188652],[115.870356,40.185909],[115.89869,40.234354],[115.968907,40.264045],[115.95166,40.281852],[115.917784,40.354405],[115.864197,40.359422],[115.771806,40.443734],[115.781045,40.49336],[115.736082,40.503372],[115.755176,40.540221],[115.784741,40.55841],[115.819849,40.55932],[115.827857,40.587504],[115.885139,40.595229],[115.907929,40.617493],[115.971986,40.6025],[115.982457,40.578868],[116.005247,40.583868],[116.09887,40.630665],[116.133979,40.666536],[116.162928,40.662451],[116.171551,40.695582],[116.204812,40.740035],[116.22021,40.744115],[116.247311,40.791707],[116.273181,40.762703],[116.311369,40.754996],[116.316912,40.772221],[116.453651,40.765876],[116.46597,40.774487],[116.438253,40.81934],[116.334159,40.90443],[116.339702,40.929303],[116.370499,40.94377],[116.398216,40.90624],[116.477057,40.899907],[116.447492,40.953715],[116.455499,40.980828],[116.519557,40.98128],[116.519557,40.98128],[116.5676,40.992574],[116.598397,40.974503],[116.623034,41.021026],[116.615643,41.053076],[116.647672,41.059394],[116.688324,41.044501],[116.698795,41.021477],[116.677853,40.970888],[116.722201,40.927495],[116.713577,40.909858],[116.759773,40.889954],[116.81336,40.848319],[116.848468,40.839264],[116.924229,40.773581],[116.926692,40.745022],[116.964881,40.709647],[117.012308,40.693767],[117.11209,40.707379],[117.117018,40.70012],[117.208177,40.694675],[117.278394,40.664267],[117.319662,40.657911],[117.342451,40.673799],[117.408973,40.686961],[117.493973,40.675161],[117.514914,40.660181],[117.501364,40.636569],[117.467487,40.649738],[117.467487,40.649738]]],[[[117.210024,40.082045],[117.204481,40.069681],[117.159517,40.077008],[117.140423,40.064185],[117.105315,40.074261],[117.105315,40.074261],[117.051728,40.059605],[117.025243,40.030283],[116.945171,40.04128],[116.927924,40.055024],[116.867562,40.041739],[116.831222,40.051359],[116.820135,40.02845],[116.781331,40.034866],[116.757925,39.967934],[116.782563,39.947749],[116.78441,39.891294],[116.812128,39.889916],[116.865714,39.843982],[116.907598,39.832494],[116.918069,39.84628],[116.949482,39.778703],[116.902055,39.763523],[116.916837,39.731314],[116.887272,39.72533],[116.889736,39.687576],[116.90575,39.688037],[116.932236,39.706456],[116.932236,39.706456],[116.944555,39.695405],[116.944555,39.695405],[116.948866,39.680668],[116.948866,39.680668],[116.964265,39.64335],[116.983359,39.638742],[116.983359,39.638742],[117.016004,39.653949],[117.10901,39.625375],[117.10901,39.625375],[117.152742,39.623532],[117.177996,39.645194],[117.165061,39.718886],[117.165061,39.718886],[117.161981,39.748801],[117.205713,39.763984],[117.15767,39.796638],[117.156438,39.817326],[117.192162,39.832953],[117.251908,39.834332],[117.247597,39.860981],[117.227887,39.852712],[117.162597,39.876598],[117.162597,39.876598],[117.150894,39.944996],[117.198322,39.992697],[117.192162,40.066475],[117.210024,40.082045]]],[[[117.784696,39.376938],[117.765602,39.400527],[117.699696,39.407463],[117.673211,39.386652],[117.668899,39.412087],[117.614081,39.407001],[117.601146,39.419485],[117.570965,39.404689],[117.521074,39.357043],[117.536472,39.338068],[117.594987,39.349176],[117.669515,39.322792],[117.670747,39.357969],[117.74466,39.354729],[117.784696,39.376938]]],[[[118.869365,39.142932],[118.82009,39.108576],[118.857662,39.098824],[118.869365,39.142932]]]]}},{"type":"Feature","properties":{"adcode":140000,"name":"山西省","center":[112.549248,37.857014],"centroid":[112.304436,37.618179],"childrenNum":11,"level":"province","parent":{"adcode":100000},"subFeatureIndex":3,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[110.379257,34.600612],[110.424837,34.588295],[110.488279,34.610956],[110.533242,34.583368],[110.610851,34.607508],[110.710017,34.605045],[110.749437,34.65232],[110.791937,34.649858],[110.824582,34.615881],[110.883712,34.64395],[110.903422,34.669056],[110.920052,34.730068],[110.976103,34.706456],[111.035233,34.740887],[111.118385,34.756623],[111.148566,34.807742],[111.232949,34.789559],[111.255123,34.819535],[111.29208,34.806759],[111.345666,34.831816],[111.389398,34.815113],[111.439289,34.838202],[111.502731,34.829851],[111.543999,34.853428],[111.570484,34.843114],[111.592042,34.881416],[111.617911,34.894671],[111.646861,34.938836],[111.681969,34.9511],[111.664107,34.984449],[111.740483,35.00455],[111.807005,35.032977],[111.810084,35.062374],[111.933272,35.083435],[111.97762,35.067272],[112.018888,35.068742],[112.039214,35.045717],[112.062004,35.056005],[112.05646,35.098615],[112.066315,35.153437],[112.03983,35.194039],[112.078634,35.219467],[112.058924,35.280069],[112.13838,35.271275],[112.21722,35.253195],[112.242474,35.234622],[112.304684,35.251728],[112.288053,35.219956],[112.36751,35.219956],[112.390915,35.239021],[112.513487,35.218489],[112.637291,35.225822],[112.628052,35.263457],[112.720443,35.206265],[112.772798,35.207732],[112.822073,35.258082],[112.884283,35.243909],[112.934174,35.262968],[112.936022,35.284466],[112.992072,35.29619],[112.985913,35.33965],[112.996384,35.362104],[113.067217,35.353806],[113.126347,35.332327],[113.149137,35.350878],[113.165151,35.412845],[113.185477,35.409431],[113.189789,35.44893],[113.243375,35.449418],[113.304353,35.426989],[113.31236,35.481101],[113.348085,35.468429],[113.391817,35.506925],[113.439244,35.507412],[113.49899,35.532254],[113.513773,35.57364],[113.55812,35.621816],[113.547649,35.656835],[113.578446,35.633491],[113.625258,35.632518],[113.622794,35.674825],[113.592613,35.691838],[113.587685,35.736542],[113.604932,35.797727],[113.582758,35.818111],[113.660982,35.837035],[113.637576,35.870019],[113.654207,35.931586],[113.648663,35.994073],[113.678844,35.985841],[113.694859,36.026991],[113.660366,36.034735],[113.68562,36.056026],[113.671453,36.115514],[113.655439,36.125182],[113.712721,36.129533],[113.705946,36.148865],[113.651127,36.174473],[113.697939,36.181719],[113.681924,36.216491],[113.716417,36.262347],[113.712105,36.303353],[113.736127,36.324571],[113.731199,36.363135],[113.708409,36.423352],[113.670221,36.425278],[113.635729,36.451277],[113.587069,36.460904],[113.554425,36.494589],[113.559968,36.528741],[113.588917,36.547974],[113.569823,36.585947],[113.539642,36.594116],[113.54457,36.62342],[113.486671,36.635427],[113.476816,36.655114],[113.506997,36.705029],[113.465113,36.707908],[113.499606,36.740527],[113.535946,36.732373],[113.549497,36.752515],[113.600004,36.752995],[113.680692,36.789907],[113.676381,36.855539],[113.696707,36.882351],[113.731815,36.878521],[113.731815,36.858891],[113.773083,36.85506],[113.792793,36.894796],[113.76138,36.956034],[113.791561,36.98759],[113.771851,37.016745],[113.788482,37.059739],[113.758301,37.075497],[113.773699,37.107004],[113.773083,37.151855],[113.832213,37.167594],[113.853155,37.215269],[113.886416,37.239095],[113.90243,37.310052],[113.962792,37.355734],[113.973879,37.40329],[114.014531,37.42468],[114.036705,37.494037],[114.118625,37.59084],[114.115545,37.619761],[114.139567,37.675676],[114.12848,37.698409],[114.068118,37.721608],[113.993589,37.706932],[113.996669,37.730128],[114.044712,37.761834],[114.006524,37.813386],[113.976959,37.816696],[113.959097,37.906468],[113.936307,37.922993],[113.901198,37.984811],[113.872249,37.990471],[113.876561,38.055059],[113.811271,38.117707],[113.831597,38.16854],[113.797105,38.162894],[113.720728,38.174656],[113.711489,38.213695],[113.678844,38.20523],[113.64312,38.232031],[113.598772,38.22733],[113.570439,38.237202],[113.54457,38.270569],[113.557504,38.343359],[113.525475,38.383245],[113.537794,38.417952],[113.583374,38.459671],[113.546417,38.492936],[113.561816,38.558483],[113.603084,38.587024],[113.612939,38.645942],[113.70225,38.651551],[113.720728,38.713218],[113.775547,38.709949],[113.802648,38.763166],[113.839605,38.7585],[113.836525,38.795824],[113.855619,38.828933],[113.795257,38.860628],[113.776163,38.885788],[113.76754,38.959819],[113.776779,38.986804],[113.80696,38.989595],[113.898119,39.067699],[113.930148,39.063517],[113.961561,39.100681],[113.994821,39.095572],[114.006524,39.122971],[114.050872,39.135969],[114.064422,39.094179],[114.082901,39.09325],[114.082901,39.09325],[114.10877,39.052364],[114.157429,39.061194],[114.180835,39.049111],[114.252284,39.073739],[114.345907,39.075133],[114.369928,39.107648],[114.360689,39.134112],[114.388406,39.176807],[114.443841,39.174023],[114.47587,39.21623],[114.416124,39.242654],[114.437066,39.259337],[114.430906,39.307513],[114.466631,39.329736],[114.469095,39.400989],[114.496812,39.438437],[114.501739,39.476789],[114.532536,39.486027],[114.568877,39.573729],[114.51529,39.564964],[114.49558,39.608318],[114.431522,39.613851],[114.408117,39.652106],[114.409964,39.761683],[114.41674,39.775943],[114.390254,39.819165],[114.406885,39.833413],[114.395182,39.867412],[114.285545,39.858225],[114.286776,39.871087],[114.215943,39.8619],[114.204241,39.885324],[114.229494,39.899558],[114.212248,39.918839],[114.17406,39.897722],[114.067502,39.922511],[114.047176,39.916085],[114.028082,39.959218],[114.029314,39.985819],[113.910438,40.015618],[113.959097,40.033491],[113.989278,40.11226],[114.018227,40.103563],[114.045944,40.056856],[114.086596,40.071513],[114.101995,40.099901],[114.073046,40.168533],[114.073046,40.168533],[114.097683,40.193681],[114.135871,40.175392],[114.180219,40.191395],[114.235654,40.198252],[114.255364,40.236182],[114.292936,40.230242],[114.362537,40.249886],[114.406269,40.246232],[114.46971,40.268155],[114.510978,40.302851],[114.530688,40.345283],[114.481413,40.34802],[114.438914,40.371733],[114.390254,40.351213],[114.381015,40.36307],[114.31203,40.372645],[114.286161,40.425057],[114.299711,40.44009],[114.267066,40.474242],[114.282465,40.494725],[114.293552,40.55159],[114.273842,40.552954],[114.283081,40.590685],[114.236269,40.607043],[114.183299,40.67153],[114.162357,40.71373],[114.134639,40.737314],[114.084748,40.729605],[114.063806,40.706925],[114.07243,40.679246],[114.041633,40.608861],[114.076741,40.575686],[114.080437,40.547952],[114.061959,40.52885],[114.011452,40.515657],[113.948626,40.514747],[113.890112,40.466503],[113.850691,40.460583],[113.794641,40.517932],[113.763228,40.473787],[113.688699,40.448288],[113.559968,40.348476],[113.500222,40.334335],[113.387505,40.319279],[113.316672,40.319736],[113.27602,40.388601],[113.251382,40.413211],[113.083231,40.374925],[113.03334,40.368997],[112.898449,40.329317],[112.848558,40.206937],[112.744464,40.167161],[112.712436,40.178593],[112.6299,40.235725],[112.511639,40.269068],[112.456205,40.300112],[112.418017,40.295091],[112.349031,40.257194],[112.310227,40.256281],[112.299756,40.21105],[112.232619,40.169905],[112.232003,40.133311],[112.183344,40.083877],[112.182112,40.061437],[112.142076,40.027076],[112.133453,40.001866],[112.07617,39.919298],[112.042294,39.886243],[112.012729,39.827438],[111.970229,39.796638],[111.959758,39.692642],[111.925265,39.66731],[111.9382,39.623071],[111.87907,39.606013],[111.842729,39.620305],[111.783599,39.58895],[111.722621,39.606013],[111.659179,39.641507],[111.625303,39.633672],[111.525521,39.662242],[111.497187,39.661781],[111.445448,39.640124],[111.460847,39.606935],[111.441137,39.59679],[111.422043,39.539123],[111.431282,39.508656],[111.372152,39.479099],[111.358601,39.432428],[111.337043,39.420872],[111.171971,39.423183],[111.143022,39.407926],[111.125776,39.366297],[111.159037,39.362596],[111.155341,39.338531],[111.186138,39.35149],[111.179363,39.326959],[111.202152,39.305197],[111.247732,39.302419],[111.213239,39.257021],[111.219399,39.244044],[111.163348,39.152678],[111.173819,39.135041],[111.147334,39.100681],[111.138095,39.064447],[111.094363,39.030053],[111.038313,39.020289],[110.998276,38.998433],[110.980414,38.970056],[111.009979,38.932823],[111.016755,38.889981],[110.995813,38.868084],[111.009363,38.847579],[110.965016,38.755699],[110.915125,38.704345],[110.916357,38.673981],[110.880632,38.626776],[110.898494,38.587024],[110.920052,38.581878],[110.907733,38.521035],[110.870777,38.510265],[110.874473,38.453579],[110.840596,38.439986],[110.796864,38.453579],[110.77777,38.440924],[110.746973,38.366355],[110.701394,38.353215],[110.661358,38.308617],[110.601612,38.308147],[110.57759,38.297345],[110.565887,38.215105],[110.528315,38.211814],[110.509221,38.192061],[110.519692,38.130889],[110.501829,38.097929],[110.507989,38.013107],[110.528315,37.990471],[110.522771,37.955088],[110.59422,37.922049],[110.680452,37.790216],[110.735886,37.77035],[110.750669,37.736281],[110.716792,37.728708],[110.706321,37.705511],[110.775306,37.680886],[110.793169,37.650567],[110.763604,37.639668],[110.771611,37.594634],[110.795017,37.558586],[110.770995,37.538184],[110.759292,37.474567],[110.740198,37.44939],[110.644111,37.435135],[110.630561,37.372858],[110.641648,37.360015],[110.695234,37.34955],[110.678604,37.317668],[110.690307,37.287201],[110.661974,37.281963],[110.651503,37.256722],[110.590525,37.187145],[110.53509,37.138021],[110.535706,37.115118],[110.49567,37.086956],[110.460561,37.044932],[110.417446,37.027257],[110.426685,37.008621],[110.382953,37.022001],[110.381721,37.002408],[110.424221,36.963685],[110.408823,36.892403],[110.376178,36.882351],[110.424221,36.855539],[110.406975,36.824886],[110.423605,36.818179],[110.407591,36.776007],[110.447011,36.737649],[110.438388,36.685835],[110.402663,36.697352],[110.394656,36.676716],[110.426685,36.657514],[110.447627,36.621018],[110.496902,36.582102],[110.488895,36.556628],[110.503677,36.488335],[110.47288,36.453203],[110.489511,36.430094],[110.487047,36.393972],[110.459946,36.327946],[110.474112,36.306729],[110.474112,36.248352],[110.45625,36.22663],[110.447011,36.164328],[110.467953,36.074893],[110.491974,36.034735],[110.49259,35.994073],[110.516612,35.971796],[110.502445,35.947575],[110.516612,35.918501],[110.511684,35.879718],[110.549257,35.877778],[110.550489,35.838005],[110.571431,35.800639],[110.57759,35.701559],[110.609619,35.632031],[110.589293,35.602355],[110.567735,35.539559],[110.531394,35.511309],[110.477808,35.413821],[110.45009,35.327933],[110.374946,35.251728],[110.378642,35.210666],[110.364475,35.197952],[110.373714,35.134351],[110.320743,35.00504],[110.262229,34.944233],[110.230816,34.880925],[110.246831,34.789068],[110.243135,34.725641],[110.229584,34.692679],[110.269004,34.629671],[110.29549,34.610956],[110.379257,34.600612]]]]}},{"type":"Feature","properties":{"adcode":150000,"name":"内蒙古自治区","center":[111.670801,40.818311],"centroid":[114.077429,44.331087],"childrenNum":12,"level":"province","parent":{"adcode":100000},"subFeatureIndex":4,"acroutes":[100000]},"geometry":{"type":"Polygon","coordinates":[[[97.172903,42.795257],[97.371235,42.457076],[97.500582,42.243894],[97.653335,41.986856],[97.84674,41.656379],[97.613915,41.477276],[97.629314,41.440498],[97.903407,41.168057],[97.971776,41.09774],[98.142391,41.001607],[98.184891,40.988056],[98.25018,40.93925],[98.333332,40.918903],[98.344419,40.568413],[98.627751,40.677884],[98.569853,40.746836],[98.668403,40.773128],[98.689345,40.691952],[98.72199,40.657911],[98.762642,40.639748],[98.802678,40.607043],[98.80699,40.660181],[98.790975,40.705564],[98.984996,40.782644],[99.041662,40.693767],[99.102025,40.676522],[99.12543,40.715091],[99.172858,40.747289],[99.174705,40.858278],[99.565827,40.846961],[99.673,40.93292],[99.985897,40.909858],[100.057346,40.908049],[100.107853,40.875475],[100.224882,40.727337],[100.237201,40.716905],[100.242744,40.618855],[100.169447,40.541131],[100.169447,40.277743],[100.007455,40.20008],[99.955716,40.150695],[99.927383,40.063727],[99.841152,40.013326],[99.751225,40.006909],[99.714268,39.972061],[99.533182,39.891753],[99.491298,39.884406],[99.459885,39.898181],[99.440791,39.885783],[99.469124,39.875221],[99.672384,39.888079],[99.822058,39.860063],[99.904593,39.785601],[99.958796,39.769504],[100.040716,39.757083],[100.128179,39.702312],[100.250135,39.685274],[100.314193,39.606935],[100.301258,39.572345],[100.326512,39.509118],[100.44354,39.485565],[100.500823,39.481408],[100.498975,39.400527],[100.606764,39.387577],[100.707778,39.404689],[100.842053,39.405614],[100.842669,39.199999],[100.864227,39.106719],[100.829118,39.075133],[100.835278,39.025869],[100.875314,39.002619],[100.901799,39.030053],[100.961545,39.005874],[100.969553,38.946788],[101.117378,38.975174],[101.228863,39.020754],[101.198682,38.943064],[101.237486,38.907214],[101.24303,38.860628],[101.33542,38.847113],[101.34158,38.822406],[101.307087,38.80282],[101.331109,38.777164],[101.412413,38.764099],[101.562702,38.713218],[101.601506,38.65529],[101.672955,38.6908],[101.777049,38.66043],[101.873751,38.733761],[101.941505,38.808883],[102.075164,38.891378],[102.045599,38.904885],[101.955055,38.985874],[101.926106,39.000758],[101.833715,39.08907],[101.902701,39.111827],[102.012338,39.127149],[102.050526,39.141075],[102.276576,39.188868],[102.3548,39.231993],[102.45335,39.255167],[102.579002,39.183301],[102.616574,39.171703],[102.883892,39.120649],[103.007696,39.099753],[103.133347,39.192579],[103.188166,39.215302],[103.259615,39.263971],[103.344615,39.331588],[103.428998,39.353341],[103.595302,39.386652],[103.728961,39.430117],[103.85338,39.461543],[103.955626,39.456923],[104.089901,39.419947],[104.073271,39.351953],[104.047401,39.297788],[104.171205,39.160567],[104.207546,39.083495],[104.190915,39.042139],[104.196459,38.9882],[104.173053,38.94446],[104.044322,38.895105],[104.011677,38.85923],[103.85954,38.64454],[103.416063,38.404821],[103.465339,38.353215],[103.507838,38.280905],[103.53494,38.156776],[103.368636,38.08898],[103.362477,38.037621],[103.40744,37.860651],[103.627947,37.797783],[103.683381,37.777919],[103.841062,37.64725],[103.874938,37.604117],[103.935916,37.572818],[104.089285,37.465067],[104.183524,37.406618],[104.237727,37.411847],[104.287002,37.428007],[104.322726,37.44844],[104.407726,37.464592],[104.419429,37.511604],[104.433595,37.515402],[104.623305,37.522522],[104.805007,37.539133],[104.866601,37.566651],[105.027977,37.580881],[105.111128,37.633981],[105.187505,37.657674],[105.221998,37.677097],[105.315004,37.702197],[105.4037,37.710246],[105.467141,37.695094],[105.598952,37.699356],[105.616199,37.722555],[105.622358,37.777919],[105.677177,37.771769],[105.760944,37.799674],[105.80406,37.862068],[105.799749,37.939986],[105.840401,38.004147],[105.780655,38.084741],[105.76772,38.121474],[105.775111,38.186887],[105.802828,38.220277],[105.842248,38.240962],[105.86627,38.296406],[105.821307,38.366824],[105.835473,38.387467],[105.827466,38.432486],[105.850872,38.443736],[105.836705,38.476071],[105.863806,38.53508],[105.856415,38.569714],[105.874277,38.593105],[105.852719,38.641735],[105.894603,38.696405],[105.88598,38.716953],[105.908154,38.737496],[105.909386,38.791159],[105.992538,38.857366],[105.97098,38.909077],[106.021487,38.953769],[106.060907,38.96866],[106.087392,39.006339],[106.078153,39.026333],[106.096631,39.084889],[106.145907,39.153142],[106.170544,39.163352],[106.192718,39.142932],[106.251232,39.131327],[106.285109,39.146181],[106.29558,39.167992],[106.280181,39.262118],[106.402753,39.291767],[106.511774,39.272311],[106.525325,39.308439],[106.556122,39.322329],[106.602318,39.37555],[106.643586,39.357969],[106.683622,39.357506],[106.751375,39.381564],[106.781556,39.371849],[106.806809,39.318625],[106.806193,39.277407],[106.790795,39.241263],[106.795723,39.214375],[106.825288,39.19397],[106.859164,39.107648],[106.878874,39.091392],[106.933693,39.076527],[106.96757,39.054688],[106.971881,39.026333],[106.954019,38.941202],[106.837606,38.847579],[106.756302,38.748699],[106.709491,38.718821],[106.66268,38.601524],[106.647897,38.470917],[106.599854,38.389812],[106.482209,38.319417],[106.555506,38.263521],[106.627571,38.232501],[106.654672,38.22921],[106.737824,38.197706],[106.779092,38.171833],[106.858548,38.156306],[106.942316,38.132302],[107.010069,38.120532],[107.051337,38.122886],[107.071047,38.138892],[107.119091,38.134185],[107.138801,38.161011],[107.19054,38.153953],[107.240431,38.111586],[107.33159,38.086625],[107.3938,38.014993],[107.440611,37.995659],[107.411662,37.948009],[107.448618,37.933378],[107.49235,37.944706],[107.560719,37.893717],[107.65003,37.86443],[107.684523,37.888522],[107.732566,37.84931],[107.842819,37.828987],[107.884703,37.808186],[107.982022,37.787378],[107.993109,37.735335],[108.025753,37.696041],[108.012819,37.66857],[108.025137,37.649619],[108.055318,37.652462],[108.134159,37.622131],[108.193905,37.638246],[108.205608,37.655779],[108.24626,37.665728],[108.293071,37.656726],[108.301078,37.640616],[108.422418,37.648672],[108.485244,37.678044],[108.532671,37.690832],[108.628142,37.651988],[108.699591,37.669518],[108.720533,37.683728],[108.777815,37.683728],[108.791982,37.700303],[108.784591,37.764673],[108.799989,37.784068],[108.791982,37.872934],[108.798141,37.93385],[108.82709,37.989056],[108.797525,38.04799],[108.830786,38.049875],[108.883141,38.01405],[108.893612,37.978207],[108.93488,37.922521],[108.9743,37.931962],[108.982923,37.964053],[109.018648,37.971602],[109.037742,38.021593],[109.06977,38.023008],[109.050676,38.055059],[109.069155,38.091336],[108.964445,38.154894],[108.938575,38.207582],[108.976148,38.245192],[108.961981,38.26493],[109.007561,38.359316],[109.051292,38.385122],[109.054372,38.433892],[109.128901,38.480288],[109.175712,38.518694],[109.196654,38.552867],[109.276726,38.623035],[109.331545,38.597783],[109.367269,38.627711],[109.329081,38.66043],[109.338936,38.701542],[109.404226,38.720689],[109.444262,38.782763],[109.511399,38.833595],[109.549587,38.805618],[109.624116,38.85457],[109.672159,38.928167],[109.685094,38.968195],[109.665384,38.981687],[109.72513,39.018429],[109.762086,39.057476],[109.793499,39.074204],[109.851397,39.122971],[109.890818,39.103932],[109.92223,39.107183],[109.893897,39.141075],[109.961035,39.191651],[109.871723,39.243581],[109.90252,39.271848],[109.962267,39.212056],[110.041107,39.21623],[110.109476,39.249606],[110.217881,39.281113],[110.184005,39.355192],[110.161831,39.387115],[110.136577,39.39174],[110.12549,39.432891],[110.152592,39.45415],[110.243751,39.423645],[110.257917,39.407001],[110.385417,39.310291],[110.429764,39.341308],[110.434692,39.381101],[110.482735,39.360745],[110.524003,39.382952],[110.559728,39.351027],[110.566503,39.320014],[110.596684,39.282966],[110.626249,39.266751],[110.702626,39.273701],[110.731575,39.30705],[110.73835,39.348713],[110.782698,39.38804],[110.869545,39.494341],[110.891103,39.509118],[110.958856,39.519275],[111.017371,39.552045],[111.101138,39.559428],[111.136863,39.587106],[111.154725,39.569116],[111.148566,39.531277],[111.10545,39.497573],[111.10545,39.472631],[111.058639,39.447681],[111.064182,39.400989],[111.098059,39.401914],[111.087588,39.376013],[111.125776,39.366297],[111.143022,39.407926],[111.171971,39.423183],[111.337043,39.420872],[111.358601,39.432428],[111.372152,39.479099],[111.431282,39.508656],[111.422043,39.539123],[111.441137,39.59679],[111.460847,39.606935],[111.445448,39.640124],[111.497187,39.661781],[111.525521,39.662242],[111.625303,39.633672],[111.659179,39.641507],[111.722621,39.606013],[111.783599,39.58895],[111.842729,39.620305],[111.87907,39.606013],[111.9382,39.623071],[111.925265,39.66731],[111.959758,39.692642],[111.970229,39.796638],[112.012729,39.827438],[112.042294,39.886243],[112.07617,39.919298],[112.133453,40.001866],[112.142076,40.027076],[112.182112,40.061437],[112.183344,40.083877],[112.232003,40.133311],[112.232619,40.169905],[112.299756,40.21105],[112.310227,40.256281],[112.349031,40.257194],[112.418017,40.295091],[112.456205,40.300112],[112.511639,40.269068],[112.6299,40.235725],[112.712436,40.178593],[112.744464,40.167161],[112.848558,40.206937],[112.898449,40.329317],[113.03334,40.368997],[113.083231,40.374925],[113.251382,40.413211],[113.27602,40.388601],[113.316672,40.319736],[113.387505,40.319279],[113.500222,40.334335],[113.559968,40.348476],[113.688699,40.448288],[113.763228,40.473787],[113.794641,40.517932],[113.850691,40.460583],[113.890112,40.466503],[113.948626,40.514747],[114.011452,40.515657],[114.061959,40.52885],[114.080437,40.547952],[114.076741,40.575686],[114.041633,40.608861],[114.07243,40.679246],[114.063806,40.706925],[114.084748,40.729605],[114.134639,40.737314],[114.103227,40.770861],[114.104458,40.797597],[114.080437,40.790348],[114.044712,40.830661],[114.073661,40.857372],[114.055183,40.867782],[114.041633,40.917546],[114.057647,40.925234],[113.994821,40.938798],[113.973263,40.983087],[113.868554,41.06887],[113.819279,41.09774],[113.877793,41.115777],[113.920293,41.172112],[113.960945,41.171211],[113.996669,41.19238],[114.016379,41.231999],[113.992357,41.269794],[113.971416,41.239649],[113.95109,41.282837],[113.914749,41.294529],[113.899351,41.316108],[113.92522,41.325546],[113.94493,41.392477],[113.871017,41.413126],[113.877793,41.431076],[113.919677,41.454404],[113.933227,41.487139],[113.953553,41.483553],[113.976959,41.505966],[114.032394,41.529715],[114.101379,41.537779],[114.230726,41.513584],[114.221487,41.582111],[114.226414,41.616572],[114.259059,41.623282],[114.215328,41.68499],[114.237501,41.698843],[114.206704,41.7386],[114.215328,41.75646],[114.200545,41.789934],[114.282465,41.863517],[114.343443,41.926774],[114.352066,41.953484],[114.419203,41.942356],[114.478334,41.951704],[114.511594,41.981962],[114.467863,42.025989],[114.480181,42.064654],[114.502355,42.06732],[114.510978,42.110844],[114.560254,42.132595],[114.647717,42.109512],[114.675434,42.12061],[114.75489,42.115727],[114.789383,42.130819],[114.79431,42.149457],[114.825723,42.139695],[114.86268,42.097967],[114.860832,42.054879],[114.9021,42.015763],[114.915035,41.960605],[114.923658,41.871093],[114.939056,41.846132],[114.922426,41.825175],[114.868839,41.813579],[114.89594,41.76762],[114.902716,41.695715],[114.895325,41.636255],[114.860832,41.60091],[115.016049,41.615229],[115.056085,41.602253],[115.0992,41.62373],[115.195287,41.602253],[115.20391,41.571367],[115.256881,41.580768],[115.26612,41.616124],[115.290142,41.622835],[115.310468,41.592854],[115.377605,41.603148],[115.345576,41.635807],[115.360975,41.661297],[115.319091,41.691693],[115.346808,41.712247],[115.42996,41.728775],[115.488474,41.760924],[115.519887,41.76762],[115.57409,41.80555],[115.654162,41.829189],[115.688038,41.867528],[115.726227,41.870202],[115.811226,41.912525],[115.834632,41.93835],[115.85311,41.927665],[115.916552,41.945027],[115.954124,41.874213],[115.994776,41.828743],[116.007095,41.797966],[116.007095,41.79752],[116.034196,41.782795],[116.09887,41.776547],[116.129051,41.805996],[116.106877,41.831419],[116.122892,41.861734],[116.194341,41.861734],[116.212819,41.885352],[116.223906,41.932562],[116.298434,41.96817],[116.310137,41.997086],[116.373579,42.009983],[116.414231,41.982407],[116.393289,41.942802],[116.453651,41.945917],[116.4826,41.975734],[116.510933,41.974399],[116.553433,41.928555],[116.597165,41.935679],[116.639049,41.929891],[116.66923,41.947698],[116.727744,41.951259],[116.748686,41.984186],[116.796113,41.977958],[116.879881,42.018431],[116.890352,42.092639],[116.850316,42.156556],[116.825062,42.155669],[116.789338,42.200462],[116.903287,42.190708],[116.918685,42.229716],[116.897743,42.297479],[116.886656,42.366496],[116.910678,42.394789],[116.910062,42.395231],[116.921765,42.403628],[116.936547,42.410256],[116.944555,42.415116],[116.97104,42.427486],[116.974736,42.426603],[116.99075,42.425719],[117.005533,42.43367],[117.009228,42.44957],[117.01662,42.456193],[117.080061,42.463699],[117.09546,42.484004],[117.135496,42.468996],[117.188467,42.468114],[117.275314,42.481797],[117.332596,42.46105],[117.390495,42.461933],[117.413284,42.471645],[117.410205,42.519743],[117.387415,42.517537],[117.434226,42.557224],[117.435458,42.585431],[117.475494,42.602613],[117.530313,42.590278],[117.537088,42.603054],[117.60053,42.603054],[117.667051,42.582347],[117.708935,42.588515],[117.779768,42.61847],[117.801326,42.612744],[117.797631,42.585431],[117.856761,42.539148],[117.874007,42.510038],[117.997811,42.416884],[118.024296,42.385064],[118.008898,42.346595],[118.060021,42.298364],[118.047702,42.280656],[117.974405,42.25054],[117.977485,42.229716],[118.033535,42.199132],[118.106216,42.172082],[118.089586,42.12283],[118.097593,42.105072],[118.155491,42.081091],[118.116687,42.037102],[118.194296,42.031324],[118.220165,42.058434],[118.212774,42.081091],[118.239259,42.092639],[118.27252,42.083312],[118.296541,42.057545],[118.286686,42.033991],[118.239875,42.024655],[118.291614,42.007759],[118.313788,41.98819],[118.306396,41.940131],[118.268824,41.930336],[118.340273,41.87243],[118.335346,41.845241],[118.29223,41.772976],[118.247266,41.773869],[118.236179,41.80778],[118.178281,41.814917],[118.140093,41.784134],[118.132702,41.733241],[118.155491,41.712694],[118.159187,41.67605],[118.206614,41.650566],[118.215237,41.59554],[118.302701,41.55256],[118.315636,41.512688],[118.271904,41.471446],[118.327338,41.450816],[118.348896,41.428384],[118.361215,41.384844],[118.348896,41.342622],[118.380309,41.312062],[118.412338,41.331838],[118.528135,41.355202],[118.629765,41.346666],[118.677192,41.35026],[118.741866,41.324198],[118.770199,41.352956],[118.843496,41.374516],[118.844727,41.342622],[118.890923,41.300823],[118.949437,41.317906],[118.980234,41.305769],[119.092951,41.293629],[119.168712,41.294978],[119.197661,41.282837],[119.211827,41.308016],[119.239545,41.31431],[119.296211,41.325097],[119.330704,41.385293],[119.309762,41.405944],[119.376283,41.422102],[119.378131,41.459787],[119.401537,41.472343],[119.406464,41.503276],[119.361501,41.545841],[119.362116,41.566442],[119.420015,41.567785],[119.415703,41.590169],[119.342406,41.617914],[119.307914,41.657273],[119.299907,41.705545],[119.319001,41.727435],[119.317769,41.764049],[119.292515,41.790827],[119.312841,41.80555],[119.334399,41.871539],[119.323312,41.889807],[119.340559,41.926774],[119.323928,41.937014],[119.324544,41.969505],[119.375667,42.023322],[119.384906,42.08953],[119.352261,42.118391],[119.314689,42.119723],[119.30853,42.147239],[119.286972,42.154781],[119.277733,42.185387],[119.237697,42.200905],[119.274037,42.239021],[119.280197,42.260728],[119.34795,42.300578],[119.432949,42.317396],[119.482841,42.347037],[119.502551,42.388159],[119.540123,42.363401],[119.572152,42.359421],[119.571536,42.335536],[119.539507,42.297922],[119.557985,42.289068],[119.609108,42.276671],[119.617115,42.252755],[119.679941,42.240793],[119.744615,42.211545],[119.841933,42.215534],[119.854868,42.170308],[119.837622,42.135257],[119.845629,42.097079],[119.87581,42.077982],[119.897368,42.030879],[119.921389,42.014429],[119.924469,41.98908],[119.950954,41.974399],[119.954034,41.923212],[119.989759,41.899163],[120.023019,41.816701],[120.041498,41.818932],[120.050737,41.776101],[120.024867,41.737707],[120.035954,41.708226],[120.096316,41.697056],[120.1382,41.729221],[120.127113,41.77253],[120.183164,41.826513],[120.188707,41.848361],[120.215808,41.853265],[120.251533,41.884016],[120.286641,41.880005],[120.290337,41.897381],[120.260156,41.904062],[120.271859,41.925439],[120.318054,41.93746],[120.309431,41.951704],[120.373489,41.994862],[120.399358,41.984631],[120.456641,42.016208],[120.450481,42.057101],[120.493597,42.073539],[120.466496,42.105516],[120.56751,42.152119],[120.58414,42.167203],[120.624792,42.154338],[120.72211,42.203565],[120.745516,42.223512],[120.79048,42.218636],[120.820661,42.227943],[120.8299,42.252755],[120.883487,42.242565],[120.883487,42.269585],[120.933994,42.27977],[120.992508,42.264714],[121.028848,42.242565],[121.070732,42.254083],[121.087978,42.278885],[121.120623,42.280656],[121.133558,42.300135],[121.184681,42.333324],[121.218558,42.371802],[121.285079,42.387717],[121.314644,42.42837],[121.304789,42.435879],[121.386093,42.474294],[121.434752,42.475176],[121.4791,42.49636],[121.506201,42.482239],[121.570875,42.487093],[121.607831,42.516214],[121.604136,42.495037],[121.66573,42.437204],[121.69899,42.438529],[121.747649,42.484887],[121.803084,42.514891],[121.817867,42.504303],[121.831417,42.533856],[121.844352,42.522389],[121.889931,42.556784],[121.921344,42.605697],[121.915801,42.656332],[121.94167,42.666014],[121.939207,42.688453],[122.018663,42.69901],[122.062394,42.723635],[122.072865,42.710444],[122.160945,42.684934],[122.204676,42.685374],[122.204676,42.732867],[122.261343,42.695931],[122.324785,42.684934],[122.338951,42.669975],[122.396234,42.684054],[122.396234,42.707366],[122.460907,42.755282],[122.439349,42.770221],[122.371596,42.776371],[122.35127,42.830378],[122.436886,42.843105],[122.556378,42.827745],[122.576088,42.819405],[122.580399,42.789987],[122.624747,42.773296],[122.653696,42.78252],[122.733152,42.786034],[122.73808,42.77066],[122.786123,42.757479],[122.848949,42.712203],[122.883442,42.751766],[122.887137,42.770221],[122.925941,42.772417],[122.945651,42.753524],[122.980144,42.777689],[123.058368,42.768903],[123.118114,42.801405],[123.227752,42.831695],[123.169853,42.859777],[123.188947,42.895739],[123.18402,42.925983],[123.259165,42.993431],[123.323222,43.000872],[123.434707,43.027565],[123.474743,43.042438],[123.536337,43.007],[123.572678,43.003498],[123.580685,43.036314],[123.631192,43.088346],[123.636119,43.141644],[123.666916,43.179623],[123.645974,43.208855],[123.676771,43.223684],[123.664453,43.264663],[123.698329,43.272071],[123.703873,43.37047],[123.608402,43.366119],[123.54496,43.415262],[123.519707,43.402219],[123.486446,43.44525],[123.442098,43.437863],[123.419925,43.410046],[123.382968,43.469143],[123.36449,43.483475],[123.315831,43.492159],[123.329998,43.519071],[123.304744,43.550742],[123.360179,43.567223],[123.452569,43.545971],[123.461193,43.568523],[123.434091,43.575461],[123.421157,43.598435],[123.5117,43.592801],[123.510468,43.624867],[123.536953,43.633964],[123.518475,43.682024],[123.520323,43.708419],[123.48275,43.737396],[123.498149,43.771114],[123.461809,43.822518],[123.467968,43.853599],[123.397135,43.954929],[123.37065,43.970006],[123.400831,43.979481],[123.365722,44.013922],[123.331229,44.028984],[123.32815,44.084035],[123.350939,44.092633],[123.362642,44.133452],[123.386664,44.161794],[123.323838,44.179823],[123.286882,44.211574],[123.277027,44.25274],[123.196955,44.34483],[123.128585,44.367081],[123.114419,44.40258],[123.142136,44.428228],[123.125506,44.455147],[123.137209,44.486322],[123.12489,44.5098],[123.06576,44.505959],[123.025108,44.493153],[122.85634,44.398304],[122.76087,44.369648],[122.702971,44.319145],[122.675254,44.285738],[122.641993,44.283595],[122.515726,44.251025],[122.483081,44.236877],[122.319241,44.233018],[122.271198,44.255741],[122.291524,44.310152],[122.294604,44.41113],[122.28598,44.477783],[122.228082,44.480345],[122.224386,44.526016],[122.196053,44.559712],[122.13138,44.577619],[122.113517,44.615546],[122.103046,44.67388],[122.117213,44.701961],[122.161561,44.728328],[122.152322,44.744057],[122.10243,44.736406],[122.110438,44.767856],[122.142467,44.753833],[122.168952,44.770405],[122.099967,44.7823],[122.098119,44.81882],[122.04946,44.912985],[122.079025,44.914256],[122.087032,44.95281],[122.074713,45.006573],[122.098735,45.02138],[122.119677,45.068739],[122.109822,45.142236],[122.143082,45.183167],[122.192358,45.180636],[122.22993,45.206784],[122.239169,45.276313],[122.147394,45.295682],[122.146778,45.374352],[122.180039,45.409655],[122.168336,45.439897],[122.064242,45.472641],[122.002648,45.507882],[121.993409,45.552741],[121.966308,45.596308],[121.995873,45.59882],[122.003264,45.623102],[121.970004,45.692956],[121.934279,45.71051],[121.867142,45.719703],[121.812323,45.704659],[121.811091,45.687103],[121.713773,45.701734],[121.666345,45.727641],[121.644172,45.752284],[121.657106,45.770238],[121.697142,45.76314],[121.754425,45.794862],[121.766744,45.830318],[121.769823,45.84366],[121.817251,45.875336],[121.805548,45.900746],[121.821562,45.918235],[121.809243,45.961102],[121.761816,45.998947],[121.819098,46.023054],[121.843736,46.024301],[121.864062,46.002272],[121.923808,46.004767],[121.92812,45.988552],[122.040221,45.959022],[122.085184,45.912406],[122.091344,45.882002],[122.200981,45.857],[122.236705,45.831569],[122.253952,45.7982],[122.301379,45.813218],[122.337719,45.859917],[122.372828,45.856166],[122.362357,45.917403],[122.446125,45.916986],[122.496016,45.85825],[122.504639,45.786933],[122.522501,45.786933],[122.556378,45.82156],[122.603189,45.778169],[122.640761,45.771072],[122.650001,45.731401],[122.671558,45.70048],[122.741775,45.705077],[122.751015,45.735996],[122.792283,45.766063],[122.752246,45.834905],[122.772572,45.856583],[122.80029,45.856583],[122.828623,45.912406],[122.792898,46.073313],[123.04605,46.099878],[123.070071,46.123527],[123.112571,46.130163],[123.102716,46.172037],[123.127354,46.174523],[123.128585,46.210565],[123.178476,46.248239],[123.142136,46.298293],[123.089781,46.347888],[123.011557,46.434984],[123.010325,46.524823],[123.002318,46.574624],[123.052825,46.579972],[123.04605,46.617803],[123.077462,46.622324],[123.098404,46.603002],[123.18094,46.614103],[123.228368,46.588198],[123.279491,46.616981],[123.276411,46.660947],[123.318295,46.662179],[123.366338,46.677784],[123.474743,46.686817],[123.603475,46.68928],[123.631808,46.728675],[123.629344,46.813524],[123.580069,46.827447],[123.625648,46.847508],[123.599163,46.868378],[123.605322,46.891286],[123.576989,46.891286],[123.575757,46.845461],[123.562823,46.82581],[123.506772,46.827038],[123.483366,46.84587],[123.52833,46.944836],[123.487678,46.959951],[123.42362,46.934212],[123.337389,46.988943],[123.301664,46.999965],[123.304128,46.964852],[123.360179,46.970978],[123.404526,46.935438],[123.40699,46.906416],[123.374345,46.837683],[123.341084,46.826628],[123.295505,46.865105],[123.221592,46.850373],[123.22344,46.821305],[123.198802,46.803283],[123.163694,46.74016],[123.103332,46.734828],[123.076846,46.745082],[123.026339,46.718829],[123.00355,46.730726],[122.996774,46.761483],[122.906847,46.80738],[122.893913,46.895376],[122.895144,46.960359],[122.83971,46.937072],[122.791051,46.941567],[122.798442,46.9575],[122.77442,46.973837],[122.778116,47.002822],[122.845869,47.046881],[122.852645,47.072158],[122.821232,47.065636],[122.710363,47.093349],[122.679566,47.094164],[122.615508,47.124306],[122.582863,47.158092],[122.531124,47.198771],[122.498479,47.255262],[122.462755,47.27841],[122.441197,47.310476],[122.418407,47.350632],[122.507103,47.401291],[122.543443,47.495589],[122.59395,47.54732],[122.765181,47.614333],[122.848949,47.67441],[122.926557,47.697777],[123.041122,47.746492],[123.161846,47.781892],[123.214201,47.824502],[123.256085,47.876711],[123.300432,47.953723],[123.537569,48.021816],[123.579453,48.045427],[123.705105,48.152142],[123.746373,48.197638],[123.862785,48.271782],[124.019234,48.39313],[124.07898,48.43603],[124.136878,48.463023],[124.25945,48.536385],[124.314269,48.503881],[124.302566,48.456673],[124.330283,48.435633],[124.309957,48.413393],[124.331515,48.380015],[124.317964,48.35099],[124.353689,48.315978],[124.365392,48.283731],[124.422058,48.245884],[124.412819,48.219175],[124.418978,48.181679],[124.475029,48.173698],[124.471333,48.133373],[124.430065,48.12099],[124.415899,48.08782],[124.46579,48.098213],[124.478108,48.123387],[124.505826,48.124985],[124.529847,48.146951],[124.512601,48.164518],[124.547094,48.200829],[124.579122,48.262221],[124.558796,48.268197],[124.579738,48.297269],[124.540934,48.335476],[124.547094,48.35775],[124.51876,48.378027],[124.52492,48.426897],[124.507674,48.445558],[124.555717,48.467784],[124.533543,48.515379],[124.548941,48.535593],[124.520608,48.556195],[124.579122,48.596582],[124.601912,48.632587],[124.624702,48.701755],[124.612383,48.747945],[124.656115,48.783842],[124.644412,48.80789],[124.654267,48.83429],[124.697383,48.841775],[124.715861,48.885475],[124.709086,48.920487],[124.744194,48.920487],[124.756513,48.967262],[124.808252,49.020666],[124.828578,49.077933],[124.809484,49.115943],[124.847672,49.129651],[124.860607,49.166448],[124.906802,49.184054],[124.983179,49.162535],[125.039845,49.17623],[125.034302,49.157056],[125.117453,49.126127],[125.158721,49.144921],[125.187671,49.186792],[125.219699,49.189139],[125.227707,49.248947],[125.214772,49.277066],[125.261583,49.322336],[125.256656,49.359769],[125.277598,49.379644],[125.25604,49.395227],[125.256656,49.437275],[125.270822,49.454395],[125.228323,49.487063],[125.211076,49.539908],[125.233866,49.536801],[125.23017,49.595411],[125.205533,49.593859],[125.16796,49.629923],[125.15441,49.616741],[125.127308,49.655113],[125.132236,49.672157],[125.164881,49.669446],[125.189518,49.652401],[125.185207,49.634574],[125.219699,49.669058],[125.225243,49.726349],[125.204301,49.734086],[125.221547,49.754969],[125.222779,49.799026],[125.177815,49.829533],[125.239409,49.844587],[125.225243,49.867351],[125.245569,49.87198],[125.212924,49.907452],[125.225859,49.922481],[125.199373,49.935194],[125.190134,49.959841],[125.231402,49.957531],[125.241873,49.987938],[125.278214,49.996402],[125.297924,50.014481],[125.283757,50.036012],[125.25296,50.041393],[125.289916,50.057917],[125.315786,50.04562],[125.328105,50.065985],[125.283757,50.070211],[125.287453,50.093636],[125.258504,50.103618],[125.27883,50.127411],[125.311474,50.140453],[125.376148,50.137385],[125.335496,50.161161],[125.382923,50.172278],[125.39093,50.199868],[125.417416,50.195654],[125.448829,50.216338],[125.442053,50.260357],[125.466075,50.266861],[125.463611,50.295925],[125.530749,50.331085],[125.520278,50.3498],[125.546763,50.358965],[125.522126,50.404759],[125.536292,50.420014],[125.567089,50.402852],[125.583104,50.409717],[125.562162,50.438314],[125.580024,50.449366],[125.627451,50.443268],[125.654553,50.471082],[125.699516,50.487078],[125.740784,50.523237],[125.754335,50.506874],[125.770349,50.531227],[125.794987,50.532748],[125.829479,50.56165],[125.807921,50.60383],[125.814697,50.62092],[125.793139,50.643316],[125.804226,50.658874],[125.789443,50.679735],[125.825784,50.70362],[125.78082,50.725598],[125.795603,50.738856],[125.758646,50.746809],[125.804226,50.773309],[125.828863,50.756654],[125.846726,50.769524],[125.836255,50.793363],[125.890457,50.805845],[125.878138,50.816812],[125.913247,50.825885],[125.939732,50.85423],[125.961906,50.901054],[125.997631,50.872738],[125.996399,50.906715],[126.02042,50.927466],[126.042594,50.92558],[126.068464,50.967434],[126.041978,50.981753],[126.033971,51.011132],[126.059225,51.043503],[125.976073,51.084498],[125.993935,51.119072],[125.970529,51.123955],[125.946508,51.108176],[125.909551,51.138977],[125.864588,51.146487],[125.850421,51.21364],[125.819008,51.227134],[125.761726,51.226385],[125.76111,51.261976],[125.740784,51.27583],[125.700132,51.327465],[125.626219,51.380163],[125.623756,51.387633],[125.62314,51.398089],[125.600966,51.410409],[125.60035,51.413396],[125.595422,51.416755],[125.559082,51.461521],[125.528285,51.488359],[125.424807,51.562827],[125.38046,51.585516],[125.35151,51.623801],[125.316402,51.610052],[125.289301,51.633831],[125.228938,51.640517],[125.214772,51.627888],[125.175968,51.639403],[125.130388,51.635317],[125.12854,51.659083],[125.098975,51.658341],[125.060171,51.59667],[125.073106,51.553526],[125.047236,51.529704],[125.004737,51.529332],[124.983795,51.508478],[124.928976,51.498419],[124.917889,51.474196],[124.942527,51.447349],[124.885244,51.40817],[124.864302,51.37979],[124.783614,51.392115],[124.76452,51.38726],[124.752817,51.35812],[124.693687,51.3327],[124.62655,51.327465],[124.58713,51.363725],[124.555717,51.375307],[124.490427,51.380537],[124.478108,51.36223],[124.443616,51.35812],[124.426985,51.331953],[124.430065,51.301281],[124.406659,51.272086],[124.339522,51.293422],[124.297638,51.298661],[124.271769,51.308389],[124.239124,51.344664],[124.192313,51.33943],[124.128255,51.347281],[124.090067,51.3413],[124.071588,51.320734],[123.994596,51.322604],[123.939777,51.313253],[123.926227,51.300532],[123.887423,51.320734],[123.842459,51.367462],[123.794416,51.361109],[123.711264,51.398089],[123.660141,51.342795],[123.661989,51.319237],[123.582533,51.306893],[123.582533,51.294545],[123.46304,51.286686],[123.440251,51.270963],[123.414381,51.278825],[123.376809,51.266844],[123.339853,51.27246],[123.294273,51.254111],[123.231447,51.268716],[123.231447,51.279199],[123.127969,51.297913],[123.069455,51.321108],[123.002934,51.31213],[122.965977,51.345786],[122.965977,51.386886],[122.946267,51.405183],[122.903768,51.415262],[122.900072,51.445112],[122.871123,51.455181],[122.854492,51.477551],[122.880362,51.511085],[122.858804,51.524864],[122.880362,51.537894],[122.874202,51.561339],[122.832935,51.581797],[122.85634,51.606707],[122.820616,51.633088],[122.816304,51.655371],[122.778732,51.698048],[122.749167,51.746613],[122.771957,51.779579],[122.732536,51.832495],[122.725761,51.87833],[122.706051,51.890151],[122.729457,51.919321],[122.726377,51.978709],[122.683877,51.974654],[122.664783,51.99861],[122.650616,52.058997],[122.625363,52.067459],[122.643841,52.111585],[122.629059,52.13657],[122.690653,52.140243],[122.73808,52.153464],[122.769493,52.179893],[122.766413,52.232705],[122.787355,52.252494],[122.76087,52.26678],[122.710979,52.256157],[122.67895,52.276667],[122.585943,52.266413],[122.560689,52.282526],[122.478153,52.29607],[122.484313,52.341432],[122.447356,52.394052],[122.419023,52.375057],[122.378987,52.395512],[122.367284,52.413768],[122.342031,52.414133],[122.326016,52.459374],[122.310618,52.475416],[122.207756,52.469218],[122.178191,52.48963],[122.168952,52.513674],[122.140003,52.510032],[122.142467,52.495096],[122.107358,52.452445],[122.080873,52.440407],[122.091344,52.427272],[122.040837,52.413038],[122.035909,52.377615],[121.976779,52.343626],[121.94783,52.298266],[121.901018,52.280695],[121.841272,52.282526],[121.769207,52.308147],[121.714389,52.318025],[121.715621,52.342894],[121.658338,52.3904],[121.678664,52.419973],[121.63986,52.44442],[121.590585,52.443326],[121.565331,52.460468],[121.519136,52.456821],[121.495114,52.484892],[121.474172,52.482706],[121.416274,52.499468],[121.411963,52.52205],[121.353448,52.534793],[121.323883,52.573727],[121.280151,52.586819],[121.225333,52.577364],[121.182217,52.59918],[121.237036,52.619167],[121.29247,52.651855],[121.309717,52.676173],[121.373158,52.683067],[121.455078,52.73528],[121.476636,52.772225],[121.511129,52.779104],[121.537614,52.801542],[121.591201,52.824693],[121.620766,52.853251],[121.604136,52.872401],[121.610295,52.892264],[121.66265,52.912478],[121.677432,52.948192],[121.715621,52.997926],[121.785838,53.018451],[121.817867,53.061631],[121.775367,53.089674],[121.784606,53.104408],[121.753193,53.147501],[121.722396,53.145706],[121.665114,53.170467],[121.660186,53.195213],[121.67928,53.199515],[121.679896,53.240722],[121.642324,53.262564],[121.615222,53.258984],[121.575802,53.29155],[121.504969,53.323018],[121.499426,53.337314],[121.416274,53.319443],[121.336818,53.325877],[121.308485,53.301565],[121.227797,53.280459],[121.155732,53.285468],[121.129246,53.277238],[121.098449,53.306929],[121.055334,53.29155],[120.950624,53.29763],[120.936457,53.28833],[120.882871,53.294411],[120.867472,53.278669],[120.820661,53.269007],[120.838523,53.239648],[120.821893,53.241797],[120.736277,53.204892],[120.690698,53.174771],[120.687002,53.142476],[120.659901,53.137091],[120.643886,53.106923],[120.562582,53.082845],[120.529321,53.045803],[120.452945,53.01017],[120.411061,52.957927],[120.363018,52.94134],[120.350699,52.906343],[120.295265,52.891542],[120.297112,52.869872],[120.222584,52.84277],[120.181316,52.806969],[120.14128,52.813119],[120.101244,52.788877],[120.031642,52.773674],[120.071063,52.70628],[120.035338,52.646409],[120.049505,52.598453],[120.07599,52.586092],[120.125265,52.586819],[120.194866,52.578819],[120.289721,52.623527],[120.396895,52.616261],[120.462184,52.64532],[120.483742,52.630066],[120.56135,52.595544],[120.605082,52.589364],[120.62664,52.570818],[120.658669,52.56718],[120.690698,52.547532],[120.734429,52.536977],[120.687002,52.511489],[120.706712,52.492909],[120.68269,52.464479],[120.688234,52.427637],[120.64943,52.3904],[120.653741,52.371038],[120.62356,52.361172],[120.627256,52.323878],[120.653741,52.302658],[120.695625,52.290214],[120.715951,52.261286],[120.755371,52.258355],[120.745516,52.20594],[120.786784,52.15787],[120.760299,52.136937],[120.76769,52.10938],[120.753523,52.085483],[120.717183,52.072978],[120.690698,52.047221],[120.691929,52.026973],[120.717799,52.015556],[120.704864,51.983501],[120.66298,51.958061],[120.656821,51.926333],[120.548416,51.907877],[120.549032,51.882394],[120.481278,51.885719],[120.480046,51.855049],[120.40059,51.833605],[120.40675,51.81659],[120.363634,51.789945],[120.317438,51.785873],[120.294649,51.752171],[120.226279,51.717703],[120.172693,51.679868],[120.087077,51.678013],[120.100628,51.649058],[120.05936,51.634203],[120.035954,51.583657],[120.052584,51.560967],[120.017476,51.52114],[119.985447,51.505125],[119.982367,51.482396],[120.002693,51.459283],[119.982983,51.445112],[119.97128,51.40033],[119.910918,51.390994],[119.914614,51.374187],[119.946643,51.360736],[119.883817,51.336813],[119.885049,51.302777],[119.811136,51.281071],[119.828383,51.263099],[119.797586,51.243622],[119.821607,51.21439],[119.784035,51.22601],[119.760629,51.212516],[119.788346,51.174636],[119.771716,51.124331],[119.752622,51.117193],[119.764325,51.092017],[119.719361,51.075099],[119.726753,51.051028],[119.678093,51.016404],[119.630666,51.00925],[119.598637,50.984767],[119.569688,50.933879],[119.491464,50.87878],[119.498855,50.827776],[119.515485,50.814165],[119.496391,50.771795],[119.506862,50.763846],[119.450196,50.695281],[119.430486,50.684286],[119.385522,50.682769],[119.394145,50.667219],[119.361501,50.632689],[119.298059,50.616743],[119.281428,50.601551],[119.295595,50.573814],[119.264182,50.536933],[119.262334,50.490124],[119.250631,50.448604],[119.22353,50.441363],[119.217371,50.414675],[119.165016,50.422683],[119.125596,50.389118],[119.176719,50.378814],[119.155777,50.364691],[119.188422,50.347509],[119.232153,50.365455],[119.259871,50.345218],[119.277117,50.366218],[119.322696,50.352474],[119.358421,50.358965],[119.381827,50.324208],[119.35103,50.303953],[119.339943,50.244668],[119.319001,50.220933],[119.358421,50.197953],[119.339327,50.192206],[119.350414,50.166145],[119.309762,50.161161],[119.290052,50.121655],[119.236465,50.075204],[119.190269,50.087877],[119.193965,50.069826],[119.163168,50.027554],[119.12498,50.019095],[119.090487,49.985629],[118.982082,49.979087],[118.964836,49.988708],[118.791757,49.955606],[118.761576,49.959456],[118.739402,49.946364],[118.672264,49.955991],[118.605127,49.926719],[118.574946,49.931342],[118.531214,49.887791],[118.485019,49.866194],[118.483787,49.830691],[118.443751,49.835709],[118.385853,49.827217],[118.398787,49.802502],[118.384005,49.783958],[118.315636,49.766953],[118.284223,49.743755],[118.220781,49.729831],[118.211542,49.690744],[118.156723,49.660149],[118.129622,49.669446],[118.082811,49.616741],[118.011362,49.614803],[117.995963,49.623332],[117.950999,49.596187],[117.866,49.591532],[117.849369,49.551557],[117.809333,49.521263],[117.638102,49.574847],[117.485349,49.633024],[117.278394,49.636512],[117.068974,49.695389],[116.736367,49.847674],[116.717889,49.847288],[116.428397,49.430659],[116.048363,48.873274],[116.077928,48.822471],[116.069305,48.811437],[115.83032,48.560156],[115.799523,48.514982],[115.822929,48.259432],[115.81061,48.257042],[115.529126,48.155336],[115.545141,48.134971],[115.539597,48.104607],[115.580249,47.921649],[115.939342,47.683275],[115.968291,47.689721],[116.111189,47.811642],[116.130283,47.823296],[116.26579,47.876711],[116.453035,47.837358],[116.669846,47.890758],[116.791186,47.89758],[116.879265,47.893968],[117.094844,47.8241],[117.384335,47.641356],[117.493357,47.758563],[117.519226,47.761782],[117.529081,47.782697],[117.813645,48.016212],[117.886942,48.025418],[117.96147,48.011007],[118.052014,48.01421],[118.107448,48.031021],[118.124694,48.047427],[118.150564,48.036224],[118.238643,48.041826],[118.238027,48.031422],[118.284839,48.011007],[118.351976,48.006203],[118.37415,48.016612],[118.422193,48.01461],[118.441903,47.995791],[118.568171,47.992187],[118.773278,47.771034],[119.134219,47.664335],[119.152081,47.540453],[119.205052,47.520249],[119.365812,47.47739],[119.32208,47.42721],[119.365812,47.423161],[119.386138,47.397645],[119.437877,47.378602],[119.450812,47.353065],[119.559217,47.303172],[119.56784,47.248357],[119.627586,47.247544],[119.716282,47.195518],[119.763093,47.13082],[119.806825,47.055037],[119.79081,47.04525],[119.795122,47.013024],[119.845013,46.964852],[119.859795,46.917046],[119.926933,46.903963],[119.920157,46.853238],[119.936172,46.790173],[119.917078,46.758203],[119.93494,46.712674],[119.911534,46.669572],[119.859179,46.669572],[119.804361,46.68189],[119.8136,46.66834],[119.783419,46.626023],[119.739687,46.615336],[119.677477,46.584908],[119.682405,46.605058],[119.656535,46.625612],[119.598637,46.618214],[119.557985,46.633832],[119.491464,46.629311],[119.431718,46.638763],[119.374435,46.603414],[119.357805,46.619447],[119.325776,46.608759],[119.26295,46.649034],[119.20074,46.648213],[119.152081,46.658072],[119.123132,46.642872],[119.073857,46.676552],[119.011647,46.745902],[118.951285,46.722111],[118.912481,46.733188],[118.914329,46.77501],[118.845343,46.771731],[118.788061,46.717598],[118.788061,46.687227],[118.677192,46.6979],[118.639004,46.721291],[118.586033,46.692975],[118.446831,46.704467],[118.41049,46.728265],[118.316252,46.73934],[118.274984,46.715957],[118.238643,46.709392],[118.192448,46.682711],[118.124078,46.678195],[118.04647,46.631366],[117.992883,46.631366],[117.982412,46.614925],[117.914659,46.607936],[117.868464,46.575447],[117.870927,46.549935],[117.813645,46.530588],[117.769913,46.537586],[117.748355,46.521941],[117.704008,46.516587],[117.641182,46.558166],[117.622704,46.596012],[117.596218,46.603414],[117.49582,46.600535],[117.42006,46.582029],[117.447777,46.528117],[117.392343,46.463023],[117.375712,46.416421],[117.383719,46.394962],[117.372017,46.36028],[117.247597,46.366888],[117.097308,46.356976],[116.876801,46.375559],[116.834302,46.384229],[116.81336,46.355737],[116.745606,46.327642],[116.673541,46.325163],[116.585462,46.292504],[116.573143,46.258998],[116.536187,46.23251],[116.439484,46.137628],[116.414231,46.133896],[116.271949,45.966926],[116.243,45.876169],[116.288579,45.839074],[116.278108,45.831152],[116.286731,45.775247],[116.260862,45.776082],[116.22329,45.747273],[116.217746,45.72221],[116.17463,45.688775],[116.1155,45.679577],[116.035428,45.685013],[116.026805,45.661177],[115.936878,45.632727],[115.864197,45.572853],[115.699741,45.45963],[115.586408,45.440317],[115.36467,45.392427],[115.178041,45.396209],[114.983404,45.379397],[114.920578,45.386122],[114.745035,45.438217],[114.600906,45.403773],[114.551014,45.387383],[114.539928,45.325985],[114.519602,45.283893],[114.459855,45.21353],[114.409348,45.179371],[114.347139,45.119436],[114.313262,45.107189],[114.19069,45.036607],[114.158045,44.994301],[114.116777,44.957045],[114.065038,44.931206],[113.907358,44.915104],[113.861778,44.863377],[113.798953,44.849377],[113.712105,44.788247],[113.631417,44.745333],[113.540874,44.759358],[113.503918,44.777628],[113.11526,44.799714],[113.037652,44.822641],[112.937869,44.840042],[112.850406,44.840466],[112.712436,44.879494],[112.599719,44.930783],[112.540589,45.001072],[112.438959,45.071697],[112.396459,45.064512],[112.113743,45.072965],[112.071243,45.096206],[112.002874,45.090713],[111.903707,45.052252],[111.764505,44.969325],[111.69244,44.859983],[111.624687,44.778477],[111.585267,44.705789],[111.560629,44.647062],[111.569868,44.57634],[111.530448,44.55033],[111.514434,44.507666],[111.478709,44.488884],[111.427586,44.394455],[111.415883,44.35724],[111.428818,44.319573],[111.507042,44.294305],[111.534144,44.26217],[111.541535,44.206855],[111.559397,44.171238],[111.662875,44.061247],[111.702295,44.034147],[111.773128,44.010479],[111.870447,43.940279],[111.959758,43.823382],[111.970845,43.748205],[111.951135,43.693275],[111.891388,43.6738],[111.79407,43.672068],[111.606209,43.513863],[111.564325,43.490422],[111.456535,43.494329],[111.400485,43.472618],[111.354289,43.436125],[111.183674,43.396132],[111.151029,43.38004],[111.069725,43.357852],[111.02045,43.329998],[110.82027,43.149067],[110.769763,43.099272],[110.736502,43.089657],[110.687227,43.036314],[110.689691,43.02144],[110.631177,42.936061],[110.469801,42.839156],[110.437156,42.781203],[110.34846,42.742098],[110.139657,42.674815],[110.108244,42.642687],[109.906216,42.635643],[109.733753,42.579262],[109.683862,42.558988],[109.544044,42.472528],[109.486761,42.458842],[109.291509,42.435879],[109.026039,42.458401],[108.983539,42.449128],[108.845569,42.395673],[108.798757,42.415116],[108.705134,42.413349],[108.532671,42.442945],[108.298614,42.438529],[108.238252,42.460167],[108.089195,42.436321],[108.022058,42.433229],[107.986949,42.413349],[107.939522,42.403628],[107.736262,42.415116],[107.57427,42.412907],[107.501589,42.456635],[107.46648,42.458842],[107.303872,42.412465],[107.271844,42.364285],[107.051337,42.319166],[106.785867,42.291281],[106.612789,42.241679],[106.372572,42.161436],[106.344855,42.149457],[106.01348,42.032213],[105.74185,41.949033],[105.589713,41.888471],[105.385221,41.797073],[105.291599,41.749763],[105.230621,41.751103],[105.009498,41.583007],[104.923267,41.654143],[104.803775,41.652355],[104.68921,41.6452],[104.524138,41.661745],[104.530298,41.875104],[104.418813,41.860397],[104.30856,41.840782],[104.080046,41.805104],[103.868779,41.802427],[103.454868,41.877332],[103.418527,41.882233],[103.20726,41.96283],[103.021862,42.028212],[102.712045,42.153007],[102.621502,42.154338],[102.540814,42.162323],[102.449039,42.144133],[102.093642,42.223512],[102.070236,42.232374],[101.877447,42.432345],[101.803534,42.503861],[101.770274,42.509597],[101.557775,42.529887],[101.291689,42.586312],[100.862995,42.671295],[100.826655,42.675255],[100.32528,42.690213],[100.272309,42.636523],[100.004376,42.648849],[99.969267,42.647969],[99.51224,42.568244],[98.962822,42.607018],[98.546447,42.638284],[98.195362,42.653251],[97.831958,42.706047],[97.28254,42.782081],[97.172903,42.795257]]]}},{"type":"Feature","properties":{"adcode":210000,"name":"辽宁省","center":[123.429096,41.796767],"centroid":[122.604994,41.299712],"childrenNum":14,"level":"province","parent":{"adcode":100000},"subFeatureIndex":5,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[123.534489,39.788361],[123.546808,39.756163],[123.579453,39.781002],[123.612714,39.775023],[123.642279,39.796178],[123.645358,39.823761],[123.674924,39.826979],[123.687858,39.808132],[123.795032,39.822842],[123.812278,39.831115],[123.95148,39.817786],[124.002603,39.800316],[124.103001,39.823302],[124.099306,39.777323],[124.151045,39.74558],[124.173218,39.841225],[124.214486,39.865116],[124.215102,39.883487],[124.21695,39.894049],[124.218182,39.895885],[124.219414,39.899099],[124.241588,39.928477],[124.286551,39.931689],[124.288399,39.962888],[124.349377,39.989029],[124.372167,40.021576],[124.336442,40.049985],[124.346913,40.079756],[124.428217,40.144291],[124.457782,40.177679],[124.490427,40.18408],[124.513833,40.218362],[124.515065,40.22019],[124.62655,40.291896],[124.722636,40.321561],[124.739267,40.371733],[124.834121,40.423235],[124.913578,40.481981],[124.945606,40.45603],[124.985642,40.475153],[125.044157,40.466503],[125.042925,40.483802],[125.004737,40.496091],[125.015823,40.533853],[125.076801,40.562048],[125.113758,40.569322],[125.181511,40.611132],[125.262815,40.620218],[125.279445,40.655187],[125.305315,40.661089],[125.329337,40.643835],[125.375532,40.658365],[125.422343,40.635661],[125.418648,40.673345],[125.453756,40.676522],[125.459916,40.707379],[125.49564,40.728697],[125.544915,40.729605],[125.551075,40.761796],[125.585567,40.788535],[125.61698,40.763609],[125.685349,40.769048],[125.67611,40.788082],[125.641002,40.798503],[125.648393,40.826133],[125.707523,40.866877],[125.687813,40.897645],[125.652089,40.91619],[125.584335,40.891764],[125.589263,40.931112],[125.635458,40.94151],[125.650241,40.970888],[125.674879,40.974503],[125.684118,41.021929],[125.726617,41.055332],[125.739552,41.08917],[125.712451,41.095485],[125.734009,41.125695],[125.759878,41.132908],[125.791291,41.167607],[125.73832,41.178418],[125.758646,41.232449],[125.749407,41.245499],[125.695205,41.244599],[125.685349,41.273842],[125.646545,41.264396],[125.642234,41.296327],[125.62006,41.318355],[125.637306,41.34442],[125.610205,41.365084],[125.589879,41.359245],[125.581256,41.396517],[125.547995,41.401006],[125.534444,41.428833],[125.533212,41.479069],[125.493176,41.509103],[125.507343,41.534195],[125.479626,41.544946],[125.450061,41.597777],[125.461148,41.642516],[125.446981,41.67605],[125.412488,41.691246],[125.344119,41.672474],[125.317018,41.676944],[125.332416,41.711354],[125.336112,41.768067],[125.336112,41.768067],[125.323177,41.771191],[125.323177,41.771191],[125.319482,41.776993],[125.319482,41.776993],[125.294844,41.822945],[125.307779,41.924548],[125.35151,41.92811],[125.291764,41.958825],[125.29854,41.974399],[125.369989,42.002868],[125.363213,42.017097],[125.416184,42.063766],[125.414336,42.101964],[125.446365,42.098411],[125.490097,42.136145],[125.458068,42.160105],[125.458068,42.160105],[125.41372,42.156112],[125.368141,42.182726],[125.357054,42.145464],[125.305931,42.146351],[125.312706,42.197359],[125.280677,42.175187],[125.312706,42.219966],[125.27575,42.231045],[125.27575,42.266928],[125.299156,42.289953],[125.264047,42.312528],[125.224011,42.30102],[125.175352,42.308102],[125.167345,42.351903],[125.203685,42.366938],[125.185823,42.38197],[125.186439,42.427928],[125.140243,42.44692],[125.150098,42.458842],[125.105135,42.490624],[125.068794,42.499449],[125.090968,42.515773],[125.066946,42.534738],[125.089736,42.567803],[125.082961,42.591159],[125.097127,42.622433],[125.038613,42.615387],[125.010896,42.63212],[125.014592,42.666014],[124.99057,42.677455],[124.968396,42.722756],[124.996729,42.745174],[124.975171,42.802722],[124.92836,42.819844],[124.897563,42.787791],[124.874157,42.789987],[124.856911,42.824234],[124.84952,42.882585],[124.87231,42.962344],[124.869846,42.988178],[124.840897,43.032377],[124.88894,43.074796],[124.882781,43.13422],[124.785462,43.117185],[124.755281,43.074359],[124.719557,43.069987],[124.686912,43.051185],[124.677673,43.002185],[124.658579,42.972854],[124.635173,42.972854],[124.632093,42.949642],[124.607456,42.937376],[124.586514,42.905384],[124.466406,42.847054],[124.435609,42.880831],[124.371551,42.880831],[124.38079,42.912835],[124.431913,42.930803],[124.442384,42.958841],[124.42329,42.975482],[124.369703,42.972854],[124.333363,42.997371],[124.425754,43.076107],[124.366007,43.121554],[124.273617,43.17875],[124.287167,43.207983],[124.27608,43.233278],[124.228653,43.235022],[124.215102,43.255947],[124.168291,43.244177],[124.114088,43.247229],[124.117168,43.2773],[124.099306,43.292983],[124.032784,43.280786],[123.964415,43.34088],[123.896046,43.361333],[123.881263,43.392218],[123.881263,43.392218],[123.852314,43.406133],[123.857858,43.459153],[123.857858,43.459153],[123.79688,43.489988],[123.747604,43.472184],[123.749452,43.439167],[123.710032,43.417001],[123.703873,43.37047],[123.698329,43.272071],[123.664453,43.264663],[123.676771,43.223684],[123.645974,43.208855],[123.666916,43.179623],[123.636119,43.141644],[123.631192,43.088346],[123.580685,43.036314],[123.572678,43.003498],[123.536337,43.007],[123.474743,43.042438],[123.434707,43.027565],[123.323222,43.000872],[123.259165,42.993431],[123.18402,42.925983],[123.188947,42.895739],[123.169853,42.859777],[123.227752,42.831695],[123.118114,42.801405],[123.058368,42.768903],[122.980144,42.777689],[122.945651,42.753524],[122.925941,42.772417],[122.887137,42.770221],[122.883442,42.751766],[122.883442,42.751766],[122.848949,42.712203],[122.848949,42.712203],[122.786123,42.757479],[122.73808,42.77066],[122.733152,42.786034],[122.653696,42.78252],[122.624747,42.773296],[122.580399,42.789987],[122.576088,42.819405],[122.556378,42.827745],[122.436886,42.843105],[122.35127,42.830378],[122.371596,42.776371],[122.439349,42.770221],[122.460907,42.755282],[122.396234,42.707366],[122.396234,42.684054],[122.338951,42.669975],[122.324785,42.684934],[122.261343,42.695931],[122.204676,42.732867],[122.204676,42.685374],[122.160945,42.684934],[122.072865,42.710444],[122.062394,42.723635],[122.018663,42.69901],[121.939207,42.688453],[121.94167,42.666014],[121.915801,42.656332],[121.921344,42.605697],[121.889931,42.556784],[121.844352,42.522389],[121.831417,42.533856],[121.817867,42.504303],[121.803084,42.514891],[121.747649,42.484887],[121.69899,42.438529],[121.66573,42.437204],[121.604136,42.495037],[121.607831,42.516214],[121.570875,42.487093],[121.506201,42.482239],[121.4791,42.49636],[121.434752,42.475176],[121.386093,42.474294],[121.304789,42.435879],[121.314644,42.42837],[121.285079,42.387717],[121.218558,42.371802],[121.184681,42.333324],[121.133558,42.300135],[121.120623,42.280656],[121.087978,42.278885],[121.070732,42.254083],[121.028848,42.242565],[120.992508,42.264714],[120.933994,42.27977],[120.883487,42.269585],[120.883487,42.269585],[120.883487,42.242565],[120.8299,42.252755],[120.820661,42.227943],[120.79048,42.218636],[120.745516,42.223512],[120.72211,42.203565],[120.624792,42.154338],[120.58414,42.167203],[120.56751,42.152119],[120.466496,42.105516],[120.493597,42.073539],[120.450481,42.057101],[120.456641,42.016208],[120.399358,41.984631],[120.373489,41.994862],[120.309431,41.951704],[120.318054,41.93746],[120.271859,41.925439],[120.260156,41.904062],[120.290337,41.897381],[120.286641,41.880005],[120.251533,41.884016],[120.215808,41.853265],[120.188707,41.848361],[120.183164,41.826513],[120.127113,41.77253],[120.1382,41.729221],[120.096316,41.697056],[120.035954,41.708226],[120.024867,41.737707],[120.050737,41.776101],[120.041498,41.818932],[120.023019,41.816701],[119.989759,41.899163],[119.954034,41.923212],[119.950954,41.974399],[119.924469,41.98908],[119.921389,42.014429],[119.897368,42.030879],[119.87581,42.077982],[119.845629,42.097079],[119.837622,42.135257],[119.854868,42.170308],[119.841933,42.215534],[119.744615,42.211545],[119.679941,42.240793],[119.617115,42.252755],[119.609108,42.276671],[119.557985,42.289068],[119.557985,42.289068],[119.539507,42.297922],[119.571536,42.335536],[119.572152,42.359421],[119.540123,42.363401],[119.502551,42.388159],[119.482841,42.347037],[119.432949,42.317396],[119.34795,42.300578],[119.280197,42.260728],[119.274037,42.239021],[119.237697,42.200905],[119.277733,42.185387],[119.286972,42.154781],[119.30853,42.147239],[119.314689,42.119723],[119.352261,42.118391],[119.384906,42.08953],[119.375667,42.023322],[119.324544,41.969505],[119.323928,41.937014],[119.340559,41.926774],[119.323312,41.889807],[119.334399,41.871539],[119.312841,41.80555],[119.292515,41.790827],[119.317769,41.764049],[119.319001,41.727435],[119.299907,41.705545],[119.307914,41.657273],[119.342406,41.617914],[119.415703,41.590169],[119.420015,41.567785],[119.362116,41.566442],[119.361501,41.545841],[119.406464,41.503276],[119.401537,41.472343],[119.378131,41.459787],[119.376283,41.422102],[119.309762,41.405944],[119.330704,41.385293],[119.296211,41.325097],[119.239545,41.31431],[119.2494,41.279689],[119.209364,41.244599],[119.204436,41.222546],[119.169943,41.222996],[119.189038,41.198234],[119.126212,41.138767],[119.081248,41.131555],[119.080632,41.095936],[119.037516,41.067516],[118.964836,41.079246],[118.937118,41.052625],[118.951901,41.018317],[119.013495,41.007479],[119.00056,40.967273],[118.977154,40.959138],[118.977154,40.959138],[118.916792,40.969984],[118.90201,40.960946],[118.873061,40.847866],[118.845959,40.822057],[118.878604,40.783098],[118.907553,40.775394],[118.895234,40.75409],[118.950053,40.747743],[118.96114,40.72008],[119.011031,40.687414],[119.028277,40.692406],[119.054763,40.664721],[119.115125,40.666536],[119.165632,40.69286],[119.184726,40.680153],[119.14469,40.632482],[119.162552,40.600228],[119.177951,40.609315],[119.230921,40.603863],[119.22045,40.569322],[119.256175,40.543404],[119.30237,40.530215],[119.429254,40.540221],[119.477913,40.533399],[119.503783,40.553864],[119.559217,40.547952],[119.572152,40.523846],[119.553674,40.502007],[119.604797,40.455119],[119.586934,40.375381],[119.598021,40.334335],[119.651608,40.271808],[119.639289,40.231613],[119.639289,40.231613],[119.671934,40.23938],[119.716898,40.195966],[119.745847,40.207851],[119.760629,40.136056],[119.736608,40.104936],[119.772332,40.08113],[119.783419,40.046778],[119.783419,40.046778],[119.787115,40.041739],[119.787115,40.041739],[119.81668,40.050443],[119.81668,40.050443],[119.854252,40.033033],[119.845629,40.000949],[119.845629,40.000949],[119.854252,39.98857],[119.91831,39.989946],[119.941715,40.009659],[119.947259,40.040364],[120.092005,40.077466],[120.134504,40.074719],[120.161606,40.096239],[120.273091,40.127362],[120.371641,40.174478],[120.451097,40.177679],[120.491749,40.20008],[120.523778,40.256737],[120.52193,40.304676],[120.537329,40.325211],[120.602618,40.36079],[120.596459,40.399084],[120.617401,40.41959],[120.616169,40.444645],[120.619249,40.460128],[120.666676,40.467413],[120.693777,40.505647],[120.72211,40.515657],[120.72827,40.539311],[120.822509,40.59432],[120.837291,40.644289],[120.8299,40.671076],[120.861313,40.684692],[120.939537,40.686507],[120.983269,40.712822],[121.032544,40.709193],[121.028848,40.746382],[120.991276,40.744115],[120.980189,40.766329],[120.994356,40.790801],[120.971566,40.805751],[121.00729,40.807563],[121.010986,40.784457],[121.086747,40.79805],[121.076892,40.815716],[121.096602,40.839717],[121.126167,40.86914],[121.177906,40.873665],[121.23642,40.851035],[121.290622,40.851488],[121.439064,40.830208],[121.440296,40.88181],[121.499426,40.880001],[121.526527,40.85194],[121.55486,40.849677],[121.553013,40.817528],[121.576418,40.837906],[121.626309,40.844244],[121.682976,40.829755],[121.732251,40.846961],[121.735331,40.862351],[121.778446,40.886787],[121.816019,40.894931],[121.84312,40.831567],[121.883772,40.802127],[121.934279,40.79805],[121.936127,40.711462],[121.951525,40.680607],[122.025438,40.674253],[122.06609,40.64883],[122.122141,40.657457],[122.148626,40.671983],[122.133843,40.614313],[122.150474,40.588413],[122.245944,40.519752],[122.231162,40.505192],[122.265038,40.48016],[122.221923,40.481071],[122.240401,40.461039],[122.250872,40.445555],[122.229314,40.424146],[122.186814,40.422779],[122.198517,40.382219],[122.152322,40.357597],[122.135691,40.374925],[122.111054,40.348932],[122.138155,40.338897],[122.110438,40.315629],[122.079641,40.332967],[122.040221,40.322017],[122.039605,40.260391],[122.02667,40.244862],[121.940438,40.242121],[121.950293,40.204194],[121.98109,40.173106],[122.003264,40.172191],[121.995257,40.128277],[121.956453,40.133311],[121.910257,40.072887],[121.824642,40.025701],[121.796309,39.999116],[121.779062,39.942702],[121.76428,39.933525],[121.699606,39.937196],[121.626925,39.882569],[121.572107,39.865116],[121.541926,39.874302],[121.530223,39.851334],[121.472325,39.802155],[121.487107,39.760303],[121.45939,39.747881],[121.502506,39.703233],[121.482796,39.659478],[121.451999,39.658095],[121.450151,39.624914],[121.325731,39.601402],[121.299246,39.606013],[121.263521,39.589873],[121.226565,39.554814],[121.224717,39.519275],[121.268449,39.482794],[121.286927,39.507271],[121.301709,39.476327],[121.245659,39.456923],[121.270296,39.434277],[121.246891,39.421334],[121.245659,39.389427],[121.270296,39.374162],[121.307869,39.391277],[121.324499,39.371386],[121.35468,39.377863],[121.432904,39.357506],[121.435984,39.329736],[121.466781,39.320014],[121.474788,39.296398],[121.508665,39.29223],[121.51544,39.286672],[121.562252,39.322792],[121.621382,39.326033],[121.72486,39.364447],[121.711925,39.33992],[121.7187,39.320477],[121.667577,39.310754],[121.672505,39.275554],[121.623846,39.285745],[121.589353,39.263044],[121.631237,39.22643],[121.591201,39.228748],[121.586889,39.193506],[121.604136,39.166136],[121.639244,39.166136],[121.68236,39.117863],[121.631853,39.077921],[121.605983,39.080708],[121.642324,39.11972],[121.590585,39.154999],[121.562252,39.127149],[121.599208,39.098824],[121.581962,39.075598],[121.508049,39.034237],[121.431057,39.027263],[121.370695,39.060264],[121.317108,39.012384],[121.341129,38.980757],[121.275224,38.971917],[121.204391,38.941202],[121.180369,38.959819],[121.128014,38.958888],[121.08921,38.922115],[121.094138,38.894173],[121.129862,38.879266],[121.110768,38.862026],[121.12863,38.799089],[121.112,38.776231],[121.13787,38.723023],[121.198848,38.721623],[121.259825,38.786495],[121.280767,38.786961],[121.288775,38.78976],[121.315876,38.793958],[121.359608,38.822406],[121.399028,38.812613],[121.509897,38.817743],[121.564715,38.874607],[121.618302,38.862492],[121.675585,38.86156],[121.708845,38.872744],[121.719316,38.920252],[121.655874,38.946788],[121.618918,38.950046],[121.66265,38.966333],[121.671273,39.010059],[121.73841,38.998898],[121.756889,39.025869],[121.790149,39.022614],[121.804932,38.970986],[121.863446,38.942598],[121.920728,38.969591],[121.905946,38.997503],[121.852975,39.035631],[121.8887,39.027263],[121.929352,39.024939],[121.907178,39.055617],[121.923192,39.053758],[121.963228,39.030053],[122.013735,39.073275],[122.061778,39.060264],[122.071634,39.074204],[122.048228,39.101146],[122.088264,39.112291],[122.127684,39.144788],[122.167104,39.158711],[122.123988,39.172631],[122.117213,39.213911],[122.160329,39.238019],[122.242865,39.267678],[122.274893,39.322329],[122.30877,39.346399],[122.366053,39.370461],[122.412864,39.411625],[122.455364,39.408388],[122.467682,39.403301],[122.51203,39.413474],[122.532972,39.419947],[122.581631,39.464316],[122.637066,39.488799],[122.649385,39.516505],[122.682645,39.514658],[122.808913,39.559889],[122.847101,39.581571],[122.860652,39.604629],[122.941956,39.604629],[122.972753,39.594946],[122.978912,39.616156],[123.021412,39.64335],[123.010941,39.655331],[123.103332,39.676983],[123.146448,39.647037],[123.166774,39.674219],[123.212969,39.665928],[123.215433,39.696786],[123.253005,39.689879],[123.286882,39.704154],[123.270251,39.714743],[123.274563,39.753862],[123.350939,39.750641],[123.388512,39.74742],[123.392823,39.723949],[123.477823,39.74696],[123.521555,39.772724],[123.534489,39.788361]]],[[[122.63953,39.286209],[122.593334,39.278334],[122.539131,39.308439],[122.50895,39.290377],[122.57732,39.269994],[122.67895,39.268605],[122.673406,39.269531],[122.662935,39.273701],[122.655544,39.277407],[122.640761,39.288061],[122.63953,39.286209]]],[[[122.318625,39.170775],[122.345111,39.144788],[122.366053,39.174951],[122.398697,39.16196],[122.383299,39.190723],[122.393154,39.213448],[122.343263,39.203246],[122.322321,39.177271],[122.322937,39.174487],[122.319241,39.172167],[122.318625,39.170775]]],[[[122.691884,39.23292],[122.696812,39.206492],[122.751631,39.229675],[122.740544,39.248679],[122.635834,39.241727],[122.628443,39.231993],[122.690037,39.234774],[122.691268,39.23431],[122.691884,39.23292]]],[[[122.738696,39.034701],[122.704819,39.044463],[122.733152,39.014244],[122.75779,39.009594],[122.739312,39.036561],[122.738696,39.034701]]],[[[123.022644,39.546507],[122.96105,39.551122],[122.945035,39.520198],[122.995542,39.495264],[123.036194,39.533123],[123.022644,39.546507]]],[[[122.503407,39.241263],[122.502175,39.224112],[122.547755,39.229211],[122.503407,39.241263]]],[[[120.786784,40.473787],[120.83298,40.491995],[120.8299,40.516112],[120.805262,40.525666],[120.774465,40.48016],[120.786784,40.473787]]],[[[123.086702,39.426881],[123.090397,39.450915],[123.054057,39.457847],[123.086702,39.426881]]],[[[123.160614,39.025404],[123.205578,39.057011],[123.20065,39.077921],[123.145832,39.091857],[123.143984,39.038885],[123.160614,39.025404]]],[[[123.716807,39.74512],[123.756843,39.754322],[123.719887,39.763063],[123.716807,39.74512]]]]}},{"type":"Feature","properties":{"adcode":220000,"name":"吉林省","center":[125.3245,43.886841],"centroid":[126.171208,43.703954],"childrenNum":9,"level":"province","parent":{"adcode":100000},"subFeatureIndex":6,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[129.601492,42.415116],[129.601492,42.422627],[129.591021,42.447803],[129.627361,42.462816],[129.651999,42.426603],[129.704354,42.427045],[129.748701,42.471204],[129.738846,42.500332],[129.749933,42.546644],[129.746237,42.58455],[129.786889,42.615387],[129.754245,42.645768],[129.796744,42.681854],[129.767179,42.707806],[129.78381,42.762752],[129.810911,42.795257],[129.816454,42.851003],[129.835549,42.866796],[129.846636,42.918533],[129.874969,42.923792],[129.856491,42.951833],[129.868193,42.97373],[129.903918,42.968475],[129.897143,43.001748],[129.954425,43.010938],[129.963664,42.978547],[130.002468,42.981174],[130.027106,42.9676],[130.072685,42.971541],[130.10841,42.989929],[130.144134,42.976357],[130.120729,42.954461],[130.127504,42.932556],[130.10225,42.922916],[130.136127,42.90363],[130.17062,42.912397],[130.21004,42.902315],[130.258083,42.90626],[130.277793,42.892232],[130.258083,42.860655],[130.245148,42.799209],[130.242069,42.738582],[130.257467,42.710884],[130.290112,42.702968],[130.333228,42.64973],[130.373264,42.630799],[130.388046,42.603054],[130.420691,42.617148],[130.44656,42.607459],[130.423771,42.574855],[130.435474,42.553257],[130.476125,42.570007],[130.459495,42.588075],[130.482285,42.626837],[130.522937,42.622433],[130.520473,42.593362],[130.558661,42.495919],[130.585763,42.485328],[130.581451,42.435437],[130.645509,42.426603],[130.600545,42.450453],[130.599929,42.486211],[130.565437,42.506509],[130.570364,42.557224],[130.622719,42.573092],[130.633806,42.603494],[130.592538,42.671295],[130.521089,42.702089],[130.464423,42.688453],[130.425003,42.706926],[130.40714,42.731548],[130.46627,42.772417],[130.532792,42.787352],[130.562357,42.815015],[130.603625,42.819405],[130.665835,42.847932],[130.708335,42.846615],[130.719422,42.831695],[130.75453,42.845738],[130.784095,42.842227],[130.801957,42.879515],[130.845073,42.881269],[130.890653,42.852758],[130.912826,42.870744],[130.949783,42.876884],[130.981812,42.857145],[131.043406,42.862848],[131.017536,42.915027],[131.034167,42.929051],[131.114855,42.915027],[131.145652,42.9365],[131.151195,42.968475],[131.115471,42.975482],[131.11855,43.007875],[131.102536,43.021002],[131.120398,43.068238],[131.171521,43.06955],[131.173985,43.111506],[131.207861,43.1316],[131.218948,43.191405],[131.201086,43.203185],[131.206014,43.237202],[131.255289,43.265099],[131.269455,43.297775],[131.275615,43.369165],[131.314419,43.392653],[131.295941,43.441774],[131.314419,43.461325],[131.31873,43.499539],[131.304564,43.502144],[131.294093,43.470012],[131.234963,43.475224],[131.201086,43.442209],[131.175217,43.444816],[131.142572,43.425695],[131.026775,43.508655],[130.959638,43.48608],[130.907283,43.434387],[130.864167,43.437863],[130.841378,43.454374],[130.822899,43.503446],[130.776704,43.52341],[130.727429,43.560284],[130.671378,43.565054],[130.665835,43.583698],[130.623335,43.589767],[130.630726,43.622268],[130.57098,43.626167],[130.57098,43.626167],[130.501995,43.636563],[130.488444,43.65605],[130.437937,43.646091],[130.412684,43.652586],[130.394206,43.703227],[130.423155,43.745179],[130.382503,43.777164],[130.381887,43.817768],[130.362793,43.844967],[130.386198,43.85403],[130.368336,43.894151],[130.381887,43.910106],[130.338155,43.963975],[130.364025,43.992399],[130.365256,44.044042],[130.319061,44.03974],[130.307358,44.002731],[130.27225,43.981634],[130.262395,43.949328],[130.208192,43.948466],[130.153373,43.915711],[130.143518,43.878624],[130.116417,43.878192],[130.110873,43.852735],[130.079461,43.835039],[130.027722,43.851872],[130.009243,43.889407],[130.022794,43.917866],[130.017867,43.961821],[129.979062,44.015644],[129.951345,44.027263],[129.907614,44.023821],[129.881128,44.000148],[129.868193,44.012631],[129.802904,43.964837],[129.780114,43.892857],[129.739462,43.895876],[129.743158,43.876035],[129.699426,43.8838],[129.650767,43.873016],[129.529427,43.870427],[129.467833,43.874741],[129.449971,43.850578],[129.417942,43.843672],[129.406855,43.819496],[129.348341,43.798333],[129.30892,43.812155],[129.289826,43.797038],[129.254718,43.819496],[129.211602,43.784509],[129.232544,43.709284],[129.214066,43.695006],[129.217146,43.648689],[129.232544,43.635263],[129.23008,43.593234],[129.169102,43.561585],[129.145081,43.570258],[129.093958,43.547706],[129.037907,43.540332],[129.013886,43.522976],[128.962763,43.53903],[128.949828,43.553779],[128.878379,43.539898],[128.834647,43.587599],[128.821097,43.637429],[128.78722,43.686784],[128.768126,43.732207],[128.729322,43.736964],[128.760119,43.755554],[128.739177,43.806972],[128.719467,43.816905],[128.760734,43.857482],[128.729938,43.889838],[128.696061,43.903207],[128.636315,43.891132],[128.64001,43.948035],[128.610445,43.960529],[128.584576,43.990246],[128.574721,44.047914],[128.529141,44.112401],[128.471859,44.157501],[128.450301,44.203423],[128.471859,44.247596],[128.453997,44.257884],[128.472475,44.320001],[128.446605,44.339694],[128.475555,44.346114],[128.481714,44.375637],[128.457076,44.409848],[128.463236,44.431647],[128.427511,44.473512],[128.397946,44.483761],[128.372693,44.514495],[128.295084,44.480772],[128.293237,44.467961],[128.228563,44.445748],[128.211317,44.431647],[128.172512,44.34697],[128.137404,44.357668],[128.094904,44.354673],[128.074578,44.370075],[128.049941,44.349965],[128.065339,44.307155],[128.101679,44.293449],[128.064107,44.251454],[128.104143,44.230017],[128.09244,44.181539],[128.060411,44.168663],[128.088129,44.158359],[128.091208,44.133022],[128.042549,44.103807],[127.950158,44.088334],[127.912586,44.064687],[127.862695,44.062967],[127.846065,44.081886],[127.808492,44.086615],[127.783239,44.071997],[127.729036,44.09908],[127.735811,44.11412],[127.712406,44.199133],[127.681609,44.166946],[127.641573,44.193555],[127.626174,44.187977],[127.59045,44.227872],[127.623711,44.278025],[127.579363,44.310581],[127.486356,44.410275],[127.50853,44.437202],[127.463566,44.484615],[127.465414,44.516628],[127.485124,44.528576],[127.536247,44.522176],[127.570124,44.55033],[127.557189,44.575488],[127.392733,44.632158],[127.275705,44.640249],[127.261538,44.61299],[127.214111,44.624917],[127.228893,44.642804],[127.182082,44.644507],[127.138966,44.607451],[127.094619,44.615972],[127.089691,44.593816],[127.049655,44.566961],[127.041648,44.591258],[127.044112,44.653874],[127.030561,44.673454],[127.041032,44.712169],[126.9973,44.764882],[126.984366,44.823914],[126.999764,44.87398],[127.021938,44.898997],[127.073061,44.907051],[127.092771,44.94688],[127.050271,45.004034],[127.018242,45.024341],[126.984981,45.067893],[126.970815,45.070852],[126.96404,45.132104],[126.85625,45.145613],[126.792808,45.135481],[126.787265,45.159118],[126.732446,45.187385],[126.685635,45.187807],[126.640055,45.214373],[126.644983,45.225334],[126.569222,45.252725],[126.540273,45.23882],[126.519331,45.248091],[126.402919,45.222805],[126.356107,45.185698],[126.293282,45.180214],[126.285274,45.162494],[126.235383,45.140125],[126.225528,45.154054],[126.166398,45.13337],[126.142992,45.147723],[126.091869,45.149411],[126.047522,45.170933],[125.998247,45.162072],[125.992703,45.192447],[125.957595,45.201303],[125.915095,45.196664],[125.849805,45.23882],[125.823936,45.237978],[125.815929,45.264942],[125.761726,45.291472],[125.726001,45.336503],[125.695205,45.352066],[125.712451,45.389485],[125.711835,45.477677],[125.687813,45.514173],[125.660096,45.507043],[125.61698,45.517947],[125.583104,45.491942],[125.497488,45.469283],[125.480242,45.486488],[125.424807,45.485649],[125.434662,45.462988],[125.398322,45.416797],[125.361981,45.392847],[125.319482,45.422678],[125.301619,45.402092],[125.248649,45.417637],[125.189518,45.39915],[125.137779,45.409655],[125.097127,45.38276],[125.06633,45.39915],[125.08912,45.420998],[125.0497,45.428558],[125.025678,45.493201],[124.961005,45.495299],[124.936983,45.53388],[124.911114,45.535976],[124.884628,45.495299],[124.886476,45.442836],[124.839665,45.455852],[124.792853,45.436958],[124.776223,45.468024],[124.729412,45.444096],[124.690607,45.452493],[124.625318,45.437377],[124.575427,45.451234],[124.579738,45.424358],[124.544014,45.411756],[124.507058,45.424778],[124.480572,45.456271],[124.398652,45.440737],[124.374015,45.45795],[124.352457,45.496557],[124.369087,45.512915],[124.348761,45.546874],[124.287783,45.539329],[124.264377,45.555256],[124.273001,45.584163],[124.238508,45.591702],[124.226805,45.633564],[124.162132,45.616404],[124.128255,45.641933],[124.147349,45.665359],[124.122096,45.669123],[124.13503,45.690448],[124.10177,45.700898],[124.098074,45.722628],[124.054342,45.751449],[124.014922,45.749779],[124.001987,45.770655],[124.064197,45.802372],[124.03648,45.83824],[124.067277,45.840325],[124.061118,45.886168],[123.996444,45.906993],[123.968727,45.936551],[123.973654,45.973997],[124.011842,45.981899],[123.989053,46.011833],[124.040176,46.01973],[124.034016,46.045074],[124.009995,46.057534],[124.015538,46.088257],[123.99398,46.101123],[124.01677,46.118549],[123.991516,46.143019],[124.001987,46.166649],[123.971806,46.170379],[123.956408,46.206009],[123.979814,46.228784],[123.952096,46.256516],[123.960103,46.288369],[123.936082,46.286715],[123.917604,46.25693],[123.896046,46.303668],[123.84985,46.302428],[123.775938,46.263136],[123.726047,46.255688],[123.673692,46.258585],[123.604706,46.251964],[123.569598,46.223816],[123.569598,46.223816],[123.499381,46.259826],[123.452569,46.233338],[123.430396,46.243687],[123.357099,46.232096],[123.357099,46.232096],[123.320758,46.254447],[123.286266,46.250308],[123.248078,46.273065],[123.178476,46.248239],[123.128585,46.210565],[123.127354,46.174523],[123.102716,46.172037],[123.112571,46.130163],[123.070071,46.123527],[123.04605,46.099878],[122.792898,46.073313],[122.828623,45.912406],[122.80029,45.856583],[122.772572,45.856583],[122.752246,45.834905],[122.792283,45.766063],[122.751015,45.735996],[122.741775,45.705077],[122.671558,45.70048],[122.650001,45.731401],[122.640761,45.771072],[122.603189,45.778169],[122.556378,45.82156],[122.522501,45.786933],[122.504639,45.786933],[122.496016,45.85825],[122.446125,45.916986],[122.362357,45.917403],[122.372828,45.856166],[122.337719,45.859917],[122.301379,45.813218],[122.253952,45.7982],[122.236705,45.831569],[122.200981,45.857],[122.091344,45.882002],[122.085184,45.912406],[122.040221,45.959022],[121.92812,45.988552],[121.923808,46.004767],[121.864062,46.002272],[121.843736,46.024301],[121.819098,46.023054],[121.761816,45.998947],[121.809243,45.961102],[121.821562,45.918235],[121.805548,45.900746],[121.817251,45.875336],[121.769823,45.84366],[121.766744,45.830318],[121.766744,45.830318],[121.754425,45.794862],[121.697142,45.76314],[121.657106,45.770238],[121.644172,45.752284],[121.666345,45.727641],[121.713773,45.701734],[121.811091,45.687103],[121.812323,45.704659],[121.867142,45.719703],[121.934279,45.71051],[121.970004,45.692956],[122.003264,45.623102],[121.995873,45.59882],[121.966308,45.596308],[121.993409,45.552741],[122.002648,45.507882],[122.064242,45.472641],[122.168336,45.439897],[122.180039,45.409655],[122.146778,45.374352],[122.147394,45.295682],[122.239169,45.276313],[122.22993,45.206784],[122.192358,45.180636],[122.143082,45.183167],[122.109822,45.142236],[122.119677,45.068739],[122.098735,45.02138],[122.074713,45.006573],[122.087032,44.95281],[122.079025,44.914256],[122.04946,44.912985],[122.098119,44.81882],[122.099967,44.7823],[122.168952,44.770405],[122.142467,44.753833],[122.110438,44.767856],[122.10243,44.736406],[122.152322,44.744057],[122.161561,44.728328],[122.117213,44.701961],[122.103046,44.67388],[122.113517,44.615546],[122.13138,44.577619],[122.196053,44.559712],[122.224386,44.526016],[122.228082,44.480345],[122.28598,44.477783],[122.294604,44.41113],[122.291524,44.310152],[122.271198,44.255741],[122.319241,44.233018],[122.483081,44.236877],[122.515726,44.251025],[122.641993,44.283595],[122.675254,44.285738],[122.702971,44.319145],[122.76087,44.369648],[122.85634,44.398304],[123.025108,44.493153],[123.06576,44.505959],[123.12489,44.5098],[123.137209,44.486322],[123.125506,44.455147],[123.142136,44.428228],[123.114419,44.40258],[123.128585,44.367081],[123.196955,44.34483],[123.277027,44.25274],[123.286882,44.211574],[123.323838,44.179823],[123.386664,44.161794],[123.362642,44.133452],[123.350939,44.092633],[123.32815,44.084035],[123.331229,44.028984],[123.365722,44.013922],[123.400831,43.979481],[123.37065,43.970006],[123.397135,43.954929],[123.467968,43.853599],[123.461809,43.822518],[123.498149,43.771114],[123.48275,43.737396],[123.520323,43.708419],[123.518475,43.682024],[123.536953,43.633964],[123.510468,43.624867],[123.5117,43.592801],[123.421157,43.598435],[123.434091,43.575461],[123.461193,43.568523],[123.452569,43.545971],[123.452569,43.545971],[123.360179,43.567223],[123.304744,43.550742],[123.329998,43.519071],[123.315831,43.492159],[123.36449,43.483475],[123.382968,43.469143],[123.419925,43.410046],[123.442098,43.437863],[123.486446,43.44525],[123.519707,43.402219],[123.54496,43.415262],[123.608402,43.366119],[123.703873,43.37047],[123.710032,43.417001],[123.749452,43.439167],[123.747604,43.472184],[123.79688,43.489988],[123.857858,43.459153],[123.857858,43.459153],[123.852314,43.406133],[123.881263,43.392218],[123.881263,43.392218],[123.896046,43.361333],[123.964415,43.34088],[124.032784,43.280786],[124.099306,43.292983],[124.117168,43.2773],[124.114088,43.247229],[124.168291,43.244177],[124.215102,43.255947],[124.228653,43.235022],[124.27608,43.233278],[124.287167,43.207983],[124.273617,43.17875],[124.366007,43.121554],[124.425754,43.076107],[124.333363,42.997371],[124.369703,42.972854],[124.42329,42.975482],[124.442384,42.958841],[124.431913,42.930803],[124.38079,42.912835],[124.371551,42.880831],[124.435609,42.880831],[124.466406,42.847054],[124.586514,42.905384],[124.607456,42.937376],[124.632093,42.949642],[124.635173,42.972854],[124.658579,42.972854],[124.677673,43.002185],[124.686912,43.051185],[124.719557,43.069987],[124.755281,43.074359],[124.785462,43.117185],[124.882781,43.13422],[124.88894,43.074796],[124.840897,43.032377],[124.869846,42.988178],[124.87231,42.962344],[124.84952,42.882585],[124.856911,42.824234],[124.874157,42.789987],[124.897563,42.787791],[124.92836,42.819844],[124.975171,42.802722],[124.996729,42.745174],[124.968396,42.722756],[124.99057,42.677455],[125.014592,42.666014],[125.010896,42.63212],[125.038613,42.615387],[125.097127,42.622433],[125.082961,42.591159],[125.089736,42.567803],[125.066946,42.534738],[125.090968,42.515773],[125.068794,42.499449],[125.105135,42.490624],[125.150098,42.458842],[125.140243,42.44692],[125.186439,42.427928],[125.185823,42.38197],[125.203685,42.366938],[125.167345,42.351903],[125.175352,42.308102],[125.224011,42.30102],[125.264047,42.312528],[125.299156,42.289953],[125.27575,42.266928],[125.27575,42.231045],[125.312706,42.219966],[125.280677,42.175187],[125.312706,42.197359],[125.305931,42.146351],[125.357054,42.145464],[125.368141,42.182726],[125.41372,42.156112],[125.458068,42.160105],[125.458068,42.160105],[125.490097,42.136145],[125.446365,42.098411],[125.414336,42.101964],[125.416184,42.063766],[125.363213,42.017097],[125.369989,42.002868],[125.29854,41.974399],[125.291764,41.958825],[125.35151,41.92811],[125.307779,41.924548],[125.294844,41.822945],[125.319482,41.776993],[125.319482,41.776993],[125.323177,41.771191],[125.323177,41.771191],[125.336112,41.768067],[125.336112,41.768067],[125.332416,41.711354],[125.317018,41.676944],[125.344119,41.672474],[125.412488,41.691246],[125.446981,41.67605],[125.461148,41.642516],[125.450061,41.597777],[125.479626,41.544946],[125.507343,41.534195],[125.493176,41.509103],[125.533212,41.479069],[125.534444,41.428833],[125.547995,41.401006],[125.581256,41.396517],[125.589879,41.359245],[125.610205,41.365084],[125.637306,41.34442],[125.62006,41.318355],[125.642234,41.296327],[125.646545,41.264396],[125.685349,41.273842],[125.695205,41.244599],[125.749407,41.245499],[125.758646,41.232449],[125.73832,41.178418],[125.791291,41.167607],[125.759878,41.132908],[125.734009,41.125695],[125.712451,41.095485],[125.739552,41.08917],[125.726617,41.055332],[125.684118,41.021929],[125.674879,40.974503],[125.650241,40.970888],[125.635458,40.94151],[125.589263,40.931112],[125.584335,40.891764],[125.652089,40.91619],[125.687813,40.897645],[125.707523,40.866877],[125.778356,40.897645],[125.817161,40.866877],[125.860892,40.888597],[125.875059,40.908501],[125.921254,40.882715],[125.959442,40.88181],[126.008102,40.936537],[126.041362,40.928851],[126.051833,40.96185],[126.08263,40.976762],[126.066,40.997542],[126.1085,41.011995],[126.099877,41.036376],[126.133753,41.063906],[126.124514,41.092327],[126.16763,41.094583],[126.187956,41.113072],[126.188572,41.114875],[126.295129,41.171661],[126.332086,41.236949],[126.35426,41.244599],[126.373354,41.289133],[126.437411,41.353405],[126.497158,41.374965],[126.524259,41.349362],[126.539041,41.366881],[126.497158,41.406842],[126.559983,41.548081],[126.582773,41.563307],[126.564295,41.608965],[126.592628,41.624624],[126.608027,41.669345],[126.644983,41.661297],[126.688099,41.674262],[126.724439,41.710907],[126.690562,41.728328],[126.694874,41.751103],[126.723207,41.753335],[126.8002,41.702865],[126.809439,41.749317],[126.848243,41.734134],[126.85625,41.760031],[126.887047,41.791719],[126.931395,41.812687],[126.952953,41.804212],[126.940018,41.773423],[126.979438,41.776993],[127.005923,41.749317],[127.050887,41.744852],[127.057662,41.703758],[127.037952,41.676944],[127.103242,41.647883],[127.093387,41.629993],[127.127263,41.622388],[127.135887,41.600463],[127.178386,41.600015],[127.125416,41.566442],[127.11864,41.540018],[127.164836,41.542706],[127.188241,41.527475],[127.241212,41.520754],[127.28864,41.501932],[127.253531,41.486691],[127.296031,41.486243],[127.360704,41.466065],[127.360088,41.479518],[127.405668,41.478621],[127.419835,41.460235],[127.459255,41.461581],[127.465414,41.479069],[127.526392,41.467859],[127.547334,41.477276],[127.563964,41.432871],[127.618783,41.432871],[127.636645,41.413575],[127.684073,41.422999],[127.780159,41.427038],[127.854688,41.420755],[127.86947,41.4037],[127.882405,41.448124],[127.909506,41.42973],[127.93168,41.444984],[127.970484,41.438704],[127.991426,41.421204],[128.000049,41.442741],[128.040085,41.393375],[128.110919,41.393375],[128.090593,41.374516],[128.114614,41.364186],[128.169433,41.404149],[128.203925,41.410882],[128.243345,41.477276],[128.238418,41.497898],[128.301244,41.540018],[128.317874,41.575844],[128.30186,41.627756],[128.248889,41.681414],[128.208853,41.688565],[128.163889,41.721628],[128.147875,41.78101],[128.112766,41.793504],[128.104143,41.843457],[128.115846,41.896935],[128.106607,41.949923],[128.033926,42.000199],[128.090593,42.022877],[128.294468,42.026434],[128.405338,42.018876],[128.466316,42.020654],[128.49896,42.000644],[128.598127,42.007315],[128.60675,42.02999],[128.637547,42.035324],[128.658489,42.018876],[128.70222,42.02021],[128.737945,42.050435],[128.779213,42.033546],[128.795227,42.042436],[128.898089,42.016653],[128.952908,42.025545],[128.954755,42.083756],[128.971386,42.097079],[129.008958,42.09175],[129.039139,42.107736],[129.048378,42.137476],[129.113668,42.140583],[129.166639,42.188047],[129.215914,42.208442],[129.209138,42.237692],[129.181421,42.242122],[129.183269,42.262056],[129.215914,42.265157],[129.231312,42.283755],[129.208522,42.293052],[129.260261,42.335536],[129.231312,42.356325],[129.240551,42.376223],[129.326167,42.389927],[129.30892,42.403628],[129.331094,42.429695],[129.356348,42.427045],[129.342181,42.441179],[129.368051,42.459284],[129.366203,42.428811],[129.392688,42.42837],[129.400695,42.449128],[129.452434,42.441179],[129.49863,42.412023],[129.546057,42.361632],[129.578086,42.380202],[129.569463,42.399208],[129.601492,42.415116]]]]}},{"type":"Feature","properties":{"adcode":230000,"name":"黑龙江省","center":[126.642464,45.756967],"centroid":[127.693027,48.040465],"childrenNum":13,"level":"province","parent":{"adcode":100000},"subFeatureIndex":7,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[123.569598,46.223816],[123.604706,46.251964],[123.673692,46.258585],[123.726047,46.255688],[123.775938,46.263136],[123.84985,46.302428],[123.896046,46.303668],[123.917604,46.25693],[123.936082,46.286715],[123.960103,46.288369],[123.952096,46.256516],[123.979814,46.228784],[123.956408,46.206009],[123.971806,46.170379],[124.001987,46.166649],[123.991516,46.143019],[124.01677,46.118549],[123.99398,46.101123],[124.015538,46.088257],[124.009995,46.057534],[124.034016,46.045074],[124.040176,46.01973],[123.989053,46.011833],[124.011842,45.981899],[123.973654,45.973997],[123.968727,45.936551],[123.996444,45.906993],[124.061118,45.886168],[124.067277,45.840325],[124.03648,45.83824],[124.064197,45.802372],[124.001987,45.770655],[124.014922,45.749779],[124.054342,45.751449],[124.098074,45.722628],[124.10177,45.700898],[124.13503,45.690448],[124.122096,45.669123],[124.147349,45.665359],[124.128255,45.641933],[124.162132,45.616404],[124.226805,45.633564],[124.238508,45.591702],[124.273001,45.584163],[124.264377,45.555256],[124.287783,45.539329],[124.348761,45.546874],[124.369087,45.512915],[124.352457,45.496557],[124.374015,45.45795],[124.398652,45.440737],[124.480572,45.456271],[124.507058,45.424778],[124.544014,45.411756],[124.579738,45.424358],[124.575427,45.451234],[124.625318,45.437377],[124.690607,45.452493],[124.729412,45.444096],[124.776223,45.468024],[124.792853,45.436958],[124.839665,45.455852],[124.886476,45.442836],[124.884628,45.495299],[124.911114,45.535976],[124.936983,45.53388],[124.961005,45.495299],[125.025678,45.493201],[125.0497,45.428558],[125.08912,45.420998],[125.06633,45.39915],[125.097127,45.38276],[125.137779,45.409655],[125.189518,45.39915],[125.248649,45.417637],[125.301619,45.402092],[125.319482,45.422678],[125.361981,45.392847],[125.398322,45.416797],[125.434662,45.462988],[125.424807,45.485649],[125.480242,45.486488],[125.497488,45.469283],[125.583104,45.491942],[125.61698,45.517947],[125.660096,45.507043],[125.687813,45.514173],[125.711835,45.477677],[125.712451,45.389485],[125.695205,45.352066],[125.726001,45.336503],[125.761726,45.291472],[125.815929,45.264942],[125.823936,45.237978],[125.849805,45.23882],[125.915095,45.196664],[125.957595,45.201303],[125.992703,45.192447],[125.998247,45.162072],[126.047522,45.170933],[126.091869,45.149411],[126.142992,45.147723],[126.166398,45.13337],[126.225528,45.154054],[126.235383,45.140125],[126.285274,45.162494],[126.293282,45.180214],[126.356107,45.185698],[126.402919,45.222805],[126.519331,45.248091],[126.540273,45.23882],[126.569222,45.252725],[126.644983,45.225334],[126.640055,45.214373],[126.685635,45.187807],[126.732446,45.187385],[126.787265,45.159118],[126.792808,45.135481],[126.85625,45.145613],[126.96404,45.132104],[126.970815,45.070852],[126.984981,45.067893],[127.018242,45.024341],[127.050271,45.004034],[127.092771,44.94688],[127.073061,44.907051],[127.021938,44.898997],[126.999764,44.87398],[126.984366,44.823914],[126.9973,44.764882],[127.041032,44.712169],[127.030561,44.673454],[127.044112,44.653874],[127.041648,44.591258],[127.049655,44.566961],[127.089691,44.593816],[127.094619,44.615972],[127.138966,44.607451],[127.182082,44.644507],[127.228893,44.642804],[127.214111,44.624917],[127.261538,44.61299],[127.275705,44.640249],[127.392733,44.632158],[127.557189,44.575488],[127.570124,44.55033],[127.536247,44.522176],[127.485124,44.528576],[127.465414,44.516628],[127.463566,44.484615],[127.50853,44.437202],[127.486356,44.410275],[127.579363,44.310581],[127.623711,44.278025],[127.59045,44.227872],[127.626174,44.187977],[127.641573,44.193555],[127.681609,44.166946],[127.712406,44.199133],[127.735811,44.11412],[127.729036,44.09908],[127.783239,44.071997],[127.808492,44.086615],[127.846065,44.081886],[127.862695,44.062967],[127.912586,44.064687],[127.950158,44.088334],[128.042549,44.103807],[128.091208,44.133022],[128.088129,44.158359],[128.060411,44.168663],[128.09244,44.181539],[128.104143,44.230017],[128.064107,44.251454],[128.101679,44.293449],[128.065339,44.307155],[128.049941,44.349965],[128.074578,44.370075],[128.094904,44.354673],[128.137404,44.357668],[128.172512,44.34697],[128.211317,44.431647],[128.228563,44.445748],[128.293237,44.467961],[128.295084,44.480772],[128.372693,44.514495],[128.397946,44.483761],[128.427511,44.473512],[128.463236,44.431647],[128.457076,44.409848],[128.481714,44.375637],[128.475555,44.346114],[128.446605,44.339694],[128.472475,44.320001],[128.453997,44.257884],[128.471859,44.247596],[128.450301,44.203423],[128.471859,44.157501],[128.529141,44.112401],[128.574721,44.047914],[128.584576,43.990246],[128.610445,43.960529],[128.64001,43.948035],[128.636315,43.891132],[128.696061,43.903207],[128.729938,43.889838],[128.760734,43.857482],[128.719467,43.816905],[128.739177,43.806972],[128.760119,43.755554],[128.729322,43.736964],[128.768126,43.732207],[128.78722,43.686784],[128.821097,43.637429],[128.834647,43.587599],[128.878379,43.539898],[128.949828,43.553779],[128.962763,43.53903],[129.013886,43.522976],[129.037907,43.540332],[129.093958,43.547706],[129.145081,43.570258],[129.169102,43.561585],[129.23008,43.593234],[129.232544,43.635263],[129.217146,43.648689],[129.214066,43.695006],[129.232544,43.709284],[129.211602,43.784509],[129.254718,43.819496],[129.289826,43.797038],[129.30892,43.812155],[129.348341,43.798333],[129.406855,43.819496],[129.417942,43.843672],[129.449971,43.850578],[129.467833,43.874741],[129.529427,43.870427],[129.650767,43.873016],[129.699426,43.8838],[129.743158,43.876035],[129.739462,43.895876],[129.780114,43.892857],[129.802904,43.964837],[129.868193,44.012631],[129.881128,44.000148],[129.907614,44.023821],[129.951345,44.027263],[129.979062,44.015644],[130.017867,43.961821],[130.022794,43.917866],[130.009243,43.889407],[130.027722,43.851872],[130.079461,43.835039],[130.110873,43.852735],[130.116417,43.878192],[130.143518,43.878624],[130.153373,43.915711],[130.208192,43.948466],[130.262395,43.949328],[130.27225,43.981634],[130.307358,44.002731],[130.319061,44.03974],[130.365256,44.044042],[130.364025,43.992399],[130.338155,43.963975],[130.381887,43.910106],[130.368336,43.894151],[130.386198,43.85403],[130.362793,43.844967],[130.381887,43.817768],[130.382503,43.777164],[130.423155,43.745179],[130.394206,43.703227],[130.412684,43.652586],[130.437937,43.646091],[130.488444,43.65605],[130.501995,43.636563],[130.57098,43.626167],[130.57098,43.626167],[130.630726,43.622268],[130.623335,43.589767],[130.665835,43.583698],[130.671378,43.565054],[130.727429,43.560284],[130.776704,43.52341],[130.822899,43.503446],[130.841378,43.454374],[130.864167,43.437863],[130.907283,43.434387],[130.959638,43.48608],[131.026775,43.508655],[131.142572,43.425695],[131.175217,43.444816],[131.201086,43.442209],[131.234963,43.475224],[131.294093,43.470012],[131.304564,43.502144],[131.276847,43.495632],[131.20047,43.532089],[131.222028,43.593234],[131.216485,43.613169],[131.239274,43.670337],[131.221412,43.682024],[131.215869,43.72745],[131.232499,43.742585],[131.213405,43.801357],[131.2171,43.836334],[131.254057,43.893289],[131.26268,43.948897],[131.245434,43.95579],[131.26576,44.034578],[131.28239,44.035868],[131.287318,44.03802],[131.293477,44.043182],[131.310723,44.046623],[131.111775,44.710042],[131.090833,44.717272],[131.093297,44.746183],[131.069275,44.759783],[131.064348,44.786973],[131.016304,44.789521],[131.015688,44.814999],[130.972573,44.820094],[130.965181,44.85065],[131.07913,44.881614],[131.10192,44.898997],[131.090217,44.924427],[131.16105,44.948151],[131.20355,44.932901],[131.207861,44.913833],[131.263296,44.929935],[131.274999,44.919766],[131.313803,44.950692],[131.313803,44.965938],[131.355071,44.990068],[131.380324,44.978216],[131.409889,44.985836],[131.464708,44.963397],[131.501664,44.977793],[131.484418,44.99557],[131.529382,45.012073],[131.566338,45.045487],[131.63286,45.075078],[131.695685,45.132104],[131.687678,45.1511],[131.650722,45.159962],[131.681519,45.215217],[131.721555,45.234606],[131.759127,45.213952],[131.79362,45.211844],[131.788692,45.245984],[131.825649,45.291472],[131.82996,45.311677],[131.887858,45.342393],[131.917423,45.339448],[131.93159,45.287683],[131.976554,45.277156],[132.003655,45.25441],[132.17427,45.216903],[132.394161,45.16376],[132.76434,45.081417],[132.867202,45.061976],[132.916477,45.031109],[132.954049,45.023072],[132.98731,45.043373],[133.035969,45.054366],[133.070462,45.097051],[133.089556,45.097473],[133.107418,45.124504],[133.139447,45.127459],[133.129592,45.211422],[133.095715,45.246827],[133.110498,45.266627],[133.097563,45.284735],[133.128976,45.336924],[133.119121,45.352908],[133.144991,45.367205],[133.143759,45.430658],[133.164701,45.437377],[133.170244,45.465506],[133.203505,45.516689],[133.246005,45.517528],[133.333468,45.562379],[133.342707,45.554836],[133.393214,45.580393],[133.423395,45.584163],[133.412924,45.618079],[133.471438,45.631053],[133.448649,45.647372],[133.485605,45.658667],[133.484989,45.691702],[133.445569,45.705077],[133.454192,45.731819],[133.486837,45.740173],[133.469591,45.777751],[133.505315,45.785681],[133.469591,45.799451],[133.467743,45.834905],[133.494228,45.840325],[133.491764,45.867002],[133.51209,45.887001],[133.55459,45.893249],[133.583539,45.868669],[133.618032,45.903662],[133.614952,45.942794],[133.676546,45.94321],[133.681474,45.986473],[133.740604,46.048812],[133.745531,46.075389],[133.690713,46.133896],[133.706111,46.163333],[133.764626,46.17328],[133.794807,46.193583],[133.814517,46.230854],[133.849625,46.203939],[133.87919,46.233752],[133.867487,46.250722],[133.909987,46.254447],[133.91861,46.280924],[133.908139,46.308216],[133.922922,46.330948],[133.869335,46.338386],[133.876726,46.362345],[133.940784,46.38134],[133.948791,46.401153],[133.902596,46.446119],[133.852089,46.450242],[133.849625,46.475389],[133.890893,46.525235],[133.919842,46.596012],[134.011001,46.637941],[134.030711,46.708981],[134.033175,46.759023],[134.052885,46.779928],[134.025168,46.810657],[134.041182,46.848326],[134.042414,46.886787],[134.076291,46.938298],[134.063972,46.979962],[134.10216,47.005678],[134.118175,47.061968],[134.142812,47.093349],[134.222268,47.105164],[134.232739,47.134892],[134.230276,47.182097],[134.210566,47.210155],[134.156979,47.248357],[134.177305,47.326299],[134.203174,47.347389],[134.263536,47.371307],[134.266616,47.391974],[134.307268,47.428829],[134.339297,47.439759],[134.490202,47.446235],[134.522847,47.468086],[134.568426,47.478199],[134.576434,47.519036],[134.627556,47.546512],[134.678064,47.588507],[134.689766,47.63813],[134.779694,47.7159],[134.772918,47.763391],[134.678679,47.819278],[134.670056,47.864667],[134.677448,47.884738],[134.658969,47.901191],[134.607846,47.909214],[134.599839,47.947711],[134.55426,47.982173],[134.551796,48.032622],[134.632484,48.099412],[134.67252,48.170505],[134.679295,48.256245],[134.77107,48.288908],[134.864077,48.332293],[135.009439,48.365703],[135.090743,48.403461],[135.09567,48.437618],[135.068569,48.459451],[135.035924,48.440795],[134.996504,48.439603],[134.927519,48.451513],[134.886867,48.437618],[134.848679,48.393925],[134.820961,48.37604],[134.764295,48.370076],[134.704549,48.405448],[134.640491,48.409818],[134.578281,48.405448],[134.501905,48.418954],[134.438463,48.405448],[134.369478,48.382797],[134.20379,48.3824],[134.150819,48.346217],[134.116327,48.333089],[134.0689,48.338659],[134.029479,48.327519],[133.995603,48.303639],[133.940784,48.302047],[133.876111,48.282536],[133.824372,48.277359],[133.791111,48.261026],[133.740604,48.254651],[133.693177,48.186866],[133.667307,48.183275],[133.59709,48.194846],[133.573068,48.182078],[133.545967,48.121389],[133.451728,48.112999],[133.407997,48.124585],[133.302055,48.103009],[133.239845,48.126583],[133.182563,48.135769],[133.130208,48.134971],[133.053216,48.110202],[133.02673,48.085421],[133.016259,48.054228],[132.992238,48.035424],[132.883216,48.002599],[132.819159,47.936887],[132.769268,47.93849],[132.723072,47.962941],[132.691043,47.962941],[132.661478,47.944905],[132.662094,47.922451],[132.687348,47.88514],[132.662094,47.854227],[132.621442,47.82852],[132.599268,47.792347],[132.6005,47.740858],[132.558,47.718316],[132.469305,47.726368],[132.371987,47.765402],[132.325175,47.762184],[132.288835,47.742065],[132.272205,47.718718],[132.242639,47.70986],[132.19706,47.714289],[132.157024,47.70543],[132.086191,47.703013],[132.000575,47.712276],[131.976554,47.673201],[131.900793,47.685692],[131.825649,47.677231],[131.741881,47.706638],[131.690142,47.707041],[131.641483,47.663932],[131.59036,47.660707],[131.568186,47.682469],[131.559563,47.724757],[131.543548,47.736028],[131.456085,47.747297],[131.359998,47.730796],[131.273767,47.738846],[131.236811,47.733211],[131.183224,47.702611],[131.115471,47.689721],[131.029855,47.694555],[130.983659,47.713081],[130.966413,47.733211],[130.961486,47.828118],[130.891269,47.927263],[130.870943,47.943301],[130.770544,47.998194],[130.737284,48.034223],[130.699711,48.044227],[130.666451,48.105007],[130.673842,48.12818],[130.765617,48.18926],[130.769313,48.231136],[130.787791,48.256643],[130.817972,48.265409],[130.845073,48.296473],[130.81982,48.341444],[130.785327,48.357353],[130.747755,48.404256],[130.745907,48.449131],[130.776704,48.480084],[130.767465,48.507846],[130.711414,48.511414],[130.647357,48.484844],[130.620871,48.49595],[130.615944,48.575601],[130.605473,48.594207],[130.538335,48.612016],[130.538951,48.635751],[130.576524,48.688719],[130.622103,48.783842],[130.689856,48.849651],[130.680617,48.881146],[130.609168,48.881146],[130.559277,48.861071],[130.501995,48.865795],[130.471198,48.905541],[130.412068,48.905148],[130.279641,48.866976],[130.237757,48.868551],[130.219895,48.893739],[130.113337,48.956653],[130.059135,48.979047],[130.020946,49.021058],[129.937179,49.040285],[129.9187,49.060681],[129.934715,49.078717],[129.913157,49.1085],[129.866962,49.113985],[129.855259,49.133567],[129.864498,49.158621],[129.847867,49.181316],[129.784426,49.184054],[129.753629,49.208692],[129.761636,49.25754],[129.730223,49.288387],[129.696962,49.298535],[129.604571,49.279018],[129.562687,49.299706],[129.546057,49.395227],[129.51834,49.423652],[129.448739,49.441167],[129.390224,49.432605],[129.374826,49.414309],[129.379138,49.367175],[129.358196,49.355871],[129.320623,49.3586],[129.266421,49.396006],[129.215298,49.399122],[129.180805,49.386657],[129.143849,49.357431],[129.084719,49.359769],[129.061929,49.374189],[129.013886,49.457119],[128.932582,49.46801],[128.871604,49.492506],[128.792147,49.473065],[128.76135,49.482009],[128.763198,49.515824],[128.813089,49.558157],[128.802618,49.58222],[128.744104,49.595023],[128.715155,49.564756],[128.656025,49.577564],[128.619684,49.593471],[128.537764,49.604332],[128.500192,49.593859],[128.389939,49.58998],[128.343128,49.544956],[128.287077,49.566309],[128.243345,49.563203],[128.185447,49.53952],[128.122005,49.55311],[128.070882,49.556604],[128.001281,49.592307],[127.949542,49.596187],[127.897804,49.579116],[127.815268,49.593859],[127.782007,49.630698],[127.705015,49.665185],[127.677913,49.697712],[127.674833,49.764247],[127.653892,49.780094],[127.583059,49.786277],[127.531936,49.826059],[127.529472,49.864265],[127.547334,49.928645],[127.543638,49.944438],[127.495595,49.994479],[127.501755,50.056764],[127.58737,50.137768],[127.60708,50.178794],[127.603385,50.239309],[127.44632,50.270686],[127.371791,50.29669],[127.332371,50.340634],[127.369944,50.403996],[127.3644,50.438314],[127.30527,50.45432],[127.293567,50.46575],[127.323132,50.52552],[127.36132,50.547582],[127.370559,50.581415],[127.294799,50.663426],[127.28864,50.699451],[127.305886,50.733932],[127.295415,50.755139],[127.236285,50.781256],[127.143894,50.910111],[127.113713,50.93765],[127.052119,50.962911],[126.985597,51.029202],[126.922772,51.061937],[126.917844,51.138977],[126.899982,51.200518],[126.926467,51.246244],[126.976358,51.291551],[126.98375,51.318863],[126.970815,51.332327],[126.887047,51.321856],[126.877808,51.300906],[126.908605,51.283691],[126.92154,51.259729],[126.908605,51.246619],[126.863025,51.248492],[126.820526,51.281071],[126.813134,51.311756],[126.837156,51.345038],[126.904293,51.340552],[126.930163,51.359241],[126.908605,51.407423],[126.835308,51.413769],[126.791577,51.432428],[126.784185,51.448095],[126.812518,51.493948],[126.843931,51.521885],[126.837156,51.536033],[126.69549,51.57845],[126.67886,51.602246],[126.741069,51.642374],[126.723823,51.679126],[126.734294,51.711399],[126.724439,51.7266],[126.6727,51.73179],[126.658534,51.762544],[126.622809,51.777357],[126.580925,51.824728],[126.555056,51.874266],[126.510092,51.922274],[126.462665,51.948471],[126.468208,51.982395],[126.447882,52.009294],[126.450962,52.027709],[126.487918,52.041699],[126.514404,52.037282],[126.563679,52.119302],[126.556288,52.136203],[126.499005,52.16044],[126.457121,52.165212],[126.403535,52.185031],[126.34502,52.192002],[126.306832,52.205574],[126.312992,52.235271],[126.357955,52.264216],[126.401071,52.279597],[126.436795,52.277034],[126.4331,52.298632],[126.327774,52.310342],[126.320999,52.342163],[126.348716,52.357882],[126.353644,52.389304],[126.326542,52.424353],[126.268644,52.475051],[126.205202,52.466302],[126.192883,52.492181],[126.213209,52.525327],[126.147304,52.573],[126.066616,52.603905],[126.055529,52.582455],[126.030891,52.576273],[125.989008,52.603178],[125.968682,52.630429],[125.971145,52.654033],[125.995783,52.675085],[126.061688,52.673271],[126.072775,52.691048],[126.044442,52.739628],[126.112195,52.757016],[126.116507,52.768243],[126.052449,52.800095],[126.02042,52.795753],[125.985312,52.758465],[125.966834,52.759914],[125.937269,52.786705],[125.923718,52.815651],[125.855349,52.866259],[125.854117,52.891542],[125.827631,52.899123],[125.772197,52.89804],[125.751255,52.88143],[125.722306,52.880347],[125.678574,52.86084],[125.666871,52.869872],[125.665023,52.913561],[125.737088,52.943504],[125.742632,52.993964],[125.684118,53.00801],[125.643466,53.039686],[125.640386,53.06199],[125.613901,53.083564],[125.588647,53.081047],[125.530749,53.0512],[125.504263,53.061271],[125.503647,53.095424],[125.452524,53.107641],[125.343503,53.14463],[125.315786,53.144989],[125.252344,53.18051],[125.195062,53.198439],[125.142091,53.204175],[125.038613,53.202741],[124.970244,53.194137],[124.887708,53.164368],[124.909266,53.118059],[124.87231,53.099018],[124.832889,53.145347],[124.787926,53.140681],[124.734339,53.146783],[124.712165,53.162574],[124.720789,53.192344],[124.678905,53.207043],[124.590209,53.208476],[124.563108,53.201666],[124.496587,53.207759],[124.487348,53.217436],[124.435609,53.223886],[124.412203,53.248601],[124.375863,53.258984],[124.327819,53.331954],[124.239124,53.379817],[124.19416,53.37339],[124.125791,53.348033],[124.058038,53.404085],[124.01369,53.403371],[123.985973,53.434401],[123.865249,53.489627],[123.797495,53.489983],[123.746373,53.500308],[123.698329,53.498528],[123.668764,53.533756],[123.620721,53.550115],[123.58746,53.546915],[123.569598,53.505291],[123.53141,53.507071],[123.557895,53.531978],[123.546808,53.551537],[123.517243,53.558292],[123.490758,53.542648],[123.510468,53.509206],[123.499381,53.497816],[123.47228,53.509206],[123.454417,53.536602],[123.394055,53.538024],[123.309672,53.56078],[123.274563,53.563269],[123.231447,53.549404],[123.179092,53.509918],[123.137209,53.498172],[123.093477,53.508138],[123.052209,53.506715],[122.943804,53.483929],[122.894528,53.462914],[122.826775,53.457213],[122.763949,53.463626],[122.673406,53.459351],[122.608117,53.465408],[122.5379,53.453293],[122.496016,53.458638],[122.435038,53.444739],[122.37406,53.47467],[122.350038,53.505647],[122.266886,53.470039],[122.227466,53.461845],[122.161561,53.468614],[122.111054,53.426913],[122.077177,53.422277],[122.026054,53.428339],[121.875765,53.426556],[121.816019,53.41336],[121.754425,53.389454],[121.697758,53.392666],[121.589969,53.350891],[121.499426,53.337314],[121.504969,53.323018],[121.575802,53.29155],[121.615222,53.258984],[121.642324,53.262564],[121.679896,53.240722],[121.67928,53.199515],[121.660186,53.195213],[121.665114,53.170467],[121.722396,53.145706],[121.753193,53.147501],[121.784606,53.104408],[121.775367,53.089674],[121.817867,53.061631],[121.785838,53.018451],[121.715621,52.997926],[121.677432,52.948192],[121.66265,52.912478],[121.610295,52.892264],[121.604136,52.872401],[121.620766,52.853251],[121.591201,52.824693],[121.537614,52.801542],[121.511129,52.779104],[121.476636,52.772225],[121.455078,52.73528],[121.373158,52.683067],[121.309717,52.676173],[121.29247,52.651855],[121.237036,52.619167],[121.182217,52.59918],[121.225333,52.577364],[121.280151,52.586819],[121.323883,52.573727],[121.353448,52.534793],[121.411963,52.52205],[121.416274,52.499468],[121.474172,52.482706],[121.495114,52.484892],[121.519136,52.456821],[121.565331,52.460468],[121.590585,52.443326],[121.63986,52.44442],[121.678664,52.419973],[121.658338,52.3904],[121.715621,52.342894],[121.714389,52.318025],[121.769207,52.308147],[121.841272,52.282526],[121.901018,52.280695],[121.94783,52.298266],[121.976779,52.343626],[122.035909,52.377615],[122.040837,52.413038],[122.091344,52.427272],[122.080873,52.440407],[122.107358,52.452445],[122.142467,52.495096],[122.140003,52.510032],[122.168952,52.513674],[122.178191,52.48963],[122.207756,52.469218],[122.310618,52.475416],[122.326016,52.459374],[122.342031,52.414133],[122.367284,52.413768],[122.378987,52.395512],[122.419023,52.375057],[122.447356,52.394052],[122.484313,52.341432],[122.478153,52.29607],[122.560689,52.282526],[122.585943,52.266413],[122.67895,52.276667],[122.710979,52.256157],[122.76087,52.26678],[122.787355,52.252494],[122.766413,52.232705],[122.769493,52.179893],[122.73808,52.153464],[122.690653,52.140243],[122.629059,52.13657],[122.643841,52.111585],[122.625363,52.067459],[122.650616,52.058997],[122.664783,51.99861],[122.683877,51.974654],[122.726377,51.978709],[122.729457,51.919321],[122.706051,51.890151],[122.725761,51.87833],[122.732536,51.832495],[122.771957,51.779579],[122.749167,51.746613],[122.778732,51.698048],[122.816304,51.655371],[122.820616,51.633088],[122.85634,51.606707],[122.832935,51.581797],[122.874202,51.561339],[122.880362,51.537894],[122.858804,51.524864],[122.880362,51.511085],[122.854492,51.477551],[122.871123,51.455181],[122.900072,51.445112],[122.903768,51.415262],[122.946267,51.405183],[122.965977,51.386886],[122.965977,51.345786],[123.002934,51.31213],[123.069455,51.321108],[123.127969,51.297913],[123.231447,51.279199],[123.231447,51.268716],[123.294273,51.254111],[123.339853,51.27246],[123.376809,51.266844],[123.414381,51.278825],[123.440251,51.270963],[123.46304,51.286686],[123.582533,51.294545],[123.582533,51.306893],[123.661989,51.319237],[123.660141,51.342795],[123.711264,51.398089],[123.794416,51.361109],[123.842459,51.367462],[123.887423,51.320734],[123.926227,51.300532],[123.939777,51.313253],[123.994596,51.322604],[124.071588,51.320734],[124.090067,51.3413],[124.128255,51.347281],[124.192313,51.33943],[124.239124,51.344664],[124.271769,51.308389],[124.297638,51.298661],[124.339522,51.293422],[124.406659,51.272086],[124.430065,51.301281],[124.426985,51.331953],[124.443616,51.35812],[124.478108,51.36223],[124.490427,51.380537],[124.555717,51.375307],[124.58713,51.363725],[124.62655,51.327465],[124.693687,51.3327],[124.752817,51.35812],[124.76452,51.38726],[124.783614,51.392115],[124.864302,51.37979],[124.885244,51.40817],[124.942527,51.447349],[124.917889,51.474196],[124.928976,51.498419],[124.983795,51.508478],[125.004737,51.529332],[125.047236,51.529704],[125.073106,51.553526],[125.060171,51.59667],[125.098975,51.658341],[125.12854,51.659083],[125.130388,51.635317],[125.175968,51.639403],[125.214772,51.627888],[125.228938,51.640517],[125.289301,51.633831],[125.316402,51.610052],[125.35151,51.623801],[125.38046,51.585516],[125.424807,51.562827],[125.528285,51.488359],[125.559082,51.461521],[125.559082,51.461521],[125.595422,51.416755],[125.595422,51.416755],[125.60035,51.413396],[125.60035,51.413396],[125.600966,51.410409],[125.600966,51.410409],[125.62314,51.398089],[125.62314,51.398089],[125.623756,51.387633],[125.623756,51.387633],[125.626219,51.380163],[125.626219,51.380163],[125.700132,51.327465],[125.700132,51.327465],[125.740784,51.27583],[125.740784,51.27583],[125.76111,51.261976],[125.76111,51.261976],[125.761726,51.226385],[125.819008,51.227134],[125.850421,51.21364],[125.864588,51.146487],[125.909551,51.138977],[125.946508,51.108176],[125.970529,51.123955],[125.993935,51.119072],[125.976073,51.084498],[126.059225,51.043503],[126.033971,51.011132],[126.041978,50.981753],[126.068464,50.967434],[126.042594,50.92558],[126.02042,50.927466],[125.996399,50.906715],[125.997631,50.872738],[125.961906,50.901054],[125.939732,50.85423],[125.913247,50.825885],[125.878138,50.816812],[125.890457,50.805845],[125.836255,50.793363],[125.846726,50.769524],[125.828863,50.756654],[125.804226,50.773309],[125.758646,50.746809],[125.795603,50.738856],[125.78082,50.725598],[125.825784,50.70362],[125.789443,50.679735],[125.804226,50.658874],[125.793139,50.643316],[125.814697,50.62092],[125.807921,50.60383],[125.829479,50.56165],[125.794987,50.532748],[125.770349,50.531227],[125.754335,50.506874],[125.740784,50.523237],[125.699516,50.487078],[125.654553,50.471082],[125.627451,50.443268],[125.580024,50.449366],[125.562162,50.438314],[125.583104,50.409717],[125.567089,50.402852],[125.536292,50.420014],[125.522126,50.404759],[125.546763,50.358965],[125.520278,50.3498],[125.530749,50.331085],[125.463611,50.295925],[125.466075,50.266861],[125.442053,50.260357],[125.448829,50.216338],[125.417416,50.195654],[125.39093,50.199868],[125.382923,50.172278],[125.335496,50.161161],[125.376148,50.137385],[125.311474,50.140453],[125.27883,50.127411],[125.258504,50.103618],[125.287453,50.093636],[125.283757,50.070211],[125.328105,50.065985],[125.315786,50.04562],[125.289916,50.057917],[125.25296,50.041393],[125.283757,50.036012],[125.297924,50.014481],[125.278214,49.996402],[125.241873,49.987938],[125.231402,49.957531],[125.190134,49.959841],[125.199373,49.935194],[125.225859,49.922481],[125.212924,49.907452],[125.245569,49.87198],[125.225243,49.867351],[125.239409,49.844587],[125.177815,49.829533],[125.222779,49.799026],[125.221547,49.754969],[125.204301,49.734086],[125.225243,49.726349],[125.219699,49.669058],[125.185207,49.634574],[125.189518,49.652401],[125.164881,49.669446],[125.132236,49.672157],[125.127308,49.655113],[125.15441,49.616741],[125.16796,49.629923],[125.205533,49.593859],[125.23017,49.595411],[125.233866,49.536801],[125.211076,49.539908],[125.228323,49.487063],[125.270822,49.454395],[125.256656,49.437275],[125.25604,49.395227],[125.277598,49.379644],[125.256656,49.359769],[125.261583,49.322336],[125.214772,49.277066],[125.227707,49.248947],[125.219699,49.189139],[125.187671,49.186792],[125.158721,49.144921],[125.117453,49.126127],[125.034302,49.157056],[125.039845,49.17623],[124.983179,49.162535],[124.906802,49.184054],[124.860607,49.166448],[124.847672,49.129651],[124.809484,49.115943],[124.828578,49.077933],[124.808252,49.020666],[124.756513,48.967262],[124.744194,48.920487],[124.709086,48.920487],[124.715861,48.885475],[124.697383,48.841775],[124.654267,48.83429],[124.644412,48.80789],[124.656115,48.783842],[124.612383,48.747945],[124.624702,48.701755],[124.601912,48.632587],[124.579122,48.596582],[124.520608,48.556195],[124.548941,48.535593],[124.533543,48.515379],[124.555717,48.467784],[124.507674,48.445558],[124.52492,48.426897],[124.51876,48.378027],[124.547094,48.35775],[124.540934,48.335476],[124.579738,48.297269],[124.558796,48.268197],[124.579122,48.262221],[124.547094,48.200829],[124.512601,48.164518],[124.529847,48.146951],[124.505826,48.124985],[124.478108,48.123387],[124.46579,48.098213],[124.415899,48.08782],[124.430065,48.12099],[124.471333,48.133373],[124.475029,48.173698],[124.418978,48.181679],[124.412819,48.219175],[124.422058,48.245884],[124.365392,48.283731],[124.353689,48.315978],[124.317964,48.35099],[124.331515,48.380015],[124.309957,48.413393],[124.330283,48.435633],[124.302566,48.456673],[124.314269,48.503881],[124.25945,48.536385],[124.25945,48.536385],[124.136878,48.463023],[124.07898,48.43603],[124.019234,48.39313],[123.862785,48.271782],[123.746373,48.197638],[123.705105,48.152142],[123.579453,48.045427],[123.537569,48.021816],[123.300432,47.953723],[123.256085,47.876711],[123.214201,47.824502],[123.161846,47.781892],[123.041122,47.746492],[122.926557,47.697777],[122.848949,47.67441],[122.765181,47.614333],[122.59395,47.54732],[122.543443,47.495589],[122.507103,47.401291],[122.418407,47.350632],[122.441197,47.310476],[122.441197,47.310476],[122.462755,47.27841],[122.498479,47.255262],[122.531124,47.198771],[122.582863,47.158092],[122.582863,47.158092],[122.615508,47.124306],[122.679566,47.094164],[122.710363,47.093349],[122.710363,47.093349],[122.821232,47.065636],[122.852645,47.072158],[122.845869,47.046881],[122.778116,47.002822],[122.77442,46.973837],[122.798442,46.9575],[122.791051,46.941567],[122.83971,46.937072],[122.895144,46.960359],[122.893913,46.895376],[122.906847,46.80738],[122.996774,46.761483],[123.00355,46.730726],[123.026339,46.718829],[123.076846,46.745082],[123.103332,46.734828],[123.163694,46.74016],[123.198802,46.803283],[123.22344,46.821305],[123.221592,46.850373],[123.295505,46.865105],[123.341084,46.826628],[123.374345,46.837683],[123.40699,46.906416],[123.404526,46.935438],[123.360179,46.970978],[123.304128,46.964852],[123.301664,46.999965],[123.337389,46.988943],[123.42362,46.934212],[123.487678,46.959951],[123.52833,46.944836],[123.483366,46.84587],[123.506772,46.827038],[123.562823,46.82581],[123.575757,46.845461],[123.576989,46.891286],[123.605322,46.891286],[123.599163,46.868378],[123.625648,46.847508],[123.580069,46.827447],[123.629344,46.813524],[123.631808,46.728675],[123.603475,46.68928],[123.474743,46.686817],[123.366338,46.677784],[123.318295,46.662179],[123.276411,46.660947],[123.279491,46.616981],[123.228368,46.588198],[123.18094,46.614103],[123.098404,46.603002],[123.077462,46.622324],[123.04605,46.617803],[123.052825,46.579972],[123.002318,46.574624],[123.010325,46.524823],[123.011557,46.434984],[123.089781,46.347888],[123.142136,46.298293],[123.178476,46.248239],[123.248078,46.273065],[123.286266,46.250308],[123.320758,46.254447],[123.357099,46.232096],[123.357099,46.232096],[123.430396,46.243687],[123.452569,46.233338],[123.499381,46.259826],[123.569598,46.223816],[123.569598,46.223816]]]]}},{"type":"Feature","properties":{"adcode":310000,"name":"上海市","center":[121.472644,31.231706],"centroid":[121.438737,31.072559],"childrenNum":16,"level":"province","parent":{"adcode":100000},"subFeatureIndex":8,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[120.901349,31.017327],[120.940153,31.010146],[120.949392,31.030148],[120.989428,31.01425],[121.000515,30.938309],[120.993124,30.889532],[121.020225,30.872069],[120.991892,30.837133],[121.038087,30.814007],[121.060261,30.845354],[121.097833,30.857171],[121.13787,30.826342],[121.123087,30.77905],[121.174826,30.771851],[121.21671,30.785734],[121.232108,30.755909],[121.272144,30.723504],[121.274608,30.677191],[121.362071,30.679764],[121.426129,30.730192],[121.517288,30.775451],[121.601056,30.805269],[121.681128,30.818633],[121.904714,30.814007],[121.943518,30.776993],[121.970004,30.789333],[121.954605,30.825828],[121.994025,30.862823],[121.990945,30.96859],[121.977395,31.016301],[121.946598,31.066039],[121.809859,31.196669],[121.722396,31.3036],[121.599208,31.37465],[121.520984,31.394575],[121.404571,31.479337],[121.343593,31.511996],[121.301093,31.49873],[121.301093,31.49873],[121.247507,31.476785],[121.241963,31.493117],[121.174826,31.44922],[121.143413,31.392021],[121.113848,31.37465],[121.130478,31.343987],[121.142797,31.275472],[121.090442,31.291838],[121.060261,31.245289],[121.076892,31.158267],[121.018377,31.134194],[120.930298,31.141365],[120.881023,31.134706],[120.859465,31.100379],[120.890878,31.094229],[120.901349,31.017327]]],[[[121.974931,31.61704],[121.715005,31.673592],[121.64294,31.697527],[121.599824,31.703128],[121.49881,31.753012],[121.431673,31.769295],[121.384861,31.833382],[121.323267,31.868458],[121.265369,31.863883],[121.200079,31.834907],[121.118775,31.759119],[121.145261,31.75403],[121.289391,31.61653],[121.371926,31.553314],[121.395332,31.585437],[121.434136,31.590535],[121.547469,31.531382],[121.625693,31.501792],[121.682976,31.491075],[121.819098,31.437987],[121.890547,31.428795],[121.981706,31.464024],[121.995873,31.493117],[121.974931,31.61704]]],[[[121.795693,31.330186],[121.792613,31.363408],[121.742106,31.407345],[121.585657,31.454836],[121.567179,31.48342],[121.520984,31.494137],[121.509897,31.4824],[121.572107,31.435944],[121.727939,31.35472],[121.76428,31.31536],[121.785222,31.31127],[121.795693,31.330186]]],[[[121.801852,31.356765],[121.8037,31.328652],[121.840656,31.295418],[121.932431,31.283144],[122.016199,31.282121],[122.097503,31.255522],[122.122756,31.307179],[122.116597,31.320984],[122.040837,31.324051],[121.951525,31.337343],[121.845584,31.37465],[121.792613,31.377715],[121.801852,31.356765]]],[[[121.626925,31.445135],[121.631853,31.456878],[121.579498,31.479848],[121.626925,31.445135]]],[[[121.943518,31.215608],[121.959533,31.159291],[121.995873,31.160828],[122.008808,31.221238],[121.950909,31.228915],[121.943518,31.215608]]],[[[121.88254,31.240684],[121.909026,31.195133],[121.923808,31.234032],[121.88254,31.240684]]]]}},{"type":"Feature","properties":{"adcode":320000,"name":"江苏省","center":[118.767413,32.041544],"centroid":[119.486506,32.983991],"childrenNum":13,"level":"province","parent":{"adcode":100000},"subFeatureIndex":9,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[117.311654,34.561686],[117.27285,34.556757],[117.303647,34.542463],[117.267923,34.532603],[117.27285,34.499565],[117.252524,34.48674],[117.248213,34.451216],[117.166293,34.434435],[117.139191,34.526687],[117.15151,34.559222],[117.104083,34.648874],[117.073286,34.639026],[117.061583,34.675947],[117.070206,34.713835],[117.022163,34.759081],[116.969192,34.771864],[116.95133,34.81069],[116.979047,34.815113],[116.966113,34.844588],[116.929156,34.843114],[116.922381,34.894671],[116.858323,34.928533],[116.821983,34.929515],[116.815823,34.965324],[116.789338,34.975133],[116.781331,34.916757],[116.677853,34.939327],[116.622418,34.939818],[116.613795,34.922645],[116.557745,34.908905],[116.445028,34.895652],[116.408071,34.850972],[116.403144,34.756131],[116.369267,34.749247],[116.363724,34.715311],[116.392057,34.710391],[116.374195,34.640011],[116.430245,34.650843],[116.432709,34.630163],[116.477057,34.614896],[116.490607,34.573513],[116.594085,34.511894],[116.592237,34.493646],[116.662454,34.472927],[116.722816,34.472434],[116.773939,34.453683],[116.782563,34.429993],[116.828142,34.389012],[116.909446,34.408271],[116.969192,34.389012],[116.960569,34.363821],[116.983359,34.348011],[116.969192,34.283753],[117.051112,34.221425],[117.025243,34.167469],[117.046801,34.151622],[117.123793,34.128342],[117.130568,34.101586],[117.192162,34.068873],[117.257452,34.065899],[117.277162,34.078787],[117.311654,34.067882],[117.357234,34.088205],[117.404045,34.03218],[117.435458,34.028212],[117.514914,34.060941],[117.543248,34.038627],[117.569117,33.985051],[117.612849,34.000433],[117.629479,34.028708],[117.671363,33.992494],[117.672595,33.934916],[117.715095,33.879287],[117.753899,33.891211],[117.759442,33.874318],[117.739732,33.758467],[117.72495,33.74951],[117.750203,33.710688],[117.791471,33.733585],[117.843826,33.736074],[117.901724,33.720146],[117.972557,33.74951],[118.019985,33.738562],[118.065564,33.76593],[118.117919,33.766427],[118.161035,33.735576],[118.16781,33.663381],[118.112376,33.617045],[118.117919,33.594615],[118.107448,33.475391],[118.050782,33.491863],[118.027376,33.455421],[118.016905,33.402978],[118.029224,33.374995],[117.992883,33.333005],[117.974405,33.279487],[117.939297,33.262475],[117.942376,33.224936],[117.977485,33.226437],[117.988572,33.180869],[118.037231,33.152314],[118.038463,33.134776],[118.149332,33.169348],[118.178281,33.217926],[118.217085,33.191888],[118.219549,33.114227],[118.243571,33.027967],[118.244803,32.998359],[118.26944,32.969242],[118.303933,32.96874],[118.291614,32.946143],[118.252194,32.936601],[118.2331,32.914498],[118.250346,32.848157],[118.301469,32.846145],[118.300237,32.783275],[118.334114,32.761637],[118.363063,32.770695],[118.375382,32.718849],[118.411106,32.715828],[118.450526,32.743518],[118.483787,32.721367],[118.560163,32.729926],[118.572482,32.719856],[118.642699,32.744525],[118.707373,32.72036],[118.756648,32.737477],[118.73817,32.772708],[118.743097,32.853184],[118.743097,32.853184],[118.810235,32.853687],[118.821322,32.920527],[118.846575,32.922034],[118.849039,32.956689],[118.89585,32.957694],[118.89585,32.957694],[118.892771,32.941121],[118.934039,32.93861],[118.993169,32.958196],[119.020886,32.955685],[119.054763,32.8748],[119.113277,32.823014],[119.184726,32.825529],[119.211827,32.708275],[119.208748,32.641276],[119.230921,32.607001],[119.22045,32.576748],[119.152697,32.557582],[119.168096,32.536394],[119.142226,32.499556],[119.084944,32.452602],[119.041212,32.515201],[118.975923,32.505108],[118.922336,32.557078],[118.92172,32.557078],[118.922336,32.557078],[118.92172,32.557078],[118.890923,32.553042],[118.908169,32.59238],[118.84288,32.56767],[118.820706,32.60448],[118.784981,32.582295],[118.757264,32.603976],[118.73509,32.58885],[118.719076,32.614059],[118.719076,32.614059],[118.688895,32.588346],[118.658714,32.594397],[118.632844,32.578261],[118.59712,32.600951],[118.568787,32.585825],[118.564475,32.562122],[118.608823,32.536899],[118.592192,32.481383],[118.628533,32.467751],[118.691359,32.472295],[118.685199,32.403604],[118.703061,32.328792],[118.657482,32.30148],[118.674728,32.250375],[118.643931,32.209875],[118.510888,32.194176],[118.49549,32.165304],[118.501033,32.121726],[118.433896,32.086746],[118.394476,32.076098],[118.389548,31.985281],[118.363679,31.930443],[118.472084,31.879639],[118.466541,31.857784],[118.504729,31.841516],[118.481939,31.778453],[118.533678,31.76726],[118.521975,31.743343],[118.5577,31.73011],[118.571866,31.746397],[118.641467,31.75861],[118.653786,31.73011],[118.697518,31.709747],[118.643315,31.671555],[118.643315,31.649651],[118.736322,31.633347],[118.748025,31.675629],[118.773894,31.682759],[118.802844,31.619078],[118.858894,31.623665],[118.881684,31.564023],[118.885995,31.519139],[118.883532,31.500261],[118.852119,31.393553],[118.824401,31.375672],[118.767735,31.363919],[118.745561,31.372606],[118.720924,31.322518],[118.726467,31.282121],[118.756648,31.279564],[118.794836,31.229426],[118.870597,31.242219],[118.984546,31.237102],[119.014727,31.241707],[119.10527,31.235055],[119.107118,31.250917],[119.158241,31.294907],[119.197661,31.295418],[119.198277,31.270357],[119.266646,31.250405],[119.294363,31.263195],[119.338095,31.259103],[119.350414,31.301043],[119.374435,31.258591],[119.360269,31.213049],[119.391682,31.174142],[119.439109,31.177214],[119.461283,31.156219],[119.532732,31.159291],[119.599869,31.10909],[119.623891,31.130096],[119.678093,31.167997],[119.705811,31.152634],[119.715666,31.169533],[119.779723,31.17875],[119.809904,31.148536],[119.827151,31.174142],[119.878274,31.160828],[119.921389,31.170045],[119.946027,31.106016],[119.988527,31.059375],[120.001461,31.027071],[120.052584,31.00553],[120.111099,30.955761],[120.149903,30.937283],[120.223816,30.926502],[120.316206,30.933689],[120.371025,30.948575],[120.35809,30.886964],[120.42338,30.902884],[120.435083,30.920855],[120.441858,30.860768],[120.460336,30.839702],[120.489285,30.763624],[120.504684,30.757967],[120.563814,30.835592],[120.589684,30.854089],[120.654973,30.846896],[120.68269,30.882342],[120.713487,30.88491],[120.709176,30.933176],[120.684538,30.955247],[120.698089,30.970643],[120.746132,30.962432],[120.770154,30.996809],[120.820661,31.006556],[120.865624,30.989627],[120.901349,31.017327],[120.890878,31.094229],[120.859465,31.100379],[120.881023,31.134706],[120.930298,31.141365],[121.018377,31.134194],[121.076892,31.158267],[121.060261,31.245289],[121.090442,31.291838],[121.142797,31.275472],[121.130478,31.343987],[121.113848,31.37465],[121.143413,31.392021],[121.174826,31.44922],[121.241963,31.493117],[121.247507,31.476785],[121.301093,31.49873],[121.301093,31.49873],[121.343593,31.511996],[121.371926,31.553314],[121.289391,31.61653],[121.145261,31.75403],[121.118775,31.759119],[121.200079,31.834907],[121.265369,31.863883],[121.323267,31.868458],[121.384861,31.833382],[121.431673,31.769295],[121.49881,31.753012],[121.599824,31.703128],[121.64294,31.697527],[121.715005,31.673592],[121.974931,31.61704],[121.970004,31.718911],[121.889315,31.866425],[121.856055,31.955328],[121.772287,32.032984],[121.759352,32.059362],[121.525295,32.136423],[121.542542,32.152132],[121.458774,32.177462],[121.499426,32.211394],[121.493882,32.263533],[121.450151,32.282256],[121.425513,32.430885],[121.390405,32.460682],[121.352216,32.474315],[121.269681,32.483402],[121.153268,32.52933],[121.121855,32.569183],[121.076892,32.576243],[121.020225,32.605489],[120.961711,32.612042],[120.979573,32.636236],[120.963559,32.68259],[120.916131,32.701225],[120.953088,32.714318],[120.972182,32.761134],[120.981421,32.85972],[120.957399,32.893395],[120.932762,33.005887],[120.917979,33.02596],[120.871784,33.047032],[120.874247,33.093672],[120.843451,33.209915],[120.819429,33.237951],[120.833595,33.274984],[120.813885,33.303499],[120.769538,33.307],[120.741205,33.337505],[120.717183,33.436945],[120.680227,33.520306],[120.622944,33.615051],[120.611241,33.627012],[120.583524,33.668362],[120.534249,33.782346],[120.48559,33.859411],[120.367329,34.091674],[120.347619,34.179352],[120.314359,34.255563],[120.311895,34.306991],[120.103707,34.391481],[119.962657,34.459112],[119.811752,34.485754],[119.781571,34.515839],[119.641137,34.569078],[119.610956,34.592729],[119.569072,34.615389],[119.465594,34.672994],[119.525956,34.73351],[119.456971,34.748264],[119.381827,34.752198],[119.494543,34.754656],[119.497007,34.754164],[119.439725,34.785136],[119.440957,34.769406],[119.378747,34.764489],[119.312841,34.774813],[119.272189,34.797914],[119.238313,34.799388],[119.217371,34.827886],[119.202588,34.890253],[119.214907,34.925589],[119.211211,34.981507],[119.238313,35.048657],[119.285124,35.068252],[119.291899,35.028567],[119.307298,35.032977],[119.292515,35.068742],[119.306066,35.076578],[119.286972,35.115261],[119.250016,35.124562],[119.217371,35.106939],[119.137915,35.096167],[119.114509,35.055026],[119.027045,35.055516],[118.942662,35.040817],[118.928495,35.051106],[118.86259,35.025626],[118.860742,34.944233],[118.805307,34.87307],[118.80038,34.843114],[118.772047,34.794474],[118.739402,34.792508],[118.719076,34.745313],[118.764039,34.740396],[118.783749,34.723181],[118.739402,34.693663],[118.690127,34.678408],[118.664257,34.693663],[118.607591,34.694155],[118.601431,34.714327],[118.545997,34.705964],[118.460997,34.656258],[118.473932,34.623269],[118.439439,34.626223],[118.424657,34.595193],[118.439439,34.507949],[118.416034,34.473914],[118.404947,34.427525],[118.379693,34.415183],[118.290382,34.424563],[118.277447,34.404814],[118.220165,34.405802],[118.217701,34.379134],[118.179513,34.379628],[118.177665,34.45319],[118.132702,34.483287],[118.16473,34.50499],[118.185056,34.543942],[118.079115,34.569571],[118.114839,34.614404],[118.084042,34.655766],[118.053861,34.650843],[117.951615,34.678408],[117.909732,34.670533],[117.902956,34.644443],[117.793935,34.651827],[117.791471,34.583368],[117.801942,34.518798],[117.684298,34.547392],[117.659044,34.501044],[117.609769,34.490686],[117.592523,34.462566],[117.53832,34.467006],[117.465023,34.484767],[117.402813,34.550843],[117.402813,34.569571],[117.370785,34.584846],[117.325205,34.573021],[117.325205,34.573021],[117.32151,34.566614],[117.32151,34.566614],[117.311654,34.561686],[117.311654,34.561686]]]]}},{"type":"Feature","properties":{"adcode":330000,"name":"浙江省","center":[120.153576,30.287459],"centroid":[120.109913,29.181466],"childrenNum":11,"level":"province","parent":{"adcode":100000},"subFeatureIndex":10,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[118.433896,28.288335],[118.444367,28.253548],[118.490562,28.238259],[118.493026,28.262509],[118.588497,28.282538],[118.595272,28.258292],[118.651322,28.277267],[118.674728,28.27147],[118.699366,28.309939],[118.719692,28.312047],[118.756032,28.252493],[118.802228,28.240368],[118.804075,28.207675],[118.771431,28.188687],[118.805923,28.154923],[118.802228,28.117453],[118.767735,28.10584],[118.719076,28.063601],[118.733858,28.027684],[118.730163,27.970615],[118.753568,27.947885],[118.818242,27.916689],[118.829329,27.847921],[118.873677,27.733563],[118.879836,27.667859],[118.913713,27.619616],[118.909401,27.568168],[118.869365,27.540047],[118.907553,27.460952],[118.955597,27.4498],[118.986393,27.47582],[118.983314,27.498649],[119.020886,27.498118],[119.03998,27.478475],[119.092335,27.466262],[119.129907,27.475289],[119.121284,27.438115],[119.14777,27.424836],[119.224146,27.416868],[119.26911,27.42218],[119.285124,27.457766],[119.334399,27.480067],[119.360269,27.524657],[119.416935,27.539517],[119.438493,27.508734],[119.466826,27.526249],[119.501935,27.610601],[119.501319,27.649837],[119.541971,27.666799],[119.606028,27.674749],[119.644217,27.663619],[119.626354,27.620676],[119.630666,27.582491],[119.675014,27.574534],[119.659615,27.540578],[119.690412,27.537394],[119.70889,27.514042],[119.703347,27.446613],[119.685485,27.438646],[119.711354,27.403054],[119.750774,27.373829],[119.739687,27.362668],[119.782187,27.330241],[119.768636,27.307909],[119.843165,27.300464],[119.938636,27.329709],[119.960194,27.365857],[120.008237,27.375423],[120.026099,27.344063],[120.052584,27.338747],[120.096316,27.390302],[120.136968,27.402523],[120.134504,27.420055],[120.221352,27.420055],[120.26262,27.432804],[120.273091,27.38924],[120.340844,27.399867],[120.343924,27.363199],[120.430155,27.258976],[120.401822,27.250996],[120.404286,27.204166],[120.461568,27.142407],[120.492365,27.136016],[120.545952,27.156785],[120.574901,27.234501],[120.554575,27.25206],[120.580444,27.321203],[120.665444,27.357884],[120.673451,27.420055],[120.703016,27.478475],[120.637111,27.561271],[120.634647,27.577186],[120.685154,27.622797],[120.709176,27.682699],[120.771386,27.734623],[120.777545,27.774873],[120.809574,27.775402],[120.840371,27.758986],[120.910588,27.864852],[120.942001,27.896592],[120.97403,27.887071],[121.027616,27.832574],[121.070116,27.834162],[121.107688,27.81352],[121.152036,27.815638],[121.134174,27.787051],[121.13479,27.787051],[121.149572,27.801345],[121.149572,27.801875],[121.153268,27.809815],[121.152652,27.810344],[121.192072,27.822518],[121.193304,27.872259],[121.162507,27.879136],[121.162507,27.90717],[121.099681,27.895005],[121.05595,27.900294],[120.991892,27.95],[121.015298,27.981714],[121.059029,28.096338],[121.108304,28.139092],[121.121239,28.12537],[121.140949,28.031382],[121.176058,28.022401],[121.261057,28.034551],[121.299862,28.067297],[121.328195,28.134343],[121.373774,28.133287],[121.402107,28.197127],[121.45631,28.250385],[121.488955,28.301509],[121.538846,28.299401],[121.571491,28.279376],[121.580114,28.240368],[121.627541,28.251966],[121.669425,28.33312],[121.660186,28.355768],[121.634317,28.347868],[121.658954,28.392628],[121.692831,28.407368],[121.671273,28.472621],[121.646019,28.511544],[121.634317,28.562542],[121.596128,28.575156],[121.557324,28.645033],[121.540694,28.655537],[121.646019,28.682842],[121.689135,28.719062],[121.704534,28.804577],[121.687287,28.863294],[121.774751,28.863818],[121.772287,28.898404],[121.743338,28.954451],[121.711309,28.985865],[121.712541,29.028783],[121.658954,29.058606],[121.660186,29.118226],[121.616454,29.143318],[121.608447,29.168927],[121.715621,29.125022],[121.750113,29.136523],[121.767975,29.166837],[121.780294,29.10986],[121.811091,29.10986],[121.85975,29.086328],[121.884388,29.105677],[121.966308,29.052852],[121.970004,29.092604],[121.988482,29.110906],[121.986634,29.154817],[121.948446,29.193485],[121.971851,29.193485],[121.966924,29.249894],[122.002032,29.260336],[122.000185,29.278608],[121.94475,29.28435],[121.958301,29.334448],[121.936127,29.348012],[121.937975,29.384],[121.975547,29.411113],[121.993409,29.45229],[121.973083,29.477821],[121.968772,29.515846],[121.995257,29.545007],[122.000185,29.582486],[121.966308,29.636078],[121.909641,29.650122],[121.872685,29.632437],[121.833265,29.653242],[121.937359,29.748373],[122.003264,29.762401],[122.043916,29.822647],[122.10243,29.859504],[122.143082,29.877668],[122.140003,29.901535],[122.00696,29.891678],[122.00388,29.92021],[121.971235,29.955476],[121.919497,29.920729],[121.835113,29.958068],[121.78399,29.99332],[121.721164,29.992802],[121.699606,30.007832],[121.652795,30.071037],[121.635548,30.070002],[121.561636,30.184395],[121.497578,30.258861],[121.395332,30.338435],[121.371926,30.37097],[121.328195,30.397299],[121.225333,30.404526],[121.183449,30.434458],[121.092906,30.515952],[121.058413,30.563888],[121.148956,30.599953],[121.188992,30.632916],[121.239499,30.648878],[121.274608,30.677191],[121.272144,30.723504],[121.232108,30.755909],[121.21671,30.785734],[121.174826,30.771851],[121.123087,30.77905],[121.13787,30.826342],[121.097833,30.857171],[121.060261,30.845354],[121.038087,30.814007],[120.991892,30.837133],[121.020225,30.872069],[120.993124,30.889532],[121.000515,30.938309],[120.989428,31.01425],[120.949392,31.030148],[120.940153,31.010146],[120.901349,31.017327],[120.865624,30.989627],[120.820661,31.006556],[120.770154,30.996809],[120.746132,30.962432],[120.698089,30.970643],[120.684538,30.955247],[120.709176,30.933176],[120.713487,30.88491],[120.68269,30.882342],[120.654973,30.846896],[120.589684,30.854089],[120.563814,30.835592],[120.504684,30.757967],[120.489285,30.763624],[120.460336,30.839702],[120.441858,30.860768],[120.435083,30.920855],[120.42338,30.902884],[120.35809,30.886964],[120.371025,30.948575],[120.316206,30.933689],[120.223816,30.926502],[120.149903,30.937283],[120.111099,30.955761],[120.052584,31.00553],[120.001461,31.027071],[119.988527,31.059375],[119.946027,31.106016],[119.921389,31.170045],[119.878274,31.160828],[119.827151,31.174142],[119.809904,31.148536],[119.779723,31.17875],[119.715666,31.169533],[119.705811,31.152634],[119.678093,31.167997],[119.623891,31.130096],[119.649144,31.104991],[119.629434,31.085517],[119.633746,31.019379],[119.580159,30.967051],[119.582007,30.932149],[119.563529,30.919315],[119.557369,30.874124],[119.575847,30.829939],[119.55429,30.825828],[119.527188,30.77905],[119.479761,30.772365],[119.482841,30.704467],[119.444652,30.650422],[119.408312,30.645274],[119.39045,30.685941],[119.343022,30.664322],[119.323312,30.630341],[119.238929,30.609225],[119.265414,30.574709],[119.237081,30.546881],[119.272189,30.510281],[119.326392,30.532964],[119.336247,30.508734],[119.335015,30.448389],[119.36766,30.38491],[119.402768,30.374584],[119.349182,30.349281],[119.326392,30.372002],[119.277117,30.341018],[119.246936,30.341018],[119.236465,30.297106],[119.201356,30.290905],[119.126828,30.304856],[119.091719,30.323972],[119.06277,30.304856],[118.988857,30.332237],[118.954365,30.360126],[118.880452,30.31519],[118.877988,30.282637],[118.905089,30.216464],[118.929727,30.2025],[118.852735,30.166805],[118.852119,30.149729],[118.895234,30.148694],[118.873677,30.11505],[118.878604,30.064822],[118.902626,30.029078],[118.894619,29.937845],[118.838568,29.934733],[118.841032,29.891159],[118.740634,29.814859],[118.744945,29.73902],[118.700598,29.706277],[118.647011,29.64336],[118.61991,29.654282],[118.573714,29.638159],[118.532446,29.588731],[118.500417,29.57572],[118.496106,29.519492],[118.381541,29.504909],[118.347664,29.474174],[118.329802,29.495012],[118.306396,29.479384],[118.316252,29.422581],[118.248498,29.431443],[118.193064,29.395472],[118.205382,29.343839],[118.166578,29.314099],[118.178281,29.297921],[118.138861,29.283828],[118.077883,29.290614],[118.073571,29.216993],[118.042159,29.210202],[118.027992,29.167882],[118.045238,29.149068],[118.037847,29.102017],[118.076035,29.074822],[118.066796,29.053898],[118.097593,28.998952],[118.115455,29.009944],[118.115455,29.009944],[118.133933,28.983771],[118.165346,28.986912],[118.227556,28.942406],[118.195527,28.904167],[118.270056,28.918836],[118.300237,28.826075],[118.364295,28.813491],[118.403099,28.702791],[118.428352,28.681267],[118.428352,28.617193],[118.428352,28.617193],[118.412338,28.55676],[118.4302,28.515225],[118.414802,28.497344],[118.474548,28.478934],[118.456686,28.424738],[118.432048,28.402104],[118.455454,28.384204],[118.480091,28.327325],[118.433896,28.288335]]],[[[122.163408,29.988137],[122.239785,29.962735],[122.279205,29.937326],[122.322321,29.940438],[122.341415,29.976733],[122.343879,30.020269],[122.310002,30.039958],[122.290908,30.074663],[122.301379,30.086574],[122.293988,30.100554],[122.152938,30.113497],[122.095655,30.158008],[122.048844,30.147141],[121.955221,30.183878],[121.934895,30.161631],[121.983554,30.100554],[121.989714,30.077252],[121.978011,30.059125],[122.027902,29.991247],[122.106742,30.005759],[122.118445,29.986582],[122.163408,29.988137]]],[[[122.213915,30.186464],[122.178807,30.199396],[122.152938,30.19112],[122.143698,30.163183],[122.168336,30.138343],[122.213915,30.186464]]],[[[122.229314,29.711995],[122.210836,29.700559],[122.269966,29.685482],[122.231162,29.710435],[122.229314,29.711995]]],[[[122.427646,30.738422],[122.427031,30.697777],[122.532972,30.696748],[122.528045,30.725047],[122.475074,30.714243],[122.445509,30.745109],[122.427646,30.738422]]],[[[122.162793,30.329654],[122.058083,30.291938],[122.154169,30.244903],[122.231778,30.234562],[122.247176,30.30124],[122.228082,30.329654],[122.191126,30.329654],[122.176343,30.351863],[122.162793,30.329654]]],[[[122.317393,30.249556],[122.277973,30.242835],[122.358661,30.236113],[122.365437,30.255242],[122.417175,30.238699],[122.40732,30.272817],[122.333408,30.272817],[122.317393,30.249556]]],[[[122.026054,29.178333],[122.013119,29.151681],[122.056851,29.158476],[122.075945,29.176243],[122.036525,29.20759],[122.026054,29.178333]]],[[[122.372212,29.893234],[122.386379,29.834069],[122.415944,29.828877],[122.401777,29.869884],[122.433806,29.883376],[122.43319,29.919173],[122.411632,29.951846],[122.398081,29.9394],[122.351886,29.959105],[122.330944,29.937845],[122.338951,29.911911],[122.353734,29.89946],[122.362973,29.894272],[122.372212,29.893234]]],[[[122.43011,30.408655],[122.432574,30.445294],[122.37406,30.461802],[122.277973,30.471603],[122.281669,30.418461],[122.318625,30.407106],[122.352502,30.422074],[122.43011,30.408655]]],[[[121.837577,28.770484],[121.86283,28.782024],[121.861598,28.814016],[121.837577,28.770484]]],[[[122.265038,29.84549],[122.221307,29.832512],[122.248408,29.804473],[122.310002,29.766557],[122.325401,29.781621],[122.299531,29.819532],[122.319241,29.829397],[122.265038,29.84549]]],[[[121.790765,29.082144],[121.832649,29.050236],[121.84312,29.082144],[121.82033,29.099402],[121.790765,29.082144]]],[[[121.201311,27.623328],[121.197616,27.618025],[121.198848,27.616964],[121.203775,27.625979],[121.201311,27.623328]]],[[[121.943518,30.776993],[121.968156,30.688514],[121.997105,30.658659],[122.087032,30.602014],[122.133227,30.595317],[122.075329,30.647848],[122.011271,30.66947],[121.992793,30.695204],[121.987866,30.753338],[121.970004,30.789333],[121.943518,30.776993]]],[[[121.889315,28.471569],[121.918881,28.497344],[121.881924,28.502603],[121.889315,28.471569]]],[[[122.182503,29.650642],[122.211452,29.692241],[122.200365,29.712515],[122.146778,29.749412],[122.13138,29.788893],[122.083952,29.78318],[122.047612,29.719791],[122.074097,29.701599],[122.095655,29.716673],[122.138155,29.662083],[122.182503,29.650642]]],[[[122.461523,29.944068],[122.459675,29.944586],[122.460291,29.947179],[122.451668,29.943031],[122.451052,29.940956],[122.450436,29.940956],[122.449204,29.9394],[122.4529,29.936807],[122.452284,29.935252],[122.45598,29.926435],[122.457827,29.927472],[122.462755,29.927991],[122.467067,29.928509],[122.459059,29.938882],[122.461523,29.944068]]],[[[122.570544,30.644244],[122.559457,30.679764],[122.546523,30.651967],[122.570544,30.644244]]],[[[121.869605,28.423685],[121.910873,28.44],[121.889931,28.45105],[121.869605,28.423685]]],[[[122.065474,30.179739],[122.055619,30.200431],[122.017431,30.186464],[122.025438,30.161631],[122.065474,30.179739]]],[[[122.391306,29.970512],[122.411632,30.025969],[122.378371,30.023896],[122.3679,29.980361],[122.391306,29.970512]]],[[[121.850511,29.977251],[121.874533,29.964809],[121.933047,29.994875],[121.924424,30.052391],[121.88562,30.094859],[121.848663,30.101072],[121.84004,30.047211],[121.844968,29.982953],[121.850511,29.977251]]],[[[121.066421,27.478475],[121.066421,27.461483],[121.107073,27.443958],[121.067036,27.478475],[121.066421,27.478475]]],[[[121.952141,29.187738],[121.979243,29.160043],[121.976779,29.191918],[121.952141,29.187738]]],[[[122.038373,29.759284],[122.011271,29.746294],[122.02975,29.716673],[122.038373,29.759284]]],[[[121.940438,30.114533],[121.910257,30.089163],[121.945982,30.064304],[121.962612,30.106249],[121.940438,30.114533]]],[[[121.957685,30.287804],[122.0008,30.308473],[121.989098,30.339985],[121.94167,30.33327],[121.921344,30.30744],[121.957685,30.287804]]],[[[122.192974,29.965327],[122.163408,29.988137],[122.152322,29.97103],[122.154169,29.97103],[122.155401,29.970512],[122.18435,29.955476],[122.192974,29.965327]]],[[[122.287828,29.723949],[122.301379,29.748373],[122.258263,29.753569],[122.241633,29.784738],[122.2133,29.771752],[122.251488,29.731225],[122.287828,29.723949]]],[[[121.134174,27.787051],[121.134174,27.785992],[121.13479,27.787051],[121.134174,27.787051]]],[[[122.760254,30.141966],[122.784275,30.130062],[122.781196,30.13265],[122.778116,30.13679],[122.770725,30.138861],[122.763333,30.141966],[122.762101,30.142484],[122.760254,30.141966]]],[[[122.264423,30.269716],[122.253952,30.237147],[122.315545,30.250073],[122.300147,30.271266],[122.264423,30.269716]]],[[[122.282901,29.860542],[122.30877,29.849642],[122.343263,29.860542],[122.343263,29.882857],[122.301379,29.883895],[122.282901,29.860542]]],[[[122.781196,30.694175],[122.799674,30.716301],[122.778732,30.729677],[122.757174,30.713728],[122.781196,30.694175]]],[[[121.098449,27.937311],[121.152652,27.961629],[121.120623,27.986471],[121.0695,27.984357],[121.038087,27.948942],[121.098449,27.937311]]],[[[121.185913,27.963215],[121.237652,27.988056],[121.197616,28.000739],[121.17113,27.978543],[121.185913,27.963215]]],[[[122.454132,29.956513],[122.447972,29.955994],[122.445509,29.952365],[122.446741,29.951327],[122.447972,29.947698],[122.459059,29.950809],[122.458443,29.951846],[122.455364,29.955994],[122.454132,29.956513]]],[[[122.836014,30.698806],[122.831087,30.728648],[122.807681,30.714243],[122.836014,30.698806]]],[[[122.200365,29.969475],[122.233626,29.946661],[122.273662,29.93214],[122.239785,29.960142],[122.200365,29.969475]]],[[[122.029134,29.954957],[122.043916,29.930584],[122.058699,29.955994],[122.029134,29.954957]]],[[[121.044247,27.979072],[121.089826,27.998625],[121.073812,28.007608],[121.044247,27.979072]]],[[[122.471378,29.927472],[122.470762,29.925916],[122.473226,29.925397],[122.47261,29.927472],[122.471378,29.927472]]],[[[122.152322,29.97103],[122.155401,29.970512],[122.154169,29.97103],[122.152322,29.97103]]]]}},{"type":"Feature","properties":{"adcode":340000,"name":"安徽省","center":[117.283042,31.86119],"centroid":[117.226884,31.849254],"childrenNum":16,"level":"province","parent":{"adcode":100000},"subFeatureIndex":11,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[116.599629,34.014324],[116.641512,33.978103],[116.64336,33.896675],[116.631042,33.887733],[116.566984,33.9081],[116.558361,33.881274],[116.486296,33.869846],[116.437637,33.846489],[116.437021,33.801246],[116.408071,33.805721],[116.393905,33.782843],[116.316912,33.771402],[116.263326,33.730101],[116.230065,33.735078],[116.155536,33.709693],[116.132747,33.751501],[116.100102,33.782843],[116.074232,33.781351],[116.055754,33.804727],[116.05945,33.860902],[115.982457,33.917039],[116.00032,33.965199],[115.95782,34.007875],[115.904233,34.009859],[115.876516,34.028708],[115.877132,34.002913],[115.85003,34.004898],[115.846335,34.028708],[115.809378,34.062428],[115.768726,34.061932],[115.736082,34.076805],[115.705901,34.059949],[115.658473,34.061437],[115.642459,34.03218],[115.60735,34.030196],[115.579017,33.974133],[115.577785,33.950307],[115.547604,33.874815],[115.631988,33.869846],[115.614126,33.775879],[115.576553,33.787817],[115.563003,33.772895],[115.601807,33.718653],[115.601191,33.658898],[115.639995,33.585143],[115.564851,33.576169],[115.511264,33.55323],[115.463837,33.567193],[115.422569,33.557219],[115.394851,33.506335],[115.366518,33.5233],[115.345576,33.502842],[115.345576,33.449928],[115.324634,33.457418],[115.315395,33.431451],[115.328946,33.403477],[115.313547,33.376994],[115.341881,33.370997],[115.365286,33.336005],[115.361591,33.298497],[115.335105,33.297997],[115.340033,33.260973],[115.300613,33.204407],[115.303692,33.149809],[115.289526,33.131769],[115.245178,33.135778],[115.194671,33.120743],[115.168186,33.088658],[115.041302,33.086653],[114.990795,33.102195],[114.966158,33.147304],[114.932897,33.153817],[114.902716,33.129764],[114.897172,33.086653],[114.913187,33.083143],[114.925506,33.016928],[114.891629,33.020441],[114.883006,32.990328],[114.916266,32.971251],[114.943368,32.935094],[115.009273,32.940117],[115.035143,32.932582],[115.029599,32.906962],[115.139237,32.897917],[115.155867,32.864747],[115.197135,32.856201],[115.189744,32.812452],[115.211301,32.785791],[115.189744,32.770695],[115.179273,32.726402],[115.182968,32.666973],[115.20083,32.591876],[115.24333,32.593388],[115.267352,32.578261],[115.30554,32.583303],[115.304924,32.553042],[115.411482,32.575235],[115.409018,32.549007],[115.497713,32.492489],[115.5088,32.468761],[115.510648,32.468761],[115.510648,32.468256],[115.510648,32.467751],[115.509416,32.466741],[115.522967,32.441997],[115.57101,32.419266],[115.604271,32.425833],[115.626445,32.40512],[115.657857,32.428864],[115.667712,32.409667],[115.704669,32.495013],[115.742241,32.476335],[115.771806,32.505108],[115.789052,32.468761],[115.861117,32.537403],[115.891298,32.576243],[115.910393,32.567165],[115.8759,32.542448],[115.845719,32.501575],[115.883291,32.487946],[115.865429,32.458662],[115.899306,32.390971],[115.912856,32.227596],[115.941805,32.166318],[115.922095,32.049725],[115.928871,32.003046],[115.909161,31.94314],[115.920248,31.920285],[115.894994,31.8649],[115.893762,31.832365],[115.914704,31.814567],[115.886371,31.776418],[115.851878,31.786593],[115.808147,31.770313],[115.808147,31.770313],[115.767495,31.78761],[115.731154,31.76726],[115.676336,31.778453],[115.553764,31.69549],[115.534054,31.698545],[115.495249,31.673083],[115.476771,31.643028],[115.485394,31.608885],[115.439815,31.588496],[115.415793,31.525771],[115.371446,31.495668],[115.389924,31.450241],[115.373909,31.405813],[115.393004,31.389977],[115.372062,31.349098],[115.40717,31.337854],[115.443511,31.344498],[115.473076,31.265242],[115.507568,31.267799],[115.539597,31.231985],[115.540213,31.194621],[115.585793,31.143926],[115.603655,31.17363],[115.655394,31.211002],[115.700973,31.201276],[115.778582,31.112164],[115.797676,31.128047],[115.837712,31.127022],[115.867277,31.147512],[115.887603,31.10909],[115.939958,31.071678],[115.938726,31.04707],[116.006479,31.034764],[116.015102,31.011685],[116.058834,31.012711],[116.071769,30.956787],[116.03974,30.957813],[115.976298,30.931636],[115.932566,30.889532],[115.865429,30.864364],[115.848799,30.828397],[115.863581,30.815549],[115.851262,30.756938],[115.782893,30.751795],[115.762567,30.685426],[115.81369,30.637035],[115.819234,30.597893],[115.848799,30.602014],[115.876516,30.582438],[115.887603,30.542758],[115.910393,30.519046],[115.894994,30.452517],[115.921479,30.416397],[115.885139,30.379747],[115.91532,30.337919],[115.903001,30.31364],[115.985537,30.290905],[115.997856,30.252657],[116.065609,30.204569],[116.055754,30.180774],[116.088399,30.110391],[116.078544,30.062233],[116.091479,30.036331],[116.073616,29.969993],[116.128435,29.897904],[116.13521,29.819532],[116.172783,29.828358],[116.227601,29.816936],[116.250391,29.785777],[116.280572,29.788893],[116.342782,29.835626],[116.467818,29.896347],[116.525716,29.897385],[116.552201,29.909836],[116.585462,30.045657],[116.620571,30.073109],[116.666766,30.076734],[116.720353,30.053945],[116.747454,30.057053],[116.783794,30.030632],[116.802889,29.99643],[116.830606,30.004723],[116.83307,29.95755],[116.868794,29.980361],[116.900207,29.949253],[116.882961,29.893753],[116.780715,29.792529],[116.762237,29.802396],[116.673541,29.709916],[116.698795,29.707836],[116.70557,29.69692],[116.706802,29.6964],[116.704954,29.688602],[116.680317,29.681323],[116.651983,29.637118],[116.716657,29.590813],[116.721585,29.564789],[116.760389,29.599139],[116.780715,29.569994],[116.849084,29.57624],[116.873722,29.609546],[116.939627,29.648561],[116.974736,29.657403],[116.996294,29.683403],[117.041873,29.680803],[117.112706,29.711995],[117.108395,29.75201],[117.136728,29.775388],[117.123177,29.798761],[117.073286,29.831992],[117.127489,29.86158],[117.129952,29.89946],[117.171836,29.920729],[117.2168,29.926953],[117.246365,29.915023],[117.261763,29.880781],[117.25314,29.834588],[117.29256,29.822647],[117.338756,29.848085],[117.359082,29.812782],[117.382487,29.840818],[117.415132,29.85068],[117.408973,29.802396],[117.455168,29.749412],[117.453936,29.688082],[117.490277,29.660003],[117.530313,29.654282],[117.523538,29.630356],[117.543248,29.588731],[117.608537,29.591333],[117.647957,29.614749],[117.678754,29.595496],[117.690457,29.555939],[117.729877,29.550213],[117.795167,29.570515],[117.872775,29.54761],[117.933753,29.549172],[118.00397,29.578322],[118.042774,29.566351],[118.050782,29.542924],[118.095129,29.534072],[118.143788,29.489803],[118.127774,29.47209],[118.136397,29.418932],[118.193064,29.395472],[118.248498,29.431443],[118.316252,29.422581],[118.306396,29.479384],[118.329802,29.495012],[118.347664,29.474174],[118.381541,29.504909],[118.496106,29.519492],[118.500417,29.57572],[118.532446,29.588731],[118.573714,29.638159],[118.61991,29.654282],[118.647011,29.64336],[118.700598,29.706277],[118.744945,29.73902],[118.740634,29.814859],[118.841032,29.891159],[118.838568,29.934733],[118.894619,29.937845],[118.902626,30.029078],[118.878604,30.064822],[118.873677,30.11505],[118.895234,30.148694],[118.852119,30.149729],[118.852735,30.166805],[118.929727,30.2025],[118.905089,30.216464],[118.877988,30.282637],[118.880452,30.31519],[118.954365,30.360126],[118.988857,30.332237],[119.06277,30.304856],[119.091719,30.323972],[119.126828,30.304856],[119.201356,30.290905],[119.236465,30.297106],[119.246936,30.341018],[119.277117,30.341018],[119.326392,30.372002],[119.349182,30.349281],[119.402768,30.374584],[119.36766,30.38491],[119.335015,30.448389],[119.336247,30.508734],[119.326392,30.532964],[119.272189,30.510281],[119.237081,30.546881],[119.265414,30.574709],[119.238929,30.609225],[119.323312,30.630341],[119.343022,30.664322],[119.39045,30.685941],[119.408312,30.645274],[119.444652,30.650422],[119.482841,30.704467],[119.479761,30.772365],[119.527188,30.77905],[119.55429,30.825828],[119.575847,30.829939],[119.557369,30.874124],[119.563529,30.919315],[119.582007,30.932149],[119.580159,30.967051],[119.633746,31.019379],[119.629434,31.085517],[119.649144,31.104991],[119.623891,31.130096],[119.599869,31.10909],[119.532732,31.159291],[119.461283,31.156219],[119.439109,31.177214],[119.391682,31.174142],[119.360269,31.213049],[119.374435,31.258591],[119.350414,31.301043],[119.338095,31.259103],[119.294363,31.263195],[119.266646,31.250405],[119.198277,31.270357],[119.197661,31.295418],[119.158241,31.294907],[119.107118,31.250917],[119.10527,31.235055],[119.014727,31.241707],[118.984546,31.237102],[118.870597,31.242219],[118.794836,31.229426],[118.756648,31.279564],[118.726467,31.282121],[118.720924,31.322518],[118.745561,31.372606],[118.767735,31.363919],[118.824401,31.375672],[118.852119,31.393553],[118.883532,31.500261],[118.857046,31.506384],[118.865669,31.519139],[118.885995,31.519139],[118.881684,31.564023],[118.858894,31.623665],[118.802844,31.619078],[118.773894,31.682759],[118.748025,31.675629],[118.736322,31.633347],[118.643315,31.649651],[118.643315,31.671555],[118.697518,31.709747],[118.653786,31.73011],[118.641467,31.75861],[118.571866,31.746397],[118.5577,31.73011],[118.521975,31.743343],[118.533678,31.76726],[118.481939,31.778453],[118.504729,31.841516],[118.466541,31.857784],[118.472084,31.879639],[118.363679,31.930443],[118.389548,31.985281],[118.394476,32.076098],[118.433896,32.086746],[118.501033,32.121726],[118.49549,32.165304],[118.510888,32.194176],[118.643931,32.209875],[118.674728,32.250375],[118.657482,32.30148],[118.703061,32.328792],[118.685199,32.403604],[118.691359,32.472295],[118.628533,32.467751],[118.592192,32.481383],[118.608823,32.536899],[118.564475,32.562122],[118.568787,32.585825],[118.59712,32.600951],[118.632844,32.578261],[118.658714,32.594397],[118.688895,32.588346],[118.719076,32.614059],[118.719076,32.614059],[118.73509,32.58885],[118.757264,32.603976],[118.784981,32.582295],[118.820706,32.60448],[118.84288,32.56767],[118.908169,32.59238],[118.890923,32.553042],[118.92172,32.557078],[118.922336,32.557078],[118.92172,32.557078],[118.922336,32.557078],[118.975923,32.505108],[119.041212,32.515201],[119.084944,32.452602],[119.142226,32.499556],[119.168096,32.536394],[119.152697,32.557582],[119.22045,32.576748],[119.230921,32.607001],[119.208748,32.641276],[119.211827,32.708275],[119.184726,32.825529],[119.113277,32.823014],[119.054763,32.8748],[119.020886,32.955685],[118.993169,32.958196],[118.934039,32.93861],[118.892771,32.941121],[118.89585,32.957694],[118.89585,32.957694],[118.849039,32.956689],[118.846575,32.922034],[118.821322,32.920527],[118.810235,32.853687],[118.743097,32.853184],[118.743097,32.853184],[118.73817,32.772708],[118.756648,32.737477],[118.707373,32.72036],[118.642699,32.744525],[118.572482,32.719856],[118.560163,32.729926],[118.483787,32.721367],[118.450526,32.743518],[118.411106,32.715828],[118.375382,32.718849],[118.363063,32.770695],[118.334114,32.761637],[118.300237,32.783275],[118.301469,32.846145],[118.250346,32.848157],[118.2331,32.914498],[118.252194,32.936601],[118.291614,32.946143],[118.303933,32.96874],[118.26944,32.969242],[118.244803,32.998359],[118.243571,33.027967],[118.219549,33.114227],[118.217085,33.191888],[118.178281,33.217926],[118.149332,33.169348],[118.038463,33.134776],[118.037231,33.152314],[117.988572,33.180869],[117.977485,33.226437],[117.942376,33.224936],[117.939297,33.262475],[117.974405,33.279487],[117.992883,33.333005],[118.029224,33.374995],[118.016905,33.402978],[118.027376,33.455421],[118.050782,33.491863],[118.107448,33.475391],[118.117919,33.594615],[118.112376,33.617045],[118.16781,33.663381],[118.161035,33.735576],[118.117919,33.766427],[118.065564,33.76593],[118.019985,33.738562],[117.972557,33.74951],[117.901724,33.720146],[117.843826,33.736074],[117.791471,33.733585],[117.750203,33.710688],[117.72495,33.74951],[117.739732,33.758467],[117.759442,33.874318],[117.753899,33.891211],[117.715095,33.879287],[117.672595,33.934916],[117.671363,33.992494],[117.629479,34.028708],[117.612849,34.000433],[117.569117,33.985051],[117.543248,34.038627],[117.514914,34.060941],[117.435458,34.028212],[117.404045,34.03218],[117.357234,34.088205],[117.311654,34.067882],[117.277162,34.078787],[117.257452,34.065899],[117.192162,34.068873],[117.130568,34.101586],[117.123793,34.128342],[117.046801,34.151622],[117.025243,34.167469],[117.051112,34.221425],[116.969192,34.283753],[116.983359,34.348011],[116.960569,34.363821],[116.969192,34.389012],[116.909446,34.408271],[116.828142,34.389012],[116.782563,34.429993],[116.773939,34.453683],[116.722816,34.472434],[116.662454,34.472927],[116.592237,34.493646],[116.594085,34.511894],[116.490607,34.573513],[116.477057,34.614896],[116.432709,34.630163],[116.430245,34.650843],[116.374195,34.640011],[116.334159,34.620806],[116.32492,34.601104],[116.286116,34.608986],[116.247927,34.551829],[116.196804,34.575977],[116.191261,34.535561],[116.204196,34.508442],[116.178326,34.496112],[116.162312,34.459605],[116.178942,34.430487],[116.215898,34.403333],[116.213435,34.382098],[116.255934,34.376665],[116.301514,34.342082],[116.357564,34.319843],[116.372347,34.26595],[116.409303,34.273863],[116.409303,34.273863],[116.456731,34.268917],[116.516477,34.296114],[116.562056,34.285731],[116.582382,34.266444],[116.545426,34.241711],[116.542962,34.203608],[116.565752,34.16945],[116.536187,34.151127],[116.52818,34.122892],[116.576223,34.068873],[116.576223,34.068873],[116.599629,34.014324],[116.599629,34.014324]]],[[[118.865669,31.519139],[118.857046,31.506384],[118.883532,31.500261],[118.885995,31.519139],[118.865669,31.519139]]],[[[116.698795,29.707836],[116.673541,29.709916],[116.653831,29.694841],[116.680317,29.681323],[116.704954,29.688602],[116.706802,29.6964],[116.70557,29.69692],[116.698795,29.707836]]],[[[115.5088,32.468761],[115.509416,32.466741],[115.510648,32.467751],[115.510648,32.468256],[115.510648,32.468761],[115.5088,32.468761]]]]}},{"type":"Feature","properties":{"adcode":350000,"name":"福建省","center":[119.306239,26.075302],"centroid":[118.006468,26.069925],"childrenNum":9,"level":"province","parent":{"adcode":100000},"subFeatureIndex":12,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[119.004872,24.970009],[118.989473,24.973807],[119.023966,25.04377],[119.016575,25.058409],[118.974691,25.024792],[118.945126,25.028588],[118.892155,25.092558],[118.974691,25.115319],[118.951901,25.15162],[118.985162,25.168954],[118.985162,25.19495],[118.942046,25.211195],[118.940198,25.21715],[118.943278,25.221482],[118.903242,25.239347],[118.900162,25.242595],[118.919256,25.248008],[118.91556,25.256668],[118.918024,25.25721],[118.956212,25.272905],[118.996864,25.266411],[118.975307,25.237723],[118.990089,25.20199],[119.055379,25.219316],[119.074473,25.211195],[119.054147,25.168412],[119.032589,25.17437],[119.028893,25.139702],[119.06585,25.102855],[119.075705,25.099604],[119.134219,25.106107],[119.107118,25.075214],[119.119436,25.012861],[119.146538,25.056782],[119.165632,25.145661],[119.137299,25.15487],[119.108349,25.193867],[119.131755,25.223106],[119.190269,25.175995],[119.231537,25.188993],[119.26911,25.159746],[119.314689,25.190076],[119.294979,25.237182],[119.331935,25.230685],[119.380595,25.250173],[119.333167,25.287516],[119.299291,25.328634],[119.247552,25.333502],[119.240776,25.316733],[119.218603,25.368115],[119.14469,25.388121],[119.151465,25.426503],[119.191501,25.424341],[119.232153,25.442176],[119.219834,25.468654],[119.256175,25.488643],[119.275269,25.476758],[119.26295,25.428124],[119.288204,25.410827],[119.353493,25.411908],[119.343638,25.472436],[119.359037,25.521592],[119.400921,25.493505],[119.45266,25.493505],[119.438493,25.412449],[119.463131,25.448661],[119.491464,25.443257],[119.48592,25.418935],[119.507478,25.396231],[119.486536,25.369737],[119.548746,25.365952],[119.578927,25.400556],[119.555521,25.429205],[119.577695,25.445959],[119.59063,25.398394],[119.582623,25.374063],[119.597405,25.334584],[119.649144,25.342697],[119.665159,25.3719],[119.656535,25.396772],[119.670086,25.435691],[119.622659,25.434069],[119.675014,25.468113],[119.682405,25.445959],[119.688564,25.441095],[119.773564,25.395691],[119.764325,25.433529],[119.804977,25.457847],[119.866571,25.455145],[119.864107,25.469734],[119.862875,25.474597],[119.811136,25.507009],[119.81668,25.532393],[119.861027,25.531313],[119.883817,25.546432],[119.831462,25.579905],[119.843165,25.597717],[119.790194,25.614447],[119.785883,25.66786],[119.700267,25.616606],[119.683637,25.592859],[119.716898,25.551292],[119.715666,25.51187],[119.680557,25.497827],[119.675014,25.475137],[119.634362,25.475137],[119.611572,25.519972],[119.616499,25.556691],[119.586934,25.59232],[119.534579,25.585303],[119.541355,25.6247],[119.478529,25.631715],[119.472986,25.662466],[119.543819,25.684581],[119.602949,25.68512],[119.602949,25.714779],[119.626354,25.723406],[119.628202,25.87212],[119.638057,25.889888],[119.69534,25.904424],[119.723673,26.011503],[119.700267,26.032477],[119.668854,26.026024],[119.654688,26.090002],[119.618963,26.11956],[119.604181,26.168985],[119.664543,26.202282],[119.676246,26.262943],[119.7711,26.285481],[119.802513,26.268846],[119.806825,26.307479],[119.845013,26.323036],[119.862875,26.307479],[119.904143,26.308552],[119.95465,26.352534],[119.946027,26.374519],[119.893672,26.355752],[119.835774,26.434019],[119.83639,26.454381],[119.788346,26.583435],[119.740303,26.610727],[119.670086,26.618218],[119.605412,26.595744],[119.577695,26.622498],[119.619579,26.649246],[119.637441,26.703256],[119.664543,26.726243],[119.711354,26.686681],[119.833926,26.690959],[119.864107,26.671174],[119.873962,26.642827],[119.908455,26.661547],[119.899216,26.693098],[119.938636,26.747088],[119.942947,26.784492],[120.052584,26.786629],[120.061824,26.768997],[119.99407,26.720363],[119.969433,26.686681],[119.972512,26.654594],[119.949107,26.624638],[119.901679,26.624638],[119.851788,26.595209],[119.828383,26.524013],[119.867187,26.509019],[119.947875,26.56042],[119.93802,26.576478],[119.967585,26.597885],[120.007621,26.595744],[120.063671,26.627848],[120.093852,26.613938],[120.1382,26.638012],[120.110483,26.692563],[120.162222,26.717691],[120.151135,26.750829],[120.106787,26.752966],[120.136352,26.797847],[120.103707,26.794642],[120.102476,26.82669],[120.073526,26.823485],[120.054432,26.863533],[120.117874,26.882751],[120.126497,26.920644],[120.130193,26.917976],[120.1807,26.920644],[120.233055,26.907837],[120.25954,26.982526],[120.279866,26.987326],[120.275554,27.027315],[120.29588,27.035845],[120.282946,27.089671],[120.391967,27.081146],[120.403054,27.10086],[120.461568,27.142407],[120.404286,27.204166],[120.401822,27.250996],[120.430155,27.258976],[120.343924,27.363199],[120.340844,27.399867],[120.273091,27.38924],[120.26262,27.432804],[120.221352,27.420055],[120.134504,27.420055],[120.136968,27.402523],[120.096316,27.390302],[120.052584,27.338747],[120.026099,27.344063],[120.008237,27.375423],[119.960194,27.365857],[119.938636,27.329709],[119.843165,27.300464],[119.768636,27.307909],[119.782187,27.330241],[119.739687,27.362668],[119.750774,27.373829],[119.711354,27.403054],[119.685485,27.438646],[119.703347,27.446613],[119.70889,27.514042],[119.690412,27.537394],[119.659615,27.540578],[119.675014,27.574534],[119.630666,27.582491],[119.626354,27.620676],[119.644217,27.663619],[119.606028,27.674749],[119.541971,27.666799],[119.501319,27.649837],[119.501935,27.610601],[119.466826,27.526249],[119.438493,27.508734],[119.416935,27.539517],[119.360269,27.524657],[119.334399,27.480067],[119.285124,27.457766],[119.26911,27.42218],[119.224146,27.416868],[119.14777,27.424836],[119.121284,27.438115],[119.129907,27.475289],[119.092335,27.466262],[119.03998,27.478475],[119.020886,27.498118],[118.983314,27.498649],[118.986393,27.47582],[118.955597,27.4498],[118.907553,27.460952],[118.869365,27.540047],[118.909401,27.568168],[118.913713,27.619616],[118.879836,27.667859],[118.873677,27.733563],[118.829329,27.847921],[118.818242,27.916689],[118.753568,27.947885],[118.730163,27.970615],[118.733858,28.027684],[118.719076,28.063601],[118.767735,28.10584],[118.802228,28.117453],[118.805923,28.154923],[118.771431,28.188687],[118.804075,28.207675],[118.802228,28.240368],[118.756032,28.252493],[118.719692,28.312047],[118.699366,28.309939],[118.674728,28.27147],[118.651322,28.277267],[118.595272,28.258292],[118.588497,28.282538],[118.493026,28.262509],[118.490562,28.238259],[118.444367,28.253548],[118.433896,28.288335],[118.424041,28.291497],[118.314404,28.221913],[118.339041,28.193962],[118.375382,28.186577],[118.361215,28.155978],[118.356288,28.091586],[118.242339,28.075746],[118.199839,28.049869],[118.153644,28.062016],[118.120999,28.041946],[118.129006,28.017118],[118.094513,28.003909],[118.096977,27.970615],[117.999043,27.991227],[117.965166,27.962687],[117.942992,27.974315],[117.910963,27.949471],[117.856145,27.94577],[117.78716,27.896063],[117.788392,27.855858],[117.740348,27.800286],[117.704624,27.834162],[117.68245,27.823577],[117.649805,27.851625],[117.609769,27.863265],[117.556182,27.966387],[117.52169,27.982243],[117.477958,27.930966],[117.453936,27.939955],[117.407741,27.893948],[117.366473,27.88231],[117.341836,27.855858],[117.334444,27.8876],[117.280242,27.871201],[117.276546,27.847921],[117.303031,27.833103],[117.296256,27.764282],[117.245133,27.71926],[117.205097,27.714492],[117.204481,27.683759],[117.174916,27.677399],[117.114554,27.692238],[117.096076,27.667329],[117.11209,27.645596],[117.094228,27.627569],[117.065279,27.665739],[117.040641,27.669979],[117.003685,27.625449],[117.024627,27.592569],[117.01662,27.563393],[117.054808,27.5427],[117.076982,27.566046],[117.103467,27.533149],[117.110242,27.458828],[117.133032,27.42218],[117.107163,27.393491],[117.104699,27.330773],[117.140423,27.322798],[117.136728,27.303123],[117.171836,27.29036],[117.149662,27.241419],[117.044953,27.146667],[117.05296,27.100327],[116.967344,27.061962],[116.936547,27.019319],[116.910062,27.034779],[116.851548,27.009188],[116.817671,27.018252],[116.679085,26.978259],[116.632889,26.933984],[116.602092,26.888623],[116.548506,26.84004],[116.543578,26.803723],[116.557745,26.773806],[116.515245,26.720898],[116.520172,26.684543],[116.566368,26.650315],[116.553433,26.575942],[116.539267,26.559349],[116.597165,26.512768],[116.610716,26.476882],[116.638433,26.477418],[116.608252,26.429732],[116.601476,26.372911],[116.553433,26.365404],[116.553433,26.400253],[116.519557,26.410437],[116.499846,26.361651],[116.459194,26.345026],[116.437021,26.308016],[116.412999,26.297822],[116.385282,26.238253],[116.400064,26.202819],[116.392057,26.171133],[116.435789,26.159854],[116.476441,26.172745],[116.489375,26.113649],[116.384666,26.030864],[116.360028,25.991601],[116.369883,25.963088],[116.326152,25.956631],[116.303362,25.924341],[116.258398,25.902809],[116.225138,25.908731],[116.17771,25.894195],[116.132131,25.860273],[116.131515,25.824185],[116.18079,25.778926],[116.129667,25.758985],[116.106877,25.701299],[116.067457,25.703995],[116.068689,25.646282],[116.041588,25.62416],[116.063145,25.56317],[116.040356,25.548052],[116.03666,25.514571],[116.005247,25.490264],[116.023109,25.435691],[115.992928,25.374063],[116.008327,25.319437],[115.987385,25.290221],[115.949813,25.292386],[115.930719,25.236099],[115.855574,25.20957],[115.860501,25.165704],[115.888219,25.128866],[115.880212,25.092016],[115.908545,25.084428],[115.928255,25.050276],[115.873436,25.019911],[115.925175,24.960786],[115.870356,24.959701],[115.89253,24.936911],[115.907929,24.923343],[115.985537,24.899461],[116.015102,24.905975],[116.068073,24.850053],[116.153073,24.846795],[116.191877,24.877203],[116.221442,24.829959],[116.251007,24.82507],[116.244232,24.793563],[116.297202,24.801712],[116.345862,24.828872],[116.363724,24.87123],[116.395137,24.877746],[116.417927,24.840821],[116.381586,24.82507],[116.375427,24.803885],[116.419158,24.767482],[116.416079,24.744113],[116.44626,24.714216],[116.485064,24.720196],[116.517709,24.652225],[116.506622,24.621218],[116.530027,24.604895],[116.570679,24.621762],[116.600861,24.654401],[116.623034,24.64189],[116.667382,24.658752],[116.777635,24.679418],[116.815207,24.654944],[116.761005,24.583128],[116.759157,24.545572],[116.796729,24.502014],[116.83307,24.496568],[116.860787,24.460075],[116.839229,24.442097],[116.903903,24.369614],[116.895895,24.350533],[116.919301,24.321087],[116.914374,24.287817],[116.938395,24.28127],[116.933468,24.220157],[116.956257,24.216883],[116.998757,24.179217],[116.9347,24.126794],[116.930388,24.064514],[116.953178,24.008218],[116.981511,23.999471],[116.976583,23.931659],[116.955642,23.922359],[116.981511,23.855602],[117.012308,23.855054],[117.019083,23.801952],[117.048032,23.758687],[117.055424,23.694038],[117.123793,23.647448],[117.147199,23.654027],[117.192778,23.629356],[117.192778,23.5619],[117.291328,23.571225],[117.302415,23.550379],[117.387415,23.555317],[117.463791,23.584937],[117.454552,23.628259],[117.493357,23.642514],[117.501364,23.70445],[117.54448,23.715956],[117.601762,23.70171],[117.660276,23.789357],[117.651653,23.815093],[117.671979,23.878041],[117.691073,23.888985],[117.762522,23.886796],[117.792703,23.906494],[117.807486,23.947521],[117.864768,24.004938],[117.910347,24.012045],[117.927594,24.039922],[117.936217,24.100029],[118.000275,24.152462],[118.019369,24.197232],[118.074803,24.225615],[118.115455,24.229435],[118.158571,24.269814],[118.112376,24.357075],[118.081579,24.35653],[118.088354,24.408858],[118.048934,24.418122],[118.084042,24.528695],[118.121615,24.570067],[118.150564,24.583673],[118.169042,24.559725],[118.242955,24.51236],[118.375382,24.536317],[118.363679,24.567889],[118.444367,24.614689],[118.512736,24.60816],[118.557084,24.572788],[118.558316,24.51236],[118.614366,24.521617],[118.680272,24.58204],[118.687047,24.63373],[118.661178,24.622306],[118.652554,24.653857],[118.670417,24.679962],[118.703677,24.665278],[118.778822,24.743569],[118.786213,24.77672],[118.650707,24.808774],[118.647627,24.843536],[118.702445,24.865258],[118.69875,24.848967],[118.748641,24.84245],[118.807771,24.870687],[118.834256,24.854397],[118.864437,24.887518],[118.933423,24.870687],[118.988857,24.878831],[118.987009,24.898375],[118.932807,24.906518],[118.91864,24.932569],[118.945741,24.954275],[119.014111,24.941252],[119.032589,24.961328],[119.032589,24.961871],[119.007335,24.963499],[119.004872,24.970009]]],[[[118.412338,24.514538],[118.374766,24.458986],[118.318715,24.486765],[118.298389,24.477506],[118.31194,24.424661],[118.282375,24.413218],[118.329802,24.382152],[118.353208,24.415398],[118.405563,24.427931],[118.457918,24.412128],[118.477012,24.437738],[118.451758,24.506915],[118.412338,24.514538]]],[[[119.471138,25.197116],[119.507478,25.183036],[119.52534,25.157579],[119.549362,25.161912],[119.566608,25.210112],[119.540739,25.20199],[119.501319,25.21715],[119.473601,25.259916],[119.44342,25.238806],[119.444036,25.20199],[119.471138,25.197116]]],[[[119.580159,25.627398],[119.611572,25.669479],[119.580775,25.650059],[119.580159,25.627398]]],[[[119.976824,26.191005],[120.016244,26.217316],[119.998998,26.235569],[119.970665,26.217852],[119.976824,26.191005]]],[[[118.230636,24.401228],[118.273752,24.441007],[118.233716,24.445911],[118.230636,24.401228]]],[[[119.906607,26.68989],[119.926933,26.664756],[119.950954,26.692563],[119.906607,26.68989]]],[[[118.204151,24.504737],[118.191832,24.536861],[118.14502,24.560814],[118.093281,24.540672],[118.068644,24.463344],[118.084042,24.435559],[118.143173,24.420847],[118.19368,24.463344],[118.204151,24.504737]]],[[[119.929397,26.134067],[119.960194,26.146961],[119.919542,26.172208],[119.929397,26.134067]]],[[[119.642985,26.129231],[119.665159,26.155556],[119.62697,26.173282],[119.606028,26.15287],[119.642985,26.129231]]],[[[120.034106,26.488667],[120.066751,26.498308],[120.071679,26.521336],[120.035954,26.515981],[120.034106,26.488667]]],[[[119.662079,25.646822],[119.673782,25.632794],[119.718745,25.634952],[119.716898,25.664624],[119.662079,25.646822]]],[[[119.760629,26.613402],[119.776644,26.600025],[119.818527,26.616613],[119.796354,26.630523],[119.760629,26.613402]]],[[[120.135736,26.550784],[120.167149,26.571661],[120.153598,26.604841],[120.117874,26.568984],[120.135736,26.550784]]],[[[120.360554,26.916909],[120.394431,26.933984],[120.363018,26.967592],[120.327909,26.963858],[120.319286,26.944654],[120.360554,26.916909]]],[[[120.150519,26.798916],[120.140048,26.795176],[120.163454,26.798381],[120.161606,26.803189],[120.150519,26.798916]]],[[[119.668238,26.628383],[119.720593,26.635873],[119.758781,26.659408],[119.748926,26.681334],[119.712586,26.6685],[119.673782,26.680799],[119.651608,26.657269],[119.668238,26.628383]]]]}},{"type":"Feature","properties":{"adcode":360000,"name":"江西省","center":[115.892151,28.676493],"centroid":[115.732975,27.636112],"childrenNum":11,"level":"province","parent":{"adcode":100000},"subFeatureIndex":13,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[118.193064,29.395472],[118.136397,29.418932],[118.127774,29.47209],[118.143788,29.489803],[118.095129,29.534072],[118.050782,29.542924],[118.042774,29.566351],[118.00397,29.578322],[117.933753,29.549172],[117.872775,29.54761],[117.795167,29.570515],[117.729877,29.550213],[117.690457,29.555939],[117.678754,29.595496],[117.647957,29.614749],[117.608537,29.591333],[117.543248,29.588731],[117.523538,29.630356],[117.530313,29.654282],[117.490277,29.660003],[117.453936,29.688082],[117.455168,29.749412],[117.408973,29.802396],[117.415132,29.85068],[117.382487,29.840818],[117.359082,29.812782],[117.338756,29.848085],[117.29256,29.822647],[117.25314,29.834588],[117.261763,29.880781],[117.246365,29.915023],[117.2168,29.926953],[117.171836,29.920729],[117.129952,29.89946],[117.127489,29.86158],[117.073286,29.831992],[117.123177,29.798761],[117.136728,29.775388],[117.108395,29.75201],[117.112706,29.711995],[117.041873,29.680803],[116.996294,29.683403],[116.974736,29.657403],[116.939627,29.648561],[116.873722,29.609546],[116.849084,29.57624],[116.780715,29.569994],[116.760389,29.599139],[116.721585,29.564789],[116.716657,29.590813],[116.651983,29.637118],[116.680317,29.681323],[116.653831,29.694841],[116.673541,29.709916],[116.762237,29.802396],[116.780715,29.792529],[116.882961,29.893753],[116.900207,29.949253],[116.868794,29.980361],[116.83307,29.95755],[116.830606,30.004723],[116.802889,29.99643],[116.783794,30.030632],[116.747454,30.057053],[116.720353,30.053945],[116.666766,30.076734],[116.620571,30.073109],[116.585462,30.045657],[116.552201,29.909836],[116.525716,29.897385],[116.467818,29.896347],[116.342782,29.835626],[116.280572,29.788893],[116.250391,29.785777],[116.227601,29.816936],[116.172783,29.828358],[116.13521,29.819532],[116.087167,29.795125],[116.049595,29.761881],[115.965827,29.724469],[115.909777,29.723949],[115.837096,29.748373],[115.762567,29.793048],[115.706517,29.837703],[115.667712,29.850161],[115.611662,29.841337],[115.51188,29.840299],[115.479235,29.811224],[115.470612,29.739539],[115.412714,29.688602],[115.355431,29.649602],[115.304924,29.637118],[115.28583,29.618391],[115.250722,29.660003],[115.176809,29.654803],[115.113367,29.684963],[115.117679,29.655843],[115.143548,29.645961],[115.120142,29.597578],[115.157099,29.584568],[115.154019,29.510117],[115.086266,29.525741],[115.087498,29.560104],[115.033295,29.546568],[115.00065,29.572076],[114.947679,29.542924],[114.966773,29.522096],[114.940288,29.493971],[114.900868,29.505951],[114.860216,29.476258],[114.888549,29.436134],[114.918114,29.454374],[114.90518,29.473132],[114.935977,29.486678],[114.947063,29.465317],[114.931049,29.422581],[114.895325,29.397557],[114.866375,29.404335],[114.812173,29.383478],[114.784455,29.386086],[114.759818,29.363139],[114.740724,29.386607],[114.67297,29.395993],[114.621847,29.379828],[114.589819,29.352707],[114.519602,29.325578],[114.466015,29.324013],[114.440145,29.341752],[114.376088,29.322969],[114.341595,29.327665],[114.307102,29.365225],[114.259059,29.343839],[114.252284,29.23475],[114.169748,29.216993],[114.063191,29.204978],[114.034857,29.152204],[113.98743,29.126068],[113.952321,29.092604],[113.94185,29.047097],[113.961561,28.999476],[113.955401,28.978536],[113.973879,28.937692],[114.008988,28.955498],[114.005292,28.917788],[114.028082,28.891069],[114.060111,28.902596],[114.056415,28.872204],[114.076741,28.834464],[114.124784,28.843376],[114.153734,28.829221],[114.137719,28.779926],[114.157429,28.761566],[114.122321,28.623497],[114.132176,28.607211],[114.08598,28.558337],[114.138335,28.533629],[114.15435,28.507337],[114.218407,28.48472],[114.217175,28.466308],[114.172212,28.432632],[114.214712,28.403157],[114.252284,28.395787],[114.2529,28.319423],[114.198081,28.29097],[114.182067,28.249858],[114.143879,28.246694],[114.109386,28.205038],[114.107538,28.182885],[114.068734,28.171806],[114.012068,28.174972],[113.992357,28.161255],[114.025002,28.080499],[114.047176,28.057263],[114.025618,28.031382],[113.970184,28.041418],[113.966488,28.017646],[113.936307,28.018703],[113.914133,27.991227],[113.864242,28.004966],[113.845148,27.971672],[113.822974,27.982243],[113.752141,27.93361],[113.72812,27.874904],[113.756453,27.860091],[113.763228,27.799228],[113.69917,27.740979],[113.696707,27.71979],[113.652359,27.663619],[113.607395,27.625449],[113.608627,27.585143],[113.579062,27.545354],[113.583374,27.524657],[113.627105,27.49971],[113.591381,27.467855],[113.59754,27.428554],[113.632033,27.40518],[113.605548,27.38924],[113.616635,27.345658],[113.657902,27.347253],[113.699786,27.331836],[113.72812,27.350442],[113.872865,27.384988],[113.872865,27.346721],[113.854387,27.30525],[113.872865,27.289828],[113.846996,27.222262],[113.779242,27.137081],[113.771851,27.096598],[113.803264,27.099261],[113.824206,27.036378],[113.86301,27.018252],[113.892575,26.964925],[113.927068,26.948922],[113.890112,26.895562],[113.877177,26.859262],[113.835909,26.806394],[113.853771,26.769532],[113.860546,26.664221],[113.912901,26.613938],[113.996669,26.615543],[114.019459,26.587182],[114.10877,26.56952],[114.07243,26.480096],[114.110002,26.482775],[114.090292,26.455988],[114.085364,26.406149],[114.062575,26.406149],[114.030546,26.376664],[114.047792,26.337518],[114.021307,26.288701],[114.029314,26.266163],[113.978807,26.237716],[113.972647,26.20604],[113.949242,26.192616],[113.962792,26.150722],[114.013299,26.184023],[114.088444,26.168448],[114.102611,26.187783],[114.181451,26.214631],[114.216559,26.203355],[114.237501,26.152333],[114.188842,26.121172],[114.10569,26.097526],[114.121089,26.085702],[114.087828,26.06635],[114.044096,26.076564],[114.008372,26.015806],[114.028082,25.98138],[114.028082,25.893119],[113.971416,25.836036],[113.961561,25.77731],[113.920293,25.741197],[113.913517,25.701299],[113.957249,25.611749],[113.983118,25.599336],[113.986198,25.529153],[113.962792,25.528072],[113.94493,25.441635],[114.003444,25.442716],[113.983118,25.415152],[114.050256,25.36433],[114.029314,25.328093],[114.017611,25.273987],[114.039785,25.250714],[114.055799,25.277775],[114.083517,25.275611],[114.115545,25.302125],[114.190074,25.316733],[114.204857,25.29942],[114.260291,25.291845],[114.2954,25.299961],[114.31511,25.33837],[114.382863,25.317274],[114.43029,25.343779],[114.438914,25.376226],[114.477718,25.37136],[114.541159,25.416773],[114.599674,25.385959],[114.63663,25.324306],[114.714238,25.315651],[114.743188,25.274528],[114.73518,25.225813],[114.693912,25.213902],[114.685905,25.173287],[114.73518,25.155954],[114.735796,25.121822],[114.664963,25.10123],[114.640326,25.074129],[114.604601,25.083886],[114.561485,25.077382],[114.532536,25.022623],[114.506051,24.999844],[114.45616,24.99659],[114.454928,24.977062],[114.395798,24.951019],[114.403189,24.877746],[114.378551,24.861457],[114.342211,24.807145],[114.336052,24.749004],[114.281849,24.724001],[114.27261,24.700624],[114.169132,24.689749],[114.19069,24.656576],[114.258443,24.641346],[114.289856,24.619042],[114.300943,24.578775],[114.363769,24.582584],[114.391486,24.563535],[114.403189,24.497657],[114.429058,24.48622],[114.534384,24.559181],[114.589819,24.537406],[114.627391,24.576598],[114.664963,24.583673],[114.704999,24.525973],[114.73826,24.565168],[114.729637,24.608704],[114.781376,24.613057],[114.827571,24.588026],[114.846665,24.602719],[114.868839,24.562446],[114.893477,24.582584],[114.909491,24.661471],[114.940288,24.650049],[115.00373,24.679418],[115.024672,24.669085],[115.057317,24.703343],[115.083802,24.699537],[115.104744,24.667997],[115.1842,24.711498],[115.258729,24.728894],[115.269816,24.749548],[115.306772,24.758787],[115.358511,24.735416],[115.372678,24.774546],[115.412714,24.79302],[115.476771,24.762591],[115.522967,24.702799],[115.555611,24.683768],[115.569778,24.622306],[115.605503,24.62557],[115.671408,24.604895],[115.68927,24.545027],[115.752712,24.546116],[115.785357,24.567345],[115.843871,24.562446],[115.840791,24.584217],[115.797676,24.628834],[115.780429,24.663103],[115.801371,24.705517],[115.769342,24.708236],[115.756408,24.749004],[115.776734,24.774546],[115.764415,24.791933],[115.790284,24.856027],[115.807531,24.862543],[115.824161,24.909232],[115.863581,24.891318],[115.861733,24.863629],[115.907313,24.879917],[115.885139,24.898918],[115.89253,24.936911],[115.870356,24.959701],[115.925175,24.960786],[115.873436,25.019911],[115.928255,25.050276],[115.908545,25.084428],[115.880212,25.092016],[115.888219,25.128866],[115.860501,25.165704],[115.855574,25.20957],[115.930719,25.236099],[115.949813,25.292386],[115.987385,25.290221],[116.008327,25.319437],[115.992928,25.374063],[116.023109,25.435691],[116.005247,25.490264],[116.03666,25.514571],[116.040356,25.548052],[116.063145,25.56317],[116.041588,25.62416],[116.068689,25.646282],[116.067457,25.703995],[116.106877,25.701299],[116.129667,25.758985],[116.18079,25.778926],[116.131515,25.824185],[116.132131,25.860273],[116.17771,25.894195],[116.225138,25.908731],[116.258398,25.902809],[116.303362,25.924341],[116.326152,25.956631],[116.369883,25.963088],[116.360028,25.991601],[116.384666,26.030864],[116.489375,26.113649],[116.476441,26.172745],[116.435789,26.159854],[116.392057,26.171133],[116.400064,26.202819],[116.385282,26.238253],[116.412999,26.297822],[116.437021,26.308016],[116.459194,26.345026],[116.499846,26.361651],[116.519557,26.410437],[116.553433,26.400253],[116.553433,26.365404],[116.601476,26.372911],[116.608252,26.429732],[116.638433,26.477418],[116.610716,26.476882],[116.597165,26.512768],[116.539267,26.559349],[116.553433,26.575942],[116.566368,26.650315],[116.520172,26.684543],[116.515245,26.720898],[116.557745,26.773806],[116.543578,26.803723],[116.548506,26.84004],[116.602092,26.888623],[116.632889,26.933984],[116.679085,26.978259],[116.817671,27.018252],[116.851548,27.009188],[116.910062,27.034779],[116.936547,27.019319],[116.967344,27.061962],[117.05296,27.100327],[117.044953,27.146667],[117.149662,27.241419],[117.171836,27.29036],[117.136728,27.303123],[117.140423,27.322798],[117.104699,27.330773],[117.107163,27.393491],[117.133032,27.42218],[117.110242,27.458828],[117.103467,27.533149],[117.076982,27.566046],[117.054808,27.5427],[117.01662,27.563393],[117.024627,27.592569],[117.003685,27.625449],[117.040641,27.669979],[117.065279,27.665739],[117.094228,27.627569],[117.11209,27.645596],[117.096076,27.667329],[117.114554,27.692238],[117.174916,27.677399],[117.204481,27.683759],[117.205097,27.714492],[117.245133,27.71926],[117.296256,27.764282],[117.303031,27.833103],[117.276546,27.847921],[117.280242,27.871201],[117.334444,27.8876],[117.341836,27.855858],[117.366473,27.88231],[117.407741,27.893948],[117.453936,27.939955],[117.477958,27.930966],[117.52169,27.982243],[117.556182,27.966387],[117.609769,27.863265],[117.649805,27.851625],[117.68245,27.823577],[117.704624,27.834162],[117.740348,27.800286],[117.788392,27.855858],[117.78716,27.896063],[117.856145,27.94577],[117.910963,27.949471],[117.942992,27.974315],[117.965166,27.962687],[117.999043,27.991227],[118.096977,27.970615],[118.094513,28.003909],[118.129006,28.017118],[118.120999,28.041946],[118.153644,28.062016],[118.199839,28.049869],[118.242339,28.075746],[118.356288,28.091586],[118.361215,28.155978],[118.375382,28.186577],[118.339041,28.193962],[118.314404,28.221913],[118.424041,28.291497],[118.433896,28.288335],[118.480091,28.327325],[118.455454,28.384204],[118.432048,28.402104],[118.456686,28.424738],[118.474548,28.478934],[118.414802,28.497344],[118.4302,28.515225],[118.412338,28.55676],[118.428352,28.617193],[118.428352,28.617193],[118.428352,28.681267],[118.403099,28.702791],[118.364295,28.813491],[118.300237,28.826075],[118.270056,28.918836],[118.195527,28.904167],[118.227556,28.942406],[118.165346,28.986912],[118.133933,28.983771],[118.115455,29.009944],[118.115455,29.009944],[118.097593,28.998952],[118.066796,29.053898],[118.076035,29.074822],[118.037847,29.102017],[118.045238,29.149068],[118.027992,29.167882],[118.042159,29.210202],[118.073571,29.216993],[118.077883,29.290614],[118.138861,29.283828],[118.178281,29.297921],[118.166578,29.314099],[118.205382,29.343839],[118.193064,29.395472]]]]}},{"type":"Feature","properties":{"adcode":370000,"name":"山东省","center":[117.000923,36.675807],"centroid":[118.187759,36.376092],"childrenNum":16,"level":"province","parent":{"adcode":100000},"subFeatureIndex":14,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[116.374195,34.640011],[116.392057,34.710391],[116.363724,34.715311],[116.369267,34.749247],[116.403144,34.756131],[116.408071,34.850972],[116.445028,34.895652],[116.557745,34.908905],[116.613795,34.922645],[116.622418,34.939818],[116.677853,34.939327],[116.781331,34.916757],[116.789338,34.975133],[116.815823,34.965324],[116.821983,34.929515],[116.858323,34.928533],[116.922381,34.894671],[116.929156,34.843114],[116.966113,34.844588],[116.979047,34.815113],[116.95133,34.81069],[116.969192,34.771864],[117.022163,34.759081],[117.070206,34.713835],[117.061583,34.675947],[117.073286,34.639026],[117.104083,34.648874],[117.15151,34.559222],[117.139191,34.526687],[117.166293,34.434435],[117.248213,34.451216],[117.252524,34.48674],[117.27285,34.499565],[117.267923,34.532603],[117.303647,34.542463],[117.27285,34.556757],[117.311654,34.561686],[117.311654,34.561686],[117.32151,34.566614],[117.32151,34.566614],[117.325205,34.573021],[117.325205,34.573021],[117.370785,34.584846],[117.402813,34.569571],[117.402813,34.550843],[117.465023,34.484767],[117.53832,34.467006],[117.592523,34.462566],[117.609769,34.490686],[117.659044,34.501044],[117.684298,34.547392],[117.801942,34.518798],[117.791471,34.583368],[117.793935,34.651827],[117.902956,34.644443],[117.909732,34.670533],[117.951615,34.678408],[118.053861,34.650843],[118.084042,34.655766],[118.114839,34.614404],[118.079115,34.569571],[118.185056,34.543942],[118.16473,34.50499],[118.132702,34.483287],[118.177665,34.45319],[118.179513,34.379628],[118.217701,34.379134],[118.220165,34.405802],[118.277447,34.404814],[118.290382,34.424563],[118.379693,34.415183],[118.404947,34.427525],[118.416034,34.473914],[118.439439,34.507949],[118.424657,34.595193],[118.439439,34.626223],[118.473932,34.623269],[118.460997,34.656258],[118.545997,34.705964],[118.601431,34.714327],[118.607591,34.694155],[118.664257,34.693663],[118.690127,34.678408],[118.739402,34.693663],[118.783749,34.723181],[118.764039,34.740396],[118.719076,34.745313],[118.739402,34.792508],[118.772047,34.794474],[118.80038,34.843114],[118.805307,34.87307],[118.860742,34.944233],[118.86259,35.025626],[118.928495,35.051106],[118.942662,35.040817],[119.027045,35.055516],[119.114509,35.055026],[119.137915,35.096167],[119.217371,35.106939],[119.250016,35.124562],[119.286972,35.115261],[119.306066,35.076578],[119.354109,35.080007],[119.373819,35.078538],[119.428022,35.121136],[119.397841,35.137777],[119.411392,35.231689],[119.450812,35.285443],[119.493312,35.318655],[119.538275,35.296678],[119.543819,35.347949],[119.590014,35.37284],[119.579543,35.406504],[119.618963,35.459655],[119.663311,35.562931],[119.662079,35.589215],[119.718129,35.615492],[119.75139,35.617924],[119.772332,35.578995],[119.780339,35.584835],[119.792658,35.615492],[119.824071,35.646136],[119.83023,35.620357],[119.868419,35.60868],[119.925085,35.637382],[119.91215,35.660725],[119.950339,35.729741],[119.920157,35.739943],[119.926317,35.759856],[119.958346,35.760342],[120.01378,35.714193],[120.049505,35.786562],[120.032258,35.812288],[120.064287,35.873414],[120.112331,35.885052],[120.125265,35.906868],[120.152983,35.907353],[120.207801,35.947575],[120.169613,35.888446],[120.202258,35.89184],[120.209033,35.917531],[120.265699,35.966468],[120.30512,35.971796],[120.316206,36.002304],[120.289721,36.017311],[120.285409,36.01247],[120.249069,35.992136],[120.257076,36.025055],[120.198562,35.995525],[120.234902,36.030863],[120.239214,36.062316],[120.181316,36.066669],[120.152367,36.095206],[120.116642,36.102943],[120.108635,36.127599],[120.142512,36.143549],[120.140664,36.173507],[120.181316,36.203936],[120.22012,36.209248],[120.224432,36.19138],[120.260772,36.198624],[120.263236,36.182202],[120.310047,36.185101],[120.297112,36.225664],[120.319902,36.232423],[120.362402,36.196209],[120.35809,36.174956],[120.286025,36.047317],[120.337764,36.055058],[120.429539,36.056994],[120.468959,36.087952],[120.546568,36.091821],[120.546568,36.107778],[120.593995,36.100525],[120.615553,36.120348],[120.64327,36.114547],[120.672835,36.130016],[120.712255,36.126632],[120.696857,36.15563],[120.696857,36.203936],[120.680843,36.238698],[120.686386,36.279234],[120.657437,36.276339],[120.66298,36.331803],[120.744284,36.327946],[120.694393,36.390118],[120.759683,36.46283],[120.828668,36.46668],[120.837291,36.459942],[120.858849,36.424797],[120.848994,36.403124],[120.871784,36.36699],[120.911204,36.412276],[120.917979,36.417573],[120.90874,36.450315],[120.938305,36.447908],[120.965407,36.466199],[120.95432,36.507578],[120.983269,36.546051],[120.962327,36.562877],[120.909972,36.568645],[120.884718,36.601323],[120.847146,36.618617],[120.882255,36.627262],[120.926602,36.611892],[120.955551,36.575855],[121.028848,36.572971],[121.078123,36.607568],[121.161275,36.651273],[121.251818,36.671436],[121.29863,36.702151],[121.31218,36.702151],[121.35776,36.713186],[121.400876,36.701191],[121.3941,36.738129],[121.454462,36.752515],[121.496962,36.795179],[121.506817,36.803805],[121.565331,36.830635],[121.548701,36.807638],[121.485259,36.786073],[121.532071,36.73621],[121.575186,36.740047],[121.556092,36.764502],[121.651563,36.723739],[121.631853,36.80093],[121.6762,36.819137],[121.726092,36.826323],[121.762432,36.84644],[121.767975,36.874691],[121.927504,36.932597],[121.965076,36.938337],[122.008808,36.96225],[122.042684,36.871819],[122.051923,36.904846],[122.093191,36.913938],[122.115981,36.94025],[122.124604,36.944077],[122.141235,36.938337],[122.119677,36.891924],[122.175727,36.894317],[122.188662,36.866073],[122.174495,36.842609],[122.220691,36.848835],[122.275509,36.83734],[122.280437,36.835904],[122.344495,36.828239],[122.378371,36.844525],[122.383915,36.865595],[122.415944,36.85937],[122.454748,36.879],[122.452284,36.88618],[122.434422,36.914416],[122.483081,36.913938],[122.48924,36.886659],[122.532356,36.901496],[122.55761,36.968467],[122.544675,37.004797],[122.583479,37.037289],[122.575472,37.054485],[122.494168,37.033945],[122.467067,37.037289],[122.478769,37.058784],[122.484313,37.128956],[122.533588,37.153286],[122.581015,37.147562],[122.573624,37.176178],[122.624131,37.190959],[122.592718,37.261485],[122.567465,37.25958],[122.573624,37.296247],[122.611196,37.339558],[122.607501,37.364296],[122.650616,37.388551],[122.6925,37.373809],[122.714058,37.392355],[122.701739,37.418501],[122.67587,37.413273],[122.641377,37.428482],[122.553914,37.407093],[122.4954,37.413748],[122.487393,37.43466],[122.41656,37.414699],[122.337103,37.414223],[122.281053,37.430858],[122.287212,37.445114],[122.25272,37.467917],[122.194205,37.456041],[122.166488,37.438937],[122.131996,37.49926],[122.163408,37.519199],[122.150474,37.557163],[122.08888,37.554316],[122.075329,37.540556],[122.017431,37.531065],[121.997721,37.494512],[121.923808,37.473142],[121.772903,37.466492],[121.66573,37.473617],[121.635548,37.494037],[121.575802,37.460317],[121.571491,37.441313],[121.477252,37.475992],[121.460006,37.522522],[121.400876,37.557638],[121.395948,37.589891],[121.435368,37.592737],[121.391021,37.625449],[121.349137,37.635403],[121.358376,37.597479],[121.304789,37.582778],[121.217326,37.582778],[121.17421,37.597479],[121.148956,37.626397],[121.161891,37.646302],[121.142797,37.661464],[121.160043,37.698882],[121.136022,37.723501],[121.037471,37.718767],[120.994356,37.759468],[120.943233,37.785486],[120.940769,37.819533],[120.874863,37.833241],[120.845298,37.826623],[120.839139,37.82426],[120.733197,37.833714],[120.656821,37.793054],[120.634031,37.796364],[120.590915,37.7642],[120.517619,37.750005],[120.454793,37.757576],[120.367945,37.697935],[120.227511,37.693673],[120.22012,37.671886],[120.269395,37.658622],[120.272475,37.636824],[120.215192,37.621183],[120.208417,37.588469],[120.246605,37.556689],[120.222584,37.532963],[120.144359,37.481691],[120.086461,37.465067],[120.064903,37.448915],[120.010085,37.442263],[119.949723,37.419927],[119.926933,37.386649],[119.843781,37.376662],[119.837006,37.346695],[119.883201,37.311004],[119.89244,37.263866],[119.865339,37.233854],[119.83023,37.225754],[119.808057,37.196203],[119.740303,37.133727],[119.687332,37.143746],[119.678709,37.158056],[119.576463,37.127524],[119.489616,37.134681],[119.428022,37.125616],[119.361501,37.125616],[119.327624,37.115595],[119.301138,37.139452],[119.298675,37.197156],[119.2069,37.223371],[119.190885,37.25958],[119.204436,37.280058],[119.136683,37.230995],[119.12806,37.254816],[119.091103,37.257674],[119.084328,37.239572],[119.054147,37.254816],[119.03998,37.30434],[119.001176,37.31862],[118.942662,37.497361],[118.939582,37.527268],[118.988857,37.620709],[119.023966,37.642037],[119.153313,37.655305],[119.236465,37.651988],[119.262334,37.660517],[119.280197,37.692726],[119.309146,37.805349],[119.291899,37.869627],[119.24016,37.878131],[119.212443,37.838913],[119.16132,37.81906],[119.12806,37.847892],[119.110813,37.921577],[119.001792,37.99613],[118.974075,38.094162],[118.908169,38.139362],[118.811467,38.157717],[118.703677,38.151129],[118.626069,38.138421],[118.607591,38.129006],[118.597736,38.079088],[118.552156,38.05553],[118.534294,38.063541],[118.517048,38.088509],[118.504729,38.11394],[118.44991,38.124299],[118.431432,38.106406],[118.404331,38.121003],[118.331034,38.12524],[118.217085,38.146893],[118.177665,38.186417],[118.112376,38.210403],[118.045238,38.214165],[118.018753,38.202409],[117.896797,38.279495],[117.895565,38.301572],[117.848754,38.255062],[117.808718,38.22827],[117.789007,38.180772],[117.766834,38.158658],[117.771145,38.134655],[117.746508,38.12524],[117.704624,38.076262],[117.586979,38.071551],[117.557414,38.046105],[117.557414,38.046105],[117.524154,37.989527],[117.513067,37.94329],[117.481038,37.914967],[117.438538,37.854035],[117.400966,37.844584],[117.320278,37.861596],[117.271618,37.839858],[117.185387,37.849783],[117.150278,37.839385],[117.074518,37.848837],[117.027091,37.832296],[116.919301,37.846002],[116.837997,37.835132],[116.804736,37.848837],[116.753613,37.793054],[116.753613,37.77035],[116.724664,37.744327],[116.679085,37.728708],[116.66307,37.686096],[116.604556,37.624975],[116.575607,37.610754],[116.4826,37.521573],[116.448108,37.503059],[116.433941,37.473142],[116.38097,37.522522],[116.379738,37.522047],[116.38097,37.522522],[116.379738,37.522047],[116.36742,37.566177],[116.336007,37.581355],[116.295355,37.554316],[116.278724,37.524895],[116.290427,37.484065],[116.27626,37.466967],[116.240536,37.489764],[116.240536,37.489764],[116.224522,37.479791],[116.243,37.447965],[116.226369,37.428007],[116.2855,37.404241],[116.236224,37.361442],[116.193109,37.365723],[116.169087,37.384271],[116.106261,37.368577],[116.085935,37.373809],[116.024341,37.360015],[115.975682,37.337179],[115.969523,37.239572],[115.909777,37.20669],[115.91224,37.177132],[115.879596,37.150901],[115.888219,37.112254],[115.85619,37.060694],[115.776734,36.992848],[115.79706,36.968945],[115.75764,36.902453],[115.71206,36.883308],[115.683727,36.808117],[115.524815,36.763543],[115.479851,36.760187],[115.451518,36.702151],[115.420105,36.686795],[115.365902,36.621979],[115.355431,36.627262],[115.33141,36.550378],[115.272895,36.497476],[115.291374,36.460423],[115.317243,36.454166],[115.297533,36.413239],[115.340033,36.398307],[115.368982,36.342409],[115.366518,36.30914],[115.423185,36.32216],[115.417025,36.292742],[115.462605,36.276339],[115.466916,36.258969],[115.466916,36.258969],[115.474923,36.248352],[115.483547,36.148865],[115.484163,36.125666],[115.449054,36.047317],[115.447822,36.01247],[115.362822,35.971796],[115.353583,35.938854],[115.364054,35.894264],[115.335105,35.796756],[115.363438,35.779765],[115.407786,35.80889],[115.460141,35.867594],[115.487858,35.880688],[115.495249,35.896203],[115.505104,35.899112],[115.513112,35.890385],[115.583945,35.921893],[115.648618,35.922863],[115.699125,35.966468],[115.774886,35.974702],[115.779813,35.993588],[115.817386,36.012954],[115.859886,36.003756],[115.89869,36.026507],[115.989849,36.045381],[116.057602,36.104877],[116.099486,36.112129],[116.063145,36.028927],[116.048979,35.970343],[115.984921,35.974218],[115.911624,35.960171],[115.907929,35.92674],[115.873436,35.918985],[115.882675,35.879718],[115.859886,35.857894],[115.81677,35.844312],[115.773654,35.854014],[115.73485,35.833154],[115.696046,35.788989],[115.693582,35.754028],[115.622749,35.739457],[115.52851,35.733628],[115.48601,35.710306],[115.383148,35.568772],[115.34496,35.55368],[115.356047,35.490359],[115.307388,35.480126],[115.237171,35.423087],[115.172497,35.426501],[115.126302,35.41821],[115.117679,35.400163],[115.091809,35.416259],[115.073947,35.374304],[115.04315,35.376744],[114.957534,35.261014],[114.929201,35.244886],[114.932281,35.198441],[114.861448,35.182301],[114.841738,35.15099],[114.883006,35.098615],[114.835578,35.076578],[114.818948,35.051596],[114.852209,35.041797],[114.824492,35.012393],[114.880542,35.00357],[114.923658,34.968757],[114.950759,34.989843],[115.008041,34.988372],[115.028983,34.9717],[115.075179,35.000628],[115.12815,35.00455],[115.157099,34.957968],[115.219309,34.96042],[115.205142,34.914303],[115.251953,34.906451],[115.239019,34.87798],[115.256265,34.845079],[115.317243,34.859321],[115.42688,34.805285],[115.449054,34.74433],[115.433655,34.725149],[115.461373,34.637057],[115.515575,34.582383],[115.553148,34.568586],[115.622749,34.574499],[115.685575,34.556265],[115.697278,34.594207],[115.787821,34.580905],[115.827241,34.558236],[115.838328,34.5676],[115.984305,34.589281],[115.991081,34.615389],[116.037276,34.593222],[116.101334,34.60603],[116.134594,34.559715],[116.156768,34.5538],[116.196804,34.575977],[116.247927,34.551829],[116.286116,34.608986],[116.32492,34.601104],[116.334159,34.620806],[116.374195,34.640011]]],[[[120.729502,37.947065],[120.721495,37.917328],[120.76461,37.895134],[120.76461,37.923937],[120.729502,37.947065]]],[[[120.692545,37.983867],[120.732581,37.961694],[120.724574,37.987641],[120.692545,37.983867]]],[[[120.990044,36.413239],[120.978341,36.428649],[120.950624,36.414684],[120.990044,36.413239]]],[[[120.750444,38.150188],[120.7874,38.158658],[120.742436,38.199116],[120.750444,38.150188]]],[[[120.918595,38.345236],[120.914899,38.373393],[120.895189,38.36307],[120.918595,38.345236]]],[[[120.159142,35.765198],[120.169613,35.740428],[120.193019,35.756942],[120.172077,35.785591],[120.159142,35.765198]]],[[[120.62664,37.94565],[120.631567,37.981037],[120.602002,37.978678],[120.62664,37.94565]]],[[[120.802183,38.284193],[120.848378,38.305799],[120.816349,38.318008],[120.802183,38.284193]]],[[[121.489571,37.577086],[121.489571,37.577561],[121.489571,37.578509],[121.488955,37.578035],[121.489571,37.577086]]],[[[121.485875,37.578509],[121.487723,37.578035],[121.487723,37.578509],[121.485875,37.578509]]],[[[121.487723,37.578509],[121.487723,37.577561],[121.488955,37.578035],[121.488955,37.578509],[121.488339,37.578509],[121.487723,37.578509]]],[[[115.495249,35.896203],[115.487858,35.880688],[115.513112,35.890385],[115.505104,35.899112],[115.495249,35.896203]]]]}},{"type":"Feature","properties":{"adcode":410000,"name":"河南省","center":[113.665412,34.757975],"centroid":[113.619717,33.902648],"childrenNum":18,"level":"province","parent":{"adcode":100000},"subFeatureIndex":15,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[112.716747,32.357612],[112.735841,32.356095],[112.776493,32.358623],[112.860877,32.396024],[112.888594,32.37682],[112.912,32.390971],[112.992072,32.378336],[113.000695,32.41674],[113.025949,32.425328],[113.078919,32.394508],[113.107869,32.398551],[113.118956,32.375809],[113.155912,32.380863],[113.158992,32.410677],[113.211962,32.431895],[113.2366,32.407141],[113.333918,32.336377],[113.317904,32.327275],[113.353628,32.294904],[113.376418,32.298445],[113.428773,32.270618],[113.511925,32.316654],[113.624642,32.36115],[113.650511,32.412698],[113.700402,32.420782],[113.735511,32.410677],[113.76754,32.370249],[113.753989,32.328286],[113.768772,32.30148],[113.768156,32.284279],[113.758301,32.27669],[113.749061,32.272642],[113.73859,32.255942],[113.752757,32.215951],[113.782322,32.184553],[113.750293,32.11615],[113.722576,32.12426],[113.728735,32.083197],[113.791561,32.036028],[113.757685,31.98985],[113.817431,31.964467],[113.805728,31.929428],[113.832213,31.918761],[113.830981,31.87913],[113.854387,31.843042],[113.893807,31.847109],[113.914749,31.877098],[113.957865,31.852701],[113.952321,31.793714],[113.988662,31.749959],[114.017611,31.770822],[114.086596,31.782014],[114.121705,31.809482],[114.134024,31.843042],[114.191922,31.852192],[114.235654,31.833382],[114.292936,31.752503],[114.350218,31.755557],[114.403189,31.746906],[114.443841,31.728074],[114.530688,31.742834],[114.549783,31.766751],[114.586123,31.762172],[114.57134,31.660858],[114.547935,31.623665],[114.560869,31.560963],[114.572572,31.553824],[114.61692,31.585437],[114.641558,31.582378],[114.696376,31.525771],[114.778912,31.520669],[114.789383,31.480358],[114.830035,31.45892],[114.870071,31.479337],[114.884238,31.469129],[114.962462,31.494648],[114.995107,31.471171],[115.022824,31.527811],[115.096121,31.508425],[115.114599,31.530362],[115.106592,31.567592],[115.12507,31.599201],[115.16449,31.604808],[115.212533,31.555354],[115.235939,31.555354],[115.218077,31.515057],[115.211301,31.442072],[115.252569,31.421646],[115.250722,31.392021],[115.301229,31.383846],[115.338801,31.40428],[115.373909,31.405813],[115.389924,31.450241],[115.371446,31.495668],[115.415793,31.525771],[115.439815,31.588496],[115.485394,31.608885],[115.476771,31.643028],[115.495249,31.673083],[115.534054,31.698545],[115.553764,31.69549],[115.676336,31.778453],[115.731154,31.76726],[115.767495,31.78761],[115.808147,31.770313],[115.808147,31.770313],[115.851878,31.786593],[115.886371,31.776418],[115.914704,31.814567],[115.893762,31.832365],[115.894994,31.8649],[115.920248,31.920285],[115.909161,31.94314],[115.928871,32.003046],[115.922095,32.049725],[115.941805,32.166318],[115.912856,32.227596],[115.899306,32.390971],[115.865429,32.458662],[115.883291,32.487946],[115.845719,32.501575],[115.8759,32.542448],[115.910393,32.567165],[115.891298,32.576243],[115.861117,32.537403],[115.789052,32.468761],[115.771806,32.505108],[115.742241,32.476335],[115.704669,32.495013],[115.667712,32.409667],[115.657857,32.428864],[115.626445,32.40512],[115.604271,32.425833],[115.57101,32.419266],[115.522967,32.441997],[115.509416,32.466741],[115.5088,32.468761],[115.497713,32.492489],[115.409018,32.549007],[115.411482,32.575235],[115.304924,32.553042],[115.30554,32.583303],[115.267352,32.578261],[115.24333,32.593388],[115.20083,32.591876],[115.182968,32.666973],[115.179273,32.726402],[115.189744,32.770695],[115.211301,32.785791],[115.189744,32.812452],[115.197135,32.856201],[115.155867,32.864747],[115.139237,32.897917],[115.029599,32.906962],[115.035143,32.932582],[115.009273,32.940117],[114.943368,32.935094],[114.916266,32.971251],[114.883006,32.990328],[114.891629,33.020441],[114.925506,33.016928],[114.913187,33.083143],[114.897172,33.086653],[114.902716,33.129764],[114.932897,33.153817],[114.966158,33.147304],[114.990795,33.102195],[115.041302,33.086653],[115.168186,33.088658],[115.194671,33.120743],[115.245178,33.135778],[115.289526,33.131769],[115.303692,33.149809],[115.300613,33.204407],[115.340033,33.260973],[115.335105,33.297997],[115.361591,33.298497],[115.365286,33.336005],[115.341881,33.370997],[115.313547,33.376994],[115.328946,33.403477],[115.315395,33.431451],[115.324634,33.457418],[115.345576,33.449928],[115.345576,33.502842],[115.366518,33.5233],[115.394851,33.506335],[115.422569,33.557219],[115.463837,33.567193],[115.511264,33.55323],[115.564851,33.576169],[115.639995,33.585143],[115.601191,33.658898],[115.601807,33.718653],[115.563003,33.772895],[115.576553,33.787817],[115.614126,33.775879],[115.631988,33.869846],[115.547604,33.874815],[115.577785,33.950307],[115.579017,33.974133],[115.60735,34.030196],[115.642459,34.03218],[115.658473,34.061437],[115.705901,34.059949],[115.736082,34.076805],[115.768726,34.061932],[115.809378,34.062428],[115.846335,34.028708],[115.85003,34.004898],[115.877132,34.002913],[115.876516,34.028708],[115.904233,34.009859],[115.95782,34.007875],[116.00032,33.965199],[115.982457,33.917039],[116.05945,33.860902],[116.055754,33.804727],[116.074232,33.781351],[116.100102,33.782843],[116.132747,33.751501],[116.155536,33.709693],[116.230065,33.735078],[116.263326,33.730101],[116.316912,33.771402],[116.393905,33.782843],[116.408071,33.805721],[116.437021,33.801246],[116.437637,33.846489],[116.486296,33.869846],[116.558361,33.881274],[116.566984,33.9081],[116.631042,33.887733],[116.64336,33.896675],[116.641512,33.978103],[116.599629,34.014324],[116.599629,34.014324],[116.576223,34.068873],[116.576223,34.068873],[116.52818,34.122892],[116.536187,34.151127],[116.565752,34.16945],[116.542962,34.203608],[116.545426,34.241711],[116.582382,34.266444],[116.562056,34.285731],[116.516477,34.296114],[116.456731,34.268917],[116.409303,34.273863],[116.409303,34.273863],[116.372347,34.26595],[116.357564,34.319843],[116.301514,34.342082],[116.255934,34.376665],[116.213435,34.382098],[116.215898,34.403333],[116.178942,34.430487],[116.162312,34.459605],[116.178326,34.496112],[116.204196,34.508442],[116.191261,34.535561],[116.196804,34.575977],[116.156768,34.5538],[116.134594,34.559715],[116.101334,34.60603],[116.037276,34.593222],[115.991081,34.615389],[115.984305,34.589281],[115.838328,34.5676],[115.827241,34.558236],[115.787821,34.580905],[115.697278,34.594207],[115.685575,34.556265],[115.622749,34.574499],[115.553148,34.568586],[115.515575,34.582383],[115.461373,34.637057],[115.433655,34.725149],[115.449054,34.74433],[115.42688,34.805285],[115.317243,34.859321],[115.256265,34.845079],[115.239019,34.87798],[115.251953,34.906451],[115.205142,34.914303],[115.219309,34.96042],[115.157099,34.957968],[115.12815,35.00455],[115.075179,35.000628],[115.028983,34.9717],[115.008041,34.988372],[114.950759,34.989843],[114.923658,34.968757],[114.880542,35.00357],[114.824492,35.012393],[114.852209,35.041797],[114.818948,35.051596],[114.835578,35.076578],[114.883006,35.098615],[114.841738,35.15099],[114.861448,35.182301],[114.932281,35.198441],[114.929201,35.244886],[114.957534,35.261014],[115.04315,35.376744],[115.073947,35.374304],[115.091809,35.416259],[115.117679,35.400163],[115.126302,35.41821],[115.172497,35.426501],[115.237171,35.423087],[115.307388,35.480126],[115.356047,35.490359],[115.34496,35.55368],[115.383148,35.568772],[115.48601,35.710306],[115.52851,35.733628],[115.622749,35.739457],[115.693582,35.754028],[115.696046,35.788989],[115.73485,35.833154],[115.773654,35.854014],[115.81677,35.844312],[115.859886,35.857894],[115.882675,35.879718],[115.873436,35.918985],[115.907929,35.92674],[115.911624,35.960171],[115.984921,35.974218],[116.048979,35.970343],[116.063145,36.028927],[116.099486,36.112129],[116.057602,36.104877],[115.989849,36.045381],[115.89869,36.026507],[115.859886,36.003756],[115.817386,36.012954],[115.779813,35.993588],[115.774886,35.974702],[115.699125,35.966468],[115.648618,35.922863],[115.583945,35.921893],[115.513112,35.890385],[115.487858,35.880688],[115.460141,35.867594],[115.407786,35.80889],[115.363438,35.779765],[115.335105,35.796756],[115.364054,35.894264],[115.353583,35.938854],[115.362822,35.971796],[115.447822,36.01247],[115.449054,36.047317],[115.484163,36.125666],[115.483547,36.148865],[115.465068,36.170125],[115.450902,36.152248],[115.376989,36.128083],[115.365902,36.099074],[115.312931,36.088436],[115.30246,36.127599],[115.279055,36.13775],[115.242098,36.19138],[115.202678,36.208765],[115.202678,36.208765],[115.202678,36.209248],[115.202678,36.209248],[115.201446,36.210214],[115.201446,36.210214],[115.1842,36.193312],[115.12507,36.209731],[115.104744,36.172058],[115.06286,36.178338],[115.048693,36.161912],[115.04623,36.112613],[114.998186,36.069572],[114.914419,36.052155],[114.926737,36.089403],[114.912571,36.140649],[114.858368,36.144516],[114.857752,36.127599],[114.771521,36.124699],[114.734564,36.15563],[114.720398,36.140166],[114.640326,36.137266],[114.588587,36.118414],[114.586739,36.141133],[114.533152,36.171575],[114.480181,36.177855],[114.466015,36.197658],[114.417356,36.205868],[114.408117,36.224699],[114.356378,36.230492],[114.345291,36.255591],[114.299095,36.245938],[114.257827,36.263794],[114.241197,36.251247],[114.2104,36.272962],[114.203009,36.245456],[114.170364,36.245938],[114.170364,36.245938],[114.175907,36.264759],[114.129096,36.280199],[114.080437,36.269585],[114.04348,36.303353],[114.056415,36.329392],[114.002828,36.334214],[113.981887,36.31782],[113.962792,36.353977],[113.911054,36.314927],[113.882104,36.353977],[113.84946,36.347711],[113.856851,36.329392],[113.813119,36.332285],[113.755221,36.366026],[113.731199,36.363135],[113.736127,36.324571],[113.712105,36.303353],[113.716417,36.262347],[113.681924,36.216491],[113.697939,36.181719],[113.651127,36.174473],[113.705946,36.148865],[113.712721,36.129533],[113.655439,36.125182],[113.671453,36.115514],[113.68562,36.056026],[113.660366,36.034735],[113.694859,36.026991],[113.678844,35.985841],[113.648663,35.994073],[113.654207,35.931586],[113.637576,35.870019],[113.660982,35.837035],[113.582758,35.818111],[113.604932,35.797727],[113.587685,35.736542],[113.592613,35.691838],[113.622794,35.674825],[113.625258,35.632518],[113.578446,35.633491],[113.547649,35.656835],[113.55812,35.621816],[113.513773,35.57364],[113.49899,35.532254],[113.439244,35.507412],[113.391817,35.506925],[113.348085,35.468429],[113.31236,35.481101],[113.304353,35.426989],[113.243375,35.449418],[113.189789,35.44893],[113.185477,35.409431],[113.165151,35.412845],[113.149137,35.350878],[113.126347,35.332327],[113.067217,35.353806],[112.996384,35.362104],[112.985913,35.33965],[112.992072,35.29619],[112.936022,35.284466],[112.934174,35.262968],[112.884283,35.243909],[112.822073,35.258082],[112.772798,35.207732],[112.720443,35.206265],[112.628052,35.263457],[112.637291,35.225822],[112.513487,35.218489],[112.390915,35.239021],[112.36751,35.219956],[112.288053,35.219956],[112.304684,35.251728],[112.242474,35.234622],[112.21722,35.253195],[112.13838,35.271275],[112.058924,35.280069],[112.078634,35.219467],[112.03983,35.194039],[112.066315,35.153437],[112.05646,35.098615],[112.062004,35.056005],[112.039214,35.045717],[112.018888,35.068742],[111.97762,35.067272],[111.933272,35.083435],[111.810084,35.062374],[111.807005,35.032977],[111.740483,35.00455],[111.664107,34.984449],[111.681969,34.9511],[111.646861,34.938836],[111.617911,34.894671],[111.592042,34.881416],[111.570484,34.843114],[111.543999,34.853428],[111.502731,34.829851],[111.439289,34.838202],[111.389398,34.815113],[111.345666,34.831816],[111.29208,34.806759],[111.255123,34.819535],[111.232949,34.789559],[111.148566,34.807742],[111.118385,34.756623],[111.035233,34.740887],[110.976103,34.706456],[110.920052,34.730068],[110.903422,34.669056],[110.883712,34.64395],[110.824582,34.615881],[110.791937,34.649858],[110.749437,34.65232],[110.710017,34.605045],[110.610851,34.607508],[110.533242,34.583368],[110.488279,34.610956],[110.424837,34.588295],[110.379257,34.600612],[110.366939,34.566614],[110.404511,34.557743],[110.372482,34.544435],[110.360779,34.516825],[110.403279,34.433448],[110.403279,34.433448],[110.473496,34.393457],[110.503677,34.33714],[110.451938,34.292653],[110.428533,34.288203],[110.43962,34.243196],[110.507989,34.217466],[110.55172,34.213012],[110.55788,34.193214],[110.621938,34.177372],[110.642264,34.161032],[110.61393,34.113478],[110.591757,34.101586],[110.587445,34.023252],[110.620706,34.035652],[110.671213,33.966192],[110.665669,33.937895],[110.627481,33.925482],[110.628713,33.910086],[110.587445,33.887733],[110.612083,33.852453],[110.66259,33.85295],[110.712481,33.833564],[110.74143,33.798759],[110.782082,33.796272],[110.81719,33.751003],[110.831973,33.713675],[110.823966,33.685793],[110.878784,33.634486],[110.966864,33.609071],[111.00382,33.578662],[111.002588,33.535772],[111.02661,33.478386],[111.02661,33.467903],[110.996429,33.435946],[111.025994,33.375495],[111.025994,33.330504],[110.984726,33.255469],[111.046936,33.202905],[111.045704,33.169849],[111.08882,33.181871],[111.12824,33.15532],[111.146102,33.12375],[111.179363,33.115229],[111.192913,33.071609],[111.152877,33.039507],[111.221862,33.042517],[111.258819,33.006389],[111.273601,32.971753],[111.242804,32.930573],[111.255123,32.883846],[111.276065,32.903445],[111.293311,32.859217],[111.380159,32.829049],[111.41342,32.757108],[111.475629,32.760127],[111.458383,32.726402],[111.513202,32.674026],[111.530448,32.628172],[111.577875,32.593388],[111.640701,32.634724],[111.646245,32.605993],[111.713382,32.606497],[111.808853,32.536899],[111.858128,32.528826],[111.890157,32.503089],[111.948671,32.51722],[111.975772,32.471791],[112.014576,32.450077],[112.063851,32.474315],[112.081098,32.425833],[112.155626,32.377326],[112.150083,32.411688],[112.172873,32.385412],[112.206133,32.392992],[112.328089,32.321712],[112.360118,32.3657],[112.390915,32.37126],[112.448814,32.34295],[112.477147,32.380863],[112.530733,32.37682],[112.545516,32.404109],[112.589248,32.381369],[112.612037,32.386928],[112.645298,32.368227],[112.716747,32.357612]]],[[[113.768156,32.284279],[113.768772,32.30148],[113.749061,32.272642],[113.758301,32.27669],[113.768156,32.284279]]]]}},{"type":"Feature","properties":{"adcode":420000,"name":"湖北省","center":[114.298572,30.584355],"centroid":[112.271301,30.987527],"childrenNum":17,"level":"province","parent":{"adcode":100000},"subFeatureIndex":16,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[111.045704,33.169849],[111.034001,33.177864],[111.035849,33.187881],[111.046936,33.202905],[110.984726,33.255469],[110.960704,33.253967],[110.9219,33.203907],[110.865234,33.213921],[110.828893,33.201403],[110.824582,33.158327],[110.753133,33.15031],[110.702626,33.097182],[110.650887,33.157324],[110.623785,33.143796],[110.59422,33.168346],[110.57759,33.250464],[110.54125,33.255469],[110.471032,33.171352],[110.398352,33.176862],[110.398352,33.176862],[110.372482,33.186379],[110.33799,33.160331],[110.285635,33.171352],[110.218497,33.163336],[110.164911,33.209415],[110.031252,33.191888],[109.999223,33.212419],[109.973353,33.203907],[109.916687,33.229942],[109.852013,33.247961],[109.813209,33.236449],[109.732521,33.231443],[109.693101,33.254468],[109.649985,33.251465],[109.619804,33.275484],[109.60687,33.235949],[109.514479,33.237951],[109.498464,33.207412],[109.438718,33.152314],[109.468283,33.140288],[109.522486,33.138785],[109.576073,33.110216],[109.688174,33.116733],[109.704188,33.101694],[109.794731,33.067095],[109.785492,32.987316],[109.76455,32.909474],[109.789804,32.882339],[109.847702,32.893395],[109.856941,32.910479],[109.907448,32.903947],[109.927158,32.887364],[109.988752,32.886359],[110.051578,32.851676],[110.105164,32.832569],[110.142121,32.802895],[110.127338,32.77774],[110.159367,32.767173],[110.156903,32.683093],[110.206179,32.633212],[110.153824,32.593388],[110.124259,32.616579],[110.090382,32.617083],[110.084223,32.580782],[110.017701,32.546989],[109.97089,32.577756],[109.910528,32.592884],[109.816905,32.577252],[109.746072,32.594901],[109.726978,32.608513],[109.631507,32.599943],[109.619804,32.56767],[109.637051,32.540935],[109.575457,32.506622],[109.526797,32.43341],[109.529877,32.405625],[109.502776,32.38895],[109.513247,32.342444],[109.495385,32.300468],[109.528645,32.270112],[109.550203,32.225065],[109.592703,32.219495],[109.604406,32.199241],[109.58716,32.161251],[109.621652,32.106519],[109.590855,32.047696],[109.590855,32.012688],[109.631507,31.962436],[109.62042,31.928412],[109.584696,31.900472],[109.60379,31.885737],[109.633971,31.824738],[109.633971,31.804396],[109.592087,31.789136],[109.585928,31.726546],[109.622268,31.711783],[109.683246,31.719929],[109.731289,31.700582],[109.737449,31.628761],[109.76455,31.602769],[109.745456,31.598182],[109.727594,31.548214],[109.837847,31.555354],[109.894513,31.519139],[109.969658,31.508935],[109.94502,31.47066],[109.98752,31.474744],[110.036795,31.436966],[110.054042,31.410921],[110.118715,31.409899],[110.161831,31.314338],[110.155671,31.279564],[110.180309,31.179774],[110.200019,31.158779],[110.180309,31.121899],[110.147048,31.116776],[110.119947,31.088592],[110.120563,31.0322],[110.140273,31.030661],[110.140889,30.987062],[110.172918,30.978853],[110.153824,30.953708],[110.151976,30.911613],[110.082375,30.799614],[110.048498,30.800642],[110.019549,30.829425],[110.008462,30.883369],[109.943788,30.878746],[109.894513,30.899803],[109.828608,30.864364],[109.780564,30.848437],[109.701724,30.783677],[109.656761,30.760538],[109.661072,30.738936],[109.625348,30.702923],[109.590855,30.69366],[109.574225,30.646818],[109.543428,30.63961],[109.535421,30.664837],[109.435638,30.595832],[109.418392,30.559766],[109.35495,30.487076],[109.337088,30.521623],[109.36111,30.551004],[109.314298,30.599953],[109.299516,30.630341],[109.245313,30.580892],[109.191726,30.545851],[109.191726,30.545851],[109.143683,30.521108],[109.103647,30.565949],[109.09256,30.578831],[109.106111,30.61077],[109.111654,30.646303],[109.071002,30.640125],[109.042669,30.655571],[109.006329,30.626736],[108.971836,30.627766],[108.893612,30.565434],[108.838793,30.503062],[108.808612,30.491202],[108.789518,30.513374],[108.743939,30.494812],[108.698975,30.54482],[108.688504,30.58759],[108.642925,30.578831],[108.6497,30.53915],[108.56778,30.468508],[108.556077,30.487592],[108.512961,30.501515],[108.472925,30.487076],[108.42673,30.492233],[108.411331,30.438586],[108.430425,30.416397],[108.402092,30.376649],[108.431041,30.354446],[108.460606,30.35961],[108.501258,30.314673],[108.524048,30.309506],[108.54499,30.269716],[108.581947,30.255759],[108.551766,30.1637],[108.56778,30.157491],[108.546222,30.104178],[108.513577,30.057571],[108.532055,30.051873],[108.536367,29.983472],[108.517889,29.9394],[108.516041,29.885451],[108.467998,29.864175],[108.433505,29.880262],[108.371295,29.841337],[108.424266,29.815897],[108.422418,29.772791],[108.442744,29.778505],[108.437201,29.741098],[108.460606,29.741098],[108.504338,29.707836],[108.504954,29.728626],[108.548686,29.749412],[108.52528,29.770713],[108.556077,29.818493],[108.601041,29.863656],[108.658939,29.854833],[108.680497,29.800319],[108.676801,29.749412],[108.690968,29.689642],[108.752562,29.649082],[108.786438,29.691721],[108.797525,29.660003],[108.781511,29.635558],[108.844337,29.658443],[108.888068,29.628795],[108.870206,29.596537],[108.901003,29.604863],[108.913322,29.574679],[108.878213,29.539279],[108.888684,29.502305],[108.866511,29.470527],[108.884373,29.440824],[108.927488,29.435612],[108.934264,29.399643],[108.919481,29.3261],[108.983539,29.332883],[108.999553,29.36366],[109.034662,29.360531],[109.060531,29.403292],[109.11227,29.361053],[109.106727,29.288526],[109.141835,29.270256],[109.110422,29.21647],[109.139372,29.168927],[109.162777,29.180946],[109.215748,29.145409],[109.232378,29.119271],[109.274262,29.121885],[109.261328,29.161089],[109.275494,29.202366],[109.257632,29.222738],[109.312451,29.25146],[109.352487,29.284872],[109.343863,29.369398],[109.391291,29.372005],[109.368501,29.413719],[109.418392,29.453332],[109.415928,29.497617],[109.436254,29.488761],[109.433791,29.530948],[109.458428,29.513242],[109.467051,29.560104],[109.488609,29.553336],[109.516326,29.626194],[109.558826,29.606944],[109.578536,29.629836],[109.651833,29.625674],[109.664768,29.599659],[109.717739,29.615269],[109.701108,29.636078],[109.714659,29.673524],[109.760238,29.689122],[109.755311,29.733304],[109.779333,29.757725],[109.869876,29.774869],[109.908064,29.763959],[109.941325,29.774349],[110.02386,29.769674],[110.113788,29.789932],[110.160599,29.753569],[110.219729,29.746814],[110.289946,29.6964],[110.302265,29.661563],[110.339221,29.668324],[110.372482,29.633477],[110.447011,29.664684],[110.467337,29.713034],[110.507373,29.692241],[110.562807,29.712515],[110.642879,29.775907],[110.60038,29.839779],[110.549873,29.848085],[110.538786,29.895828],[110.49875,29.91243],[110.517228,29.961179],[110.557264,29.988137],[110.491358,30.019751],[110.497518,30.055499],[110.531394,30.061197],[110.600996,30.054463],[110.650887,30.07777],[110.712481,30.033223],[110.756212,30.054463],[110.746973,30.112979],[110.851067,30.126439],[110.924364,30.111426],[110.929907,30.063268],[111.031537,30.048765],[111.242188,30.040476],[111.266826,30.01146],[111.3315,29.970512],[111.342587,29.944586],[111.382623,29.95029],[111.394325,29.912948],[111.436825,29.930065],[111.475629,29.918654],[111.527368,29.925916],[111.553854,29.894272],[111.669034,29.888565],[111.669034,29.888565],[111.705375,29.890121],[111.723853,29.909317],[111.723853,29.909317],[111.75773,29.92021],[111.8107,29.901017],[111.861207,29.856909],[111.899396,29.855871],[111.899396,29.855871],[111.925881,29.836665],[111.965917,29.832512],[111.95483,29.796683],[112.008417,29.778505],[112.07617,29.743696],[112.065699,29.681323],[112.089721,29.685482],[112.111279,29.659483],[112.178416,29.656883],[112.202438,29.633997],[112.244322,29.659483],[112.233851,29.61631],[112.303452,29.585609],[112.281278,29.536676],[112.291133,29.517409],[112.333017,29.545007],[112.368741,29.541362],[112.424792,29.598619],[112.439574,29.633997],[112.499321,29.629316],[112.54182,29.60122],[112.572001,29.624113],[112.640371,29.607985],[112.650842,29.592374],[112.693957,29.601741],[112.714283,29.648561],[112.733378,29.645441],[112.788812,29.681323],[112.79374,29.735902],[112.861493,29.78318],[112.894138,29.783699],[112.902145,29.79149],[112.929246,29.77383],[112.923703,29.766557],[112.926782,29.692241],[112.944645,29.682883],[112.974826,29.732784],[113.025949,29.772791],[113.005007,29.693801],[112.915696,29.620992],[112.912,29.606944],[112.950188,29.473132],[113.034572,29.523658],[113.057362,29.522616],[113.078304,29.438218],[113.099861,29.459585],[113.145441,29.449163],[113.181781,29.485636],[113.222433,29.543965],[113.277252,29.594976],[113.37765,29.703158],[113.571671,29.849123],[113.575367,29.809147],[113.550729,29.768115],[113.558736,29.727067],[113.540258,29.699519],[113.547033,29.675603],[113.606164,29.666764],[113.663446,29.684443],[113.680692,29.64336],[113.704098,29.634518],[113.73859,29.579363],[113.710257,29.555419],[113.630801,29.523137],[113.677613,29.513763],[113.755221,29.446557],[113.731199,29.393907],[113.674533,29.388172],[113.660982,29.333405],[113.632033,29.316186],[113.609859,29.25146],[113.651743,29.225872],[113.693011,29.226394],[113.691779,29.19662],[113.66283,29.16945],[113.690547,29.114566],[113.696091,29.077437],[113.722576,29.104631],[113.749677,29.060699],[113.775547,29.095219],[113.816199,29.105154],[113.852539,29.058606],[113.882104,29.065407],[113.876561,29.038202],[113.898119,29.029307],[113.94185,29.047097],[113.952321,29.092604],[113.98743,29.126068],[114.034857,29.152204],[114.063191,29.204978],[114.169748,29.216993],[114.252284,29.23475],[114.259059,29.343839],[114.307102,29.365225],[114.341595,29.327665],[114.376088,29.322969],[114.440145,29.341752],[114.466015,29.324013],[114.519602,29.325578],[114.589819,29.352707],[114.621847,29.379828],[114.67297,29.395993],[114.740724,29.386607],[114.759818,29.363139],[114.784455,29.386086],[114.812173,29.383478],[114.866375,29.404335],[114.895325,29.397557],[114.931049,29.422581],[114.947063,29.465317],[114.935977,29.486678],[114.90518,29.473132],[114.918114,29.454374],[114.888549,29.436134],[114.860216,29.476258],[114.900868,29.505951],[114.940288,29.493971],[114.966773,29.522096],[114.947679,29.542924],[115.00065,29.572076],[115.033295,29.546568],[115.087498,29.560104],[115.086266,29.525741],[115.154019,29.510117],[115.157099,29.584568],[115.120142,29.597578],[115.143548,29.645961],[115.117679,29.655843],[115.113367,29.684963],[115.176809,29.654803],[115.250722,29.660003],[115.28583,29.618391],[115.304924,29.637118],[115.355431,29.649602],[115.412714,29.688602],[115.470612,29.739539],[115.479235,29.811224],[115.51188,29.840299],[115.611662,29.841337],[115.667712,29.850161],[115.706517,29.837703],[115.762567,29.793048],[115.837096,29.748373],[115.909777,29.723949],[115.965827,29.724469],[116.049595,29.761881],[116.087167,29.795125],[116.13521,29.819532],[116.128435,29.897904],[116.073616,29.969993],[116.091479,30.036331],[116.078544,30.062233],[116.088399,30.110391],[116.055754,30.180774],[116.065609,30.204569],[115.997856,30.252657],[115.985537,30.290905],[115.903001,30.31364],[115.91532,30.337919],[115.885139,30.379747],[115.921479,30.416397],[115.894994,30.452517],[115.910393,30.519046],[115.887603,30.542758],[115.876516,30.582438],[115.848799,30.602014],[115.819234,30.597893],[115.81369,30.637035],[115.762567,30.685426],[115.782893,30.751795],[115.851262,30.756938],[115.863581,30.815549],[115.848799,30.828397],[115.865429,30.864364],[115.932566,30.889532],[115.976298,30.931636],[116.03974,30.957813],[116.071769,30.956787],[116.058834,31.012711],[116.015102,31.011685],[116.006479,31.034764],[115.938726,31.04707],[115.939958,31.071678],[115.887603,31.10909],[115.867277,31.147512],[115.837712,31.127022],[115.797676,31.128047],[115.778582,31.112164],[115.700973,31.201276],[115.655394,31.211002],[115.603655,31.17363],[115.585793,31.143926],[115.540213,31.194621],[115.539597,31.231985],[115.507568,31.267799],[115.473076,31.265242],[115.443511,31.344498],[115.40717,31.337854],[115.372062,31.349098],[115.393004,31.389977],[115.373909,31.405813],[115.338801,31.40428],[115.301229,31.383846],[115.250722,31.392021],[115.252569,31.421646],[115.211301,31.442072],[115.218077,31.515057],[115.235939,31.555354],[115.212533,31.555354],[115.16449,31.604808],[115.12507,31.599201],[115.106592,31.567592],[115.114599,31.530362],[115.096121,31.508425],[115.022824,31.527811],[114.995107,31.471171],[114.962462,31.494648],[114.884238,31.469129],[114.870071,31.479337],[114.830035,31.45892],[114.789383,31.480358],[114.778912,31.520669],[114.696376,31.525771],[114.641558,31.582378],[114.61692,31.585437],[114.572572,31.553824],[114.560869,31.560963],[114.547935,31.623665],[114.57134,31.660858],[114.586123,31.762172],[114.549783,31.766751],[114.530688,31.742834],[114.443841,31.728074],[114.403189,31.746906],[114.350218,31.755557],[114.292936,31.752503],[114.235654,31.833382],[114.191922,31.852192],[114.134024,31.843042],[114.121705,31.809482],[114.086596,31.782014],[114.017611,31.770822],[113.988662,31.749959],[113.952321,31.793714],[113.957865,31.852701],[113.914749,31.877098],[113.893807,31.847109],[113.854387,31.843042],[113.830981,31.87913],[113.832213,31.918761],[113.805728,31.929428],[113.817431,31.964467],[113.757685,31.98985],[113.791561,32.036028],[113.728735,32.083197],[113.722576,32.12426],[113.750293,32.11615],[113.782322,32.184553],[113.752757,32.215951],[113.73859,32.255942],[113.749061,32.272642],[113.768772,32.30148],[113.753989,32.328286],[113.76754,32.370249],[113.735511,32.410677],[113.700402,32.420782],[113.650511,32.412698],[113.624642,32.36115],[113.511925,32.316654],[113.428773,32.270618],[113.376418,32.298445],[113.353628,32.294904],[113.317904,32.327275],[113.333918,32.336377],[113.2366,32.407141],[113.211962,32.431895],[113.158992,32.410677],[113.155912,32.380863],[113.118956,32.375809],[113.107869,32.398551],[113.078919,32.394508],[113.025949,32.425328],[113.000695,32.41674],[112.992072,32.378336],[112.912,32.390971],[112.888594,32.37682],[112.860877,32.396024],[112.776493,32.358623],[112.735841,32.356095],[112.733993,32.356601],[112.724138,32.358623],[112.716747,32.357612],[112.645298,32.368227],[112.612037,32.386928],[112.589248,32.381369],[112.545516,32.404109],[112.530733,32.37682],[112.477147,32.380863],[112.448814,32.34295],[112.390915,32.37126],[112.360118,32.3657],[112.328089,32.321712],[112.206133,32.392992],[112.172873,32.385412],[112.150083,32.411688],[112.155626,32.377326],[112.081098,32.425833],[112.063851,32.474315],[112.014576,32.450077],[111.975772,32.471791],[111.948671,32.51722],[111.890157,32.503089],[111.858128,32.528826],[111.808853,32.536899],[111.713382,32.606497],[111.646245,32.605993],[111.640701,32.634724],[111.577875,32.593388],[111.530448,32.628172],[111.513202,32.674026],[111.458383,32.726402],[111.475629,32.760127],[111.41342,32.757108],[111.380159,32.829049],[111.293311,32.859217],[111.276065,32.903445],[111.255123,32.883846],[111.242804,32.930573],[111.273601,32.971753],[111.258819,33.006389],[111.221862,33.042517],[111.152877,33.039507],[111.192913,33.071609],[111.179363,33.115229],[111.146102,33.12375],[111.12824,33.15532],[111.08882,33.181871],[111.045704,33.169849]]],[[[109.106111,30.570587],[109.101183,30.579346],[109.09872,30.579346],[109.106111,30.570587]]],[[[111.046936,33.202905],[111.035849,33.187881],[111.034001,33.177864],[111.045704,33.169849],[111.046936,33.202905]]],[[[112.716747,32.357612],[112.735841,32.356095],[112.733993,32.356601],[112.724138,32.358623],[112.716747,32.357612]]],[[[112.902145,29.79149],[112.894138,29.783699],[112.923703,29.766557],[112.929246,29.77383],[112.902145,29.79149]]]]}},{"type":"Feature","properties":{"adcode":430000,"name":"湖南省","center":[112.982279,28.19409],"centroid":[111.711649,27.629216],"childrenNum":14,"level":"province","parent":{"adcode":100000},"subFeatureIndex":17,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[112.024431,24.740308],[112.03367,24.771286],[112.124214,24.841364],[112.149467,24.837019],[112.167329,24.859828],[112.175337,24.927685],[112.119902,24.963499],[112.12175,24.989538],[112.155626,25.026419],[112.151931,25.055698],[112.177184,25.106649],[112.187039,25.182494],[112.246785,25.185202],[112.256025,25.159204],[112.302836,25.157037],[112.315771,25.175453],[112.365046,25.191701],[112.414937,25.14241],[112.44327,25.185744],[112.458053,25.152162],[112.562762,25.124531],[112.628052,25.140785],[112.660081,25.132658],[112.712436,25.083344],[112.714899,25.025876],[112.742001,24.99876],[112.743233,24.959701],[112.778341,24.947764],[112.780805,24.896747],[112.873812,24.896747],[112.904609,24.921715],[112.941565,24.915745],[112.994536,24.927142],[113.009934,24.977604],[112.979137,25.03401],[113.004391,25.089306],[112.96805,25.141869],[112.97421,25.168412],[113.034572,25.198199],[112.992688,25.247467],[112.958195,25.254503],[112.897833,25.238264],[112.867036,25.249632],[112.854718,25.337829],[112.891058,25.339993],[112.924319,25.296714],[112.93479,25.325929],[112.969898,25.350269],[113.013014,25.352432],[113.078304,25.382174],[113.096782,25.412449],[113.131274,25.414611],[113.11834,25.445418],[113.176854,25.471355],[113.226129,25.50971],[113.248919,25.514031],[113.311129,25.490264],[113.314208,25.442716],[113.341926,25.448661],[113.373338,25.402719],[113.407215,25.401637],[113.449715,25.359463],[113.479896,25.375145],[113.535946,25.368656],[113.579062,25.34432],[113.584606,25.306453],[113.611707,25.327552],[113.680076,25.334584],[113.686852,25.351891],[113.753373,25.362707],[113.76446,25.333502],[113.814967,25.328634],[113.839605,25.363248],[113.877177,25.380552],[113.887032,25.436772],[113.94493,25.441635],[113.962792,25.528072],[113.986198,25.529153],[113.983118,25.599336],[113.957249,25.611749],[113.913517,25.701299],[113.920293,25.741197],[113.961561,25.77731],[113.971416,25.836036],[114.028082,25.893119],[114.028082,25.98138],[114.008372,26.015806],[114.044096,26.076564],[114.087828,26.06635],[114.121089,26.085702],[114.10569,26.097526],[114.188842,26.121172],[114.237501,26.152333],[114.216559,26.203355],[114.181451,26.214631],[114.102611,26.187783],[114.088444,26.168448],[114.013299,26.184023],[113.962792,26.150722],[113.949242,26.192616],[113.972647,26.20604],[113.978807,26.237716],[114.029314,26.266163],[114.021307,26.288701],[114.047792,26.337518],[114.030546,26.376664],[114.062575,26.406149],[114.085364,26.406149],[114.090292,26.455988],[114.110002,26.482775],[114.07243,26.480096],[114.10877,26.56952],[114.019459,26.587182],[113.996669,26.615543],[113.912901,26.613938],[113.860546,26.664221],[113.853771,26.769532],[113.835909,26.806394],[113.877177,26.859262],[113.890112,26.895562],[113.927068,26.948922],[113.892575,26.964925],[113.86301,27.018252],[113.824206,27.036378],[113.803264,27.099261],[113.771851,27.096598],[113.779242,27.137081],[113.846996,27.222262],[113.872865,27.289828],[113.854387,27.30525],[113.872865,27.346721],[113.872865,27.384988],[113.72812,27.350442],[113.699786,27.331836],[113.657902,27.347253],[113.616635,27.345658],[113.605548,27.38924],[113.632033,27.40518],[113.59754,27.428554],[113.591381,27.467855],[113.627105,27.49971],[113.583374,27.524657],[113.579062,27.545354],[113.608627,27.585143],[113.607395,27.625449],[113.652359,27.663619],[113.696707,27.71979],[113.69917,27.740979],[113.763228,27.799228],[113.756453,27.860091],[113.72812,27.874904],[113.752141,27.93361],[113.822974,27.982243],[113.845148,27.971672],[113.864242,28.004966],[113.914133,27.991227],[113.936307,28.018703],[113.966488,28.017646],[113.970184,28.041418],[114.025618,28.031382],[114.047176,28.057263],[114.025002,28.080499],[113.992357,28.161255],[114.012068,28.174972],[114.068734,28.171806],[114.107538,28.182885],[114.109386,28.205038],[114.143879,28.246694],[114.182067,28.249858],[114.198081,28.29097],[114.2529,28.319423],[114.252284,28.395787],[114.214712,28.403157],[114.172212,28.432632],[114.217175,28.466308],[114.218407,28.48472],[114.15435,28.507337],[114.138335,28.533629],[114.08598,28.558337],[114.132176,28.607211],[114.122321,28.623497],[114.157429,28.761566],[114.137719,28.779926],[114.153734,28.829221],[114.124784,28.843376],[114.076741,28.834464],[114.056415,28.872204],[114.060111,28.902596],[114.028082,28.891069],[114.005292,28.917788],[114.008988,28.955498],[113.973879,28.937692],[113.955401,28.978536],[113.961561,28.999476],[113.94185,29.047097],[113.898119,29.029307],[113.876561,29.038202],[113.882104,29.065407],[113.852539,29.058606],[113.816199,29.105154],[113.775547,29.095219],[113.749677,29.060699],[113.722576,29.104631],[113.696091,29.077437],[113.690547,29.114566],[113.66283,29.16945],[113.691779,29.19662],[113.693011,29.226394],[113.651743,29.225872],[113.609859,29.25146],[113.632033,29.316186],[113.660982,29.333405],[113.674533,29.388172],[113.731199,29.393907],[113.755221,29.446557],[113.677613,29.513763],[113.630801,29.523137],[113.710257,29.555419],[113.73859,29.579363],[113.704098,29.634518],[113.680692,29.64336],[113.663446,29.684443],[113.606164,29.666764],[113.547033,29.675603],[113.540258,29.699519],[113.558736,29.727067],[113.550729,29.768115],[113.575367,29.809147],[113.571671,29.849123],[113.37765,29.703158],[113.277252,29.594976],[113.222433,29.543965],[113.181781,29.485636],[113.145441,29.449163],[113.099861,29.459585],[113.078304,29.438218],[113.057362,29.522616],[113.034572,29.523658],[112.950188,29.473132],[112.912,29.606944],[112.915696,29.620992],[113.005007,29.693801],[113.025949,29.772791],[112.974826,29.732784],[112.944645,29.682883],[112.926782,29.692241],[112.923703,29.766557],[112.894138,29.783699],[112.861493,29.78318],[112.79374,29.735902],[112.788812,29.681323],[112.733378,29.645441],[112.714283,29.648561],[112.693957,29.601741],[112.650842,29.592374],[112.640371,29.607985],[112.572001,29.624113],[112.54182,29.60122],[112.499321,29.629316],[112.439574,29.633997],[112.424792,29.598619],[112.368741,29.541362],[112.333017,29.545007],[112.291133,29.517409],[112.281278,29.536676],[112.303452,29.585609],[112.233851,29.61631],[112.244322,29.659483],[112.202438,29.633997],[112.178416,29.656883],[112.111279,29.659483],[112.089721,29.685482],[112.065699,29.681323],[112.07617,29.743696],[112.008417,29.778505],[111.95483,29.796683],[111.965917,29.832512],[111.925881,29.836665],[111.899396,29.855871],[111.899396,29.855871],[111.861207,29.856909],[111.8107,29.901017],[111.75773,29.92021],[111.723853,29.909317],[111.723853,29.909317],[111.705375,29.890121],[111.669034,29.888565],[111.669034,29.888565],[111.553854,29.894272],[111.527368,29.925916],[111.475629,29.918654],[111.436825,29.930065],[111.394325,29.912948],[111.382623,29.95029],[111.342587,29.944586],[111.3315,29.970512],[111.266826,30.01146],[111.242188,30.040476],[111.031537,30.048765],[110.929907,30.063268],[110.924364,30.111426],[110.851067,30.126439],[110.746973,30.112979],[110.756212,30.054463],[110.712481,30.033223],[110.650887,30.07777],[110.600996,30.054463],[110.531394,30.061197],[110.497518,30.055499],[110.491358,30.019751],[110.557264,29.988137],[110.517228,29.961179],[110.49875,29.91243],[110.538786,29.895828],[110.549873,29.848085],[110.60038,29.839779],[110.642879,29.775907],[110.562807,29.712515],[110.507373,29.692241],[110.467337,29.713034],[110.447011,29.664684],[110.372482,29.633477],[110.339221,29.668324],[110.302265,29.661563],[110.289946,29.6964],[110.219729,29.746814],[110.160599,29.753569],[110.113788,29.789932],[110.02386,29.769674],[109.941325,29.774349],[109.908064,29.763959],[109.869876,29.774869],[109.779333,29.757725],[109.755311,29.733304],[109.760238,29.689122],[109.714659,29.673524],[109.701108,29.636078],[109.717739,29.615269],[109.664768,29.599659],[109.651833,29.625674],[109.578536,29.629836],[109.558826,29.606944],[109.516326,29.626194],[109.488609,29.553336],[109.467051,29.560104],[109.458428,29.513242],[109.433791,29.530948],[109.436254,29.488761],[109.415928,29.497617],[109.418392,29.453332],[109.368501,29.413719],[109.391291,29.372005],[109.343863,29.369398],[109.352487,29.284872],[109.312451,29.25146],[109.257632,29.222738],[109.275494,29.202366],[109.261328,29.161089],[109.274262,29.121885],[109.232378,29.119271],[109.240386,29.086328],[109.312451,29.066453],[109.319842,29.042388],[109.294588,29.015177],[109.292741,28.987436],[109.261328,28.952356],[109.235458,28.882161],[109.246545,28.80143],[109.241002,28.776779],[109.2989,28.7474],[109.294588,28.722211],[109.252704,28.691767],[109.271183,28.671816],[109.192958,28.636104],[109.201581,28.597753],[109.235458,28.61982],[109.252089,28.606685],[109.306907,28.62087],[109.319842,28.579886],[109.273646,28.53836],[109.274262,28.494714],[109.260712,28.46473],[109.264407,28.392628],[109.289045,28.373673],[109.268719,28.33786],[109.275494,28.313101],[109.317994,28.277795],[109.33524,28.293605],[109.388211,28.268307],[109.367885,28.254602],[109.340168,28.19027],[109.33832,28.141731],[109.314298,28.103729],[109.298284,28.036136],[109.335856,28.063073],[109.378972,28.034551],[109.362342,28.007608],[109.319842,27.988585],[109.30198,27.956343],[109.32169,27.868027],[109.346943,27.838396],[109.332777,27.782815],[109.37774,27.736741],[109.366653,27.721909],[109.414081,27.725087],[109.470747,27.680049],[109.45658,27.673689],[109.470131,27.62863],[109.451037,27.586204],[109.461508,27.567637],[109.404841,27.55066],[109.303211,27.47582],[109.300132,27.423774],[109.245313,27.41793],[109.202197,27.450331],[109.167089,27.41793],[109.141835,27.448207],[109.142451,27.418461],[109.103647,27.336621],[109.044517,27.331304],[109.053756,27.293551],[108.983539,27.26802],[108.963213,27.235565],[108.907778,27.204699],[108.926873,27.160512],[108.878829,27.106187],[108.79075,27.084343],[108.877597,27.01612],[108.942887,27.017186],[108.942887,27.017186],[108.940423,27.044907],[109.007561,27.08008],[109.032814,27.104056],[109.128901,27.122701],[109.101183,27.06889],[109.165857,27.066758],[109.21698,27.114711],[109.239154,27.14933],[109.264407,27.131755],[109.33524,27.139212],[109.358646,27.153058],[109.415312,27.154123],[109.441182,27.117907],[109.472595,27.134951],[109.454733,27.069423],[109.486761,27.053968],[109.497848,27.079548],[109.520022,27.058764],[109.555131,26.946788],[109.436254,26.892359],[109.452885,26.861932],[109.486761,26.895562],[109.509551,26.877947],[109.513247,26.84004],[109.497232,26.815474],[109.522486,26.749226],[109.528645,26.743881],[109.554515,26.73533],[109.597015,26.756173],[109.568065,26.726243],[109.528645,26.743881],[109.52187,26.749226],[109.486761,26.759913],[109.447957,26.759913],[109.407305,26.719829],[109.35495,26.693098],[109.283501,26.698445],[109.306291,26.661012],[109.334008,26.646036],[109.35495,26.658873],[109.390675,26.598955],[109.407305,26.533116],[109.381436,26.518659],[109.385747,26.493487],[109.362342,26.472061],[109.38082,26.454381],[109.319842,26.418477],[109.29582,26.350389],[109.271183,26.327863],[109.285965,26.295676],[109.325385,26.29031],[109.351255,26.264016],[109.369733,26.277432],[109.442414,26.289774],[109.467051,26.313917],[109.439334,26.238789],[109.47629,26.148035],[109.513863,26.128157],[109.502776,26.096451],[109.449805,26.101826],[109.452885,26.055598],[109.48245,26.029788],[109.513247,25.998056],[109.560058,26.021184],[109.588391,26.019571],[109.635203,26.047533],[109.649369,26.016882],[109.730057,25.989988],[109.710963,25.954478],[109.693717,25.959321],[109.67955,25.921649],[109.685094,25.880197],[109.768246,25.890427],[109.779333,25.866196],[109.811361,25.877504],[109.826144,25.911422],[109.806434,25.973848],[109.782412,25.996981],[109.814441,26.041081],[109.864332,26.027637],[109.898825,26.095377],[109.904368,26.135679],[109.970274,26.195301],[110.03002,26.166299],[110.099005,26.168985],[110.100853,26.132455],[110.065128,26.050221],[110.100853,26.020108],[110.168606,26.028713],[110.181541,26.060437],[110.24991,26.010965],[110.257301,25.961473],[110.325671,25.975462],[110.373098,26.088927],[110.437772,26.153945],[110.477808,26.179727],[110.495054,26.166299],[110.546793,26.233421],[110.552952,26.283335],[110.584365,26.296749],[110.612083,26.333764],[110.643495,26.308552],[110.673676,26.317135],[110.721104,26.294066],[110.742046,26.313917],[110.73527,26.270993],[110.759292,26.248451],[110.836284,26.255966],[110.939762,26.286554],[110.926212,26.320354],[110.944074,26.326791],[110.94469,26.373447],[110.974255,26.385778],[111.008747,26.35897],[111.008132,26.336982],[111.090667,26.308016],[111.208928,26.30426],[111.204616,26.276359],[111.228022,26.261333],[111.277913,26.272066],[111.293311,26.222148],[111.271754,26.217316],[111.274833,26.183486],[111.258203,26.151796],[111.26621,26.095914],[111.244652,26.078177],[111.267442,26.058824],[111.235413,26.048071],[111.189834,25.953402],[111.230486,25.916267],[111.251428,25.864581],[111.29208,25.854349],[111.297007,25.874274],[111.346282,25.906577],[111.376463,25.906039],[111.383239,25.881812],[111.460231,25.885042],[111.4861,25.859196],[111.43313,25.84627],[111.442369,25.77192],[111.399869,25.744431],[111.30871,25.720171],[111.309942,25.645203],[111.343202,25.602574],[111.324724,25.564249],[111.32842,25.521592],[111.279145,25.42326],[111.210776,25.363248],[111.184906,25.367034],[111.138711,25.303748],[111.103602,25.285351],[111.112841,25.21715],[110.998892,25.161371],[110.98411,25.101772],[110.951465,25.04377],[110.968711,24.975434],[111.009363,24.921172],[111.100522,24.945593],[111.101754,25.035095],[111.139943,25.042144],[111.200921,25.074672],[111.221862,25.106649],[111.274833,25.151078],[111.321645,25.105023],[111.36784,25.108817],[111.375231,25.128324],[111.435593,25.093642],[111.416499,25.047566],[111.467622,25.02208],[111.460231,24.992793],[111.43313,24.979774],[111.434977,24.951562],[111.470086,24.92877],[111.447296,24.892947],[111.449144,24.857113],[111.479325,24.797366],[111.461463,24.728894],[111.431282,24.687574],[111.451608,24.665822],[111.499035,24.667997],[111.526752,24.637538],[111.570484,24.64461],[111.588962,24.690837],[111.641933,24.684856],[111.637621,24.715303],[111.666571,24.760961],[111.708455,24.788673],[111.783599,24.785957],[111.814396,24.770199],[111.868599,24.771829],[111.875374,24.756613],[111.929577,24.75607],[111.951135,24.769655],[112.024431,24.740308]]],[[[109.528645,26.743881],[109.522486,26.749226],[109.52187,26.749226],[109.528645,26.743881]]]]}},{"type":"Feature","properties":{"adcode":440000,"name":"广东省","center":[113.280637,23.125178],"centroid":[113.429919,23.334643],"childrenNum":21,"level":"province","parent":{"adcode":100000},"subFeatureIndex":18,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.558736,22.212244],[113.594461,22.228864],[113.595693,22.304186],[113.617866,22.315259],[113.604932,22.339617],[113.627721,22.349027],[113.669605,22.416539],[113.66591,22.438667],[113.624642,22.443092],[113.608627,22.408793],[113.573519,22.41156],[113.631417,22.475723],[113.668373,22.4807],[113.691779,22.514981],[113.740438,22.534329],[113.717033,22.645391],[113.678228,22.726007],[113.733663,22.736494],[113.758301,22.683496],[113.765692,22.665825],[113.803264,22.593463],[113.856851,22.539857],[113.869786,22.459685],[113.893807,22.442539],[113.952937,22.486783],[113.954785,22.491206],[113.976343,22.510558],[114.031778,22.503923],[114.082285,22.512216],[114.095219,22.534329],[114.156813,22.543726],[114.166052,22.559201],[114.222719,22.553122],[114.232574,22.539857],[114.294784,22.563623],[114.321885,22.587385],[114.381631,22.60175],[114.427211,22.589042],[114.472174,22.522168],[114.476486,22.459132],[114.506667,22.438667],[114.549167,22.465769],[114.611377,22.481806],[114.628623,22.513875],[114.614456,22.545384],[114.568261,22.560859],[114.559022,22.583517],[114.603369,22.638763],[114.579964,22.661407],[114.51529,22.655332],[114.567029,22.685705],[114.591666,22.690122],[114.601521,22.730975],[114.689601,22.7674],[114.709927,22.787817],[114.749963,22.764089],[114.73518,22.724351],[114.728405,22.651466],[114.743803,22.632687],[114.746267,22.581859],[114.866375,22.591805],[114.88547,22.538751],[114.922426,22.549253],[114.927969,22.621639],[114.945216,22.645391],[115.039454,22.713862],[115.02344,22.726007],[115.053621,22.747533],[115.076411,22.788368],[115.154635,22.80161],[115.190975,22.77347],[115.190359,22.818711],[115.236555,22.82533],[115.230396,22.776781],[115.319091,22.783402],[115.338185,22.776781],[115.349272,22.712206],[115.381301,22.684048],[115.430576,22.684048],[115.471844,22.697852],[115.575322,22.650914],[115.565467,22.684048],[115.609198,22.753052],[115.541445,22.755259],[115.570394,22.786713],[115.583945,22.82864],[115.654162,22.865591],[115.696046,22.84298],[115.760103,22.834707],[115.788437,22.809885],[115.796444,22.739254],[115.829089,22.734838],[115.883291,22.78561],[115.931334,22.802713],[115.965211,22.800506],[115.99724,22.826985],[116.05637,22.844635],[116.104413,22.816505],[116.14137,22.835259],[116.239304,22.921275],[116.259014,22.932298],[116.302746,22.951588],[116.382818,22.91907],[116.449955,22.936707],[116.50539,22.930645],[116.544194,22.996769],[116.576839,23.014397],[116.557129,23.056253],[116.566368,23.088738],[116.550969,23.109656],[116.566368,23.134424],[116.665534,23.158086],[116.701259,23.198248],[116.74499,23.215299],[116.806584,23.200998],[116.821367,23.240597],[116.798577,23.244996],[116.782563,23.313714],[116.871874,23.4159],[116.871258,23.416449],[116.874338,23.447199],[116.874953,23.447748],[116.895895,23.476295],[116.888504,23.501543],[116.92854,23.530079],[116.963649,23.507031],[117.01046,23.502641],[117.044953,23.539955],[117.085605,23.536663],[117.192778,23.5619],[117.192778,23.629356],[117.147199,23.654027],[117.123793,23.647448],[117.055424,23.694038],[117.048032,23.758687],[117.019083,23.801952],[117.012308,23.855054],[116.981511,23.855602],[116.955642,23.922359],[116.976583,23.931659],[116.981511,23.999471],[116.953178,24.008218],[116.930388,24.064514],[116.9347,24.126794],[116.998757,24.179217],[116.956257,24.216883],[116.933468,24.220157],[116.938395,24.28127],[116.914374,24.287817],[116.919301,24.321087],[116.895895,24.350533],[116.903903,24.369614],[116.839229,24.442097],[116.860787,24.460075],[116.83307,24.496568],[116.796729,24.502014],[116.759157,24.545572],[116.761005,24.583128],[116.815207,24.654944],[116.777635,24.679418],[116.667382,24.658752],[116.623034,24.64189],[116.600861,24.654401],[116.570679,24.621762],[116.530027,24.604895],[116.506622,24.621218],[116.517709,24.652225],[116.485064,24.720196],[116.44626,24.714216],[116.416079,24.744113],[116.419158,24.767482],[116.375427,24.803885],[116.381586,24.82507],[116.417927,24.840821],[116.395137,24.877746],[116.363724,24.87123],[116.345862,24.828872],[116.297202,24.801712],[116.244232,24.793563],[116.251007,24.82507],[116.221442,24.829959],[116.191877,24.877203],[116.153073,24.846795],[116.068073,24.850053],[116.015102,24.905975],[115.985537,24.899461],[115.907929,24.923343],[115.89253,24.936911],[115.885139,24.898918],[115.907313,24.879917],[115.861733,24.863629],[115.863581,24.891318],[115.824161,24.909232],[115.807531,24.862543],[115.790284,24.856027],[115.764415,24.791933],[115.776734,24.774546],[115.756408,24.749004],[115.769342,24.708236],[115.801371,24.705517],[115.780429,24.663103],[115.797676,24.628834],[115.840791,24.584217],[115.843871,24.562446],[115.785357,24.567345],[115.752712,24.546116],[115.68927,24.545027],[115.671408,24.604895],[115.605503,24.62557],[115.569778,24.622306],[115.555611,24.683768],[115.522967,24.702799],[115.476771,24.762591],[115.412714,24.79302],[115.372678,24.774546],[115.358511,24.735416],[115.306772,24.758787],[115.269816,24.749548],[115.258729,24.728894],[115.1842,24.711498],[115.104744,24.667997],[115.083802,24.699537],[115.057317,24.703343],[115.024672,24.669085],[115.00373,24.679418],[114.940288,24.650049],[114.909491,24.661471],[114.893477,24.582584],[114.868839,24.562446],[114.846665,24.602719],[114.827571,24.588026],[114.781376,24.613057],[114.729637,24.608704],[114.73826,24.565168],[114.704999,24.525973],[114.664963,24.583673],[114.627391,24.576598],[114.589819,24.537406],[114.534384,24.559181],[114.429058,24.48622],[114.403189,24.497657],[114.391486,24.563535],[114.363769,24.582584],[114.300943,24.578775],[114.289856,24.619042],[114.258443,24.641346],[114.19069,24.656576],[114.169132,24.689749],[114.27261,24.700624],[114.281849,24.724001],[114.336052,24.749004],[114.342211,24.807145],[114.378551,24.861457],[114.403189,24.877746],[114.395798,24.951019],[114.454928,24.977062],[114.45616,24.99659],[114.506051,24.999844],[114.532536,25.022623],[114.561485,25.077382],[114.604601,25.083886],[114.640326,25.074129],[114.664963,25.10123],[114.735796,25.121822],[114.73518,25.155954],[114.685905,25.173287],[114.693912,25.213902],[114.73518,25.225813],[114.743188,25.274528],[114.714238,25.315651],[114.63663,25.324306],[114.599674,25.385959],[114.541159,25.416773],[114.477718,25.37136],[114.438914,25.376226],[114.43029,25.343779],[114.382863,25.317274],[114.31511,25.33837],[114.2954,25.299961],[114.260291,25.291845],[114.204857,25.29942],[114.190074,25.316733],[114.115545,25.302125],[114.083517,25.275611],[114.055799,25.277775],[114.039785,25.250714],[114.017611,25.273987],[114.029314,25.328093],[114.050256,25.36433],[113.983118,25.415152],[114.003444,25.442716],[113.94493,25.441635],[113.887032,25.436772],[113.877177,25.380552],[113.839605,25.363248],[113.814967,25.328634],[113.76446,25.333502],[113.753373,25.362707],[113.686852,25.351891],[113.680076,25.334584],[113.611707,25.327552],[113.584606,25.306453],[113.579062,25.34432],[113.535946,25.368656],[113.479896,25.375145],[113.449715,25.359463],[113.407215,25.401637],[113.373338,25.402719],[113.341926,25.448661],[113.314208,25.442716],[113.311129,25.490264],[113.248919,25.514031],[113.226129,25.50971],[113.176854,25.471355],[113.11834,25.445418],[113.131274,25.414611],[113.096782,25.412449],[113.078304,25.382174],[113.013014,25.352432],[112.969898,25.350269],[112.93479,25.325929],[112.924319,25.296714],[112.891058,25.339993],[112.854718,25.337829],[112.867036,25.249632],[112.897833,25.238264],[112.958195,25.254503],[112.992688,25.247467],[113.034572,25.198199],[112.97421,25.168412],[112.96805,25.141869],[113.004391,25.089306],[112.979137,25.03401],[113.009934,24.977604],[112.994536,24.927142],[112.941565,24.915745],[112.904609,24.921715],[112.873812,24.896747],[112.780805,24.896747],[112.778341,24.947764],[112.743233,24.959701],[112.742001,24.99876],[112.714899,25.025876],[112.712436,25.083344],[112.660081,25.132658],[112.628052,25.140785],[112.562762,25.124531],[112.458053,25.152162],[112.44327,25.185744],[112.414937,25.14241],[112.365046,25.191701],[112.315771,25.175453],[112.302836,25.157037],[112.256025,25.159204],[112.246785,25.185202],[112.187039,25.182494],[112.177184,25.106649],[112.151931,25.055698],[112.155626,25.026419],[112.12175,24.989538],[112.119902,24.963499],[112.175337,24.927685],[112.167329,24.859828],[112.149467,24.837019],[112.124214,24.841364],[112.03367,24.771286],[112.024431,24.740308],[111.961606,24.721283],[111.939432,24.686487],[111.953598,24.64733],[111.927729,24.629378],[111.936968,24.595645],[111.972077,24.578775],[112.007185,24.534684],[112.009649,24.503103],[111.985011,24.467701],[112.025047,24.438828],[112.057692,24.387057],[112.05954,24.339628],[112.026279,24.294908],[111.990555,24.279634],[111.986243,24.25672],[111.958526,24.263813],[111.912946,24.221795],[111.877222,24.227252],[111.871062,24.176487],[111.886461,24.163929],[111.878454,24.109862],[111.92157,24.012045],[111.940664,23.987989],[111.911714,23.943693],[111.854432,23.947521],[111.845809,23.904305],[111.812548,23.887343],[111.824867,23.832612],[111.8107,23.80688],[111.722621,23.823305],[111.683201,23.822758],[111.683201,23.822758],[111.654868,23.833159],[111.627766,23.78881],[111.621607,23.725819],[111.666571,23.718696],[111.614832,23.65896],[111.615448,23.639225],[111.555702,23.64087],[111.487332,23.626615],[111.479941,23.532822],[111.428818,23.466414],[111.399869,23.469159],[111.383239,23.399423],[111.389398,23.375804],[111.363528,23.340641],[111.376463,23.30437],[111.353058,23.284582],[111.36476,23.240047],[111.388782,23.210349],[111.38447,23.16744],[111.365992,23.14488],[111.377695,23.082132],[111.402333,23.066165],[111.43313,23.073322],[111.433746,23.036428],[111.389398,23.005583],[111.403565,22.99126],[111.362913,22.967568],[111.374615,22.938361],[111.358601,22.889301],[111.218167,22.748085],[111.185522,22.735942],[111.118385,22.744773],[111.058023,22.729871],[111.089435,22.695643],[111.055559,22.648705],[110.997045,22.631582],[110.958856,22.636553],[110.950233,22.61059],[110.896031,22.613352],[110.897878,22.591805],[110.812263,22.576333],[110.778386,22.585174],[110.749437,22.556991],[110.762988,22.518298],[110.740198,22.498947],[110.74143,22.464109],[110.688459,22.477935],[110.712481,22.440879],[110.711249,22.369506],[110.74143,22.361757],[110.749437,22.329653],[110.787009,22.28259],[110.759292,22.274837],[110.725415,22.29588],[110.687843,22.249914],[110.646575,22.220554],[110.678604,22.172901],[110.629329,22.149068],[110.598532,22.162924],[110.602843,22.18343],[110.55788,22.196175],[110.505525,22.14297],[110.456866,22.189526],[110.414366,22.208365],[110.378026,22.164587],[110.34846,22.195621],[110.326287,22.152393],[110.364475,22.125785],[110.35154,22.097508],[110.359547,22.015973],[110.352772,21.97602],[110.374946,21.967695],[110.374946,21.967695],[110.378642,21.939942],[110.378642,21.939942],[110.391576,21.89386],[110.337374,21.887751],[110.290562,21.917736],[110.283787,21.892194],[110.224041,21.882198],[110.224041,21.882198],[110.212338,21.886085],[110.212338,21.886085],[110.196323,21.899968],[110.12857,21.902744],[110.101469,21.86998],[110.050962,21.857205],[109.999839,21.881643],[109.94502,21.84443],[109.940093,21.769419],[109.916071,21.668787],[109.888354,21.652101],[109.888354,21.652101],[109.839695,21.636525],[109.786108,21.637638],[109.778101,21.670455],[109.742992,21.616497],[109.754695,21.556396],[109.788572,21.490702],[109.785492,21.45673],[109.819369,21.445033],[109.894513,21.442248],[109.904368,21.429992],[109.868644,21.365913],[109.770709,21.359783],[109.757775,21.346963],[109.763934,21.226514],[109.674623,21.136671],[109.674007,21.067997],[109.655529,20.929435],[109.664768,20.862343],[109.711579,20.774519],[109.730057,20.719673],[109.74484,20.621124],[109.793499,20.615522],[109.813825,20.574627],[109.811977,20.541566],[109.839695,20.489439],[109.888354,20.475423],[109.895745,20.42776],[109.864948,20.40196],[109.861252,20.376717],[109.916071,20.316677],[109.909296,20.236961],[109.929006,20.211691],[109.993679,20.254368],[110.082375,20.258859],[110.118099,20.219553],[110.168606,20.219553],[110.220345,20.25156],[110.296722,20.249314],[110.349076,20.258859],[110.384185,20.293103],[110.425453,20.291419],[110.452554,20.311064],[110.491358,20.373912],[110.54125,20.42047],[110.550489,20.47262],[110.499982,20.572386],[110.487047,20.640167],[110.466105,20.680485],[110.411286,20.670966],[110.392192,20.682724],[110.407591,20.731987],[110.393424,20.816479],[110.350924,20.84165],[110.327519,20.847802],[110.269004,20.839972],[110.209874,20.860106],[110.184005,20.891979],[110.180925,20.98197],[110.204947,21.003202],[110.208642,21.050684],[110.241903,21.016051],[110.24991,21.045098],[110.296722,21.093684],[110.39096,21.124949],[110.422373,21.190807],[110.451322,21.186343],[110.501213,21.217588],[110.534474,21.204198],[110.626249,21.215915],[110.65951,21.239902],[110.713097,21.3124],[110.768531,21.364799],[110.796248,21.37483],[110.888639,21.367585],[110.929291,21.375945],[111.034617,21.438906],[111.103602,21.455616],[111.171355,21.458401],[111.28284,21.485691],[111.276065,21.443362],[111.250196,21.45116],[111.257587,21.41495],[111.28592,21.41885],[111.353058,21.464528],[111.382623,21.495714],[111.444217,21.514088],[111.494724,21.501282],[111.521825,21.517429],[111.560629,21.50518],[111.609904,21.530234],[111.650556,21.512418],[111.677658,21.529677],[111.693672,21.590345],[111.736788,21.609821],[111.794686,21.61149],[111.832258,21.578659],[111.810084,21.555283],[111.887693,21.578659],[111.941896,21.607039],[111.972692,21.603144],[112.026895,21.633744],[111.997946,21.657107],[111.954214,21.667674],[111.956062,21.710494],[112.036134,21.761637],[112.136532,21.793871],[112.192583,21.789425],[112.196894,21.736624],[112.236315,21.727173],[112.238778,21.702153],[112.353343,21.707157],[112.415553,21.734956],[112.427256,21.789981],[112.445734,21.803317],[112.497473,21.785535],[112.535661,21.753856],[112.647146,21.758302],[112.68595,21.810541],[112.792508,21.921067],[112.841167,21.920512],[112.893522,21.84443],[112.929862,21.838875],[112.989608,21.869424],[113.047507,21.956595],[113.053666,22.012089],[113.032108,22.04593],[113.045659,22.088636],[113.086927,22.12634],[113.091854,22.065344],[113.142977,22.012089],[113.1516,21.979905],[113.235368,21.887751],[113.266781,21.871646],[113.319752,21.909407],[113.330223,21.96159],[113.442324,22.009315],[113.45957,22.043711],[113.527939,22.073663],[113.567359,22.075327],[113.554425,22.107489],[113.554425,22.142416],[113.534715,22.174009],[113.53841,22.209473],[113.558736,22.212244]]],[[[117.024627,23.437865],[116.982743,23.460924],[116.944555,23.440061],[116.951946,23.419744],[117.027091,23.41535],[117.050496,23.400522],[117.081909,23.409309],[117.124409,23.389537],[117.142887,23.400522],[117.142887,23.459826],[117.129336,23.483431],[117.093612,23.459277],[117.058503,23.47355],[117.029554,23.443356],[117.024627,23.437865]]],[[[112.853486,21.740515],[112.876275,21.772753],[112.840551,21.776644],[112.782653,21.739959],[112.724138,21.719945],[112.70566,21.679354],[112.734609,21.666562],[112.780189,21.671568],[112.730914,21.613715],[112.775261,21.564189],[112.817145,21.590345],[112.798667,21.610933],[112.821457,21.655994],[112.804826,21.686583],[112.83316,21.736624],[112.853486,21.740515]]],[[[112.530733,21.583667],[112.563378,21.591458],[112.571385,21.619835],[112.621277,21.606482],[112.665624,21.642644],[112.639139,21.67268],[112.66624,21.683803],[112.663776,21.714386],[112.592327,21.693256],[112.560299,21.666562],[112.57077,21.645982],[112.535045,21.628737],[112.530733,21.583667]]],[[[114.231342,22.016528],[114.311414,22.041493],[114.302791,22.050368],[114.239965,22.03539],[114.231342,22.016528]]],[[[110.43346,21.171276],[110.489511,21.138904],[110.508605,21.140579],[110.544945,21.083633],[110.582517,21.094801],[110.632409,21.210893],[110.589293,21.194713],[110.525235,21.190249],[110.499366,21.213125],[110.445163,21.184669],[110.431612,21.180763],[110.43346,21.171276]]],[[[112.435263,21.663781],[112.456205,21.648763],[112.458669,21.68992],[112.435263,21.663781]]],[[[110.517844,21.079166],[110.459946,21.062971],[110.398352,21.096476],[110.352772,21.079724],[110.305961,21.0881],[110.27578,21.033369],[110.211106,20.986999],[110.201251,20.938378],[110.309656,20.963529],[110.347845,20.984763],[110.407591,20.990351],[110.47288,20.983087],[110.511684,20.916578],[110.535706,20.922727],[110.539402,20.987557],[110.560344,21.061295],[110.517844,21.079166]]],[[[113.765076,21.962145],[113.774315,21.998218],[113.74167,21.991559],[113.765076,21.962145]]],[[[113.723192,21.922177],[113.742902,21.950489],[113.71888,21.951599],[113.723192,21.922177]]],[[[113.142977,21.831653],[113.162071,21.853873],[113.203955,21.861093],[113.167615,21.876644],[113.136818,21.868869],[113.142977,21.831653]]],[[[113.819894,22.396068],[113.813735,22.419858],[113.786634,22.413773],[113.819894,22.396068]]],[[[114.190074,21.986564],[114.229494,21.995443],[114.180835,22.00987],[114.190074,21.986564]]],[[[114.153734,21.97491],[114.171596,22.000437],[114.124169,21.985455],[114.153734,21.97491]]],[[[116.769628,20.771721],[116.761005,20.750456],[116.87249,20.738143],[116.889736,20.683284],[116.849084,20.628405],[116.749302,20.600958],[116.796113,20.582471],[116.862635,20.588633],[116.905135,20.619443],[116.934084,20.676565],[116.925461,20.726949],[116.88604,20.775638],[116.820135,20.780674],[116.769628,20.771721]]],[[[113.025333,21.847762],[113.045659,21.882753],[113.007471,21.869424],[113.025333,21.847762]]],[[[110.405127,20.678245],[110.437772,20.677685],[110.414366,20.710157],[110.405127,20.678245]]],[[[110.644727,20.935584],[110.584365,20.948998],[110.548641,20.908752],[110.562807,20.861224],[110.611467,20.860106],[110.646575,20.917137],[110.644727,20.935584]]],[[[110.556648,20.32734],[110.593604,20.360447],[110.586213,20.381205],[110.556648,20.32734]]],[[[115.943037,21.097592],[115.953508,21.064088],[115.989233,21.035603],[116.040356,21.02052],[116.067457,21.04063],[116.044051,21.110434],[116.024341,21.12439],[115.965211,21.123832],[115.943037,21.097592]]],[[[115.926407,20.981411],[115.939342,20.945644],[115.970139,20.919373],[115.999088,20.922727],[116.000936,20.948439],[115.954124,20.99985],[115.926407,20.981411]]],[[[115.834632,22.722695],[115.834632,22.722143],[115.835248,22.722695],[115.834632,22.722695]]],[[[115.834632,22.723247],[115.834632,22.722695],[115.835248,22.722695],[115.834632,22.723247]]]]}},{"type":"Feature","properties":{"adcode":450000,"name":"广西壮族自治区","center":[108.320004,22.82402],"centroid":[108.7944,23.833381],"childrenNum":14,"level":"province","parent":{"adcode":100000},"subFeatureIndex":19,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.48245,26.029788],[109.473211,26.006663],[109.408537,25.967392],[109.435022,25.93349],[109.396834,25.900117],[109.359262,25.836036],[109.339552,25.83442],[109.327849,25.76168],[109.340168,25.731493],[109.296436,25.71424],[109.207125,25.740119],[109.206509,25.788087],[109.147995,25.741736],[109.13198,25.762758],[109.143683,25.795092],[109.095024,25.80533],[109.077778,25.776771],[109.048213,25.790781],[108.989698,25.778926],[108.999553,25.765453],[108.963829,25.732572],[108.940423,25.740119],[108.896076,25.71424],[108.900387,25.682423],[108.953974,25.686738],[108.953974,25.686738],[109.007561,25.734728],[109.043285,25.738502],[109.07901,25.72071],[109.075314,25.693749],[109.030966,25.629556],[109.051908,25.566949],[109.088249,25.550752],[109.024807,25.51241],[108.949046,25.557231],[108.8893,25.543193],[108.890532,25.556151],[108.826474,25.550212],[108.814772,25.526992],[108.781511,25.554531],[108.799989,25.576666],[108.783975,25.628477],[108.724844,25.634952],[108.68912,25.623081],[108.68604,25.587462],[108.660787,25.584763],[108.658323,25.550212],[108.68912,25.533473],[108.634917,25.520512],[108.6072,25.491885],[108.600425,25.432448],[108.62999,25.335666],[108.625062,25.308076],[108.589338,25.335125],[108.585642,25.365952],[108.471693,25.458928],[108.418723,25.443257],[108.400244,25.491344],[108.359592,25.513491],[108.348506,25.536173],[108.308469,25.525912],[108.280752,25.48],[108.241332,25.46217],[108.251803,25.430286],[108.192673,25.458928],[108.162492,25.444878],[108.193289,25.405421],[108.142782,25.390825],[108.152021,25.324306],[108.143398,25.269658],[108.115065,25.210112],[108.080572,25.193867],[108.001732,25.196574],[107.928435,25.155954],[107.872384,25.141327],[107.839124,25.115861],[107.762747,25.125073],[107.789233,25.15487],[107.760283,25.188451],[107.762131,25.229061],[107.741805,25.24043],[107.700537,25.194408],[107.696226,25.219858],[107.661733,25.258833],[107.659885,25.316192],[107.632168,25.310241],[107.599523,25.250714],[107.576734,25.256668],[107.512676,25.209029],[107.472024,25.213902],[107.489886,25.276693],[107.481263,25.299961],[107.432604,25.289139],[107.409198,25.347024],[107.420901,25.392987],[107.375937,25.411908],[107.358691,25.393528],[107.318039,25.401637],[107.308184,25.432988],[107.336517,25.461089],[107.263836,25.543193],[107.232423,25.556691],[107.228728,25.604733],[107.205322,25.607971],[107.185612,25.578825],[107.064272,25.559391],[107.066736,25.50917],[107.015613,25.495666],[106.996519,25.442716],[106.963874,25.437852],[106.987896,25.358922],[107.012533,25.352973],[107.013765,25.275611],[106.975577,25.232851],[106.933077,25.250714],[106.904128,25.231768],[106.888113,25.181953],[106.853005,25.186827],[106.787715,25.17112],[106.764926,25.183036],[106.732281,25.162454],[106.691013,25.179245],[106.644817,25.164621],[106.63989,25.132658],[106.590615,25.08768],[106.551195,25.082802],[106.519782,25.054072],[106.450181,25.033468],[106.442173,25.019369],[106.332536,24.988454],[106.304819,24.973807],[106.253696,24.971094],[106.215508,24.981944],[106.191486,24.95319],[106.145291,24.954275],[106.197645,24.885889],[106.206269,24.851139],[106.173008,24.760417],[106.150218,24.762591],[106.113878,24.714216],[106.047356,24.684312],[106.024566,24.633186],[105.961741,24.677786],[105.942031,24.725088],[105.863806,24.729437],[105.827466,24.702799],[105.767104,24.719109],[105.70551,24.768569],[105.617431,24.78161],[105.607576,24.803885],[105.573083,24.797366],[105.497322,24.809318],[105.493011,24.833217],[105.457286,24.87123],[105.428337,24.930941],[105.365511,24.943423],[105.334099,24.9266],[105.267577,24.929313],[105.251563,24.967296],[105.212758,24.995505],[105.178266,24.985199],[105.157324,24.958616],[105.131454,24.959701],[105.09573,24.92877],[105.096346,24.928228],[105.082179,24.915745],[105.077868,24.918459],[105.039064,24.872859],[105.026745,24.815836],[105.03352,24.787586],[104.899245,24.752809],[104.865985,24.730524],[104.841963,24.676155],[104.771746,24.659839],[104.729246,24.617953],[104.703377,24.645698],[104.628848,24.660927],[104.595587,24.709323],[104.529682,24.731611],[104.489646,24.653313],[104.520443,24.535228],[104.550008,24.518894],[104.575877,24.424661],[104.616529,24.421937],[104.63008,24.397958],[104.610986,24.377246],[104.641783,24.367979],[104.70892,24.321087],[104.721239,24.340173],[104.703377,24.419757],[104.715695,24.441552],[104.74834,24.435559],[104.765587,24.45953],[104.784681,24.443732],[104.83642,24.446456],[104.914028,24.426296],[104.930042,24.411038],[104.979933,24.412673],[105.042759,24.442097],[105.106817,24.414853],[105.111744,24.37234],[105.138846,24.376701],[105.188121,24.347261],[105.196744,24.326541],[105.164715,24.288362],[105.215222,24.214699],[105.24294,24.208695],[105.229389,24.165567],[105.182577,24.167205],[105.20044,24.105491],[105.260186,24.061236],[105.292831,24.074896],[105.273121,24.092927],[105.320548,24.116416],[105.334099,24.094566],[105.395692,24.065607],[105.406163,24.043748],[105.493011,24.016965],[105.533663,24.130071],[105.594641,24.137718],[105.628518,24.126794],[105.649459,24.032816],[105.704278,24.0667],[105.739387,24.059596],[105.765256,24.073804],[105.802212,24.051945],[105.796669,24.023524],[105.841633,24.03063],[105.859495,24.056864],[105.89214,24.040468],[105.908154,24.069432],[105.901995,24.099482],[105.919241,24.122425],[105.963589,24.110954],[105.998081,24.120786],[106.011632,24.099482],[106.04982,24.089649],[106.053516,24.051399],[106.096631,24.018058],[106.091088,23.998924],[106.128044,23.956819],[106.157609,23.891174],[106.192718,23.879135],[106.173008,23.861622],[106.192102,23.824947],[106.136667,23.795381],[106.157609,23.724175],[106.149602,23.665538],[106.120653,23.605229],[106.141595,23.569579],[106.08616,23.524043],[106.071994,23.495506],[106.039965,23.484529],[105.999929,23.447748],[105.986378,23.489469],[105.935871,23.508678],[105.913081,23.499348],[105.89214,23.52514],[105.852103,23.526786],[105.815763,23.507031],[105.805908,23.467512],[105.758481,23.459826],[105.699966,23.40162],[105.637757,23.404366],[105.694423,23.363168],[105.699966,23.327453],[105.649459,23.346136],[105.593409,23.312614],[105.560148,23.257093],[105.526272,23.234548],[105.542902,23.184495],[105.558916,23.177893],[105.574931,23.066165],[105.625438,23.064513],[105.648844,23.078828],[105.724604,23.06231],[105.74185,23.030921],[105.780039,23.022659],[105.805908,22.994565],[105.839169,22.987403],[105.879205,22.916865],[105.893987,22.936707],[105.959277,22.948832],[105.994385,22.93781],[106.019639,22.990709],[106.08616,22.996218],[106.106486,22.980792],[106.153914,22.988505],[106.206885,22.978588],[106.270326,22.907494],[106.258007,22.889852],[106.286957,22.867245],[106.366413,22.857871],[106.37134,22.878273],[106.41384,22.877171],[106.504383,22.91025],[106.525941,22.946628],[106.562282,22.923479],[106.606013,22.925684],[106.631267,22.88103],[106.657136,22.863385],[106.674998,22.891506],[106.716882,22.881582],[106.709491,22.866142],[106.774781,22.812643],[106.776012,22.813746],[106.778476,22.814298],[106.779092,22.813746],[106.779708,22.813195],[106.78094,22.813195],[106.784636,22.812643],[106.796338,22.812091],[106.801882,22.815401],[106.804346,22.816505],[106.808657,22.817608],[106.813585,22.817608],[106.838838,22.803265],[106.820976,22.768504],[106.768621,22.739254],[106.780324,22.708894],[106.756302,22.68957],[106.711955,22.575228],[106.650361,22.575228],[106.61402,22.602303],[106.585071,22.517192],[106.588151,22.472958],[106.560434,22.455813],[106.588767,22.374486],[106.562897,22.345706],[106.663296,22.33076],[106.670071,22.283144],[106.688549,22.260438],[106.7021,22.207257],[106.673151,22.182322],[106.706411,22.160707],[106.691629,22.13521],[106.71565,22.089745],[106.706411,22.021521],[106.683006,21.999882],[106.698404,21.959925],[106.73844,22.008205],[106.790179,22.004876],[106.802498,21.98157],[106.859164,21.986009],[106.926302,21.967695],[106.935541,21.933836],[106.974345,21.923288],[106.999598,21.947714],[107.05996,21.914959],[107.058729,21.887196],[107.018693,21.859427],[107.018077,21.81943],[107.093837,21.803317],[107.148656,21.758858],[107.194851,21.736624],[107.199163,21.718833],[107.242279,21.703265],[107.271844,21.727173],[107.310648,21.733844],[107.356843,21.667674],[107.363619,21.602031],[107.388256,21.594241],[107.431372,21.642088],[107.477567,21.659888],[107.500973,21.613715],[107.486806,21.59591],[107.547168,21.58645],[107.584741,21.614828],[107.603219,21.597579],[107.712856,21.616497],[107.807711,21.655438],[107.837892,21.640419],[107.863761,21.650988],[107.892095,21.622617],[107.893942,21.596466],[107.929051,21.585893],[107.958,21.534131],[108.034376,21.545821],[108.108289,21.508521],[108.193905,21.519656],[108.156332,21.55083],[108.205608,21.597579],[108.241332,21.599805],[108.249955,21.561406],[108.210535,21.505737],[108.230245,21.491259],[108.330027,21.540254],[108.397781,21.533017],[108.492635,21.554727],[108.591802,21.677129],[108.626294,21.67991],[108.658939,21.643757],[108.678033,21.659331],[108.735931,21.628181],[108.734084,21.626512],[108.745786,21.602587],[108.801837,21.626512],[108.83325,21.610933],[108.881293,21.627068],[108.937959,21.589789],[109.093792,21.579215],[109.09872,21.571424],[109.110422,21.568085],[109.138756,21.567528],[109.142451,21.511861],[109.074698,21.489589],[109.039589,21.457844],[109.046365,21.424421],[109.095024,21.419407],[109.138756,21.388762],[109.186183,21.390991],[109.245929,21.425536],[109.41716,21.438906],[109.484914,21.453388],[109.529877,21.437234],[109.540964,21.466199],[109.576689,21.493487],[109.604406,21.523553],[109.612413,21.556953],[109.654913,21.493487],[109.704188,21.462857],[109.785492,21.45673],[109.788572,21.490702],[109.754695,21.556396],[109.742992,21.616497],[109.778101,21.670455],[109.786108,21.637638],[109.839695,21.636525],[109.888354,21.652101],[109.888354,21.652101],[109.916071,21.668787],[109.940093,21.769419],[109.94502,21.84443],[109.999839,21.881643],[110.050962,21.857205],[110.101469,21.86998],[110.12857,21.902744],[110.196323,21.899968],[110.212338,21.886085],[110.212338,21.886085],[110.224041,21.882198],[110.224041,21.882198],[110.283787,21.892194],[110.290562,21.917736],[110.337374,21.887751],[110.391576,21.89386],[110.378642,21.939942],[110.378642,21.939942],[110.374946,21.967695],[110.374946,21.967695],[110.352772,21.97602],[110.359547,22.015973],[110.35154,22.097508],[110.364475,22.125785],[110.326287,22.152393],[110.34846,22.195621],[110.378026,22.164587],[110.414366,22.208365],[110.456866,22.189526],[110.505525,22.14297],[110.55788,22.196175],[110.602843,22.18343],[110.598532,22.162924],[110.629329,22.149068],[110.678604,22.172901],[110.646575,22.220554],[110.687843,22.249914],[110.725415,22.29588],[110.759292,22.274837],[110.787009,22.28259],[110.749437,22.329653],[110.74143,22.361757],[110.711249,22.369506],[110.712481,22.440879],[110.688459,22.477935],[110.74143,22.464109],[110.740198,22.498947],[110.762988,22.518298],[110.749437,22.556991],[110.778386,22.585174],[110.812263,22.576333],[110.897878,22.591805],[110.896031,22.613352],[110.950233,22.61059],[110.958856,22.636553],[110.997045,22.631582],[111.055559,22.648705],[111.089435,22.695643],[111.058023,22.729871],[111.118385,22.744773],[111.185522,22.735942],[111.218167,22.748085],[111.358601,22.889301],[111.374615,22.938361],[111.362913,22.967568],[111.403565,22.99126],[111.389398,23.005583],[111.433746,23.036428],[111.43313,23.073322],[111.402333,23.066165],[111.377695,23.082132],[111.365992,23.14488],[111.38447,23.16744],[111.388782,23.210349],[111.36476,23.240047],[111.353058,23.284582],[111.376463,23.30437],[111.363528,23.340641],[111.389398,23.375804],[111.383239,23.399423],[111.399869,23.469159],[111.428818,23.466414],[111.479941,23.532822],[111.487332,23.626615],[111.555702,23.64087],[111.615448,23.639225],[111.614832,23.65896],[111.666571,23.718696],[111.621607,23.725819],[111.627766,23.78881],[111.654868,23.833159],[111.683201,23.822758],[111.683201,23.822758],[111.722621,23.823305],[111.8107,23.80688],[111.824867,23.832612],[111.812548,23.887343],[111.845809,23.904305],[111.854432,23.947521],[111.911714,23.943693],[111.940664,23.987989],[111.92157,24.012045],[111.878454,24.109862],[111.886461,24.163929],[111.871062,24.176487],[111.877222,24.227252],[111.912946,24.221795],[111.958526,24.263813],[111.986243,24.25672],[111.990555,24.279634],[112.026279,24.294908],[112.05954,24.339628],[112.057692,24.387057],[112.025047,24.438828],[111.985011,24.467701],[112.009649,24.503103],[112.007185,24.534684],[111.972077,24.578775],[111.936968,24.595645],[111.927729,24.629378],[111.953598,24.64733],[111.939432,24.686487],[111.961606,24.721283],[112.024431,24.740308],[111.951135,24.769655],[111.929577,24.75607],[111.875374,24.756613],[111.868599,24.771829],[111.814396,24.770199],[111.783599,24.785957],[111.708455,24.788673],[111.666571,24.760961],[111.637621,24.715303],[111.641933,24.684856],[111.588962,24.690837],[111.570484,24.64461],[111.526752,24.637538],[111.499035,24.667997],[111.451608,24.665822],[111.431282,24.687574],[111.461463,24.728894],[111.479325,24.797366],[111.449144,24.857113],[111.447296,24.892947],[111.470086,24.92877],[111.434977,24.951562],[111.43313,24.979774],[111.460231,24.992793],[111.467622,25.02208],[111.416499,25.047566],[111.435593,25.093642],[111.375231,25.128324],[111.36784,25.108817],[111.321645,25.105023],[111.274833,25.151078],[111.221862,25.106649],[111.200921,25.074672],[111.139943,25.042144],[111.101754,25.035095],[111.100522,24.945593],[111.009363,24.921172],[110.968711,24.975434],[110.951465,25.04377],[110.98411,25.101772],[110.998892,25.161371],[111.112841,25.21715],[111.103602,25.285351],[111.138711,25.303748],[111.184906,25.367034],[111.210776,25.363248],[111.279145,25.42326],[111.32842,25.521592],[111.324724,25.564249],[111.343202,25.602574],[111.309942,25.645203],[111.30871,25.720171],[111.399869,25.744431],[111.442369,25.77192],[111.43313,25.84627],[111.4861,25.859196],[111.460231,25.885042],[111.383239,25.881812],[111.376463,25.906039],[111.346282,25.906577],[111.297007,25.874274],[111.29208,25.854349],[111.251428,25.864581],[111.230486,25.916267],[111.189834,25.953402],[111.235413,26.048071],[111.267442,26.058824],[111.244652,26.078177],[111.26621,26.095914],[111.258203,26.151796],[111.274833,26.183486],[111.271754,26.217316],[111.293311,26.222148],[111.277913,26.272066],[111.228022,26.261333],[111.204616,26.276359],[111.208928,26.30426],[111.090667,26.308016],[111.008132,26.336982],[111.008747,26.35897],[110.974255,26.385778],[110.94469,26.373447],[110.944074,26.326791],[110.926212,26.320354],[110.939762,26.286554],[110.836284,26.255966],[110.759292,26.248451],[110.73527,26.270993],[110.742046,26.313917],[110.721104,26.294066],[110.673676,26.317135],[110.643495,26.308552],[110.612083,26.333764],[110.584365,26.296749],[110.552952,26.283335],[110.546793,26.233421],[110.495054,26.166299],[110.477808,26.179727],[110.437772,26.153945],[110.373098,26.088927],[110.325671,25.975462],[110.257301,25.961473],[110.24991,26.010965],[110.181541,26.060437],[110.168606,26.028713],[110.100853,26.020108],[110.065128,26.050221],[110.100853,26.132455],[110.099005,26.168985],[110.03002,26.166299],[109.970274,26.195301],[109.904368,26.135679],[109.898825,26.095377],[109.864332,26.027637],[109.814441,26.041081],[109.782412,25.996981],[109.806434,25.973848],[109.826144,25.911422],[109.811361,25.877504],[109.779333,25.866196],[109.768246,25.890427],[109.685094,25.880197],[109.67955,25.921649],[109.693717,25.959321],[109.710963,25.954478],[109.730057,25.989988],[109.649369,26.016882],[109.635203,26.047533],[109.588391,26.019571],[109.560058,26.021184],[109.513247,25.998056],[109.48245,26.029788]]],[[[105.096346,24.928228],[105.09573,24.92877],[105.077868,24.918459],[105.082179,24.915745],[105.096346,24.928228]]],[[[109.088249,21.014934],[109.11227,21.02499],[109.117814,21.017727],[109.144299,21.041189],[109.138756,21.067439],[109.09256,21.057386],[109.088865,21.031134],[109.088249,21.014934]]]]}},{"type":"Feature","properties":{"adcode":460000,"name":"海南省","center":[110.33119,20.031971],"centroid":[109.754859,19.189767],"childrenNum":19,"level":"province","parent":{"adcode":100000},"subFeatureIndex":20,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[110.106396,20.026812],[110.042339,19.991384],[109.997375,19.980136],[109.965346,19.993634],[109.898825,19.994196],[109.855093,19.984073],[109.814441,19.993072],[109.76147,19.981261],[109.712195,20.017253],[109.657993,20.01163],[109.585312,19.98801],[109.526797,19.943573],[109.498464,19.873236],[109.411001,19.895184],[109.349407,19.898561],[109.300748,19.917693],[109.25948,19.898561],[109.255784,19.867045],[109.231147,19.863105],[109.159082,19.79048],[109.169553,19.736411],[109.147379,19.704863],[109.093792,19.68965],[109.048829,19.619764],[108.993394,19.587065],[108.92872,19.524468],[108.855424,19.469182],[108.806148,19.450561],[108.765496,19.400894],[108.694047,19.387346],[108.644772,19.349518],[108.609048,19.276661],[108.591186,19.141592],[108.598577,19.055633],[108.630606,19.003017],[108.637997,18.924346],[108.595497,18.872256],[108.593033,18.809386],[108.65278,18.740258],[108.663866,18.67337],[108.641077,18.565614],[108.644772,18.486738],[108.68912,18.447571],[108.776583,18.441894],[108.881293,18.416344],[108.905315,18.389087],[108.944735,18.314107],[109.006329,18.323198],[109.108575,18.323766],[109.138756,18.268081],[109.17448,18.260125],[109.287813,18.264671],[109.355566,18.215221],[109.441182,18.199303],[109.467051,18.173718],[109.527413,18.169169],[109.584696,18.143579],[109.661688,18.175424],[109.726362,18.177698],[109.749767,18.193618],[109.785492,18.339672],[109.919767,18.375457],[110.022629,18.360121],[110.070672,18.376025],[110.090382,18.399309],[110.116867,18.506602],[110.214186,18.578662],[110.246215,18.609859],[110.329366,18.642185],[110.367555,18.631977],[110.499366,18.651824],[110.499366,18.751592],[110.578206,18.784458],[110.590525,18.838841],[110.585597,18.88075],[110.619474,19.152334],[110.676756,19.286264],[110.706321,19.320153],[110.729727,19.378878],[110.787009,19.399765],[110.844292,19.449996],[110.888023,19.518827],[110.920668,19.552668],[111.008747,19.60398],[111.061718,19.612436],[111.071573,19.628784],[111.043856,19.763448],[111.013675,19.850159],[110.966248,20.018377],[110.940994,20.028499],[110.871393,20.01163],[110.808567,20.035808],[110.778386,20.068415],[110.744509,20.074036],[110.717408,20.148778],[110.687843,20.163947],[110.655814,20.134169],[110.562191,20.110006],[110.526467,20.07516],[110.495054,20.077408],[110.387265,20.113378],[110.318279,20.108882],[110.28933,20.056047],[110.243135,20.077408],[110.144585,20.074598],[110.106396,20.026812]]],[[[112.208597,3.876129],[112.241858,3.845677],[112.280046,3.86777],[112.260336,3.917925],[112.219068,3.908969],[112.208597,3.876129]]],[[[113.266165,8.125929],[113.311129,8.177469],[113.343157,8.193463],[113.288955,8.119412],[113.349933,8.172137],[113.386273,8.238479],[113.386273,8.289412],[113.354244,8.304217],[113.353628,8.237887],[113.293882,8.176284],[113.266165,8.125929]]],[[[111.99733,3.848065],[112.015192,3.823583],[112.064467,3.830152],[112.073707,3.865979],[112.03367,3.892251],[111.99733,3.848065]]],[[[111.463311,17.077491],[111.536607,17.104949],[111.4861,17.058039],[111.559397,17.087788],[111.542151,17.11982],[111.452224,17.092936],[111.463311,17.077491]]],[[[117.708319,15.182712],[117.712631,15.118592],[117.726798,15.105303],[117.827812,15.111659],[117.72495,15.131302],[117.720638,15.195418],[117.74466,15.217941],[117.784696,15.16885],[117.838899,15.15903],[117.782848,15.187333],[117.748355,15.230068],[117.715095,15.222561],[117.708319,15.182712]]],[[[112.241858,3.942404],[112.292365,3.946583],[112.288053,3.97345],[112.254177,3.97942],[112.241858,3.942404]]],[[[111.734324,16.19732],[111.779903,16.19732],[111.81686,16.224329],[111.813164,16.261676],[111.782367,16.273741],[111.716462,16.249036],[111.789758,16.250186],[111.790374,16.220307],[111.734324,16.19732]]],[[[111.649324,16.255931],[111.577875,16.208239],[111.56802,16.162834],[111.611136,16.156511],[111.690592,16.211112],[111.606825,16.177779],[111.598817,16.198469],[111.681353,16.262251],[111.649324,16.255931]]],[[[113.896887,7.607204],[113.919677,7.566865],[113.98743,7.536014],[114.058879,7.537794],[114.157429,7.561525],[114.289856,7.617288],[114.368696,7.638642],[114.407501,7.683126],[114.419819,7.765557],[114.464167,7.814771],[114.540543,7.862201],[114.555326,7.891249],[114.540543,7.945783],[114.511594,7.966527],[114.47279,7.968898],[114.414892,7.952895],[114.268298,7.870501],[114.211632,7.786904],[114.095219,7.721082],[114.029314,7.670078],[113.921524,7.639235],[113.896887,7.607204]]],[[[113.976959,8.872888],[114.013299,8.836817],[114.035473,8.783591],[114.060111,8.816119],[114.041017,8.843913],[113.989894,8.878801],[113.976959,8.872888]]],[[[113.956017,8.840365],[113.975111,8.793054],[114.012068,8.798376],[113.977575,8.841548],[113.956017,8.840365]]],[[[111.97454,16.323715],[112.002258,16.306484],[112.07617,16.323715],[112.074938,16.349558],[112.047221,16.360469],[112.002874,16.350707],[111.97454,16.323715]]],[[[111.739251,16.452898],[111.766969,16.470116],[111.786679,16.520039],[111.759577,16.545857],[111.765737,16.495366],[111.739251,16.452898]]],[[[112.216604,8.866383],[112.206133,8.88767],[112.180264,8.862244],[112.216604,8.866383]]],[[[113.792177,7.373422],[113.828518,7.362145],[113.829134,7.383511],[113.792177,7.373422]]],[[[114.194386,8.764664],[114.201161,8.727991],[114.248588,8.724442],[114.222103,8.784773],[114.194386,8.764664]]],[[[112.232619,16.996239],[112.207981,16.987081],[112.222764,16.960751],[112.292981,16.96762],[112.266496,16.993949],[112.232619,16.996239]]],[[[114.689601,10.345648],[114.702536,10.312677],[114.725941,10.319154],[114.747499,10.37214],[114.717318,10.380381],[114.689601,10.345648]]],[[[115.837712,9.709775],[115.861117,9.694438],[115.867277,9.650191],[115.901153,9.67084],[115.925791,9.781734],[115.901153,9.795888],[115.870972,9.778785],[115.837712,9.709775]]],[[[114.617536,9.965688],[114.642173,9.917351],[114.672355,9.927963],[114.685905,9.979245],[114.617536,9.965688]]],[[[113.769387,7.636862],[113.773699,7.601865],[113.814967,7.603051],[113.831597,7.644573],[113.769387,7.636862]]],[[[109.463972,7.344339],[109.463972,7.315254],[109.513247,7.320002],[109.571761,7.373422],[109.654297,7.479648],[109.709115,7.511095],[109.791651,7.524742],[109.938861,7.504569],[109.948716,7.522962],[109.904984,7.55144],[109.816289,7.572797],[109.72205,7.575763],[109.653065,7.559745],[109.536037,7.448792],[109.463972,7.344339]]],[[[116.273181,8.879392],[116.294123,8.858105],[116.332311,8.901269],[116.305826,8.917233],[116.273181,8.879392]]],[[[112.476531,16.001247],[112.570154,16.011027],[112.612037,16.039212],[112.588016,16.070844],[112.462364,16.043813],[112.448814,16.005274],[112.476531,16.001247]]],[[[112.537509,8.846278],[112.57077,8.815527],[112.639755,8.818484],[112.598487,8.859288],[112.537509,8.846278]]],[[[114.469095,10.836261],[114.475254,10.814512],[114.513442,10.848605],[114.565181,10.836261],[114.593514,10.856245],[114.587355,10.909138],[114.55471,10.900911],[114.469095,10.836261]]],[[[112.409393,16.294996],[112.383524,16.265698],[112.411241,16.2634],[112.475915,16.288677],[112.531349,16.285805],[112.536893,16.312228],[112.509176,16.317397],[112.409393,16.294996]]],[[[116.48876,10.395686],[116.461658,10.34918],[116.467202,10.309144],[116.511549,10.297957],[116.566368,10.304434],[116.644592,10.335051],[116.637817,10.365076],[116.514629,10.34918],[116.542346,10.41982],[116.526332,10.426883],[116.48876,10.395686]]],[[[112.349031,16.912088],[112.360734,16.925257],[112.334249,16.962469],[112.30222,16.963041],[112.349031,16.912088]]],[[[111.500267,16.45175],[111.49534,16.4374],[111.545847,16.43453],[111.538455,16.461507],[111.500267,16.45175]]],[[[115.500177,9.897897],[115.54822,9.869007],[115.585177,9.896128],[115.581481,9.917351],[115.518039,9.933857],[115.500177,9.897897]]],[[[114.669891,8.210048],[114.691449,8.18517],[114.74134,8.189316],[114.726557,8.21064],[114.669891,8.210048]]],[[[114.507899,8.120004],[114.530073,8.103415],[114.595978,8.120596],[114.624311,8.149626],[114.595978,8.15792],[114.507899,8.120004]]],[[[115.16757,8.386523],[115.18112,8.345668],[115.235939,8.321982],[115.285214,8.314876],[115.315395,8.356326],[115.299381,8.370537],[115.202678,8.395403],[115.16757,8.386523]]],[[[113.895039,8.00505],[113.904894,7.963564],[113.9708,7.944597],[113.969568,7.974825],[113.940003,8.018088],[113.895039,8.00505]]],[[[115.436119,9.393447],[115.450286,9.345028],[115.469996,9.3592],[115.456445,9.417064],[115.436119,9.393447]]],[[[116.457347,9.174326],[116.477057,9.137103],[116.500462,9.164282],[116.457347,9.174326]]],[[[113.638192,8.976942],[113.654823,8.962163],[113.730583,9.004133],[113.719496,9.020092],[113.644968,8.989355],[113.638192,8.976942]]],[[[114.696992,11.004322],[114.710543,11.001972],[114.793079,11.07657],[114.799854,11.10476],[114.766593,11.110045],[114.710543,11.039567],[114.696992,11.004322]]],[[[114.62,11.432264],[114.652644,11.436957],[114.661884,11.522584],[114.621232,11.518479],[114.62,11.432264]]],[[[114.910723,10.863298],[114.931049,10.841551],[114.959998,10.902087],[114.934129,10.902674],[114.910723,10.863298]]],[[[111.572948,16.470116],[111.578491,16.447158],[111.614216,16.44027],[111.592658,16.490775],[111.572948,16.470116]]],[[[113.939387,8.875253],[113.912285,8.888853],[113.893807,8.862836],[113.916597,8.837999],[113.939387,8.875253]]],[[[109.936397,7.848566],[109.936397,7.823665],[109.988136,7.8124],[110.050346,7.846194],[110.082991,7.896584],[110.078063,7.949339],[110.0331,7.944597],[109.953027,7.888878],[109.936397,7.848566]]],[[[116.727128,11.501473],[116.765316,11.430504],[116.772092,11.445755],[116.738215,11.514961],[116.727128,11.501473]]],[[[111.690592,16.587731],[111.724469,16.560198],[111.717078,16.59404],[111.690592,16.587731]]],[[[112.507328,16.466098],[112.586784,16.525777],[112.575081,16.537251],[112.499321,16.493645],[112.507328,16.466098]]],[[[111.761425,16.061642],[111.791606,16.028859],[111.828563,16.049565],[111.829795,16.070844],[111.761425,16.061642]]],[[[113.845764,10.018733],[113.865474,10.00341],[113.872249,10.123029],[113.856851,10.12185],[113.845764,10.018733]]],[[[114.791847,8.160882],[114.777064,8.114079],[114.812173,8.110524],[114.818332,8.141332],[114.791847,8.160882]]],[[[116.557129,9.745167],[116.566368,9.718623],[116.593469,9.723932],[116.557129,9.745167]]],[[[115.28275,10.191951],[115.288294,10.172513],[115.333257,10.200198],[115.28891,10.211388],[115.28275,10.191951]]],[[[116.832454,10.476908],[116.855243,10.468669],[116.868794,10.495739],[116.832454,10.476908]]],[[[114.703151,16.170307],[114.816484,16.198469],[114.802934,16.215135],[114.704383,16.199044],[114.703151,16.170307]]],[[[115.97753,9.321997],[115.926407,9.311366],[115.943037,9.269433],[115.976298,9.268252],[115.999088,9.293649],[115.97753,9.321997]]],[[[113.660366,9.231039],[113.676997,9.202683],[113.697323,9.225722],[113.660366,9.231039]]],[[[114.665579,7.590001],[114.671739,7.563898],[114.72163,7.59178],[114.703767,7.614915],[114.665579,7.590001]]],[[[114.493116,10.717504],[114.513442,10.722208],[114.562717,10.778064],[114.539312,10.793349],[114.493116,10.717504]]],[[[117.770529,10.773361],[117.798862,10.753371],[117.835819,10.803931],[117.831507,10.838612],[117.801942,10.839788],[117.775457,10.809222],[117.770529,10.773361]]],[[[114.242429,10.242014],[114.263371,10.239658],[114.326197,10.284414],[114.312646,10.300901],[114.265219,10.275581],[114.242429,10.242014]]],[[[114.688985,11.469217],[114.722246,11.429331],[114.737644,11.463938],[114.720398,11.49209],[114.688985,11.469217]]],[[[116.638433,10.503977],[116.653215,10.491031],[116.70865,10.492797],[116.699411,10.517511],[116.638433,10.503977]]],[[[110.459946,8.116449],[110.471032,8.072012],[110.554184,8.093935],[110.599764,8.156735],[110.568351,8.17273],[110.461793,8.128298],[110.459946,8.116449]]],[[[111.463311,8.52504],[111.497187,8.523857],[111.509506,8.550489],[111.463311,8.52504]]],[[[115.258113,8.509652],[115.271048,8.477098],[115.296301,8.510836],[115.258113,8.509652]]],[[[113.221817,8.073789],[113.235984,8.068456],[113.283411,8.111117],[113.269861,8.120004],[113.221817,8.073789]]],[[[114.074893,10.929118],[114.064422,10.904437],[114.110002,10.918541],[114.096451,10.947921],[114.074893,10.929118]]],[[[117.258068,10.320331],[117.299336,10.313855],[117.299952,10.343293],[117.274698,10.358011],[117.258068,10.320331]]],[[[114.212864,16.040937],[114.31203,16.034611],[114.306487,16.057616],[114.268914,16.059342],[114.212864,16.040937]]],[[[110.609003,8.010976],[110.642879,7.989049],[110.641648,8.031125],[110.622553,8.041199],[110.609003,8.010976]]],[[[115.509416,8.490712],[115.521735,8.460523],[115.55438,8.461115],[115.569162,8.49012],[115.558691,8.523265],[115.514344,8.519122],[115.509416,8.490712]]],[[[111.539071,7.54432],[111.542767,7.524742],[111.583419,7.543134],[111.612368,7.592374],[111.566788,7.606017],[111.539071,7.54432]]],[[[111.657947,8.672974],[111.665955,8.622683],[111.717694,8.6499],[111.697368,8.67889],[111.657947,8.672974]]],[[[110.460561,7.799948],[110.487663,7.783346],[110.511684,7.805878],[110.485199,7.827815],[110.460561,7.799948]]],[[[112.345952,8.926101],[112.392763,8.919598],[112.384756,8.946793],[112.345952,8.926101]]],[[[116.469665,9.810041],[116.47952,9.785272],[116.50847,9.79117],[116.490607,9.821246],[116.469665,9.810041]]],[[[111.925265,8.070827],[111.949287,8.05068],[111.994866,8.047125],[112.018888,8.065494],[112.013344,8.093342],[111.95483,8.106377],[111.925265,8.070827]]],[[[114.457392,15.599305],[114.466631,15.576823],[114.491884,15.59354],[114.457392,15.599305]]],[[[114.985252,11.078332],[115.013585,11.063062],[115.021592,11.085967],[114.985252,11.078332]]],[[[114.10569,16.004124],[114.110618,15.978235],[114.132176,16.007575],[114.10569,16.004124]]],[[[116.045283,10.095338],[116.067457,10.065876],[116.09579,10.09357],[116.070537,10.12892],[116.045283,10.095338]]],[[[117.266691,10.69163],[117.348611,10.672811],[117.404661,10.671047],[117.418212,10.702803],[117.369553,10.7422],[117.293176,10.735144],[117.266691,10.69163]]],[[[114.854057,7.244611],[114.819564,7.192957],[114.869455,7.198895],[114.854057,7.244611]]],[[[112.823305,8.910729],[112.859645,8.889444],[112.873196,8.908364],[112.823305,8.910729]]],[[[111.670266,7.651098],[111.707223,7.648725],[111.749722,7.703884],[111.726317,7.729977],[111.691208,7.711593],[111.670266,7.651098]]],[[[112.207981,8.835634],[112.235699,8.827355],[112.241242,8.852783],[112.207981,8.835634]]],[[[112.527654,5.79444],[112.531965,5.766455],[112.562762,5.75931],[112.562146,5.820637],[112.527654,5.79444]]],[[[114.599058,8.846278],[114.645869,8.844504],[114.68221,8.881166],[114.665579,8.900087],[114.61692,8.881166],[114.599058,8.846278]]],[[[114.868223,7.983715],[114.907643,7.951117],[114.914419,8.00742],[114.883006,8.011569],[114.868223,7.983715]]],[[[112.945261,8.410204],[112.985297,8.429149],[112.949572,8.432701],[112.945261,8.410204]]],[[[113.600004,6.961929],[113.580294,6.920344],[113.62341,6.942325],[113.600004,6.961929]]],[[[116.695099,16.345538],[116.708034,16.299591],[116.738831,16.303612],[116.747454,16.360469],[116.717889,16.373676],[116.695099,16.345538]]],[[[117.347995,10.090624],[117.354154,10.06293],[117.385567,10.063519],[117.373864,10.106532],[117.347995,10.090624]]],[[[112.993304,19.472003],[113.038883,19.480466],[113.048123,19.506417],[113.029028,19.52898],[112.993304,19.52616],[112.980369,19.496263],[112.993304,19.472003]]],[[[114.448153,16.034035],[114.485109,16.034611],[114.521449,16.056466],[114.465399,16.067393],[114.448153,16.034035]]],[[[113.832213,19.158552],[113.874097,19.151203],[113.914749,19.172119],[113.920293,19.223551],[113.875945,19.237113],[113.80696,19.222986],[113.799568,19.19925],[113.832213,19.158552]]],[[[112.650842,5.106941],[112.655769,5.055676],[112.682871,5.048522],[112.719211,5.075944],[112.678559,5.121247],[112.650842,5.106941]]],[[[111.638853,7.907254],[111.665339,7.887099],[111.712766,7.887099],[111.713382,7.927408],[111.651788,7.932743],[111.638853,7.907254]]],[[[112.244322,8.874662],[112.281278,8.855148],[112.288669,8.885896],[112.244322,8.874662]]],[[[112.89229,7.844416],[112.929862,7.827815],[112.93171,7.867537],[112.89229,7.844416]]],[[[112.583088,5.56159],[112.606494,5.51751],[112.614501,5.465683],[112.642834,5.489512],[112.616349,5.568737],[112.583088,5.56159]]],[[[112.523342,5.656289],[112.5449,5.616386],[112.565842,5.63068],[112.56153,5.677133],[112.528886,5.687257],[112.523342,5.656289]]],[[[115.361591,13.948985],[115.397315,13.92517],[115.438583,13.943757],[115.423185,13.977443],[115.377605,13.968732],[115.361591,13.948985]]],[[[113.596924,10.240836],[113.617866,10.22199],[113.638192,10.243192],[113.596924,10.240836]]],[[[113.860546,15.477068],[113.893807,15.463802],[113.890112,15.490909],[113.860546,15.477068]]],[[[112.907072,4.993079],[112.943413,4.991887],[112.952652,5.047926],[112.910768,5.038388],[112.907072,4.993079]]],[[[112.557219,5.109326],[112.568922,5.071771],[112.610806,5.091443],[112.601567,5.120055],[112.557219,5.109326]]],[[[112.350263,5.621747],[112.385988,5.615791],[112.385372,5.643187],[112.350263,5.621747]]],[[[112.226459,16.759147],[112.254177,16.751698],[112.262184,16.778057],[112.211061,16.795819],[112.226459,16.759147]]],[[[112.233851,15.69612],[112.25972,15.734718],[112.240626,15.741055],[112.20367,15.71398],[112.233851,15.69612]]],[[[112.612037,5.367973],[112.640371,5.347715],[112.685334,5.371548],[112.690878,5.406702],[112.62374,5.401935],[112.612037,5.367973]]],[[[112.472219,5.73966],[112.496857,5.736683],[112.498089,5.775387],[112.472219,5.73966]]],[[[113.217506,6.306249],[113.230441,6.285429],[113.243991,6.325878],[113.217506,6.306249]]],[[[116.152457,9.579384],[116.189413,9.565221],[116.187565,9.595317],[116.152457,9.579384]]],[[[114.948911,7.508722],[114.960614,7.484988],[115.012353,7.484988],[115.013585,7.525928],[114.948911,7.508722]]],[[[111.553854,7.807656],[111.585267,7.771487],[111.619759,7.840265],[111.603745,7.861608],[111.553854,7.807656]]],[[[113.938771,15.8355],[113.973263,15.805558],[113.9708,15.83953],[113.938771,15.8355]]],[[[114.926122,16.036911],[114.895325,16.036336],[114.910723,16.001823],[114.926122,16.036911]]],[[[116.749302,9.056736],[116.699411,9.049053],[116.70865,9.024229],[116.740679,9.028367],[116.749302,9.056736]]],[[[112.64653,16.385733],[112.681639,16.400661],[112.660081,16.426494],[112.64653,16.385733]]],[[[111.203384,19.92557],[111.203384,19.925007],[111.204,19.92557],[111.204,19.926132],[111.203384,19.92557]]],[[[115.758256,10.461018],[115.776118,10.434534],[115.801987,10.463372],[115.758256,10.461018]]],[[[117.21372,10.735144],[117.187235,10.741612],[117.206945,10.707507],[117.21372,10.735144]]],[[[112.671784,16.331755],[112.701349,16.331755],[112.677943,16.35932],[112.671784,16.331755]]],[[[115.782277,10.541046],[115.795212,10.499858],[115.805067,10.524571],[115.782277,10.541046]]],[[[112.512255,9.544566],[112.50856,9.525679],[112.568922,9.516826],[112.567074,9.554008],[112.512255,9.544566]]],[[[114.610145,15.649447],[114.581195,15.625242],[114.610761,15.615444],[114.610145,15.649447]]],[[[117.299336,11.077745],[117.264227,11.063062],[117.284553,11.02547],[117.304263,11.027232],[117.299336,11.077745]]],[[[117.691073,11.048965],[117.653501,11.046029],[117.655965,11.024882],[117.690457,11.016658],[117.691073,11.048965]]],[[[114.166668,9.38459],[114.175291,9.342075],[114.195617,9.350933],[114.194386,9.391676],[114.166668,9.38459]]],[[[114.714854,9.736909],[114.693296,9.741038],[114.680978,9.707416],[114.704999,9.700337],[114.714854,9.736909]]],[[[112.554139,5.97839],[112.553523,5.942676],[112.575697,5.971247],[112.554139,5.97839]]]]}},{"type":"Feature","properties":{"adcode":500000,"name":"重庆市","center":[106.504962,29.533155],"centroid":[107.8839,30.067297],"childrenNum":38,"level":"province","parent":{"adcode":100000},"subFeatureIndex":21,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.37442,28.525742],[106.403369,28.569901],[106.477282,28.530474],[106.504999,28.544669],[106.466811,28.586193],[106.49268,28.591448],[106.502535,28.661313],[106.528405,28.677591],[106.492064,28.742153],[106.461883,28.761041],[106.45326,28.817162],[106.474202,28.832891],[106.561666,28.756319],[106.56105,28.719062],[106.587535,28.691767],[106.6171,28.691242],[106.617716,28.66709],[106.651593,28.649235],[106.618332,28.645033],[106.63681,28.622972],[106.606629,28.593024],[106.615252,28.549401],[106.567825,28.523638],[106.564745,28.485247],[106.632499,28.503655],[106.697788,28.47683],[106.708259,28.450524],[106.747063,28.467361],[106.726121,28.51838],[106.73844,28.554657],[106.77786,28.563068],[106.756918,28.607211],[106.784636,28.626649],[106.807425,28.589346],[106.830831,28.623497],[106.866556,28.624548],[106.889345,28.695966],[106.86594,28.690192],[106.824056,28.756319],[106.845614,28.780975],[106.872099,28.777304],[106.923222,28.809821],[106.951555,28.766812],[106.988512,28.776254],[106.983584,28.851239],[107.019308,28.861722],[107.016229,28.882685],[107.14188,28.887925],[107.206554,28.868535],[107.194851,28.838134],[107.227496,28.836037],[107.210866,28.817686],[107.219489,28.772582],[107.24659,28.76209],[107.261373,28.792514],[107.327894,28.810869],[107.339597,28.845997],[107.383945,28.848618],[107.41351,28.911502],[107.441227,28.943977],[107.412894,28.960211],[107.396879,28.993718],[107.364235,29.00942],[107.395647,29.041341],[107.369778,29.091558],[107.412278,29.094696],[107.427676,29.128682],[107.408582,29.138091],[107.401807,29.184603],[107.441227,29.203934],[107.486806,29.174153],[107.570574,29.218037],[107.589052,29.150113],[107.605683,29.164747],[107.659885,29.162656],[107.700537,29.141228],[107.749197,29.199754],[107.810791,29.139137],[107.784921,29.048143],[107.823725,29.034016],[107.810175,28.984295],[107.867457,28.960211],[107.882855,29.00628],[107.908725,29.007327],[107.925971,29.032446],[108.026369,29.039772],[108.070717,29.086328],[108.150173,29.053375],[108.193289,29.072207],[108.256115,29.040295],[108.277673,29.091558],[108.306622,29.079006],[108.297999,29.045527],[108.319556,28.961258],[108.345426,28.943453],[108.357745,28.893165],[108.346658,28.859625],[108.352817,28.815589],[108.386078,28.803003],[108.385462,28.772058],[108.347274,28.736381],[108.332491,28.679166],[108.439049,28.634003],[108.501258,28.626649],[108.50249,28.63768],[108.575787,28.659738],[108.636149,28.621396],[108.604736,28.590922],[108.610896,28.539412],[108.573939,28.531],[108.586874,28.463678],[108.609664,28.43579],[108.609048,28.407368],[108.576403,28.38631],[108.580099,28.343128],[108.611512,28.324691],[108.667562,28.334173],[108.656475,28.359981],[108.697127,28.401051],[108.688504,28.422106],[108.640461,28.456838],[108.657091,28.47683],[108.700207,28.48209],[108.709446,28.501026],[108.746402,28.45105],[108.780279,28.42579],[108.759953,28.389995],[108.783359,28.380518],[108.761801,28.304143],[108.726692,28.282011],[108.738395,28.228241],[108.772888,28.212949],[108.821547,28.245113],[108.855424,28.199764],[108.89546,28.219804],[108.923793,28.217167],[108.929952,28.19027],[109.005713,28.162837],[109.026655,28.220331],[109.086401,28.184467],[109.101799,28.202401],[109.081473,28.247749],[109.117198,28.277795],[109.152306,28.349975],[109.153538,28.417369],[109.191726,28.471043],[109.23361,28.474726],[109.274262,28.494714],[109.273646,28.53836],[109.319842,28.579886],[109.306907,28.62087],[109.252089,28.606685],[109.235458,28.61982],[109.201581,28.597753],[109.192958,28.636104],[109.271183,28.671816],[109.252704,28.691767],[109.294588,28.722211],[109.2989,28.7474],[109.241002,28.776779],[109.246545,28.80143],[109.235458,28.882161],[109.261328,28.952356],[109.292741,28.987436],[109.294588,29.015177],[109.319842,29.042388],[109.312451,29.066453],[109.240386,29.086328],[109.232378,29.119271],[109.215748,29.145409],[109.162777,29.180946],[109.139372,29.168927],[109.110422,29.21647],[109.141835,29.270256],[109.106727,29.288526],[109.11227,29.361053],[109.060531,29.403292],[109.034662,29.360531],[108.999553,29.36366],[108.983539,29.332883],[108.919481,29.3261],[108.934264,29.399643],[108.927488,29.435612],[108.884373,29.440824],[108.866511,29.470527],[108.888684,29.502305],[108.878213,29.539279],[108.913322,29.574679],[108.901003,29.604863],[108.870206,29.596537],[108.888068,29.628795],[108.844337,29.658443],[108.781511,29.635558],[108.797525,29.660003],[108.786438,29.691721],[108.752562,29.649082],[108.690968,29.689642],[108.676801,29.749412],[108.680497,29.800319],[108.658939,29.854833],[108.601041,29.863656],[108.556077,29.818493],[108.52528,29.770713],[108.548686,29.749412],[108.504954,29.728626],[108.504338,29.707836],[108.460606,29.741098],[108.437201,29.741098],[108.442744,29.778505],[108.422418,29.772791],[108.424266,29.815897],[108.371295,29.841337],[108.433505,29.880262],[108.467998,29.864175],[108.516041,29.885451],[108.517889,29.9394],[108.536367,29.983472],[108.532055,30.051873],[108.513577,30.057571],[108.546222,30.104178],[108.56778,30.157491],[108.551766,30.1637],[108.581947,30.255759],[108.54499,30.269716],[108.524048,30.309506],[108.501258,30.314673],[108.460606,30.35961],[108.431041,30.354446],[108.402092,30.376649],[108.430425,30.416397],[108.411331,30.438586],[108.42673,30.492233],[108.472925,30.487076],[108.512961,30.501515],[108.556077,30.487592],[108.56778,30.468508],[108.6497,30.53915],[108.642925,30.578831],[108.688504,30.58759],[108.698975,30.54482],[108.743939,30.494812],[108.789518,30.513374],[108.808612,30.491202],[108.838793,30.503062],[108.893612,30.565434],[108.971836,30.627766],[109.006329,30.626736],[109.042669,30.655571],[109.071002,30.640125],[109.111654,30.646303],[109.106111,30.61077],[109.105495,30.585529],[109.102415,30.580377],[109.101183,30.579346],[109.106111,30.570587],[109.103647,30.565949],[109.143683,30.521108],[109.191726,30.545851],[109.191726,30.545851],[109.245313,30.580892],[109.299516,30.630341],[109.314298,30.599953],[109.36111,30.551004],[109.337088,30.521623],[109.35495,30.487076],[109.418392,30.559766],[109.435638,30.595832],[109.535421,30.664837],[109.543428,30.63961],[109.574225,30.646818],[109.590855,30.69366],[109.625348,30.702923],[109.661072,30.738936],[109.656761,30.760538],[109.701724,30.783677],[109.780564,30.848437],[109.828608,30.864364],[109.894513,30.899803],[109.943788,30.878746],[110.008462,30.883369],[110.019549,30.829425],[110.048498,30.800642],[110.082375,30.799614],[110.151976,30.911613],[110.153824,30.953708],[110.172918,30.978853],[110.140889,30.987062],[110.140273,31.030661],[110.120563,31.0322],[110.119947,31.088592],[110.147048,31.116776],[110.180309,31.121899],[110.200019,31.158779],[110.180309,31.179774],[110.155671,31.279564],[110.161831,31.314338],[110.118715,31.409899],[110.054042,31.410921],[110.036795,31.436966],[109.98752,31.474744],[109.94502,31.47066],[109.969658,31.508935],[109.894513,31.519139],[109.837847,31.555354],[109.727594,31.548214],[109.745456,31.598182],[109.76455,31.602769],[109.737449,31.628761],[109.731289,31.700582],[109.683246,31.719929],[109.622268,31.711783],[109.585928,31.726546],[109.549587,31.73011],[109.502776,31.716365],[109.446109,31.722983],[109.381436,31.705165],[109.281654,31.716874],[109.282885,31.743343],[109.253936,31.759628],[109.279806,31.776418],[109.27611,31.79931],[109.195422,31.817618],[109.191111,31.85575],[109.123357,31.892851],[109.085785,31.929428],[108.986619,31.980205],[108.902235,31.984774],[108.837561,32.039072],[108.78767,32.04871],[108.75133,32.076098],[108.734084,32.106519],[108.676801,32.10297],[108.585026,32.17189],[108.543758,32.177969],[108.509882,32.201266],[108.480317,32.182527],[108.399013,32.194176],[108.370063,32.172397],[108.379918,32.154158],[108.379918,32.154158],[108.379303,32.153652],[108.379303,32.153652],[108.399628,32.147065],[108.452599,32.090296],[108.42981,32.061391],[108.372527,32.077112],[108.344194,32.067477],[108.362056,32.035521],[108.329411,32.020299],[108.370063,31.988835],[108.351585,31.971575],[108.307238,31.997463],[108.259194,31.967006],[108.343578,31.860834],[108.386078,31.854226],[108.391005,31.829822],[108.429194,31.809482],[108.455063,31.814059],[108.462454,31.780488],[108.535135,31.757592],[108.50557,31.734182],[108.514809,31.693963],[108.546838,31.665442],[108.519121,31.665952],[108.468614,31.636404],[108.442744,31.633856],[108.390389,31.591555],[108.386078,31.544134],[108.339266,31.539033],[108.344194,31.512506],[108.254883,31.49873],[108.233941,31.506894],[108.191441,31.492096],[108.193289,31.467598],[108.224086,31.464024],[108.216079,31.41041],[108.153869,31.371073],[108.185898,31.336831],[108.095354,31.268311],[108.038688,31.252964],[108.031297,31.217144],[108.07626,31.231985],[108.089811,31.204859],[108.025753,31.116263],[108.009123,31.109602],[108.026985,31.061938],[108.060246,31.052197],[108.00358,31.025533],[107.983254,30.983983],[107.942602,30.989114],[107.948145,30.918802],[107.994956,30.908533],[107.956152,30.882855],[107.851443,30.792931],[107.788001,30.81966],[107.763979,30.817091],[107.760899,30.862823],[107.739957,30.884396],[107.693146,30.875665],[107.645103,30.821202],[107.57735,30.847924],[107.515756,30.854603],[107.483111,30.838675],[107.498509,30.809381],[107.454162,30.771851],[107.454162,30.771851],[107.424597,30.74048],[107.458473,30.704981],[107.477567,30.664837],[107.516987,30.644759],[107.485575,30.598408],[107.427676,30.547397],[107.443075,30.53348],[107.408582,30.521623],[107.368546,30.468508],[107.338981,30.386459],[107.288474,30.337402],[107.257677,30.267131],[107.221337,30.213878],[107.103076,30.090198],[107.080286,30.094341],[107.084598,30.063786],[107.058113,30.043066],[107.055649,30.040476],[107.054417,30.040994],[107.053801,30.043584],[107.02054,30.036849],[106.981736,30.08502],[106.976193,30.083467],[106.94478,30.037367],[106.913367,30.025451],[106.862244,30.033223],[106.83699,30.049801],[106.825904,30.03115],[106.825904,30.03115],[106.785252,30.01716],[106.732281,30.027005],[106.724274,30.058607],[106.699636,30.074145],[106.700252,30.111944],[106.672535,30.122297],[106.677462,30.156974],[106.631883,30.186464],[106.611557,30.235596],[106.612173,30.235596],[106.611557,30.235596],[106.612173,30.235596],[106.612173,30.235596],[106.612789,30.235596],[106.612789,30.235596],[106.642354,30.246454],[106.611557,30.292455],[106.560434,30.31519],[106.545035,30.296589],[106.49884,30.295556],[106.43971,30.308473],[106.428623,30.254725],[106.401521,30.242318],[106.349167,30.24542],[106.334384,30.225772],[106.306667,30.238182],[106.296196,30.205603],[106.264167,30.20974],[106.260471,30.19681],[106.232754,30.185947],[106.180399,30.233011],[106.168696,30.303823],[106.132356,30.323972],[106.132972,30.30279],[106.07261,30.333786],[106.031958,30.373551],[105.943263,30.372002],[105.900763,30.405042],[105.84656,30.410203],[105.825618,30.436006],[105.792357,30.427234],[105.760329,30.384393],[105.754785,30.342567],[105.714749,30.322939],[105.720292,30.252657],[105.720292,30.252657],[105.670401,30.254208],[105.624822,30.275918],[105.619894,30.234045],[105.662394,30.210258],[105.642684,30.186464],[105.56138,30.183878],[105.550909,30.179222],[105.536127,30.152834],[105.596489,30.159043],[105.574315,30.130579],[105.580474,30.129544],[105.582938,30.127474],[105.582938,30.12385],[105.642068,30.101072],[105.638988,30.076216],[105.676561,30.06793],[105.687032,30.038922],[105.719677,30.042548],[105.753553,30.018196],[105.723372,29.975177],[105.730763,29.95755],[105.70243,29.924879],[105.717213,29.893753],[105.738771,29.891159],[105.707974,29.840818],[105.610655,29.837184],[105.582938,29.819013],[105.574931,29.744216],[105.529351,29.707836],[105.481924,29.718232],[105.476996,29.674564],[105.419714,29.688082],[105.38091,29.628275],[105.347649,29.621512],[105.332867,29.592374],[105.296526,29.571035],[105.305149,29.53199],[105.337794,29.459064],[105.334099,29.441345],[105.387069,29.455416],[105.387069,29.455416],[105.399388,29.43874],[105.372903,29.421018],[105.426489,29.419454],[105.441888,29.400686],[105.418482,29.352185],[105.42033,29.31149],[105.465294,29.322969],[105.459134,29.288526],[105.513337,29.283306],[105.521344,29.264513],[105.557684,29.278608],[105.631597,29.280174],[105.647612,29.253027],[105.695039,29.287482],[105.712285,29.219082],[105.703662,29.176766],[105.728916,29.134432],[105.752321,29.129727],[105.728916,29.1062],[105.757865,29.069068],[105.74185,29.039249],[105.766488,29.013607],[105.762176,28.9911],[105.801596,28.958116],[105.797285,28.936121],[105.830546,28.944501],[105.852719,28.927217],[105.910002,28.920407],[105.969132,28.965971],[106.001161,28.973824],[106.040581,28.955498],[106.049204,28.906263],[106.070762,28.919884],[106.101559,28.898928],[106.14837,28.901548],[106.173008,28.920407],[106.206885,28.904691],[106.264783,28.845997],[106.245689,28.817686],[106.267863,28.779402],[106.274022,28.739004],[106.305435,28.704365],[106.304203,28.64976],[106.346703,28.583565],[106.33192,28.55308],[106.37442,28.525742]]],[[[109.105495,30.585529],[109.106111,30.61077],[109.09256,30.578831],[109.09872,30.579346],[109.101183,30.579346],[109.102415,30.580377],[109.105495,30.585529]]],[[[105.582938,30.12385],[105.582938,30.127474],[105.580474,30.129544],[105.574315,30.130579],[105.582938,30.12385]]],[[[109.09872,30.579346],[109.09256,30.578831],[109.103647,30.565949],[109.106111,30.570587],[109.09872,30.579346]]],[[[107.058113,30.043066],[107.053801,30.043584],[107.054417,30.040994],[107.055649,30.040476],[107.058113,30.043066]]]]}},{"type":"Feature","properties":{"adcode":510000,"name":"四川省","center":[104.065735,30.659462],"centroid":[102.693453,30.674545],"childrenNum":21,"level":"province","parent":{"adcode":100000},"subFeatureIndex":22,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[101.167885,27.198311],[101.170349,27.175421],[101.145095,27.103523],[101.157414,27.094999],[101.136472,27.023584],[101.228863,26.981992],[101.227015,26.959057],[101.264587,26.955323],[101.267667,26.903034],[101.311399,26.903034],[101.365602,26.883819],[101.399478,26.841642],[101.358826,26.771669],[101.387159,26.753501],[101.389623,26.723036],[101.435819,26.740675],[101.458608,26.731054],[101.445674,26.77434],[101.466,26.786629],[101.513427,26.768463],[101.453065,26.692563],[101.481398,26.673313],[101.461072,26.640687],[101.461688,26.606447],[101.402558,26.604841],[101.395783,26.591998],[101.422884,26.53151],[101.458608,26.49563],[101.506652,26.499915],[101.530057,26.467239],[101.565782,26.454381],[101.637847,26.388995],[101.635383,26.357361],[101.660636,26.346635],[101.64031,26.318745],[101.597195,26.303187],[101.586108,26.279579],[101.630455,26.224832],[101.690202,26.241473],[101.737013,26.219463],[101.773353,26.168448],[101.807846,26.156093],[101.796759,26.114723],[101.839875,26.082477],[101.835563,26.04592],[101.857737,26.049146],[101.899621,26.099139],[101.929186,26.105588],[101.954439,26.084627],[102.020961,26.096451],[102.080091,26.065275],[102.107808,26.068501],[102.152156,26.10935],[102.174946,26.146961],[102.242699,26.190468],[102.245163,26.212483],[102.349257,26.244694],[102.392372,26.296749],[102.440416,26.300505],[102.542046,26.338591],[102.570995,26.362723],[102.629509,26.336982],[102.638748,26.307479],[102.60056,26.250598],[102.659074,26.221611],[102.709581,26.210336],[102.739762,26.268846],[102.785342,26.298895],[102.833385,26.306406],[102.878964,26.364332],[102.893131,26.338591],[102.975667,26.340736],[102.998457,26.371839],[102.988602,26.413117],[102.989833,26.482775],[103.030485,26.485989],[103.052659,26.514374],[103.052659,26.555602],[103.035413,26.556673],[103.026174,26.664221],[103.005232,26.679195],[103.008312,26.710741],[102.983674,26.76686],[102.991681,26.775409],[102.966428,26.837904],[102.949181,26.843244],[102.896211,26.91264],[102.894979,27.001724],[102.870957,27.026782],[102.913457,27.133886],[102.904218,27.227584],[102.883276,27.258444],[102.883892,27.299401],[102.899906,27.317481],[102.941174,27.405711],[102.989833,27.367983],[103.055739,27.40943],[103.080992,27.396679],[103.141355,27.420586],[103.144434,27.450331],[103.19063,27.523596],[103.232514,27.56976],[103.2861,27.561802],[103.29226,27.632872],[103.349542,27.678459],[103.369868,27.708664],[103.393274,27.709194],[103.461027,27.779638],[103.487512,27.794992],[103.509686,27.843687],[103.502295,27.910343],[103.55465,27.978543],[103.515846,27.965329],[103.486281,28.033495],[103.459179,28.021345],[103.430846,28.044587],[103.470266,28.122204],[103.533092,28.168641],[103.573128,28.230877],[103.643961,28.260401],[103.692004,28.232459],[103.701859,28.198709],[103.740048,28.23615],[103.770845,28.233514],[103.828743,28.285173],[103.877402,28.316262],[103.85338,28.356822],[103.860156,28.383677],[103.828743,28.44],[103.829975,28.459995],[103.781931,28.525216],[103.802873,28.563068],[103.838598,28.587244],[103.833054,28.605109],[103.850917,28.66709],[103.887873,28.61982],[103.910047,28.631377],[103.953779,28.600906],[104.05972,28.6277],[104.09606,28.603533],[104.117618,28.634003],[104.170589,28.642932],[104.230951,28.635579],[104.252509,28.660788],[104.277147,28.631902],[104.314719,28.615617],[104.372617,28.649235],[104.425588,28.626649],[104.417581,28.598279],[104.375697,28.5946],[104.355987,28.555183],[104.323342,28.540989],[104.260516,28.536257],[104.267908,28.499448],[104.254357,28.403683],[104.282074,28.343128],[104.314103,28.306778],[104.343052,28.334173],[104.384936,28.329959],[104.392943,28.291497],[104.420045,28.269889],[104.44961,28.269889],[104.462544,28.241422],[104.442834,28.211366],[104.402182,28.202928],[104.406494,28.173389],[104.444682,28.16231],[104.448994,28.113758],[104.40095,28.091586],[104.373233,28.051454],[104.304248,28.050926],[104.30856,28.036136],[104.362762,28.012891],[104.40095,27.952114],[104.44961,27.927794],[104.508124,27.878078],[104.52537,27.889187],[104.573413,27.840512],[104.607906,27.857974],[104.63316,27.850567],[104.676275,27.880723],[104.743413,27.901881],[104.761891,27.884426],[104.796999,27.901352],[104.842579,27.900294],[104.888158,27.914574],[104.918339,27.938897],[104.903557,27.962158],[104.975006,28.020816],[104.980549,28.063073],[105.002107,28.064129],[105.061853,28.096866],[105.119752,28.07205],[105.168411,28.071522],[105.186889,28.054623],[105.167795,28.021345],[105.186273,27.995454],[105.218302,27.990698],[105.247867,28.009193],[105.270657,27.99704],[105.284823,27.935725],[105.233084,27.895534],[105.25957,27.827811],[105.313157,27.810874],[105.273736,27.794992],[105.293447,27.770637],[105.290367,27.712373],[105.308229,27.704955],[105.353809,27.748924],[105.44004,27.775402],[105.508409,27.769048],[105.560148,27.71979],[105.605112,27.715552],[105.62359,27.666269],[105.664242,27.683759],[105.720292,27.683759],[105.722756,27.706015],[105.76772,27.7182],[105.848408,27.707074],[105.868118,27.732504],[105.922937,27.746805],[105.92848,27.729855],[105.985146,27.749983],[106.023335,27.746805],[106.063987,27.776991],[106.120653,27.779638],[106.193334,27.75422],[106.242609,27.767459],[106.306667,27.808756],[106.337464,27.859033],[106.325145,27.898708],[106.304819,27.899237],[106.307899,27.936782],[106.328225,27.952643],[106.286341,28.007079],[106.246305,28.011835],[106.266631,28.066769],[106.206885,28.134343],[106.145291,28.162837],[106.093552,28.162837],[105.975907,28.107952],[105.943878,28.143314],[105.895219,28.119565],[105.860727,28.159672],[105.889676,28.237732],[105.848408,28.255656],[105.824386,28.306251],[105.78743,28.335753],[105.76464,28.308359],[105.76464,28.308359],[105.737539,28.30309],[105.730147,28.271997],[105.68888,28.284119],[105.639604,28.324164],[105.655003,28.362615],[105.643916,28.431053],[105.612503,28.438947],[105.62359,28.517854],[105.68272,28.534154],[105.693191,28.58882],[105.712901,28.586718],[105.74493,28.616668],[105.757249,28.590397],[105.78435,28.610889],[105.808372,28.599855],[105.884748,28.595126],[105.889676,28.670765],[105.937719,28.686517],[105.966668,28.761041],[106.001161,28.743727],[106.030726,28.694917],[106.085544,28.681792],[106.103407,28.636104],[106.14837,28.642932],[106.17116,28.629275],[106.184711,28.58882],[106.254928,28.539412],[106.2925,28.537309],[106.304819,28.505233],[106.349167,28.473674],[106.379348,28.479986],[106.37442,28.525742],[106.33192,28.55308],[106.346703,28.583565],[106.304203,28.64976],[106.305435,28.704365],[106.274022,28.739004],[106.267863,28.779402],[106.245689,28.817686],[106.264783,28.845997],[106.206885,28.904691],[106.173008,28.920407],[106.14837,28.901548],[106.101559,28.898928],[106.070762,28.919884],[106.049204,28.906263],[106.040581,28.955498],[106.001161,28.973824],[105.969132,28.965971],[105.910002,28.920407],[105.852719,28.927217],[105.830546,28.944501],[105.797285,28.936121],[105.801596,28.958116],[105.762176,28.9911],[105.766488,29.013607],[105.74185,29.039249],[105.757865,29.069068],[105.728916,29.1062],[105.752321,29.129727],[105.728916,29.134432],[105.703662,29.176766],[105.712285,29.219082],[105.695039,29.287482],[105.647612,29.253027],[105.631597,29.280174],[105.557684,29.278608],[105.521344,29.264513],[105.513337,29.283306],[105.459134,29.288526],[105.465294,29.322969],[105.42033,29.31149],[105.418482,29.352185],[105.441888,29.400686],[105.426489,29.419454],[105.372903,29.421018],[105.399388,29.43874],[105.387069,29.455416],[105.387069,29.455416],[105.334099,29.441345],[105.337794,29.459064],[105.305149,29.53199],[105.296526,29.571035],[105.332867,29.592374],[105.347649,29.621512],[105.38091,29.628275],[105.419714,29.688082],[105.476996,29.674564],[105.481924,29.718232],[105.529351,29.707836],[105.574931,29.744216],[105.582938,29.819013],[105.610655,29.837184],[105.707974,29.840818],[105.738771,29.891159],[105.717213,29.893753],[105.70243,29.924879],[105.730763,29.95755],[105.723372,29.975177],[105.753553,30.018196],[105.719677,30.042548],[105.687032,30.038922],[105.676561,30.06793],[105.638988,30.076216],[105.642068,30.101072],[105.582938,30.12385],[105.574315,30.130579],[105.596489,30.159043],[105.536127,30.152834],[105.550909,30.179222],[105.556453,30.187499],[105.558916,30.18543],[105.56138,30.183878],[105.642684,30.186464],[105.662394,30.210258],[105.619894,30.234045],[105.624822,30.275918],[105.670401,30.254208],[105.720292,30.252657],[105.720292,30.252657],[105.714749,30.322939],[105.754785,30.342567],[105.760329,30.384393],[105.792357,30.427234],[105.825618,30.436006],[105.84656,30.410203],[105.900763,30.405042],[105.943263,30.372002],[106.031958,30.373551],[106.07261,30.333786],[106.132972,30.30279],[106.132356,30.323972],[106.168696,30.303823],[106.180399,30.233011],[106.232754,30.185947],[106.260471,30.19681],[106.260471,30.204051],[106.260471,30.207672],[106.264167,30.20974],[106.296196,30.205603],[106.306667,30.238182],[106.334384,30.225772],[106.349167,30.24542],[106.401521,30.242318],[106.428623,30.254725],[106.43971,30.308473],[106.49884,30.295556],[106.545035,30.296589],[106.560434,30.31519],[106.611557,30.292455],[106.642354,30.246454],[106.612789,30.235596],[106.612789,30.235596],[106.612173,30.235596],[106.612173,30.235596],[106.611557,30.235596],[106.612173,30.235596],[106.611557,30.235596],[106.631883,30.186464],[106.677462,30.156974],[106.672535,30.122297],[106.700252,30.111944],[106.699636,30.074145],[106.724274,30.058607],[106.732281,30.027005],[106.785252,30.01716],[106.825904,30.03115],[106.825904,30.03115],[106.83699,30.049801],[106.862244,30.033223],[106.913367,30.025451],[106.94478,30.037367],[106.976193,30.083467],[106.975577,30.088127],[106.976809,30.088127],[106.977425,30.087609],[106.978656,30.087609],[106.979888,30.088127],[106.980504,30.087609],[106.981736,30.08502],[107.02054,30.036849],[107.053801,30.043584],[107.058113,30.043066],[107.084598,30.063786],[107.080286,30.094341],[107.103076,30.090198],[107.221337,30.213878],[107.257677,30.267131],[107.288474,30.337402],[107.338981,30.386459],[107.368546,30.468508],[107.408582,30.521623],[107.443075,30.53348],[107.427676,30.547397],[107.485575,30.598408],[107.516987,30.644759],[107.477567,30.664837],[107.458473,30.704981],[107.424597,30.74048],[107.454162,30.771851],[107.454162,30.771851],[107.498509,30.809381],[107.483111,30.838675],[107.515756,30.854603],[107.57735,30.847924],[107.645103,30.821202],[107.693146,30.875665],[107.739957,30.884396],[107.760899,30.862823],[107.763979,30.817091],[107.788001,30.81966],[107.851443,30.792931],[107.956152,30.882855],[107.994956,30.908533],[107.948145,30.918802],[107.942602,30.989114],[107.983254,30.983983],[108.00358,31.025533],[108.060246,31.052197],[108.026985,31.061938],[108.009123,31.109602],[108.025753,31.116263],[108.089811,31.204859],[108.07626,31.231985],[108.031297,31.217144],[108.038688,31.252964],[108.095354,31.268311],[108.185898,31.336831],[108.153869,31.371073],[108.216079,31.41041],[108.224086,31.464024],[108.193289,31.467598],[108.191441,31.492096],[108.233941,31.506894],[108.254883,31.49873],[108.344194,31.512506],[108.339266,31.539033],[108.386078,31.544134],[108.390389,31.591555],[108.442744,31.633856],[108.468614,31.636404],[108.519121,31.665952],[108.546838,31.665442],[108.514809,31.693963],[108.50557,31.734182],[108.535135,31.757592],[108.462454,31.780488],[108.455063,31.814059],[108.429194,31.809482],[108.391005,31.829822],[108.386078,31.854226],[108.343578,31.860834],[108.259194,31.967006],[108.307238,31.997463],[108.351585,31.971575],[108.370063,31.988835],[108.329411,32.020299],[108.362056,32.035521],[108.344194,32.067477],[108.372527,32.077112],[108.42981,32.061391],[108.452599,32.090296],[108.399628,32.147065],[108.379303,32.153652],[108.379303,32.153652],[108.379918,32.154158],[108.379918,32.154158],[108.370063,32.172397],[108.399013,32.194176],[108.480317,32.182527],[108.509882,32.201266],[108.507418,32.245819],[108.469846,32.270618],[108.414411,32.252399],[108.389773,32.263533],[108.310933,32.232152],[108.240716,32.274666],[108.179738,32.221521],[108.156948,32.239239],[108.143398,32.219495],[108.086731,32.233165],[108.018362,32.2119],[108.024521,32.177462],[107.979558,32.146051],[107.924739,32.197215],[107.890247,32.214432],[107.864377,32.201266],[107.812022,32.247844],[107.753508,32.338399],[107.707929,32.331826],[107.680827,32.397035],[107.648183,32.413709],[107.598291,32.411688],[107.527458,32.38238],[107.489886,32.425328],[107.456625,32.41775],[107.460937,32.453612],[107.438763,32.465732],[107.436299,32.529835],[107.382097,32.54043],[107.356843,32.506622],[107.313727,32.489965],[107.287858,32.457147],[107.263836,32.403099],[107.212097,32.428864],[107.189924,32.468256],[107.127098,32.482393],[107.080286,32.542448],[107.108004,32.600951],[107.098765,32.649338],[107.05996,32.686115],[107.066736,32.708779],[107.012533,32.721367],[106.912751,32.704247],[106.903512,32.721367],[106.854853,32.724388],[106.82344,32.705254],[106.793259,32.712807],[106.783404,32.735967],[106.733513,32.739491],[106.670071,32.694678],[106.626955,32.682086],[106.585687,32.68813],[106.517934,32.668485],[106.498224,32.649338],[106.451412,32.65992],[106.421231,32.616579],[106.389203,32.62666],[106.347935,32.671003],[106.301123,32.680071],[106.267863,32.673522],[106.254928,32.693671],[106.17424,32.6977],[106.120037,32.719856],[106.071378,32.758114],[106.07261,32.76365],[106.093552,32.82402],[106.071378,32.828546],[106.044277,32.864747],[106.011632,32.829552],[105.969132,32.849162],[105.93156,32.826032],[105.893371,32.838603],[105.849024,32.817985],[105.825002,32.824523],[105.822538,32.770192],[105.779423,32.750061],[105.768952,32.767676],[105.719061,32.759624],[105.677793,32.726402],[105.596489,32.69921],[105.585402,32.728919],[105.563844,32.724891],[105.555221,32.794343],[105.534279,32.790822],[105.524424,32.847654],[105.495475,32.873292],[105.49917,32.911986],[105.467757,32.930071],[105.414171,32.922034],[105.408011,32.885857],[105.38091,32.876307],[105.396308,32.85067],[105.396308,32.85067],[105.427721,32.784281],[105.454207,32.767173],[105.448663,32.732946],[105.368591,32.712807],[105.347033,32.68259],[105.297758,32.656897],[105.263265,32.652362],[105.219534,32.666469],[105.215222,32.63674],[105.185041,32.617587],[105.111128,32.593893],[105.0791,32.637244],[105.026745,32.650346],[104.925115,32.607505],[104.881999,32.600951],[104.845659,32.653873],[104.820405,32.662943],[104.795768,32.643292],[104.739717,32.635228],[104.696601,32.673522],[104.643015,32.661935],[104.592508,32.695685],[104.582653,32.722374],[104.526602,32.728416],[104.51182,32.753585],[104.458849,32.748551],[104.363994,32.822511],[104.294393,32.835586],[104.277147,32.90244],[104.288234,32.942628],[104.345516,32.940117],[104.378161,32.953174],[104.383704,32.994343],[104.426204,33.010906],[104.391711,33.035493],[104.337509,33.038002],[104.378161,33.109214],[104.351059,33.158828],[104.32827,33.223934],[104.323958,33.26898],[104.303632,33.304499],[104.333813,33.315502],[104.386168,33.298497],[104.420045,33.327004],[104.373849,33.345004],[104.292545,33.336505],[104.272219,33.391486],[104.22048,33.404477],[104.213089,33.446932],[104.180444,33.472895],[104.155191,33.542755],[104.176749,33.5996],[104.103452,33.663381],[104.046169,33.686291],[103.980264,33.670852],[103.861388,33.682307],[103.778236,33.658898],[103.690772,33.69376],[103.667983,33.685793],[103.645809,33.708697],[103.593454,33.716164],[103.563889,33.699735],[103.552186,33.671351],[103.520157,33.678323],[103.545411,33.719649],[103.518309,33.807213],[103.464723,33.80224],[103.434542,33.752993],[103.35447,33.743539],[103.278709,33.774387],[103.284868,33.80224],[103.24976,33.814175],[103.228202,33.79478],[103.165376,33.805721],[103.153673,33.819147],[103.181391,33.900649],[103.16476,33.929454],[103.1315,33.931937],[103.120413,33.953286],[103.157369,33.998944],[103.147514,34.036644],[103.119797,34.03466],[103.129652,34.065899],[103.178927,34.079779],[103.121644,34.112487],[103.124108,34.162022],[103.100087,34.181828],[103.052043,34.195194],[103.005848,34.184798],[102.973203,34.205588],[102.977515,34.252595],[102.949181,34.292159],[102.911609,34.312923],[102.85987,34.301058],[102.856791,34.270895],[102.798276,34.272874],[102.779798,34.236764],[102.728675,34.235774],[102.694799,34.198659],[102.664002,34.192719],[102.651067,34.165983],[102.598712,34.14766],[102.655994,34.113478],[102.649219,34.080275],[102.615958,34.099604],[102.511865,34.086222],[102.471213,34.072839],[102.437336,34.087214],[102.406539,34.033172],[102.392372,33.971651],[102.345561,33.969666],[102.315996,33.993983],[102.287047,33.977607],[102.248858,33.98654],[102.226069,33.963214],[102.16817,33.983066],[102.136142,33.965199],[102.25317,33.861399],[102.261177,33.821136],[102.243315,33.786823],[102.296286,33.783838],[102.324619,33.754486],[102.284583,33.719151],[102.342481,33.725622],[102.31538,33.665374],[102.346793,33.605582],[102.440416,33.574673],[102.477988,33.543254],[102.446575,33.53228],[102.461358,33.501345],[102.462589,33.449429],[102.447807,33.454922],[102.392988,33.404477],[102.368967,33.41247],[102.310452,33.397982],[102.296286,33.413969],[102.258098,33.409472],[102.218062,33.349503],[102.192192,33.337005],[102.217446,33.247961],[102.200815,33.223434],[102.160163,33.242956],[102.144765,33.273983],[102.117047,33.288492],[102.08933,33.227439],[102.08933,33.204908],[102.054838,33.189884],[101.99386,33.1999],[101.935345,33.186879],[101.921795,33.153817],[101.887302,33.135778],[101.865744,33.103198],[101.825708,33.119239],[101.841723,33.184876],[101.83002,33.213921],[101.770274,33.248962],[101.769658,33.26898],[101.877447,33.314502],[101.887302,33.383991],[101.915635,33.425957],[101.946432,33.442937],[101.906396,33.48188],[101.907012,33.539264],[101.884222,33.578163],[101.844186,33.602591],[101.831252,33.554726],[101.783208,33.556721],[101.769042,33.538765],[101.777665,33.533776],[101.769042,33.45592],[101.695745,33.433948],[101.663716,33.383991],[101.64955,33.323004],[101.677883,33.297497],[101.735781,33.279987],[101.709912,33.21292],[101.653861,33.162835],[101.661252,33.135778],[101.633535,33.101193],[101.557775,33.167344],[101.515275,33.192889],[101.487557,33.226938],[101.403174,33.225436],[101.386543,33.207412],[101.393935,33.157826],[101.381616,33.153316],[101.297232,33.262475],[101.217776,33.256469],[101.182668,33.26948],[101.156798,33.236449],[101.124769,33.221431],[101.11553,33.194893],[101.169733,33.10019],[101.143863,33.086151],[101.146327,33.056563],[101.184515,33.041514],[101.171581,33.009902],[101.183899,32.984304],[101.129081,32.989324],[101.134624,32.95217],[101.124153,32.909976],[101.178356,32.892892],[101.223935,32.855698],[101.237486,32.825026],[101.22332,32.725898],[101.157414,32.661431],[101.124769,32.658408],[101.077342,32.68259],[101.030531,32.660424],[100.99727,32.627668],[100.956618,32.621116],[100.93198,32.600447],[100.887633,32.632708],[100.834046,32.648835],[100.77122,32.643795],[100.690532,32.678056],[100.71209,32.645307],[100.710242,32.610026],[100.673286,32.628172],[100.661583,32.616075],[100.657887,32.546484],[100.645568,32.526303],[100.603069,32.553547],[100.54517,32.569687],[100.516837,32.632204],[100.470026,32.694678],[100.450932,32.694678],[100.420135,32.73194],[100.378251,32.698707],[100.399193,32.756101],[100.339447,32.719353],[100.258759,32.742511],[100.231041,32.696189],[100.229809,32.650346],[100.208252,32.606497],[100.189773,32.630692],[100.109701,32.640268],[100.088143,32.668988],[100.139266,32.724388],[100.117093,32.802392],[100.123252,32.837095],[100.064738,32.895907],[100.029629,32.895907],[100.038252,32.929066],[99.956332,32.948152],[99.947709,32.986814],[99.877492,33.045527],[99.877492,32.993339],[99.851007,32.941623],[99.805427,32.940619],[99.788181,32.956689],[99.764159,32.924545],[99.791877,32.883344],[99.766623,32.826032],[99.760464,32.769689],[99.717964,32.732443],[99.700718,32.76667],[99.646515,32.774721],[99.640355,32.790822],[99.589233,32.789312],[99.558436,32.839106],[99.45311,32.862233],[99.376118,32.899927],[99.353944,32.885354],[99.268944,32.878318],[99.24677,32.924043],[99.235067,32.982296],[99.214741,32.991332],[99.196263,33.035493],[99.124814,33.046028],[99.090322,33.079131],[99.024416,33.094675],[99.014561,33.081137],[98.971445,33.098185],[98.967134,33.115229],[98.92217,33.118738],[98.858728,33.150811],[98.804526,33.219428],[98.802062,33.270481],[98.759562,33.276985],[98.779888,33.370497],[98.736157,33.406975],[98.742316,33.477887],[98.725686,33.503341],[98.678258,33.522801],[98.648077,33.548741],[98.652389,33.595114],[98.622824,33.610067],[98.61728,33.637476],[98.6567,33.64744],[98.610505,33.682805],[98.582788,33.731595],[98.539672,33.746525],[98.51873,33.77389],[98.494092,33.768915],[98.492861,33.796272],[98.463295,33.848477],[98.434962,33.843009],[98.407245,33.867362],[98.425723,33.913066],[98.415252,33.956761],[98.440506,33.981577],[98.428187,34.029204],[98.396774,34.053008],[98.399854,34.085231],[98.344419,34.094648],[98.258188,34.083249],[98.206449,34.08424],[98.158405,34.107037],[98.098043,34.122892],[98.028442,34.122892],[97.95453,34.190739],[97.898479,34.209548],[97.8104,34.207568],[97.796849,34.199154],[97.796849,34.199154],[97.789458,34.182818],[97.789458,34.182818],[97.766668,34.158555],[97.665654,34.126855],[97.70261,34.036644],[97.652719,33.998448],[97.660111,33.956264],[97.629314,33.919523],[97.601596,33.929951],[97.52214,33.903133],[97.503662,33.912073],[97.460546,33.887236],[97.395257,33.889224],[97.398336,33.848477],[97.371851,33.842015],[97.373083,33.817655],[97.406344,33.795278],[97.422974,33.754984],[97.418046,33.728608],[97.435293,33.682307],[97.415583,33.605582],[97.450075,33.582152],[97.523372,33.577166],[97.511669,33.520805],[97.552321,33.465906],[97.625618,33.461412],[97.674893,33.432949],[97.754349,33.409972],[97.676125,33.341004],[97.622538,33.337005],[97.607756,33.263976],[97.548626,33.203907],[97.487648,33.168346],[97.498119,33.137783],[97.487032,33.107209],[97.517213,33.097683],[97.542466,33.035995],[97.499966,33.011408],[97.523988,32.988822],[97.438372,32.976271],[97.375547,32.956689],[97.347829,32.895907],[97.376163,32.886359],[97.392793,32.828546],[97.386018,32.77925],[97.429133,32.714318],[97.42359,32.70475],[97.48272,32.654377],[97.535075,32.638252],[97.543698,32.62162],[97.607756,32.614059],[97.616995,32.586329],[97.700763,32.53488],[97.730944,32.527312],[97.795617,32.521257],[97.80732,32.50006],[97.863986,32.499051],[97.880001,32.486431],[97.940363,32.482393],[98.079565,32.415224],[98.107283,32.391476],[98.125145,32.401077],[98.218768,32.342444],[98.208913,32.318171],[98.23047,32.262521],[98.218768,32.234683],[98.260035,32.208862],[98.303151,32.121726],[98.357354,32.087253],[98.404781,32.045159],[98.402933,32.026896],[98.434962,32.007613],[98.432498,31.922825],[98.399238,31.895899],[98.426339,31.856767],[98.414636,31.832365],[98.461448,31.800327],[98.508875,31.751995],[98.516882,31.717383],[98.545831,31.717383],[98.553839,31.660349],[98.619128,31.591555],[98.651157,31.57881],[98.696736,31.538523],[98.714599,31.508935],[98.844562,31.429817],[98.84333,31.416028],[98.887062,31.37465],[98.810685,31.306668],[98.805758,31.279052],[98.773113,31.249382],[98.691809,31.333253],[98.643766,31.338876],[98.616048,31.3036],[98.60373,31.257568],[98.62344,31.221238],[98.602498,31.192062],[98.675179,31.15417],[98.710287,31.1178],[98.712135,31.082954],[98.736772,31.049121],[98.774961,31.031174],[98.806374,30.995783],[98.797135,30.948575],[98.774345,30.908019],[98.797135,30.87926],[98.850105,30.849465],[98.904924,30.782649],[98.957895,30.765166],[98.963438,30.728134],[98.907388,30.698292],[98.92217,30.609225],[98.939417,30.598923],[98.926482,30.569556],[98.932025,30.521623],[98.965286,30.449937],[98.967134,30.33482],[98.986844,30.280569],[98.970829,30.260928],[98.993003,30.215429],[98.9813,30.182843],[98.989308,30.151799],[99.044742,30.079842],[99.036735,30.053945],[99.055213,29.958587],[99.068148,29.931621],[99.0238,29.846009],[99.018873,29.792009],[98.992387,29.677163],[99.014561,29.607464],[99.052133,29.563748],[99.044742,29.520013],[99.066916,29.421018],[99.058909,29.417368],[99.075539,29.316186],[99.114343,29.243628],[99.113727,29.221171],[99.105104,29.162656],[99.118039,29.100971],[99.113727,29.07273],[99.132206,28.94869],[99.123582,28.890021],[99.103872,28.841803],[99.114343,28.765763],[99.134053,28.734806],[99.126662,28.698066],[99.147604,28.640831],[99.183944,28.58882],[99.170394,28.566221],[99.191952,28.494714],[99.187024,28.44],[99.16485,28.425264],[99.200575,28.365774],[99.229524,28.350502],[99.237531,28.317842],[99.28927,28.286227],[99.306516,28.227714],[99.374886,28.18183],[99.412458,28.295186],[99.392748,28.318369],[99.437095,28.398419],[99.404451,28.44421],[99.426625,28.454207],[99.396444,28.491032],[99.403219,28.546246],[99.463581,28.549401],[99.466045,28.579886],[99.504233,28.619294],[99.540573,28.623497],[99.53195,28.677591],[99.553508,28.710664],[99.614486,28.740054],[99.609559,28.784122],[99.625573,28.81454],[99.676696,28.810345],[99.717964,28.846521],[99.722275,28.757369],[99.755536,28.701216],[99.79434,28.699116],[99.834992,28.660788],[99.834376,28.628225],[99.873181,28.631902],[99.875644,28.611939],[99.91876,28.599329],[99.985281,28.529422],[99.990209,28.47683],[100.073977,28.426317],[100.057346,28.368934],[100.136803,28.349975],[100.176223,28.325218],[100.147274,28.288862],[100.188541,28.252493],[100.153433,28.208202],[100.102926,28.201873],[100.091223,28.181302],[100.062274,28.193962],[100.033325,28.184467],[100.021006,28.147008],[100.05673,28.097922],[100.088759,28.029269],[100.120788,28.018703],[100.196549,27.936254],[100.170063,27.907699],[100.210715,27.87702],[100.30865,27.861149],[100.30865,27.830457],[100.28586,27.80611],[100.304954,27.788639],[100.311729,27.724028],[100.327744,27.72032],[100.350534,27.755809],[100.412127,27.816167],[100.442924,27.86644],[100.504518,27.852154],[100.511294,27.827811],[100.54517,27.809286],[100.609228,27.859033],[100.634482,27.915631],[100.681293,27.923035],[100.719481,27.858503],[100.707162,27.800816],[100.757053,27.770107],[100.775532,27.743098],[100.782307,27.691708],[100.848212,27.672099],[100.827886,27.615904],[100.854988,27.623858],[100.91227,27.521473],[100.901183,27.453517],[100.936908,27.469448],[100.95169,27.426961],[101.021907,27.332899],[101.026219,27.270679],[101.042233,27.22173],[101.071798,27.194585],[101.119226,27.208957],[101.167885,27.198311],[101.167885,27.198311]]],[[[106.264167,30.20974],[106.260471,30.207672],[106.260471,30.204051],[106.260471,30.19681],[106.264167,30.20974]]],[[[106.976809,30.088127],[106.975577,30.088127],[106.976193,30.083467],[106.981736,30.08502],[106.980504,30.087609],[106.979888,30.088127],[106.978656,30.087609],[106.977425,30.087609],[106.976809,30.088127]]],[[[105.558916,30.18543],[105.556453,30.187499],[105.550909,30.179222],[105.56138,30.183878],[105.558916,30.18543]]]]}},{"type":"Feature","properties":{"adcode":520000,"name":"贵州省","center":[106.713478,26.578343],"centroid":[106.880455,26.826368],"childrenNum":9,"level":"province","parent":{"adcode":100000},"subFeatureIndex":23,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.274262,28.494714],[109.23361,28.474726],[109.191726,28.471043],[109.153538,28.417369],[109.152306,28.349975],[109.117198,28.277795],[109.081473,28.247749],[109.101799,28.202401],[109.086401,28.184467],[109.026655,28.220331],[109.005713,28.162837],[108.929952,28.19027],[108.923793,28.217167],[108.89546,28.219804],[108.855424,28.199764],[108.821547,28.245113],[108.772888,28.212949],[108.738395,28.228241],[108.726692,28.282011],[108.761801,28.304143],[108.783359,28.380518],[108.759953,28.389995],[108.780279,28.42579],[108.746402,28.45105],[108.709446,28.501026],[108.700207,28.48209],[108.657091,28.47683],[108.640461,28.456838],[108.688504,28.422106],[108.697127,28.401051],[108.656475,28.359981],[108.667562,28.334173],[108.611512,28.324691],[108.580099,28.343128],[108.576403,28.38631],[108.609048,28.407368],[108.609664,28.43579],[108.586874,28.463678],[108.573939,28.531],[108.610896,28.539412],[108.604736,28.590922],[108.636149,28.621396],[108.575787,28.659738],[108.50249,28.63768],[108.501258,28.626649],[108.439049,28.634003],[108.332491,28.679166],[108.347274,28.736381],[108.385462,28.772058],[108.386078,28.803003],[108.352817,28.815589],[108.346658,28.859625],[108.357745,28.893165],[108.345426,28.943453],[108.319556,28.961258],[108.297999,29.045527],[108.306622,29.079006],[108.277673,29.091558],[108.256115,29.040295],[108.193289,29.072207],[108.150173,29.053375],[108.070717,29.086328],[108.026369,29.039772],[107.925971,29.032446],[107.908725,29.007327],[107.882855,29.00628],[107.867457,28.960211],[107.810175,28.984295],[107.823725,29.034016],[107.784921,29.048143],[107.810791,29.139137],[107.749197,29.199754],[107.700537,29.141228],[107.659885,29.162656],[107.605683,29.164747],[107.589052,29.150113],[107.570574,29.218037],[107.486806,29.174153],[107.441227,29.203934],[107.401807,29.184603],[107.408582,29.138091],[107.427676,29.128682],[107.412278,29.094696],[107.369778,29.091558],[107.395647,29.041341],[107.364235,29.00942],[107.396879,28.993718],[107.412894,28.960211],[107.441227,28.943977],[107.41351,28.911502],[107.383945,28.848618],[107.339597,28.845997],[107.327894,28.810869],[107.261373,28.792514],[107.24659,28.76209],[107.219489,28.772582],[107.210866,28.817686],[107.227496,28.836037],[107.194851,28.838134],[107.206554,28.868535],[107.14188,28.887925],[107.016229,28.882685],[107.019308,28.861722],[106.983584,28.851239],[106.988512,28.776254],[106.951555,28.766812],[106.923222,28.809821],[106.872099,28.777304],[106.845614,28.780975],[106.824056,28.756319],[106.86594,28.690192],[106.889345,28.695966],[106.866556,28.624548],[106.830831,28.623497],[106.807425,28.589346],[106.784636,28.626649],[106.756918,28.607211],[106.77786,28.563068],[106.73844,28.554657],[106.726121,28.51838],[106.747063,28.467361],[106.708259,28.450524],[106.697788,28.47683],[106.632499,28.503655],[106.564745,28.485247],[106.567825,28.523638],[106.615252,28.549401],[106.606629,28.593024],[106.63681,28.622972],[106.618332,28.645033],[106.651593,28.649235],[106.617716,28.66709],[106.6171,28.691242],[106.587535,28.691767],[106.56105,28.719062],[106.561666,28.756319],[106.474202,28.832891],[106.45326,28.817162],[106.461883,28.761041],[106.492064,28.742153],[106.528405,28.677591],[106.502535,28.661313],[106.49268,28.591448],[106.466811,28.586193],[106.504999,28.544669],[106.477282,28.530474],[106.403369,28.569901],[106.37442,28.525742],[106.379348,28.479986],[106.349167,28.473674],[106.304819,28.505233],[106.2925,28.537309],[106.254928,28.539412],[106.184711,28.58882],[106.17116,28.629275],[106.14837,28.642932],[106.103407,28.636104],[106.085544,28.681792],[106.030726,28.694917],[106.001161,28.743727],[105.966668,28.761041],[105.937719,28.686517],[105.889676,28.670765],[105.884748,28.595126],[105.808372,28.599855],[105.78435,28.610889],[105.757249,28.590397],[105.74493,28.616668],[105.712901,28.586718],[105.693191,28.58882],[105.68272,28.534154],[105.62359,28.517854],[105.612503,28.438947],[105.643916,28.431053],[105.655003,28.362615],[105.639604,28.324164],[105.68888,28.284119],[105.730147,28.271997],[105.737539,28.30309],[105.76464,28.308359],[105.76464,28.308359],[105.78743,28.335753],[105.824386,28.306251],[105.848408,28.255656],[105.889676,28.237732],[105.860727,28.159672],[105.895219,28.119565],[105.943878,28.143314],[105.975907,28.107952],[106.093552,28.162837],[106.145291,28.162837],[106.206885,28.134343],[106.266631,28.066769],[106.246305,28.011835],[106.286341,28.007079],[106.328225,27.952643],[106.307899,27.936782],[106.304819,27.899237],[106.325145,27.898708],[106.337464,27.859033],[106.306667,27.808756],[106.242609,27.767459],[106.193334,27.75422],[106.120653,27.779638],[106.063987,27.776991],[106.023335,27.746805],[105.985146,27.749983],[105.92848,27.729855],[105.922937,27.746805],[105.868118,27.732504],[105.848408,27.707074],[105.76772,27.7182],[105.722756,27.706015],[105.720292,27.683759],[105.664242,27.683759],[105.62359,27.666269],[105.605112,27.715552],[105.560148,27.71979],[105.508409,27.769048],[105.44004,27.775402],[105.353809,27.748924],[105.308229,27.704955],[105.29591,27.631811],[105.304533,27.611661],[105.25649,27.582491],[105.232469,27.546945],[105.260186,27.514573],[105.234316,27.489093],[105.233084,27.436522],[105.182577,27.367451],[105.184425,27.392959],[105.120984,27.418461],[105.068013,27.418461],[105.01073,27.379143],[104.913412,27.327051],[104.871528,27.290891],[104.851818,27.299401],[104.856746,27.332368],[104.824717,27.3531],[104.77113,27.317481],[104.7545,27.345658],[104.611602,27.306846],[104.570334,27.331836],[104.539537,27.327583],[104.497037,27.414743],[104.467472,27.414211],[104.363378,27.467855],[104.30856,27.407305],[104.295625,27.37436],[104.247582,27.336621],[104.248813,27.291955],[104.210625,27.297273],[104.173053,27.263232],[104.113923,27.338216],[104.084358,27.330773],[104.01722,27.383926],[104.015372,27.429086],[103.956242,27.425367],[103.932221,27.443958],[103.905119,27.38552],[103.903271,27.347785],[103.874322,27.331304],[103.865699,27.28185],[103.80041,27.26536],[103.801641,27.250464],[103.748671,27.210021],[103.696316,27.126429],[103.63349,27.12057],[103.620555,27.096598],[103.652584,27.092868],[103.659975,27.065692],[103.614396,27.079548],[103.601461,27.061962],[103.623635,27.035312],[103.623019,27.007056],[103.675374,27.051836],[103.704939,27.049171],[103.73204,27.018785],[103.753598,26.963858],[103.775156,26.951056],[103.763453,26.905702],[103.779468,26.87421],[103.722185,26.851253],[103.705555,26.794642],[103.725265,26.742812],[103.773308,26.716621],[103.759142,26.689355],[103.748671,26.623568],[103.763453,26.585041],[103.815808,26.55239],[103.819504,26.529903],[103.865699,26.512232],[103.953163,26.521336],[104.008597,26.511697],[104.067727,26.51491],[104.068343,26.573266],[104.121314,26.638012],[104.160734,26.646571],[104.222328,26.620358],[104.268524,26.617683],[104.274683,26.633733],[104.313487,26.612867],[104.353523,26.620893],[104.398487,26.686147],[104.424356,26.709137],[104.468088,26.644431],[104.459465,26.602701],[104.488414,26.579689],[104.556783,26.590393],[104.579573,26.568449],[104.57095,26.524549],[104.598667,26.520801],[104.638703,26.477954],[104.631928,26.451702],[104.665804,26.434019],[104.664572,26.397572],[104.684283,26.3772],[104.659645,26.335373],[104.592508,26.317672],[104.542616,26.253282],[104.548776,26.226979],[104.518595,26.165762],[104.52845,26.114186],[104.499501,26.070651],[104.460081,26.085702],[104.470552,26.009352],[104.438523,25.92757],[104.414501,25.909807],[104.441602,25.868889],[104.42374,25.841961],[104.397871,25.76168],[104.370769,25.730415],[104.328886,25.760602],[104.310407,25.647901],[104.332581,25.598796],[104.389248,25.595558],[104.428668,25.576126],[104.436059,25.520512],[104.418813,25.499447],[104.434827,25.472436],[104.44961,25.495126],[104.483486,25.494585],[104.524138,25.526992],[104.556783,25.524832],[104.543232,25.400556],[104.566638,25.402719],[104.615913,25.364871],[104.646094,25.356759],[104.639935,25.295632],[104.689826,25.296173],[104.736021,25.268034],[104.816094,25.262622],[104.826565,25.235558],[104.806854,25.224189],[104.822869,25.170037],[104.801927,25.163537],[104.753884,25.214443],[104.724319,25.195491],[104.732326,25.167871],[104.695369,25.122364],[104.685514,25.078466],[104.619609,25.060577],[104.684898,25.054072],[104.713232,24.996048],[104.663957,24.964584],[104.635623,24.903803],[104.586964,24.872859],[104.539537,24.813663],[104.542616,24.75607],[104.529682,24.731611],[104.595587,24.709323],[104.628848,24.660927],[104.703377,24.645698],[104.729246,24.617953],[104.771746,24.659839],[104.841963,24.676155],[104.865985,24.730524],[104.899245,24.752809],[105.03352,24.787586],[105.026745,24.815836],[105.039064,24.872859],[105.077868,24.918459],[105.09573,24.92877],[105.131454,24.959701],[105.157324,24.958616],[105.178266,24.985199],[105.212758,24.995505],[105.251563,24.967296],[105.267577,24.929313],[105.334099,24.9266],[105.365511,24.943423],[105.428337,24.930941],[105.457286,24.87123],[105.493011,24.833217],[105.497322,24.809318],[105.573083,24.797366],[105.607576,24.803885],[105.617431,24.78161],[105.70551,24.768569],[105.767104,24.719109],[105.827466,24.702799],[105.863806,24.729437],[105.942031,24.725088],[105.961741,24.677786],[106.024566,24.633186],[106.047356,24.684312],[106.113878,24.714216],[106.150218,24.762591],[106.173008,24.760417],[106.206269,24.851139],[106.197645,24.885889],[106.145291,24.954275],[106.191486,24.95319],[106.215508,24.981944],[106.253696,24.971094],[106.304819,24.973807],[106.332536,24.988454],[106.442173,25.019369],[106.450181,25.033468],[106.519782,25.054072],[106.551195,25.082802],[106.590615,25.08768],[106.63989,25.132658],[106.644817,25.164621],[106.691013,25.179245],[106.732281,25.162454],[106.764926,25.183036],[106.787715,25.17112],[106.853005,25.186827],[106.888113,25.181953],[106.904128,25.231768],[106.933077,25.250714],[106.975577,25.232851],[107.013765,25.275611],[107.012533,25.352973],[106.987896,25.358922],[106.963874,25.437852],[106.996519,25.442716],[107.015613,25.495666],[107.066736,25.50917],[107.064272,25.559391],[107.185612,25.578825],[107.205322,25.607971],[107.228728,25.604733],[107.232423,25.556691],[107.263836,25.543193],[107.336517,25.461089],[107.308184,25.432988],[107.318039,25.401637],[107.358691,25.393528],[107.375937,25.411908],[107.420901,25.392987],[107.409198,25.347024],[107.432604,25.289139],[107.481263,25.299961],[107.489886,25.276693],[107.472024,25.213902],[107.512676,25.209029],[107.576734,25.256668],[107.599523,25.250714],[107.632168,25.310241],[107.659885,25.316192],[107.661733,25.258833],[107.696226,25.219858],[107.700537,25.194408],[107.741805,25.24043],[107.762131,25.229061],[107.760283,25.188451],[107.789233,25.15487],[107.762747,25.125073],[107.839124,25.115861],[107.872384,25.141327],[107.928435,25.155954],[108.001732,25.196574],[108.080572,25.193867],[108.115065,25.210112],[108.143398,25.269658],[108.152021,25.324306],[108.142782,25.390825],[108.193289,25.405421],[108.162492,25.444878],[108.192673,25.458928],[108.251803,25.430286],[108.241332,25.46217],[108.280752,25.48],[108.308469,25.525912],[108.348506,25.536173],[108.359592,25.513491],[108.400244,25.491344],[108.418723,25.443257],[108.471693,25.458928],[108.585642,25.365952],[108.589338,25.335125],[108.625062,25.308076],[108.62999,25.335666],[108.600425,25.432448],[108.6072,25.491885],[108.634917,25.520512],[108.68912,25.533473],[108.658323,25.550212],[108.660787,25.584763],[108.68604,25.587462],[108.68912,25.623081],[108.724844,25.634952],[108.783975,25.628477],[108.799989,25.576666],[108.781511,25.554531],[108.814772,25.526992],[108.826474,25.550212],[108.890532,25.556151],[108.8893,25.543193],[108.949046,25.557231],[109.024807,25.51241],[109.088249,25.550752],[109.051908,25.566949],[109.030966,25.629556],[109.075314,25.693749],[109.07901,25.72071],[109.043285,25.738502],[109.007561,25.734728],[108.953974,25.686738],[108.953974,25.686738],[108.900387,25.682423],[108.896076,25.71424],[108.940423,25.740119],[108.963829,25.732572],[108.999553,25.765453],[108.989698,25.778926],[109.048213,25.790781],[109.077778,25.776771],[109.095024,25.80533],[109.143683,25.795092],[109.13198,25.762758],[109.147995,25.741736],[109.206509,25.788087],[109.207125,25.740119],[109.296436,25.71424],[109.340168,25.731493],[109.327849,25.76168],[109.339552,25.83442],[109.359262,25.836036],[109.396834,25.900117],[109.435022,25.93349],[109.408537,25.967392],[109.473211,26.006663],[109.48245,26.029788],[109.452885,26.055598],[109.449805,26.101826],[109.502776,26.096451],[109.513863,26.128157],[109.47629,26.148035],[109.439334,26.238789],[109.467051,26.313917],[109.442414,26.289774],[109.369733,26.277432],[109.351255,26.264016],[109.325385,26.29031],[109.285965,26.295676],[109.271183,26.327863],[109.29582,26.350389],[109.319842,26.418477],[109.38082,26.454381],[109.362342,26.472061],[109.385747,26.493487],[109.381436,26.518659],[109.407305,26.533116],[109.390675,26.598955],[109.35495,26.658873],[109.334008,26.646036],[109.306291,26.661012],[109.283501,26.698445],[109.35495,26.693098],[109.407305,26.719829],[109.447957,26.759913],[109.486761,26.759913],[109.47629,26.829894],[109.467051,26.83203],[109.452885,26.861932],[109.436254,26.892359],[109.555131,26.946788],[109.520022,27.058764],[109.497848,27.079548],[109.486761,27.053968],[109.454733,27.069423],[109.472595,27.134951],[109.441182,27.117907],[109.415312,27.154123],[109.358646,27.153058],[109.33524,27.139212],[109.264407,27.131755],[109.239154,27.14933],[109.21698,27.114711],[109.165857,27.066758],[109.101183,27.06889],[109.128901,27.122701],[109.032814,27.104056],[109.007561,27.08008],[108.940423,27.044907],[108.942887,27.017186],[108.942887,27.017186],[108.877597,27.01612],[108.79075,27.084343],[108.878829,27.106187],[108.926873,27.160512],[108.907778,27.204699],[108.963213,27.235565],[108.983539,27.26802],[109.053756,27.293551],[109.044517,27.331304],[109.103647,27.336621],[109.142451,27.418461],[109.141835,27.448207],[109.167089,27.41793],[109.202197,27.450331],[109.245313,27.41793],[109.300132,27.423774],[109.303211,27.47582],[109.404841,27.55066],[109.461508,27.567637],[109.451037,27.586204],[109.470131,27.62863],[109.45658,27.673689],[109.470747,27.680049],[109.414081,27.725087],[109.366653,27.721909],[109.37774,27.736741],[109.332777,27.782815],[109.346943,27.838396],[109.32169,27.868027],[109.30198,27.956343],[109.319842,27.988585],[109.362342,28.007608],[109.378972,28.034551],[109.335856,28.063073],[109.298284,28.036136],[109.314298,28.103729],[109.33832,28.141731],[109.340168,28.19027],[109.367885,28.254602],[109.388211,28.268307],[109.33524,28.293605],[109.317994,28.277795],[109.275494,28.313101],[109.268719,28.33786],[109.289045,28.373673],[109.264407,28.392628],[109.260712,28.46473],[109.274262,28.494714]]],[[[109.47629,26.829894],[109.486761,26.759913],[109.52187,26.749226],[109.522486,26.749226],[109.497232,26.815474],[109.513247,26.84004],[109.509551,26.877947],[109.486761,26.895562],[109.452885,26.861932],[109.467051,26.83203],[109.47629,26.829894]]],[[[109.528645,26.743881],[109.568065,26.726243],[109.597015,26.756173],[109.554515,26.73533],[109.528645,26.743881]]]]}},{"type":"Feature","properties":{"adcode":530000,"name":"云南省","center":[102.712251,25.040609],"centroid":[101.485106,25.008643],"childrenNum":16,"level":"province","parent":{"adcode":100000},"subFeatureIndex":24,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[105.308229,27.704955],[105.290367,27.712373],[105.293447,27.770637],[105.273736,27.794992],[105.313157,27.810874],[105.25957,27.827811],[105.233084,27.895534],[105.284823,27.935725],[105.270657,27.99704],[105.247867,28.009193],[105.218302,27.990698],[105.186273,27.995454],[105.167795,28.021345],[105.186889,28.054623],[105.168411,28.071522],[105.119752,28.07205],[105.061853,28.096866],[105.002107,28.064129],[104.980549,28.063073],[104.975006,28.020816],[104.903557,27.962158],[104.918339,27.938897],[104.888158,27.914574],[104.842579,27.900294],[104.796999,27.901352],[104.761891,27.884426],[104.743413,27.901881],[104.676275,27.880723],[104.63316,27.850567],[104.607906,27.857974],[104.573413,27.840512],[104.52537,27.889187],[104.508124,27.878078],[104.44961,27.927794],[104.40095,27.952114],[104.362762,28.012891],[104.30856,28.036136],[104.304248,28.050926],[104.373233,28.051454],[104.40095,28.091586],[104.448994,28.113758],[104.444682,28.16231],[104.406494,28.173389],[104.402182,28.202928],[104.442834,28.211366],[104.462544,28.241422],[104.44961,28.269889],[104.420045,28.269889],[104.392943,28.291497],[104.384936,28.329959],[104.343052,28.334173],[104.314103,28.306778],[104.282074,28.343128],[104.254357,28.403683],[104.267908,28.499448],[104.260516,28.536257],[104.323342,28.540989],[104.355987,28.555183],[104.375697,28.5946],[104.417581,28.598279],[104.425588,28.626649],[104.372617,28.649235],[104.314719,28.615617],[104.277147,28.631902],[104.252509,28.660788],[104.230951,28.635579],[104.170589,28.642932],[104.117618,28.634003],[104.09606,28.603533],[104.05972,28.6277],[103.953779,28.600906],[103.910047,28.631377],[103.887873,28.61982],[103.850917,28.66709],[103.833054,28.605109],[103.838598,28.587244],[103.802873,28.563068],[103.781931,28.525216],[103.829975,28.459995],[103.828743,28.44],[103.860156,28.383677],[103.85338,28.356822],[103.877402,28.316262],[103.828743,28.285173],[103.770845,28.233514],[103.740048,28.23615],[103.701859,28.198709],[103.692004,28.232459],[103.643961,28.260401],[103.573128,28.230877],[103.533092,28.168641],[103.470266,28.122204],[103.430846,28.044587],[103.459179,28.021345],[103.486281,28.033495],[103.515846,27.965329],[103.55465,27.978543],[103.502295,27.910343],[103.509686,27.843687],[103.487512,27.794992],[103.461027,27.779638],[103.393274,27.709194],[103.369868,27.708664],[103.349542,27.678459],[103.29226,27.632872],[103.2861,27.561802],[103.232514,27.56976],[103.19063,27.523596],[103.144434,27.450331],[103.141355,27.420586],[103.080992,27.396679],[103.055739,27.40943],[102.989833,27.367983],[102.941174,27.405711],[102.899906,27.317481],[102.883892,27.299401],[102.883276,27.258444],[102.904218,27.227584],[102.913457,27.133886],[102.870957,27.026782],[102.894979,27.001724],[102.896211,26.91264],[102.949181,26.843244],[102.966428,26.837904],[102.991681,26.775409],[102.983674,26.76686],[103.008312,26.710741],[103.005232,26.679195],[103.026174,26.664221],[103.035413,26.556673],[103.052659,26.555602],[103.052659,26.514374],[103.030485,26.485989],[102.989833,26.482775],[102.988602,26.413117],[102.998457,26.371839],[102.975667,26.340736],[102.893131,26.338591],[102.878964,26.364332],[102.833385,26.306406],[102.785342,26.298895],[102.739762,26.268846],[102.709581,26.210336],[102.659074,26.221611],[102.60056,26.250598],[102.638748,26.307479],[102.629509,26.336982],[102.570995,26.362723],[102.542046,26.338591],[102.440416,26.300505],[102.392372,26.296749],[102.349257,26.244694],[102.245163,26.212483],[102.242699,26.190468],[102.174946,26.146961],[102.152156,26.10935],[102.107808,26.068501],[102.080091,26.065275],[102.020961,26.096451],[101.954439,26.084627],[101.929186,26.105588],[101.899621,26.099139],[101.857737,26.049146],[101.835563,26.04592],[101.839875,26.082477],[101.796759,26.114723],[101.807846,26.156093],[101.773353,26.168448],[101.737013,26.219463],[101.690202,26.241473],[101.630455,26.224832],[101.586108,26.279579],[101.597195,26.303187],[101.64031,26.318745],[101.660636,26.346635],[101.635383,26.357361],[101.637847,26.388995],[101.565782,26.454381],[101.530057,26.467239],[101.506652,26.499915],[101.458608,26.49563],[101.422884,26.53151],[101.395783,26.591998],[101.402558,26.604841],[101.461688,26.606447],[101.461072,26.640687],[101.481398,26.673313],[101.453065,26.692563],[101.513427,26.768463],[101.466,26.786629],[101.445674,26.77434],[101.458608,26.731054],[101.435819,26.740675],[101.389623,26.723036],[101.387159,26.753501],[101.358826,26.771669],[101.399478,26.841642],[101.365602,26.883819],[101.311399,26.903034],[101.267667,26.903034],[101.264587,26.955323],[101.227015,26.959057],[101.228863,26.981992],[101.136472,27.023584],[101.157414,27.094999],[101.145095,27.103523],[101.170349,27.175421],[101.167885,27.198311],[101.167885,27.198311],[101.119226,27.208957],[101.071798,27.194585],[101.042233,27.22173],[101.026219,27.270679],[101.021907,27.332899],[100.95169,27.426961],[100.936908,27.469448],[100.901183,27.453517],[100.91227,27.521473],[100.854988,27.623858],[100.827886,27.615904],[100.848212,27.672099],[100.782307,27.691708],[100.775532,27.743098],[100.757053,27.770107],[100.707162,27.800816],[100.719481,27.858503],[100.681293,27.923035],[100.634482,27.915631],[100.609228,27.859033],[100.54517,27.809286],[100.511294,27.827811],[100.504518,27.852154],[100.442924,27.86644],[100.412127,27.816167],[100.350534,27.755809],[100.327744,27.72032],[100.311729,27.724028],[100.304954,27.788639],[100.28586,27.80611],[100.30865,27.830457],[100.30865,27.861149],[100.210715,27.87702],[100.170063,27.907699],[100.196549,27.936254],[100.120788,28.018703],[100.088759,28.029269],[100.05673,28.097922],[100.021006,28.147008],[100.033325,28.184467],[100.062274,28.193962],[100.091223,28.181302],[100.102926,28.201873],[100.153433,28.208202],[100.188541,28.252493],[100.147274,28.288862],[100.176223,28.325218],[100.136803,28.349975],[100.057346,28.368934],[100.073977,28.426317],[99.990209,28.47683],[99.985281,28.529422],[99.91876,28.599329],[99.875644,28.611939],[99.873181,28.631902],[99.834376,28.628225],[99.834992,28.660788],[99.79434,28.699116],[99.755536,28.701216],[99.722275,28.757369],[99.717964,28.846521],[99.676696,28.810345],[99.625573,28.81454],[99.609559,28.784122],[99.614486,28.740054],[99.553508,28.710664],[99.53195,28.677591],[99.540573,28.623497],[99.504233,28.619294],[99.466045,28.579886],[99.463581,28.549401],[99.403219,28.546246],[99.396444,28.491032],[99.426625,28.454207],[99.404451,28.44421],[99.437095,28.398419],[99.392748,28.318369],[99.412458,28.295186],[99.374886,28.18183],[99.306516,28.227714],[99.28927,28.286227],[99.237531,28.317842],[99.229524,28.350502],[99.200575,28.365774],[99.16485,28.425264],[99.187024,28.44],[99.191952,28.494714],[99.170394,28.566221],[99.183944,28.58882],[99.147604,28.640831],[99.126662,28.698066],[99.134053,28.734806],[99.114343,28.765763],[99.103872,28.841803],[99.123582,28.890021],[99.132206,28.94869],[99.113727,29.07273],[99.118039,29.100971],[99.105104,29.162656],[99.113727,29.221171],[99.037351,29.20759],[99.024416,29.188783],[98.9813,29.204978],[98.960974,29.165792],[98.967134,29.128159],[98.991771,29.105677],[99.013329,29.036632],[98.925866,28.978536],[98.917859,28.886877],[98.973909,28.864867],[98.972677,28.832367],[98.922786,28.823978],[98.912931,28.800906],[98.852569,28.798283],[98.827932,28.821356],[98.821772,28.920931],[98.786048,28.998952],[98.757714,29.004186],[98.70228,28.9644],[98.655469,28.976966],[98.624056,28.95864],[98.6567,28.910454],[98.643766,28.895261],[98.668403,28.843376],[98.652389,28.817162],[98.683802,28.740054],[98.666555,28.712239],[98.594491,28.667615],[98.637606,28.552029],[98.619128,28.50944],[98.625903,28.489455],[98.673947,28.478934],[98.693041,28.43158],[98.740468,28.348395],[98.746628,28.321003],[98.710287,28.288862],[98.712135,28.229296],[98.649925,28.200291],[98.625903,28.165475],[98.559382,28.182885],[98.494092,28.141203],[98.464527,28.151229],[98.428803,28.104785],[98.389383,28.114814],[98.389999,28.16442],[98.370289,28.18394],[98.37768,28.246167],[98.353042,28.293078],[98.317934,28.324691],[98.301303,28.384204],[98.208913,28.358401],[98.207681,28.330486],[98.231702,28.314681],[98.266811,28.242477],[98.21692,28.212949],[98.169492,28.206093],[98.17442,28.163365],[98.139311,28.142259],[98.160253,28.101089],[98.133152,27.990698],[98.143007,27.948942],[98.187355,27.939426],[98.205217,27.889716],[98.169492,27.851096],[98.215688,27.810874],[98.234166,27.690648],[98.283441,27.654608],[98.310542,27.583552],[98.317318,27.51935],[98.337644,27.508734],[98.388767,27.515104],[98.429419,27.549068],[98.430035,27.653547],[98.444201,27.665209],[98.474998,27.634462],[98.53536,27.620676],[98.554454,27.646126],[98.587099,27.587265],[98.583404,27.571351],[98.650541,27.567637],[98.662244,27.586734],[98.706591,27.553313],[98.685034,27.484315],[98.704744,27.462014],[98.686881,27.425367],[98.702896,27.412618],[98.706591,27.362136],[98.741084,27.330241],[98.734925,27.287168],[98.717062,27.271211],[98.723222,27.221198],[98.696121,27.211086],[98.713983,27.139744],[98.712751,27.075817],[98.765722,27.05077],[98.762642,27.018252],[98.732461,27.002257],[98.757098,26.877947],[98.730613,26.851253],[98.762026,26.798916],[98.746012,26.696841],[98.770033,26.690424],[98.762642,26.660478],[98.781736,26.620893],[98.773113,26.578083],[98.753403,26.559349],[98.757098,26.491881],[98.741084,26.432947],[98.750323,26.424372],[98.733693,26.350926],[98.681338,26.308016],[98.672715,26.239863],[98.713367,26.231274],[98.735541,26.185097],[98.712751,26.156093],[98.720142,26.127082],[98.661012,26.087852],[98.656084,26.139977],[98.632679,26.145887],[98.575396,26.118485],[98.602498,26.054523],[98.614201,25.968468],[98.637606,25.971696],[98.686881,25.925955],[98.705976,25.855426],[98.677642,25.816105],[98.640686,25.798864],[98.553839,25.845731],[98.529201,25.840884],[98.476846,25.77731],[98.461448,25.735267],[98.457752,25.682963],[98.409709,25.664084],[98.402317,25.593939],[98.326557,25.566409],[98.314854,25.543193],[98.247717,25.607971],[98.170724,25.620383],[98.189818,25.569108],[98.163949,25.524292],[98.131304,25.51025],[98.15779,25.457307],[98.137464,25.381633],[98.101123,25.388662],[98.099891,25.354055],[98.06971,25.311864],[98.006884,25.298338],[98.0075,25.279399],[97.940363,25.214985],[97.904023,25.216609],[97.875689,25.25721],[97.839349,25.27074],[97.796233,25.155954],[97.743262,25.078466],[97.719857,25.080634],[97.727864,25.04377],[97.716777,24.978147],[97.729712,24.908689],[97.785762,24.876117],[97.797465,24.845709],[97.765436,24.823984],[97.680437,24.827243],[97.652103,24.790846],[97.569567,24.765852],[97.547394,24.739221],[97.569567,24.708236],[97.570799,24.602719],[97.554785,24.490577],[97.530147,24.443187],[97.588662,24.435559],[97.669966,24.452993],[97.679821,24.401228],[97.716161,24.358711],[97.662574,24.339083],[97.665038,24.296544],[97.721089,24.295999],[97.767284,24.258357],[97.729712,24.227252],[97.72848,24.183585],[97.754349,24.163929],[97.748806,24.160653],[97.743262,24.159561],[97.730944,24.113685],[97.700763,24.093473],[97.697067,24.092927],[97.637321,24.04812],[97.628698,24.004938],[97.572647,23.983068],[97.529531,23.943146],[97.5283,23.926736],[97.618227,23.888438],[97.640401,23.866001],[97.647176,23.840823],[97.684132,23.876946],[97.718009,23.867643],[97.72848,23.895551],[97.763588,23.907041],[97.795617,23.951897],[97.8104,23.943146],[97.863371,23.978693],[97.896015,23.974319],[97.902175,24.014231],[97.984095,24.031177],[97.995182,24.04648],[98.091268,24.085824],[98.096196,24.08637],[98.123297,24.092927],[98.125761,24.092927],[98.132536,24.09238],[98.19721,24.09839],[98.219999,24.113685],[98.343187,24.098936],[98.37768,24.114232],[98.48239,24.122425],[98.487933,24.123517],[98.547063,24.128433],[98.593875,24.08036],[98.646229,24.106038],[98.681954,24.100029],[98.71891,24.127887],[98.818692,24.133348],[98.841482,24.126794],[98.876591,24.15137],[98.895069,24.098936],[98.807606,24.025164],[98.773729,24.022431],[98.727533,23.970491],[98.701048,23.981427],[98.673331,23.960647],[98.701048,23.946427],[98.68565,23.90157],[98.701664,23.834254],[98.669019,23.800857],[98.696121,23.784429],[98.784816,23.781691],[98.824236,23.727462],[98.811917,23.703354],[98.835939,23.683625],[98.847026,23.632097],[98.882134,23.620035],[98.882134,23.595358],[98.844562,23.578904],[98.80391,23.540504],[98.826084,23.470257],[98.874743,23.483431],[98.912315,23.426333],[98.920938,23.360971],[98.872895,23.329651],[98.906772,23.331849],[98.936953,23.309866],[98.928946,23.26589],[98.889525,23.209249],[98.906772,23.185595],[99.002242,23.160287],[99.057677,23.164689],[99.048438,23.11461],[99.106336,23.086536],[99.187024,23.100299],[99.255393,23.077727],[99.281879,23.101399],[99.3484,23.12892],[99.380429,23.099748],[99.440791,23.079379],[99.477747,23.083233],[99.528255,23.065614],[99.517168,23.006685],[99.533798,22.961507],[99.563363,22.925684],[99.531334,22.897019],[99.446951,22.934503],[99.43648,22.913557],[99.462965,22.844635],[99.401371,22.826434],[99.385357,22.761882],[99.326842,22.751396],[99.31514,22.737598],[99.339777,22.708894],[99.385973,22.57136],[99.359487,22.535435],[99.382277,22.493418],[99.297277,22.41156],[99.251698,22.393301],[99.278183,22.34626],[99.233836,22.296434],[99.235683,22.250468],[99.207966,22.232188],[99.175321,22.185647],[99.188256,22.162924],[99.156227,22.159599],[99.219669,22.110816],[99.294814,22.109152],[99.35456,22.095845],[99.400139,22.100281],[99.486987,22.128557],[99.516552,22.099726],[99.562747,22.113034],[99.578762,22.098617],[99.581841,22.103053],[99.648979,22.100835],[99.696406,22.067562],[99.762927,22.068117],[99.870101,22.029288],[99.871333,22.067007],[99.972347,22.053141],[99.965571,22.014309],[100.000064,21.973245],[99.982202,21.919401],[99.960028,21.907186],[99.944014,21.821097],[99.991441,21.703821],[100.049339,21.669899],[100.094303,21.702709],[100.131875,21.699929],[100.169447,21.663225],[100.107853,21.585337],[100.123252,21.565302],[100.131259,21.504066],[100.168831,21.482906],[100.184846,21.516315],[100.206404,21.509634],[100.235353,21.466756],[100.298795,21.477894],[100.349302,21.528564],[100.437381,21.533017],[100.48296,21.458958],[100.526692,21.471211],[100.579047,21.451717],[100.691764,21.510748],[100.730568,21.518542],[100.753358,21.555283],[100.789082,21.570867],[100.804481,21.609821],[100.847597,21.634856],[100.870386,21.67268],[100.896872,21.68269],[100.899335,21.684915],[100.936292,21.694368],[100.937524,21.693812],[101.015132,21.707157],[101.089661,21.773865],[101.123537,21.771642],[101.111835,21.746074],[101.116762,21.691032],[101.153102,21.669343],[101.169117,21.590345],[101.146943,21.560293],[101.209153,21.55751],[101.210385,21.509077],[101.225167,21.499055],[101.193138,21.473996],[101.194986,21.424979],[101.142631,21.409379],[101.183899,21.334699],[101.244877,21.302364],[101.246725,21.275598],[101.222088,21.234324],[101.290457,21.17853],[101.387775,21.225956],[101.439514,21.227072],[101.532521,21.252174],[101.601506,21.233208],[101.588572,21.191365],[101.605818,21.172392],[101.672339,21.194713],[101.703136,21.14616],[101.76473,21.147835],[101.794911,21.208104],[101.834331,21.204756],[101.833715,21.252731],[101.791832,21.285636],[101.745636,21.297345],[101.730238,21.336929],[101.749948,21.409379],[101.741324,21.482906],[101.772737,21.512975],[101.755491,21.538027],[101.754875,21.58478],[101.804766,21.577546],[101.828788,21.617054],[101.807846,21.644313],[101.780129,21.640975],[101.76781,21.716054],[101.747484,21.729953],[101.771506,21.833319],[101.740093,21.845541],[101.735165,21.875534],[101.700057,21.897191],[101.701288,21.938832],[101.666796,21.934391],[101.606434,21.967695],[101.626144,22.005986],[101.573789,22.115251],[101.602738,22.131883],[101.596579,22.161262],[101.547304,22.238282],[101.56455,22.269299],[101.625528,22.28259],[101.671723,22.372826],[101.648318,22.400494],[101.672339,22.47517],[101.715455,22.477935],[101.774585,22.506135],[101.824476,22.45692],[101.823244,22.42705],[101.862665,22.389427],[101.901469,22.384447],[101.907628,22.437007],[101.978461,22.427603],[102.046214,22.458026],[102.131214,22.430922],[102.145381,22.397727],[102.179257,22.430369],[102.270416,22.419858],[102.25625,22.457473],[102.322771,22.554227],[102.356648,22.563623],[102.404691,22.629925],[102.384365,22.679631],[102.43672,22.699508],[102.45951,22.762986],[102.510633,22.774574],[102.551285,22.743669],[102.569763,22.701164],[102.607335,22.730975],[102.657226,22.687913],[102.688639,22.70006],[102.80074,22.620534],[102.82353,22.623296],[102.880196,22.586832],[102.892515,22.533223],[102.930703,22.482359],[102.986754,22.477935],[103.030485,22.441432],[103.081608,22.454154],[103.071753,22.488441],[103.183238,22.558649],[103.161065,22.590147],[103.195557,22.648153],[103.220195,22.643734],[103.283021,22.678526],[103.288564,22.732078],[103.321209,22.777885],[103.323057,22.807678],[103.375411,22.794989],[103.441317,22.753052],[103.436389,22.6973],[103.457947,22.658646],[103.50907,22.601198],[103.529396,22.59291],[103.580519,22.66693],[103.567585,22.701164],[103.642113,22.794989],[103.740048,22.709446],[103.743127,22.697852],[103.766533,22.688465],[103.825047,22.615562],[103.863851,22.584069],[103.875554,22.565833],[103.894032,22.564728],[103.964865,22.502265],[104.009213,22.517745],[104.009213,22.575228],[104.022148,22.593463],[104.04309,22.67687],[104.045553,22.728215],[104.089901,22.768504],[104.117618,22.808781],[104.224176,22.826434],[104.261748,22.841877],[104.274067,22.828088],[104.256821,22.77347],[104.272835,22.73815],[104.323342,22.728767],[104.375697,22.690122],[104.422508,22.734838],[104.498885,22.774574],[104.527834,22.814298],[104.596203,22.846289],[104.674428,22.817056],[104.737869,22.825882],[104.732942,22.852356],[104.760659,22.862282],[104.772362,22.893711],[104.846275,22.926235],[104.860441,22.970874],[104.821021,23.032022],[104.804391,23.110207],[104.874608,23.123417],[104.882615,23.163589],[104.912796,23.175693],[104.949136,23.152033],[104.958991,23.188896],[105.093266,23.260942],[105.122215,23.247745],[105.181962,23.279084],[105.238012,23.26424],[105.260186,23.31811],[105.325475,23.390086],[105.353809,23.362069],[105.372903,23.317561],[105.416018,23.283482],[105.445584,23.292827],[105.50225,23.202648],[105.542902,23.184495],[105.526272,23.234548],[105.560148,23.257093],[105.593409,23.312614],[105.649459,23.346136],[105.699966,23.327453],[105.694423,23.363168],[105.637757,23.404366],[105.699966,23.40162],[105.758481,23.459826],[105.805908,23.467512],[105.815763,23.507031],[105.852103,23.526786],[105.89214,23.52514],[105.913081,23.499348],[105.935871,23.508678],[105.986378,23.489469],[105.999929,23.447748],[106.039965,23.484529],[106.071994,23.495506],[106.08616,23.524043],[106.141595,23.569579],[106.120653,23.605229],[106.149602,23.665538],[106.157609,23.724175],[106.136667,23.795381],[106.192102,23.824947],[106.173008,23.861622],[106.192718,23.879135],[106.157609,23.891174],[106.128044,23.956819],[106.091088,23.998924],[106.096631,24.018058],[106.053516,24.051399],[106.04982,24.089649],[106.011632,24.099482],[105.998081,24.120786],[105.963589,24.110954],[105.919241,24.122425],[105.901995,24.099482],[105.908154,24.069432],[105.89214,24.040468],[105.859495,24.056864],[105.841633,24.03063],[105.796669,24.023524],[105.802212,24.051945],[105.765256,24.073804],[105.739387,24.059596],[105.704278,24.0667],[105.649459,24.032816],[105.628518,24.126794],[105.594641,24.137718],[105.533663,24.130071],[105.493011,24.016965],[105.406163,24.043748],[105.395692,24.065607],[105.334099,24.094566],[105.320548,24.116416],[105.273121,24.092927],[105.292831,24.074896],[105.260186,24.061236],[105.20044,24.105491],[105.182577,24.167205],[105.229389,24.165567],[105.24294,24.208695],[105.215222,24.214699],[105.164715,24.288362],[105.196744,24.326541],[105.188121,24.347261],[105.138846,24.376701],[105.111744,24.37234],[105.106817,24.414853],[105.042759,24.442097],[104.979933,24.412673],[104.930042,24.411038],[104.914028,24.426296],[104.83642,24.446456],[104.784681,24.443732],[104.765587,24.45953],[104.74834,24.435559],[104.715695,24.441552],[104.703377,24.419757],[104.721239,24.340173],[104.70892,24.321087],[104.641783,24.367979],[104.610986,24.377246],[104.63008,24.397958],[104.616529,24.421937],[104.575877,24.424661],[104.550008,24.518894],[104.520443,24.535228],[104.489646,24.653313],[104.529682,24.731611],[104.542616,24.75607],[104.539537,24.813663],[104.586964,24.872859],[104.635623,24.903803],[104.663957,24.964584],[104.713232,24.996048],[104.684898,25.054072],[104.619609,25.060577],[104.685514,25.078466],[104.695369,25.122364],[104.732326,25.167871],[104.724319,25.195491],[104.753884,25.214443],[104.801927,25.163537],[104.822869,25.170037],[104.806854,25.224189],[104.826565,25.235558],[104.816094,25.262622],[104.736021,25.268034],[104.689826,25.296173],[104.639935,25.295632],[104.646094,25.356759],[104.615913,25.364871],[104.566638,25.402719],[104.543232,25.400556],[104.556783,25.524832],[104.524138,25.526992],[104.483486,25.494585],[104.44961,25.495126],[104.434827,25.472436],[104.418813,25.499447],[104.436059,25.520512],[104.428668,25.576126],[104.389248,25.595558],[104.332581,25.598796],[104.310407,25.647901],[104.328886,25.760602],[104.370769,25.730415],[104.397871,25.76168],[104.42374,25.841961],[104.441602,25.868889],[104.414501,25.909807],[104.438523,25.92757],[104.470552,26.009352],[104.460081,26.085702],[104.499501,26.070651],[104.52845,26.114186],[104.518595,26.165762],[104.548776,26.226979],[104.542616,26.253282],[104.592508,26.317672],[104.659645,26.335373],[104.684283,26.3772],[104.664572,26.397572],[104.665804,26.434019],[104.631928,26.451702],[104.638703,26.477954],[104.598667,26.520801],[104.57095,26.524549],[104.579573,26.568449],[104.556783,26.590393],[104.488414,26.579689],[104.459465,26.602701],[104.468088,26.644431],[104.424356,26.709137],[104.398487,26.686147],[104.353523,26.620893],[104.313487,26.612867],[104.274683,26.633733],[104.268524,26.617683],[104.222328,26.620358],[104.160734,26.646571],[104.121314,26.638012],[104.068343,26.573266],[104.067727,26.51491],[104.008597,26.511697],[103.953163,26.521336],[103.865699,26.512232],[103.819504,26.529903],[103.815808,26.55239],[103.763453,26.585041],[103.748671,26.623568],[103.759142,26.689355],[103.773308,26.716621],[103.725265,26.742812],[103.705555,26.794642],[103.722185,26.851253],[103.779468,26.87421],[103.763453,26.905702],[103.775156,26.951056],[103.753598,26.963858],[103.73204,27.018785],[103.704939,27.049171],[103.675374,27.051836],[103.623019,27.007056],[103.623635,27.035312],[103.601461,27.061962],[103.614396,27.079548],[103.659975,27.065692],[103.652584,27.092868],[103.620555,27.096598],[103.63349,27.12057],[103.696316,27.126429],[103.748671,27.210021],[103.801641,27.250464],[103.80041,27.26536],[103.865699,27.28185],[103.874322,27.331304],[103.903271,27.347785],[103.905119,27.38552],[103.932221,27.443958],[103.956242,27.425367],[104.015372,27.429086],[104.01722,27.383926],[104.084358,27.330773],[104.113923,27.338216],[104.173053,27.263232],[104.210625,27.297273],[104.248813,27.291955],[104.247582,27.336621],[104.295625,27.37436],[104.30856,27.407305],[104.363378,27.467855],[104.467472,27.414211],[104.497037,27.414743],[104.539537,27.327583],[104.570334,27.331836],[104.611602,27.306846],[104.7545,27.345658],[104.77113,27.317481],[104.824717,27.3531],[104.856746,27.332368],[104.851818,27.299401],[104.871528,27.290891],[104.913412,27.327051],[105.01073,27.379143],[105.068013,27.418461],[105.120984,27.418461],[105.184425,27.392959],[105.182577,27.367451],[105.233084,27.436522],[105.234316,27.489093],[105.260186,27.514573],[105.232469,27.546945],[105.25649,27.582491],[105.304533,27.611661],[105.29591,27.631811],[105.308229,27.704955]]]]}},{"type":"Feature","properties":{"adcode":540000,"name":"西藏自治区","center":[91.132212,29.660361],"centroid":[88.388277,31.56375],"childrenNum":7,"level":"province","parent":{"adcode":100000},"subFeatureIndex":25,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[89.711414,36.093272],[89.614711,36.109712],[89.594385,36.126632],[89.490291,36.151281],[89.375727,36.228078],[89.335075,36.23725],[89.292575,36.231457],[89.232213,36.295636],[89.198952,36.260417],[89.126887,36.254626],[89.10225,36.281164],[89.054822,36.291777],[89.013554,36.315409],[88.964279,36.318785],[88.926091,36.36458],[88.870657,36.348193],[88.838628,36.353496],[88.802903,36.33807],[88.783809,36.291777],[88.766563,36.292259],[88.690186,36.367954],[88.623665,36.389636],[88.618121,36.428168],[88.573158,36.461386],[88.498629,36.446463],[88.470912,36.48208],[88.41055,36.473418],[88.356963,36.477268],[88.366202,36.458016],[88.282434,36.470049],[88.241782,36.468605],[88.222688,36.447426],[88.182652,36.452721],[88.134609,36.427205],[88.092109,36.43539],[88.006494,36.430575],[87.983088,36.437797],[87.95845,36.408423],[87.919646,36.39349],[87.838342,36.383855],[87.826023,36.391563],[87.767509,36.3747],[87.731785,36.384818],[87.6203,36.360243],[87.570409,36.342409],[87.470626,36.354459],[87.460155,36.409868],[87.426895,36.42576],[87.386859,36.412757],[87.363453,36.420463],[87.348055,36.393008],[87.292004,36.358797],[87.193454,36.349158],[87.161425,36.325535],[87.149106,36.297565],[87.08628,36.310587],[87.051788,36.2966],[86.996353,36.308658],[86.943998,36.284058],[86.931064,36.265242],[86.887332,36.262829],[86.86331,36.299977],[86.836209,36.291294],[86.746282,36.291777],[86.69947,36.24449],[86.599072,36.222285],[86.531935,36.227113],[86.515305,36.205385],[86.454943,36.221319],[86.392733,36.206834],[86.35824,36.168676],[86.2794,36.170608],[86.248603,36.141616],[86.187625,36.130983],[86.182081,36.064734],[86.199944,36.047801],[86.173458,36.008113],[86.150668,36.00424],[86.129111,35.941761],[86.093386,35.906868],[86.090306,35.876809],[86.05335,35.842857],[86.035488,35.846738],[85.949256,35.778794],[85.903677,35.78462],[85.835308,35.771996],[85.811286,35.778794],[85.691178,35.751114],[85.65299,35.731199],[85.612953,35.651486],[85.566142,35.6403],[85.518715,35.680658],[85.373969,35.700101],[85.341324,35.753543],[85.271107,35.788989],[85.146071,35.742371],[85.053065,35.752086],[84.99455,35.737028],[84.973608,35.709334],[84.920022,35.696213],[84.798066,35.647595],[84.729081,35.613546],[84.704443,35.616951],[84.628067,35.595055],[84.570168,35.588242],[84.513502,35.564391],[84.448828,35.550272],[84.475929,35.516181],[84.45314,35.473303],[84.424191,35.466479],[84.333032,35.413821],[84.274517,35.404065],[84.200605,35.381135],[84.160569,35.359663],[84.140859,35.379184],[84.095895,35.362592],[84.077417,35.400163],[84.005968,35.422599],[83.906186,35.40309],[83.885244,35.367472],[83.79778,35.354783],[83.785462,35.36308],[83.677672,35.361128],[83.622238,35.335256],[83.599448,35.351366],[83.54155,35.341603],[83.540318,35.364056],[83.502745,35.360639],[83.449159,35.382111],[83.405427,35.380648],[83.333978,35.397236],[83.280391,35.401138],[83.251442,35.417722],[83.178145,35.38943],[83.127022,35.398699],[83.088834,35.425526],[83.067892,35.46258],[82.998907,35.484512],[82.971806,35.548324],[82.981661,35.599922],[82.956407,35.636409],[82.967494,35.667532],[82.894813,35.673852],[82.873871,35.688922],[82.795031,35.688436],[82.780249,35.666073],[82.731589,35.637868],[82.652133,35.67288],[82.628727,35.692324],[82.546192,35.708362],[82.501844,35.701073],[82.468583,35.717595],[82.424852,35.712736],[82.392823,35.656349],[82.336156,35.651486],[82.350323,35.611113],[82.328149,35.559523],[82.2992,35.544916],[82.263475,35.547837],[82.234526,35.520565],[82.189563,35.513258],[82.164925,35.495719],[82.086701,35.467454],[82.071302,35.450393],[82.034346,35.451855],[82.029419,35.426013],[82.05344,35.35039],[82.030034,35.321585],[81.99123,35.30547],[81.955506,35.307423],[81.927789,35.271275],[81.853876,35.25857],[81.804601,35.270786],[81.736847,35.26248],[81.68634,35.235599],[81.513261,35.23511],[81.504638,35.279092],[81.447972,35.318167],[81.441196,35.333303],[81.385762,35.335256],[81.363588,35.354783],[81.314313,35.337209],[81.285364,35.345508],[81.26627,35.322562],[81.219458,35.319144],[81.191741,35.36552],[81.142466,35.365032],[81.103662,35.386015],[81.09935,35.40748],[81.054387,35.402602],[81.031597,35.380648],[81.030981,35.337209],[81.002648,35.334768],[81.026053,35.31133],[80.963844,35.310842],[80.924423,35.330862],[80.894242,35.324027],[80.844351,35.345508],[80.759968,35.334768],[80.689135,35.339162],[80.690982,35.364544],[80.65649,35.393821],[80.599823,35.409431],[80.56841,35.391381],[80.532686,35.404553],[80.514824,35.391869],[80.444607,35.417235],[80.432904,35.449418],[80.375006,35.387966],[80.321419,35.38699],[80.286926,35.35283],[80.267832,35.295701],[80.362687,35.20871],[80.257977,35.203331],[80.223484,35.177409],[80.23026,35.147565],[80.118159,35.066293],[80.078123,35.076578],[80.031311,35.034447],[80.04363,35.022196],[80.02392,34.971209],[80.041782,34.943252],[80.034391,34.902033],[80.003594,34.895162],[79.996819,34.856375],[79.961094,34.862759],[79.926602,34.849499],[79.947544,34.821008],[79.898268,34.732035],[79.906892,34.683821],[79.866856,34.671517],[79.88595,34.642965],[79.84345,34.55725],[79.861312,34.528166],[79.801566,34.478847],[79.735661,34.471447],[79.699936,34.477861],[79.675914,34.451216],[79.58106,34.456151],[79.545335,34.476381],[79.504683,34.45467],[79.435082,34.447761],[79.363017,34.428018],[79.326677,34.44332],[79.274322,34.435916],[79.241677,34.415183],[79.179467,34.422588],[79.161605,34.441345],[79.072294,34.412714],[79.039033,34.421601],[79.0107,34.399877],[79.048888,34.348506],[79.039649,34.33467],[79.019939,34.313417],[78.981751,34.31836],[78.958345,34.230827],[78.941099,34.212022],[78.9257,34.155584],[78.910302,34.143202],[78.878273,34.163012],[78.828998,34.125369],[78.801897,34.137258],[78.737223,34.089692],[78.661462,34.086718],[78.656535,34.030196],[78.736607,33.999937],[78.744614,33.980585],[78.734143,33.918529],[78.762476,33.90959],[78.756317,33.8773],[78.766172,33.823124],[78.758165,33.790802],[78.779723,33.73259],[78.692259,33.676331],[78.684868,33.654415],[78.713201,33.623025],[78.755085,33.623025],[78.74215,33.55323],[78.816679,33.480882],[78.84994,33.419963],[78.896751,33.41247],[78.949722,33.376495],[78.9682,33.334505],[79.022403,33.323504],[79.041497,33.268479],[79.083997,33.245459],[79.072294,33.22844],[79.10925,33.200401],[79.152366,33.184375],[79.162221,33.165841],[79.139431,33.117735],[79.162837,33.01191],[79.204721,32.964724],[79.255844,32.942628],[79.227511,32.89038],[79.237982,32.846145],[79.225047,32.784281],[79.275554,32.778746],[79.301423,32.728919],[79.27309,32.678056],[79.299575,32.637244],[79.308199,32.596918],[79.272474,32.561113],[79.252148,32.516715],[79.190554,32.511669],[79.180083,32.492994],[79.135736,32.472295],[79.124649,32.416235],[79.103091,32.369744],[79.067982,32.380863],[79.005772,32.375304],[78.970664,32.331826],[78.904142,32.374798],[78.87273,32.40512],[78.81052,32.436441],[78.782186,32.480373],[78.760629,32.563635],[78.781571,32.608009],[78.74215,32.654881],[78.741534,32.703743],[78.6861,32.680071],[78.675013,32.658408],[78.628202,32.630188],[78.588782,32.637748],[78.577695,32.615067],[78.518564,32.605993],[78.500086,32.580782],[78.424942,32.565652],[78.395377,32.530339],[78.426174,32.502584],[78.472985,32.435431],[78.458818,32.379853],[78.483456,32.357106],[78.480992,32.329297],[78.508709,32.297939],[78.475449,32.236708],[78.430485,32.212407],[78.429869,32.194683],[78.469905,32.127808],[78.509941,32.147065],[78.527188,32.11463],[78.609107,32.052768],[78.60726,32.023851],[78.705194,31.988835],[78.762476,31.947203],[78.768636,31.92638],[78.739687,31.885228],[78.665158,31.851684],[78.654687,31.819144],[78.706426,31.778453],[78.763092,31.668499],[78.798817,31.675629],[78.806824,31.64099],[78.845628,31.609905],[78.833925,31.584927],[78.779723,31.545154],[78.740303,31.532912],[78.729832,31.478316],[78.755701,31.478316],[78.792041,31.435944],[78.760013,31.392531],[78.755085,31.355742],[78.795121,31.301043],[78.859179,31.289281],[78.865338,31.312804],[78.884432,31.277006],[78.923852,31.246824],[78.930628,31.220726],[78.997765,31.158779],[78.97436,31.115751],[79.010084,31.043994],[79.059359,31.028097],[79.096931,30.992192],[79.181931,31.015788],[79.205953,31.0004],[79.227511,30.949088],[79.33222,30.969103],[79.316206,31.01784],[79.35809,31.031174],[79.404901,31.071678],[79.424611,31.061425],[79.427075,31.018353],[79.505915,31.027584],[79.550879,30.957813],[79.59769,30.925989],[79.660516,30.956787],[79.668523,30.980392],[79.729501,30.941389],[79.75845,30.936769],[79.835443,30.851006],[79.890877,30.855116],[79.913051,30.833022],[79.900732,30.7991],[79.961094,30.771337],[79.955551,30.738422],[79.970333,30.685941],[80.014065,30.661748],[80.04363,30.603559],[80.143412,30.55822],[80.214245,30.586044],[80.261673,30.566465],[80.322035,30.564403],[80.357759,30.520592],[80.43044,30.515952],[80.446454,30.495327],[80.504969,30.483466],[80.549316,30.448905],[80.585041,30.463866],[80.633084,30.458707],[80.692214,30.416913],[80.719316,30.414848],[80.81725,30.321389],[80.910873,30.30279],[80.933662,30.266614],[80.996488,30.267648],[81.034677,30.246971],[81.038372,30.205086],[81.082104,30.151281],[81.085799,30.100554],[81.110437,30.085538],[81.09627,30.052909],[81.131995,30.016124],[81.225618,30.005759],[81.256415,30.011978],[81.247792,30.032705],[81.2829,30.061197],[81.293371,30.094859],[81.269349,30.153351],[81.335871,30.149729],[81.393769,30.199396],[81.397465,30.240767],[81.419023,30.270232],[81.406088,30.291938],[81.427646,30.305373],[81.399929,30.319323],[81.406088,30.369421],[81.432573,30.379231],[81.406704,30.40401],[81.418407,30.420525],[81.454131,30.412268],[81.494783,30.381296],[81.555761,30.369421],[81.566232,30.428782],[81.613044,30.412784],[81.63029,30.446842],[81.723913,30.407623],[81.759021,30.385426],[81.872354,30.373035],[81.939491,30.344633],[81.954274,30.355995],[81.99123,30.322939],[82.022027,30.339468],[82.060215,30.332237],[82.104563,30.346182],[82.132896,30.30434],[82.11873,30.279019],[82.114418,30.226806],[82.142135,30.200948],[82.188947,30.18543],[82.207425,30.143519],[82.183403,30.12178],[82.17786,30.06793],[82.246845,30.071555],[82.311519,30.035813],[82.333693,30.045138],[82.368185,30.014051],[82.412533,30.011978],[82.431011,29.989692],[82.474743,29.973622],[82.498148,29.947698],[82.560974,29.955476],[82.609017,29.886489],[82.64351,29.868846],[82.6238,29.834588],[82.703872,29.847566],[82.737749,29.80655],[82.691553,29.766037],[82.757459,29.761881],[82.774089,29.726548],[82.816589,29.717192],[82.830756,29.687562],[82.885574,29.689122],[82.9484,29.704718],[82.966878,29.658963],[83.011226,29.667804],[83.088834,29.604863],[83.12887,29.623593],[83.159667,29.61735],[83.164595,29.595496],[83.217565,29.60018],[83.266841,29.571035],[83.27608,29.505951],[83.325355,29.502826],[83.383253,29.42206],[83.415898,29.420496],[83.423289,29.361053],[83.450391,29.332883],[83.463941,29.285916],[83.492274,29.280174],[83.548941,29.201322],[83.57789,29.203934],[83.596368,29.174153],[83.656114,29.16736],[83.667201,29.200277],[83.727563,29.244672],[83.800244,29.249372],[83.82057,29.294267],[83.851367,29.294789],[83.911729,29.323491],[83.949301,29.312533],[83.986874,29.325057],[84.002272,29.291658],[84.052163,29.296877],[84.116837,29.286438],[84.130388,29.239972],[84.203068,29.239972],[84.197525,29.210202],[84.17104,29.19453],[84.176583,29.133909],[84.20738,29.118749],[84.192597,29.084236],[84.194445,29.045004],[84.224626,29.049189],[84.248648,29.030353],[84.228322,28.949738],[84.234481,28.889497],[84.268358,28.895261],[84.330568,28.859101],[84.340423,28.866963],[84.408176,28.85386],[84.404481,28.828173],[84.434046,28.823978],[84.445133,28.764189],[84.483321,28.735331],[84.557233,28.74635],[84.620059,28.732182],[84.650856,28.714338],[84.669334,28.680742],[84.699515,28.671816],[84.698284,28.633478],[84.773428,28.610363],[84.857196,28.567798],[84.896616,28.587244],[84.981616,28.586193],[84.995782,28.611414],[85.05676,28.674441],[85.126361,28.676016],[85.155926,28.643983],[85.195963,28.624022],[85.18426,28.587244],[85.189803,28.544669],[85.160238,28.49261],[85.108499,28.461047],[85.129441,28.377885],[85.113427,28.344708],[85.179948,28.324164],[85.209513,28.338914],[85.272339,28.282538],[85.349947,28.298347],[85.379512,28.274105],[85.415853,28.321003],[85.458969,28.332593],[85.520563,28.326798],[85.602483,28.295712],[85.601251,28.254075],[85.650526,28.283592],[85.682555,28.375779],[85.720743,28.372093],[85.753388,28.227714],[85.791576,28.195544],[85.854402,28.172334],[85.871648,28.124843],[85.898749,28.101617],[85.901213,28.053566],[85.980053,27.984357],[85.949256,27.937311],[86.002227,27.90717],[86.053966,27.900823],[86.125415,27.923035],[86.082915,28.018175],[86.086611,28.090002],[86.128495,28.086835],[86.140198,28.114814],[86.19132,28.167058],[86.223965,28.092642],[86.206103,28.084195],[86.231972,27.974315],[86.27324,27.976958],[86.308965,27.950528],[86.393349,27.926736],[86.414906,27.904526],[86.450015,27.908757],[86.475884,27.944713],[86.514689,27.954757],[86.513457,27.996511],[86.537478,28.044587],[86.55842,28.047757],[86.568891,28.103201],[86.60092,28.097922],[86.611391,28.069938],[86.647732,28.06941],[86.662514,28.092114],[86.700086,28.101617],[86.74813,28.089474],[86.768456,28.06941],[86.756753,28.032967],[86.827586,28.012363],[86.864542,28.022401],[86.885484,27.995983],[86.926752,27.985942],[86.935375,27.955286],[87.035157,27.946299],[87.080737,27.910872],[87.118309,27.840512],[87.173744,27.818284],[87.227946,27.812991],[87.249504,27.839454],[87.280917,27.845275],[87.317258,27.826753],[87.364069,27.824106],[87.421967,27.856916],[87.418272,27.825694],[87.45954,27.820931],[87.58088,27.859562],[87.598126,27.814579],[87.670191,27.832045],[87.668343,27.809815],[87.727473,27.802933],[87.77798,27.860091],[87.782292,27.890774],[87.826639,27.927794],[87.930733,27.909285],[87.982472,27.884426],[88.037291,27.901881],[88.090877,27.885484],[88.111819,27.864852],[88.137689,27.878607],[88.120442,27.915103],[88.156783,27.957929],[88.203594,27.943127],[88.242398,27.967444],[88.254101,27.939426],[88.357579,27.986471],[88.401311,27.976958],[88.43334,28.002852],[88.469064,28.009721],[88.498013,28.04089],[88.554064,28.027684],[88.565151,28.083139],[88.620585,28.091586],[88.645223,28.111119],[88.67602,28.068353],[88.764099,28.068353],[88.812142,28.018175],[88.842939,28.006023],[88.846635,27.921448],[88.864497,27.921448],[88.888519,27.846863],[88.863265,27.811932],[88.870657,27.743098],[88.850331,27.710783],[88.852178,27.671039],[88.816454,27.641354],[88.813374,27.606889],[88.770874,27.563924],[88.797976,27.521473],[88.783193,27.467324],[88.809063,27.405711],[88.838012,27.37808],[88.867577,27.3818],[88.901453,27.327583],[88.920548,27.325456],[88.911924,27.272807],[88.942105,27.261636],[88.984605,27.208957],[89.067757,27.240354],[89.077612,27.287168],[89.152757,27.319076],[89.182938,27.373829],[89.132431,27.441302],[89.095474,27.471572],[89.109025,27.537925],[89.163228,27.574534],[89.128735,27.611131],[89.131815,27.633402],[89.184786,27.673689],[89.238988,27.796581],[89.295655,27.84845],[89.375727,27.875962],[89.44348,27.968501],[89.461958,28.03191],[89.511233,28.086307],[89.541414,28.088418],[89.605472,28.161782],[89.720037,28.170224],[89.779167,28.197127],[89.789638,28.240895],[89.869094,28.221386],[89.901739,28.18183],[89.976268,28.189215],[90.017536,28.162837],[90.03355,28.136981],[90.07297,28.155451],[90.103151,28.141731],[90.124709,28.190797],[90.166593,28.187632],[90.189999,28.161782],[90.231882,28.144897],[90.297172,28.153868],[90.367389,28.088946],[90.384019,28.06096],[90.43699,28.063073],[90.47949,28.044587],[90.513983,28.062016],[90.569417,28.044059],[90.591591,28.021345],[90.701844,28.076274],[90.741264,28.053038],[90.802242,28.040362],[90.806554,28.015005],[90.853365,27.969029],[90.896481,27.946299],[90.96177,27.9537],[90.976553,27.935725],[90.96485,27.900294],[91.025828,27.857445],[91.113292,27.846333],[91.155175,27.894476],[91.147784,27.927794],[91.162567,27.968501],[91.216153,27.989113],[91.251878,27.970615],[91.309776,28.057791],[91.464993,28.002852],[91.490246,27.971672],[91.486551,27.937311],[91.552456,27.90717],[91.611586,27.891303],[91.618978,27.856916],[91.561079,27.855329],[91.544449,27.820401],[91.610355,27.819343],[91.642383,27.7664],[91.622673,27.692238],[91.570934,27.650897],[91.562311,27.627569],[91.582637,27.598933],[91.564775,27.58196],[91.585101,27.540578],[91.626985,27.509265],[91.663325,27.507142],[91.71876,27.467324],[91.753868,27.462545],[91.839484,27.489624],[91.946657,27.464138],[92.010715,27.474758],[92.021802,27.444489],[92.064918,27.391365],[92.125896,27.273339],[92.091403,27.264296],[92.071077,27.237694],[92.061222,27.190327],[92.032273,27.167967],[92.02673,27.108318],[92.043976,27.052902],[92.076005,27.041175],[92.124664,26.960124],[92.109265,26.854991],[92.197961,26.86994],[92.28604,26.892359],[92.404916,26.9025],[92.496691,26.921711],[92.549046,26.941453],[92.64698,26.952656],[92.682089,26.947855],[92.802813,26.895028],[92.909371,26.914241],[93.050421,26.883819],[93.111399,26.880082],[93.232739,26.906769],[93.56781,26.938252],[93.625092,26.955323],[93.747048,27.015587],[93.817265,27.025183],[93.841903,27.045973],[93.849294,27.168499],[93.970634,27.30525],[94.056866,27.375423],[94.147409,27.458297],[94.220705,27.536333],[94.277372,27.58143],[94.353132,27.578778],[94.399944,27.589386],[94.443675,27.585143],[94.478168,27.602116],[94.524979,27.596282],[94.660486,27.650367],[94.722696,27.683759],[94.78121,27.699127],[94.836645,27.728796],[94.88592,27.743098],[94.947514,27.792345],[95.015267,27.82887],[95.067006,27.840512],[95.28628,27.939955],[95.32878,28.017646],[95.352802,28.04089],[95.371896,28.110063],[95.39715,28.142259],[95.437802,28.161782],[95.528345,28.182885],[95.674322,28.254075],[95.740228,28.275159],[95.787655,28.270416],[95.832003,28.295186],[95.874502,28.29782],[95.899756,28.278322],[95.907763,28.241422],[95.936096,28.240368],[95.989067,28.198181],[96.074683,28.193434],[96.098088,28.212421],[96.194175,28.212949],[96.275479,28.228241],[96.298269,28.140148],[96.367254,28.118509],[96.398667,28.118509],[96.395587,28.143842],[96.426384,28.161782],[96.46334,28.143314],[96.499681,28.067297],[96.538485,28.075218],[96.623485,28.024514],[96.635188,27.994926],[96.690622,27.948942],[96.711564,27.9574],[96.784245,27.931495],[96.810114,27.890245],[96.849534,27.874375],[96.908049,27.884426],[96.972722,27.861149],[97.008447,27.807698],[97.049099,27.81405],[97.062649,27.742568],[97.097758,27.740979],[97.103301,27.780697],[97.167975,27.811932],[97.253591,27.891832],[97.303482,27.913516],[97.324424,27.880723],[97.386634,27.882839],[97.372467,27.907699],[97.379242,27.970087],[97.413119,28.01342],[97.378626,28.031382],[97.375547,28.062545],[97.320728,28.054095],[97.305945,28.071522],[97.340438,28.104785],[97.326887,28.132759],[97.352757,28.149646],[97.362612,28.199236],[97.349677,28.235623],[97.398336,28.238786],[97.402032,28.279903],[97.422358,28.297293],[97.461162,28.26778],[97.469169,28.30309],[97.518445,28.327852],[97.488879,28.347341],[97.485184,28.38631],[97.499966,28.428948],[97.521524,28.444736],[97.507974,28.46473],[97.521524,28.495766],[97.569567,28.541515],[97.60406,28.515225],[97.634857,28.532051],[97.68598,28.519958],[97.737103,28.465782],[97.738335,28.396313],[97.769748,28.3742],[97.801161,28.326798],[97.842429,28.326798],[97.871378,28.361561],[97.907718,28.363141],[98.020435,28.253548],[98.008116,28.214003],[98.03337,28.187105],[98.056775,28.202401],[98.090036,28.195544],[98.097427,28.166531],[98.139311,28.142259],[98.17442,28.163365],[98.169492,28.206093],[98.21692,28.212949],[98.266811,28.242477],[98.231702,28.314681],[98.207681,28.330486],[98.208913,28.358401],[98.301303,28.384204],[98.317934,28.324691],[98.353042,28.293078],[98.37768,28.246167],[98.370289,28.18394],[98.389999,28.16442],[98.389383,28.114814],[98.428803,28.104785],[98.464527,28.151229],[98.494092,28.141203],[98.559382,28.182885],[98.625903,28.165475],[98.649925,28.200291],[98.712135,28.229296],[98.710287,28.288862],[98.746628,28.321003],[98.740468,28.348395],[98.693041,28.43158],[98.673947,28.478934],[98.625903,28.489455],[98.619128,28.50944],[98.637606,28.552029],[98.594491,28.667615],[98.666555,28.712239],[98.683802,28.740054],[98.652389,28.817162],[98.668403,28.843376],[98.643766,28.895261],[98.6567,28.910454],[98.624056,28.95864],[98.655469,28.976966],[98.70228,28.9644],[98.757714,29.004186],[98.786048,28.998952],[98.821772,28.920931],[98.827932,28.821356],[98.852569,28.798283],[98.912931,28.800906],[98.922786,28.823978],[98.972677,28.832367],[98.973909,28.864867],[98.917859,28.886877],[98.925866,28.978536],[99.013329,29.036632],[98.991771,29.105677],[98.967134,29.128159],[98.960974,29.165792],[98.9813,29.204978],[99.024416,29.188783],[99.037351,29.20759],[99.113727,29.221171],[99.114343,29.243628],[99.075539,29.316186],[99.058909,29.417368],[99.066916,29.421018],[99.044742,29.520013],[99.052133,29.563748],[99.014561,29.607464],[98.992387,29.677163],[99.018873,29.792009],[99.0238,29.846009],[99.068148,29.931621],[99.055213,29.958587],[99.036735,30.053945],[99.044742,30.079842],[98.989308,30.151799],[98.9813,30.182843],[98.993003,30.215429],[98.970829,30.260928],[98.986844,30.280569],[98.967134,30.33482],[98.965286,30.449937],[98.932025,30.521623],[98.926482,30.569556],[98.939417,30.598923],[98.92217,30.609225],[98.907388,30.698292],[98.963438,30.728134],[98.957895,30.765166],[98.904924,30.782649],[98.850105,30.849465],[98.797135,30.87926],[98.774345,30.908019],[98.797135,30.948575],[98.806374,30.995783],[98.774961,31.031174],[98.736772,31.049121],[98.712135,31.082954],[98.710287,31.1178],[98.675179,31.15417],[98.602498,31.192062],[98.62344,31.221238],[98.60373,31.257568],[98.616048,31.3036],[98.643766,31.338876],[98.691809,31.333253],[98.773113,31.249382],[98.805758,31.279052],[98.810685,31.306668],[98.887062,31.37465],[98.84333,31.416028],[98.844562,31.429817],[98.714599,31.508935],[98.696736,31.538523],[98.651157,31.57881],[98.619128,31.591555],[98.553839,31.660349],[98.545831,31.717383],[98.516882,31.717383],[98.508875,31.751995],[98.461448,31.800327],[98.414636,31.832365],[98.426339,31.856767],[98.399238,31.895899],[98.432498,31.922825],[98.434962,32.007613],[98.402933,32.026896],[98.404781,32.045159],[98.357354,32.087253],[98.303151,32.121726],[98.260035,32.208862],[98.218768,32.234683],[98.23047,32.262521],[98.208913,32.318171],[98.218768,32.342444],[98.125145,32.401077],[98.107283,32.391476],[98.079565,32.415224],[97.940363,32.482393],[97.880001,32.486431],[97.863986,32.499051],[97.80732,32.50006],[97.795617,32.521257],[97.730944,32.527312],[97.684132,32.530339],[97.670582,32.51722],[97.540618,32.536899],[97.50243,32.530844],[97.463626,32.55506],[97.448843,32.586833],[97.411887,32.575235],[97.374315,32.546484],[97.3583,32.563635],[97.332431,32.542448],[97.334895,32.514192],[97.388481,32.501575],[97.341054,32.440987],[97.387865,32.427349],[97.424822,32.322723],[97.415583,32.296421],[97.371235,32.273148],[97.32196,32.303503],[97.299786,32.294904],[97.264062,32.182527],[97.271453,32.139971],[97.313953,32.130342],[97.293011,32.096887],[97.308409,32.076605],[97.258518,32.072041],[97.219714,32.109054],[97.201852,32.090296],[97.233881,32.063927],[97.214786,32.042623],[97.188301,32.055304],[97.169823,32.032984],[97.127323,32.044145],[97.028773,32.04871],[97.006599,32.067984],[96.935766,32.048203],[96.965947,32.008628],[96.941925,31.986297],[96.894498,32.013703],[96.863085,31.996448],[96.868629,31.964975],[96.824281,32.007613],[96.722651,32.013195],[96.742977,32.001016],[96.753448,31.944156],[96.776238,31.935015],[96.81073,31.894375],[96.794716,31.869474],[96.760223,31.860325],[96.765767,31.819144],[96.799027,31.792188],[96.840295,31.720438],[96.790404,31.698545],[96.778701,31.675629],[96.722651,31.686833],[96.691854,31.722474],[96.661057,31.705674],[96.615477,31.737236],[96.56805,31.711783],[96.519391,31.74945],[96.468884,31.769804],[96.435623,31.796258],[96.407906,31.845583],[96.389428,31.919777],[96.288414,31.919777],[96.253305,31.929936],[96.220044,31.905553],[96.188632,31.904028],[96.214501,31.876589],[96.202798,31.841008],[96.183088,31.835924],[96.178161,31.775401],[96.231131,31.749959],[96.222508,31.733164],[96.252073,31.697527],[96.245298,31.657802],[96.221892,31.647613],[96.207726,31.598691],[96.156603,31.602769],[96.148595,31.686324],[96.135661,31.70211],[96.064828,31.720438],[95.989067,31.78761],[95.983524,31.816601],[95.89914,31.81711],[95.846169,31.736218],[95.853561,31.714329],[95.823995,31.68225],[95.779648,31.748941],[95.634286,31.782523],[95.580083,31.76726],[95.546823,31.73978],[95.511714,31.750468],[95.480301,31.795749],[95.456896,31.801853],[95.406389,31.896915],[95.408852,31.918761],[95.3682,31.92892],[95.360809,31.95939],[95.395918,32.001523],[95.454432,32.007613],[95.421171,32.033999],[95.454432,32.061898],[95.440265,32.157705],[95.406389,32.182021],[95.367584,32.178982],[95.366968,32.151118],[95.31523,32.148585],[95.270266,32.194683],[95.270266,32.194683],[95.239469,32.287315],[95.241317,32.3207],[95.214216,32.321712],[95.20744,32.297433],[95.10581,32.258979],[95.079325,32.279726],[95.096571,32.322217],[95.193274,32.332331],[95.261643,32.348006],[95.228382,32.363678],[95.218527,32.397035],[95.153853,32.386423],[95.081789,32.384907],[95.075013,32.376315],[95.075013,32.376315],[95.057151,32.395014],[94.988166,32.422802],[94.944434,32.404109],[94.912405,32.41573],[94.889616,32.472295],[94.852043,32.463712],[94.80708,32.486431],[94.78737,32.522266],[94.762116,32.526303],[94.737479,32.587338],[94.638312,32.645307],[94.614291,32.673522],[94.591501,32.640772],[94.522516,32.595909],[94.459074,32.599439],[94.463386,32.572209],[94.435052,32.562626],[94.395016,32.594397],[94.371611,32.524789],[94.350053,32.533871],[94.294002,32.519743],[94.292154,32.502584],[94.250886,32.51722],[94.196684,32.51621],[94.176974,32.454117],[94.137554,32.433915],[94.091974,32.463207],[94.049474,32.469771],[94.03038,32.448057],[93.978641,32.459672],[93.960163,32.484917],[93.90904,32.463207],[93.861613,32.466237],[93.851142,32.50965],[93.820345,32.549511],[93.75136,32.56313],[93.721795,32.578261],[93.651577,32.571705],[93.618933,32.522771],[93.516687,32.47583],[93.501904,32.503593],[93.476651,32.504603],[93.4631,32.556069],[93.411977,32.558086],[93.385492,32.525294],[93.33868,32.5712],[93.308499,32.580278],[93.300492,32.619604],[93.260456,32.62666],[93.239514,32.662439],[93.210565,32.655385],[93.176688,32.6705],[93.159442,32.644803],[93.087993,32.63674],[93.069515,32.626156],[93.023935,32.703239],[93.019624,32.737477],[93.00053,32.741001],[92.964189,32.714821],[92.933392,32.719353],[92.866871,32.698203],[92.822523,32.729926],[92.789262,32.719856],[92.756618,32.743014],[92.686401,32.76516],[92.667922,32.73194],[92.634662,32.720863],[92.574916,32.741001],[92.56814,32.73194],[92.484372,32.745028],[92.459119,32.76365],[92.411076,32.748048],[92.355641,32.764657],[92.343938,32.738484],[92.310062,32.751571],[92.255243,32.720863],[92.198577,32.754591],[92.211511,32.788306],[92.193649,32.801889],[92.227526,32.821003],[92.205352,32.866255],[92.145606,32.885857],[92.101874,32.860222],[92.038432,32.860725],[92.018722,32.829552],[91.955897,32.8205],[91.896766,32.907967],[91.857962,32.90244],[91.839484,32.948152],[91.799448,32.942126],[91.752637,32.969242],[91.685499,32.989324],[91.664557,33.012913],[91.583253,33.0375],[91.55492,33.060074],[91.535826,33.10019],[91.49579,33.109214],[91.436044,33.066092],[91.370138,33.100691],[91.311624,33.108211],[91.261733,33.141291],[91.226624,33.141792],[91.18782,33.106206],[91.161335,33.108712],[91.147784,33.07211],[91.072024,33.113224],[91.037531,33.098686],[91.001807,33.11573],[90.927894,33.120241],[90.902024,33.083143],[90.88293,33.120241],[90.803474,33.114227],[90.740032,33.142293],[90.704308,33.135778],[90.627315,33.180368],[90.562642,33.229441],[90.490577,33.264977],[90.405577,33.260473],[90.363077,33.279487],[90.332896,33.310501],[90.246665,33.423959],[90.22018,33.437943],[90.107463,33.460913],[90.088984,33.478885],[90.083441,33.525295],[90.01076,33.553728],[89.984275,33.612061],[90.008296,33.687785],[89.981195,33.70322],[89.983659,33.725622],[89.907282,33.741051],[89.902355,33.758467],[89.942391,33.801246],[89.899891,33.80771],[89.837065,33.868853],[89.795181,33.865374],[89.73174,33.921509],[89.718805,33.946832],[89.688008,33.959739],[89.684928,33.990013],[89.635037,34.049537],[89.656595,34.057966],[89.655979,34.097126],[89.71203,34.131809],[89.756993,34.124874],[89.760073,34.152613],[89.789638,34.150632],[89.816739,34.16945],[89.838297,34.263477],[89.825362,34.293642],[89.86663,34.324785],[89.858623,34.359375],[89.820435,34.369255],[89.799493,34.39642],[89.819819,34.420614],[89.823515,34.455657],[89.814891,34.548871],[89.777935,34.574499],[89.798877,34.628686],[89.74837,34.641981],[89.72558,34.660689],[89.732356,34.732035],[89.799493,34.743838],[89.825978,34.796931],[89.867862,34.81069],[89.838913,34.865705],[89.814891,34.86816],[89.821051,34.902033],[89.78779,34.921664],[89.747138,34.903506],[89.707102,34.919701],[89.670146,34.887798],[89.578987,34.895162],[89.560509,34.938836],[89.59069,35.057965],[89.593153,35.104491],[89.579603,35.118688],[89.519241,35.133862],[89.46935,35.214577],[89.450255,35.223867],[89.48598,35.256616],[89.531559,35.276161],[89.494603,35.298632],[89.516161,35.330862],[89.497067,35.361128],[89.58761,35.383575],[89.619639,35.412357],[89.658443,35.425526],[89.685544,35.416259],[89.739131,35.468429],[89.765,35.482563],[89.740979,35.507412],[89.720037,35.501566],[89.699711,35.544916],[89.71203,35.581915],[89.75145,35.580942],[89.765616,35.599922],[89.726196,35.648082],[89.748986,35.66267],[89.747138,35.7516],[89.782863,35.773453],[89.767464,35.799183],[89.801957,35.848193],[89.778551,35.861775],[89.707718,35.849163],[89.654747,35.848193],[89.62395,35.859349],[89.550654,35.856924],[89.554965,35.873414],[89.489676,35.903475],[89.428082,35.917531],[89.434857,35.992136],[89.404676,36.016827],[89.417611,36.044897],[89.474893,36.022151],[89.605472,36.038123],[89.688624,36.091337],[89.711414,36.093272]]]]}},{"type":"Feature","properties":{"adcode":610000,"name":"陕西省","center":[108.948024,34.263161],"centroid":[108.887114,35.263661],"childrenNum":10,"level":"province","parent":{"adcode":100000},"subFeatureIndex":26,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[110.379257,34.600612],[110.29549,34.610956],[110.269004,34.629671],[110.229584,34.692679],[110.243135,34.725641],[110.246831,34.789068],[110.230816,34.880925],[110.262229,34.944233],[110.320743,35.00504],[110.373714,35.134351],[110.364475,35.197952],[110.378642,35.210666],[110.374946,35.251728],[110.45009,35.327933],[110.477808,35.413821],[110.531394,35.511309],[110.567735,35.539559],[110.589293,35.602355],[110.609619,35.632031],[110.57759,35.701559],[110.571431,35.800639],[110.550489,35.838005],[110.549257,35.877778],[110.511684,35.879718],[110.516612,35.918501],[110.502445,35.947575],[110.516612,35.971796],[110.49259,35.994073],[110.491974,36.034735],[110.467953,36.074893],[110.447011,36.164328],[110.45625,36.22663],[110.474112,36.248352],[110.474112,36.306729],[110.459946,36.327946],[110.487047,36.393972],[110.489511,36.430094],[110.47288,36.453203],[110.503677,36.488335],[110.488895,36.556628],[110.496902,36.582102],[110.447627,36.621018],[110.426685,36.657514],[110.394656,36.676716],[110.402663,36.697352],[110.438388,36.685835],[110.447011,36.737649],[110.407591,36.776007],[110.423605,36.818179],[110.406975,36.824886],[110.424221,36.855539],[110.376178,36.882351],[110.408823,36.892403],[110.424221,36.963685],[110.381721,37.002408],[110.382953,37.022001],[110.426685,37.008621],[110.417446,37.027257],[110.460561,37.044932],[110.49567,37.086956],[110.535706,37.115118],[110.53509,37.138021],[110.590525,37.187145],[110.651503,37.256722],[110.661974,37.281963],[110.690307,37.287201],[110.678604,37.317668],[110.695234,37.34955],[110.641648,37.360015],[110.630561,37.372858],[110.644111,37.435135],[110.740198,37.44939],[110.759292,37.474567],[110.770995,37.538184],[110.795017,37.558586],[110.771611,37.594634],[110.763604,37.639668],[110.793169,37.650567],[110.775306,37.680886],[110.706321,37.705511],[110.716792,37.728708],[110.750669,37.736281],[110.735886,37.77035],[110.680452,37.790216],[110.59422,37.922049],[110.522771,37.955088],[110.528315,37.990471],[110.507989,38.013107],[110.501829,38.097929],[110.519692,38.130889],[110.509221,38.192061],[110.528315,38.211814],[110.565887,38.215105],[110.57759,38.297345],[110.601612,38.308147],[110.661358,38.308617],[110.701394,38.353215],[110.746973,38.366355],[110.77777,38.440924],[110.796864,38.453579],[110.840596,38.439986],[110.874473,38.453579],[110.870777,38.510265],[110.907733,38.521035],[110.920052,38.581878],[110.898494,38.587024],[110.880632,38.626776],[110.916357,38.673981],[110.915125,38.704345],[110.965016,38.755699],[111.009363,38.847579],[110.995813,38.868084],[111.016755,38.889981],[111.009979,38.932823],[110.980414,38.970056],[110.998276,38.998433],[111.038313,39.020289],[111.094363,39.030053],[111.138095,39.064447],[111.147334,39.100681],[111.173819,39.135041],[111.163348,39.152678],[111.219399,39.244044],[111.213239,39.257021],[111.247732,39.302419],[111.202152,39.305197],[111.179363,39.326959],[111.186138,39.35149],[111.155341,39.338531],[111.159037,39.362596],[111.125776,39.366297],[111.087588,39.376013],[111.098059,39.401914],[111.064182,39.400989],[111.058639,39.447681],[111.10545,39.472631],[111.10545,39.497573],[111.148566,39.531277],[111.154725,39.569116],[111.136863,39.587106],[111.101138,39.559428],[111.017371,39.552045],[110.958856,39.519275],[110.891103,39.509118],[110.869545,39.494341],[110.782698,39.38804],[110.73835,39.348713],[110.731575,39.30705],[110.702626,39.273701],[110.626249,39.266751],[110.596684,39.282966],[110.566503,39.320014],[110.559728,39.351027],[110.524003,39.382952],[110.482735,39.360745],[110.434692,39.381101],[110.429764,39.341308],[110.385417,39.310291],[110.257917,39.407001],[110.243751,39.423645],[110.152592,39.45415],[110.12549,39.432891],[110.136577,39.39174],[110.161831,39.387115],[110.184005,39.355192],[110.217881,39.281113],[110.109476,39.249606],[110.041107,39.21623],[109.962267,39.212056],[109.90252,39.271848],[109.871723,39.243581],[109.961035,39.191651],[109.893897,39.141075],[109.92223,39.107183],[109.890818,39.103932],[109.851397,39.122971],[109.793499,39.074204],[109.762086,39.057476],[109.72513,39.018429],[109.665384,38.981687],[109.685094,38.968195],[109.672159,38.928167],[109.624116,38.85457],[109.549587,38.805618],[109.511399,38.833595],[109.444262,38.782763],[109.404226,38.720689],[109.338936,38.701542],[109.329081,38.66043],[109.367269,38.627711],[109.331545,38.597783],[109.276726,38.623035],[109.196654,38.552867],[109.175712,38.518694],[109.128901,38.480288],[109.054372,38.433892],[109.051292,38.385122],[109.007561,38.359316],[108.961981,38.26493],[108.976148,38.245192],[108.938575,38.207582],[108.964445,38.154894],[109.069155,38.091336],[109.050676,38.055059],[109.06977,38.023008],[109.037742,38.021593],[109.018648,37.971602],[108.982923,37.964053],[108.9743,37.931962],[108.93488,37.922521],[108.893612,37.978207],[108.883141,38.01405],[108.830786,38.049875],[108.797525,38.04799],[108.82709,37.989056],[108.798141,37.93385],[108.791982,37.872934],[108.799989,37.784068],[108.784591,37.764673],[108.791982,37.700303],[108.777815,37.683728],[108.720533,37.683728],[108.699591,37.669518],[108.628142,37.651988],[108.532671,37.690832],[108.485244,37.678044],[108.422418,37.648672],[108.301078,37.640616],[108.293071,37.656726],[108.24626,37.665728],[108.205608,37.655779],[108.193905,37.638246],[108.134159,37.622131],[108.055318,37.652462],[108.025137,37.649619],[108.012819,37.66857],[108.025753,37.696041],[107.993109,37.735335],[107.982022,37.787378],[107.884703,37.808186],[107.842819,37.828987],[107.732566,37.84931],[107.684523,37.888522],[107.65003,37.86443],[107.659269,37.844112],[107.646335,37.805349],[107.620465,37.776026],[107.599523,37.791162],[107.57119,37.776499],[107.499125,37.765619],[107.484959,37.706458],[107.425828,37.684201],[107.387024,37.691305],[107.389488,37.671413],[107.422133,37.665254],[107.361155,37.613125],[107.311264,37.609806],[107.330358,37.584201],[107.369162,37.58752],[107.345756,37.518725],[107.284162,37.481691],[107.282931,37.437036],[107.257677,37.337179],[107.273075,37.29101],[107.309416,37.239095],[107.270612,37.229089],[107.317423,37.200017],[107.336517,37.165687],[107.334669,37.138975],[107.306952,37.100799],[107.281083,37.127047],[107.268764,37.099367],[107.28601,37.054963],[107.288474,37.008143],[107.288474,37.008143],[107.291554,36.979463],[107.291554,36.979463],[107.310032,36.912502],[107.336517,36.925899],[107.365466,36.905324],[107.478183,36.908196],[107.533618,36.867031],[107.540393,36.828718],[107.5909,36.836382],[107.642023,36.819137],[107.670356,36.83303],[107.722095,36.802367],[107.742421,36.811951],[107.768291,36.792783],[107.866841,36.766899],[107.907493,36.750118],[107.914268,36.720861],[107.940754,36.694953],[107.938906,36.655594],[108.006659,36.683435],[108.02329,36.647912],[108.001732,36.639269],[108.060862,36.592194],[108.079956,36.614294],[108.092891,36.587388],[108.163724,36.563839],[108.1976,36.630144],[108.222854,36.631105],[108.204992,36.606607],[108.204992,36.606607],[108.210535,36.577296],[108.245644,36.571048],[108.262274,36.549417],[108.340498,36.559032],[108.365136,36.519603],[108.391621,36.505654],[108.408252,36.45946],[108.460606,36.422871],[108.495099,36.422389],[108.514809,36.445501],[108.510498,36.47438],[108.562852,36.43876],[108.618903,36.433946],[108.651548,36.384818],[108.641693,36.359279],[108.646004,36.254143],[108.712526,36.138716],[108.682345,36.062316],[108.688504,36.021183],[108.659555,35.990683],[108.652164,35.94806],[108.593649,35.950967],[108.562852,35.921409],[108.518505,35.905414],[108.499411,35.872444],[108.527744,35.82442],[108.533903,35.746257],[108.517889,35.699615],[108.539447,35.605761],[108.618287,35.557088],[108.625678,35.537124],[108.605968,35.503028],[108.631222,35.418698],[108.61028,35.355271],[108.614591,35.328909],[108.583178,35.294724],[108.547454,35.304981],[108.48894,35.275184],[108.36144,35.279581],[108.345426,35.300586],[108.296767,35.267855],[108.239484,35.256127],[108.221622,35.296678],[108.174811,35.304981],[108.094739,35.280069],[108.049159,35.253683],[107.949993,35.245375],[107.960464,35.263457],[107.867457,35.256127],[107.841587,35.276649],[107.745501,35.311819],[107.737494,35.267366],[107.667277,35.257104],[107.652494,35.244886],[107.686371,35.218],[107.715936,35.168114],[107.727639,35.120157],[107.769523,35.064333],[107.769523,35.064333],[107.773218,35.060904],[107.773218,35.060904],[107.814486,35.024646],[107.846515,35.024646],[107.863145,34.999158],[107.842203,34.979056],[107.741805,34.953553],[107.675284,34.9511],[107.638943,34.935402],[107.619849,34.964834],[107.564415,34.968757],[107.523763,34.909886],[107.455394,34.916757],[107.400575,34.932949],[107.369162,34.917738],[107.350068,34.93393],[107.286626,34.931968],[107.252749,34.880925],[107.189308,34.893198],[107.162206,34.944233],[107.119707,34.950119],[107.089526,34.976604],[107.08275,35.024156],[107.012533,35.029547],[106.990975,35.068252],[106.950323,35.066782],[106.901664,35.094698],[106.838222,35.080007],[106.710723,35.100574],[106.706411,35.081966],[106.615252,35.071191],[106.577064,35.089312],[106.541956,35.083925],[106.52163,35.027587],[106.494528,35.006021],[106.494528,35.006021],[106.484673,34.983959],[106.493296,34.941289],[106.527789,34.876507],[106.556122,34.861285],[106.550579,34.82936],[106.575216,34.769897],[106.539492,34.745805],[106.505615,34.746789],[106.487137,34.715311],[106.456956,34.703996],[106.442173,34.675455],[106.471122,34.634102],[106.419384,34.643458],[106.314058,34.578934],[106.341159,34.568093],[106.334384,34.517811],[106.455108,34.531617],[106.514238,34.511894],[106.513622,34.498085],[106.558586,34.48822],[106.610941,34.454177],[106.638042,34.391481],[106.717498,34.369255],[106.691013,34.337635],[106.705179,34.299575],[106.68239,34.256057],[106.652825,34.24369],[106.63373,34.260014],[106.589383,34.253584],[106.577064,34.280786],[106.526557,34.292159],[106.496376,34.238248],[106.5321,34.254079],[106.55797,34.229837],[106.585071,34.149641],[106.560434,34.109514],[106.501919,34.105055],[106.505615,34.056479],[106.471738,34.024244],[106.474202,33.970659],[106.41076,33.909093],[106.428007,33.866368],[106.475434,33.875809],[106.491448,33.834559],[106.461883,33.789807],[106.488369,33.757969],[106.482825,33.707203],[106.534564,33.695254],[106.575832,33.631497],[106.58076,33.576169],[106.540108,33.512822],[106.456956,33.532779],[106.447101,33.613058],[106.384891,33.612061],[106.35163,33.587137],[106.303587,33.604585],[106.237681,33.564201],[106.187174,33.546746],[106.108334,33.569686],[106.117573,33.602591],[106.086776,33.617045],[106.047356,33.610067],[105.971596,33.613058],[105.940183,33.570684],[105.902611,33.556222],[105.871198,33.511325],[105.842248,33.489866],[105.831162,33.451926],[105.837937,33.410971],[105.827466,33.379993],[105.709822,33.382991],[105.755401,33.329004],[105.752937,33.291994],[105.791741,33.278486],[105.799133,33.258471],[105.862574,33.234447],[105.917393,33.237951],[105.965436,33.204407],[105.968516,33.154318],[105.93156,33.178365],[105.897067,33.146803],[105.923552,33.147805],[105.934639,33.112221],[105.914929,33.066092],[105.926632,33.042517],[105.917393,32.993841],[105.861959,32.939112],[105.82685,32.950663],[105.735691,32.905454],[105.656851,32.895405],[105.638373,32.879323],[105.590329,32.87681],[105.565692,32.906962],[105.528119,32.919019],[105.49917,32.911986],[105.495475,32.873292],[105.524424,32.847654],[105.534279,32.790822],[105.555221,32.794343],[105.563844,32.724891],[105.585402,32.728919],[105.596489,32.69921],[105.677793,32.726402],[105.719061,32.759624],[105.768952,32.767676],[105.779423,32.750061],[105.822538,32.770192],[105.825002,32.824523],[105.849024,32.817985],[105.893371,32.838603],[105.93156,32.826032],[105.969132,32.849162],[106.011632,32.829552],[106.044277,32.864747],[106.071378,32.828546],[106.093552,32.82402],[106.07261,32.76365],[106.076921,32.76365],[106.076305,32.759121],[106.071378,32.758114],[106.120037,32.719856],[106.17424,32.6977],[106.254928,32.693671],[106.267863,32.673522],[106.301123,32.680071],[106.347935,32.671003],[106.389203,32.62666],[106.421231,32.616579],[106.451412,32.65992],[106.498224,32.649338],[106.517934,32.668485],[106.585687,32.68813],[106.626955,32.682086],[106.670071,32.694678],[106.733513,32.739491],[106.783404,32.735967],[106.793259,32.712807],[106.82344,32.705254],[106.854853,32.724388],[106.903512,32.721367],[106.912751,32.704247],[107.012533,32.721367],[107.066736,32.708779],[107.05996,32.686115],[107.098765,32.649338],[107.108004,32.600951],[107.080286,32.542448],[107.127098,32.482393],[107.189924,32.468256],[107.212097,32.428864],[107.263836,32.403099],[107.287858,32.457147],[107.313727,32.489965],[107.356843,32.506622],[107.382097,32.54043],[107.436299,32.529835],[107.438763,32.465732],[107.460937,32.453612],[107.456625,32.41775],[107.489886,32.425328],[107.527458,32.38238],[107.598291,32.411688],[107.648183,32.413709],[107.680827,32.397035],[107.707929,32.331826],[107.753508,32.338399],[107.812022,32.247844],[107.864377,32.201266],[107.890247,32.214432],[107.924739,32.197215],[107.979558,32.146051],[108.024521,32.177462],[108.018362,32.2119],[108.086731,32.233165],[108.143398,32.219495],[108.156948,32.239239],[108.179738,32.221521],[108.240716,32.274666],[108.310933,32.232152],[108.389773,32.263533],[108.414411,32.252399],[108.469846,32.270618],[108.507418,32.245819],[108.509882,32.201266],[108.543758,32.177969],[108.585026,32.17189],[108.676801,32.10297],[108.734084,32.106519],[108.75133,32.076098],[108.78767,32.04871],[108.837561,32.039072],[108.902235,31.984774],[108.986619,31.980205],[109.085785,31.929428],[109.123357,31.892851],[109.191111,31.85575],[109.195422,31.817618],[109.27611,31.79931],[109.279806,31.776418],[109.253936,31.759628],[109.282885,31.743343],[109.281654,31.716874],[109.381436,31.705165],[109.446109,31.722983],[109.502776,31.716365],[109.549587,31.73011],[109.585928,31.726546],[109.592087,31.789136],[109.633971,31.804396],[109.633971,31.824738],[109.60379,31.885737],[109.584696,31.900472],[109.62042,31.928412],[109.631507,31.962436],[109.590855,32.012688],[109.590855,32.047696],[109.621652,32.106519],[109.58716,32.161251],[109.604406,32.199241],[109.592703,32.219495],[109.550203,32.225065],[109.528645,32.270112],[109.495385,32.300468],[109.513247,32.342444],[109.502776,32.38895],[109.529877,32.405625],[109.526797,32.43341],[109.575457,32.506622],[109.637051,32.540935],[109.619804,32.56767],[109.631507,32.599943],[109.726978,32.608513],[109.746072,32.594901],[109.816905,32.577252],[109.910528,32.592884],[109.97089,32.577756],[110.017701,32.546989],[110.084223,32.580782],[110.090382,32.617083],[110.124259,32.616579],[110.153824,32.593388],[110.206179,32.633212],[110.156903,32.683093],[110.159367,32.767173],[110.127338,32.77774],[110.142121,32.802895],[110.105164,32.832569],[110.051578,32.851676],[109.988752,32.886359],[109.927158,32.887364],[109.907448,32.903947],[109.856941,32.910479],[109.847702,32.893395],[109.789804,32.882339],[109.76455,32.909474],[109.785492,32.987316],[109.794731,33.067095],[109.704188,33.101694],[109.688174,33.116733],[109.576073,33.110216],[109.522486,33.138785],[109.468283,33.140288],[109.438718,33.152314],[109.498464,33.207412],[109.514479,33.237951],[109.60687,33.235949],[109.619804,33.275484],[109.649985,33.251465],[109.693101,33.254468],[109.732521,33.231443],[109.813209,33.236449],[109.852013,33.247961],[109.916687,33.229942],[109.973353,33.203907],[109.999223,33.212419],[110.031252,33.191888],[110.164911,33.209415],[110.218497,33.163336],[110.285635,33.171352],[110.33799,33.160331],[110.372482,33.186379],[110.398352,33.176862],[110.398352,33.176862],[110.471032,33.171352],[110.54125,33.255469],[110.57759,33.250464],[110.59422,33.168346],[110.623785,33.143796],[110.650887,33.157324],[110.702626,33.097182],[110.753133,33.15031],[110.824582,33.158327],[110.828893,33.201403],[110.865234,33.213921],[110.9219,33.203907],[110.960704,33.253967],[110.984726,33.255469],[111.025994,33.330504],[111.025994,33.375495],[110.996429,33.435946],[111.02661,33.467903],[111.021066,33.471397],[111.021682,33.476389],[111.02661,33.478386],[111.002588,33.535772],[111.00382,33.578662],[110.966864,33.609071],[110.878784,33.634486],[110.823966,33.685793],[110.831973,33.713675],[110.81719,33.751003],[110.782082,33.796272],[110.74143,33.798759],[110.712481,33.833564],[110.66259,33.85295],[110.612083,33.852453],[110.587445,33.887733],[110.628713,33.910086],[110.627481,33.925482],[110.665669,33.937895],[110.671213,33.966192],[110.620706,34.035652],[110.587445,34.023252],[110.591757,34.101586],[110.61393,34.113478],[110.642264,34.161032],[110.621938,34.177372],[110.55788,34.193214],[110.55172,34.213012],[110.507989,34.217466],[110.43962,34.243196],[110.428533,34.288203],[110.451938,34.292653],[110.503677,34.33714],[110.473496,34.393457],[110.403279,34.433448],[110.403279,34.433448],[110.360779,34.516825],[110.372482,34.544435],[110.404511,34.557743],[110.366939,34.566614],[110.379257,34.600612]]],[[[111.02661,33.478386],[111.021682,33.476389],[111.021066,33.471397],[111.02661,33.467903],[111.02661,33.478386]]],[[[106.076921,32.76365],[106.07261,32.76365],[106.071378,32.758114],[106.076305,32.759121],[106.076921,32.76365]]]]}},{"type":"Feature","properties":{"adcode":620000,"name":"甘肃省","center":[103.823557,36.058039],"childrenNum":14,"level":"province","parent":{"adcode":100000},"subFeatureIndex":27,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[106.506231,35.737514],[106.504383,35.736057],[106.498224,35.732656],[106.49268,35.732656],[106.434782,35.688436],[106.460036,35.643705],[106.47913,35.575101],[106.460036,35.578995],[106.440941,35.52641],[106.465579,35.481101],[106.490217,35.480613],[106.483441,35.450393],[106.503767,35.415284],[106.501304,35.364056],[106.472354,35.310842],[106.415688,35.276161],[106.368261,35.273718],[106.363333,35.238532],[106.319601,35.265411],[106.241377,35.358687],[106.237681,35.409431],[106.196414,35.409919],[106.173008,35.437716],[106.129892,35.393333],[106.113262,35.361616],[106.083081,35.421624],[106.073226,35.420649],[106.067682,35.436254],[106.073226,35.447468],[106.071378,35.449418],[106.06953,35.458193],[106.071994,35.463555],[106.054132,35.45478],[106.034422,35.469404],[106.002393,35.438692],[105.894603,35.413821],[105.897683,35.451368],[106.048588,35.488898],[106.047356,35.498155],[106.023335,35.49377],[106.017175,35.519103],[105.900147,35.54735],[105.868734,35.540046],[105.847176,35.490359],[105.816379,35.575101],[105.800365,35.564878],[105.762176,35.602841],[105.759097,35.634464],[105.713517,35.650513],[105.722756,35.673366],[105.690727,35.698643],[105.723988,35.725854],[105.740618,35.698643],[105.759097,35.724883],[105.70243,35.733142],[105.667322,35.749657],[105.595873,35.715651],[105.481924,35.727312],[105.457286,35.771511],[105.432033,35.787533],[105.428953,35.819082],[105.408627,35.822479],[105.38091,35.792873],[105.371055,35.844312],[105.39754,35.857409],[105.350113,35.875839],[105.324859,35.941761],[105.343954,36.033767],[105.406163,36.074409],[105.430801,36.10391],[105.491163,36.101009],[105.515185,36.147415],[105.478844,36.213111],[105.460366,36.223733],[105.45975,36.268137],[105.476381,36.293224],[105.455439,36.321678],[105.425873,36.330357],[105.401236,36.369881],[105.398156,36.430575],[105.363048,36.443093],[105.362432,36.496514],[105.322396,36.535954],[105.281744,36.522489],[105.252179,36.553263],[105.2762,36.563358],[105.261418,36.602764],[105.22015,36.631105],[105.225693,36.664716],[105.201056,36.700711],[105.218302,36.730455],[105.272505,36.739567],[105.275584,36.752515],[105.319932,36.742924],[105.340874,36.764502],[105.334714,36.80093],[105.303302,36.820575],[105.279896,36.86751],[105.244787,36.894796],[105.178882,36.892403],[105.185657,36.942164],[105.165331,36.99476],[105.128991,36.996194],[105.05939,37.022956],[105.03968,37.007187],[105.004571,37.035378],[104.95468,37.040156],[104.954064,37.077407],[104.914644,37.097935],[104.888158,37.15901],[104.864753,37.17284],[104.85613,37.211933],[104.776673,37.246718],[104.717543,37.208597],[104.638087,37.201923],[104.600515,37.242907],[104.624536,37.298627],[104.651022,37.290534],[104.673812,37.317668],[104.713848,37.329566],[104.662109,37.367626],[104.679971,37.408044],[104.521059,37.43466],[104.499501,37.421353],[104.448994,37.42468],[104.437907,37.445589],[104.365226,37.418026],[104.298705,37.414223],[104.287002,37.428007],[104.237727,37.411847],[104.183524,37.406618],[104.089285,37.465067],[103.935916,37.572818],[103.874938,37.604117],[103.841062,37.64725],[103.683381,37.777919],[103.627947,37.797783],[103.40744,37.860651],[103.362477,38.037621],[103.368636,38.08898],[103.53494,38.156776],[103.507838,38.280905],[103.465339,38.353215],[103.416063,38.404821],[103.85954,38.64454],[104.011677,38.85923],[104.044322,38.895105],[104.173053,38.94446],[104.196459,38.9882],[104.190915,39.042139],[104.207546,39.083495],[104.171205,39.160567],[104.047401,39.297788],[104.073271,39.351953],[104.089901,39.419947],[103.955626,39.456923],[103.85338,39.461543],[103.728961,39.430117],[103.595302,39.386652],[103.428998,39.353341],[103.344615,39.331588],[103.259615,39.263971],[103.188166,39.215302],[103.133347,39.192579],[103.007696,39.099753],[102.883892,39.120649],[102.616574,39.171703],[102.579002,39.183301],[102.45335,39.255167],[102.3548,39.231993],[102.276576,39.188868],[102.050526,39.141075],[102.012338,39.127149],[101.902701,39.111827],[101.833715,39.08907],[101.926106,39.000758],[101.955055,38.985874],[102.045599,38.904885],[102.075164,38.891378],[101.941505,38.808883],[101.873751,38.733761],[101.777049,38.66043],[101.672955,38.6908],[101.601506,38.65529],[101.562702,38.713218],[101.412413,38.764099],[101.331109,38.777164],[101.307087,38.80282],[101.34158,38.822406],[101.33542,38.847113],[101.24303,38.860628],[101.237486,38.907214],[101.198682,38.943064],[101.228863,39.020754],[101.117378,38.975174],[100.969553,38.946788],[100.961545,39.005874],[100.901799,39.030053],[100.875314,39.002619],[100.835278,39.025869],[100.829118,39.075133],[100.864227,39.106719],[100.842669,39.199999],[100.842053,39.405614],[100.707778,39.404689],[100.606764,39.387577],[100.498975,39.400527],[100.500823,39.481408],[100.44354,39.485565],[100.326512,39.509118],[100.301258,39.572345],[100.314193,39.606935],[100.250135,39.685274],[100.128179,39.702312],[100.040716,39.757083],[99.958796,39.769504],[99.904593,39.785601],[99.822058,39.860063],[99.672384,39.888079],[99.469124,39.875221],[99.440791,39.885783],[99.459885,39.898181],[99.491298,39.884406],[99.533182,39.891753],[99.714268,39.972061],[99.751225,40.006909],[99.841152,40.013326],[99.927383,40.063727],[99.955716,40.150695],[100.007455,40.20008],[100.169447,40.277743],[100.169447,40.541131],[100.242744,40.618855],[100.237201,40.716905],[100.224882,40.727337],[100.107853,40.875475],[100.057346,40.908049],[99.985897,40.909858],[99.673,40.93292],[99.565827,40.846961],[99.174705,40.858278],[99.172858,40.747289],[99.12543,40.715091],[99.102025,40.676522],[99.041662,40.693767],[98.984996,40.782644],[98.790975,40.705564],[98.80699,40.660181],[98.802678,40.607043],[98.762642,40.639748],[98.72199,40.657911],[98.689345,40.691952],[98.668403,40.773128],[98.569853,40.746836],[98.627751,40.677884],[98.344419,40.568413],[98.333332,40.918903],[98.25018,40.93925],[98.184891,40.988056],[98.142391,41.001607],[97.971776,41.09774],[97.903407,41.168057],[97.629314,41.440498],[97.613915,41.477276],[97.84674,41.656379],[97.653335,41.986856],[97.500582,42.243894],[97.371235,42.457076],[97.172903,42.795257],[96.968411,42.756161],[96.742361,42.75704],[96.386348,42.727592],[96.166458,42.623314],[96.103632,42.604375],[96.072219,42.569566],[96.02356,42.542675],[96.0174,42.482239],[95.978596,42.436762],[96.06606,42.414674],[96.042038,42.352787],[96.040806,42.326688],[96.178161,42.21775],[96.077147,42.149457],[96.13874,42.05399],[96.137509,42.019765],[96.117183,41.985966],[96.054973,41.936124],[95.998306,41.906289],[95.855408,41.849699],[95.801206,41.848361],[95.759322,41.835878],[95.65646,41.826067],[95.57146,41.796181],[95.445193,41.719841],[95.39407,41.693481],[95.335556,41.644305],[95.299831,41.565994],[95.247476,41.61344],[95.194505,41.694821],[95.199433,41.719395],[95.16494,41.735474],[95.135991,41.772976],[95.110738,41.768513],[95.011572,41.726541],[94.969072,41.718948],[94.861898,41.668451],[94.809543,41.619256],[94.750413,41.538227],[94.534219,41.505966],[94.184365,41.268444],[94.01067,41.114875],[93.908424,40.983539],[93.809874,40.879548],[93.820961,40.793519],[93.760599,40.664721],[93.506216,40.648376],[92.928465,40.572504],[92.920458,40.391792],[92.906907,40.310609],[92.796654,40.153897],[92.745531,39.868331],[92.687632,39.657174],[92.639589,39.514196],[92.52564,39.368611],[92.378431,39.258411],[92.339011,39.236628],[92.343938,39.146181],[92.366112,39.096037],[92.366728,39.059335],[92.41046,39.03842],[92.459119,39.042604],[92.459119,39.063982],[92.489916,39.099753],[92.545966,39.111362],[92.659299,39.109969],[92.765857,39.136898],[92.866871,39.138754],[92.889045,39.160103],[92.938936,39.169848],[92.978356,39.143396],[93.043029,39.146645],[93.115094,39.17959],[93.142196,39.160567],[93.131725,39.108112],[93.165601,39.090928],[93.198246,39.045857],[93.179152,38.923977],[93.237666,38.916062],[93.274007,38.896036],[93.453245,38.915596],[93.729186,38.924443],[93.834511,38.867618],[93.884403,38.867618],[93.884403,38.826136],[93.769838,38.821007],[93.756287,38.807484],[93.773533,38.771099],[93.800019,38.750566],[93.885018,38.720689],[93.95154,38.715086],[93.973098,38.724891],[94.281067,38.7599],[94.370379,38.7627],[94.511429,38.445142],[94.527443,38.425922],[94.527443,38.365416],[94.56132,38.351807],[94.582878,38.36917],[94.672805,38.386998],[94.812623,38.385591],[94.861282,38.393565],[94.884072,38.414669],[94.973999,38.430142],[95.045448,38.418889],[95.072549,38.402476],[95.122441,38.417014],[95.140919,38.392158],[95.185266,38.379492],[95.209904,38.327868],[95.229614,38.330685],[95.259179,38.302981],[95.315846,38.318947],[95.408236,38.300163],[95.440881,38.310965],[95.455664,38.291709],[95.487693,38.314721],[95.51849,38.294997],[95.585011,38.343359],[95.608417,38.339134],[95.671858,38.388405],[95.703887,38.400131],[95.723597,38.378554],[95.775952,38.356031],[95.83693,38.344298],[95.852945,38.287481],[95.89606,38.2903],[95.932401,38.259291],[95.93856,38.237202],[96.006929,38.207582],[96.06606,38.173245],[96.109175,38.187358],[96.221892,38.149246],[96.252689,38.167599],[96.264392,38.145952],[96.313051,38.161952],[96.301964,38.183124],[96.335841,38.246132],[96.378341,38.277146],[96.46334,38.277616],[96.665369,38.23015],[96.655514,38.295936],[96.638883,38.307208],[96.626564,38.356031],[96.698013,38.422172],[96.707868,38.459203],[96.6666,38.483567],[96.706637,38.505582],[96.780549,38.504177],[96.800259,38.52759],[96.767614,38.552399],[96.808882,38.582346],[96.7941,38.608072],[96.847071,38.599186],[96.876636,38.580475],[96.961019,38.558015],[97.055874,38.594508],[97.047251,38.653888],[97.057722,38.67258],[97.009063,38.702477],[97.023229,38.755699],[97.00044,38.7613],[96.987505,38.793025],[96.993664,38.834993],[96.983809,38.869016],[96.940693,38.90768],[96.938846,38.95563],[96.965331,39.017034],[96.95794,39.041674],[96.969643,39.097895],[97.012142,39.142004],[96.962251,39.198144],[97.017686,39.208347],[97.060186,39.19768],[97.14149,39.199999],[97.220946,39.193042],[97.315185,39.164744],[97.347213,39.167528],[97.371235,39.140611],[97.401416,39.146645],[97.458698,39.117863],[97.504894,39.076527],[97.58127,39.052364],[97.679205,39.010524],[97.701379,38.963076],[97.828878,38.93003],[97.875689,38.898365],[98.009348,38.85923],[98.029058,38.834061],[98.068478,38.816344],[98.091884,38.786495],[98.167645,38.840121],[98.242173,38.880664],[98.235398,38.918855],[98.276666,38.963541],[98.287753,38.992386],[98.280977,39.027263],[98.316702,39.040744],[98.383839,39.029588],[98.401086,39.001688],[98.432498,38.996107],[98.428187,38.976104],[98.457752,38.952838],[98.526737,38.95563],[98.584635,38.93003],[98.624056,38.959353],[98.612353,38.977035],[98.661628,38.993782],[98.70536,39.043533],[98.730613,39.057011],[98.743548,39.086747],[98.816845,39.085818],[98.818076,39.064911],[98.886446,39.040744],[98.903076,39.012384],[98.951735,38.987735],[99.054597,38.97657],[99.107568,38.951907],[99.071843,38.921184],[99.068764,38.896968],[99.141445,38.852706],[99.222133,38.788827],[99.291118,38.765966],[99.361951,38.718354],[99.375502,38.684727],[99.412458,38.665571],[99.450646,38.60433],[99.501769,38.612281],[99.52887,38.546314],[99.585537,38.498556],[99.63974,38.474666],[99.65945,38.449361],[99.727203,38.415607],[99.758,38.410449],[99.826985,38.370109],[99.960028,38.320825],[100.001912,38.315191],[100.049955,38.283254],[100.071513,38.284663],[100.117093,38.253652],[100.126332,38.231561],[100.182998,38.222158],[100.159592,38.291239],[100.163904,38.328337],[100.136803,38.33444],[100.093071,38.407166],[100.022238,38.432017],[100.001296,38.467169],[100.025933,38.507923],[100.064122,38.518694],[100.086911,38.492936],[100.113397,38.497151],[100.163288,38.461546],[100.24028,38.441861],[100.259374,38.366355],[100.301874,38.388405],[100.331439,38.337257],[100.318505,38.329276],[100.396729,38.293118],[100.424446,38.307208],[100.432453,38.275267],[100.459555,38.2654],[100.474953,38.288891],[100.516837,38.272448],[100.545786,38.247072],[100.595061,38.242372],[100.619083,38.26587],[100.71517,38.253652],[100.752126,38.238612],[100.825423,38.158658],[100.860531,38.148305],[100.913502,38.17889],[100.93814,38.16007],[100.91843,38.129006],[100.922125,38.084741],[100.888864,38.056001],[100.895024,38.013107],[100.91843,37.999432],[100.964009,38.011221],[101.077342,37.941874],[101.103211,37.946593],[101.114298,37.92016],[101.152486,37.891356],[101.159262,37.86821],[101.202994,37.84742],[101.276906,37.83655],[101.362522,37.791162],[101.382848,37.822369],[101.459224,37.86632],[101.551615,37.835604],[101.598427,37.827569],[101.670491,37.754264],[101.659405,37.733441],[101.791832,37.696041],[101.815853,37.654357],[101.854657,37.664781],[101.873135,37.686569],[101.946432,37.728235],[101.998787,37.724921],[102.036359,37.685149],[102.048678,37.651515],[102.035128,37.627819],[102.102265,37.582304],[102.131214,37.54625],[102.103497,37.482641],[102.125055,37.48549],[102.176794,37.458892],[102.19712,37.420403],[102.299981,37.391404],[102.29875,37.370004],[102.368351,37.327662],[102.428097,37.308624],[102.419474,37.294343],[102.45335,37.271487],[102.457662,37.248147],[102.490307,37.223371],[102.533422,37.217176],[102.578386,37.17284],[102.599944,37.174748],[102.642444,37.099845],[102.583314,37.104618],[102.488459,37.078362],[102.506321,37.019134],[102.450271,36.968467],[102.499546,36.954599],[102.526031,36.928291],[102.56114,36.91968],[102.587009,36.869904],[102.639364,36.852666],[102.720052,36.767858],[102.692335,36.775528],[102.639364,36.732853],[102.612879,36.738129],[102.601176,36.710307],[102.630741,36.650793],[102.684328,36.619097],[102.724364,36.613813],[102.714509,36.599401],[102.761936,36.568645],[102.734219,36.562396],[102.753313,36.525855],[102.793349,36.497957],[102.771791,36.47438],[102.829689,36.365544],[102.831537,36.365544],[102.838928,36.345783],[102.836465,36.344819],[102.845704,36.331803],[102.896827,36.331803],[102.922696,36.298047],[103.024942,36.256556],[103.021246,36.232906],[103.066826,36.216974],[103.048964,36.199107],[102.986754,36.193312],[102.965812,36.151765],[102.948566,36.150798],[102.941174,36.104877],[102.882044,36.082632],[102.932551,36.048285],[102.968276,36.044414],[102.951645,36.021667],[102.971971,35.995525],[102.942406,35.92674],[102.954725,35.858864],[102.94487,35.829757],[102.914073,35.845282],[102.81737,35.850133],[102.787189,35.862745],[102.739146,35.821023],[102.715125,35.815685],[102.686175,35.771996],[102.707733,35.70496],[102.744074,35.657807],[102.7644,35.653431],[102.763168,35.612086],[102.808747,35.560496],[102.746537,35.545403],[102.729291,35.523487],[102.782878,35.527871],[102.743458,35.494745],[102.695414,35.528358],[102.570995,35.548324],[102.531575,35.580455],[102.503241,35.585322],[102.49893,35.545403],[102.437952,35.455268],[102.447807,35.437229],[102.408387,35.409431],[102.314764,35.434303],[102.293822,35.424063],[102.287663,35.36552],[102.317844,35.343067],[102.311684,35.31426],[102.280887,35.303028],[102.3123,35.282512],[102.370199,35.263946],[102.365887,35.235599],[102.404075,35.179366],[102.346793,35.164201],[102.310452,35.128967],[102.29567,35.071681],[102.252554,35.048657],[102.218062,35.057475],[102.211286,35.034937],[102.176178,35.032977],[102.157699,35.010923],[102.133678,35.014844],[102.094874,34.986901],[102.048062,34.910868],[102.068388,34.887798],[101.985852,34.90007],[101.916867,34.873561],[101.923027,34.835746],[101.917483,34.705964],[101.919947,34.621791],[101.934729,34.58731],[101.956287,34.582876],[101.97415,34.548871],[102.001867,34.538519],[102.093026,34.536547],[102.139837,34.50351],[102.155852,34.507456],[102.169402,34.457631],[102.205743,34.407777],[102.259329,34.355917],[102.237156,34.34307],[102.237156,34.34307],[102.186649,34.352952],[102.149692,34.271885],[102.067772,34.293642],[102.062229,34.227858],[102.01357,34.218456],[102.030816,34.190739],[102.003099,34.162022],[101.965526,34.167469],[101.955055,34.109514],[101.897773,34.133791],[101.874367,34.130323],[101.851578,34.153108],[101.836795,34.124378],[101.788136,34.131809],[101.764114,34.122892],[101.736397,34.080275],[101.718535,34.083249],[101.703136,34.119424],[101.674187,34.110506],[101.6206,34.178857],[101.53868,34.212022],[101.492485,34.195689],[101.482014,34.218951],[101.417956,34.227858],[101.369913,34.248143],[101.327413,34.24468],[101.325565,34.268423],[101.268899,34.278808],[101.228863,34.298586],[101.235022,34.325279],[101.193754,34.336646],[101.178356,34.320831],[101.098284,34.329233],[101.054552,34.322808],[100.986799,34.374689],[100.951074,34.38358],[100.895024,34.375183],[100.868538,34.332693],[100.821727,34.317371],[100.798321,34.260014],[100.809408,34.247153],[100.764445,34.178857],[100.806329,34.155584],[100.848828,34.089692],[100.870386,34.083744],[100.880857,34.036644],[100.93506,33.990013],[100.927669,33.975126],[100.965857,33.946832],[100.994806,33.891707],[101.023139,33.896178],[101.054552,33.863386],[101.153718,33.8445],[101.153102,33.823124],[101.190675,33.791796],[101.186363,33.741051],[101.162957,33.719649],[101.177124,33.685295],[101.166653,33.659894],[101.217776,33.669856],[101.23687,33.685793],[101.302776,33.657902],[101.385312,33.644949],[101.424732,33.655411],[101.428427,33.680315],[101.501724,33.702723],[101.58426,33.674339],[101.585492,33.645448],[101.616905,33.598603],[101.611977,33.565199],[101.622448,33.502343],[101.718535,33.494857],[101.748716,33.505337],[101.769042,33.538765],[101.783208,33.556721],[101.831252,33.554726],[101.844186,33.602591],[101.884222,33.578163],[101.907012,33.539264],[101.906396,33.48188],[101.946432,33.442937],[101.915635,33.425957],[101.887302,33.383991],[101.877447,33.314502],[101.769658,33.26898],[101.770274,33.248962],[101.83002,33.213921],[101.841723,33.184876],[101.825708,33.119239],[101.865744,33.103198],[101.887302,33.135778],[101.921795,33.153817],[101.935345,33.186879],[101.99386,33.1999],[102.054838,33.189884],[102.08933,33.204908],[102.08933,33.227439],[102.117047,33.288492],[102.144765,33.273983],[102.160163,33.242956],[102.200815,33.223434],[102.217446,33.247961],[102.192192,33.337005],[102.218062,33.349503],[102.258098,33.409472],[102.296286,33.413969],[102.310452,33.397982],[102.368967,33.41247],[102.392988,33.404477],[102.447807,33.454922],[102.462589,33.449429],[102.461358,33.501345],[102.446575,33.53228],[102.477988,33.543254],[102.440416,33.574673],[102.346793,33.605582],[102.31538,33.665374],[102.342481,33.725622],[102.284583,33.719151],[102.324619,33.754486],[102.296286,33.783838],[102.243315,33.786823],[102.261177,33.821136],[102.25317,33.861399],[102.136142,33.965199],[102.16817,33.983066],[102.226069,33.963214],[102.248858,33.98654],[102.287047,33.977607],[102.315996,33.993983],[102.345561,33.969666],[102.392372,33.971651],[102.406539,34.033172],[102.437336,34.087214],[102.471213,34.072839],[102.511865,34.086222],[102.615958,34.099604],[102.649219,34.080275],[102.655994,34.113478],[102.598712,34.14766],[102.651067,34.165983],[102.664002,34.192719],[102.694799,34.198659],[102.728675,34.235774],[102.779798,34.236764],[102.798276,34.272874],[102.856791,34.270895],[102.85987,34.301058],[102.911609,34.312923],[102.949181,34.292159],[102.977515,34.252595],[102.973203,34.205588],[103.005848,34.184798],[103.052043,34.195194],[103.100087,34.181828],[103.124108,34.162022],[103.121644,34.112487],[103.178927,34.079779],[103.129652,34.065899],[103.119797,34.03466],[103.147514,34.036644],[103.157369,33.998944],[103.120413,33.953286],[103.1315,33.931937],[103.16476,33.929454],[103.181391,33.900649],[103.153673,33.819147],[103.165376,33.805721],[103.228202,33.79478],[103.24976,33.814175],[103.284868,33.80224],[103.278709,33.774387],[103.35447,33.743539],[103.434542,33.752993],[103.464723,33.80224],[103.518309,33.807213],[103.545411,33.719649],[103.520157,33.678323],[103.552186,33.671351],[103.563889,33.699735],[103.593454,33.716164],[103.645809,33.708697],[103.667983,33.685793],[103.690772,33.69376],[103.778236,33.658898],[103.861388,33.682307],[103.980264,33.670852],[104.046169,33.686291],[104.103452,33.663381],[104.176749,33.5996],[104.155191,33.542755],[104.180444,33.472895],[104.213089,33.446932],[104.22048,33.404477],[104.272219,33.391486],[104.292545,33.336505],[104.373849,33.345004],[104.420045,33.327004],[104.386168,33.298497],[104.333813,33.315502],[104.303632,33.304499],[104.323958,33.26898],[104.32827,33.223934],[104.351059,33.158828],[104.378161,33.109214],[104.337509,33.038002],[104.391711,33.035493],[104.426204,33.010906],[104.383704,32.994343],[104.378161,32.953174],[104.345516,32.940117],[104.288234,32.942628],[104.277147,32.90244],[104.294393,32.835586],[104.363994,32.822511],[104.458849,32.748551],[104.51182,32.753585],[104.526602,32.728416],[104.582653,32.722374],[104.592508,32.695685],[104.643015,32.661935],[104.696601,32.673522],[104.739717,32.635228],[104.795768,32.643292],[104.820405,32.662943],[104.845659,32.653873],[104.881999,32.600951],[104.925115,32.607505],[105.026745,32.650346],[105.0791,32.637244],[105.111128,32.593893],[105.185041,32.617587],[105.215222,32.63674],[105.219534,32.666469],[105.263265,32.652362],[105.297758,32.656897],[105.347033,32.68259],[105.368591,32.712807],[105.448663,32.732946],[105.454207,32.767173],[105.427721,32.784281],[105.396308,32.85067],[105.396308,32.85067],[105.38091,32.876307],[105.408011,32.885857],[105.414171,32.922034],[105.467757,32.930071],[105.49917,32.911986],[105.528119,32.919019],[105.565692,32.906962],[105.590329,32.87681],[105.638373,32.879323],[105.656851,32.895405],[105.735691,32.905454],[105.82685,32.950663],[105.861959,32.939112],[105.917393,32.993841],[105.926632,33.042517],[105.914929,33.066092],[105.934639,33.112221],[105.923552,33.147805],[105.897067,33.146803],[105.93156,33.178365],[105.968516,33.154318],[105.965436,33.204407],[105.917393,33.237951],[105.862574,33.234447],[105.799133,33.258471],[105.791741,33.278486],[105.752937,33.291994],[105.755401,33.329004],[105.709822,33.382991],[105.827466,33.379993],[105.837937,33.410971],[105.831162,33.451926],[105.842248,33.489866],[105.871198,33.511325],[105.902611,33.556222],[105.940183,33.570684],[105.971596,33.613058],[106.047356,33.610067],[106.086776,33.617045],[106.117573,33.602591],[106.108334,33.569686],[106.187174,33.546746],[106.237681,33.564201],[106.303587,33.604585],[106.35163,33.587137],[106.384891,33.612061],[106.447101,33.613058],[106.456956,33.532779],[106.540108,33.512822],[106.58076,33.576169],[106.575832,33.631497],[106.534564,33.695254],[106.482825,33.707203],[106.488369,33.757969],[106.461883,33.789807],[106.491448,33.834559],[106.475434,33.875809],[106.428007,33.866368],[106.41076,33.909093],[106.474202,33.970659],[106.471738,34.024244],[106.505615,34.056479],[106.501919,34.105055],[106.560434,34.109514],[106.585071,34.149641],[106.55797,34.229837],[106.5321,34.254079],[106.496376,34.238248],[106.526557,34.292159],[106.577064,34.280786],[106.589383,34.253584],[106.63373,34.260014],[106.652825,34.24369],[106.68239,34.256057],[106.705179,34.299575],[106.691013,34.337635],[106.717498,34.369255],[106.638042,34.391481],[106.610941,34.454177],[106.558586,34.48822],[106.513622,34.498085],[106.514238,34.511894],[106.455108,34.531617],[106.334384,34.517811],[106.341159,34.568093],[106.314058,34.578934],[106.419384,34.643458],[106.471122,34.634102],[106.442173,34.675455],[106.456956,34.703996],[106.487137,34.715311],[106.505615,34.746789],[106.539492,34.745805],[106.575216,34.769897],[106.550579,34.82936],[106.556122,34.861285],[106.527789,34.876507],[106.493296,34.941289],[106.484673,34.983959],[106.494528,35.006021],[106.494528,35.006021],[106.52163,35.027587],[106.541956,35.083925],[106.577064,35.089312],[106.615252,35.071191],[106.706411,35.081966],[106.710723,35.100574],[106.838222,35.080007],[106.901664,35.094698],[106.950323,35.066782],[106.990975,35.068252],[107.012533,35.029547],[107.08275,35.024156],[107.089526,34.976604],[107.119707,34.950119],[107.162206,34.944233],[107.189308,34.893198],[107.252749,34.880925],[107.286626,34.931968],[107.350068,34.93393],[107.369162,34.917738],[107.400575,34.932949],[107.455394,34.916757],[107.523763,34.909886],[107.564415,34.968757],[107.619849,34.964834],[107.638943,34.935402],[107.675284,34.9511],[107.741805,34.953553],[107.842203,34.979056],[107.863145,34.999158],[107.846515,35.024646],[107.814486,35.024646],[107.773218,35.060904],[107.773218,35.060904],[107.769523,35.064333],[107.769523,35.064333],[107.727639,35.120157],[107.715936,35.168114],[107.686371,35.218],[107.652494,35.244886],[107.667277,35.257104],[107.737494,35.267366],[107.745501,35.311819],[107.841587,35.276649],[107.867457,35.256127],[107.960464,35.263457],[107.949993,35.245375],[108.049159,35.253683],[108.094739,35.280069],[108.174811,35.304981],[108.221622,35.296678],[108.239484,35.256127],[108.296767,35.267855],[108.345426,35.300586],[108.36144,35.279581],[108.48894,35.275184],[108.547454,35.304981],[108.583178,35.294724],[108.614591,35.328909],[108.61028,35.355271],[108.631222,35.418698],[108.605968,35.503028],[108.625678,35.537124],[108.618287,35.557088],[108.539447,35.605761],[108.517889,35.699615],[108.533903,35.746257],[108.527744,35.82442],[108.499411,35.872444],[108.518505,35.905414],[108.562852,35.921409],[108.593649,35.950967],[108.652164,35.94806],[108.659555,35.990683],[108.688504,36.021183],[108.682345,36.062316],[108.712526,36.138716],[108.646004,36.254143],[108.641693,36.359279],[108.651548,36.384818],[108.618903,36.433946],[108.562852,36.43876],[108.510498,36.47438],[108.514809,36.445501],[108.495099,36.422389],[108.460606,36.422871],[108.408252,36.45946],[108.391621,36.505654],[108.365136,36.519603],[108.340498,36.559032],[108.262274,36.549417],[108.245644,36.571048],[108.210535,36.577296],[108.204992,36.606607],[108.204992,36.606607],[108.222854,36.631105],[108.1976,36.630144],[108.163724,36.563839],[108.092891,36.587388],[108.079956,36.614294],[108.060862,36.592194],[108.001732,36.639269],[108.02329,36.647912],[108.006659,36.683435],[107.938906,36.655594],[107.940754,36.694953],[107.914268,36.720861],[107.907493,36.750118],[107.866841,36.766899],[107.768291,36.792783],[107.742421,36.811951],[107.722095,36.802367],[107.670356,36.83303],[107.642023,36.819137],[107.5909,36.836382],[107.540393,36.828718],[107.533618,36.867031],[107.478183,36.908196],[107.365466,36.905324],[107.336517,36.925899],[107.310032,36.912502],[107.291554,36.979463],[107.291554,36.979463],[107.288474,37.008143],[107.288474,37.008143],[107.28601,37.054963],[107.268764,37.099367],[107.234887,37.096503],[107.181916,37.143269],[107.133873,37.134681],[107.095685,37.115595],[107.030395,37.140883],[107.031011,37.108436],[106.998367,37.106527],[106.905976,37.151378],[106.912135,37.110345],[106.891193,37.098413],[106.818512,37.141838],[106.776012,37.158056],[106.772933,37.120367],[106.750143,37.09889],[106.728585,37.121321],[106.687933,37.12991],[106.673151,37.1113],[106.6171,37.135158],[106.605397,37.127524],[106.645433,37.064992],[106.666991,37.016745],[106.646665,37.000496],[106.64297,36.962729],[106.594926,36.967988],[106.595542,36.94025],[106.540108,36.984244],[106.549347,36.941685],[106.601702,36.918244],[106.609709,36.878521],[106.609709,36.878521],[106.626955,36.892403],[106.637426,36.867031],[106.637426,36.867031],[106.657752,36.820575],[106.627571,36.752995],[106.644817,36.72278],[106.59431,36.750118],[106.514238,36.715584],[106.519782,36.708868],[106.519782,36.708868],[106.530869,36.690154],[106.490833,36.685835],[106.491448,36.628703],[106.444637,36.624861],[106.465579,36.583063],[106.444637,36.557109],[106.397826,36.576816],[106.392282,36.556628],[106.363949,36.577296],[106.37134,36.549417],[106.39721,36.548455],[106.455724,36.496995],[106.494528,36.494589],[106.523477,36.468605],[106.492064,36.422389],[106.510543,36.379037],[106.497608,36.31348],[106.470507,36.306246],[106.504383,36.266207],[106.54134,36.25366],[106.559202,36.292259],[106.647897,36.259451],[106.685469,36.273445],[106.698404,36.244008],[106.735976,36.23725],[106.772933,36.212628],[106.808657,36.21118],[106.833295,36.229044],[106.858548,36.206834],[106.858548,36.206834],[106.873947,36.178338],[106.873947,36.178338],[106.930613,36.138716],[106.925686,36.115997],[106.957715,36.091337],[106.940468,36.064734],[106.928149,36.011502],[106.94786,35.988262],[106.90228,35.943699],[106.93862,35.952905],[106.940468,35.931101],[106.912751,35.93207],[106.849925,35.887476],[106.927534,35.810346],[106.897353,35.759856],[106.868403,35.771996],[106.867171,35.738485],[106.819128,35.7448],[106.806193,35.70982],[106.750759,35.725369],[106.750759,35.689408],[106.674998,35.728284],[106.66268,35.70739],[106.633115,35.714679],[106.620796,35.743829],[106.595542,35.727312],[106.566593,35.738971],[106.506231,35.737514]]],[[[106.047356,35.498155],[106.048588,35.488898],[106.054132,35.45478],[106.071994,35.463555],[106.078769,35.509848],[106.047356,35.498155]]],[[[102.831537,36.365544],[102.829689,36.365544],[102.836465,36.344819],[102.838928,36.345783],[102.831537,36.365544]]],[[[106.073226,35.447468],[106.067682,35.436254],[106.073226,35.420649],[106.083081,35.421624],[106.073226,35.447468]]],[[[106.504383,35.736057],[106.506231,35.737514],[106.49268,35.732656],[106.498224,35.732656],[106.504383,35.736057]]]]}},{"type":"Feature","properties":{"adcode":630000,"name":"青海省","center":[101.778916,36.623178],"centroid":[96.043533,35.726403],"childrenNum":8,"level":"province","parent":{"adcode":100000},"subFeatureIndex":28,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[102.829689,36.365544],[102.771791,36.47438],[102.793349,36.497957],[102.753313,36.525855],[102.734219,36.562396],[102.761936,36.568645],[102.714509,36.599401],[102.724364,36.613813],[102.684328,36.619097],[102.630741,36.650793],[102.601176,36.710307],[102.612879,36.738129],[102.639364,36.732853],[102.692335,36.775528],[102.720052,36.767858],[102.639364,36.852666],[102.587009,36.869904],[102.56114,36.91968],[102.526031,36.928291],[102.499546,36.954599],[102.450271,36.968467],[102.506321,37.019134],[102.488459,37.078362],[102.583314,37.104618],[102.642444,37.099845],[102.599944,37.174748],[102.578386,37.17284],[102.533422,37.217176],[102.490307,37.223371],[102.457662,37.248147],[102.45335,37.271487],[102.419474,37.294343],[102.428097,37.308624],[102.368351,37.327662],[102.29875,37.370004],[102.299981,37.391404],[102.19712,37.420403],[102.176794,37.458892],[102.125055,37.48549],[102.103497,37.482641],[102.131214,37.54625],[102.102265,37.582304],[102.035128,37.627819],[102.048678,37.651515],[102.036359,37.685149],[101.998787,37.724921],[101.946432,37.728235],[101.873135,37.686569],[101.854657,37.664781],[101.815853,37.654357],[101.791832,37.696041],[101.659405,37.733441],[101.670491,37.754264],[101.598427,37.827569],[101.551615,37.835604],[101.459224,37.86632],[101.382848,37.822369],[101.362522,37.791162],[101.276906,37.83655],[101.202994,37.84742],[101.159262,37.86821],[101.152486,37.891356],[101.114298,37.92016],[101.103211,37.946593],[101.077342,37.941874],[100.964009,38.011221],[100.91843,37.999432],[100.895024,38.013107],[100.888864,38.056001],[100.922125,38.084741],[100.91843,38.129006],[100.93814,38.16007],[100.913502,38.17889],[100.860531,38.148305],[100.825423,38.158658],[100.752126,38.238612],[100.71517,38.253652],[100.619083,38.26587],[100.595061,38.242372],[100.545786,38.247072],[100.516837,38.272448],[100.474953,38.288891],[100.459555,38.2654],[100.432453,38.275267],[100.424446,38.307208],[100.396729,38.293118],[100.318505,38.329276],[100.331439,38.337257],[100.301874,38.388405],[100.259374,38.366355],[100.24028,38.441861],[100.163288,38.461546],[100.113397,38.497151],[100.086911,38.492936],[100.064122,38.518694],[100.025933,38.507923],[100.001296,38.467169],[100.022238,38.432017],[100.093071,38.407166],[100.136803,38.33444],[100.163904,38.328337],[100.159592,38.291239],[100.182998,38.222158],[100.126332,38.231561],[100.117093,38.253652],[100.071513,38.284663],[100.049955,38.283254],[100.001912,38.315191],[99.960028,38.320825],[99.826985,38.370109],[99.758,38.410449],[99.727203,38.415607],[99.65945,38.449361],[99.63974,38.474666],[99.585537,38.498556],[99.52887,38.546314],[99.501769,38.612281],[99.450646,38.60433],[99.412458,38.665571],[99.375502,38.684727],[99.361951,38.718354],[99.291118,38.765966],[99.222133,38.788827],[99.141445,38.852706],[99.068764,38.896968],[99.071843,38.921184],[99.107568,38.951907],[99.054597,38.97657],[98.951735,38.987735],[98.903076,39.012384],[98.886446,39.040744],[98.818076,39.064911],[98.816845,39.085818],[98.743548,39.086747],[98.730613,39.057011],[98.70536,39.043533],[98.661628,38.993782],[98.612353,38.977035],[98.624056,38.959353],[98.584635,38.93003],[98.526737,38.95563],[98.457752,38.952838],[98.428187,38.976104],[98.432498,38.996107],[98.401086,39.001688],[98.383839,39.029588],[98.316702,39.040744],[98.280977,39.027263],[98.287753,38.992386],[98.276666,38.963541],[98.235398,38.918855],[98.242173,38.880664],[98.167645,38.840121],[98.091884,38.786495],[98.068478,38.816344],[98.029058,38.834061],[98.009348,38.85923],[97.875689,38.898365],[97.828878,38.93003],[97.701379,38.963076],[97.679205,39.010524],[97.58127,39.052364],[97.504894,39.076527],[97.458698,39.117863],[97.401416,39.146645],[97.371235,39.140611],[97.347213,39.167528],[97.315185,39.164744],[97.220946,39.193042],[97.14149,39.199999],[97.060186,39.19768],[97.017686,39.208347],[96.962251,39.198144],[97.012142,39.142004],[96.969643,39.097895],[96.95794,39.041674],[96.965331,39.017034],[96.938846,38.95563],[96.940693,38.90768],[96.983809,38.869016],[96.993664,38.834993],[96.987505,38.793025],[97.00044,38.7613],[97.023229,38.755699],[97.009063,38.702477],[97.057722,38.67258],[97.047251,38.653888],[97.055874,38.594508],[96.961019,38.558015],[96.876636,38.580475],[96.847071,38.599186],[96.7941,38.608072],[96.808882,38.582346],[96.767614,38.552399],[96.800259,38.52759],[96.780549,38.504177],[96.706637,38.505582],[96.6666,38.483567],[96.707868,38.459203],[96.698013,38.422172],[96.626564,38.356031],[96.638883,38.307208],[96.655514,38.295936],[96.665369,38.23015],[96.46334,38.277616],[96.378341,38.277146],[96.335841,38.246132],[96.301964,38.183124],[96.313051,38.161952],[96.264392,38.145952],[96.252689,38.167599],[96.221892,38.149246],[96.109175,38.187358],[96.06606,38.173245],[96.006929,38.207582],[95.93856,38.237202],[95.932401,38.259291],[95.89606,38.2903],[95.852945,38.287481],[95.83693,38.344298],[95.775952,38.356031],[95.723597,38.378554],[95.703887,38.400131],[95.671858,38.388405],[95.608417,38.339134],[95.585011,38.343359],[95.51849,38.294997],[95.487693,38.314721],[95.455664,38.291709],[95.440881,38.310965],[95.408236,38.300163],[95.315846,38.318947],[95.259179,38.302981],[95.229614,38.330685],[95.209904,38.327868],[95.185266,38.379492],[95.140919,38.392158],[95.122441,38.417014],[95.072549,38.402476],[95.045448,38.418889],[94.973999,38.430142],[94.884072,38.414669],[94.861282,38.393565],[94.812623,38.385591],[94.672805,38.386998],[94.582878,38.36917],[94.56132,38.351807],[94.527443,38.365416],[94.527443,38.425922],[94.511429,38.445142],[94.370379,38.7627],[94.281067,38.7599],[93.973098,38.724891],[93.95154,38.715086],[93.885018,38.720689],[93.800019,38.750566],[93.773533,38.771099],[93.756287,38.807484],[93.769838,38.821007],[93.884403,38.826136],[93.884403,38.867618],[93.834511,38.867618],[93.729186,38.924443],[93.453245,38.915596],[93.274007,38.896036],[93.237666,38.916062],[93.179152,38.923977],[93.198246,39.045857],[93.165601,39.090928],[93.131725,39.108112],[93.142196,39.160567],[93.115094,39.17959],[93.043029,39.146645],[92.978356,39.143396],[92.938936,39.169848],[92.889045,39.160103],[92.866871,39.138754],[92.765857,39.136898],[92.659299,39.109969],[92.545966,39.111362],[92.489916,39.099753],[92.459119,39.063982],[92.459119,39.042604],[92.41046,39.03842],[92.416003,39.010524],[92.380279,38.999828],[92.263866,39.002153],[92.197961,38.983548],[92.173323,38.960749],[92.10865,38.963541],[91.966368,38.930961],[91.880752,38.899297],[91.87952,38.884391],[91.806223,38.872744],[91.694738,38.86622],[91.681188,38.852706],[91.501333,38.815411],[91.446515,38.813546],[91.298689,38.746365],[91.242639,38.752433],[91.188436,38.73096],[90.992567,38.695003],[90.970394,38.697806],[90.899561,38.679588],[90.724634,38.658094],[90.65996,38.674449],[90.619308,38.664636],[90.645794,38.635191],[90.606374,38.610878],[90.608837,38.594508],[90.560794,38.593573],[90.525685,38.561291],[90.463476,38.556611],[90.465323,38.521971],[90.427135,38.493873],[90.353222,38.482162],[90.315034,38.501835],[90.248513,38.491531],[90.130868,38.494341],[90.111774,38.477945],[90.111774,38.418889],[90.129636,38.400131],[90.179528,38.396848],[90.137644,38.340543],[90.280542,38.238142],[90.352607,38.233441],[90.361846,38.300163],[90.401882,38.311434],[90.531229,38.319886],[90.516446,38.207111],[90.519526,37.730601],[90.579272,37.720661],[90.586663,37.703144],[90.643946,37.696988],[90.777605,37.648672],[90.820104,37.613599],[90.854597,37.604117],[90.882314,37.575664],[90.865684,37.53059],[90.911879,37.519674],[90.958075,37.477891],[91.019669,37.493088],[91.073256,37.475992],[91.099741,37.447965],[91.113292,37.387124],[91.136081,37.355734],[91.134849,37.324331],[91.194596,37.273868],[91.1909,37.205737],[91.280211,37.163779],[91.286371,37.105095],[91.303617,37.083136],[91.291298,37.042544],[91.303617,37.012444],[91.216153,37.010054],[91.181045,37.025345],[91.133618,37.007665],[91.126842,36.978507],[91.051698,36.96751],[91.036915,36.929727],[90.983944,36.913459],[90.924198,36.921115],[90.853981,36.915373],[90.758511,36.825844],[90.732025,36.825844],[90.727098,36.755872],[90.754815,36.721341],[90.720938,36.708868],[90.706156,36.658955],[90.730793,36.655594],[90.72217,36.620058],[90.741264,36.585947],[90.810865,36.585466],[90.831191,36.55807],[90.905104,36.560474],[91.011662,36.539801],[91.035683,36.529703],[91.039995,36.474861],[91.028292,36.443093],[91.051698,36.433946],[91.026444,36.323607],[91.07264,36.299012],[91.051698,36.238215],[91.096045,36.219871],[91.09235,36.163844],[91.124994,36.115514],[91.081263,36.088436],[90.979017,36.106811],[90.922966,36.028927],[90.850285,36.016827],[90.815793,36.035703],[90.776373,36.086501],[90.659344,36.13485],[90.613149,36.126632],[90.534925,36.147899],[90.478258,36.13195],[90.424055,36.133883],[90.325505,36.159496],[90.23681,36.160462],[90.198006,36.187516],[90.130252,36.2078],[90.145651,36.239181],[90.058188,36.255591],[90.043405,36.276822],[90.003369,36.278752],[90.028006,36.258486],[90.019999,36.213594],[89.997825,36.168193],[89.944855,36.140649],[89.941159,36.067637],[89.914058,36.079246],[89.819819,36.080697],[89.766848,36.073925],[89.711414,36.093272],[89.688624,36.091337],[89.605472,36.038123],[89.474893,36.022151],[89.417611,36.044897],[89.404676,36.016827],[89.434857,35.992136],[89.428082,35.917531],[89.489676,35.903475],[89.554965,35.873414],[89.550654,35.856924],[89.62395,35.859349],[89.654747,35.848193],[89.707718,35.849163],[89.778551,35.861775],[89.801957,35.848193],[89.767464,35.799183],[89.782863,35.773453],[89.747138,35.7516],[89.748986,35.66267],[89.726196,35.648082],[89.765616,35.599922],[89.75145,35.580942],[89.71203,35.581915],[89.699711,35.544916],[89.720037,35.501566],[89.740979,35.507412],[89.765,35.482563],[89.739131,35.468429],[89.685544,35.416259],[89.658443,35.425526],[89.619639,35.412357],[89.58761,35.383575],[89.497067,35.361128],[89.516161,35.330862],[89.494603,35.298632],[89.531559,35.276161],[89.48598,35.256616],[89.450255,35.223867],[89.46935,35.214577],[89.519241,35.133862],[89.579603,35.118688],[89.593153,35.104491],[89.59069,35.057965],[89.560509,34.938836],[89.578987,34.895162],[89.670146,34.887798],[89.707102,34.919701],[89.747138,34.903506],[89.78779,34.921664],[89.821051,34.902033],[89.814891,34.86816],[89.838913,34.865705],[89.867862,34.81069],[89.825978,34.796931],[89.799493,34.743838],[89.732356,34.732035],[89.72558,34.660689],[89.74837,34.641981],[89.798877,34.628686],[89.777935,34.574499],[89.814891,34.548871],[89.823515,34.455657],[89.819819,34.420614],[89.799493,34.39642],[89.820435,34.369255],[89.858623,34.359375],[89.86663,34.324785],[89.825362,34.293642],[89.838297,34.263477],[89.816739,34.16945],[89.789638,34.150632],[89.760073,34.152613],[89.756993,34.124874],[89.71203,34.131809],[89.655979,34.097126],[89.656595,34.057966],[89.635037,34.049537],[89.684928,33.990013],[89.688008,33.959739],[89.718805,33.946832],[89.73174,33.921509],[89.795181,33.865374],[89.837065,33.868853],[89.899891,33.80771],[89.942391,33.801246],[89.902355,33.758467],[89.907282,33.741051],[89.983659,33.725622],[89.981195,33.70322],[90.008296,33.687785],[89.984275,33.612061],[90.01076,33.553728],[90.083441,33.525295],[90.088984,33.478885],[90.107463,33.460913],[90.22018,33.437943],[90.246665,33.423959],[90.332896,33.310501],[90.363077,33.279487],[90.405577,33.260473],[90.490577,33.264977],[90.562642,33.229441],[90.627315,33.180368],[90.704308,33.135778],[90.740032,33.142293],[90.803474,33.114227],[90.88293,33.120241],[90.902024,33.083143],[90.927894,33.120241],[91.001807,33.11573],[91.037531,33.098686],[91.072024,33.113224],[91.147784,33.07211],[91.161335,33.108712],[91.18782,33.106206],[91.226624,33.141792],[91.261733,33.141291],[91.311624,33.108211],[91.370138,33.100691],[91.436044,33.066092],[91.49579,33.109214],[91.535826,33.10019],[91.55492,33.060074],[91.583253,33.0375],[91.664557,33.012913],[91.685499,32.989324],[91.752637,32.969242],[91.799448,32.942126],[91.839484,32.948152],[91.857962,32.90244],[91.896766,32.907967],[91.955897,32.8205],[92.018722,32.829552],[92.038432,32.860725],[92.101874,32.860222],[92.145606,32.885857],[92.205352,32.866255],[92.227526,32.821003],[92.193649,32.801889],[92.211511,32.788306],[92.198577,32.754591],[92.255243,32.720863],[92.310062,32.751571],[92.343938,32.738484],[92.355641,32.764657],[92.411076,32.748048],[92.459119,32.76365],[92.484372,32.745028],[92.56814,32.73194],[92.574916,32.741001],[92.634662,32.720863],[92.667922,32.73194],[92.686401,32.76516],[92.756618,32.743014],[92.789262,32.719856],[92.822523,32.729926],[92.866871,32.698203],[92.933392,32.719353],[92.964189,32.714821],[93.00053,32.741001],[93.019624,32.737477],[93.023935,32.703239],[93.069515,32.626156],[93.087993,32.63674],[93.159442,32.644803],[93.176688,32.6705],[93.210565,32.655385],[93.239514,32.662439],[93.260456,32.62666],[93.300492,32.619604],[93.308499,32.580278],[93.33868,32.5712],[93.385492,32.525294],[93.411977,32.558086],[93.4631,32.556069],[93.476651,32.504603],[93.501904,32.503593],[93.516687,32.47583],[93.618933,32.522771],[93.651577,32.571705],[93.721795,32.578261],[93.75136,32.56313],[93.820345,32.549511],[93.851142,32.50965],[93.861613,32.466237],[93.90904,32.463207],[93.960163,32.484917],[93.978641,32.459672],[94.03038,32.448057],[94.049474,32.469771],[94.091974,32.463207],[94.137554,32.433915],[94.176974,32.454117],[94.196684,32.51621],[94.250886,32.51722],[94.292154,32.502584],[94.294002,32.519743],[94.350053,32.533871],[94.371611,32.524789],[94.395016,32.594397],[94.435052,32.562626],[94.463386,32.572209],[94.459074,32.599439],[94.522516,32.595909],[94.591501,32.640772],[94.614291,32.673522],[94.638312,32.645307],[94.737479,32.587338],[94.762116,32.526303],[94.78737,32.522266],[94.80708,32.486431],[94.852043,32.463712],[94.889616,32.472295],[94.912405,32.41573],[94.944434,32.404109],[94.988166,32.422802],[95.057151,32.395014],[95.075013,32.376315],[95.075013,32.376315],[95.081789,32.384907],[95.153853,32.386423],[95.218527,32.397035],[95.228382,32.363678],[95.261643,32.348006],[95.193274,32.332331],[95.096571,32.322217],[95.079325,32.279726],[95.10581,32.258979],[95.20744,32.297433],[95.214216,32.321712],[95.241317,32.3207],[95.239469,32.287315],[95.270266,32.194683],[95.270266,32.194683],[95.31523,32.148585],[95.366968,32.151118],[95.367584,32.178982],[95.406389,32.182021],[95.440265,32.157705],[95.454432,32.061898],[95.421171,32.033999],[95.454432,32.007613],[95.395918,32.001523],[95.360809,31.95939],[95.3682,31.92892],[95.408852,31.918761],[95.406389,31.896915],[95.456896,31.801853],[95.480301,31.795749],[95.511714,31.750468],[95.546823,31.73978],[95.580083,31.76726],[95.634286,31.782523],[95.779648,31.748941],[95.823995,31.68225],[95.853561,31.714329],[95.846169,31.736218],[95.89914,31.81711],[95.983524,31.816601],[95.989067,31.78761],[96.064828,31.720438],[96.135661,31.70211],[96.148595,31.686324],[96.156603,31.602769],[96.207726,31.598691],[96.221892,31.647613],[96.245298,31.657802],[96.252073,31.697527],[96.222508,31.733164],[96.231131,31.749959],[96.178161,31.775401],[96.183088,31.835924],[96.202798,31.841008],[96.214501,31.876589],[96.188632,31.904028],[96.220044,31.905553],[96.253305,31.929936],[96.288414,31.919777],[96.389428,31.919777],[96.407906,31.845583],[96.435623,31.796258],[96.468884,31.769804],[96.519391,31.74945],[96.56805,31.711783],[96.615477,31.737236],[96.661057,31.705674],[96.691854,31.722474],[96.722651,31.686833],[96.778701,31.675629],[96.790404,31.698545],[96.840295,31.720438],[96.799027,31.792188],[96.765767,31.819144],[96.760223,31.860325],[96.794716,31.869474],[96.81073,31.894375],[96.776238,31.935015],[96.753448,31.944156],[96.742977,32.001016],[96.722651,32.013195],[96.824281,32.007613],[96.868629,31.964975],[96.863085,31.996448],[96.894498,32.013703],[96.941925,31.986297],[96.965947,32.008628],[96.935766,32.048203],[97.006599,32.067984],[97.028773,32.04871],[97.127323,32.044145],[97.169823,32.032984],[97.188301,32.055304],[97.214786,32.042623],[97.233881,32.063927],[97.201852,32.090296],[97.219714,32.109054],[97.258518,32.072041],[97.308409,32.076605],[97.293011,32.096887],[97.313953,32.130342],[97.271453,32.139971],[97.264062,32.182527],[97.299786,32.294904],[97.32196,32.303503],[97.371235,32.273148],[97.415583,32.296421],[97.424822,32.322723],[97.387865,32.427349],[97.341054,32.440987],[97.388481,32.501575],[97.334895,32.514192],[97.332431,32.542448],[97.3583,32.563635],[97.374315,32.546484],[97.411887,32.575235],[97.448843,32.586833],[97.463626,32.55506],[97.50243,32.530844],[97.540618,32.536899],[97.670582,32.51722],[97.684132,32.530339],[97.730944,32.527312],[97.700763,32.53488],[97.616995,32.586329],[97.607756,32.614059],[97.543698,32.62162],[97.535075,32.638252],[97.48272,32.654377],[97.42359,32.70475],[97.429133,32.714318],[97.386018,32.77925],[97.392793,32.828546],[97.376163,32.886359],[97.347829,32.895907],[97.375547,32.956689],[97.438372,32.976271],[97.523988,32.988822],[97.499966,33.011408],[97.542466,33.035995],[97.517213,33.097683],[97.487032,33.107209],[97.498119,33.137783],[97.487648,33.168346],[97.548626,33.203907],[97.607756,33.263976],[97.622538,33.337005],[97.676125,33.341004],[97.754349,33.409972],[97.674893,33.432949],[97.625618,33.461412],[97.552321,33.465906],[97.511669,33.520805],[97.523372,33.577166],[97.450075,33.582152],[97.415583,33.605582],[97.435293,33.682307],[97.418046,33.728608],[97.422974,33.754984],[97.406344,33.795278],[97.373083,33.817655],[97.371851,33.842015],[97.398336,33.848477],[97.395257,33.889224],[97.460546,33.887236],[97.503662,33.912073],[97.52214,33.903133],[97.601596,33.929951],[97.629314,33.919523],[97.660111,33.956264],[97.652719,33.998448],[97.70261,34.036644],[97.665654,34.126855],[97.766668,34.158555],[97.789458,34.182818],[97.789458,34.182818],[97.796849,34.199154],[97.796849,34.199154],[97.8104,34.207568],[97.898479,34.209548],[97.95453,34.190739],[98.028442,34.122892],[98.098043,34.122892],[98.158405,34.107037],[98.206449,34.08424],[98.258188,34.083249],[98.344419,34.094648],[98.399854,34.085231],[98.396774,34.053008],[98.428187,34.029204],[98.440506,33.981577],[98.415252,33.956761],[98.425723,33.913066],[98.407245,33.867362],[98.434962,33.843009],[98.463295,33.848477],[98.492861,33.796272],[98.494092,33.768915],[98.51873,33.77389],[98.539672,33.746525],[98.582788,33.731595],[98.610505,33.682805],[98.6567,33.64744],[98.61728,33.637476],[98.622824,33.610067],[98.652389,33.595114],[98.648077,33.548741],[98.678258,33.522801],[98.725686,33.503341],[98.742316,33.477887],[98.736157,33.406975],[98.779888,33.370497],[98.759562,33.276985],[98.802062,33.270481],[98.804526,33.219428],[98.858728,33.150811],[98.92217,33.118738],[98.967134,33.115229],[98.971445,33.098185],[99.014561,33.081137],[99.024416,33.094675],[99.090322,33.079131],[99.124814,33.046028],[99.196263,33.035493],[99.214741,32.991332],[99.235067,32.982296],[99.24677,32.924043],[99.268944,32.878318],[99.353944,32.885354],[99.376118,32.899927],[99.45311,32.862233],[99.558436,32.839106],[99.589233,32.789312],[99.640355,32.790822],[99.646515,32.774721],[99.700718,32.76667],[99.717964,32.732443],[99.760464,32.769689],[99.766623,32.826032],[99.791877,32.883344],[99.764159,32.924545],[99.788181,32.956689],[99.805427,32.940619],[99.851007,32.941623],[99.877492,32.993339],[99.877492,33.045527],[99.947709,32.986814],[99.956332,32.948152],[100.038252,32.929066],[100.029629,32.895907],[100.064738,32.895907],[100.123252,32.837095],[100.117093,32.802392],[100.139266,32.724388],[100.088143,32.668988],[100.109701,32.640268],[100.189773,32.630692],[100.208252,32.606497],[100.229809,32.650346],[100.231041,32.696189],[100.258759,32.742511],[100.339447,32.719353],[100.399193,32.756101],[100.378251,32.698707],[100.420135,32.73194],[100.450932,32.694678],[100.470026,32.694678],[100.516837,32.632204],[100.54517,32.569687],[100.603069,32.553547],[100.645568,32.526303],[100.657887,32.546484],[100.661583,32.616075],[100.673286,32.628172],[100.710242,32.610026],[100.71209,32.645307],[100.690532,32.678056],[100.77122,32.643795],[100.834046,32.648835],[100.887633,32.632708],[100.93198,32.600447],[100.956618,32.621116],[100.99727,32.627668],[101.030531,32.660424],[101.077342,32.68259],[101.124769,32.658408],[101.157414,32.661431],[101.22332,32.725898],[101.237486,32.825026],[101.223935,32.855698],[101.178356,32.892892],[101.124153,32.909976],[101.134624,32.95217],[101.129081,32.989324],[101.183899,32.984304],[101.171581,33.009902],[101.184515,33.041514],[101.146327,33.056563],[101.143863,33.086151],[101.169733,33.10019],[101.11553,33.194893],[101.124769,33.221431],[101.156798,33.236449],[101.182668,33.26948],[101.217776,33.256469],[101.297232,33.262475],[101.381616,33.153316],[101.393935,33.157826],[101.386543,33.207412],[101.403174,33.225436],[101.487557,33.226938],[101.515275,33.192889],[101.557775,33.167344],[101.633535,33.101193],[101.661252,33.135778],[101.653861,33.162835],[101.709912,33.21292],[101.735781,33.279987],[101.677883,33.297497],[101.64955,33.323004],[101.663716,33.383991],[101.695745,33.433948],[101.769042,33.45592],[101.777665,33.533776],[101.769042,33.538765],[101.748716,33.505337],[101.718535,33.494857],[101.622448,33.502343],[101.611977,33.565199],[101.616905,33.598603],[101.585492,33.645448],[101.58426,33.674339],[101.501724,33.702723],[101.428427,33.680315],[101.424732,33.655411],[101.385312,33.644949],[101.302776,33.657902],[101.23687,33.685793],[101.217776,33.669856],[101.166653,33.659894],[101.177124,33.685295],[101.162957,33.719649],[101.186363,33.741051],[101.190675,33.791796],[101.153102,33.823124],[101.153718,33.8445],[101.054552,33.863386],[101.023139,33.896178],[100.994806,33.891707],[100.965857,33.946832],[100.927669,33.975126],[100.93506,33.990013],[100.880857,34.036644],[100.870386,34.083744],[100.848828,34.089692],[100.806329,34.155584],[100.764445,34.178857],[100.809408,34.247153],[100.798321,34.260014],[100.821727,34.317371],[100.868538,34.332693],[100.895024,34.375183],[100.951074,34.38358],[100.986799,34.374689],[101.054552,34.322808],[101.098284,34.329233],[101.178356,34.320831],[101.193754,34.336646],[101.235022,34.325279],[101.228863,34.298586],[101.268899,34.278808],[101.325565,34.268423],[101.327413,34.24468],[101.369913,34.248143],[101.417956,34.227858],[101.482014,34.218951],[101.492485,34.195689],[101.53868,34.212022],[101.6206,34.178857],[101.674187,34.110506],[101.703136,34.119424],[101.718535,34.083249],[101.736397,34.080275],[101.764114,34.122892],[101.788136,34.131809],[101.836795,34.124378],[101.851578,34.153108],[101.874367,34.130323],[101.897773,34.133791],[101.955055,34.109514],[101.965526,34.167469],[102.003099,34.162022],[102.030816,34.190739],[102.01357,34.218456],[102.062229,34.227858],[102.067772,34.293642],[102.149692,34.271885],[102.186649,34.352952],[102.237156,34.34307],[102.237156,34.34307],[102.259329,34.355917],[102.205743,34.407777],[102.169402,34.457631],[102.155852,34.507456],[102.139837,34.50351],[102.093026,34.536547],[102.001867,34.538519],[101.97415,34.548871],[101.956287,34.582876],[101.934729,34.58731],[101.919947,34.621791],[101.917483,34.705964],[101.923027,34.835746],[101.916867,34.873561],[101.985852,34.90007],[102.068388,34.887798],[102.048062,34.910868],[102.094874,34.986901],[102.133678,35.014844],[102.157699,35.010923],[102.176178,35.032977],[102.211286,35.034937],[102.218062,35.057475],[102.252554,35.048657],[102.29567,35.071681],[102.310452,35.128967],[102.346793,35.164201],[102.404075,35.179366],[102.365887,35.235599],[102.370199,35.263946],[102.3123,35.282512],[102.280887,35.303028],[102.311684,35.31426],[102.317844,35.343067],[102.287663,35.36552],[102.293822,35.424063],[102.314764,35.434303],[102.408387,35.409431],[102.447807,35.437229],[102.437952,35.455268],[102.49893,35.545403],[102.503241,35.585322],[102.531575,35.580455],[102.570995,35.548324],[102.695414,35.528358],[102.743458,35.494745],[102.782878,35.527871],[102.729291,35.523487],[102.746537,35.545403],[102.808747,35.560496],[102.763168,35.612086],[102.7644,35.653431],[102.744074,35.657807],[102.707733,35.70496],[102.686175,35.771996],[102.715125,35.815685],[102.739146,35.821023],[102.787189,35.862745],[102.81737,35.850133],[102.914073,35.845282],[102.94487,35.829757],[102.954725,35.858864],[102.942406,35.92674],[102.971971,35.995525],[102.951645,36.021667],[102.968276,36.044414],[102.932551,36.048285],[102.882044,36.082632],[102.941174,36.104877],[102.948566,36.150798],[102.965812,36.151765],[102.986754,36.193312],[103.048964,36.199107],[103.066826,36.216974],[103.021246,36.232906],[103.024942,36.256556],[102.922696,36.298047],[102.896827,36.331803],[102.845704,36.331803],[102.836465,36.344819],[102.829689,36.365544]]]]}},{"type":"Feature","properties":{"adcode":640000,"name":"宁夏回族自治区","center":[106.278179,38.46637],"centroid":[106.169866,37.291332],"childrenNum":5,"level":"province","parent":{"adcode":100000},"subFeatureIndex":29,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[107.268764,37.099367],[107.281083,37.127047],[107.306952,37.100799],[107.334669,37.138975],[107.336517,37.165687],[107.317423,37.200017],[107.270612,37.229089],[107.309416,37.239095],[107.273075,37.29101],[107.257677,37.337179],[107.282931,37.437036],[107.284162,37.481691],[107.345756,37.518725],[107.369162,37.58752],[107.330358,37.584201],[107.311264,37.609806],[107.361155,37.613125],[107.422133,37.665254],[107.389488,37.671413],[107.387024,37.691305],[107.425828,37.684201],[107.484959,37.706458],[107.499125,37.765619],[107.57119,37.776499],[107.599523,37.791162],[107.620465,37.776026],[107.646335,37.805349],[107.659269,37.844112],[107.65003,37.86443],[107.560719,37.893717],[107.49235,37.944706],[107.448618,37.933378],[107.411662,37.948009],[107.440611,37.995659],[107.3938,38.014993],[107.33159,38.086625],[107.240431,38.111586],[107.19054,38.153953],[107.138801,38.161011],[107.119091,38.134185],[107.071047,38.138892],[107.051337,38.122886],[107.010069,38.120532],[106.942316,38.132302],[106.858548,38.156306],[106.779092,38.171833],[106.737824,38.197706],[106.654672,38.22921],[106.627571,38.232501],[106.555506,38.263521],[106.482209,38.319417],[106.599854,38.389812],[106.647897,38.470917],[106.66268,38.601524],[106.709491,38.718821],[106.756302,38.748699],[106.837606,38.847579],[106.954019,38.941202],[106.971881,39.026333],[106.96757,39.054688],[106.933693,39.076527],[106.878874,39.091392],[106.859164,39.107648],[106.825288,39.19397],[106.795723,39.214375],[106.790795,39.241263],[106.806193,39.277407],[106.806809,39.318625],[106.781556,39.371849],[106.751375,39.381564],[106.683622,39.357506],[106.643586,39.357969],[106.602318,39.37555],[106.556122,39.322329],[106.525325,39.308439],[106.511774,39.272311],[106.402753,39.291767],[106.280181,39.262118],[106.29558,39.167992],[106.285109,39.146181],[106.251232,39.131327],[106.192718,39.142932],[106.170544,39.163352],[106.145907,39.153142],[106.096631,39.084889],[106.078153,39.026333],[106.087392,39.006339],[106.060907,38.96866],[106.021487,38.953769],[105.97098,38.909077],[105.992538,38.857366],[105.909386,38.791159],[105.908154,38.737496],[105.88598,38.716953],[105.894603,38.696405],[105.852719,38.641735],[105.874277,38.593105],[105.856415,38.569714],[105.863806,38.53508],[105.836705,38.476071],[105.850872,38.443736],[105.827466,38.432486],[105.835473,38.387467],[105.821307,38.366824],[105.86627,38.296406],[105.842248,38.240962],[105.802828,38.220277],[105.775111,38.186887],[105.76772,38.121474],[105.780655,38.084741],[105.840401,38.004147],[105.799749,37.939986],[105.80406,37.862068],[105.760944,37.799674],[105.677177,37.771769],[105.622358,37.777919],[105.616199,37.722555],[105.598952,37.699356],[105.467141,37.695094],[105.4037,37.710246],[105.315004,37.702197],[105.221998,37.677097],[105.187505,37.657674],[105.111128,37.633981],[105.027977,37.580881],[104.866601,37.566651],[104.805007,37.539133],[104.623305,37.522522],[104.433595,37.515402],[104.419429,37.511604],[104.407726,37.464592],[104.322726,37.44844],[104.287002,37.428007],[104.298705,37.414223],[104.365226,37.418026],[104.437907,37.445589],[104.448994,37.42468],[104.499501,37.421353],[104.521059,37.43466],[104.679971,37.408044],[104.662109,37.367626],[104.713848,37.329566],[104.673812,37.317668],[104.651022,37.290534],[104.624536,37.298627],[104.600515,37.242907],[104.638087,37.201923],[104.717543,37.208597],[104.776673,37.246718],[104.85613,37.211933],[104.864753,37.17284],[104.888158,37.15901],[104.914644,37.097935],[104.954064,37.077407],[104.95468,37.040156],[105.004571,37.035378],[105.03968,37.007187],[105.05939,37.022956],[105.128991,36.996194],[105.165331,36.99476],[105.185657,36.942164],[105.178882,36.892403],[105.244787,36.894796],[105.279896,36.86751],[105.303302,36.820575],[105.334714,36.80093],[105.340874,36.764502],[105.319932,36.742924],[105.275584,36.752515],[105.272505,36.739567],[105.218302,36.730455],[105.201056,36.700711],[105.225693,36.664716],[105.22015,36.631105],[105.261418,36.602764],[105.2762,36.563358],[105.252179,36.553263],[105.281744,36.522489],[105.322396,36.535954],[105.362432,36.496514],[105.363048,36.443093],[105.398156,36.430575],[105.401236,36.369881],[105.425873,36.330357],[105.455439,36.321678],[105.476381,36.293224],[105.45975,36.268137],[105.460366,36.223733],[105.478844,36.213111],[105.515185,36.147415],[105.491163,36.101009],[105.430801,36.10391],[105.406163,36.074409],[105.343954,36.033767],[105.324859,35.941761],[105.350113,35.875839],[105.39754,35.857409],[105.371055,35.844312],[105.38091,35.792873],[105.408627,35.822479],[105.428953,35.819082],[105.432033,35.787533],[105.457286,35.771511],[105.481924,35.727312],[105.595873,35.715651],[105.667322,35.749657],[105.70243,35.733142],[105.759097,35.724883],[105.740618,35.698643],[105.723988,35.725854],[105.690727,35.698643],[105.722756,35.673366],[105.713517,35.650513],[105.759097,35.634464],[105.762176,35.602841],[105.800365,35.564878],[105.816379,35.575101],[105.847176,35.490359],[105.868734,35.540046],[105.900147,35.54735],[106.017175,35.519103],[106.023335,35.49377],[106.047356,35.498155],[106.078769,35.509848],[106.071994,35.463555],[106.06953,35.458193],[106.073842,35.45478],[106.073226,35.450393],[106.071378,35.449418],[106.073226,35.447468],[106.083081,35.421624],[106.113262,35.361616],[106.129892,35.393333],[106.173008,35.437716],[106.196414,35.409919],[106.237681,35.409431],[106.241377,35.358687],[106.319601,35.265411],[106.363333,35.238532],[106.368261,35.273718],[106.415688,35.276161],[106.472354,35.310842],[106.501304,35.364056],[106.503767,35.415284],[106.483441,35.450393],[106.490217,35.480613],[106.465579,35.481101],[106.440941,35.52641],[106.460036,35.578995],[106.47913,35.575101],[106.460036,35.643705],[106.434782,35.688436],[106.49268,35.732656],[106.506231,35.737514],[106.566593,35.738971],[106.595542,35.727312],[106.620796,35.743829],[106.633115,35.714679],[106.66268,35.70739],[106.674998,35.728284],[106.750759,35.689408],[106.750759,35.725369],[106.806193,35.70982],[106.819128,35.7448],[106.867171,35.738485],[106.868403,35.771996],[106.897353,35.759856],[106.927534,35.810346],[106.849925,35.887476],[106.912751,35.93207],[106.940468,35.931101],[106.93862,35.952905],[106.90228,35.943699],[106.94786,35.988262],[106.928149,36.011502],[106.940468,36.064734],[106.957715,36.091337],[106.925686,36.115997],[106.930613,36.138716],[106.873947,36.178338],[106.873947,36.178338],[106.858548,36.206834],[106.858548,36.206834],[106.833295,36.229044],[106.808657,36.21118],[106.772933,36.212628],[106.735976,36.23725],[106.698404,36.244008],[106.685469,36.273445],[106.647897,36.259451],[106.559202,36.292259],[106.54134,36.25366],[106.504383,36.266207],[106.470507,36.306246],[106.497608,36.31348],[106.510543,36.379037],[106.492064,36.422389],[106.523477,36.468605],[106.494528,36.494589],[106.455724,36.496995],[106.39721,36.548455],[106.37134,36.549417],[106.363949,36.577296],[106.392282,36.556628],[106.397826,36.576816],[106.444637,36.557109],[106.465579,36.583063],[106.444637,36.624861],[106.491448,36.628703],[106.490833,36.685835],[106.530869,36.690154],[106.519782,36.708868],[106.519782,36.708868],[106.514238,36.715584],[106.59431,36.750118],[106.644817,36.72278],[106.627571,36.752995],[106.657752,36.820575],[106.637426,36.867031],[106.637426,36.867031],[106.626955,36.892403],[106.609709,36.878521],[106.609709,36.878521],[106.601702,36.918244],[106.549347,36.941685],[106.540108,36.984244],[106.595542,36.94025],[106.594926,36.967988],[106.64297,36.962729],[106.646665,37.000496],[106.666991,37.016745],[106.645433,37.064992],[106.605397,37.127524],[106.6171,37.135158],[106.673151,37.1113],[106.687933,37.12991],[106.728585,37.121321],[106.750143,37.09889],[106.772933,37.120367],[106.776012,37.158056],[106.818512,37.141838],[106.891193,37.098413],[106.912135,37.110345],[106.905976,37.151378],[106.998367,37.106527],[107.031011,37.108436],[107.030395,37.140883],[107.095685,37.115595],[107.133873,37.134681],[107.181916,37.143269],[107.234887,37.096503],[107.268764,37.099367]]],[[[106.048588,35.488898],[105.897683,35.451368],[105.894603,35.413821],[106.002393,35.438692],[106.034422,35.469404],[106.054132,35.45478],[106.048588,35.488898]]],[[[106.073842,35.45478],[106.06953,35.458193],[106.071378,35.449418],[106.073226,35.450393],[106.073842,35.45478]]]]}},{"type":"Feature","properties":{"adcode":650000,"name":"新疆维吾尔自治区","center":[87.617733,43.792818],"centroid":[85.294711,41.371801],"childrenNum":24,"level":"province","parent":{"adcode":100000},"subFeatureIndex":30,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[96.386348,42.727592],[96.363558,42.900562],[95.921314,43.229789],[95.880046,43.28035],[95.857872,43.417436],[95.735916,43.597569],[95.705735,43.67077],[95.645373,43.787966],[95.623199,43.855756],[95.527113,44.007466],[95.426099,44.009618],[95.377439,44.025972],[95.326932,44.028554],[95.35157,44.090054],[95.355882,44.166087],[95.376208,44.227444],[95.4107,44.245024],[95.43041,44.281882],[95.41378,44.298589],[95.238853,44.277169],[95.1286,44.269884],[94.998637,44.253169],[94.945666,44.292592],[94.826174,44.320001],[94.768275,44.34055],[94.722696,44.34055],[94.673421,44.397021],[94.606283,44.448311],[94.557008,44.462408],[94.470777,44.509373],[94.390705,44.521749],[94.359292,44.515775],[94.329727,44.582734],[94.279836,44.603617],[94.227481,44.645785],[94.215162,44.667921],[94.152336,44.684944],[94.066105,44.732154],[93.723642,44.865498],[93.716251,44.894334],[93.613389,44.926546],[93.509296,44.968055],[93.434767,44.955351],[93.376869,44.985412],[93.314659,44.995147],[93.314043,44.980333],[93.252449,44.991761],[93.174225,45.015458],[93.100312,45.007419],[93.062124,45.018419],[93.002377,45.009958],[92.932776,45.017573],[92.922921,45.03703],[92.884117,45.046756],[92.847777,45.038721],[92.779407,45.050561],[92.683937,45.02561],[92.547814,45.018419],[92.501003,45.001072],[92.414155,45.018419],[92.348866,45.014188],[92.315605,45.028994],[92.240461,45.015881],[92.100026,45.081417],[92.056911,45.086911],[91.885679,45.078882],[91.803144,45.082685],[91.694738,45.065357],[91.561695,45.075501],[91.500101,45.103809],[91.448978,45.156586],[91.429268,45.156586],[91.37753,45.11099],[91.33503,45.129571],[91.242023,45.13717],[91.230936,45.153632],[91.195827,45.159118],[91.17119,45.199616],[91.129922,45.21606],[91.050466,45.208892],[91.007966,45.218589],[90.96177,45.201303],[90.881698,45.192025],[90.866916,45.209314],[90.897713,45.249776],[90.877387,45.280946],[90.831807,45.300313],[90.804706,45.29484],[90.813329,45.32851],[90.773909,45.405874],[90.772677,45.432338],[90.723402,45.464667],[90.671047,45.487747],[90.676591,45.582488],[90.714779,45.728895],[90.799778,45.834905],[90.890937,45.921566],[91.028292,46.023054],[91.014741,46.06667],[91.021517,46.121038],[90.98456,46.160431],[90.94822,46.219262],[90.955611,46.233752],[90.900177,46.31235],[90.983328,46.374734],[90.996263,46.419309],[91.025828,46.444057],[91.038147,46.500936],[91.060937,46.516999],[91.079415,46.558989],[91.068328,46.579149],[91.017821,46.58244],[91.036299,46.670393],[91.054161,46.717598],[91.019053,46.766402],[90.992567,46.769682],[90.992567,46.790583],[90.942676,46.82581],[90.958075,46.879425],[90.929742,46.893331],[90.92235,46.938707],[90.901408,46.960768],[90.830575,46.995883],[90.767134,46.992617],[90.691989,47.080717],[90.653801,47.111681],[90.579888,47.198364],[90.56141,47.206903],[90.521374,47.2845],[90.488113,47.317374],[90.526301,47.379007],[90.507823,47.400076],[90.468403,47.404937],[90.459164,47.43895],[90.474562,47.462422],[90.468403,47.497611],[90.398186,47.547724],[90.376012,47.603036],[90.346447,47.637324],[90.384635,47.644179],[90.331665,47.681663],[90.216484,47.70543],[90.180144,47.72516],[90.13518,47.723147],[90.07605,47.777469],[90.070506,47.820483],[90.086521,47.86547],[90.066195,47.883534],[90.040941,47.874704],[89.960253,47.885942],[89.957789,47.842982],[89.86971,47.834144],[89.761921,47.835751],[89.735435,47.89758],[89.651052,47.913627],[89.645508,47.947711],[89.595617,47.973359],[89.599313,48.015811],[89.569132,48.037825],[89.498299,48.02822],[89.38127,48.046227],[89.359712,48.026219],[89.308589,48.021816],[89.282104,47.994189],[89.231597,47.98017],[89.156452,47.996992],[89.078228,47.98698],[89.044967,48.009806],[89.027105,48.051028],[88.953808,48.090618],[88.939026,48.115396],[88.824461,48.107005],[88.79736,48.133772],[88.721599,48.160526],[88.700657,48.180881],[88.668628,48.171303],[88.638447,48.183674],[88.601491,48.221567],[88.594716,48.259831],[88.575006,48.277757],[88.605803,48.337863],[88.573774,48.351785],[88.573158,48.369679],[88.535586,48.368884],[88.523267,48.403461],[88.503557,48.412996],[88.462289,48.392335],[88.438267,48.393528],[88.360659,48.433251],[88.363123,48.460641],[88.318159,48.478497],[88.229464,48.498329],[88.196819,48.493967],[88.151855,48.526478],[88.130297,48.521721],[88.10874,48.545895],[88.041602,48.548272],[87.973233,48.575997],[87.96153,48.599353],[88.010805,48.618742],[88.02682,48.65315],[88.089645,48.69504],[88.090877,48.71992],[88.064392,48.712813],[88.029283,48.750313],[87.96153,48.773588],[87.93874,48.757809],[87.872219,48.799612],[87.826639,48.800795],[87.803234,48.824835],[87.829103,48.825623],[87.792147,48.849258],[87.78106,48.872094],[87.742256,48.881146],[87.760118,48.925992],[87.793995,48.927565],[87.814321,48.945256],[87.87653,48.949186],[87.871603,48.963726],[87.911639,48.979833],[87.883922,48.993971],[87.883306,49.023806],[87.835263,49.054406],[87.858052,49.07362],[87.844502,49.090084],[87.867291,49.108892],[87.845733,49.146096],[87.82048,49.148445],[87.821096,49.173883],[87.793379,49.18249],[87.762582,49.172709],[87.700372,49.175839],[87.67635,49.15549],[87.602437,49.152359],[87.563017,49.142572],[87.517438,49.145704],[87.49588,49.132001],[87.511894,49.10184],[87.43675,49.075188],[87.388707,49.097921],[87.304939,49.112418],[87.239033,49.114376],[87.211932,49.140615],[87.112766,49.15549],[87.088128,49.133567],[87.000049,49.142572],[86.953853,49.131218],[86.887948,49.132001],[86.854071,49.109284],[86.84976,49.066563],[86.836209,49.051269],[86.772151,49.02773],[86.732115,48.994757],[86.730267,48.959797],[86.757985,48.894919],[86.782006,48.887049],[86.821426,48.850439],[86.818963,48.831139],[86.770303,48.810255],[86.754289,48.78463],[86.780774,48.731369],[86.771535,48.717156],[86.70255,48.666195],[86.693311,48.64366],[86.640956,48.629027],[86.635413,48.612016],[86.594761,48.576789],[86.579978,48.538763],[86.416138,48.481671],[86.38103,48.49357],[86.305269,48.491984],[86.270161,48.452307],[86.225813,48.432456],[86.053966,48.441192],[85.916612,48.438015],[85.791576,48.418954],[85.758315,48.403064],[85.695489,48.335078],[85.695489,48.302445],[85.678243,48.266205],[85.633895,48.232731],[85.622193,48.202824],[85.587084,48.191654],[85.576613,48.15853],[85.55136,48.127781],[85.551975,48.081423],[85.531649,48.046227],[85.547048,48.008205],[85.617881,47.550552],[85.614801,47.498015],[85.685018,47.428829],[85.701649,47.384275],[85.675779,47.321837],[85.701033,47.28856],[85.682555,47.249982],[85.682555,47.222757],[85.641903,47.18413],[85.582772,47.142626],[85.547048,47.096609],[85.545816,47.057891],[85.441106,47.063191],[85.355491,47.054629],[85.325926,47.044842],[85.276651,47.068898],[85.213825,47.041172],[85.175637,46.997924],[85.102956,46.968936],[85.082014,46.939933],[84.987159,46.918272],[84.979768,46.883106],[84.95513,46.861013],[84.934188,46.863878],[84.867051,46.927673],[84.849189,46.957092],[84.781435,46.979962],[84.748175,47.009759],[84.699515,47.008535],[84.668718,46.995067],[84.563393,46.991801],[84.506726,46.97302],[84.425422,47.008943],[84.37122,46.993434],[84.336727,47.00527],[84.2893,46.994658],[84.195061,47.003638],[84.150098,46.977512],[84.086656,46.965261],[84.038613,46.973428],[84.002888,46.990576],[83.951765,46.98731],[83.932671,46.970161],[83.88586,46.982003],[83.766367,47.026896],[83.69923,47.015472],[83.700462,47.032199],[83.576042,47.059114],[83.566803,47.080717],[83.53847,47.083977],[83.463325,47.132042],[83.418978,47.119012],[83.370318,47.178436],[83.324739,47.167858],[83.306261,47.179656],[83.257602,47.173147],[83.221877,47.186977],[83.207094,47.213814],[83.17445,47.218286],[83.15474,47.236168],[83.108544,47.221944],[83.02724,47.21544],[83.031552,47.168265],[82.993364,47.065229],[82.937929,47.014248],[82.923762,46.932169],[82.876335,46.823762],[82.878183,46.797138],[82.829524,46.772551],[82.788872,46.677784],[82.774089,46.600124],[82.726662,46.494756],[82.609017,46.294985],[82.518474,46.153798],[82.461808,45.97982],[82.401446,45.972333],[82.342932,45.935303],[82.336156,45.882418],[82.349707,45.822811],[82.340468,45.772742],[82.289961,45.71636],[82.288729,45.655321],[82.266555,45.620172],[82.281954,45.53891],[82.448257,45.461309],[82.546808,45.426038],[82.60101,45.346178],[82.58746,45.224069],[82.562822,45.204676],[82.487061,45.181058],[82.344779,45.219011],[82.294272,45.247669],[82.206809,45.236713],[82.109491,45.211422],[82.091012,45.222383],[82.09594,45.249776],[82.052824,45.255674],[81.993078,45.237978],[81.921013,45.233342],[81.879745,45.284314],[81.832318,45.319673],[81.78797,45.3836],[81.677101,45.35459],[81.645072,45.359216],[81.582863,45.336503],[81.575471,45.30789],[81.536667,45.304101],[81.52866,45.285999],[81.462754,45.264099],[81.437501,45.28263],[81.398697,45.275471],[81.382066,45.257781],[81.327864,45.260729],[81.284748,45.23882],[81.236705,45.247248],[81.175111,45.227863],[81.170183,45.211001],[81.111669,45.218168],[81.080872,45.182745],[81.024821,45.162916],[80.966307,45.168402],[80.93551,45.160384],[80.897938,45.127459],[80.862214,45.127037],[80.816634,45.152788],[80.731634,45.156164],[80.686055,45.129148],[80.599207,45.105921],[80.519135,45.108878],[80.493882,45.127037],[80.445839,45.097895],[80.443991,45.077614],[80.404571,45.049293],[80.358375,45.040836],[80.328194,45.070007],[80.291854,45.06578],[80.24381,45.031532],[80.195767,45.030686],[80.144644,45.059017],[80.136021,45.041259],[80.111999,45.052675],[80.060876,45.026033],[80.056565,45.011227],[79.98142,44.964244],[79.951855,44.957892],[79.944464,44.937985],[79.887798,44.90917],[79.969102,44.877797],[79.953703,44.849377],[79.991891,44.830281],[79.999283,44.793768],[80.087978,44.817122],[80.115695,44.815424],[80.169898,44.84471],[80.18776,44.825612],[80.178521,44.796741],[80.200695,44.756808],[80.238883,44.7228],[80.313412,44.704938],[80.400259,44.628751],[80.411962,44.605321],[80.350368,44.484615],[80.383013,44.401297],[80.399027,44.30587],[80.413194,44.264741],[80.400875,44.198704],[80.407034,44.149772],[80.3941,44.127009],[80.449534,44.078017],[80.458773,44.047054],[80.457541,43.981203],[80.485259,43.95579],[80.475404,43.938124],[80.511128,43.906657],[80.522215,43.816473],[80.75504,43.494329],[80.761199,43.446554],[80.746417,43.439167],[80.735946,43.389609],[80.686055,43.333916],[80.69283,43.32042],[80.777214,43.308227],[80.769207,43.265535],[80.788917,43.242433],[80.789533,43.201876],[80.804315,43.178314],[80.79446,43.137277],[80.752576,43.148194],[80.73225,43.131163],[80.706997,43.143828],[80.650946,43.147321],[80.593048,43.133347],[80.556092,43.104515],[80.482795,43.06955],[80.416889,43.05687],[80.378701,43.031502],[80.397795,42.996933],[80.487106,42.948766],[80.5912,42.923354],[80.602903,42.894424],[80.503737,42.882146],[80.450766,42.861971],[80.407034,42.834767],[80.338049,42.831695],[80.280151,42.838278],[80.262289,42.828623],[80.259209,42.790865],[80.225948,42.713083],[80.228412,42.692852],[80.179753,42.670415],[80.163738,42.629919],[80.180985,42.590718],[80.221637,42.533415],[80.265368,42.502097],[80.225948,42.485769],[80.206238,42.431462],[80.239499,42.389927],[80.229028,42.358536],[80.283847,42.320493],[80.272144,42.281984],[80.29247,42.259842],[80.28631,42.233261],[80.233339,42.210215],[80.168666,42.200462],[80.163738,42.152563],[80.139717,42.151232],[80.16805,42.096635],[80.193303,42.081535],[80.14218,42.03488],[80.089826,42.047325],[79.923522,42.042436],[79.852689,42.015319],[79.854537,41.984186],[79.822508,41.963275],[79.776313,41.89248],[79.724574,41.896935],[79.640806,41.884907],[79.616784,41.856385],[79.550879,41.834094],[79.500988,41.835432],[79.457256,41.847915],[79.415372,41.836769],[79.356242,41.795735],[79.326061,41.809565],[79.276786,41.78101],[79.271858,41.767174],[79.21704,41.725648],[79.138199,41.722968],[79.10925,41.697503],[79.043345,41.681414],[79.021787,41.657273],[78.99407,41.664427],[78.957729,41.65146],[78.891824,41.597777],[78.86657,41.593749],[78.825302,41.560173],[78.739071,41.555695],[78.696571,41.54181],[78.707042,41.522098],[78.675629,41.50238],[78.650375,41.467411],[78.580774,41.481759],[78.527188,41.440947],[78.454507,41.412228],[78.391681,41.408189],[78.385522,41.394721],[78.338094,41.397415],[78.324544,41.384395],[78.235232,41.399211],[78.163783,41.383497],[78.149617,41.368228],[78.165015,41.340825],[78.136682,41.279239],[78.129291,41.228398],[78.094798,41.224347],[77.972842,41.173013],[77.905089,41.185174],[77.836104,41.153189],[77.814546,41.13426],[77.807155,41.091876],[77.829328,41.059394],[77.796068,41.049014],[77.780669,41.022832],[77.737553,41.032313],[77.684583,41.00793],[77.654402,41.016059],[77.597119,41.005221],[77.591576,40.992122],[77.540453,41.006575],[77.476395,40.999349],[77.473931,41.022832],[77.415417,41.038633],[77.363062,41.04089],[77.296541,41.004769],[77.236795,41.027798],[77.169041,41.009285],[77.108063,41.038181],[77.091433,41.062553],[77.023064,41.059394],[77.002122,41.073381],[76.940528,41.028701],[76.885709,41.027347],[76.85368,40.97631],[76.817956,40.975406],[76.761905,40.954167],[76.741579,40.912119],[76.731724,40.818887],[76.693536,40.779472],[76.646725,40.759983],[76.646725,40.73686],[76.676906,40.696036],[76.654732,40.652917],[76.657196,40.620218],[76.611,40.601591],[76.601145,40.578868],[76.556798,40.542495],[76.543247,40.513837],[76.539551,40.464226],[76.508754,40.429613],[76.470566,40.422779],[76.442233,40.391336],[76.390494,40.37766],[76.381871,40.39088],[76.333212,40.343459],[76.327668,40.391336],[76.283321,40.415034],[76.279625,40.439179],[76.22419,40.401819],[76.176147,40.381307],[76.144118,40.393615],[76.081293,40.39635],[76.048648,40.388601],[76.048648,40.357141],[76.026474,40.355317],[75.986438,40.381763],[75.932235,40.339353],[75.921764,40.291439],[75.890351,40.30924],[75.84046,40.312434],[75.831221,40.327492],[75.785642,40.301025],[75.739446,40.299199],[75.709265,40.280939],[75.688323,40.343915],[75.669845,40.363982],[75.686475,40.418223],[75.717272,40.443278],[75.733287,40.474242],[75.646439,40.516567],[75.631041,40.548862],[75.627345,40.605226],[75.636584,40.624306],[75.599628,40.659727],[75.550353,40.64883],[75.467817,40.599773],[75.432093,40.563412],[75.355716,40.537947],[75.292274,40.483802],[75.268869,40.483802],[75.242383,40.448743],[75.206659,40.447833],[75.13521,40.463315],[75.102565,40.44009],[75.051442,40.449654],[75.021877,40.466958],[74.995392,40.455119],[74.963363,40.464681],[74.891914,40.507467],[74.844486,40.521117],[74.819233,40.505647],[74.814921,40.461039],[74.795211,40.443278],[74.908544,40.338897],[74.862965,40.32658],[74.824776,40.344371],[74.700357,40.346195],[74.697893,40.310153],[74.673255,40.278656],[74.618437,40.27957],[74.577169,40.260391],[74.534669,40.207851],[74.485394,40.182251],[74.433039,40.13148],[74.356662,40.089371],[74.316626,40.106767],[74.280902,40.09807],[74.26304,40.125074],[74.126301,40.104479],[74.113366,40.086624],[74.023439,40.085251],[74.008041,40.050901],[73.943367,40.016076],[73.980324,40.004617],[73.910722,39.934443],[73.907027,39.873843],[73.845433,39.831115],[73.841737,39.756163],[73.905795,39.741899],[73.924273,39.722108],[73.953838,39.600018],[73.916266,39.586644],[73.914418,39.564041],[73.883621,39.540969],[73.893476,39.528046],[73.868223,39.482794],[73.836194,39.472169],[73.745651,39.462005],[73.6471,39.474479],[73.61076,39.465702],[73.592898,39.412087],[73.502355,39.383877],[73.554094,39.350102],[73.554709,39.295935],[73.542391,39.269531],[73.564564,39.266288],[73.580579,39.237555],[73.623079,39.235237],[73.639709,39.220402],[73.657571,39.166136],[73.688368,39.154999],[73.719781,39.108112],[73.720397,39.071881],[73.743187,39.029588],[73.780143,39.026798],[73.820179,39.041674],[73.839889,39.008199],[73.846665,38.962145],[73.826339,38.916993],[73.767824,38.941202],[73.742571,38.933754],[73.70931,38.893241],[73.699455,38.857832],[73.729636,38.837324],[73.769056,38.775765],[73.757353,38.719755],[73.809092,38.634256],[73.799237,38.610878],[73.852208,38.584217],[73.89902,38.579071],[73.926121,38.536016],[74.011736,38.52478],[74.034526,38.541634],[74.090577,38.542102],[74.068403,38.585621],[74.088113,38.610878],[74.11275,38.611345],[74.147859,38.676785],[74.229779,38.656224],[74.353583,38.655757],[74.421952,38.647812],[74.455829,38.632853],[74.506336,38.637528],[74.546988,38.607604],[74.613509,38.593105],[74.639995,38.599653],[74.717603,38.542102],[74.78474,38.538357],[74.821697,38.491062],[74.862965,38.484035],[74.868508,38.403883],[74.834015,38.361193],[74.789668,38.324581],[74.806914,38.285602],[74.793363,38.271039],[74.816769,38.215576],[74.80445,38.167128],[74.821697,38.10311],[74.879595,38.021122],[74.92579,38.01735],[74.911008,37.966884],[74.919015,37.908357],[74.936877,37.876241],[74.917167,37.845057],[74.989848,37.797783],[75.006478,37.770823],[74.949196,37.725395],[74.923327,37.717347],[74.920863,37.684675],[74.891914,37.668097],[74.940573,37.559061],[75.000935,37.53059],[75.002167,37.511604],[75.035428,37.500685],[75.078543,37.511129],[75.090862,37.486915],[75.129666,37.459367],[75.153072,37.414223],[75.125971,37.388075],[75.140137,37.355258],[75.125971,37.322427],[75.078543,37.318144],[75.018181,37.293867],[74.927022,37.277678],[74.911008,37.233378],[74.816153,37.216699],[74.800139,37.248147],[74.753943,37.281011],[74.727458,37.282916],[74.665864,37.23576],[74.642458,37.261485],[74.598727,37.258151],[74.578401,37.231472],[74.54514,37.2491],[74.511263,37.240048],[74.477387,37.19954],[74.487858,37.161871],[74.465068,37.147085],[74.496481,37.116072],[74.498944,37.072155],[74.530357,37.082182],[74.56793,37.032512],[74.617205,37.043499],[74.632603,37.066425],[74.70898,37.084569],[74.739161,37.028212],[74.792747,37.027257],[74.806914,37.054485],[74.84695,37.056873],[74.84387,37.0134],[74.86974,36.990458],[74.893762,36.939772],[74.938725,36.94312],[74.927638,36.978029],[75.005862,36.99476],[75.032348,37.016745],[75.063145,37.006231],[75.172166,37.013877],[75.16847,36.991892],[75.244847,36.963207],[75.288579,36.974682],[75.345861,36.960816],[75.413614,36.954599],[75.396368,36.904367],[75.430245,36.873255],[75.434556,36.83303],[75.425933,36.778883],[75.458578,36.720861],[75.504773,36.743404],[75.536802,36.729975],[75.537418,36.773131],[75.588541,36.762584],[75.634121,36.771693],[75.724048,36.750597],[75.8072,36.707908],[75.871257,36.666636],[75.947018,36.590752],[75.924228,36.566242],[75.991981,36.505654],[76.035097,36.409386],[75.991365,36.35205],[75.998757,36.312034],[76.055423,36.252695],[76.060967,36.225182],[76.011691,36.229044],[76.016619,36.165294],[75.96796,36.159013],[75.936547,36.13485],[75.949482,36.070056],[75.982742,36.031347],[76.028322,36.016827],[76.044336,36.026991],[76.097307,36.022635],[76.117017,35.975186],[76.16506,35.908807],[76.146582,35.839946],[76.160133,35.82442],[76.221727,35.823449],[76.228502,35.837035],[76.298719,35.841401],[76.365857,35.82442],[76.369552,35.86323],[76.431762,35.851589],[76.471798,35.886021],[76.51553,35.881173],[76.55803,35.923347],[76.59745,35.895718],[76.579587,35.866625],[76.587595,35.840431],[76.566037,35.819082],[76.593754,35.771996],[76.69292,35.747714],[76.769297,35.653917],[76.848753,35.668018],[76.906651,35.615005],[76.967013,35.591649],[76.99781,35.611113],[77.072339,35.591162],[77.093281,35.569746],[77.195527,35.519103],[77.307628,35.540533],[77.331649,35.530793],[77.355055,35.494257],[77.396939,35.467942],[77.451758,35.46063],[77.518895,35.482075],[77.578025,35.47574],[77.590344,35.460143],[77.639619,35.45478],[77.657481,35.477689],[77.690742,35.448443],[77.735706,35.461605],[77.757879,35.497181],[77.797299,35.491334],[77.816394,35.518616],[77.85643,35.487436],[77.870596,35.495232],[77.914944,35.465017],[77.917408,35.490847],[77.951284,35.478664],[78.009799,35.491821],[78.029509,35.469404],[78.048603,35.491334],[78.140378,35.494745],[78.113892,35.466967],[78.107117,35.437229],[78.046755,35.384063],[78.013494,35.366008],[78.020885,35.315237],[78.01719,35.228267],[78.060306,35.180344],[78.062769,35.114772],[78.078784,35.100084],[78.124979,35.108407],[78.150849,35.069721],[78.123131,35.036897],[78.160704,34.990823],[78.201972,34.974642],[78.182262,34.936874],[78.206283,34.891726],[78.237696,34.882398],[78.230921,34.776288],[78.21429,34.760556],[78.213059,34.717771],[78.267261,34.705472],[78.265413,34.651335],[78.280812,34.623269],[78.346101,34.60406],[78.397224,34.605538],[78.427405,34.594207],[78.436029,34.543942],[78.492695,34.578441],[78.542586,34.574499],[78.559832,34.55725],[78.562912,34.51288],[78.58139,34.505483],[78.634977,34.538026],[78.708274,34.522249],[78.715049,34.502031],[78.758781,34.481807],[78.742766,34.45467],[78.809288,34.432955],[78.878273,34.391481],[78.899831,34.354929],[78.958961,34.386049],[78.973128,34.362833],[79.039649,34.33467],[79.048888,34.348506],[79.0107,34.399877],[79.039033,34.421601],[79.072294,34.412714],[79.161605,34.441345],[79.179467,34.422588],[79.241677,34.415183],[79.274322,34.435916],[79.326677,34.44332],[79.363017,34.428018],[79.435082,34.447761],[79.504683,34.45467],[79.545335,34.476381],[79.58106,34.456151],[79.675914,34.451216],[79.699936,34.477861],[79.735661,34.471447],[79.801566,34.478847],[79.861312,34.528166],[79.84345,34.55725],[79.88595,34.642965],[79.866856,34.671517],[79.906892,34.683821],[79.898268,34.732035],[79.947544,34.821008],[79.926602,34.849499],[79.961094,34.862759],[79.996819,34.856375],[80.003594,34.895162],[80.034391,34.902033],[80.041782,34.943252],[80.02392,34.971209],[80.04363,35.022196],[80.031311,35.034447],[80.078123,35.076578],[80.118159,35.066293],[80.23026,35.147565],[80.223484,35.177409],[80.257977,35.203331],[80.362687,35.20871],[80.267832,35.295701],[80.286926,35.35283],[80.321419,35.38699],[80.375006,35.387966],[80.432904,35.449418],[80.444607,35.417235],[80.514824,35.391869],[80.532686,35.404553],[80.56841,35.391381],[80.599823,35.409431],[80.65649,35.393821],[80.690982,35.364544],[80.689135,35.339162],[80.759968,35.334768],[80.844351,35.345508],[80.894242,35.324027],[80.924423,35.330862],[80.963844,35.310842],[81.026053,35.31133],[81.002648,35.334768],[81.030981,35.337209],[81.031597,35.380648],[81.054387,35.402602],[81.09935,35.40748],[81.103662,35.386015],[81.142466,35.365032],[81.191741,35.36552],[81.219458,35.319144],[81.26627,35.322562],[81.285364,35.345508],[81.314313,35.337209],[81.363588,35.354783],[81.385762,35.335256],[81.441196,35.333303],[81.447972,35.318167],[81.504638,35.279092],[81.513261,35.23511],[81.68634,35.235599],[81.736847,35.26248],[81.804601,35.270786],[81.853876,35.25857],[81.927789,35.271275],[81.955506,35.307423],[81.99123,35.30547],[82.030034,35.321585],[82.05344,35.35039],[82.029419,35.426013],[82.034346,35.451855],[82.071302,35.450393],[82.086701,35.467454],[82.164925,35.495719],[82.189563,35.513258],[82.234526,35.520565],[82.263475,35.547837],[82.2992,35.544916],[82.328149,35.559523],[82.350323,35.611113],[82.336156,35.651486],[82.392823,35.656349],[82.424852,35.712736],[82.468583,35.717595],[82.501844,35.701073],[82.546192,35.708362],[82.628727,35.692324],[82.652133,35.67288],[82.731589,35.637868],[82.780249,35.666073],[82.795031,35.688436],[82.873871,35.688922],[82.894813,35.673852],[82.967494,35.667532],[82.956407,35.636409],[82.981661,35.599922],[82.971806,35.548324],[82.998907,35.484512],[83.067892,35.46258],[83.088834,35.425526],[83.127022,35.398699],[83.178145,35.38943],[83.251442,35.417722],[83.280391,35.401138],[83.333978,35.397236],[83.405427,35.380648],[83.449159,35.382111],[83.502745,35.360639],[83.540318,35.364056],[83.54155,35.341603],[83.599448,35.351366],[83.622238,35.335256],[83.677672,35.361128],[83.785462,35.36308],[83.79778,35.354783],[83.885244,35.367472],[83.906186,35.40309],[84.005968,35.422599],[84.077417,35.400163],[84.095895,35.362592],[84.140859,35.379184],[84.160569,35.359663],[84.200605,35.381135],[84.274517,35.404065],[84.333032,35.413821],[84.424191,35.466479],[84.45314,35.473303],[84.475929,35.516181],[84.448828,35.550272],[84.513502,35.564391],[84.570168,35.588242],[84.628067,35.595055],[84.704443,35.616951],[84.729081,35.613546],[84.798066,35.647595],[84.920022,35.696213],[84.973608,35.709334],[84.99455,35.737028],[85.053065,35.752086],[85.146071,35.742371],[85.271107,35.788989],[85.341324,35.753543],[85.373969,35.700101],[85.518715,35.680658],[85.566142,35.6403],[85.612953,35.651486],[85.65299,35.731199],[85.691178,35.751114],[85.811286,35.778794],[85.835308,35.771996],[85.903677,35.78462],[85.949256,35.778794],[86.035488,35.846738],[86.05335,35.842857],[86.090306,35.876809],[86.093386,35.906868],[86.129111,35.941761],[86.150668,36.00424],[86.173458,36.008113],[86.199944,36.047801],[86.182081,36.064734],[86.187625,36.130983],[86.248603,36.141616],[86.2794,36.170608],[86.35824,36.168676],[86.392733,36.206834],[86.454943,36.221319],[86.515305,36.205385],[86.531935,36.227113],[86.599072,36.222285],[86.69947,36.24449],[86.746282,36.291777],[86.836209,36.291294],[86.86331,36.299977],[86.887332,36.262829],[86.931064,36.265242],[86.943998,36.284058],[86.996353,36.308658],[87.051788,36.2966],[87.08628,36.310587],[87.149106,36.297565],[87.161425,36.325535],[87.193454,36.349158],[87.292004,36.358797],[87.348055,36.393008],[87.363453,36.420463],[87.386859,36.412757],[87.426895,36.42576],[87.460155,36.409868],[87.470626,36.354459],[87.570409,36.342409],[87.6203,36.360243],[87.731785,36.384818],[87.767509,36.3747],[87.826023,36.391563],[87.838342,36.383855],[87.919646,36.39349],[87.95845,36.408423],[87.983088,36.437797],[88.006494,36.430575],[88.092109,36.43539],[88.134609,36.427205],[88.182652,36.452721],[88.222688,36.447426],[88.241782,36.468605],[88.282434,36.470049],[88.366202,36.458016],[88.356963,36.477268],[88.41055,36.473418],[88.470912,36.48208],[88.498629,36.446463],[88.573158,36.461386],[88.618121,36.428168],[88.623665,36.389636],[88.690186,36.367954],[88.766563,36.292259],[88.783809,36.291777],[88.802903,36.33807],[88.838628,36.353496],[88.870657,36.348193],[88.926091,36.36458],[88.964279,36.318785],[89.013554,36.315409],[89.054822,36.291777],[89.10225,36.281164],[89.126887,36.254626],[89.198952,36.260417],[89.232213,36.295636],[89.292575,36.231457],[89.335075,36.23725],[89.375727,36.228078],[89.490291,36.151281],[89.594385,36.126632],[89.614711,36.109712],[89.711414,36.093272],[89.766848,36.073925],[89.819819,36.080697],[89.914058,36.079246],[89.941159,36.067637],[89.944855,36.140649],[89.997825,36.168193],[90.019999,36.213594],[90.028006,36.258486],[90.003369,36.278752],[90.043405,36.276822],[90.058188,36.255591],[90.145651,36.239181],[90.130252,36.2078],[90.198006,36.187516],[90.23681,36.160462],[90.325505,36.159496],[90.424055,36.133883],[90.478258,36.13195],[90.534925,36.147899],[90.613149,36.126632],[90.659344,36.13485],[90.776373,36.086501],[90.815793,36.035703],[90.850285,36.016827],[90.922966,36.028927],[90.979017,36.106811],[91.081263,36.088436],[91.124994,36.115514],[91.09235,36.163844],[91.096045,36.219871],[91.051698,36.238215],[91.07264,36.299012],[91.026444,36.323607],[91.051698,36.433946],[91.028292,36.443093],[91.039995,36.474861],[91.035683,36.529703],[91.011662,36.539801],[90.905104,36.560474],[90.831191,36.55807],[90.810865,36.585466],[90.741264,36.585947],[90.72217,36.620058],[90.730793,36.655594],[90.706156,36.658955],[90.720938,36.708868],[90.754815,36.721341],[90.727098,36.755872],[90.732025,36.825844],[90.758511,36.825844],[90.853981,36.915373],[90.924198,36.921115],[90.983944,36.913459],[91.036915,36.929727],[91.051698,36.96751],[91.126842,36.978507],[91.133618,37.007665],[91.181045,37.025345],[91.216153,37.010054],[91.303617,37.012444],[91.291298,37.042544],[91.303617,37.083136],[91.286371,37.105095],[91.280211,37.163779],[91.1909,37.205737],[91.194596,37.273868],[91.134849,37.324331],[91.136081,37.355734],[91.113292,37.387124],[91.099741,37.447965],[91.073256,37.475992],[91.019669,37.493088],[90.958075,37.477891],[90.911879,37.519674],[90.865684,37.53059],[90.882314,37.575664],[90.854597,37.604117],[90.820104,37.613599],[90.777605,37.648672],[90.643946,37.696988],[90.586663,37.703144],[90.579272,37.720661],[90.519526,37.730601],[90.516446,38.207111],[90.531229,38.319886],[90.401882,38.311434],[90.361846,38.300163],[90.352607,38.233441],[90.280542,38.238142],[90.137644,38.340543],[90.179528,38.396848],[90.129636,38.400131],[90.111774,38.418889],[90.111774,38.477945],[90.130868,38.494341],[90.248513,38.491531],[90.315034,38.501835],[90.353222,38.482162],[90.427135,38.493873],[90.465323,38.521971],[90.463476,38.556611],[90.525685,38.561291],[90.560794,38.593573],[90.608837,38.594508],[90.606374,38.610878],[90.645794,38.635191],[90.619308,38.664636],[90.65996,38.674449],[90.724634,38.658094],[90.899561,38.679588],[90.970394,38.697806],[90.992567,38.695003],[91.188436,38.73096],[91.242639,38.752433],[91.298689,38.746365],[91.446515,38.813546],[91.501333,38.815411],[91.681188,38.852706],[91.694738,38.86622],[91.806223,38.872744],[91.87952,38.884391],[91.880752,38.899297],[91.966368,38.930961],[92.10865,38.963541],[92.173323,38.960749],[92.197961,38.983548],[92.263866,39.002153],[92.380279,38.999828],[92.416003,39.010524],[92.41046,39.03842],[92.366728,39.059335],[92.366112,39.096037],[92.343938,39.146181],[92.339011,39.236628],[92.378431,39.258411],[92.52564,39.368611],[92.639589,39.514196],[92.687632,39.657174],[92.745531,39.868331],[92.796654,40.153897],[92.906907,40.310609],[92.920458,40.391792],[92.928465,40.572504],[93.506216,40.648376],[93.760599,40.664721],[93.820961,40.793519],[93.809874,40.879548],[93.908424,40.983539],[94.01067,41.114875],[94.184365,41.268444],[94.534219,41.505966],[94.750413,41.538227],[94.809543,41.619256],[94.861898,41.668451],[94.969072,41.718948],[95.011572,41.726541],[95.110738,41.768513],[95.135991,41.772976],[95.16494,41.735474],[95.199433,41.719395],[95.194505,41.694821],[95.247476,41.61344],[95.299831,41.565994],[95.335556,41.644305],[95.39407,41.693481],[95.445193,41.719841],[95.57146,41.796181],[95.65646,41.826067],[95.759322,41.835878],[95.801206,41.848361],[95.855408,41.849699],[95.998306,41.906289],[96.054973,41.936124],[96.117183,41.985966],[96.137509,42.019765],[96.13874,42.05399],[96.077147,42.149457],[96.178161,42.21775],[96.040806,42.326688],[96.042038,42.352787],[96.06606,42.414674],[95.978596,42.436762],[96.0174,42.482239],[96.02356,42.542675],[96.072219,42.569566],[96.103632,42.604375],[96.166458,42.623314],[96.386348,42.727592]]]]}},{"type":"Feature","properties":{"adcode":710000,"name":"台湾省","center":[121.509062,25.044332],"centroid":[120.971485,23.749452],"childrenNum":0,"level":"province","parent":{"adcode":100000},"subFeatureIndex":31,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[120.443706,22.441432],[120.517619,22.408793],[120.569973,22.361757],[120.640806,22.241605],[120.659285,22.154056],[120.661748,22.067007],[120.651277,22.033171],[120.667908,21.983235],[120.701784,21.927174],[120.743052,21.915515],[120.781857,21.923843],[120.854537,21.883309],[120.873016,21.897191],[120.86624,21.984345],[120.907508,22.033171],[120.912436,22.086418],[120.903197,22.12634],[120.914899,22.302525],[120.981421,22.528248],[121.014682,22.584069],[121.03316,22.650914],[121.078739,22.669691],[121.170514,22.723247],[121.21055,22.770711],[121.237652,22.836362],[121.276456,22.877171],[121.324499,22.945526],[121.35468,23.00999],[121.370695,23.084334],[121.409499,23.1025],[121.430441,23.137175],[121.415042,23.196047],[121.440296,23.271937],[121.479716,23.322507],[121.497578,23.419744],[121.5216,23.483431],[121.522832,23.538858],[121.587505,23.760878],[121.621382,23.920718],[121.65957,24.007125],[121.63986,24.064514],[121.643556,24.097843],[121.678048,24.133895],[121.689135,24.174303],[121.809243,24.339083],[121.82649,24.423572],[121.867758,24.47914],[121.88562,24.529784],[121.892395,24.617953],[121.86283,24.671261],[121.841272,24.734329],[121.844968,24.836476],[121.933047,24.938539],[122.012503,25.001471],[121.98109,25.030757],[121.947214,25.031841],[121.917033,25.138076],[121.841888,25.135367],[121.782142,25.160287],[121.745186,25.161912],[121.707613,25.191701],[121.700222,25.226896],[121.655259,25.242054],[121.62323,25.29455],[121.585041,25.309159],[121.53515,25.307535],[121.444607,25.27074],[121.413194,25.238806],[121.371926,25.159746],[121.319572,25.140785],[121.209318,25.12724],[121.132942,25.078466],[121.102145,25.075214],[121.024537,25.040517],[121.009754,24.993878],[120.961095,24.940167],[120.914899,24.864715],[120.89211,24.767482],[120.82374,24.688118],[120.762147,24.658208],[120.68885,24.600542],[120.642654,24.490033],[120.589068,24.43229],[120.546568,24.370159],[120.520698,24.311816],[120.470807,24.242533],[120.451713,24.182493],[120.391967,24.118055],[120.316206,23.984708],[120.278018,23.92783],[120.245989,23.840276],[120.175156,23.807427],[120.102476,23.701162],[120.095084,23.58768],[120.12157,23.504836],[120.108019,23.341191],[120.081534,23.291728],[120.018708,23.073322],[120.029795,23.048544],[120.133272,23.000625],[120.149287,22.896468],[120.20041,22.721039],[120.274323,22.560307],[120.297112,22.531565],[120.443706,22.441432]]],[[[124.542782,25.903886],[124.584666,25.908731],[124.566804,25.941563],[124.542782,25.903886]]],[[[123.445178,25.726102],[123.469816,25.712623],[123.50862,25.722867],[123.512316,25.755212],[123.479055,25.768687],[123.445794,25.749822],[123.445178,25.726102]]],[[[119.646064,23.550928],[119.691028,23.547087],[119.678093,23.600294],[119.61034,23.604132],[119.601717,23.575613],[119.566608,23.584937],[119.562297,23.530627],[119.578927,23.502641],[119.609108,23.503738],[119.646064,23.550928]]],[[[123.666916,25.914114],[123.706952,25.91519],[123.689706,25.939949],[123.666916,25.914114]]],[[[119.506246,23.625518],[119.506246,23.577259],[119.47237,23.556962],[119.519181,23.559705],[119.52534,23.62497],[119.506246,23.625518]]],[[[119.497623,23.38679],[119.495159,23.349982],[119.516717,23.349982],[119.497623,23.38679]]],[[[119.557369,23.666634],[119.608492,23.620035],[119.615268,23.661153],[119.586318,23.675952],[119.557369,23.666634]]],[[[122.066706,25.6247],[122.087032,25.61067],[122.092575,25.639268],[122.066706,25.6247]]],[[[121.468013,22.67687],[121.474788,22.643734],[121.513592,22.631582],[121.514824,22.676318],[121.468013,22.67687]]],[[[121.510513,22.086972],[121.507433,22.048704],[121.533918,22.022076],[121.594281,21.995443],[121.604752,22.022631],[121.575186,22.037055],[121.575802,22.0842],[121.510513,22.086972]]],[[[122.097503,25.499987],[122.110438,25.465952],[122.122141,25.495666],[122.097503,25.499987]]],[[[119.421247,23.216949],[119.436029,23.186146],[119.453275,23.216399],[119.421247,23.216949]]],[[[120.355011,22.327439],[120.395663,22.342385],[120.383344,22.355669],[120.355011,22.327439]]]]}},{"type":"Feature","properties":{"adcode":810000,"name":"香港特别行政区","center":[114.173355,22.320048],"centroid":[114.134357,22.377366],"childrenNum":18,"level":"province","parent":{"adcode":100000},"subFeatureIndex":32,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[114.031778,22.503923],[114.000981,22.491206],[113.977575,22.45692],[113.918445,22.418199],[113.920293,22.367845],[113.951706,22.355116],[113.956633,22.359543],[113.980039,22.366185],[114.026234,22.34792],[113.955401,22.298649],[113.969568,22.321349],[113.898119,22.308615],[113.889496,22.271514],[113.8433,22.229418],[113.84946,22.191188],[113.899351,22.215568],[113.935691,22.205041],[113.981271,22.229972],[113.996669,22.206149],[114.026234,22.229418],[114.004676,22.239389],[114.02993,22.263207],[114.034857,22.300864],[114.069966,22.326885],[114.121089,22.320795],[114.145726,22.300864],[114.120473,22.272068],[114.164821,22.226648],[114.200545,22.232188],[114.203009,22.206703],[114.265835,22.200608],[114.248588,22.274837],[114.262139,22.294773],[114.284929,22.263761],[114.313262,22.264315],[114.315726,22.299203],[114.315726,22.299756],[114.278153,22.328546],[114.283081,22.386661],[114.322501,22.385554],[114.323117,22.385554],[114.323733,22.385001],[114.323733,22.384447],[114.356994,22.340171],[114.394566,22.361757],[114.385327,22.41156],[114.406269,22.432582],[114.406269,22.433688],[114.376088,22.436454],[114.325581,22.479041],[114.278769,22.435901],[114.220255,22.427603],[114.205473,22.449729],[114.23319,22.466875],[114.2529,22.445304],[114.340979,22.50337],[114.309566,22.497288],[114.28924,22.52272],[114.263987,22.541515],[114.263371,22.541515],[114.260291,22.547595],[114.232574,22.528801],[114.232574,22.539857],[114.222719,22.553122],[114.166052,22.559201],[114.156813,22.543726],[114.095219,22.534329],[114.082285,22.512216],[114.031778,22.503923]]],[[[114.142647,22.213906],[114.123553,22.238836],[114.120473,22.177888],[114.154965,22.177888],[114.166668,22.205041],[114.142647,22.213906]]],[[[114.305871,22.372273],[114.313878,22.340724],[114.332972,22.353455],[114.305255,22.372826],[114.305871,22.372273]]],[[[114.320037,22.381127],[114.323733,22.384447],[114.323733,22.385001],[114.323117,22.385554],[114.322501,22.385554],[114.319421,22.382234],[114.320037,22.38168],[114.320037,22.381127]]],[[[114.305871,22.369506],[114.305871,22.372273],[114.305255,22.372826],[114.305871,22.369506]]],[[[114.315726,22.299203],[114.316958,22.298649],[114.316342,22.30031],[114.315726,22.299756],[114.315726,22.299203]]],[[[114.319421,22.382234],[114.320037,22.381127],[114.320037,22.38168],[114.319421,22.382234]]],[[[114.372392,22.32301],[114.373008,22.323564],[114.372392,22.323564],[114.372392,22.32301]]],[[[114.323733,22.297541],[114.324349,22.297541],[114.323733,22.298095],[114.323733,22.297541]]]]}},{"type":"Feature","properties":{"adcode":820000,"name":"澳门特别行政区","center":[113.54909,22.198951],"centroid":[113.566988,22.159307],"childrenNum":8,"level":"province","parent":{"adcode":100000},"subFeatureIndex":33,"acroutes":[100000]},"geometry":{"type":"MultiPolygon","coordinates":[[[[113.554425,22.107489],[113.6037,22.132438],[113.575983,22.194513],[113.558736,22.212244],[113.53841,22.209473],[113.534715,22.174009],[113.554425,22.142416],[113.554425,22.107489]]],[[[113.586453,22.201162],[113.575983,22.201162],[113.575983,22.194513],[113.586453,22.201162]]]]}},{"type":"Feature","properties":{"name":"","adchar":"JD","adcode":"100000_JD"},"geometry":{"type":"MultiPolygon","coordinates":[[[[122.51865306,23.46078502],[122.79861399,24.57367379],[122.79889322,24.57678999],[122.79819583,24.57983997],[122.79659008,24.58252516],[122.79423315,24.58458272],[122.79135575,24.58581125],[122.78823955,24.58609049],[122.78518957,24.5853931],[122.78250438,24.58378734],[122.78044682,24.58143041],[122.77921829,24.57855302],[122.49925737,23.46566424],[122.49897813,23.46254804],[122.49967552,23.45949807],[122.50128127,23.45681287],[122.5036382,23.45475531],[122.5065156,23.45352678],[122.50963181,23.45324755],[122.51268178,23.45394494],[122.51536697,23.45555069],[122.51742454,23.45790762],[122.51865306,23.46078502]]],[[[121.17202617,20.8054593],[121.90938804,21.68743347],[121.9109946,21.69011818],[121.91169291,21.69316794],[121.91141462,21.69628423],[121.91018696,21.699162],[121.9081301,21.70151955],[121.9054454,21.70312611],[121.90239563,21.70382443],[121.89927934,21.70354613],[121.89640158,21.70231847],[121.89404403,21.70026162],[121.15668216,20.81828744],[121.1550756,20.81560273],[121.15437729,20.81255297],[121.15465558,20.80943668],[121.15588324,20.80655891],[121.1579401,20.80420136],[121.1606248,20.8025948],[121.16367457,20.80189649],[121.16679085,20.80217478],[121.16966862,20.80340244],[121.17202617,20.8054593]]],[[[119.47366172,18.00707291],[120.02569734,19.02403788],[120.02674143,19.02698721],[120.02682302,19.03011484],[120.02593412,19.0331146],[120.02416175,19.03569286],[120.02167941,19.03759723],[120.01873007,19.03864132],[120.01560245,19.03872291],[120.01260269,19.03783401],[120.01002443,19.03606165],[120.00812005,19.0335793],[119.45608443,18.01661433],[119.45504035,18.01366499],[119.45495876,18.01053737],[119.45584765,18.00753761],[119.45762002,18.00495935],[119.46010237,18.00305497],[119.4630517,18.00201089],[119.46617933,18.0019293],[119.46917909,18.0028182],[119.47175735,18.00459056],[119.47366172,18.00707291]]],[[[119.0726757,15.04098494],[119.0726757,16.04388528],[119.07218626,16.04697545],[119.07076587,16.04976313],[119.06855355,16.05197545],[119.06576587,16.05339584],[119.0626757,16.05388528],[119.05958553,16.05339584],[119.05679784,16.05197545],[119.05458553,16.04976313],[119.05316513,16.04697545],[119.0526757,16.04388528],[119.0526757,15.04105889],[119.0521839,15.00781004],[119.05262758,15.00471297],[119.05400659,15.00190458],[119.05618595,14.99965979],[119.05895232,14.99819832],[119.06203491,14.99766324],[119.06513198,14.99810691],[119.06794036,14.99948592],[119.07018516,15.00166528],[119.07164663,15.00443165],[119.07218171,15.00751424],[119.0726746,15.04083704],[119.0726757,15.04098494]]],[[[118.68646749,11.18959191],[118.52518702,10.91547751],[118.52404181,10.91256595],[118.52385237,10.909443],[118.52463726,10.90641436],[118.52631962,10.9037765],[118.5287348,10.90178762],[118.53164636,10.90064241],[118.53476931,10.90045298],[118.53779795,10.90123786],[118.54043581,10.90292022],[118.54242469,10.9053354],[118.70409227,11.18010771],[118.70476212,11.18147468],[118.87431591,11.606662],[118.87459939,11.60747236],[118.98894963,11.98573108],[118.98937534,11.98883067],[118.9888224,11.99191011],[118.98734492,11.99466796],[118.98508753,11.99683427],[118.98227119,11.99819697],[118.9791716,11.99862269],[118.97609216,11.99806975],[118.97333431,11.99659227],[118.97116801,11.99433487],[118.9698053,11.99151854],[118.85557939,11.6136711],[118.68646749,11.18959191]]],[[[115.54466883,7.14672265],[116.2504858,7.979279],[116.25211077,7.98195261],[116.25283001,7.9849975],[116.25257312,7.98811563],[116.25136525,7.99100176],[116.24932463,7.99337338],[116.24665102,7.99499834],[116.24360613,7.99571758],[116.240488,7.99546069],[116.23760187,7.99425282],[116.23523025,7.99221221],[115.52941328,7.15965587],[115.52778832,7.15698226],[115.52706908,7.15393736],[115.52732596,7.15081924],[115.52853383,7.1479331],[115.53057445,7.14556148],[115.53324806,7.14393652],[115.53629295,7.14321728],[115.53941108,7.14347417],[115.54229721,7.14468204],[115.54466883,7.14672265]]],[[[112.30705249,3.53487257],[111.78690114,3.41687263],[111.78399583,3.41571167],[111.78159146,3.41370973],[111.77992341,3.41106279],[111.77915495,3.40802995],[111.77936129,3.40490807],[111.78052226,3.40200275],[111.78252419,3.39959839],[111.78517113,3.39793033],[111.78820398,3.39716187],[111.79132585,3.39736822],[112.31181658,3.51544515],[112.31248917,3.51562254],[112.52147408,3.5785908],[112.52281386,3.57910186],[112.85206367,3.73256867],[112.85465776,3.7343178],[112.85658437,3.73678292],[112.85765492,3.73972276],[112.85776462,3.74284952],[112.85690272,3.74585715],[112.8551536,3.74845124],[112.85268847,3.75037785],[112.84974864,3.7514484],[112.84662187,3.75155809],[112.84361424,3.7506962],[112.51501594,3.59753306],[112.30705249,3.53487257]]],[[[108.26055972,6.08912451],[108.29013305,6.01266273],[108.29170425,6.00995718],[108.29403462,6.00786957],[108.29689603,6.00660426],[108.3000084,6.00628511],[108.30306706,6.00694335],[108.30577262,6.00851455],[108.30786022,6.01084492],[108.30912553,6.01370633],[108.30944469,6.0168187],[108.30878645,6.01987736],[108.279563,6.09543449],[108.25611734,6.22752625],[108.21679964,6.53816468],[108.21876335,6.94964057],[108.24419535,7.07390742],[108.24433543,7.07703297],[108.24350281,7.08004883],[108.24177899,7.0826598],[108.2393327,7.08461028],[108.23640341,7.08570936],[108.23327786,7.08584944],[108.230262,7.08501682],[108.22765103,7.083293],[108.22570055,7.08084671],[108.22460147,7.07791743],[108.19897125,6.95268198],[108.1987683,6.95072469],[108.19679674,6.53760583],[108.19687578,6.53630242],[108.23630689,6.22476797],[108.23638164,6.22427602],[108.26004031,6.09098419],[108.26055972,6.08912451]]],[[[110.12822847,11.36894451],[110.05553696,11.25335394],[110.05430621,11.25047749],[110.05402458,11.2473615],[110.05471962,11.24431099],[110.05632331,11.24162456],[110.05867865,11.23956519],[110.0615551,11.23833444],[110.06467109,11.23805281],[110.0677216,11.23874785],[110.07040803,11.24035153],[110.07246741,11.24270688],[110.14541497,11.35870461],[110.14588682,11.35954163],[110.20700505,11.48128846],[110.20728377,11.48189306],[110.25854422,11.60358735],[110.25901765,11.60499559],[110.30436343,11.7826124],[110.30456934,11.78364161],[110.32822801,11.94571326],[110.32832827,11.94685414],[110.33424294,12.14159753],[110.33424553,12.14210167],[110.33227398,12.24038351],[110.33172267,12.24346324],[110.33024665,12.24622187],[110.3279904,12.24838938],[110.32517479,12.24975358],[110.32207543,12.25018094],[110.3189957,12.24962962],[110.31623706,12.2481536],[110.31406956,12.24589736],[110.31270536,12.24308175],[110.312278,12.23998238],[110.3142445,12.14195265],[110.3083549,11.94803461],[110.28485499,11.78705054],[110.23982347,11.61066468],[110.18898148,11.48996382],[110.12822847,11.36894451]]],[[[109.82951587,15.22896754],[109.84522534,15.15316562],[109.84633168,15.15023907],[109.84828823,15.14779763],[109.85090347,15.14608029],[109.85392139,15.14525516],[109.85704658,15.145403],[109.85997314,15.14650935],[109.86241457,15.1484659],[109.86413191,15.15108113],[109.86495704,15.15409906],[109.8648092,15.15722425],[109.84903675,15.23333003],[109.84889209,15.23393326],[109.78974541,15.45068337],[109.7892391,15.45210582],[109.69066131,15.67432448],[109.6900529,15.67548445],[109.59147511,15.83677407],[109.59116145,15.8372556],[109.53201478,15.92259221],[109.53166592,15.92306523],[109.30888011,16.20725797],[109.30658844,16.20938798],[109.30375073,16.21070558],[109.30064474,16.21108179],[109.29757451,16.21047978],[109.29484059,16.20895848],[109.29271057,16.20666681],[109.29139298,16.2038291],[109.29101677,16.20072311],[109.29161878,16.19765288],[109.29314007,16.19491896],[109.51574449,15.91095759],[109.57455994,15.82609887],[109.67264555,15.66561455],[109.77065019,15.44468789],[109.82951587,15.22896754]]]]}}]} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/logo.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/logo.png new file mode 100644 index 00000000..1aa85a35 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/logo.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/ayu-dark.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/ayu-dark.png new file mode 100644 index 00000000..e670f2f3 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/ayu-dark.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/cobalt.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/cobalt.png new file mode 100644 index 00000000..b055a400 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/cobalt.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/default.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/default.png new file mode 100644 index 00000000..8ad18ece Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/default.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/eclipse.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/eclipse.png new file mode 100644 index 00000000..3fd419d0 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/eclipse.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/idea.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/idea.png new file mode 100644 index 00000000..3fa954de Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/idea.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/solarized light.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/solarized light.png new file mode 100644 index 00000000..3cd91963 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/assets/theme/solarized light.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/CodemirrorEditor/index.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/CodemirrorEditor/index.vue new file mode 100644 index 00000000..dca9783b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/CodemirrorEditor/index.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/Common.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/Common.vue new file mode 100644 index 00000000..d8fbd91c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/Common.vue @@ -0,0 +1,506 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/FunctionPage.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/FunctionPage.vue new file mode 100644 index 00000000..b776142e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/FunctionPage.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/dashboard/LiveChart.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/dashboard/LiveChart.vue new file mode 100644 index 00000000..c08ca878 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/dashboard/LiveChart.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/dashboard/Shortcuts.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/dashboard/Shortcuts.vue new file mode 100644 index 00000000..cf9367dc --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/dashboard/Shortcuts.vue @@ -0,0 +1,437 @@ + + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/NavigateBar.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/NavigateBar.vue new file mode 100644 index 00000000..174b23f8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/NavigateBar.vue @@ -0,0 +1,19 @@ + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/NavigateMenuBar.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/NavigateMenuBar.vue new file mode 100644 index 00000000..cf4197f6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/NavigateMenuBar.vue @@ -0,0 +1,78 @@ + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/SideBar.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/SideBar.vue new file mode 100644 index 00000000..cf75d770 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/SideBar.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Breadcrumb.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Breadcrumb.vue new file mode 100644 index 00000000..c304bded --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Breadcrumb.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Hamburger.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Hamburger.vue new file mode 100644 index 00000000..f253bce6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Hamburger.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Logo.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Logo.vue new file mode 100644 index 00000000..e1259055 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Logo.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Personal.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Personal.vue new file mode 100644 index 00000000..b55d3098 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Personal.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/SlideMenu.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/SlideMenu.vue new file mode 100644 index 00000000..e6440d67 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/SlideMenu.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Zone.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Zone.vue new file mode 100644 index 00000000..e801e63c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/layout/components/Zone.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/CardTable.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/CardTable.vue new file mode 100644 index 00000000..0b02ebdb --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/CardTable.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/VeTable.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/VeTable.vue new file mode 100644 index 00000000..da86a80f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/VeTable.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/index.js new file mode 100644 index 00000000..d4d06cab --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/components/veBaseComponents/index.js @@ -0,0 +1,18 @@ +export default { + install: (app) => { + const files = require.context( + "@/components/veBaseComponents", + false, + /\.vue$/, + ); + files.keys().forEach((key) => { + // 获取组件配置 + const componentConfig = files(key); + // 全局注册组件 + app.component( + componentConfig.default.name, + componentConfig.default, + ); + }); + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/config.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/config.js new file mode 100644 index 00000000..c1ea0812 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/config.js @@ -0,0 +1,5 @@ +module.exports = { + dev_mock: false, //开发环境启用mock true:启用 + pro_mock: false, //生产环境启用mock true:启用 + moduleName: "smart-agent-network-server", +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/index.js new file mode 100644 index 00000000..9e9e43ed --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/index.js @@ -0,0 +1,12 @@ +export default { + install: (app, { router, store }) => { + const files = require.context("@/directives/modules", false, /\.js$/); + files.keys().forEach((key) => { + let name = key.replace(/(\.\/|\.js)/g, ""); + let method = files(key).default; + app.directive(name, (el, binding) => + method(el, binding, app, router, store), + ); + }); + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/modules/permission.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/modules/permission.js new file mode 100644 index 00000000..62e14b60 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/modules/permission.js @@ -0,0 +1,23 @@ +const permission = (el, binding, app, router, store) => { + const { value } = binding; + function checkArray(permission) { + let path = app.config.globalProperties.$route.name; + + let _permission = permission.map((element) => { + let url = path.replace(/-/g, "/") + "/" + element; + return url; + }); + let arr = store.getters.permissionList; + return _permission.some((key) => arr.includes(key)); + } + + if (value && value.length > 0) { + let hasPermission = checkArray(value); + if (!hasPermission) { + // 没有权限 移除Dom元素 + el.parentNode && el.parentNode.removeChild(el); + } + } +}; + +export default permission; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/modules/resize.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/modules/resize.js new file mode 100644 index 00000000..076149ab --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/directives/modules/resize.js @@ -0,0 +1,14 @@ +import { useElementSize, debouncedWatch } from "@vueuse/core"; +const resize = (el, binding) => { + const { width } = useElementSize(el); + if (width.value === 0) return; + const { value } = binding; + debouncedWatch( + width, + () => { + value && value.resize(); + }, + { debounce: 500 }, + ); +}; +export default resize; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/main.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/main.js new file mode 100644 index 00000000..91db18fe --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/main.js @@ -0,0 +1,27 @@ +import { createApp } from "vue"; +import axios from "@/plugins/axios"; +import App from "@/App.vue"; +import router from "@/router"; +import store from "@/store"; +import installElementPlus from "@/plugins/element"; +import elementIcon from "@/plugins/svgicon"; +import permission from "@/plugins/permission"; +import mock from "@/plugins/mock"; +import directives from "@/directives"; +import veBaseComponents from "@/components/veBaseComponents"; +// import JsonViewer from 'vue-json-viewer'; + +import "normalize.css/normalize.css"; +import "nprogress/nprogress.css"; +import "@/styles/common.scss"; +const app = createApp(App); +app.use(mock) + .use(elementIcon) + .use(veBaseComponents) + .use(store) + .use(router) + .use(installElementPlus) + .use(axios, { router, store, opt: "VE_API" }) + .use(permission, { router, store }) + .use(directives, { router, store }) + .mount("#app"); diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/axios.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/axios.js new file mode 100644 index 00000000..01e41d82 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/axios.js @@ -0,0 +1,237 @@ +/* eslint-disable indent */ +"use strict"; + +import axios from "axios"; +// import Qs from "qs"; +import NProgress from "nprogress"; +import { SET_TOKEN } from "@/store/modules/app/type"; +import { ElMessage } from "element-plus"; + +// Full config: https://github.com/axios/axios#request-config +// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; +// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; +// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; +const install = (app, { router, store, opt }) => { + let config = { + Global: true, + // baseURL: process.env.baseURL || process.env.apiUrl || "" + // timeout: 60 * 1000, // Timeout + // withCredentials: true, // Check cross-site Access-Control + // {"userName":"Administrator","pwd":"123456"} + // userName=Administrator&pwd=123456 + }; + // if (VE_ENV.MODE === "production") { + // console.log("VE_ENV.MODE:" + VE_ENV.MODE); + // config.transformRequest = [(data) => Qs.parse(data)]; + // } + + const _axios = axios.create(config); + let ve_loading; + let ve_message = null; + let loadingCount = 0; + // 请求拦截 + _axios.interceptors.request.use( + (config) => { + NProgress.done(); + if (config.Global) { + NProgress.start(); + ve_loading = app.config.globalProperties.$loading({ + lock: true, + text: "Loading", + spinner: "el-icon-loading", + background: "rgba(0,0,0,0.1)", + }); + } + loadingCount++; + //*请求头添加token + const token = store.getters.token; + const access_token = store.getters.access_token; + const refresh_token = store.getters.refresh_token; + const zone_id = store.getters.zone_id; + const user_id = store.getters.user_id; + // debugger; + token && (config.headers.Authorization = token); + + if (access_token) { + config.headers.access_token = access_token; + } + + if (refresh_token) { + config.headers.refresh_token = refresh_token; + } + if (zone_id) { + config.headers.zone_id = zone_id; + } + if (user_id) { + config.headers.user_id = user_id; + } + // Do something before request is sent + return config; + }, + (error) => { + // Do something with request error + return Promise.reject(error); + }, + ); + + // Add a response interceptor + // 响应拦截 + _axios.interceptors.response.use( + (response) => { + // TODO 根据响应头更新token + store.dispatch(`app/${SET_TOKEN}`, new Date().getTime()); + loadingCount--; + if (loadingCount <= 0) { + NProgress.done(); + ve_loading.close(); + } + // eslint-disable-next-line no-unused-vars + let contentType = response.headers["content-type"]; + if ( + "application/octet-stream" === contentType && + response.status === 200 + ) { + return response; + } + let type = "success"; + if (response.status !== 200 && response.data.code !== 0) { + type = "error"; + ElMessage.error("Oops, this is a error message."); + } + if (ve_message) { + ve_message.close(); + ve_message = null; + } + ve_message = app.config.globalProperties.$message({ + type, + message: response.data.message, + }); + // Do something with response data + return response.data; + }, + (error) => { + loadingCount--; + if (loadingCount <= 0) { + NProgress.done(); + ve_loading.close(); + } + if (error && error.response) { + let message = ""; + switch (error.response.status) { + case 400: + message = "请求错误"; + break; + case 401: { + message = "未授权,请登录"; + router.replace({ + name: "Login", + }); + break; + } + case 403: + message = "没有权限,拒绝访问"; + break; + case 404: + message = `请求地址出错`; + break; + case 408: + message = "请求超时"; + break; + case 500: + message = "服务器内部错误"; + break; + case 501: + message = "服务未实现"; + break; + case 502: + message = "网关错误"; + break; + case 503: + message = "服务不可用"; + break; + case 504: + message = "网关超时"; + break; + case 505: + message = "HTTP版本不受支持"; + break; + default: + break; + } + if (ve_message) { + ve_message.close(); + ve_message = null; + } + ve_message = app.config.globalProperties.$message({ + message, + type: "error", + }); + } + // Do something with response error + return Promise.reject(error); + }, + ); + + /** + * 字符串替换 + * + * + * + var data = { + name:"张三", + age:23, + sex:"男" + } + var text = "我叫{{name}},我今年{{age}}岁,我的性别是{{sex}}!".format(data); + console.log(text); + * + * + * + * @returns {String} + */ + String.prototype.format = function () { + if (arguments.length === 0) return this; + var obj = arguments[0]; + var s = this; + for (var key in obj) { + s = s.replace(new RegExp("\\{\\{" + key + "\\}\\}", "g"), obj[key]); + } + return s; + }; + + const method = { + post: (url, p, config) => _axios.post(url, p, config), + put: (url, p, config) => _axios.put(url, p, config), + getUrl: (url, p, config) => + _axios.get(url.format(p), { params: p, data: p }, config), + get: (url, p, config) => + _axios.get(url, Object.assign(config, { params: p })), + delete: (url, p, config) => + _axios.delete(url.format(p), { params: p, data: p }, config), + deleteUrl: (url, p, config) => + _axios.delete(url.format(p), { params: p, data: p }, config), + deleteBody: (url, p, config) => _axios.delete(url, { data: p }, config), + // patch: (url, p, config) => + // _axios.patch(url, Object.assign(config, { params: p })), + patch: (url, p, config) => _axios.patch(url, p, config), + patchUrl: (url, p, config) => + _axios.patch(url.format(p), { params: p, data: p }, config), + }; + + let api = {}; + const files = require.context("@/api/modules", false, /\.js$/); + files.keys().forEach((key) => { + const fileName = key.replace(/(\.\/|\.js)/g, ""); + api[fileName] = {}; + let obj = files(key); + Object.keys(obj).forEach((item) => { + api[fileName][item] = (p, config = {}) => + method[obj[item].type](obj[item].url, p, config); + }); + }); + + window[opt] = api; + app.config.globalProperties[opt] = api; +}; + +export default { install }; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/element.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/element.js new file mode 100644 index 00000000..9fbed2df --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/element.js @@ -0,0 +1,13 @@ +import ElementPlus from "element-plus"; +import "element-plus/dist/index.css"; +// import zhCn from "element-plus/es/locale/lang/zh-cn"; +import zhCn from "element-plus/dist/locale/zh-cn.mjs"; +import "dayjs/locale/zh-cn"; +export default { + install: (app) => { + app.use(ElementPlus, { + locale: zhCn, + size: "default", + }); + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/mock.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/mock.js new file mode 100644 index 00000000..1f97c4e9 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/mock.js @@ -0,0 +1,20 @@ +export default { + install: () => { + const config = require("@/config"); + if (config.pro_mock && VE_ENV.MODE === "production") { + const Mock = require("mockjs"); //引入 + + const files = require.context("@/api/modules", false, /\.js$/); + files.keys().forEach((key) => { + let obj = files(key); + Object.keys(obj).forEach((item) => { + Mock.mock( + obj[item].url, + obj[item].type, + obj[item].response, + ); + }); + }); + } + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/permission.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/permission.js new file mode 100644 index 00000000..65497082 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/permission.js @@ -0,0 +1,446 @@ +import { SET_MENU_LIST, SET_PERMISSION_LIST } from "@/store/modules/app/type"; + +import globalRoutes from "@/router/globalRoutes"; +import mainRoutes from "@/router/mainRoutes"; +import NProgress from "nprogress"; +import { moduleName } from "@/config"; + +/** + * 判断当前路由类型, global: 全局路由, main: 主入口路由 + * @param {*} route 当前路由 + */ +function fnCurrentRouteType(route, globalRoutes = []) { + let temp = []; + for (let i = 0; i < globalRoutes.length; i++) { + if (route.name === globalRoutes[i].name) { + return "global"; + } else if ( + globalRoutes[i].children && + globalRoutes[i].children.length >= 1 + ) { + temp = temp.concat(globalRoutes[i].children); + } + } + return temp.length >= 1 ? fnCurrentRouteType(route, temp) : "main"; +} + +export default { + install: (app, { router, store }) => { + // let router = opt; + router.beforeEach(async (to, from, next) => { + const token = store.getters.token; + if ( + router.options.isAddDynamicMenuRoutes || + fnCurrentRouteType(to, globalRoutes) === "global" + ) { + //* 1. 已经添加 or 全局路由, 直接访问 + if (to.meta.title) { + document.title = to.meta.title; + } + NProgress.start(); + next(); + } else { + // let token = sessionStorage.getItem("token"); + if (!token || !/\S/.test(token)) { + next({ name: "Login" }); + } else { + let data = await VE_API.system.userMenuList({ + module: moduleName, + }); + // 过滤没有的菜单 + // let data = await VE_API.system.menuList(); + if (data && data.code === 0) { + // const uname = store.getters.uname; + // if ("admin" === uname && data.data.length === 0) { + // data.data = data.data.concat(menuList); + // } + if (data.data.length === 0) { + data.data = data.data.concat(menuList); + } + let _list = XE.clone(data.data, true); + + data.data = XE.mapTree( + XE.toArrayTree(_list, { + sortKey: "sort", + key: "code", + parentKey: "parentCode", + }), + (item) => { + if ( + item.children && + item.children.length <= 0 + ) { + delete item.children; + } + return item; + }, + ); + await fnAddDynamicMenuRoutes(data.data); + router.options.isAddDynamicMenuRoutes = true; + await store.dispatch(`app/${SET_MENU_LIST}`, data.data); + await store.dispatch( + `app/${SET_PERMISSION_LIST}`, + data.data, + ); + NProgress.start(); + next({ ...to, replace: true }); + } else { + next({ name: "Login" }); + } + } + } + }); + router.afterEach(() => { + NProgress.done(); + }); + + /** + * 添加动态(菜单)路由 + * @param {*} menuList 菜单列表 + * @param {*} routes 递归创建的动态(菜单)路由 + */ + // eslint-disable-next-line no-unused-vars + const fnAddDynamicMenuRoutes = async (menuList = [], routes = []) => { + let temp = []; + for (let i = 0; i < menuList.length; i++) { + if ( + menuList[i].type === 0 && + menuList[i].children && + menuList[i].children.length >= 1 + ) { + temp = temp.concat(menuList[i].children); + } else if (menuList[i].type === 1) { + // } else if (menuList[i].type==1 && /\S/.test(menuList[i].url)) { + // const url = menuList[i].url.replace(/\//g, "_"); + let route = { + path: + menuList[i].url.replace(/\//g, "-") + + `-${menuList[i].code}`, + component: null, + name: + menuList[i].url.replace(/\//g, "-") + + `-${menuList[i].code}`, + // meta: { + // } + }; + // url以http[s]://开头, 通过iframe展示 + if (menuList[i].iframe === 1) { + route["path"] = `i-${menuList[i].code}`; + route["name"] = `i-${menuList[i].code}`; + route["props"] = { url: menuList[i].url }; + route["component"] = () => import("@/views/IFrame.vue"); + } else { + const l = "views/pages/" + menuList[i].url; + route["component"] = () => import("@/" + l + ".vue"); + } + routes.push(route); + } + } + if (temp.length >= 1) { + fnAddDynamicMenuRoutes(temp, routes); + } else { + mainRoutes.children = mainRoutes.children.concat(routes); + // mainRoutes.children = routes; + console.log( + "控制台打印--> ~ file: permission.js ~ line 127 ~ fnAddDynamicMenuRoutes ~ mainRoutes.children", + mainRoutes.children, + ); + + await router.addRoute(mainRoutes); + await router.addRoute({ + path: "/:w+", + redirect: { name: "404" }, + }); + } + }; + /** + * 默认菜单 + * @type {[{name: string, icon: string, id: number, sort: number, iframe: number, menu: string, type: number, parentCode: number, url: string}, {name: string, icon: string, id: number, sort: number, iframe: number, menu: string, type: number, parentCode: number, url: string}, {name: string, icon: string, id: number, sort: number, iframe: number, menu: string, type: number, parentCode: number, url: string}, {name: string, icon: string, id: number, sort: number, iframe: number, menu: string, type: number, parentCode: number, url: string}, {name: string, icon: string, id: number, sort: number, iframe: number, menu: string, type: number, parentCode: number, url: string}, null, null, null, null, null, null, null, null, null, null, null, null, null]} + */ + const menuList = [ + { + parentCode: -1, + code: 100, + id: 100, + name: "系统设置", //看官网,这个名字是3-5之间的 + url: "", + menu: "", + type: 0, + icon: "Setting", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 100, + code: 1, + id: 1, + name: "用户管理", //看官网,这个名字是3-5之间的 + url: "system/Users", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "UserFilled", + sort: 2, + iframe: 0, + module: moduleName, + }, + { + parentCode: 1, + code: 2, + id: 2, + name: "查询", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "search", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 1, + code: 3, + id: 3, + name: "添加", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "add", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 1, + code: 4, + id: 4, + name: "编辑", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "edit", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 100, + code: 5, + id: 5, + name: "菜单管理", //看官网,这个名字是3-5之间的 + url: "settings/Menus", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "Menu", + sort: 1, + iframe: 0, + module: moduleName, + }, + { + parentCode: 5, + code: "restore", + id: 51, + name: "恢复出厂设置", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "restore", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 5, + code: 6, + id: 6, + name: "查询", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "search", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 5, + code: 7, + id: 7, + name: "添加", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "add", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 5, + code: 8, + id: 8, + name: "编辑", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "edit", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 5, + code: 9, + id: 9, + name: "添加子级", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "addChild", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 5, + code: 10, + id: 10, + name: "添加按钮", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "addBtn", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 100, + code: 11, + id: 11, + name: "角色管理", //看官网,这个名字是3-5之间的 + url: "system/Roles", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "HelpFilled", + sort: 3, + iframe: 0, + module: moduleName, + }, + { + parentCode: 11, + code: 12, + id: 12, + name: "查询", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "search", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 11, + code: 13, + id: 13, + name: "添加", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "add", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 11, + code: 14, + id: 14, + name: "编辑", //看官网,这个名字是3-5之间的 + url: "", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "edit", + type: 2, + icon: "", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: -1, + code: 15, + id: 15, + name: "参考资料", //看官网,这个名字是3-5之间的 + url: "", + menu: "", + type: 0, + icon: "DocumentCopy", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 15, + code: 16, + id: 16, + name: "vue3.0", //看官网,这个名字是3-5之间的 + url: "https://www.vue3js.cn/docs/zh/", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "Promotion", + sort: 1, + iframe: 1, + module: moduleName, + }, + { + parentCode: 15, + code: 17, + id: 17, + name: "element-plus", //看官网,这个名字是3-5之间的 + url: "https://element-plus.org/#/zh-CN", //这个类似上面的id一个,只是初始值是从100开始的 + menu: "", + type: 1, + icon: "ElemeFilled", + sort: 1, + iframe: 1, + module: moduleName, + }, + // { + // parentCode: 15, + // code: 18, + // id: 18, + // name: "wu-vue-framework", //看官网,这个名字是3-5之间的 + // url: "https://gitee.com/wujiawei1207537021/wu-vue-framework/blob/master/README.md", //这个类似上面的id一个,只是初始值是从100开始的 + // menu: "", + // type: 1, + // icon: "ElemeFilled", + // sort: 1, + // iframe: 1, + // }, + // { + // parentCode: 15, + // code: 19, + // id: 19, + // name: "wu-framework-parent", //看官网,这个名字是3-5之间的 + // url: "https://gitee.com/wujiawei1207537021/wu-framework-parent/wikis/pages", //这个类似上面的id一个,只是初始值是从100开始的 + // menu: "", + // type: 1, + // icon: "ElemeFilled", + // sort: 1, + // iframe: 1, + // }, + // { + // parentCode: 15, + // code: 20, + // id: 20, + // name: "lazy-orm", //看官网,这个名字是3-5之间的 + // url: "https://gitee.com/wujiawei1207537021/wu-framework-parent/raw/master/wu-database-parent/README.md", //这个类似上面的id一个,只是初始值是从100开始的 + // menu: "", + // type: 1, + // icon: "ElemeFilled", + // sort: 1, + // iframe: 1, + // }, + ]; + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/svgicon.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/svgicon.js new file mode 100644 index 00000000..8a0c6cec --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/plugins/svgicon.js @@ -0,0 +1,9 @@ +import * as components from "@element-plus/icons-vue"; +export default { + install: (app) => { + for (const key in components) { + const componentConfig = components[key]; + app.component(componentConfig.name, componentConfig); + } + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/globalRoutes.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/globalRoutes.js new file mode 100644 index 00000000..db6f1dee --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/globalRoutes.js @@ -0,0 +1,17 @@ +export default [ + { + path: "/login", + name: "Login", + component: () => import("@/views/Login.vue"), + }, + { + path: "/register", + name: "Register", + component: () => import("@/views/Register.vue"), + }, + { + path: "/404", + name: "404", + component: () => import("@/views/404.vue"), + }, +]; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/index.js new file mode 100644 index 00000000..54f8d326 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/index.js @@ -0,0 +1,27 @@ +import { createRouter, createWebHashHistory } from "vue-router"; +import globalRoutes from "./globalRoutes"; +import mainRoutes from "./mainRoutes"; + +const router = createRouter({ + history: createWebHashHistory(), + scrollBehavior: () => ({ y: 0 }), + isAddDynamicMenuRoutes: false, // 是否已经添加动态(菜单)路由 + routes: globalRoutes.concat(mainRoutes), +}); +// router.beforeEach((to, from, next) => { +// console.log("from" + from.path + "....to" + to.path); +// +// if ( +// to.matched.length === 0 || +// globalRoutes.findIndex((route) => (route.path = to.path)) === -1 +// ) { +// console.log("404"); +// // 路由不存在 +// next("/404"); // 跳转到404页面 +// } else { +// next(); // 路由存在,正常跳转 +// console.log("normal"); +// } +// }); + +export default router; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/mainRoutes.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/mainRoutes.js new file mode 100644 index 00000000..d08420f8 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/router/mainRoutes.js @@ -0,0 +1,13 @@ +export default { + path: "/", + name: "AppMain", + component: () => import("@/views/AppMain.vue"), + redirect: { name: "Home" }, + children: [ + { + path: "home", + name: "Home", + component: () => import("@/views/Home.vue"), + }, + ], +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/add.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/add.png new file mode 100644 index 00000000..35f98a2c Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/add.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/database.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/database.png new file mode 100644 index 00000000..774efc37 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/database.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/db_table.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/db_table.png new file mode 100644 index 00000000..581ed51f Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/db_table.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/file.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/file.png new file mode 100644 index 00000000..945e93d0 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/file.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/folder.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/folder.png new file mode 100644 index 00000000..2c48aa5d Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/folder.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/key.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/key.png new file mode 100644 index 00000000..c0a0b9ae Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/key.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/music-default-pic.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/music-default-pic.png new file mode 100644 index 00000000..86e3006b Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/music-default-pic.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/redis.png b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/redis.png new file mode 100644 index 00000000..9cca1e60 Binary files /dev/null and b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/static/redis.png differ diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/getters.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/getters.js new file mode 100644 index 00000000..6e32a6eb --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/getters.js @@ -0,0 +1,15 @@ +export default { + opened: (state) => state.app.slider.opened, + token: (state) => state.app.token, + access_token: (state) => state.app.access_token, + refresh_token: (state) => state.app.refresh_token, + zone_id: (state) => state.app.zone_id, + user_id: (state) => state.app.user_id, + uname: (state) => state.app.uname, + menuList: (state) => state.app.menuList, + permissionList: (state) => state.app.permissionList, + moreMenuList: (state) => state.tabbar.moreMenuList, + barList: (state) => state.tabbar.barList, + currentBar: (state) => state.tabbar.currentBar, + options: (state) => state.settings.options, // 编辑器配置 +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/index.js new file mode 100644 index 00000000..144142c0 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/index.js @@ -0,0 +1,13 @@ +let modules = {}; +const files = require.context("./modules", true, /index.js$/); +files.keys().forEach((key) => { + const fileName = key.split("/")[1]; + modules[fileName] = files(key).default; +}); + +import { createStore } from "vuex"; +import getters from "./getters"; +export default createStore({ + getters, + modules, +}); diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/app/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/app/index.js new file mode 100644 index 00000000..c7f39c09 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/app/index.js @@ -0,0 +1,111 @@ +import { + TOGGLE_SLIDER, + SET_TOKEN, + SET_UNAME, + SET_MENU_LIST, + SET_PERMISSION_LIST, + SET_REFRESH_TOKEN, + SET_ACCESS_TOKEN, + SET_ZONE_ID, + SET_USER_ID, +} from "./type.js"; + +export default { + namespaced: true, + state: { + slider: { + opened: JSON.parse(sessionStorage.getItem("opened")), + }, + token: sessionStorage.getItem("token") || "", + access_token: sessionStorage.getItem("access_token") || "", + refresh_token: sessionStorage.getItem("refresh_token") || "", + zone_id: sessionStorage.getItem("zone_id") || "", + user_id: sessionStorage.getItem("user_id") || "", + menuList: null, + permissionList: [], + uname: sessionStorage.getItem("uname") || "", + }, + mutations: { + [TOGGLE_SLIDER](state) { + state.slider.opened = !state.slider.opened; + sessionStorage.setItem( + "opened", + JSON.stringify(state.slider.opened), + ); + }, + [SET_TOKEN](state, token) { + state.token = token; + sessionStorage.setItem("token", state.token); + }, + [SET_UNAME](state, uname) { + state.uname = uname; + sessionStorage.setItem("uname", state.uname); + }, + [SET_ACCESS_TOKEN](state, access_token) { + state.access_token = access_token; + sessionStorage.setItem("access_token", state.access_token); + }, + [SET_REFRESH_TOKEN](state, refresh_token) { + state.refresh_token = refresh_token; + sessionStorage.setItem("refresh_token", state.refresh_token); + }, + [SET_ZONE_ID](state, zone_id) { + state.zone_id = zone_id; + sessionStorage.setItem("zone_id", state.zone_id); + }, + [SET_USER_ID](state, user_id) { + state.user_id = user_id; + sessionStorage.setItem("user_id", state.user_id); + }, + [SET_MENU_LIST](state, menuList) { + state.menuList = menuList; + }, + [SET_PERMISSION_LIST](state, permissionList) { + state.permissionList = permissionList; + }, + }, + actions: { + [TOGGLE_SLIDER]({ commit }) { + commit(TOGGLE_SLIDER); + }, + [SET_TOKEN]({ commit }, token) { + commit(SET_TOKEN, token); + }, + [SET_ACCESS_TOKEN]({ commit }, access_token) { + commit(SET_ACCESS_TOKEN, access_token); + }, + [SET_REFRESH_TOKEN]({ commit }, refresh_token) { + commit(SET_REFRESH_TOKEN, refresh_token); + }, + [SET_ZONE_ID]({ commit }, zone_id) { + commit(SET_ZONE_ID, zone_id); + }, + [SET_USER_ID]({ commit }, user_id) { + commit(SET_USER_ID, user_id); + }, + [SET_UNAME]({ commit }, uname) { + commit(SET_UNAME, uname); + }, + [SET_MENU_LIST]({ commit }, menuList) { + commit(SET_MENU_LIST, menuList); + }, + [SET_PERMISSION_LIST]({ commit }, menuList) { + let allMenus = XE.filterTree(menuList, (item) => item.type === 1, { + sortKey: "sort", + key: "code", + parentKey: "parentCode", + }); + let permissionList = []; + allMenus.forEach((item) => { + if (item.children && item.children.length > 0) { + item.children.forEach((menu) => { + permissionList.push( + `${item.url}/${item.code}/${menu.menu}`, + ); + }); + } + }); + commit(SET_PERMISSION_LIST, permissionList); + }, + }, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/app/type.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/app/type.js new file mode 100644 index 00000000..be7158c3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/app/type.js @@ -0,0 +1,9 @@ +export const TOGGLE_SLIDER = "TOGGLE_SLIDER"; +export const SET_TOKEN = "SET_TOKEN"; +export const SET_ACCESS_TOKEN = "access_token"; +export const SET_REFRESH_TOKEN = "refresh_token"; +export const SET_UNAME = "SET_UNAME"; +export const SET_ZONE_ID = "ZONE_ID"; // 空间区域ID +export const SET_USER_ID = "USER_ID"; // 用户ID +export const SET_MENU_LIST = "SET_MENU_LIST"; +export const SET_PERMISSION_LIST = "SET_PERMISSION_LIST"; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/settings/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/settings/index.js new file mode 100644 index 00000000..ed9808e5 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/settings/index.js @@ -0,0 +1,32 @@ +/** + * 编辑器配置信息 + */ + +const state = { + options: { + lineNumbers: true, + lineWrapping: true, + styleActiveLine: true, + extraKeys: "Ctrl", + theme: "default", + }, +}; + +const mutations = { + SAVE_OPTIONS(state, params) { + state.options = { ...params }; + }, +}; + +const actions = { + saveOptions({ commit }, params) { + commit("SAVE_OPTIONS", params); + }, +}; + +export default { + namespaced: true, + state, + mutations, + actions, +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/tabbar/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/tabbar/index.js new file mode 100644 index 00000000..ed458224 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/tabbar/index.js @@ -0,0 +1,90 @@ +import { + ADD_BAR, + BAR_LIST, + CURRENT_BAR, + DEL_All_BAR, + DEL_BAR, + SET_BAR_LIST, + SET_CURRENT_BAR, +} from "@/store/modules/tabbar/type"; + +const index = { + namespaced: true, + state: { + moreMenuList: [], + barList: JSON.parse(sessionStorage.getItem(BAR_LIST)) || [], + currentBar: JSON.parse(sessionStorage.getItem(CURRENT_BAR)) || {}, + }, + mutations: { + [SET_BAR_LIST](state, data) { + state.barList = data; + }, + [SET_CURRENT_BAR](state, currentBar) { + state.currentBar = currentBar; + sessionStorage.setItem( + CURRENT_BAR, + JSON.stringify(state.currentBar), + ); + }, + [ADD_BAR](state, content) { + // 不允许重复,每个标签只允许存在一个 + // let ind = state.barList.findIndex(el => el.key === content.key) + // if(ind == -1) { + // state.barList.push(content) + // } + // sessionStorage.setItem(BAR_LIST, JSON.stringify(state.barList)); + // 每个标签都可以重复打开多个 + // content.index = state.barList.length; + + if (state.moreMenuList.includes(content.barCode)) { + state.barList.push(content); + } else { + let ind = state.barList.findIndex( + (el) => el.barCode === content.barCode, + ); + if (ind === -1) { + state.barList.push(content); + } else { + console.log("重复:" + content.barName); + } + } + + sessionStorage.setItem(BAR_LIST, JSON.stringify(state.barList)); + + // 防止重复 对象不一致 + + state.currentBar = state.barList.filter( + (item) => item.barCode === content.barCode, + )[0]; + sessionStorage.setItem( + CURRENT_BAR, + JSON.stringify(state.currentBar), + ); + }, + [DEL_BAR](state, barCode) { + console.log("删除之前" + state.barList.length); + state.barList = state.barList.filter( + (item) => item.barCode !== barCode, + ); + console.log("删除之后" + state.barList.length); + sessionStorage.setItem(BAR_LIST, JSON.stringify(state.barList)); + }, + [DEL_All_BAR](state, content) { + state.barList = content || [{ keyPath: "/home", key: "Home" }]; + sessionStorage.setItem(BAR_LIST, JSON.stringify(state.barList)); + }, + }, + actions: { + [ADD_BAR]({ commit }, content) { + commit(ADD_BAR, content); + }, + [DEL_BAR]({ commit }, barCode) { + commit(DEL_BAR, barCode); + }, + [SET_CURRENT_BAR]({ commit }, currentBar) { + commit(SET_CURRENT_BAR, currentBar); + }, + }, +}; + +export default index; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/tabbar/type.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/tabbar/type.js new file mode 100644 index 00000000..a3657604 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/store/modules/tabbar/type.js @@ -0,0 +1,8 @@ +export const BAR_LIST = "barList"; +export const CURRENT_BAR = "CURRENT_BAR"; +export const DEL_All_BAR = "DEL_All_BAR"; +export const DEL_BAR = "DEL_BAR"; +export const ADD_BAR = "ADD_BAR"; +export const SET_BAR_LIST = "SET_BAR_LIST"; +export const SET_CURRENT_BAR = "SET_CURRENT_BAR"; +export const ROUTE_LIST = "routeList"; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/styles/common.scss b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/styles/common.scss new file mode 100644 index 00000000..b330fd70 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/styles/common.scss @@ -0,0 +1,68 @@ +html { + background: #fff; + transition: color 300ms, background-color 300ms; + &.dark { + filter: contrast(100%) invert(100%); + img { + filter: hue-rotate(180deg); + } + } +} +.ve_header_row_class_name, +.el-table__fixed-right-patch { + background: $main-bg-color !important; +} +.ve_header_cell_class_name { + background: $main-bg-color !important; +} +.ve_cell_class_name { + background: $base-color !important; + border-color: $base-color !important; +} +.ve_row_class_name { + background: $base-color !important; +} +.ve_p_10 { + padding: 10px; +} +//滚动条的宽度 +::-webkit-scrollbar { + width: 6px; + height: 6px; +} +//滚动条的滑块 +::-webkit-scrollbar-thumb { + background-color: rgba(144, 147, 153, 0.3); + border-radius: 3px; +} +.ve_select_option_slot { + font-size: 12px; + float: left; + line-height: initial; + padding-bottom: 10px; + opacity: 0.7; +} +.ve_option_box { + width: calc(50% - 132px); +} +.size-watch { + width: 100%; + height: 100%; + // display: none; + position: absolute; + top: 0; + z-index: -1; + visibility: hidden; + margin: 0; + padding: 0; + border: 0; +} + +.ve_flex_col { + display: flex; + flex-direction: column; + height: calc(100vh - #{$nav-height} - 80px); +} +//.el-form-item{ +// width: 10%; +//} \ No newline at end of file diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/styles/variables.scss.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/styles/variables.scss.js new file mode 100644 index 00000000..0eff013c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/styles/variables.scss.js @@ -0,0 +1,12 @@ +const variables = { + main_bg_color: "#f5f5f5", + base_color: "#409EFF", + nav_height: "50px", + nav_menu_height: "50px", + side_close_width: "65px", + side_open_width: "160px", + sideBgColor: "#545c64", + sideTextColor: "#fff", + sideActiveTextColor: "#ffd04b", +}; +module.exports = variables; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/utils/index.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/utils/index.js new file mode 100644 index 00000000..a53bc4bd --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/utils/index.js @@ -0,0 +1,106 @@ +/** + * @description:树形结构转一维数组 + * @param {*} nodes + * @return {*} + */ +export function jsonToArray(nodes) { + let pid = -1; + const toArray = (nodes) => { + let r = []; + if (Array.isArray(nodes)) { + for (let i = 0, l = nodes.length; i < l; i++) { + nodes[i].pid = pid; + r.push(nodes[i]); // 取每项数据放入一个新数组 + if ( + Array.isArray(nodes[i]["children"]) && + nodes[i]["children"].length > 0 + ) { + // 若存在children则递归调用,把数据拼接到新数组中,并且删除该children + pid = nodes[i].id; + r = r.concat(toArray(nodes[i]["children"])); + delete nodes[i]["children"]; + } + } + } + return r; + }; + return toArray(nodes); +} + +/** + * @description:一维数组转树形结构 + * @param {*} treeArray + * @return {*} + */ +export function arrayToJson(treeArray) { + var r = []; + var tmpMap = {}; + for (var i = 0, l = treeArray.length; i < l; i++) { + //* 以每条数据的id作为obj的key值,数据作为value值存入到一个临时对象里面 + tmpMap[treeArray[i]["id"]] = treeArray[i]; + } + for (i = 0, l = treeArray.length; i < l; i++) { + var key = tmpMap[treeArray[i]["pid"]]; + //*循环每一条数据的pid,假如这个临时对象有这个key值,就代表这个key对应的数据有children,需要Push进去 + //*如果这一项数据属于哪个数据的子级 + if (key) { + // *如果这个数据没有children + if (!key["children"]) { + key["children"] = []; + key["children"].push(treeArray[i]); + //* 如果这个数据有children + } else { + key["children"].push(treeArray[i]); + } + } else { + //*如果没有这个Key值,就代表找不到属于哪个数据,那就代表没有父级,直接放在最外层 + r.push(treeArray[i]); + } + } + return r; +} + +/** + * @description 获取节点的所有父节点 + * @param {*} tree + * @param {*} func + * @param {*} path + * @return {*} + */ +export const treeFindPath = (tree, func, name = "id", path = []) => { + if (!tree) return []; + for (const data of tree) { + //* 这里按照你的需求来存放最后返回的内容吧 + path.push(data[name]); + if (func(data)) return path; + if (data.children) { + const findChildren = treeFindPath(data.children, func, name, path); + if (findChildren.length) return findChildren; + } + path.pop(); + } + return []; +}; + +/** + * @description: 拆箱函数,解决tooltip显示问题 + * @param {*} obj + * @return {*} + */ +export const unwarp = (obj) => obj && (obj.__v_raw || obj.valueOf() || obj); + +/** + * @description:获取所有的el-svg-icon组件名 + * @param {*} + * @return {*} + */ +export const icons = () => { + const components = require("@element-plus/icons-vue"); + console.log("🚀 ~ file: index.js ~ line 107 ~ icons ~ e", components); + + const names = []; + for (const key in components) { + names.push(components[key].name); + } + return names; +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/utils/validate.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/utils/validate.js new file mode 100644 index 00000000..96442038 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/utils/validate.js @@ -0,0 +1,57 @@ +/** + * 邮箱 + * @param {* s + */ +export const isEmail = (s) => + /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3){1,2)$/.test(s); + +/** + * 手机号码 + * @param {* s + */ +export const isMobile = (s) => /^1[3-8][0-9]{9$/.test(s); + +/** + * 电话号码 + * @param {* s + */ +export const isPhone = (s) => /^([0-9]{3,4-)?[0-9]{7,8$/.test(s); + +/** + * URL地址 + * @param {* s + */ +export const isURL = (s) => /^http[s]?:\/\/.*/.test(s); + +/** + * ip地址 + * @param {* s + */ +export const isIP = (s) => + /^(25[0-5]|2[0-4]\d|[0-1]\d{2|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2|[1-9]?\d)$/.test( + s, + ); + +/** + * 字符串 + * @param {* s + */ +export const isString = (s) => /^[A-Za-z0-9_\-\u4e00-\u9fa5]+$/.test(s); + +/** + * @description: + * @param {type + * @: exp + * 非负浮点数字 + */ +export const isNumber = (s) => /^\d+(\.\d+)?$/.test(s); + +/** + * @description: + * @param {type + * @: + * 银行卡正则 + */ + +export const isBank = (s) => + /^([1-9]{1)(\d{11|\d{15|\d{16|\d{17|\d{18)$/.test(s); diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/404.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/404.vue new file mode 100644 index 00000000..5d6e669a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/404.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/AppMain.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/AppMain.vue new file mode 100644 index 00000000..fe548c56 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/AppMain.vue @@ -0,0 +1,56 @@ + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Home.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Home.vue new file mode 100644 index 00000000..d8ebed79 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Home.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/IFrame.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/IFrame.vue new file mode 100644 index 00000000..8dfadfb6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/IFrame.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Login.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Login.vue new file mode 100644 index 00000000..6676599b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Login.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Register.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Register.vue new file mode 100644 index 00000000..bf18b333 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/Register.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/ClientFlowManager.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/ClientFlowManager.vue new file mode 100644 index 00000000..f05f58e6 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/ClientFlowManager.vue @@ -0,0 +1,153 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/CloudClient.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/CloudClient.vue new file mode 100644 index 00000000..865d9b5e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/CloudClient.vue @@ -0,0 +1,202 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/CloudClientCluster.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/CloudClientCluster.vue new file mode 100644 index 00000000..41b144af --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/CloudClientCluster.vue @@ -0,0 +1,130 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/NetworkMapping.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/NetworkMapping.vue new file mode 100644 index 00000000..d50f4f0b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/NetworkMapping.vue @@ -0,0 +1,232 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/ServerVisitor.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/ServerVisitor.vue new file mode 100644 index 00000000..173f08e3 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/ServerVisitor.vue @@ -0,0 +1,200 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/CloudNetworkMenu.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/CloudNetworkMenu.js new file mode 100644 index 00000000..c381b2cd --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/CloudNetworkMenu.js @@ -0,0 +1,8 @@ +const cloudNetworkMenu = { + description: "内网穿透管理", + // type 0:目录 1:菜单 2:按钮 + type: "1", + icon: "Tools", + name: "内网穿透管理", +}; +export default cloudNetworkMenu; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/CloudServerSendMessage2Clinet.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/CloudServerSendMessage2Clinet.vue new file mode 100644 index 00000000..8c46c6ee --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/CloudServerSendMessage2Clinet.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/NetWorkMappingEdit.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/NetWorkMappingEdit.vue new file mode 100644 index 00000000..4b129d4c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/NetWorkMappingEdit.vue @@ -0,0 +1,230 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/ServerVisitorEdit.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/ServerVisitorEdit.vue new file mode 100644 index 00000000..d3ba5c6a --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network/components/ServerVisitorEdit.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/ClientPerDayFlow.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/ClientPerDayFlow.vue new file mode 100644 index 00000000..889ac82c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/ClientPerDayFlow.vue @@ -0,0 +1,111 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/ClientPortPerDayFlow.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/ClientPortPerDayFlow.vue new file mode 100644 index 00000000..e563872b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/ClientPortPerDayFlow.vue @@ -0,0 +1,201 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/CloudNetworkReportMenu.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/CloudNetworkReportMenu.js new file mode 100644 index 00000000..edf753c9 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/cloud_network_report/CloudNetworkReportMenu.js @@ -0,0 +1,8 @@ +const cloudNetworkReportMenu = { + description: "流量报表", + // type 0:目录 1:菜单 2:按钮 + type: "1", + icon: "Tickets", + name: "流量报表", +}; +export default cloudNetworkReportMenu; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/common.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/common.js new file mode 100644 index 00000000..4457466c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/common.js @@ -0,0 +1,140 @@ +/** + * @description:提交搜索 + * @param {*} + * @return {*} + */ +export const onSubmit = (params, getDataList) => { + params.size = 10; + params.current = 1; + getDataList(); +}; +/** + * @description:重置 + * @param {*} + * @return {*} + */ +export const resetForm = (queryForm, params, getDataList) => { + queryForm.resetFields(); + onSubmit(params, getDataList); +}; +/** + * @description:每页条数事件 + * @param {*} + * @return {*} + */ +export const handleSizeChange = (val, params, getDataList) => { + params.current = 1; + params.size = val; + getDataList(); +}; +/** + * @description:改变页数事件 + * @param {*} + * @return {*} + */ +export const handleCurrentChange = (val, params, getDataList) => { + params.current = val; + getDataList(); +}; + +/** + * @description: 获取按钮跳转菜单的路径 + * @param {btnName} 跳转按钮的key值 + * @param {toPathUrl} 需要跳转到的菜单的路径 该路径为pages下的文件子路径 + * @param {pathId} 当前页面的路由id + * @param {menuList} 所有注册过的路由列表 + * @param {proxy} vue实例 + * @return {name} 跳转路由的name值 + */ +export const findName = (btnName, toPathUrl, pathId, menuList, proxy) => { + let toId = ""; + let _item = XE.findTree(menuList, (item) => item.id == pathId); + if ( + _item && + _item.item && + _item.item.children && + _item.item.children.length > 0 + ) { + let btn = _item.item.children.find((item) => item.menu == btnName); + + btn && (toId = btn.toPath); + } + if (toId != "") { + let _toItem = XE.findTree(menuList, (item) => item.id == toId); + if (_toItem && _toItem.item) { + if (_toItem.item.iframe == 0) { + if (_toItem.item.url == toPathUrl) { + return `${toPathUrl.replace(/\//g, "-")}-${toId}`; + } + } else { + return `i-${toId}`; + } + } + } + proxy.$message({ + type: "error", + message: "无法跳转,请联系系统管理员!", + }); +}; + +/** + * @description:根据权限动态添加路由 + * @param {title} 标题名称 + * @param {path} 组件路径 pages下的组件路径 + * @param {name} 按钮key值 + * @param {{ router, route }} 路由对象 + * @return {_route.name} 返回注册后的name值 + */ +export const getAsyncRouteName = async ( + title, + path, + name, + { router, route }, +) => { + const FunctionPage = require("@/components/FunctionPage.vue").default; + const AsyncComponent = require("@/views/pages/" + path + ".vue").default; + // const { defineAsyncComponent } = require("vue"); + // const AsyncComponent = defineAsyncComponent(() => + // import("@/views/pages/" + path + ".vue") + // ); + // import { defineAsyncComponent } from "vue"; + // import FunctionPage from "@/components/FunctionPage"; + + const app = { + components: { + FunctionPage, + AsyncComponent, + }, + data: () => ({ + rName: null, + }), + methods: { + reload(e) { + return (e.returnValue = ""); + }, + }, + mounted() { + this.rName = this.$route.name; + window.addEventListener("beforeunload", this.reload); + }, + beforeUnmount() { + window.removeEventListener("beforeunload", this.reload); + this.$router.removeRoute(this.rName); + }, + render() { + return ( + + + + ); + }, + }; + const _route = { + name: route.name + "/" + name, + path: route.name + "/" + name, + + component: app, + }; + await router.addRoute("AppMain", _route); + return _route.name; +}; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Dictionary.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Dictionary.vue new file mode 100644 index 00000000..96a4e65c --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Dictionary.vue @@ -0,0 +1,394 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/DynamicIframe.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/DynamicIframe.vue new file mode 100644 index 00000000..73e22675 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/DynamicIframe.vue @@ -0,0 +1,183 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Menus.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Menus.vue new file mode 100644 index 00000000..8268f3b7 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Menus.vue @@ -0,0 +1,447 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/RequestLog.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/RequestLog.vue new file mode 100644 index 00000000..3a634a67 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/RequestLog.vue @@ -0,0 +1,162 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Translate.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Translate.vue new file mode 100644 index 00000000..638ae655 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/Translate.vue @@ -0,0 +1,79 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/DictionaryDataEdit.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/DictionaryDataEdit.vue new file mode 100644 index 00000000..050d619e --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/DictionaryDataEdit.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/DictionaryEdit.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/DictionaryEdit.vue new file mode 100644 index 00000000..355c2b00 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/DictionaryEdit.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/MenuEdit.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/MenuEdit.vue new file mode 100644 index 00000000..10a4972f --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/MenuEdit.vue @@ -0,0 +1,606 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/menu.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/menu.js new file mode 100644 index 00000000..a5212b27 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/settings/components/menu.js @@ -0,0 +1,8 @@ +const menu = { + description: "系统设置", + // type 0:目录 1:菜单 2:按钮 + type: "1", + icon: "Settings", + name: "系统设置", +}; +export default menu; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/Roles.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/Roles.vue new file mode 100644 index 00000000..2d03f16b --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/Roles.vue @@ -0,0 +1,246 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/Users.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/Users.vue new file mode 100644 index 00000000..57316624 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/Users.vue @@ -0,0 +1,346 @@ + + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/RoleEdit.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/RoleEdit.vue new file mode 100644 index 00000000..31eaf29d --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/RoleEdit.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/UsersEdit.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/UsersEdit.vue new file mode 100644 index 00000000..6eba8247 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/UsersEdit.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/UsersEditRoute.vue b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/UsersEditRoute.vue new file mode 100644 index 00000000..f95148cd --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/UsersEditRoute.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/menu.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/menu.js new file mode 100644 index 00000000..86f37e29 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/src/views/pages/system/components/menu.js @@ -0,0 +1,8 @@ +const menu = { + description: "系统管理", + // type 0:目录 1:菜单 2:按钮 + type: "1", + icon: "Tools", + name: "系统管理", +}; +export default menu; diff --git a/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/vue.config.js b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/vue.config.js new file mode 100644 index 00000000..ec21c416 --- /dev/null +++ b/wu-smart-agent-network-heartbeat-ui/wu-smart-agent-network-heartbeat-server-ui/vue.config.js @@ -0,0 +1,138 @@ +const config = require("./src/config"); +const webpack = require("webpack"); +const TerserPlugin = require("terser-webpack-plugin"); +const CompressionWebpackPlugin = require("compression-webpack-plugin"); +let scssVariables = require("./src/styles/variables.scss.js"); + +module.exports = { + publicPath: "", + productionSourceMap: false, + + devServer: { + port: "28080", // 请求地址的端口号,在本项目是8080 + proxy: { + "/wu-smart-agent-network/": { + // 'demo'是请求地址中,以demo开头都适用这个 + // target: "http://47.92.27.215:520/", // 真实的服务器地址 + target: "http://127.0.0.1:6001", // 真实的服务器地址 + changeOrigin: true, // + secure: false, // 默认情况下,不接受运行在 HTTPS 上,且使用了无效证书的后端服务器。如果你想要接受设为false + ws: false, // 是否启用websockets + // 是否重写 + pathRewrite: { + "^/wu-smart-agent-network": "/", + }, + }, + "/": { + // 'demo'是请求地址中,以demo开头都适用这个 + target: "http://127.0.0.1:6001", // 真实的服务器地址 + // target: "http://124.222.48.62:30576", // 真实的服务器地址 + changeOrigin: true, // + secure: false, // 默认情况下,不接受运行在 HTTPS 上,且使用了无效证书的后端服务器。如果你想要接受设为false + ws: false, // 是否启用websockets + // 是否重写 + pathRewrite: { + "^/demo": "/demo", + }, + }, + }, + // setupMiddlewares: (middlewares, devServer) => { + // if (config.dev_mock) { + // const mock_server = require("./src/api/mock-server.js"); + // mock_server(devServer.app); + // } + // return middlewares; + // }, + }, + + chainWebpack: (config) => { + config.plugin("provide").use(webpack.ProvidePlugin, [ + { + XE: "xe-utils", + }, + ]); + config.plugin("define").use(webpack.DefinePlugin, [ + { + VE_ENV: { + MODE: JSON.stringify(process.env.NODE_ENV), + }, + }, + ]); + config.plugins.delete("prefetch"); + // config.plugins.delete("preload"); + // config.optimization.delete("splitChunks"); + }, + + configureWebpack: () => { + let baseConfig = {}; + let envConfig = {}; + if (process.env.NODE_ENV === "production") { + // 为生产环境修改配置... + envConfig = { + optimization: { + splitChunks: { + chunks: "all", + // enforceSizeThreshold: 20000, + cacheGroups: { + echarts: { + name: "chunk-echarts", + priority: 20, + test: /[\\/]node_modules[\\/]_?echarts(.*)/, + }, + elementPlus: { + name: "chunk-elementPlus", + priority: 20, + test: /[\\/]node_modules[\\/]_?element-plus(.*)/, + }, + elementPlusIcon: { + name: "chunk-elementPlusIcon", + priority: 20, + test: /[\\/]node_modules[\\/]_?@element-plus[\\/]icons(.*)/, + }, + mockjs: { + name: "chunk-mockjs", + priority: 20, + test: /[\\/]node_modules[\\/]_?mockjs(.*)/, + }, + }, + }, + }, + externals: { + // lodash: "_" + }, + plugins: [ + new TerserPlugin({ + terserOptions: { + compress: { + drop_console: false, + drop_debugger: true, + }, + }, + }), + new CompressionWebpackPlugin({ + filename: "[path][base].gz", + algorithm: "gzip", + // test: /\.js$|\.html$|\.json$|\.css/, + test: /\.js$|\.json$|\.css/, + threshold: 10240, // 只有大小大于该值的资源会被处理 + minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理 + // deleteOriginalAssets: true // 删除原文件 + }), + ], + }; + } + return Object.assign(baseConfig, envConfig); + }, + + css: { + loaderOptions: { + scss: { + // 注意:在 sass-loader v8 中,这个选项名是 "prependData" + // additionalData: `@import "~@/styles/imports.scss";` + additionalData: Object.keys(scssVariables) + .map((k) => `$${k.replace("_", "-")}: ${scssVariables[k]};`) + .join("\n"), + }, + }, + }, +};