Compare commits

..

161 Commits
3.2.1 ... 3.4.0

Author SHA1 Message Date
a2424e08ba 3.4.0 2023-08-11 11:22:06 +08:00
2cf1266190 修改control 2023-08-11 10:13:34 +08:00
8a709ce7e2 虚拟机安装工具提供LoongArch新世界版本 2023-08-11 09:36:22 +08:00
82b13b585d 修复控件问题 2023-08-10 18:38:07 +08:00
db622c93ba 启动器图标支持启动UEFI 2023-08-10 14:36:41 +08:00
e642d17828 新增UEFI固件 2023-08-09 23:08:19 +08:00
f2d766d0f9 支持UEFI启动 2023-08-09 22:57:14 +08:00
01fe3ed3ab 更新更新内容 2023-08-09 22:35:17 +08:00
c05371b856 修复核心数和线程数识别问题 2023-08-09 22:25:54 +08:00
afefb854b6 优化虚拟机(kvm)性能 2023-08-09 22:19:56 +08:00
acff44eb2d 修复选择vbox- 2023-08-09 20:19:05 +08:00
8699f74087 部分错误 2023-08-09 19:59:15 +08:00
1a78a98d8e 修改apt源 2023-08-09 19:57:00 +08:00
7794df8170 修复虚拟机工具在检测到 Qemu 磁盘但没有安装 Qemu 时无法启动的问题 2023-08-09 14:54:53 +08:00
226db3dfd6 新增视频教程地址 2023-08-09 14:44:52 +08:00
0124c4a304 写一下新版本更新内容 2023-08-09 10:51:00 +08:00
bbf47b8120 修复ubuntu23安装问题? 2023-08-08 21:07:16 +08:00
1942299850 修改简易打包器打包策略 2023-08-08 20:53:32 +08:00
47cffa0637 修复简易打包器识别wine错误的问题 2023-08-08 20:44:39 +08:00
96fa417b3b 完整打包器支持导入/导出配置文件 2023-08-08 17:32:30 +08:00
3fd2b14a2a 修复在调用运行库的情况下无法正常使用 winetricks 2023-08-08 14:32:26 +08:00
8bdb45a87f 打包器支持为不同的.desktop设置不同的MimeType 2023-08-08 13:20:14 +08:00
fd36c84d74 高级打包器支持小字 2023-08-07 18:48:54 +08:00
34a5ae629e 修复简易打包器无法打开的问题 2023-08-07 16:03:41 +08:00
0dda0870c0 云沙箱新增cloud.vdnel.cn 2023-08-06 15:58:59 +08:00
2689bc1cfb 打包器新增Game和System这两个常用分类 2023-08-05 23:02:18 +08:00
8607de0fb0 初步支持在deepin23调用winetricks 2023-08-05 22:30:35 +08:00
0d2e59b9fe dcm/bcm包支持 2023-08-05 08:57:55 +08:00
8ba8953aef 修复apt源没libc6:armhf时box86安装错误的问题 2023-08-04 16:31:05 +08:00
b665842e89 Merge branch 'main' of https://gitee.com/gfdgd-xi/deep-wine-runner 2023-07-29 14:12:55 +08:00
ddd65bbf5f 修复星火wine配置调用解释器错误的问题 2023-07-29 14:12:46 +08:00
Bail
6768cf9e7b 修复updatekiller的pid路径
Signed-off-by: Bail <2915289604@qq.com>
2023-07-28 09:31:38 +00:00
0de3547af0 路径错误 2023-07-26 22:55:37 +08:00
6fb473f5d1 deb打包支持多线程 2023-07-26 22:16:28 +08:00
c5e63f3699 支持调用spark-wine 2023-07-26 15:32:09 +08:00
878e7f6b2a 初步支持 spark dwine helper 2.4.0 特性:https://bbs.deepin.org/post/259455 2023-07-26 15:29:21 +08:00
caa73c3bde 跟进https://gitee.com/deepin-community-store/spark-wine/blob/master/spark-dwine-launch/run-template_v1.sh 2023-07-26 14:50:02 +08:00
3c6bb5042f 修复问题:https://gitee.com/gfdgd-xi/uengine-runner/issues/I6ZRZX 2023-07-26 10:09:07 +08:00
881ff84efd 3.3.0.1 2023-07-25 13:52:11 +08:00
38fed35de8 修复3.3.0 deb包CPU吃满1个核心的问题 2023-07-25 13:16:50 +08:00
60836b448f 不指定特定版本 2023-07-22 10:48:48 +08:00
89627200ad 指定版本 2023-07-21 12:22:15 +08:00
40de39fd19 制作了打包器打包时在软件包内自带适配脚本的UI 2023-07-17 09:57:52 +08:00
16386b8557 新增容器重启功能 2023-07-15 10:22:08 +08:00
c1dc157c71 打包器合入https://gitee.com/deepin-community-store/spark-wine/pulls/16 2023-07-13 09:58:27 +08:00
851105e7bd 新增QEMU USER 2023-07-12 18:24:46 +08:00
45594618f8 Qemu安装器缺少apt update 2023-07-12 18:24:20 +08:00
gfdgd xi
0960218c64 Merge pull request #4 from MacMonterey/main
Add spark-wine8-wow install option
2023-07-12 17:41:53 +08:00
6d4dc4d7d9 修改README 2023-07-12 12:21:56 +08:00
995aad5273 优化exagear调用 2023-07-12 12:11:38 +08:00
851bf9fcc6 修改版本号 2023-07-12 12:06:53 +08:00
00da7fc010 修改星火应用商店投稿链接 2023-07-12 08:00:47 +08:00
9fd8f5144f 修复小问题 2023-07-11 22:32:28 +08:00
b31c4bf134 支持自定义移除组件 2023-07-11 22:05:06 +08:00
66ace92775 测试 2023-07-11 21:51:01 +08:00
74e82aca00 修改位置 2023-07-11 21:07:59 +08:00
e175a80e57 优化lib挂载方式 2023-07-11 20:58:17 +08:00
27cd65a48f 就备份下 2023-07-11 19:34:41 +08:00
a5cb1f81f8 新增qemu识别 2023-07-11 18:52:18 +08:00
2fb32f84d7 忽略调用UOS Exagear容器 2023-07-11 18:44:27 +08:00
6c6b5ff67e 缩进错误 2023-07-11 18:16:12 +08:00
d3790780dd 支持使用Exagear的容器 2023-07-11 18:10:51 +08:00
00245232bf 优化lib64识别 2023-07-11 17:19:39 +08:00
5cb05e9956 修复在安装exagear的情况下无法正常显示使用运行器带的运行库运行程序的问题 2023-07-11 15:25:29 +08:00
72208fd378 一个遗漏的地方 2023-07-11 15:13:29 +08:00
f63cdff0aa 优化运行库显示方式 2023-07-11 15:08:28 +08:00
6c43ce51b4 修复部分小问题 2023-07-11 10:51:37 +08:00
a85a7aeb0c 新增foxpro安装器 2023-07-11 10:44:35 +08:00
70014b29ef 修复运行库安装闪退问题 2023-07-11 10:23:56 +08:00
808471c330 缺失.start() 2023-07-11 10:08:14 +08:00
cf0be8a2f1 忘记添加事件 2023-07-11 10:01:55 +08:00
fffb56c098 修改依赖 2023-07-11 09:57:16 +08:00
2dab9ef7ce Wine运行库 2023-07-10 22:35:54 +08:00
穿越Arch的追念
1964dfc866 Update wine install 2023-07-10 15:50:34 +08:00
穿越Arch的追念
efd22ba3a6 Update wine install 2023-07-10 15:49:56 +08:00
穿越Arch的追念
2a9ece428a Update wine install 『wow』 2023-07-10 15:49:18 +08:00
adf35abfc7 设置安装glibc6:armhf 2023-07-07 15:41:46 +08:00
6ef513d6f5 修改url 2023-07-07 14:51:39 +08:00
550827f97c 添加缺失文件 2023-07-07 13:39:02 +08:00
29f42c95b4 新增exagear识别 2023-07-07 12:31:43 +08:00
ee68f6e26a 更换国内源 2023-07-07 10:59:18 +08:00
aff9996515 Box86/64国内源 2023-07-07 10:33:23 +08:00
075478029d 新增box86安装添加binfmt-support支持 2023-07-06 22:40:18 +08:00
f766e8577c 新增提示 2023-07-06 22:33:40 +08:00
08191c17ed 修改box86/64安装器、新增Wine自建源添加工具、WineHQ添加工具支持选择国内清华大学镜像源/官方源 2023-07-06 22:20:33 +08:00
7665dbe6d9 添加Wine源添加工具(支持Deepin20) 2023-07-06 21:53:13 +08:00
7711c186fd 自动构建 2023-07-06 21:33:19 +08:00
93d41ac3e2 小改README 2023-07-06 21:32:04 +08:00
59ec3d5822 简易打包器支持选择wine版本 2023-07-06 18:44:04 +08:00
a5d1a04573 修改依赖 2023-07-06 15:33:15 +08:00
e434aa9116 优化 2023-07-06 15:31:48 +08:00
dc789132d3 action 2023-07-06 15:30:03 +08:00
9b5beadbcc remove 2023-07-02 18:37:10 +08:00
635171998d 9 2023-07-02 18:19:39 +08:00
b757d09901 debian9 2023-07-02 17:42:40 +08:00
84f0eefc27 将gitlink源改为gitee源 2023-06-29 17:03:46 +08:00
f9cac7619c 修改容器清理脚本 2023-06-29 12:09:23 +08:00
8ae5efe50c arm-daily 2023-06-27 14:31:26 +08:00
58798dd0c6 少了git 2023-06-27 09:06:23 +08:00
fdced1f2c3 添加脚本 2023-06-27 08:15:08 +08:00
aaa5b724e4 优化脚本 2023-06-24 08:45:20 +08:00
bbff9aa85f 新增脚本 2023-06-24 08:39:49 +08:00
4a469f2a82 尝试修复无图标问题 2023-06-23 14:30:41 +08:00
58400ed5ff 完成“安装其他wine版本后 运行器主界面选择wine版本下拉框没有刷新 还要重启一下wine运行器程序,这导致我上面选择的wine容器路径又被重置 重新选择 From Jokul”,https://gitee.com/gfdgd-xi/deep-wine-runner/issues/I7E8Q4 2023-06-22 13:19:55 +08:00
2de9de6633 change? 2023-06-22 12:55:59 +08:00
eba3d9f728 初步? 2023-06-22 12:23:11 +08:00
d8dce3b62c control文件 2023-06-22 12:03:57 +08:00
81f49ae83c 修改为打包xz格式的deb包 2023-06-18 11:18:11 +08:00
160d2ecf9d 优化 2023-06-06 20:37:13 +08:00
d31be64151 修改环境配置包 2023-06-05 20:56:57 +08:00
77ec7ff2bf 修复 2023-06-05 20:34:12 +08:00
6201ec2ed6 修复一些问题 2023-06-05 20:02:01 +08:00
ed344e7a6c aarch64-build 2023-06-05 19:39:15 +08:00
ed61089844 修改以前没改全的东东 2023-06-04 16:40:53 +08:00
e3435ad29a 修复脚本问题 2023-06-04 14:38:20 +08:00
0e705a955a 修复一些错误 2023-06-04 14:31:26 +08:00
77d91f31b2 修复一些问题 2023-06-04 14:29:40 +08:00
c0b7c99c43 7zBuilder 2023-06-04 14:07:06 +08:00
cfbffc1a68 完成 2023-06-04 13:19:25 +08:00
490b6ce28d 修改 2023-06-04 12:10:25 +08:00
75ae205cbf d 2023-06-04 12:05:53 +08:00
ee49a4aec1 修改测试包 2023-06-04 12:00:46 +08:00
364983ac5b aria2 2023-06-04 11:50:02 +08:00
ef375f32b9 修复脚本问题 2023-06-04 11:46:44 +08:00
4ff2d0815d 自动编译脚本? 2023-06-04 11:04:50 +08:00
8df919cadb 更新README 2023-06-03 20:19:40 +08:00
89b812e6a6 更换为xfreerdp 2023-05-28 21:01:35 +08:00
803eb09b5a 初步远程桌面功能? 2023-05-28 20:37:13 +08:00
6397130bb2 修改DLL获取工具的地址 2023-05-28 07:23:18 +08:00
8a4a5f4ee3 修改运行库URL 2023-05-27 22:45:29 +08:00
3529dc1503 修改control 2023-05-27 16:11:26 +08:00
09eb12d750 修复简易打包器Installed-Size格式不规范的问题 2023-05-18 22:33:43 +08:00
bf95889b93 修复control文件以解决冲突的问题 2023-05-17 21:37:37 +08:00
76d3fd556e 更新 2023-05-13 13:15:31 +08:00
45befa142f 修改README 2023-05-12 22:32:59 +08:00
9785ad98fc 修改makefile 2023-05-12 21:47:14 +08:00
201328afea 新增更新内容 2023-05-10 22:25:51 +08:00
4d10470776 修改源 2023-05-09 22:40:26 +08:00
85895b5ae2 择优选择源 2023-05-09 22:36:35 +08:00
b785779d8a 尝试修改url 2023-05-09 22:23:14 +08:00
b1b07d482b 尝试自动选择源 2023-05-09 22:20:48 +08:00
137193c993 修改chroot默认源 2023-05-09 22:12:41 +08:00
9e9f2e2732 修改更新内容 2023-05-08 22:24:32 +08:00
95ddbb7246 修改日期 2023-05-08 21:55:28 +08:00
b1142664ac 修改box86地址 2023-05-08 21:16:09 +08:00
97f85bc640 3.2.2 2023-05-08 20:56:48 +08:00
7d80d24ff6 修改url 2023-05-06 22:47:20 +08:00
64e1c56c8e Merge branch 'main' of https://gitee.com/gfdgd-xi/deep-wine-runner 2023-05-03 20:01:58 +08:00
e9d8bc1ee3 修复选非Gitlink源无法正常安装wine的问题 2023-05-03 20:01:53 +08:00
d10beed003 Change Text 2023-05-03 09:01:13 +00:00
1f4e209f6c repair some VM bug 2023-05-03 08:53:00 +00:00
下雨中gfd
f54e589e3d update README.md.
Signed-off-by: 下雨中gfd <gfdgdxi@foxmail.com>
2023-05-02 14:22:57 +00:00
6dd18d9e8f 更改qemu运行库地址 2023-04-30 22:23:20 +08:00
0360eaf5e0 修改安装器地址 2023-04-30 21:04:13 +08:00
d00baaf2ce 修改msxml安装器 2023-04-30 20:38:21 +08:00
e0a977b7ea 修改字体安装器的默认源 2023-04-30 20:10:35 +08:00
787de003e3 更新地址 2023-04-30 19:57:36 +08:00
b7dfe86710 2023-04-30 14:06:17 +08:00
ee16593767 开始换源 2023-04-30 13:08:25 +08:00
c64b5670d9 支持spark_kill.sh 2023-04-29 23:50:06 +08:00
1bfb04e588 架构错误 2023-04-29 21:33:45 +08:00
359 changed files with 27318 additions and 31035 deletions

30
.github/workflows/auto-building.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: Auto Building Wine Runner
run-name: ${{ github.actor }} Auto Building Wine Runner 🚀
on:
push:
workflow_dispatch:
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- name: Building DEB
env:
GUSER: ${{ secrets.GUSER }}
PASSWORD: ${{ secrets.PASSWORD }}
UPLOADURL: ${{ secrets.UPLOADURL }}
run: |
# 配置环境
sudo apt update
sudo apt install git dpkg-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qt5-qmake -y
git clone https://github.com/gfdgd-xi/deep-wine-runner
cd deep-wine-runner
make build
mv spark-deepin-wine-runner.deb ~
- name: upload result
uses: actions/upload-artifact@v1
with:
name: spark-deepin-wine-runner.deb
path: /home/runner/spark-deepin-wine-runner.deb

21
AddWineDebMirrorForDeepin20.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/bash
echo 网址http://deb.wine.wine-runner.gfdgdxi.top/
if [[ ! -f /etc/apt/sources.list.d/gfdgdxi-list-winehq.list ]]; then
echo 未添加源,现在开始添加!
sudo apt update
sudo apt install wget gpg
if [[ -f /tmp/github.sh ]]; then
rm -v /tmp/github.sh
fi
cd /tmp
wget http://deb.wine.wine-runner.gfdgdxi.top/sources/github.sh
bash github.sh
rm github.sh
echo 添加完成,现在安装 Wine
else
echo 已添加源,忽略,现在安装 Wine
sudo apt update
fi
sudo apt install winehq-devel -y
echo 安装完成,按回车键退出!
read

View File

@@ -29,9 +29,9 @@ except:
webeng = False
urlSourcesList = [
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto", # Gitlink
"http://www.gfdgdxi.top/deep-wine-runner-auto-configuration-script/", # Github
"https://gitee.com/gfdgd-xi/deep-wine-runner-auto-configuration-script/raw/master/", # Gitee 源
"https://gfdgd-xi.github.io/deep-wine-runner-auto-configuration-script/", # Github
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto", # Gitlink
"http://gfdgdxi.msns.cn/wine-runner-list/auto/", # 备用源1纯 IPv6 源
"http://gfdgdxi.free.idcfengye.com/deep-wine-runner-auto-configuration-script/", # 备用源2
"http://gfdgdxi.free.idcfengye.com/wine-runner-list/auto/", # 备用源 3
@@ -139,7 +139,7 @@ class InformationWindow():
about = f"<h1>关于“{choose}”的介绍</h1>\n<p>暂无此程序的介绍</p>"
try:
import requests as r
fenlists = requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Jhc2hBcHBGZW4v").decode("utf-8") + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8"), timeout=1000).json()
fenlists = requests.get("http://data.download.gfdgdxi.top/BashAppFen/" + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8"), timeout=1000).json()
tipsInfo = ""
except:
fenlists = [0, 0, 0, 0, 0]
@@ -159,19 +159,19 @@ class InformationWindow():
if maxHead > 5:
for i in range(end):
if webeng:
starHtml += f"<img src='https://code.gitlink.org.cn/gfdgd_xi/deep-wine-runner/raw/branch/main/Icon/BadStar.svg' width=50>\n"
starHtml += f"<img src='http://wine-runner.gfdgdxi.top/BadStar.svg' width=50>\n"
else:
starHtml += f"<img src='{programPath}/Icon/BadStar.svg' width=50>\n"
else:
for i in range(maxHead):
if webeng:
starHtml += f"<img src='https://code.gitlink.org.cn/gfdgd_xi/deep-wine-runner/raw/branch/main/Icon/Star.svg' width=50>\n"
starHtml += f"<img src='http://wine-runner.gfdgdxi.top/Star.svg' width=50>\n"
else:
starHtml += f"<img src='{programPath}/Icon/Star.svg' width=50>\n"
head = maxHead
for i in range(head, end):
if webeng:
starHtml += f"<img src='https://code.gitlink.org.cn/gfdgd_xi/deep-wine-runner/raw/branch/main/Icon/UnStar.svg' width=50>"
starHtml += f"<img src='http://wine-runner.gfdgdxi.top/UnStar.svg' width=50>"
else:
starHtml += f"<img src='{programPath}/Icon/UnStar.svg' width=50>"
about += f"\n<hr/><h1>评分情况</h1>\n<p align='center'>{starHtml}</p>\n<p align='center'>{tipsInfo}</p>"
@@ -253,7 +253,7 @@ class ProgramRunStatusShow():
fileName = i[1]
break
try:
fenlists = requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Jhc2hBcHBGZW4v").decode("utf-8") + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).json()
fenlists = requests.get("http://data.download.gfdgdxi.top/BashAppFen/" + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).json()
tipsInfo = ""
except:
#traceback.print_exc()
@@ -311,7 +311,7 @@ class ProgramRunStatusShow():
else:
# 显示最新的3条评论
try:
all = int(requests.get(f"{base64.b64decode('aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy9iYXNocGlubHVuL3Jhdy9icmFuY2gvbWFzdGVyLw==').decode('utf-8')}{urllib.request.quote(fileName)}/data.txt").text)
all = int(requests.get(f"http://bashpinlun.gfdgdxi.top/{urllib.request.quote(fileName)}/data.txt").text)
now = all - 3
print(all)
if all < 3:
@@ -322,7 +322,7 @@ class ProgramRunStatusShow():
uploadList = []
for i in range(all - 1, start - 1, -1):
print(f"{i + 1} 条评论:")
info = requests.get(f"{base64.b64decode('aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy9iYXNocGlubHVuL3Jhdy9icmFuY2gvbWFzdGVyLw==').decode('utf-8')}{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip()
info = requests.get(f"http://bashpinlun.gfdgdxi.top/{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip()
print(info)
uploadList.append([f"用户{i + 1}", i + 1, info])
Add(uploadList)
@@ -379,7 +379,7 @@ def UpdateFen():
uploadList = []
for i in range(now + 2, now - 1, -1):
print(f"{i + 1} 条评论:")
info = requests.get(f"https://code.gitlink.org.cn/gfdgd-xi/bashpinlun/raw/branch/master/{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip()
info = requests.get(f"http://bashpinlun.gfdgdxi.top/{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip()
print(info)
uploadList.append([f"用户{i + 1}", i + 1, info])
#ProgramRunStatusShow.pingLunLayout.removeItem(ProgramRunStatusShow.pingLunLayout.itemAt(2))
@@ -516,7 +516,7 @@ def readtxt(path):
def ChangeSources():
global urlSources
sources = [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action_2, ui.action_3, ui.action]
sources = [ui.actionGitee, ui.actionGithub, ui.actionGitlink, ui.action_IPv6, ui.action_2, ui.action_3, ui.action]
for i in range(0, len(sources)):
if sources[i].isChecked():
urlSources = urlSourcesList[i]
@@ -557,9 +557,10 @@ if __name__ == "__main__":
window.show()
#ui.actionGitlink.setExclusive(True)
sourcesGroup = QtWidgets.QActionGroup(window)
sourcesGroup.addAction(ui.actionGitlink)
sourcesGroup.addAction(ui.actionGitee)
sourcesGroup.addAction(ui.actionGithub)
sourcesGroup.addAction(ui.actionGitlink)
sourcesGroup.addAction(ui.action_IPv6)
sourcesGroup.addAction(ui.action_2)
sourcesGroup.addAction(ui.action_3)

View File

@@ -0,0 +1,87 @@
{
"Package": [
"L",
"com.7zip.demo"
],
"Version": [
"L",
"23.01spark0"
],
"Description": [
"L",
"7Zip For Deepin Wine6 Stable"
],
"Maintainer": [
"L",
"gfdgd xi<3025613752@qq.com>"
],
"BottleName": [
"L",
"Spark-7zip"
],
"BottlePath": [
"L",
"/home/gfdgd_xi/.deepinwine/Spark-7zip"
],
"WineVersion": [
"Co",
5
],
"DebSavePath": [
"L",
"/home/gfdgd_xi/Desktop/com.7zip.demo_23.01spark0_all.deb"
],
"Desktop": [
"List-Desktop",
[
[
"c:/Program Files/7-Zip/7zFM.exe",
11,
"",
"7Zip",
"/home/gfdgd_xi/Desktop/Icon_0001.png",
""
]
]
],
"UseInstallWineArch": [
"Co",
0
],
"RemoveBash": [
"Ch",
true
],
"CleanBottleByUOS": [
"Ch",
true
],
"ChooseWineHelperValue": [
"Ch",
true
],
"DisabledMono": [
"Ch",
true
],
"DebDepends": [
"L",
"deepin-wine6-stable | deepin-wine6-stable-bcm | deepin-wine6-stable-dcm, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
],
"DebRecommend": [
"L",
""
],
"DebFirstArch": [
"Co",
0
],
"DebArch": [
"Co",
0
],
"SparkHelperConfigPath": [
"Str-SparkHelperConfigPath",
null
]
}

View File

@@ -43,8 +43,8 @@ programEnv = [
["($PROGRAMPATH)", programPath],
["($VERSION)", version],
["($THANK)", thankText],
["($MAKER)", "RacoonGX 团队By gfdgd xi"],
["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} RacoonGX 团队By gfdgd xi"],
["($MAKER)", "gfdgd xi"],
["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} gfdgd xi"],
["($?)", "0"],
["($PLATFORM)", platform.system()],
["($DEBUG)", "1"]
@@ -301,7 +301,7 @@ class Command():
def Version(self):
print(f"版本:{version}")
print(f"©2020~{time.strftime('%Y')} RacoonGX 团队By gfdgd xi")
print(f"©2020~{time.strftime('%Y')} gfdgd xi")
return 0
def Pause(self) -> int:
@@ -650,7 +650,7 @@ if __name__ == "__main__":
if len(sys.argv) - optionAll < 2:
print("Wine 运行器自动配置文件解析器交互环境")
print(f"版本:{version}")
print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi")
print(f"©2020~{time.strftime('%Y')} By gfdgd xi")
print("--------------------------------------------------------------")
while True:
commandLine = input(">")

48
InstallBox86-cn.sh Executable file
View File

@@ -0,0 +1,48 @@
#!/bin/bash
if [[ `whoami` != root ]]; then
echo 请以 root 权限运行
echo 按任意键退出
read
exit 1
fi
PCArch=`dpkg --print-architecture`
if [[ $PCArch != "aarch64" ]] && [[ $PCArch != "arm64" ]]; then
echo 非 ARM 架构,无法继续
echo 按任意键退出
read
exit 1
fi
which box86
if [[ $? == 0 ]]; then
echo 已安装,结束
echo 按回车键退出
read
exit 1
fi
echo 使用国内源
#sudo wget https://ryanfortner.github.io/box86-debs/box86.list -O /etc/apt/sources.list.d/box86.list
sudo bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs/debian ./ > /etc/apt/sources.list.d/box86.list"
wget -qO- http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box86-debs-archive-keyring.gpg
echo "adding key..."
installBox=box86-generic-arm
if [[ $PCArch == "arm64" ]]; then
sudo bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs/debian ./ > /etc/apt/sources.list.d/box64.list"
wget -qO- http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box64-debs-archive-keyring.gpg
installBox="box86-generic-arm box64-generic-arm"
sudo dpkg --add-architecture armhf
fi
echo " + sudo apt update"
sudo apt update
sudo apt install binfmt-support -y
sudo apt install libc6:armhf -y
echo apt 源添加完毕!按回车键继续安装 Box86/Box64若想要停止安装则请按 Ctrl+C 或按终端右上角 ×(叉叉)退出
echo 按回车键后将会自动安装包名为 box86-generic-arm、box64-generic-armbox64 要在 aarch64 系统才可安装)的 Box86/Box64 包(适用于通用 ARM 系统)
echo 其他特殊版本及其包名可见如下链接(如适用于 rk3399 的版本):
echo " - Box64https://github.com/ryanfortner/box64-debs/"
echo " - Box86https://github.com/ryanfortner/box86-debs/"
echo " - Box64国内镜像http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box64-debs"
echo " - Box64国内镜像http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs"
read
sudo apt install -y $installBox
echo 安装完成!按回车键退出
read

View File

@@ -19,17 +19,29 @@ if [[ $? == 0 ]]; then
read
exit 1
fi
#sudo wget https://itai-nelken.github.io/weekly-box86-debs/debian/box86.list -O /etc/apt/sources.list.d/box86.list
echo deb https://code.gitlink.org.cn/gfdgd_xi/weekly-box86-debs/raw/branch/main/debian / > /etc/apt/sources.list.d/box86.list
echo 使用 Github 源
#sudo wget https://ryanfortner.github.io/box86-debs/box86.list -O /etc/apt/sources.list.d/box86.list
sudo wget https://ryanfortner.github.io/box86-debs/box86.list -O /etc/apt/sources.list.d/box86.list
wget -qO- https://ryanfortner.github.io/box86-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box86-debs-archive-keyring.gpg
echo "adding key..."
wget -qO- https://code.gitlink.org.cn/gfdgd_xi/weekly-box86-debs/raw/branch/main/debian/KEY.gpg | sudo apt-key add -
installBox=box86
installBox=box86-generic-arm
if [[ $PCArch == "arm64" ]]; then
installBox="box86 box64"
sudo wget https://ryanfortner.github.io/box64-debs/box64.list -O /etc/apt/sources.list.d/box64.list
wget -qO- https://ryanfortner.github.io/box64-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box64-debs-archive-keyring.gpg
installBox="box86-generic-arm box64-generic-arm"
sudo dpkg --add-architecture armhf
fi
echo " + sudo apt update"
sudo apt update
sudo apt install binfmt-support -y
echo apt 源添加完毕!按回车键继续安装 Box86/Box64若想要停止安装则请按 Ctrl+C 或按终端右上角 ×(叉叉)退出
echo 按回车键后将会自动安装包名为 box86-generic-arm、box64-generic-armbox64 要在 aarch64 系统才可安装)的 Box86/Box64 包(适用于通用 ARM 系统)
echo 其他特殊版本及其包名可见如下链接(如适用于 rk3399 的版本):
echo " - Box64https://github.com/ryanfortner/box64-debs/"
echo " - Box86https://github.com/ryanfortner/box86-debs/"
echo " - Box64国内镜像https://jihulab.com/gfdgd-xi/box64-debs"
echo " - Box64国内镜像https://jihulab.com/gfdgd-xi/box86-debs"
read
sudo apt install -y $installBox
echo 安装完成!按回车键退出
read

View File

@@ -23,6 +23,7 @@ def exit():
sys.exit()
# 获取云列表
sourcesList = [
"http://dll.wine-runner.gfdgdxi.top",
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls",
"http://gfdgdxi.msns.cn/wine-runner-list/dlls"
]
@@ -31,7 +32,8 @@ print("获取列表中……", end="")
try:
lists = json.loads(requests.get(f"{url}/list.json").text)
except:
print("\r列表获取失败!")
print("\r列表获取失败!按回车键退出")
input()
exit()
print("\r列表获取成功!")

View File

@@ -18,19 +18,59 @@ import updatekiller
import req as requests
homePath = os.path.expanduser('~')
try:
sources = [
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/fonts/list.json",
"http://gfdgdxi.msns.cn/wine-runner-list/fonts/list.json"
sourcesList = [
"http://fonts.wine-runner.gfdgdxi.top/list.json",
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/fonts/list.json"
]
fontList = json.loads(requests.get(sources[0]).text)
change = False
for i in sourcesList:
try:
fontList = json.loads(requests.get(i).text)
change = True
break
except:
pass
if not change:
fontList = json.loads(requests.get(sourcesList[0]).text)
except:
print("使用离线列表")
fontList = [
["fake_simsun.ttc", "https://gitlink.org.cn/api/attachments/392168", "simsun.ttc", "fake_simsun.ttc会替换容器内的宋体且与 deepin 有问题)"],
["simsun.ttc", "https://gitlink.org.cn/api/attachments/392181", "simsun.ttc", "simsun.ttc"],
["simsunb.ttf", "https://gitlink.org.cn/api/attachments/392180", "simsunb.ttf", "simsunb.ttf"],
["msyh.ttc", "https://gitlink.org.cn/api/attachments/392182", "msyh.ttc", "msyh.ttc"],
["msyhl.ttc", "https://gitlink.org.cn/api/attachments/392184", "msyhl.ttc", "msyhl.ttc"],
["msyhbd.ttc", "https://gitlink.org.cn/api/attachments/392183", "msyhbd.ttc", "msyhbd.ttc"]
[
"fake_simsun.ttc",
"http://fonts.wine-runner.gfdgdxi.top/fake_simsun.ttc",
"simsun.ttc",
"fake_simsun.ttc会替换容器内的宋体"
],
[
"simsun.ttc",
"http://fonts.wine-runner.gfdgdxi.top/simsun.ttc",
"simsun.ttc",
"simsun.ttc"
],
[
"simsunb.ttf",
"http://fonts.wine-runner.gfdgdxi.top/simsunb.ttf",
"simsunb.ttf",
"simsunb.ttf"
],
[
"msyh.ttc",
"http://fonts.wine-runner.gfdgdxi.top/msyh.ttc",
"msyh.ttc",
"msyh.ttc"
],
[
"msyhl.ttc",
"http://fonts.wine-runner.gfdgdxi.top/msyhl.ttc",
"msyhl.ttc",
"msyhl.ttc"
],
[
"msyhbd.ttc",
"http://fonts.wine-runner.gfdgdxi.top/msyhbd.ttc",
"msyhbd.ttc",
"msyhbd.ttc"
]
]
def Download(wineBotton: str, id: int) -> int:
return os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/Fonts/' -o '{fontList[id][0]}' \"{fontList[id][1]}\"")

105
InstallFoxpro.py Executable file
View File

@@ -0,0 +1,105 @@
#!/usr/bin/env python3
# 使用系统默认的 python3 运行
###########################################################################################
# 作者gfdgd xi
# 版本2.1.0
# 更新时间2022年08月25日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建
###########################################################################################
#################
# 引入所需的库
#################
import os
import sys
import json
import updatekiller
import req as requests
try:
sourcesList = [
"http://foxpro.wine-runner.gfdgdxi.top/list.json",
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/Visual FoxPro/list.json"
]
change = False
for i in sourcesList:
try:
netList = json.loads(requests.get(i).text)
change = True
break
except:
pass
if not change:
netList = json.loads(requests.get(sourcesList[0]).text)
except:
print("使用离线列表")
netList = [
["3.0 Runtime Service Pack 1", "http://foxpro.wine-runner.gfdgdxi.top/VFP3SP1RT.EXE", "VFP3SP1RT.EXE"],
["5.0 Runtime Service Pack 1", "http://foxpro.wine-runner.gfdgdxi.top/VFP5SP1RT.EXE", "VFP5SP1RT.EXE"],
["6.0 Runtime Service Pack 5", "http://foxpro.wine-runner.gfdgdxi.top/VFP6SP5RT.EXE", "VFP6SP5RT.EXE"],
["7.0 Runtime Service Pack 0", "http://foxpro.wine-runner.gfdgdxi.top/VFP7SP0RT.EXE", "VFP7SP0RT.EXE"],
["7.0 Runtime Service Pack 1", "http://foxpro.wine-runner.gfdgdxi.top/VFP7SP1RT.EXE", "VFP7SP1RT.EXE"],
["8.0 Runtime Service Pack 0", "http://foxpro.wine-runner.gfdgdxi.top/VFP8SP0RT.EXE", "VFP8SP0RT.EXE"],
["8.0 Runtime Service Pack 1", "http://foxpro.wine-runner.gfdgdxi.top/VFP8SP1RT.EXE", "VFP8SP1RT.EXE"],
["9.0 Runtime Service Pack 1", "http://foxpro.wine-runner.gfdgdxi.top/VFP9SP1RT.EXE", "VFP9SP1RT.EXE"],
["9.0 Runtime Service Pack 2 with Hotfixes", "http://foxpro.wine-runner.gfdgdxi.top/VFP9SP2RT.EXE", "VFP9SP2RT.EXE"]
]
def Download(wineBotton: str, id: int, wine: str) -> int:
try:
os.remove(f"/tmp/deepin-wine-runner-FoxPro/{netList[id][2]}")
except:
pass
os.system(f"aria2c -x 16 -s 16 -d '/tmp/deepin-wine-runner-FoxPro' -o '{netList[id][2]}' \"{netList[id][1]}\"")
return os.system(f"WINEPREFIX='{wineBotton}' {wine} '/tmp/deepin-wine-runner-FoxPro/{netList[id][2]}'")
if __name__ == "__main__":
if "--help" in sys.argv:
print("作者gfdgd xi")
print("版本1.0.0")
print("本程序可以更方便的在 wine 容器中安装 Visual FoxPro")
sys.exit()
if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "":
print("您未指定需要安装 Visual FoxPro 的容器和使用的 wine无法继续")
print("参数:")
print("XXX 参数一 参数二 参数三(可略)")
print("参数一为需要安装的容器参数二为需要使用的wine参数三为是否缓存可略三个参数位置不能颠倒")
sys.exit()
homePath = os.path.expanduser('~')
print('''
mmmmmm mmmmm
# mmm m m # "# m mm mmm
#mmmmm #" "# #m# #mmm#" #" " #" "#
# # # m#m # # # #
# "#m#" m" "m # # "#m#"
''')
print("请选择以下的 Visual FoxPro 进行安装(不保证能正常安装运行)")
for i in range(0, len(netList)):
print(f"{i} Visual FoxPro {netList[i][0]}")
while True:
try:
choose = input("请输入要选择的 Visual FoxPro 版本输入“exit”退出").lower()
if choose == "exit":
break
choose = int(choose)
except:
print("输入错误,请重新输入")
continue
if 0 <= choose and choose < len(netList):
break
if choose == "exit":
exit()
print(f"您选择了 Visual FoxPro {netList[choose][0]}")
if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}"):
print("已经缓存,使用本地版本")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
input("安装结束,按回车键退出")
exit()
print("开始下载")
os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/vcpp'")
os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/vcpp' -o '{netList[choose][2]}' \"{netList[choose][1]}\"")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
input("安装结束,按回车键退出")

View File

@@ -17,17 +17,29 @@ import updatekiller
import req as requests
try:
sourcesList = [
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/msxml/list.json",
"http://gfdgdxi.msns.cn/wine-runner-list/msxml/list.json"
"http://msxml.wine-runner.gfdgdxi.top/list.json",
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/msxml/list.json"
]
msxmlList = json.loads(requests.get(sourcesList[0]).text)
change = False
for i in sourcesList:
try:
msxmlList = json.loads(requests.get(i).text)
change = True
break
except:
pass
if not change:
msxmlList = json.loads(requests.get(sourcesList[0]).text)
except:
print("使用离线列表")
msxmlList = [
["MSXML 4.0 SP2", "https://www.gitlink.org.cn/api/attachments/390679?gfdgd_xi", "msxml6.0.msi"],
["MSXML 4.0 SP3", "https://www.gitlink.org.cn/api/attachments/390678?gfdgd_xi", "msxml4.0SP3.msi"],
["MSXML 6.0", "https://www.gitlink.org.cn/api/attachments/390681?gfdgd_xi", "msxml6_x64.msi"]
["MSXML 4.0 SP2", "http://msxml.wine-runner.gfdgdxi.top/msxml6.0.msi", "msxml6.0.msi"],
["MSXML 4.0 SP3", "http://msxml.wine-runner.gfdgdxi.top/msxml4.0SP3.msi", "msxml4.0SP3.msi"],
["MSXML 6.0", "http://msxml.wine-runner.gfdgdxi.top/msxml6_x64.msi", "msxml6_x64.msi"],
["MSXML 3.0", "http://msxml.wine-runner.gfdgdxi.top/msxml3.msi", "msxml3.msi"]
]
def Download(wineBotton: str, id: int, wine: str):
os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-msxml/\" -o \"{msxmlList[id][2]}\" \"{msxmlList[id][1]}\"")
return os.system(f"WINEPREFIX='{wineBotton}' {wine} msiexec /i \"/tmp/deepin-wine-runner-msxml/{msxmlList[id][2]}\"")

View File

@@ -18,10 +18,21 @@ import req as requests
try:
sourcesList = [
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/net/list.json",
"http://net.wine-runner.gfdgdxi.top/list.json",
"http://gfdgdxi.msns.cn/wine-runner-list/net/list.json"
]
netList = json.loads(requests.get(sourcesList[0]).text)
change = False
for i in sourcesList:
try:
netList = json.loads(requests.get(i).text)
change = True
break
except:
pass
if not change:
netList = json.loads(requests.get(sourcesList[0]).text)
except:
print("使用离线列表")
netList = [
["Microsoft® .NET Framework 1.1 版可转散发套件", "https://download.microsoft.com/download/8/2/7/827bb1ef-f5e1-4464-9788-40ef682930fd/dotnetfx.exe"],
["Microsoft .NET Framework 2.0 Service Pack 1 (x86)", "https://download.microsoft.com/download/0/8/c/08c19fa4-4c4f-4ffb-9d6c-150906578c9e/NetFx20SP1_x86.exe"],

View File

@@ -17,7 +17,9 @@ echo '" #"# # # #" # #" # #mmmm# # #'
echo ' ## ##" # # # #"""" # # # #'
echo ' # # mm#mm # # "#mm" # # #mm#"'
echo ' # '
echo
echo "WineHQ 官网https://wiki.winehq.org/"
echo 当前使用国内镜像源https://mirrors-i.tuna.tsinghua.edu.cn/help/wine-builds/
ubuntuSource=(
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/ubuntu/ jammy main | sudo tee /etc/apt/sources.list.d/winehq.list"
@@ -28,11 +30,11 @@ ubuntuSource=(
debianSource=(
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/ buster main | sudo tee /etc/apt/sources.list.d/winehq.list"
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/ bullseye main | sudo tee /etc/apt/sources.list.d/winehq.list"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources"
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/ bookworm main | sudo tee /etc/apt/sources.list.d/winehq.list"
)
# 选择发行版
echo "WineHQ 官网https://wiki.winehq.org/"
echo "国内镜像源https://mirrors-i.tuna.tsinghua.edu.cn/help/wine-builds/"
#echo "WineHQ 官网https://wiki.winehq.org/"
#echo "国内镜像源https://mirrors-i.tuna.tsinghua.edu.cn/help/wine-builds/"
echo
echo "选择发行版:"
echo "0. Debian"
@@ -43,7 +45,7 @@ echo "选择系统版本"
if [ $system = "0" ]; then
echo "0. Debian 10 (Buster)"
echo "1. Debian 11 (Bullseye)"
echo "2. Debian Testing (Bookworm)"
echo "2. Debian 12 (Bookworm)"
fi
if [ $system = "1" ]; then
echo "0. Ubuntu 22.04"

View File

@@ -17,17 +17,19 @@ echo '" #"# # # #" # #" # #mmmm# # #'
echo ' ## ##" # # # #"""" # # # #'
echo ' # # mm#mm # # "#mm" # # #mm#"'
echo ' # '
echo
echo "WineHQ 官网https://wiki.winehq.org/"
echo 当前不使用国内镜像源
ubuntuSource=(
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/ubuntu/ jammy main | sudo tee /etc/apt/sources.list.d/winehq.list"
"sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/impish/winehq-impish.sources"
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/ubuntu/ focal main | sudo tee /etc/apt/sources.list.d/winehq.list"
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/ubuntu/ bionic main | sudo tee /etc/apt/sources.list.d/winehq.list"
"sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/focal/winehq-focal.sources"
"sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/bionic/winehq-bionic.sources"
)
debianSource=(
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/ buster main | sudo tee /etc/apt/sources.list.d/winehq.list"
"echo deb [arch=amd64,i386 signed-by=/usr/share/keyrings/winehq-archive.key] https://mirrors.tuna.tsinghua.edu.cn/wine-builds/debian/ bullseye main | sudo tee /etc/apt/sources.list.d/winehq.list"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/buster/winehq-buster.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bullseye/winehq-bullseye.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources"
)
# 选择发行版
@@ -43,7 +45,7 @@ echo "选择系统版本"
if [ $system = "0" ]; then
echo "0. Debian 10 (Buster)"
echo "1. Debian 11 (Bullseye)"
echo "2. Debian Testing (Bookworm)"
echo "2. Debian 12 (Bookworm)"
fi
if [ $system = "1" ]; then
echo "0. Ubuntu 22.04"
@@ -61,7 +63,9 @@ read programVersion
# 初步配置
sudo apt-key del "D43F 6401 4536 9C51 D786 DDEA 76F1 A20F F987 672F"
sudo dpkg --add-architecture i386
sudo wget -nc -O /usr/share/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
#sudo wget -nc -O /usr/share/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
# 检测 apt-fast 或 ss-apt-fast 是否存在
apt="apt"
which apt-fast > /dev/null

View File

@@ -17,11 +17,22 @@ import updatekiller
import req as requests
try:
sourcesList = [
"http://other.wine-runner.gfdgdxi.top/list.json",
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/other/list.json",
"http://gfdgdxi.msns.cn/wine-runner-list/other/list.json"
]
msxmlList = json.loads(requests.get(sourcesList[0]).text)
change = False
for i in sourcesList:
try:
msxmlList = json.loads(requests.get(i).text)
change = True
break
except:
pass
if not change:
msxmlList = json.loads(requests.get(sourcesList[0]).text)
except:
print("使用离线列表")
msxmlList = [
["Windows Script 5.7 for Windows XP", "https://download.microsoft.com/download/f/f/e/ffea3abf-b55f-4924-b5a5-bde0805ad67c/scripten.exe", "exe", "scripten.exe"],
["Windows Management Instrumentation 1.50.1131", "https://www.gitlink.org.cn/api/attachments/390680", "exe", "WMITools.exe"]
@@ -66,6 +77,8 @@ if __name__ == "__main__":
while True:
try:
choose = input("请输入要选择要安装的应用输入“exit”退出").lower()
if choose == "exit":
break
choose = int(choose)
except:
print("输入错误,请重新输入")

View File

@@ -1,8 +1,8 @@
#!/bin/bash
arch=amd64
libPath=/usr/lib/x86_64-linux-gnu/
version=1.0.0
url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb"
version=1.0.1
url="https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/$arch-runtime-for-qemu_${version}_all.deb"
fileName=`basename $url`
if [[ -d $libPath ]]; then

View File

@@ -2,7 +2,7 @@
arch=arm64
libPath=/usr/lib/aarch64-linux-gnu
version=1.0.0
url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb"
url="https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/$arch-runtime-for-qemu_${version}_all.deb"
fileName=`basename $url`
if [[ -d $libPath ]]; then

View File

@@ -2,7 +2,7 @@
arch=armhf
libPath=/usr/lib/arm-linux-gnueabihf/
version=1.0.0
url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb"
url="https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/$arch-runtime-for-qemu_${version}_all.deb"
fileName=`basename $url`
if [[ -d $libPath ]]; then

View File

@@ -2,7 +2,7 @@
arch=i386
libPath=/usr/lib/i386-linux-gnu/
version=1.0.0
url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb"
url="https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/$arch-runtime-for-qemu_${version}_all.deb"
fileName=`basename $url`
if [[ -d $libPath ]]; then

View File

@@ -2,7 +2,7 @@
arch=mips64el
libPath=/usr/lib/mips64el-linux-gnuabi64
version=1.0.0
url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb"
url="https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/$arch-runtime-for-qemu_${version}_all.deb"
fileName=`basename $url`
if [[ -d $libPath ]]; then

View File

@@ -2,7 +2,7 @@
arch=ppc64el
libPath=/usr/lib/powerpc64le-linux-gnu/
version=1.0.0
url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb"
url="https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/$arch-runtime-for-qemu_${version}_all.deb"
fileName=`basename $url`
if [[ -d $libPath ]]; then

View File

@@ -2,7 +2,7 @@
arch=riscv64
libPath=/usr/lib/riscv64-linux-gnu/
version=1.0.0
url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb"
url="https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/$arch-runtime-for-qemu_${version}_all.deb"
fileName=`basename $url`
if [[ -d $libPath ]]; then

View File

@@ -2,7 +2,7 @@
arch=s390x
libPath=/usr/lib/s390x-linux-gnu/
version=1.0.0
url="https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/$arch-runtime-for-qemu_${version}_all.deb"
url="https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/$arch-runtime-for-qemu_${version}_all.deb"
fileName=`basename $url`
if [[ -d $libPath ]]; then

View File

@@ -17,17 +17,27 @@ import updatekiller
import req as requests
try:
sourcesList = [
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/list.json",
"http://gfdgdxi.msns.cn/wine-runner-list/vb/list.json"
"http://vb.wine-runner.gfdgdxi.top/list.json",
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/list.json"
]
netList = json.loads(requests.get().text)
change = False
for i in sourcesList:
try:
netList = json.loads(requests.get(i).text)
change = True
break
except:
pass
if not change:
netList = json.loads(requests.get(sourcesList[0]).text)
except:
print("使用离线列表")
netList = [
["Visual Basic 1(DOS application)", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vbrun100.exe", "vbrun100.exe"],
["Visual Basic 2(DOS application)", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vbrun200.exe", "vbrun200.exe"],
["Visual Basic 3", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vb3run.exe", "vb3run.exe"],
["Visual Basic 4", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vb4run.exe", "vb4run.exe"],
["Visual Basic 6", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vb/vbrun60sp4.exe", "vbrun60sp4.exe"]
["Visual Basic 1", "http://vb.wine-runner.gfdgdxi.top/vbrun100.exe", "vbrun100.exe"],
["Visual Basic 2", "http://vb.wine-runner.gfdgdxi.top/vbrun200.exe", "vbrun200.exe"],
["Visual Basic 3", "http://vb.wine-runner.gfdgdxi.top/vb3run.exe", "vb3run.exe"],
["Visual Basic 4", "http://vb.wine-runner.gfdgdxi.top/vb4run.exe", "vb4run.exe"],
["Visual Basic 6", "http://vb.wine-runner.gfdgdxi.top/vbrun60sp4.exe", "vbrun60sp4.exe"]
]
def Download(wineBotton: str, id: int, wine: str) -> int:
try:

View File

@@ -17,13 +17,23 @@ import updatekiller
import req as requests
try:
sourcesList = [
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vscpp/list.json",
"http://gfdgdxi.msns.cn/wine-runner-list/vscpp/list.json"
"http://vcpp.wine-runner.gfdgdxi.top/list.json",
"https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vscpp/list.json"
]
netList = json.loads(requests.get(sourcesList[0]).text)
change = False
for i in sourcesList:
try:
netList = json.loads(requests.get(i).text)
change = True
break
except:
pass
if not change:
netList = json.loads(requests.get(sourcesList[0]).text)
except:
print("使用离线列表")
netList = [
["VC6 运行库", "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vscpp/VC6RedistSetup_deu.exe", "VC6RedistSetup_deu.exe"],
["VC6 运行库", "http://vcpp.wine-runner.gfdgdxi.top/VC6RedistSetup_deu.exe", "VC6RedistSetup_deu.exe"],
["2005 Service Pack 1 Redistributable Package MFC 安全更新", "https://download.microsoft.com/download/4/A/2/4A22001F-FA3B-4C13-BF4E-42EC249D51C4/vcredist_x86.EXE", "vcredist05_x86.exe"],
["2008 (VC++ 9.0) SP1 (不再支持) X86", "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe", "vcredist08_x86.exe"],
["2008 (VC++ 9.0) SP1 (不再支持) X64", "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe", "vcredist08_x86.exe"],

View File

@@ -12,8 +12,10 @@ package:
#cd VM-source && make
#cd wine && make
make clean -j$(nproc)
mkdir deb/opt/apps/deepin-wine-runner/LANG -pv
cp -rv helperset deb/opt/apps/deepin-wine-runner/
#cp -rv VM-source/VirtualMachine VM
cp -rv VM-source/deepin-wine-runner.svg VM
cp -rv VM-source/Windows7X64Auto.iso VM
cp -rv VM-source/Windows7X86Auto.iso VM
@@ -21,6 +23,7 @@ package:
cp -rv Test/ deb/opt/apps/deepin-wine-runner/
cp -rv information.json package-script
zip -v -q -r package-script.zip package-script
cp -rv InstallBox86-cn.sh deb/opt/apps/deepin-wine-runner/
cp -rv VM deb/opt/apps/deepin-wine-runner
cp -rv 2048 deb/opt/apps/deepin-wine-runner/
cp -rv Download.py deb/opt/apps/deepin-wine-runner/
@@ -30,6 +33,8 @@ package:
cp -rv QemuRun.py deb/opt/apps/deepin-wine-runner
cp -rv kill.sh deb/opt/apps/deepin-wine-runner
cp -rv updatekiller.py deb/opt/apps/deepin-wine-runner
cp -rv AddWineDebMirrorForDeepin20.sh deb/opt/apps/deepin-wine-runner
cp -rv InstallNewWineHQOrg.sh deb/opt/apps/deepin-wine-runner
cp -rv InstallWineOnDeepin23Alpha.py deb/opt/apps/deepin-wine-runner
cp -rv wrestool deb/opt/apps/deepin-wine-runner
cp -rv Mount.sh deb/opt/apps/deepin-wine-runner
@@ -45,6 +50,9 @@ package:
rm -rfv deb/opt/apps/deepin-wine-runner/wine/winelist.json
cp -rv req deb/opt/apps/deepin-wine-runner
cp -rv pardus-chroot deb/opt/apps/deepin-wine-runner
cp -rv winetricks deb/opt/apps/deepin-wine-runner
cp -rv WineLib deb/opt/apps/deepin-wine-runner
cp -rv InstallFoxpro.py deb/opt/apps/deepin-wine-runner
cp -rv BuildDesktop.py deb/opt/apps/deepin-wine-runner
cp -rv ChangePassword.sh deb/opt/apps/deepin-wine-runner
cp -rv trans deb/opt/apps/deepin-wine-runner
@@ -110,9 +118,14 @@ package:
cp -rv RemoveQemuUser.sh deb/opt/apps/deepin-wine-runner
cp -rv InstallBox86.sh deb/opt/apps/deepin-wine-runner
cp -rv InstallRuntime deb/opt/apps/deepin-wine-runner
mkdir -pv deb/opt/apps/deepin-wine-runner/entries/
cp -rv deb/usr/share/applications deb/opt/apps/deepin-wine-runner/entries/applications
python3 UpdateTime.py
python3 RemovePycacheFile.py
sudo rm -rfv /tmp/spark-deepin-wine-runner-builder/
cp -rv deb /tmp/spark-deepin-wine-runner-builder
rm -rfv deb/opt/apps/deepin-wine-runner/*
rm -rfv package-script.zip
mkdir -pv /tmp/spark-deepin-wine-runner-builder/usr/bin
ln -s /opt/apps/deepin-wine-runner/deepin-wine-packager.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-package-builder
ln -s /opt/apps/deepin-wine-runner/deepin-wine-easy-packager.py /tmp/spark-deepin-wine-runner-builder/usr/bin/deepin-wine-packager-easy-builder
@@ -136,15 +149,15 @@ package:
sudo chown -R root:root /tmp/spark-deepin-wine-runner-builder
dpkg -b /tmp/spark-deepin-wine-runner-builder spark-deepin-wine-runner.deb
dpkg-deb -Z xz -b /tmp/spark-deepin-wine-runner-builder spark-deepin-wine-runner.deb
sudo rm -rfv /tmp/spark-deepin-wine-runner-builder
install:
make build -j$(nproc)
sudo apt update ; true
#sudo dpkg -i spark-deepin-wine-runner.deb
sudo apt reinstall ./spark-deepin-wine-runner.deb -y --allow-downgrades
rm spark-deepin-wine-runner.deb -vf
remove:
sudo apt purge spark-deepin-wine-runner -y

View File

@@ -0,0 +1,10 @@
Package: @@PACKAGE@@
Version: @@VERSION@@
Architecture: @@ARCH@@
Maintainer: @@MAKER@@
Depends: @@DEPENDS@@
Section: non-free/otherosfs
Priority: optional
Multi-Arch: foreign
Installed-Size: @@SIZE@@
Description: @@DESCRIPTION@@

View File

@@ -0,0 +1,14 @@
[Desktop Entry]
Categories=;
Comment=@@NAME@@
Encoding=UTF-8
Exec="/opt/apps/@@PACKAGE@@/files/run.sh" --uri
GenericName=@@NAME@@
Icon=@@ICONLIST@@
MimeType=@@MIMETYPE@@
Name=@@NAME@@.desktop
StartupNotify=false
Terminal=false
Type=Application
X-Created-By=
X-Deepin-Vendor=user-custom

View File

@@ -0,0 +1,113 @@
#!/bin/sh
# Copyright (C) 2016 Deepin, Inc.
#
# Author: Li LongYu <lilongyu@linuxdeepin.com>
# Peng Hao <penghao@linuxdeepin.com>
#
#
# Copyright (C) 2022 The Spark Project
#
#
# Modifier shenmo <shenmo@spark-app.store>
#
#
#
#######################函数段。下文调用的额外功能会在此处声明
Get_Dist_Name()
{{
if grep -Eqii "Deepin" /etc/issue || grep -Eq "Deepin" /etc/*-release; then
DISTRO='Deepin'
elif grep -Eqi "UnionTech" /etc/issue || grep -Eq "UnionTech" /etc/*-release; then
DISTRO='UniontechOS'
else
DISTRO='OtherOS'
fi
}}
####获得发行版名称
#########################预设值段
version_gt() { test "$(echo "$@" | tr " " "
" | sort -V | head -n 1)" != "$1"; }
####用于比较版本?未实装
BOTTLENAME="@@@BOTTLENAME@@@"
APPVER="@@@APPVER@@@"
EXEC_PATH="@@@EXEC_PATH@@@"
##### 软件在wine中的启动路径
START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh"
export MIME_TYPE=""
#####没什么用
export DEB_PACKAGE_NAME="@@@DEB_PACKAGE_NAME@@@"
####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关
export APPRUN_CMD="@@@APPRUN_CMD@@@"
#####wine启动指令建议
EXPORT_ENVS=""
export SPECIFY_SHELL_DIR=`dirname $START_SHELL_PATH`
ARCHIVE_FILE_DIR="/opt/apps/$DEB_PACKAGE_NAME/files"
export WINEDLLPATH=/opt/$APPRUN_CMD/lib:/opt/$APPRUN_CMD/lib64
export WINEPREDLL="$ARCHIVE_FILE_DIR/dlls"
DISABLE_ATTACH_FILE_DIALOG=""
##默认为空。若为1则不使用系统自带的文件选择而是使用wine的
##对于deepin/UOS大部分的应用都不需要使用wine的如果有需求比如wine应用选择的限定种类文件系统的文管不支持
##请填1。
##注意因为非DDE的环境不确定所以默认会在非Deepin/UOS发行版上禁用这个功能。如果你确认在适配的发行版上可以正常启动请注释或者删除下面这段
##############<<<<<<<<<禁用文件选择工具开始
Get_Dist_Name
#此功能实现参见结尾函数段
if [ "$DISTRO" != "Deepin" ] && [ "$DISTRO" != "UniontechOS" ];then
DISABLE_ATTACH_FILE_DIALOG="1"
echo "非deepin/UOS默认关闭系统自带的文件选择工具使用Wine的"
echo "如果你想改变这个行为,请到/opt/apps/$DEB_PACKAGE_NAME/files/$0处修改"
echo "To打包者如果你要打开自带请注意在适配的发行版上进行测试"
echo "To用户打包者没有打开这个功能这证明启用这个功能可能造成运行问题。如果你要修改这个行为请确保你有一定的动手能力"
fi
##############>>>>>>>>>禁用文件选择工具结束
##############<<<<<<<<<屏蔽mono和gecko安装器开始
##默认屏蔽mono和gecko安装器
{['''#if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then
#export WINEDLLOVERRIDES="mscoree,mshtml="
#echo "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效"
#fi''', '''if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then
export WINEDLLOVERRIDES="mscoree,mshtml="
echo "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效"
fi'''][int(disabledMono.isChecked())]}
##############>>>>>>>>>屏蔽mono和gecko安装器结束
#########################执行段
if [ -z "$DISABLE_ATTACH_FILE_DIALOG" ];then
export ATTACH_FILE_DIALOG=1
fi
if [ -n "$EXPORT_ENVS" ];then
export $EXPORT_ENVS
fi
if [ -n "$EXEC_PATH" ];then
if [ -z "${{EXEC_PATH##*.lnk*}}" ];then
$START_SHELL_PATH $BOTTLENAME $APPVER "C:/windows/command/start.exe" "/Unix" "$EXEC_PATH" "$@"
else
$START_SHELL_PATH $BOTTLENAME $APPVER "$EXEC_PATH" "$@"
fi
else
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
fi

13
PackageConfig/list.json Normal file
View File

@@ -0,0 +1,13 @@
[
"@@PACKAGE@@",
"@@VERSION@@",
"@@ARCH@@",
"@@MAKER@@",
"@@DEPENDS@@",
"@@SIZE@@",
"@@DESCRIPTION@@"
"@@ICONLIST@@",
"@@NAME@@",
"@@MIMETYPE@@",
"@@CATEGORIES@@"
]

View File

@@ -15,7 +15,7 @@ class ProgramRunStatusShow():
try:
fenlists = []
for i in range(6):
fenlists.append(int(requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Zlbi9GZW4=").decode("utf-8") + f"{i}.txt").text))
fenlists.append(int(requests.get("http://data.download.gfdgdxi.top/Fen/Fen" + f"{i}.txt").text))
tipsInfo = ""
except:
traceback.print_exc()

View File

@@ -92,7 +92,7 @@ class Ui_MainWindow(object):
self.menu = MainWindow.menuBar()
self.changeSources = self.menu.addMenu(_translate("MainWindow", "更换源"))
self.gitlinkAction = QtWidgets.QAction(_translate("MainWindow", "Gitlink 源(推荐)"))
self.gitlinkAction = QtWidgets.QAction(_translate("MainWindow", "Github 源(推荐)"))
self.ipv6Action = QtWidgets.QAction(_translate("MainWindow", "备用源(只支持 IPv6 用户)"))
self.localAction = QtWidgets.QAction(_translate("MainWindow", "本地测试源127.0.0.1"))
self.changeSources.addAction(self.gitlinkAction)
@@ -324,7 +324,10 @@ def on_addButton_clicked():
# ui.deleteZip.setChecked(False)
# ui.unzip.setChecked(False)
arch = internetJsonList[choose][2]
downloadUrl = f"{internetWineSource}/{arch}/{downloadName}"
if "://" in downloadName:
downloadUrl = downloadName
else:
downloadUrl = f"{internetWineSource}/{arch}/{downloadName}"
dialog = QtWidgets.QProgressDialog()
cancel = QtWidgets.QPushButton("取消")
cancel.setDisabled(True)
@@ -393,7 +396,7 @@ if __name__ == "__main__":
localJsonList = []
internetJsonList = []
internetWineSourceList = [
"https://code.gitlink.org.cn/gfdgd_xi/deepin-wine-runner-ubuntu-image/raw/branch/master/Sandbox",
"http://chroot.gfdgdxi.top",
"http://gfdgdxi.msns.cn/deepin-wine-runner-ubuntu-image/Sandbox", # 备用源,纯 IPv6 源
"http://127.0.0.1/deepin-wine-runner-ubuntu-image/Sandbox/" # 本地测试源
]

View File

@@ -1,4 +1,6 @@
#!/bin/bash
pkexec apt install qemu-system -y
sudo apt update
sudo apt install qemu-system qemu-user qemu-efi -y
sudo apt install qemu-user-static binfmt-support qemu-system-gui -y
echo 安装完成!按回车键退出
read
read

View File

@@ -1,17 +1,17 @@
<p width=100px align="center"><img src="https://storage.deepin.org/thread/202208031419283599_deepin-wine-runner.png"></p>
<h1 align="center">Wine 运行器 3.2.1</h1>
<h1 align="center">Wine 运行器 3.4.0</h1>
<hr>
## 介绍
Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器和运行库安装工具等。
它同时还内置了基于VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作。
它同时还内置了基于Qemu/VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作,也能在非 X86 架构安装 X86 架构的 Windows 操作系统(但是效率较低)
此外它还简化了如下命令让你可以更简便地使用Wine
```bash
env WINEPREFIX=容器路径 winewine的路径 可执行文件路径
```
让你可以简易方便的使用 wine
是使用 Python3 的 PyQt5 构建的
测试平台deepin 20.8UOS 家庭版 21.3.1Ubuntu 22.04Ubuntu 20.04UOS 专业版 1050openkylin
测试平台deepin 20.8UOS 家庭版 22Ubuntu 22.04Ubuntu 20.04Ubuntu 23.04UOS 专业版 1050openkylincuteosyoyo os
![截图_选择区域_20221002221112.png](https://storage.deepin.org/thread/202210022215217037_截图_选择区域_20221002221112.png)
而打包器可以方便的把您的 wine 容器打包成 deb 包供他人使用,程序创建的 deb 构建临时文件夹目录树如下:
```bash
@@ -44,6 +44,9 @@ env WINEPREFIX=容器路径 winewine的路径 可执行文件路径
理论上支持全架构,如果 Python 能运行的话
非 X86 架构会利用到 `box86``exagear``qemu` 等技术
## Wine 运行器自动构建Newest
此只供尝鲜不保证能用https://github.com/gfdgd-xi/deep-wine-runner/actions/workflows/auto-building.yml
## 目前实现功能(部分)
1. 用 Wine 运行 EXE
2. 支持下载/安装 Wine
@@ -70,7 +73,10 @@ env WINEPREFIX=容器路径 winewine的路径 可执行文件路径
![图片.png](https://storage.deepin.org/thread/202304192212308212_图片.png)
### 龙芯应用合作社
(找时间再补图)
![图片.png](https://storage.deepin.org/thread/20230603201852396_图片.png)
## 分支介绍
### main 分支
@@ -130,6 +136,64 @@ desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与de
![image.png](https://storage.deepin.org/thread/202207190822204627_image.png)
## 更新日志
### 3.4.02023年08月11日
**※1、修复简易打包器无法打开的问题以及 Wine 识别错误的问题**
**※2、高级打包器支持多 .desktop 分别设置不同的 MimeType**
**※3、修复运行器在 Ubuntu 23 的安装问题**
**※4、高级打包器支持导出/导入填写信息**
**※5、Deepin 23 支持使用 Winetricks**
**※6、新增视频教程**
**※7、修复虚拟机工具在检测到 Qemu 磁盘但没有安装 Qemu 时无法启动的问题**
**※8、修复虚拟机工具的一些问题并调整部分设置**
**※9、虚拟机工具支持设置 UEFI 启动**
**※10、虚拟机安装工具提供 LoongArch 新世界版本**
11、高级打包器支持隐藏输入框以及使用小字体
12、打包器提供 bcm 和 dcm wine 支持
13、修复星火 wine 配置错误问题
14、打包器支持多线程打包
15、修复升级工具问题https://gitee.com/gfdgd-xi/uengine-runner/issues/I6ZRZX
16、跟进打包器 run.sh 模板
17、云沙箱新增 cloud.vdnel.cn
18、打包器新增分类 Game、System、AudioVideo
19、修复安装 Box64 时源里没有 libc6:armhf 导致无法安装的问题
![图片.png](https://storage.deepin.org/thread/2023081111212518_图片.png)
### 3.3.0.12023年07月25日
**※1、修复运行器打开主界面不进行任何操作但 CPU 占用率过高的问题**
**※2、修复运行器运行器局部无法正常移除的问题**
### 3.3.02023年07月12日
**※1、简易打包器支持选择 Wine 版本以及修改打包生成的 deb 包的架构为 all**
**※2、修改容器自动配置脚本的 Gitlink 源为 Gitee 源**
**※3、在安装更多 Wine 处安装 Wine 后主窗口 Wine 版本下拉框自动更新**
**※4、设置打包器在 Ubuntu 依旧打包 xz 格式的 deb 包**
**※5、修复 Wine 简易打包器 control 文件 Installed-Size 格式不规范的问题**
**※6、更换 Box86 源并支持安装 Box64如果为 aarch64 架构)**
**※7、新增 Wine 自建源(支持 Debian10、Deepin20**
**※8、修改 WineHQ 安装器使其支持选择国内清华大学镜像源或 WineHQ 官方源**
**※9、新增 Visual FoxPro 安装器**
**※10、新增安装局部运行库以解决部分低版本系统运行高版本 Wine 的问题且不与其他运行库和兼容层冲突**
**※11、支持调用原版的 Exagear 以及 Qemu Useri386、x86_64 运行 Wine**
12、新增自动构建https://github.com/gfdgd-xi/deep-wine-runner/actions/workflows/auto-building.yml只供尝鲜
13、新增 Wine 日构建(在“安装更多 Wine”处可以获取目前有 i386、amd64、i386+amd64、amd64+wow64 mode、aarch64
14、优化容器清理脚本
15、修复部分组件没完全换源的问题部分组件支持自动换可用源
![图片.png](https://storage.deepin.org/thread/202307121216143835_图片.png)
![图片.png](https://storage.deepin.org/thread/202307121221299140_图片.png)
### 3.2.22023年05月12日
**※1. 修改源地址(迁出 Gitlink**
**※2. 修复非 X86 架构运行器主页面虚拟机工具禁用的问题;**
3、部分组件支持选择最优源。
![图片.png](https://storage.deepin.org/thread/202305122231441391_图片.png)
### 3.2.12023年04月29日
**※1、Windows 虚拟机安装工具支持非 X86 架构;**
**※2、应用打包器可以与星火应用商店配合构建 arm/all 全架构的 Wine 包;**
@@ -579,14 +643,14 @@ Gitlinkhttps://www.gitlink.org.cn/gfdgd_xi/deep-wine-runner
## 运行库下载
| 架构 | 运行库下载 |
|-|-|
| i386 | https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/i386-runtime-for-qemu_1.0.0_all.deb |
| amd64 | https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/amd64-runtime-for-qemu_1.0.0_all.deb |
| armhf | https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/armhf-runtime-for-qemu_1.0.0_all.deb |
| arm64 | https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/arm64-runtime-for-qemu_1.0.0_all.deb |
| mips64el | https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/mips64el-runtime-for-qemu_1.0.0_all.deb |
| ppc64el | https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/ppc64el-runtime-for-qemu_1.0.0_all.deb |
| riscv64 | https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/riscv64-runtime-for-qemu_1.0.0_all.deb |
| s390x | https://code.gitlink.org.cn/gfdgd_xi/runtime-for-qemu/raw/branch/master/s390x-runtime-for-qemu_1.0.0_all.deb |
| i386 | https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/i386-runtime-for-qemu_1.0.0_all.deb |
| amd64 | https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/amd64-runtime-for-qemu_1.0.0_all.deb |
| armhf | https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/armhf-runtime-for-qemu_1.0.0_all.deb |
| arm64 | https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/arm64-runtime-for-qemu_1.0.0_all.deb |
| mips64el | https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/mips64el-runtime-for-qemu_1.0.0_all.deb |
| ppc64el | https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/ppc64el-runtime-for-qemu_1.0.0_all.deb |
| riscv64 | https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/riscv64-runtime-for-qemu_1.0.0_all.deb |
| s390x | https://jihulab.com/gfdgd-xi/qemu-runtime/-/raw/main/s390x-runtime-for-qemu_1.0.0_all.deb |
## 附:用于编译 Wine 的 Docker 容器Debian10
内安装了编译 Wine 所需要的依赖Wine 编译教程https://wiki.winehq.org/Building_Wine

View File

@@ -8,10 +8,11 @@
# 基于 Python3 的 tkinter 构建
###########################################################################################
cd `dirname $0`
which VBoxManage
if test $? == 0 ; then
VM/VirtualMachine
exit
fi
zenity --info --no-wrap --text="未安装 VirtualBox请自行安装 VirtualBox 并重新运行"
#which VBoxManage
#if test $? == 0 ; then
# VM/VirtualMachine
# exit
#fi
#zenity --info --no-wrap --text="未安装 VirtualBox请自行安装 VirtualBox 并重新运行"
#./launch.sh deepin-terminal -C "pkexec apt install virtualbox-6.1 -y && zenity --info --text=\"安装完毕,关闭此对话框和安装终端重新运行程序即可\" --no-wrap" --keep-open
VM/VirtualMachine

View File

@@ -14,13 +14,29 @@ if [[ 0 == $? ]]; then
exit
fi
# 检查是否有 QEMU
if [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
which qemu-system-x86_64
if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
if [[ -f "$HOME/.config/deepin-wine-runner/QemuSetting.json" ]]; then
echo 有设置文件,读设置文件
cd `dirname $0`
python3 ./VM/StartQemu.py
exit
fi
if [[ -f $HOME/.config/deepin-wine-runner/QEMU-EFI ]]; then
echo 使用 UEFI 启动
if [[ -f /usr/share/qemu/OVMF.fd ]]; then
qemuUEFI="--bios /usr/share/qemu/OVMF.fd"
else
if [[ -f `dirname $0`/VM/OVMF.fd ]]; then
qemuUEFI="--bios `dirname $0`/VM/OVMF.fd"
fi
fi
echo $qemuUEFI
fi
# 查看CPU个数
CpuSocketNum=`cat /proc/cpuinfo | grep "cpu cores" | uniq | wc -l`
# 查看CPU核心数
CpuCoreNum=`grep 'core id' /proc/cpuinfo | sort -u | wc -l`
# 查看逻辑CPU的个数
CpuCount=`cat /proc/cpuinfo| grep "processor"| wc -l`
@@ -29,11 +45,11 @@ if [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
use=$(echo "scale=4; $MemTotal / 3" | bc)
if [[ `arch` == "x86_64" ]]; then
echo X86 架构,使用 kvm 加速
kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139
kvm -cpu host --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI
exit
fi
echo 非 X86 架构,不使用 kvm 加速
qemu-system-x86_64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139
qemu-system-x86_64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI
exit
fi
zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用"

View File

@@ -64,13 +64,14 @@ class Ui_MainWindow(object):
self.openFile.setObjectName("openFile")
self.actionGitlink = QtWidgets.QAction(MainWindow)
self.actionGitlink.setCheckable(True)
self.actionGitlink.setChecked(True)
#self.actionGitlink.setChecked(True)
self.actionGitlink.setObjectName("actionGitlink")
self.actionGitee = QtWidgets.QAction(MainWindow)
self.actionGitee.setCheckable(True)
self.actionGitee.setObjectName("actionGitee")
self.actionGithub = QtWidgets.QAction(MainWindow)
self.actionGithub.setCheckable(True)
self.actionGithub.setChecked(True)
self.actionGithub.setObjectName("actionGithub")
self.action_IPv6 = QtWidgets.QAction(MainWindow)
self.action_IPv6.setCheckable(True)
@@ -88,9 +89,11 @@ class Ui_MainWindow(object):
self.menu.addAction(self.openFile)
self.menu.addSeparator()
self.menu.addAction(self.exitProgram)
self.menu_2.addAction(self.actionGitlink)
self.menu_2.addAction(self.actionGitee)
self.menu_2.addAction(self.actionGithub)
self.menu_2.addAction(self.actionGitlink)
self.menu_2.addAction(self.action_IPv6)
self.menu_2.addAction(self.action_2)
self.menu_2.addAction(self.action_3)

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
#############################################################################
# Makefile for building: VirtualMachine
# Generated by qmake (3.1) (Qt 5.15.8)
# Generated by qmake (3.1) (Qt 5.15.7)
# Project: VirtualMachine.pro
# Template: app
# Command: /usr/lib/qt5/bin/qmake -o Makefile VirtualMachine.pro
@@ -84,74 +84,15 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_BluezQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIdleTime.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
@@ -162,12 +103,9 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
@@ -175,53 +113,21 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioning.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioningquick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_ModemManagerQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \
@@ -279,74 +185,15 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_BluezQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIdleTime.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
@@ -357,12 +204,9 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
@@ -370,53 +214,21 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioning.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioningquick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sensors.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_ModemManagerQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \
@@ -452,74 +264,15 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_BluezQt.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KBookmarks.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIdleTime.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOCore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOFileWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOGui.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KIOWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KJobWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KNTLM.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KSyntaxHighlighting.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3danimation_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dcore_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dextras_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dinput_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquick_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_3drender_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
@@ -530,12 +283,9 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri:
@@ -543,53 +293,21 @@ Makefile: VirtualMachine.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qma
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioning.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_positioningquick.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sensors.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandclient_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_waylandcompositor_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webchannel.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webengine.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginecore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_webenginewidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xmlpatterns.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_ModemManagerQt.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_NetworkManagerQt.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_Solid.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf:
@@ -694,17 +412,17 @@ compiler_moc_header_clean:
moc_mainwindow.cpp: mainwindow.h \
moc_predefs.h \
/usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include mainwindow.h -o moc_mainwindow.cpp
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include mainwindow.h -o moc_mainwindow.cpp
moc_infoutils.cpp: infoutils.h \
moc_predefs.h \
/usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include infoutils.h -o moc_infoutils.cpp
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include infoutils.h -o moc_infoutils.cpp
moc_qemusetting.cpp: qemusetting.h \
moc_predefs.h \
/usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include qemusetting.h -o moc_qemusetting.cpp
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include qemusetting.h -o moc_qemusetting.cpp
compiler_moc_objc_header_make_all:
compiler_moc_objc_header_clean:

BIN
VM-source/OVMF.fd Normal file

Binary file not shown.

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2023-04-29T19:59:36. -->
<!-- Written by QtCreator 7.0.1, 2023-08-09T22:56:49. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@@ -37,6 +37,7 @@
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
@@ -45,23 +46,49 @@
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">2</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value>
@@ -73,127 +100,67 @@
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VirtualMachine</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">VirtualMachine.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
@@ -205,10 +172,10 @@
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">20</value>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">20</value>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -0,0 +1,214 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2023-07-12T19:05:39. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VirtualMachine</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">VirtualMachine.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">20</value>
</data>
<data>
<variable>Version</variable>
<value type="int">20</value>
</data>
</qtcreator>

View File

@@ -12,6 +12,7 @@
#include <QCoreApplication>
#include <infoutils.h>
#include "qemu.h"
#include <QProcess>
// 懒得用 QThread 了(要继承)
#include <thread>
using namespace std;
@@ -27,6 +28,37 @@ void buildvbox::CleanScreen(){
system("cls");
}
// 获取 CPU 个数
int buildvbox::GetCPUSocket(){
// 获取命令返回值
QProcess process;
process.start("bash", QStringList() << "-c" << "cat /proc/cpuinfo | grep \"cpu cores\" | uniq | wc -l");
process.waitForStarted();
process.waitForFinished();
int value = process.readAllStandardOutput().toInt();
process.close();
// 判断异常值,例如没挂载 /proc
if(value <= 0){
value = 1;
}
return value;
}
// 获取 CPU 核心数
int buildvbox::GetCPUCore(){
QProcess process;
process.start("bash", QStringList() << "-c" << "grep 'core id' /proc/cpuinfo | sort -u | wc -l");
process.waitForStarted();
process.waitForFinished();
int value = process.readAllStandardOutput().toInt();
process.close();
// 判断异常值,例如没挂载 /proc
if(value <= 0){
value = 1;
}
return value;
}
QString buildvbox::GetNet(){
QList<QNetworkInterface> netList = QNetworkInterface::allInterfaces();
foreach(QNetworkInterface net, netList){
@@ -82,7 +114,13 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
case 1:
vm.Create("Windows7_64");
break;
vm.Create("WindowsNT_64");
case 2:
vm.Create("WindowsNT_64");
break;
case 3:
vm.Create("WindowsNT_64");
vm.EnabledUEFI(true);
break;
}
vm.CreateDiskControl();
//vm.CreateDiskControl("storage_controller_2");
@@ -112,7 +150,7 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1);
}*/
vm.SetCPU(get_nprocs());
vm.SetCPU(get_nprocs(), GetCPUSocket(), GetCPUCore());
long memory = 0;
long memoryAll = 0;
long swap = 0;
@@ -146,7 +184,13 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
case 1:
vm.Create("Windows7_64");
break;
vm.Create("WindowsNT_64");
case 2:
vm.Create("WindowsNT_64");
break;
case 3:
vm.Create("WindowsNT_64");
vm.EnabledUEFI(true);
break;
}
QDir dir("/home/gfdgd_xi/Qemu/Windows/");
dir.mkpath("/home/gfdgd_xi/Qemu/Windows/");
@@ -170,7 +214,7 @@ buildvbox::buildvbox(QString isoPath, int id, int vm){
vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1);
}
vm.SetCPU(get_nprocs_conf());
vm.SetCPU(get_nprocs(), GetCPUSocket(), GetCPUCore());
long memory = 0;
long memoryAll = 0;
long swap = 0;

View File

@@ -14,6 +14,8 @@ public:
void CleanScreen();
QString GetNet();
int Download(QString url, QString path, QString fileName);
int GetCPUSocket();
int GetCPUCore();
};
#endif // BUILDVBOX_H

View File

@@ -177,6 +177,30 @@ void MainWindow::on_install_clicked()
}
break;
}
QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI");
QDir dir(QDir::homePath() + "/.config/deepin-wine-runner");
switch (ui->systemVersion->currentIndex()) {
case 3:
if(!QFile::exists("/usr/share/qemu/OVMF.fd") && !QFile::exists(QCoreApplication::applicationDirPath() + "/OVMF.fd") && ui->vmChooser->currentIndex() == 0){
if(QMessageBox::question(this, "提示", "似乎无法找到 UEFI 固件,是否继续创建虚拟机?\nQemu 固件可以在“安装 Qemu”处安装") == QMessageBox::No){
return;
}
}
if(!dir.exists()){
dir.mkpath(QDir::homePath() + "/.config/deepin-wine-runner");
}
if(!QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI")){
// 写入用于识别的空文件
file.open(QIODevice::WriteOnly);
file.write("1");
file.close();
}
break;
default:
if(ui->vmChooser->currentIndex() == 0 && QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI")){
QFile::remove(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI");
}
}
buildvbox(ui->isoPath->text(), ui->systemVersion->currentIndex(), ui->vmChooser->currentIndex());
return;
}
@@ -188,7 +212,7 @@ void MainWindow::on_getvbox_clicked()
void MainWindow::on_getQemu_clicked()
{
system(("python3 '" + QCoreApplication::applicationDirPath() + "/../RunCommandWithTerminal.py' '" + QCoreApplication::applicationDirPath() + "/../QemuSystemInstall.sh'").toLatin1());
system(("python3 '" + QCoreApplication::applicationDirPath() + "/../RunCommandWithTerminal.py' pkexec '" + QCoreApplication::applicationDirPath() + "/../QemuSystemInstall.sh'").toLatin1());
}
void MainWindow::on_vmChooser_currentIndexChanged(int index)

View File

@@ -25,7 +25,7 @@
<enum>QTabWidget::Rounded</enum>
</property>
<property name="currentIndex">
<number>2</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
@@ -86,7 +86,12 @@
</item>
<item>
<property name="text">
<string>其它 Windows 系统(不支持自动安装)</string>
<string>其它 Windows 系统(不支持自动安装,传统启动,推荐 Windows 7 及以下</string>
</property>
</item>
<item>
<property name="text">
<string>其他 Windows 系统不支持自动安装UEFI 启动,推荐 Windows 8 及以上)</string>
</property>
</item>
</widget>

View File

@@ -53,8 +53,14 @@ int qemu::BootFirst(QString bootDrive){
int qemu::SetNetBridge(QString netDriver){
return 0;
}
int qemu::SetCPU(int number){
commandOption += "-smp " + QString::number(number) + " ";
int qemu::SetCPU(int number, int cpuNum, int coreNum){
// commandOption += "-smp " + QString::number(number) + " ";
// 调整调用方法
//qDebug() << number << " " << cpuNum << " " << coreNum;
qDebug() << "Socket: " << cpuNum;
qDebug() << "Core: " << coreNum;
qDebug() << "Threads: " << number;
commandOption += "-smp " + QString::number(number) + ",sockets=" + QString::number(cpuNum) + ",cores=" + QString::number(coreNum / cpuNum) + ",threads=" + QString::number(number / cpuNum / coreNum) + " ";
return 0;
}
int qemu::SetMemory(int memory){
@@ -70,7 +76,7 @@ int qemu::SetRemoteConnectSetting(int port){
int qemu::Start(bool unShown){
qDebug() << commandOption;
if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "x86_64"){
return system(("kvm " + commandOption + " &").toLatin1());
return system(("kvm -cpu host " + commandOption + " &").toLatin1());
}
return system(("qemu-system-x86_64 -nic model=rtl8139 " + commandOption + " &").toLatin1());
}
@@ -113,3 +119,17 @@ int qemu::SetKeyboardPS2(){
int qemu::OpenUSB(){
return 0;
}
int qemu::EnabledUEFI(bool status){
if(!status){
return 0;
}
if(QFile::exists("/usr/share/qemu/OVMF.fd")){
commandOption += "--bios /usr/share/qemu/OVMF.fd ";
return 0;
}
if(QFile::exists(QCoreApplication::applicationDirPath() + "/OVMF.fd")){
commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/OVMF.fd' ";
return 0;
}
return 1;
}

View File

@@ -21,7 +21,7 @@ public:
int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0);
int BootFirst(QString bootDrive);
int SetNetBridge(QString netDriver);
int SetCPU(int number);
int SetCPU(int number, int cpuNum, int coreNum);
int SetMemory(int memory);
int SetRemote(bool setting);
int SetRemoteConnectSetting(int port=5540);
@@ -38,8 +38,9 @@ public:
int SetMousePS2();
int SetKeyboardPS2();
int OpenUSB();
int EnabledUEFI(bool status);
private:
QString commandOption;
QString commandOption = "";
};

View File

@@ -44,7 +44,7 @@ int vbox::SetNetBridge(QString netDriver){
return system(("\"" + managerPath + "\" modifyvm \"" + name +
"\" --nic1 bridged --cableconnected1 on --nictype1 82540EM --bridgeadapter1 \"" + netDriver + "\" --intnet1 brigh1 --macaddress1 auto").toLatin1());
}
int vbox::SetCPU(int number){
int vbox::SetCPU(int number, int cpuNum, int coreNum){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --cpus " + QString::number(number)).toLatin1());
}
int vbox::SetMemory(int memory){
@@ -101,3 +101,10 @@ int vbox::SetKeyboardPS2(){
int vbox::OpenUSB(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --usbohci on").toLatin1());
}
int vbox::EnabledUEFI(bool status){
if(status){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --firmware=efi").toLatin1());
}
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --firmware=bios").toLatin1());
}

View File

@@ -21,7 +21,7 @@ public:
int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0);
int BootFirst(QString bootDrive);
int SetNetBridge(QString netDriver);
int SetCPU(int number);
int SetCPU(int number, int cpuNum, int coreNum);
int SetMemory(int memory);
int SetRemote(bool setting);
int SetRemoteConnectSetting(int port=5540);
@@ -38,6 +38,7 @@ public:
int SetMousePS2();
int SetKeyboardPS2();
int OpenUSB();
int EnabledUEFI(bool status);
private:

BIN
VM/OVMF.fd Normal file

Binary file not shown.

View File

@@ -13,7 +13,7 @@ def ReadTXT(file: str):
command = "qemu-system-x86_64"
#if "--kvm" in sys.argv:
# command = "kvm"
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
homePath = os.path.expanduser('~')
try:
setting = json.loads(ReadTXT(f"{homePath}/.config/deepin-wine-runner/QemuSetting.json"))
@@ -30,4 +30,9 @@ if setting["EnableVNC"]:
option += f"-display gtk -display vnc=:{setting['VNC']} "
if setting["EnableSound"]:
option += "-soundhw all "
if os.path.exists(f"{homePath}/.config/deepin-wine-runner/QEMU-EFI"):
if os.path.exists("/usr/share/qemu/OVMF.fd"):
option += "--bios /usr/share/qemu/OVMF.fd "
elif os.path.exists(f"{programPath}/OVMF.fd"):
option += f"--bios {programPath}/OVMF.fd "
os.system(f"{command} {option}")

2
VM/VirtualMachine Normal file → Executable file
View File

@@ -2,7 +2,7 @@
import os
import subprocess
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
arch = subprocess.getoutput("arch").replace(" ", "").replace("\n", "")
arch = subprocess.getoutput("dpkg --print-architecture").replace(" ", "").replace("\n", "")
if os.path.exists(f"{programPath}/VirtualMachine-{arch}"):
os.system(f"{programPath}/VirtualMachine-{arch}")
exit()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

18
WineLib/install.sh Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/bash
CURRENT_DIR=$(cd $(dirname $0); pwd)
cd $CURRENT_DIR
if [[ -f $CURRENT_DIR/usr/ ]]; then
echo 运行库已安装,按回车键退出
read
exit
fi
aria2c -x 16 -s 16 -d /tmp https://jihulab.com/gfdgd-xi/bwrapruntime/-/raw/main/library.tar.xz
if [[ $? != 0 ]]; then
echo 安装包下载失败!按回车键退出
read
fi
chmod 777 -Rv .
tar -xvf /tmp/library.tar.xz
rm -vf /tmp/library.tar.xz
echo 安装完成!按回车键退出
read

14
WineLib/remove.sh Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
CURRENT_DIR=$(cd $(dirname $0); pwd)
cd $CURRENT_DIR
if [[ ! -d $CURRENT_DIR/usr/ ]]; then
echo 运行库未安装,按回车键退出
read
exit
fi
rm -rfv lib
rm -rfv lib64
rm -rfv usr
chmod 777 -Rv .
echo 删除完成!按回车键退出
read

27
WineLib/run-more.sh Executable file
View File

@@ -0,0 +1,27 @@
#!/bin/bash
CURRENT_DIR=$1
if [[ ! -d "$CURRENT_DIR/usr" ]]; then
zenity --info --text=未安装运行库,无法运行 --no-wrap
exit
fi
if [[ ! -d "$CURRENT_DIR/usr/lib64" ]]; then
bwrap --dev-bind / / \
--ro-bind "$CURRENT_DIR/usr/lib" /lib \
--ro-bind "$CURRENT_DIR/usr" /usr \
--ro-bind /usr/share /usr/share \
--ro-bind /usr/bin /usr/bin \
--ro-bind /usr/sbin /usr/sbin \
-- "$@"
exit
fi
if [[ ! -f /lib64 ]] && [[ ! -d /lib64 ]] && [[ ! -L /lib64 ]]; then
pkexec ln -s /usr/lib64 /lib64
fi
bwrap --dev-bind / / \
--ro-bind "$CURRENT_DIR/usr/lib" /lib \
--ro-bind "$CURRENT_DIR/usr/lib64" /lib \
--ro-bind "$CURRENT_DIR/usr" /usr \
--ro-bind /usr/share /usr/share \
--ro-bind /usr/bin /usr/bin \
--ro-bind /usr/sbin /usr/sbin \
-- "$@"

86
WineLib/run.sh Executable file
View File

@@ -0,0 +1,86 @@
#!/bin/bash
CURRENT_DIR=$(cd $(dirname $0); pwd)
if [[ ! -d "$CURRENT_DIR/usr" ]]; then
zenity --info --text=未安装运行库,无法运行 --no-wrap
exit
fi
systemNeedCommand=""
for libr in `ls /usr/lib`
do
if [[ -f /usr/lib/$libr/libc.so.6 ]]; then
if [[ ! -f "$CURRENT_DIR/usr/lib/$libr/libc.so.6" ]]; then
echo $libr
systemNeedCommand="$systemNeedCommand --ro-bind /usr/lib/$libr/ /usr/lib/$libr/ "
mkdir -p "$CURRENT_DIR/usr/lib/$libr"
fi
fi
done
for libr in `ls /usr/lib/ld*.so*`
do
if [[ -f $libr ]]; then
if [[ ! -f "$CURRENT_DIR/$libr" ]]; then
systemNeedCommand="$systemNeedCommand --ro-bind $libr $libr "
touch "$CURRENT_DIR/$libr"
else
if [[ ! -s "$CURRENT_DIR/$libr" ]]; then
systemNeedCommand="$systemNeedCommand --ro-bind $libr $libr "
fi
fi
fi
done
if [[ -d /usr/lib64 ]] && [[ ! -d "$CURRENT_DIR/usr/lib64" ]]; then
mkdir -p "$CURRENT_DIR/usr/lib64"
fi
if [[ -d /usr/lib64/ ]]; then
for libr in `ls /usr/lib64/ld*.so*`
do
if [[ -f $libr ]]; then
if [[ ! -f "$CURRENT_DIR/$libr" ]]; then
systemNeedCommand="$systemNeedCommand --ro-bind $libr $libr "
touch "$CURRENT_DIR/$libr"
else
if [[ ! -s "$CURRENT_DIR/$libr" ]]; then
systemNeedCommand="$systemNeedCommand --ro-bind $libr $libr "
fi
fi
fi
done
fi
if [[ ! -d "$CURRENT_DIR/usr/lib/locale" ]]; then
systemNeedCommand="$systemNeedCommand --ro-bind /usr/lib/locale /usr/lib/locale "
fi
if [[ ! -d "$CURRENT_DIR/usr/lib64" ]]; then
bwrap --dev-bind / / \
--bind "$CURRENT_DIR/usr/lib" /lib \
--bind "$CURRENT_DIR/usr" /usr \
--ro-bind /usr/share /usr/share \
--ro-bind /usr/bin /usr/bin \
--ro-bind /usr/sbin /usr/sbin \
$systemNeedCommand \
-- "$@"
exit
fi
if [[ ! -f /lib64 ]] && [[ ! -d /lib64 ]] && [[ ! -L /lib64 ]]; then
pkexec ln -s /usr/lib64 /lib64
fi
if [[ -L /lib64 ]] || [[ -d /lib64 ]] || [[ -f /lib64 ]];then
bwrap --dev-bind / / \
--bind "$CURRENT_DIR/usr/lib" /lib \
--bind "$CURRENT_DIR/usr/lib64" /lib \
--bind "$CURRENT_DIR/usr" /usr \
--ro-bind /usr/share /usr/share \
--ro-bind /usr/bin /usr/bin \
--ro-bind /usr/sbin /usr/sbin \
$systemNeedCommand \
-- "$@"
exit
fi
bwrap --dev-bind / / \
--bind "$CURRENT_DIR/usr/lib" /lib \
--bind "$CURRENT_DIR/usr" /usr \
--ro-bind /usr/share /usr/share \
--ro-bind /usr/bin /usr/bin \
--ro-bind /usr/sbin /usr/sbin \
$systemNeedCommand \
-- "$@"

View File

@@ -1,6 +1,6 @@
#!/bin/sh
if [ $WINE = "" ]; then
WINE_CMD="deepin-wine5"
WINE_CMD="deepin-wine6-stable"
else
WINE_CMD=$WINE
fi
@@ -55,7 +55,6 @@ clean_common_temp()
#remove_file "$BottleBase/users/${USER}"
purge_dir "$BottleBase/users/Public/Temp"
remove_file "$BottleBase/../PACKAGE_VERSION"
remove_file "$BottleBase/../update.policy"
purge_dir "$BottleBase/deepin"
}

View File

@@ -1,30 +1,19 @@
Package: spark-deepin-wine-runner
Version: 3.2.1
Version: 3.4.0
Maintainer: gfdgd xi <3025613752@qq.com>
Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner
Architecture: amd64
Architecture: all
Severity: serious
Certainty: possible
Check: binaries
Type: binary, udeb
Priority: optional
Depends: python3, python3-pil, libc6, python3-pil.imagetk, python3-pyquery, aria2, curl, unrar | unrar-free , unzip, python3-requests, python3-pyqt5, python3-psutil, deepin-terminal | mate-terminal | gnome-terminal | xfce4-terminal, python3-dbus, python3-pip, p7zip-full, sudo, python3-pyperclip
Recommends: winbind, wimtools, python3-pyqt5.qtwebengine, qemu-user, binfmt-support, qemu-user-static
Depends: python3, python3-pil, libc6, python3-pil.imagetk, python3-pyquery, aria2, curl, unrar | unrar-free , unzip, python3-requests, python3-pyqt5, python3-psutil, deepin-terminal | mate-terminal | gnome-terminal | xfce4-terminal, python3-dbus, python3-pip, p7zip-full, sudo, python3-pyperclip, bubblewrap, zenity
Recommends: winbind, wimtools, python3-pyqt5.qtwebengine, binfmt-support, libc6:i386, libc6:armhf
Section: utils
Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52, spark-deepin-wine-runner
Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52, spark-deepin-wine-runner
Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Provides: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Installed-Size: 76512
Description: gfdgd xi 制作的 wine 运行器
3.2.1 更新内容:
※1、Windows 虚拟机安装工具支持非 X86 架构;
※2、应用打包器可以与星火应用商店配合构建 arm/all 全架构的 Wine 包;
※3、Windows 虚拟机安装工具支持调用 Qemu
※4、新增 Qemu User 运行 Wine 的帮助入口;
※5、修复 Windows 虚拟机的自动配置镜像缺少 aria2c.exe 的故障;
※6、支持在更新程序版本时自动关闭程序进程
7、运行器和打包器支持调用 spark-wine8
8、修改作者信息
9、新增安装包构建时间
10、优化 Wine 运行器更新策略。
更新时间2023年04月29日
作者gfdgd xi
Description: Wine运行器是一个能让Linux用户更加方便地运行Windows应用的程序内置了对Wine图形化的支持、各种Wine工具、自制的Wine程序打包器和运行库安装工具等。
它同时还内置了基于Qemu/VirtualBox制作的、专供小白使用的Windows虚拟机安装工具可以做到只需下载系统镜像并点击安装即可无需考虑虚拟机的安装、创建、分区等操作也能在非 X86 架构安装 X86 架构的 Windows 操作系统(但是效率较低)。

View File

@@ -9,10 +9,10 @@
#################################################################################################################
# 非强制性的必应组件,所以成功不成功都行
# 程序版本号
version=3.2.1
version=3.4.0
echo 安装组件
python3 -m pip install --upgrade pynput --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple > /dev/null 2>&1 | true
python3 -m pip install --upgrade xpinyin --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple > /dev/null 2>&1 | true
python3 -m pip install --upgrade pynput --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple --break-system-packages > /dev/null 2>&1 | true
python3 -m pip install --upgrade xpinyin --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple --break-system-packages > /dev/null 2>&1 | true
echo 执行完成
echo 移除旧组件
if [ -d /opt/apps/deepin-wine-runner/arm-package ]; then
@@ -51,8 +51,8 @@ if [ `arch` != "x86_64" ]; then
rm -rf /opt/apps/deepin-wine-runner/InstallNewWineHQ.sh
fi
# 处理 VM 工具
vmPath=/opt/apps/deepin-wine-runner/VM/VirtualMachine-`arch`
echo 当前架构为:`arch`
vmPath=/opt/apps/deepin-wine-runner/VM/VirtualMachine-`dpkg --print-architecture`
echo 当前架构为:`dpkg --print-architecture`
if [ -f $vmPath ]; then
echo 虚拟机工具有该架构的预编译文件
# 移除辅助文件
@@ -65,19 +65,24 @@ else
rm -f /opt/apps/deepin-wine-runner/VM/VirtualMachine-*
fi
echo 处理完成!
# 到时候切换 gpg 源会方便很多
if [ -r /etc/apt/sources.list.d/better-dde.list ]; then
if [ -d /usr/share/deepin-installer ]; then
# 用于修复 Deepin Community Live CD Install 版签名过期的问题
wget -P /tmp/gfdgd-xi-sources https://code.gitlink.org.cn/gfdgd_xi/gfdgd-xi-apt-mirrors/raw/branch/master/gpg.asc
rm -rfv /etc/apt/trusted.gpg.d/gfdgdxi-list.gpg | true
cp -v /tmp/gfdgd-xi-sources/gpg.asc.gpg /etc/apt/trusted.gpg.d/gfdgdxi-list.gpg
# 用于修复 2022.11.25 Better DDE 导致的 Deepin Community Live CD Install 版问题
# 移除 Better DDE 源
rm -rfv /etc/apt/sources.list.d/better-dde.list
apt update > /dev/null 2>&1 | true
fi
# 修复 3.3.0.1 Box86 源挂了的问题
if [ -f /etc/apt/sources.list.d/box86.list ]; then
bash -c "echo deb http://seafile.jyx2048.com:2345/spark-deepin-wine-runner/data/box86-debs/debian ./ > /etc/apt/sources.list.d/box86.list"
fi
# Gitlink 源挂了
# 到时候切换 gpg 源会方便很多
#if [ -r /etc/apt/sources.list.d/better-dde.list ]; then
# if [ -d /usr/share/deepin-installer ]; then
# # 用于修复 Deepin Community Live CD Install 版签名过期的问题
# wget -P /tmp/gfdgd-xi-sources https://code.gitlink.org.cn/gfdgd_xi/gfdgd-xi-apt-mirrors/raw/branch/master/gpg.asc
# rm -rfv /etc/apt/trusted.gpg.d/gfdgdxi-list.gpg | true
# cp -v /tmp/gfdgd-xi-sources/gpg.asc.gpg /etc/apt/trusted.gpg.d/gfdgdxi-list.gpg
# # 用于修复 2022.11.25 Better DDE 导致的 Deepin Community Live CD Install 版问题
# # 移除 Better DDE 源
# rm -rfv /etc/apt/sources.list.d/better-dde.list
# apt update > /dev/null 2>&1 | true
# fi
#fi
# 设置目录权限,让用户可读可写,方便后续删除组件
chmod 777 -R /opt/apps/deepin-wine-runner
# 向服务器返回安装数加1不显示内容且忽略错误

View File

@@ -1 +0,0 @@
.sass-cache/

View File

@@ -1,19 +0,0 @@
{
"esnext": true,
"indent": 2,
"maxlen": 80,
"freeze": true,
"camelcase": true,
"unused": true,
"eqnull": true,
"proto": true,
"supernew": true,
"noyield": true,
"evil": true,
"node": true,
"boss": true,
"expr": true,
"loopfunc": true,
"white": true,
"maxdepth": 4
}

View File

@@ -1,33 +0,0 @@
# Contributing
Changes and improvements are more than welcome! Feel free to fork and open a pull request.
Please follow the house rules to have a bigger chance of your contribution being merged.
## House rules
### How to make changes
- To make changes, create a new branch based on `master` (do not create one from `gh-pages` unless strictly necessary) and make them there, then create a Pull Request to master.
`gh-pages` is different from master in that it contains sharing features, analytics and other things that have no direct bearing with the game. `master` is the "pure" version of the game.
- If you want to modify the CSS, please edit the SCSS files present in `style/`: `main.scss` and others. Don't edit the `main.css`, because it's supposed to be generated.
In order to compile your SCSS modifications, you need to use the `sass` gem (install it by running `gem install sass` once Ruby is installed).
To run SASS, simply use the following command:
`sass --unix-newlines --watch style/main.scss`
SASS will automatically recompile your css when changed.
- `Rakefile` contains some tasks that help during development. Feel free to add useful tasks if needed.
- Please use 2-space indentation when editing the JavaScript. A `.jshintrc` file is present, which will help your code to follow the guidelines if you install and run `jshint`.
- Please test your modification thoroughly before submitting your Pull Request.
### Changes that might not be accepted
We have to be conservative with the core game. This means that some modifications won't be merged, or will have to be evaluated carefully before being merged:
- Undo/redo features
- Save/reload features
- Changes to how the tiles look or their contents
- Changes to the layout
- Changes to the grid size
### Changes that are welcome
- Bug fixes
- Compatibility improvements
- "Under the hood" enhancements
- Small changes that don't have an impact on the core gameplay

View File

@@ -1,21 +0,0 @@
The MIT License (MIT)
Copyright (c) 2014 Gabriele Cirulli
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -1,38 +0,0 @@
# 2048
A small clone of [1024](https://play.google.com/store/apps/details?id=com.veewo.a1024), based on [Saming's 2048](http://saming.fr/p/2048/) (also a clone).
Made just for fun. [Play it here!](http://gabrielecirulli.github.io/2048/)
The official app can also be found on the [Play Store](https://play.google.com/store/apps/details?id=com.gabrielecirulli.app2048) and [App Store!](https://itunes.apple.com/us/app/2048-by-gabriele-cirulli/id868076805)
### Contributions
[Anna Harren](https://github.com/iirelu/) and [sigod](https://github.com/sigod) are maintainers for this repository.
Other notable contributors:
- [TimPetricola](https://github.com/TimPetricola) added best score storage
- [chrisprice](https://github.com/chrisprice) added custom code for swipe handling on mobile
- [marcingajda](https://github.com/marcingajda) made swipes work on Windows Phone
- [mgarciaisaia](https://github.com/mgarciaisaia) added support for Android 2.3
Many thanks to [rayhaanj](https://github.com/rayhaanj), [Mechazawa](https://github.com/Mechazawa), [grant](https://github.com/grant), [remram44](https://github.com/remram44) and [ghoullier](https://github.com/ghoullier) for the many other good contributions.
### Screenshot
<p align="center">
<img src="https://cloud.githubusercontent.com/assets/1175750/8614312/280e5dc2-26f1-11e5-9f1f-5891c3ca8b26.png" alt="Screenshot"/>
</p>
That screenshot is fake, by the way. I never reached 2048 :smile:
## Contributing
Changes and improvements are more than welcome! Feel free to fork and open a pull request. Please make your changes in a specific branch and request to pull into `master`! If you can, please make sure the game fully works before sending the PR, as that will help speed up the process.
You can find the same information in the [contributing guide.](https://github.com/gabrielecirulli/2048/blob/master/CONTRIBUTING.md)
## License
2048 is licensed under the [MIT license.](https://github.com/gabrielecirulli/2048/blob/master/LICENSE.txt)
## Donations
I made this in my spare time, and it's hosted on GitHub (which means I don't have any hosting costs), but if you enjoyed the game and feel like buying me coffee, you can donate at my BTC address: `1Ec6onfsQmoP9kkL3zkpB6c5sA4PVcXU2i`. Thank you very much!

View File

@@ -1,11 +0,0 @@
require "date"
namespace :appcache do
desc "update the date in the appcache file (in the gh-pages branch)"
task :update do
appcache = File.read("cache.appcache")
updated = "# Updated: #{DateTime.now}"
File.write("cache.appcache", appcache.sub(/^# Updated:.*$/, updated))
end
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -1,99 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>2048</title>
<link href="style/main.css" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="favicon.ico">
<link rel="apple-touch-icon" href="meta/apple-touch-icon.png">
<link rel="apple-touch-startup-image" href="meta/apple-touch-startup-image-640x1096.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)"> <!-- iPhone 5+ -->
<link rel="apple-touch-startup-image" href="meta/apple-touch-startup-image-640x920.png" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)"> <!-- iPhone, retina -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1, user-scalable=no, minimal-ui">
</head>
<body>
<div class="container">
<div class="heading">
<h1 class="title">2048</h1>
<div class="scores-container">
<div class="score-container">0</div>
<div class="best-container">0</div>
</div>
</div>
<div class="above-game">
<p class="game-intro">Join the numbers and get to the <strong>2048 tile!</strong></p>
<a class="restart-button">New Game</a>
</div>
<div class="game-container">
<div class="game-message">
<p></p>
<div class="lower">
<a class="keep-playing-button">Keep going</a>
<a class="retry-button">Try again</a>
</div>
</div>
<div class="grid-container">
<div class="grid-row">
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
</div>
<div class="grid-row">
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
</div>
<div class="grid-row">
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
</div>
<div class="grid-row">
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
<div class="grid-cell"></div>
</div>
</div>
<div class="tile-container">
</div>
</div>
<p class="game-explanation">
<strong class="important">How to play:</strong> Use your <strong>arrow keys</strong> to move the tiles. When two tiles with the same number touch, they <strong>merge into one!</strong>
</p>
<hr>
<p>
<strong class="important">Note:</strong> This site is the official version of 2048. You can play it on your phone via <a href="http://git.io/2048">http://git.io/2048.</a> All other apps or sites are derivatives or fakes, and should be used with caution.
</p>
<hr>
<p>
Created by <a href="http://gabrielecirulli.com" target="_blank">Gabriele Cirulli.</a> Based on <a href="https://itunes.apple.com/us/app/1024!/id823499224" target="_blank">1024 by Veewo Studio</a> and conceptually similar to <a href="http://asherv.com/threes/" target="_blank">Threes by Asher Vollmer.</a>
</p>
</div>
<script src="js/bind_polyfill.js"></script>
<script src="js/classlist_polyfill.js"></script>
<script src="js/animframe_polyfill.js"></script>
<script src="js/keyboard_input_manager.js"></script>
<script src="js/html_actuator.js"></script>
<script src="js/grid.js"></script>
<script src="js/tile.js"></script>
<script src="js/local_storage_manager.js"></script>
<script src="js/game_manager.js"></script>
<script src="js/application.js"></script>
</body>
</html>

View File

@@ -1,28 +0,0 @@
(function () {
var lastTime = 0;
var vendors = ['webkit', 'moz'];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||
window[vendors[x] + 'CancelRequestAnimationFrame'];
}
if (!window.requestAnimationFrame) {
window.requestAnimationFrame = function (callback) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function () {
callback(currTime + timeToCall);
},
timeToCall);
lastTime = currTime + timeToCall;
return id;
};
}
if (!window.cancelAnimationFrame) {
window.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
}
}());

View File

@@ -1,4 +0,0 @@
// Wait till the browser is ready to render the game (avoids glitches)
window.requestAnimationFrame(function () {
new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager);
});

View File

@@ -1,9 +0,0 @@
Function.prototype.bind = Function.prototype.bind || function (target) {
var self = this;
return function (args) {
if (!(args instanceof Array)) {
args = [args];
}
self.apply(target, args);
};
};

View File

@@ -1,71 +0,0 @@
(function () {
if (typeof window.Element === "undefined" ||
"classList" in document.documentElement) {
return;
}
var prototype = Array.prototype,
push = prototype.push,
splice = prototype.splice,
join = prototype.join;
function DOMTokenList(el) {
this.el = el;
// The className needs to be trimmed and split on whitespace
// to retrieve a list of classes.
var classes = el.className.replace(/^\s+|\s+$/g, '').split(/\s+/);
for (var i = 0; i < classes.length; i++) {
push.call(this, classes[i]);
}
}
DOMTokenList.prototype = {
add: function (token) {
if (this.contains(token)) return;
push.call(this, token);
this.el.className = this.toString();
},
contains: function (token) {
return this.el.className.indexOf(token) != -1;
},
item: function (index) {
return this[index] || null;
},
remove: function (token) {
if (!this.contains(token)) return;
for (var i = 0; i < this.length; i++) {
if (this[i] == token) break;
}
splice.call(this, i, 1);
this.el.className = this.toString();
},
toString: function () {
return join.call(this, ' ');
},
toggle: function (token) {
if (!this.contains(token)) {
this.add(token);
} else {
this.remove(token);
}
return this.contains(token);
}
};
window.DOMTokenList = DOMTokenList;
function defineElementGetter(obj, prop, getter) {
if (Object.defineProperty) {
Object.defineProperty(obj, prop, {
get: getter
});
} else {
obj.__defineGetter__(prop, getter);
}
}
defineElementGetter(HTMLElement.prototype, 'classList', function () {
return new DOMTokenList(this);
});
})();

View File

@@ -1,272 +0,0 @@
function GameManager(size, InputManager, Actuator, StorageManager) {
this.size = size; // Size of the grid
this.inputManager = new InputManager;
this.storageManager = new StorageManager;
this.actuator = new Actuator;
this.startTiles = 2;
this.inputManager.on("move", this.move.bind(this));
this.inputManager.on("restart", this.restart.bind(this));
this.inputManager.on("keepPlaying", this.keepPlaying.bind(this));
this.setup();
}
// Restart the game
GameManager.prototype.restart = function () {
this.storageManager.clearGameState();
this.actuator.continueGame(); // Clear the game won/lost message
this.setup();
};
// Keep playing after winning (allows going over 2048)
GameManager.prototype.keepPlaying = function () {
this.keepPlaying = true;
this.actuator.continueGame(); // Clear the game won/lost message
};
// Return true if the game is lost, or has won and the user hasn't kept playing
GameManager.prototype.isGameTerminated = function () {
return this.over || (this.won && !this.keepPlaying);
};
// Set up the game
GameManager.prototype.setup = function () {
var previousState = this.storageManager.getGameState();
// Reload the game from a previous game if present
if (previousState) {
this.grid = new Grid(previousState.grid.size,
previousState.grid.cells); // Reload grid
this.score = previousState.score;
this.over = previousState.over;
this.won = previousState.won;
this.keepPlaying = previousState.keepPlaying;
} else {
this.grid = new Grid(this.size);
this.score = 0;
this.over = false;
this.won = false;
this.keepPlaying = false;
// Add the initial tiles
this.addStartTiles();
}
// Update the actuator
this.actuate();
};
// Set up the initial tiles to start the game with
GameManager.prototype.addStartTiles = function () {
for (var i = 0; i < this.startTiles; i++) {
this.addRandomTile();
}
};
// Adds a tile in a random position
GameManager.prototype.addRandomTile = function () {
if (this.grid.cellsAvailable()) {
var value = Math.random() < 0.9 ? 2 : 4;
var tile = new Tile(this.grid.randomAvailableCell(), value);
this.grid.insertTile(tile);
}
};
// Sends the updated grid to the actuator
GameManager.prototype.actuate = function () {
if (this.storageManager.getBestScore() < this.score) {
this.storageManager.setBestScore(this.score);
}
// Clear the state when the game is over (game over only, not win)
if (this.over) {
this.storageManager.clearGameState();
} else {
this.storageManager.setGameState(this.serialize());
}
this.actuator.actuate(this.grid, {
score: this.score,
over: this.over,
won: this.won,
bestScore: this.storageManager.getBestScore(),
terminated: this.isGameTerminated()
});
};
// Represent the current game as an object
GameManager.prototype.serialize = function () {
return {
grid: this.grid.serialize(),
score: this.score,
over: this.over,
won: this.won,
keepPlaying: this.keepPlaying
};
};
// Save all tile positions and remove merger info
GameManager.prototype.prepareTiles = function () {
this.grid.eachCell(function (x, y, tile) {
if (tile) {
tile.mergedFrom = null;
tile.savePosition();
}
});
};
// Move a tile and its representation
GameManager.prototype.moveTile = function (tile, cell) {
this.grid.cells[tile.x][tile.y] = null;
this.grid.cells[cell.x][cell.y] = tile;
tile.updatePosition(cell);
};
// Move tiles on the grid in the specified direction
GameManager.prototype.move = function (direction) {
// 0: up, 1: right, 2: down, 3: left
var self = this;
if (this.isGameTerminated()) return; // Don't do anything if the game's over
var cell, tile;
var vector = this.getVector(direction);
var traversals = this.buildTraversals(vector);
var moved = false;
// Save the current tile positions and remove merger information
this.prepareTiles();
// Traverse the grid in the right direction and move tiles
traversals.x.forEach(function (x) {
traversals.y.forEach(function (y) {
cell = { x: x, y: y };
tile = self.grid.cellContent(cell);
if (tile) {
var positions = self.findFarthestPosition(cell, vector);
var next = self.grid.cellContent(positions.next);
// Only one merger per row traversal?
if (next && next.value === tile.value && !next.mergedFrom) {
var merged = new Tile(positions.next, tile.value * 2);
merged.mergedFrom = [tile, next];
self.grid.insertTile(merged);
self.grid.removeTile(tile);
// Converge the two tiles' positions
tile.updatePosition(positions.next);
// Update the score
self.score += merged.value;
// The mighty 2048 tile
if (merged.value === 2048) self.won = true;
} else {
self.moveTile(tile, positions.farthest);
}
if (!self.positionsEqual(cell, tile)) {
moved = true; // The tile moved from its original cell!
}
}
});
});
if (moved) {
this.addRandomTile();
if (!this.movesAvailable()) {
this.over = true; // Game over!
}
this.actuate();
}
};
// Get the vector representing the chosen direction
GameManager.prototype.getVector = function (direction) {
// Vectors representing tile movement
var map = {
0: { x: 0, y: -1 }, // Up
1: { x: 1, y: 0 }, // Right
2: { x: 0, y: 1 }, // Down
3: { x: -1, y: 0 } // Left
};
return map[direction];
};
// Build a list of positions to traverse in the right order
GameManager.prototype.buildTraversals = function (vector) {
var traversals = { x: [], y: [] };
for (var pos = 0; pos < this.size; pos++) {
traversals.x.push(pos);
traversals.y.push(pos);
}
// Always traverse from the farthest cell in the chosen direction
if (vector.x === 1) traversals.x = traversals.x.reverse();
if (vector.y === 1) traversals.y = traversals.y.reverse();
return traversals;
};
GameManager.prototype.findFarthestPosition = function (cell, vector) {
var previous;
// Progress towards the vector direction until an obstacle is found
do {
previous = cell;
cell = { x: previous.x + vector.x, y: previous.y + vector.y };
} while (this.grid.withinBounds(cell) &&
this.grid.cellAvailable(cell));
return {
farthest: previous,
next: cell // Used to check if a merge is required
};
};
GameManager.prototype.movesAvailable = function () {
return this.grid.cellsAvailable() || this.tileMatchesAvailable();
};
// Check for available matches between tiles (more expensive check)
GameManager.prototype.tileMatchesAvailable = function () {
var self = this;
var tile;
for (var x = 0; x < this.size; x++) {
for (var y = 0; y < this.size; y++) {
tile = this.grid.cellContent({ x: x, y: y });
if (tile) {
for (var direction = 0; direction < 4; direction++) {
var vector = self.getVector(direction);
var cell = { x: x + vector.x, y: y + vector.y };
var other = self.grid.cellContent(cell);
if (other && other.value === tile.value) {
return true; // These two tiles can be merged
}
}
}
}
}
return false;
};
GameManager.prototype.positionsEqual = function (first, second) {
return first.x === second.x && first.y === second.y;
};

View File

@@ -1,117 +0,0 @@
function Grid(size, previousState) {
this.size = size;
this.cells = previousState ? this.fromState(previousState) : this.empty();
}
// Build a grid of the specified size
Grid.prototype.empty = function () {
var cells = [];
for (var x = 0; x < this.size; x++) {
var row = cells[x] = [];
for (var y = 0; y < this.size; y++) {
row.push(null);
}
}
return cells;
};
Grid.prototype.fromState = function (state) {
var cells = [];
for (var x = 0; x < this.size; x++) {
var row = cells[x] = [];
for (var y = 0; y < this.size; y++) {
var tile = state[x][y];
row.push(tile ? new Tile(tile.position, tile.value) : null);
}
}
return cells;
};
// Find the first available random position
Grid.prototype.randomAvailableCell = function () {
var cells = this.availableCells();
if (cells.length) {
return cells[Math.floor(Math.random() * cells.length)];
}
};
Grid.prototype.availableCells = function () {
var cells = [];
this.eachCell(function (x, y, tile) {
if (!tile) {
cells.push({ x: x, y: y });
}
});
return cells;
};
// Call callback for every cell
Grid.prototype.eachCell = function (callback) {
for (var x = 0; x < this.size; x++) {
for (var y = 0; y < this.size; y++) {
callback(x, y, this.cells[x][y]);
}
}
};
// Check if there are any cells available
Grid.prototype.cellsAvailable = function () {
return !!this.availableCells().length;
};
// Check if the specified cell is taken
Grid.prototype.cellAvailable = function (cell) {
return !this.cellOccupied(cell);
};
Grid.prototype.cellOccupied = function (cell) {
return !!this.cellContent(cell);
};
Grid.prototype.cellContent = function (cell) {
if (this.withinBounds(cell)) {
return this.cells[cell.x][cell.y];
} else {
return null;
}
};
// Inserts a tile at its position
Grid.prototype.insertTile = function (tile) {
this.cells[tile.x][tile.y] = tile;
};
Grid.prototype.removeTile = function (tile) {
this.cells[tile.x][tile.y] = null;
};
Grid.prototype.withinBounds = function (position) {
return position.x >= 0 && position.x < this.size &&
position.y >= 0 && position.y < this.size;
};
Grid.prototype.serialize = function () {
var cellState = [];
for (var x = 0; x < this.size; x++) {
var row = cellState[x] = [];
for (var y = 0; y < this.size; y++) {
row.push(this.cells[x][y] ? this.cells[x][y].serialize() : null);
}
}
return {
size: this.size,
cells: cellState
};
};

View File

@@ -1,139 +0,0 @@
function HTMLActuator() {
this.tileContainer = document.querySelector(".tile-container");
this.scoreContainer = document.querySelector(".score-container");
this.bestContainer = document.querySelector(".best-container");
this.messageContainer = document.querySelector(".game-message");
this.score = 0;
}
HTMLActuator.prototype.actuate = function (grid, metadata) {
var self = this;
window.requestAnimationFrame(function () {
self.clearContainer(self.tileContainer);
grid.cells.forEach(function (column) {
column.forEach(function (cell) {
if (cell) {
self.addTile(cell);
}
});
});
self.updateScore(metadata.score);
self.updateBestScore(metadata.bestScore);
if (metadata.terminated) {
if (metadata.over) {
self.message(false); // You lose
} else if (metadata.won) {
self.message(true); // You win!
}
}
});
};
// Continues the game (both restart and keep playing)
HTMLActuator.prototype.continueGame = function () {
this.clearMessage();
};
HTMLActuator.prototype.clearContainer = function (container) {
while (container.firstChild) {
container.removeChild(container.firstChild);
}
};
HTMLActuator.prototype.addTile = function (tile) {
var self = this;
var wrapper = document.createElement("div");
var inner = document.createElement("div");
var position = tile.previousPosition || { x: tile.x, y: tile.y };
var positionClass = this.positionClass(position);
// We can't use classlist because it somehow glitches when replacing classes
var classes = ["tile", "tile-" + tile.value, positionClass];
if (tile.value > 2048) classes.push("tile-super");
this.applyClasses(wrapper, classes);
inner.classList.add("tile-inner");
inner.textContent = tile.value;
if (tile.previousPosition) {
// Make sure that the tile gets rendered in the previous position first
window.requestAnimationFrame(function () {
classes[2] = self.positionClass({ x: tile.x, y: tile.y });
self.applyClasses(wrapper, classes); // Update the position
});
} else if (tile.mergedFrom) {
classes.push("tile-merged");
this.applyClasses(wrapper, classes);
// Render the tiles that merged
tile.mergedFrom.forEach(function (merged) {
self.addTile(merged);
});
} else {
classes.push("tile-new");
this.applyClasses(wrapper, classes);
}
// Add the inner part of the tile to the wrapper
wrapper.appendChild(inner);
// Put the tile on the board
this.tileContainer.appendChild(wrapper);
};
HTMLActuator.prototype.applyClasses = function (element, classes) {
element.setAttribute("class", classes.join(" "));
};
HTMLActuator.prototype.normalizePosition = function (position) {
return { x: position.x + 1, y: position.y + 1 };
};
HTMLActuator.prototype.positionClass = function (position) {
position = this.normalizePosition(position);
return "tile-position-" + position.x + "-" + position.y;
};
HTMLActuator.prototype.updateScore = function (score) {
this.clearContainer(this.scoreContainer);
var difference = score - this.score;
this.score = score;
this.scoreContainer.textContent = this.score;
if (difference > 0) {
var addition = document.createElement("div");
addition.classList.add("score-addition");
addition.textContent = "+" + difference;
this.scoreContainer.appendChild(addition);
}
};
HTMLActuator.prototype.updateBestScore = function (bestScore) {
this.bestContainer.textContent = bestScore;
};
HTMLActuator.prototype.message = function (won) {
var type = won ? "game-won" : "game-over";
var message = won ? "You win!" : "Game over!";
this.messageContainer.classList.add(type);
this.messageContainer.getElementsByTagName("p")[0].textContent = message;
};
HTMLActuator.prototype.clearMessage = function () {
// IE only takes one value to remove at a time.
this.messageContainer.classList.remove("game-won");
this.messageContainer.classList.remove("game-over");
};

View File

@@ -1,144 +0,0 @@
function KeyboardInputManager() {
this.events = {};
if (window.navigator.msPointerEnabled) {
//Internet Explorer 10 style
this.eventTouchstart = "MSPointerDown";
this.eventTouchmove = "MSPointerMove";
this.eventTouchend = "MSPointerUp";
} else {
this.eventTouchstart = "touchstart";
this.eventTouchmove = "touchmove";
this.eventTouchend = "touchend";
}
this.listen();
}
KeyboardInputManager.prototype.on = function (event, callback) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(callback);
};
KeyboardInputManager.prototype.emit = function (event, data) {
var callbacks = this.events[event];
if (callbacks) {
callbacks.forEach(function (callback) {
callback(data);
});
}
};
KeyboardInputManager.prototype.listen = function () {
var self = this;
var map = {
38: 0, // Up
39: 1, // Right
40: 2, // Down
37: 3, // Left
75: 0, // Vim up
76: 1, // Vim right
74: 2, // Vim down
72: 3, // Vim left
87: 0, // W
68: 1, // D
83: 2, // S
65: 3 // A
};
// Respond to direction keys
document.addEventListener("keydown", function (event) {
var modifiers = event.altKey || event.ctrlKey || event.metaKey ||
event.shiftKey;
var mapped = map[event.which];
if (!modifiers) {
if (mapped !== undefined) {
event.preventDefault();
self.emit("move", mapped);
}
}
// R key restarts the game
if (!modifiers && event.which === 82) {
self.restart.call(self, event);
}
});
// Respond to button presses
this.bindButtonPress(".retry-button", this.restart);
this.bindButtonPress(".restart-button", this.restart);
this.bindButtonPress(".keep-playing-button", this.keepPlaying);
// Respond to swipe events
var touchStartClientX, touchStartClientY;
var gameContainer = document.getElementsByClassName("game-container")[0];
gameContainer.addEventListener(this.eventTouchstart, function (event) {
if ((!window.navigator.msPointerEnabled && event.touches.length > 1) ||
event.targetTouches.length > 1) {
return; // Ignore if touching with more than 1 finger
}
if (window.navigator.msPointerEnabled) {
touchStartClientX = event.pageX;
touchStartClientY = event.pageY;
} else {
touchStartClientX = event.touches[0].clientX;
touchStartClientY = event.touches[0].clientY;
}
event.preventDefault();
});
gameContainer.addEventListener(this.eventTouchmove, function (event) {
event.preventDefault();
});
gameContainer.addEventListener(this.eventTouchend, function (event) {
if ((!window.navigator.msPointerEnabled && event.touches.length > 0) ||
event.targetTouches.length > 0) {
return; // Ignore if still touching with one or more fingers
}
var touchEndClientX, touchEndClientY;
if (window.navigator.msPointerEnabled) {
touchEndClientX = event.pageX;
touchEndClientY = event.pageY;
} else {
touchEndClientX = event.changedTouches[0].clientX;
touchEndClientY = event.changedTouches[0].clientY;
}
var dx = touchEndClientX - touchStartClientX;
var absDx = Math.abs(dx);
var dy = touchEndClientY - touchStartClientY;
var absDy = Math.abs(dy);
if (Math.max(absDx, absDy) > 10) {
// (right : left) : (down : up)
self.emit("move", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0));
}
});
};
KeyboardInputManager.prototype.restart = function (event) {
event.preventDefault();
this.emit("restart");
};
KeyboardInputManager.prototype.keepPlaying = function (event) {
event.preventDefault();
this.emit("keepPlaying");
};
KeyboardInputManager.prototype.bindButtonPress = function (selector, fn) {
var button = document.querySelector(selector);
button.addEventListener("click", fn.bind(this));
button.addEventListener(this.eventTouchend, fn.bind(this));
};

View File

@@ -1,63 +0,0 @@
window.fakeStorage = {
_data: {},
setItem: function (id, val) {
return this._data[id] = String(val);
},
getItem: function (id) {
return this._data.hasOwnProperty(id) ? this._data[id] : undefined;
},
removeItem: function (id) {
return delete this._data[id];
},
clear: function () {
return this._data = {};
}
};
function LocalStorageManager() {
this.bestScoreKey = "bestScore";
this.gameStateKey = "gameState";
var supported = this.localStorageSupported();
this.storage = supported ? window.localStorage : window.fakeStorage;
}
LocalStorageManager.prototype.localStorageSupported = function () {
var testKey = "test";
try {
var storage = window.localStorage;
storage.setItem(testKey, "1");
storage.removeItem(testKey);
return true;
} catch (error) {
return false;
}
};
// Best score getters/setters
LocalStorageManager.prototype.getBestScore = function () {
return this.storage.getItem(this.bestScoreKey) || 0;
};
LocalStorageManager.prototype.setBestScore = function (score) {
this.storage.setItem(this.bestScoreKey, score);
};
// Game state getters/setters and clearing
LocalStorageManager.prototype.getGameState = function () {
var stateJSON = this.storage.getItem(this.gameStateKey);
return stateJSON ? JSON.parse(stateJSON) : null;
};
LocalStorageManager.prototype.setGameState = function (gameState) {
this.storage.setItem(this.gameStateKey, JSON.stringify(gameState));
};
LocalStorageManager.prototype.clearGameState = function () {
this.storage.removeItem(this.gameStateKey);
};

View File

@@ -1,27 +0,0 @@
function Tile(position, value) {
this.x = position.x;
this.y = position.y;
this.value = value || 2;
this.previousPosition = null;
this.mergedFrom = null; // Tracks tiles that merged together
}
Tile.prototype.savePosition = function () {
this.previousPosition = { x: this.x, y: this.y };
};
Tile.prototype.updatePosition = function (position) {
this.x = position.x;
this.y = position.y;
};
Tile.prototype.serialize = function () {
return {
position: {
x: this.x,
y: this.y
},
value: this.value
};
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -1,640 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="clear_sansbold" horiz-adv-x="1217" >
<font-face units-per-em="2048" ascent="1489" descent="-559" />
<missing-glyph horiz-adv-x="492" />
<glyph unicode="&#xfb01;" horiz-adv-x="1208" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM790 1335q0 70 32 100.5t109 30.5q78 0 112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34 t-29.5 97zM804 0v1049h258v-1049h-258z" />
<glyph unicode="&#xfb02;" horiz-adv-x="1208" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM804 0v1489h258v-1489h-258z" />
<glyph unicode="&#xfb03;" horiz-adv-x="1868" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM694 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5 t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM1450 1335q0 70 32 100.5t109 30.5q78 0 112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97zM1464 0v1049h258v-1049h-258z" />
<glyph unicode="&#xfb04;" horiz-adv-x="1868" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM694 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5 t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM1464 0v1489h258v-1489h-258z" />
<glyph horiz-adv-x="0" />
<glyph unicode="&#xd;" horiz-adv-x="492" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="0" />
<glyph unicode=" " horiz-adv-x="492" />
<glyph unicode="&#x09;" horiz-adv-x="492" />
<glyph unicode="&#xa0;" horiz-adv-x="492" />
<glyph unicode="!" horiz-adv-x="584" d="M129 139q0 82 36 118t126 36q92 0 128 -35t36 -119q0 -86 -39 -119.5t-125 -33.5q-94 0 -128 37.5t-34 115.5zM152 1384h280l-31 -944h-215z" />
<glyph unicode="&#x22;" horiz-adv-x="977" d="M137 1384h275l-45 -612h-185zM565 1384h275l-45 -612h-185z" />
<glyph unicode="#" horiz-adv-x="1405" d="M72 383v180h280l70 258h-234v180h283l104 385h193l-104 -385h247l105 385h192l-104 -385h229v-180h-278l-70 -258h232v-180h-279l-104 -383h-193l104 383h-247l-105 -383h-192l104 383h-233zM545 563h248l69 258h-248z" />
<glyph unicode="$" horiz-adv-x="1280" d="M123 291l205 139q37 -49 99 -94t134 -53v315q-164 41 -246.5 86.5t-125 112.5t-42.5 159q0 160 111 247t303 104v106h180v-106q144 -11 247.5 -69t162.5 -155l-193 -137q-34 47 -90.5 87t-126.5 50v-280q191 -50 269 -96t118.5 -112.5t40.5 -164.5q0 -166 -111.5 -258 t-316.5 -109v-196h-180v192q-310 32 -438 232zM414 971q0 -39 30.5 -68t116.5 -53v237q-65 -4 -106 -32.5t-41 -83.5zM741 281q74 8 118 41.5t44 85.5q0 51 -34.5 83.5t-127.5 61.5v-272z" />
<glyph unicode="%" horiz-adv-x="2163" d="M88 963q0 221 101.5 335.5t289.5 114.5q192 0 292.5 -116t100.5 -334q0 -216 -101 -330.5t-292 -114.5q-185 0 -288 114.5t-103 330.5zM334 963q0 -152 37 -208.5t108 -56.5q80 0 114 63.5t34 201.5q0 136 -32 203t-116 67q-78 0 -111.5 -64.5t-33.5 -205.5zM590 -51 l747 1487h238l-750 -1487h-235zM1290 414q0 219 100 334.5t291 115.5q193 0 293.5 -116t100.5 -334q0 -216 -102.5 -330.5t-291.5 -114.5q-185 0 -288 114.5t-103 330.5zM1536 414q0 -152 37 -208t108 -56q81 0 114.5 63.5t33.5 200.5q0 97 -16 158t-45 86.5t-87 25.5 q-78 0 -111.5 -64.5t-33.5 -205.5z" />
<glyph unicode="&#x26;" horiz-adv-x="1417" d="M92 373q0 131 57.5 217t231.5 194q-59 72 -101 148t-42 153q0 160 106 244t303 84q165 0 271 -74t106 -209q0 -72 -31 -136t-85 -120t-165 -129l263 -309q64 87 102 230l227 -52q-51 -211 -176 -356l217 -258h-327l-72 86q-72 -49 -158 -82t-215 -33q-237 0 -374.5 109 t-137.5 293zM358 371q0 -90 67 -140.5t183 -50.5q129 0 226 76l-308 356q-94 -59 -131 -114.5t-37 -126.5zM500 1096q0 -41 23.5 -81t70.5 -93q65 43 103.5 77.5t52.5 61t14 67.5t-34 68t-89 27q-70 0 -105.5 -34t-35.5 -93z" />
<glyph unicode="'" horiz-adv-x="549" d="M137 1384h275l-45 -612h-185z" />
<glyph unicode="(" horiz-adv-x="856" d="M113 561q0 528 409 961h293q-217 -205 -337 -438.5t-120 -522.5t120 -520t337 -436h-293q-409 433 -409 956z" />
<glyph unicode=")" horiz-adv-x="856" d="M41 -395q217 205 337 436t120 520t-120 522.5t-337 438.5h293q409 -433 409 -961q0 -523 -409 -956h-293z" />
<glyph unicode="*" horiz-adv-x="911" d="M31 983l282 141l-282 146l90 149l258 -159l-10 260h174l-13 -260l261 159l90 -151l-283 -142l283 -143l-90 -149l-259 159l11 -260h-174l12 260l-260 -159z" />
<glyph unicode="+" horiz-adv-x="1427" d="M133 479v205h479v479h205v-479h477v-205h-477v-477h-205v477h-479z" />
<glyph unicode="," horiz-adv-x="584" d="M129 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-177q41 69 72.5 151t36.5 132q-66 4 -95.5 42t-29.5 113z" />
<glyph unicode="-" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
<glyph unicode="." horiz-adv-x="584" d="M129 145q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118z" />
<glyph unicode="/" horiz-adv-x="1036" d="M-12 -299l690 1819h256l-692 -1819h-254z" />
<glyph unicode="0" horiz-adv-x="1280" d="M100 690q0 371 131 547t408 176q279 0 410 -175t131 -546q0 -373 -131 -548t-410 -175q-277 0 -408 175t-131 546zM391 690q0 -248 59.5 -363.5t188.5 -115.5t189.5 116.5t60.5 364.5t-60.5 363.5t-189.5 115.5t-188.5 -116.5t-59.5 -364.5z" />
<glyph unicode="1" horiz-adv-x="1280" d="M248 928v190q144 9 217.5 34.5t117 79.5t68.5 152h215v-1384h-282v928h-336z" />
<glyph unicode="2" horiz-adv-x="1204" d="M102 1178q85 127 201.5 181t290.5 54q214 0 337.5 -100t123.5 -281q0 -133 -48.5 -233.5t-138 -195t-223 -208.5t-164.5 -137h619v-258h-994v236q163 137 297 262t207 207.5t113.5 158t40.5 158.5q0 65 -49 103t-135 38q-93 0 -152 -43t-98 -102z" />
<glyph unicode="3" horiz-adv-x="1204" d="M66 195l227 155q37 -57 92 -92t150 -35q120 0 174.5 46t54.5 141q0 192 -254 192h-123v242h107q127 0 185 50t58 130q0 59 -42 98t-138 39t-153.5 -30.5t-98.5 -92.5l-225 158q82 111 198.5 164t299.5 53q139 0 242.5 -43.5t156.5 -120.5t53 -176q0 -271 -280 -340 q137 -9 221 -103.5t84 -240.5q0 -213 -139.5 -315.5t-383.5 -102.5q-174 0 -294.5 63.5t-171.5 160.5z" />
<glyph unicode="4" horiz-adv-x="1280" d="M63 229v260l676 895h289v-913h170v-242h-170v-229h-270v229h-695zM338 471h420v543z" />
<glyph unicode="5" horiz-adv-x="1204" d="M49 199l225 159q77 -135 261 -135q276 0 276 238q0 100 -72.5 157.5t-201.5 57.5q-138 0 -209 -74h-197l82 782h809v-258h-584l-28 -243q95 39 211 39q222 0 350.5 -119t128.5 -348q0 -226 -144.5 -355t-416.5 -129q-339 0 -490 228z" />
<glyph unicode="6" horiz-adv-x="1204" d="M100 608q0 392 147 598.5t429 206.5q267 0 395 -113l-160 -217q-49 43 -104 65.5t-131 22.5q-135 0 -196.5 -92t-78.5 -262q80 54 143.5 75t151.5 21q195 0 309.5 -119.5t114.5 -344.5q0 -222 -134 -350t-363 -128q-250 0 -386.5 165.5t-136.5 471.5zM393 598 q0 -153 23 -225t73 -116t136 -44q94 0 153.5 50t59.5 179q0 106 -59 169t-158 63q-78 0 -137.5 -25.5t-90.5 -50.5z" />
<glyph unicode="7" horiz-adv-x="1280" d="M113 1126v258h1038v-172l-520 -1212h-316l510 1126h-712z" />
<glyph unicode="8" horiz-adv-x="1204" d="M84 375q0 123 69.5 215t186.5 145q-112 55 -167.5 133.5t-55.5 169.5q0 183 128 279t357 96q223 0 353 -93t130 -280q0 -62 -29.5 -115t-76.5 -96t-143 -96q115 -56 170 -105t83.5 -112t28.5 -141q0 -192 -133.5 -298t-382.5 -106q-246 0 -382 101.5t-136 302.5zM367 373 q0 -78 56 -128t179 -50t178.5 52t55.5 128q0 86 -57.5 143t-176.5 113q-127 -56 -181 -113t-54 -145zM393 1042q0 -45 20 -76t66.5 -65.5t122.5 -64.5q117 51 162 100t45 100q0 66 -48 111t-159 45q-119 0 -164 -45t-45 -105z" />
<glyph unicode="9" horiz-adv-x="1204" d="M84 936q0 216 133.5 346.5t353.5 130.5q271 0 402 -169t131 -468q0 -386 -146.5 -595.5t-427.5 -209.5q-278 0 -413 115l157 215q101 -88 256 -88q233 0 273 354q-60 -41 -122.5 -68.5t-150.5 -27.5q-213 0 -329.5 120t-116.5 345zM365 942q0 -105 58.5 -168t160.5 -63 q78 0 137 25.5t90 49.5q0 211 -55.5 298t-180.5 87q-98 0 -154 -60.5t-56 -168.5z" />
<glyph unicode=":" horiz-adv-x="584" d="M129 145q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118zM129 889q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -123t-125 -37q-94 0 -128 41t-34 119z" />
<glyph unicode=";" horiz-adv-x="584" d="M129 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-177q41 69 72.5 151t36.5 132q-66 4 -95.5 42t-29.5 113zM129 889q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -123t-125 -37q-94 0 -128 41t-34 119z" />
<glyph unicode="&#x3c;" horiz-adv-x="1427" d="M131 481v203l1163 479v-225l-866 -354l866 -355v-225z" />
<glyph unicode="=" horiz-adv-x="1427" d="M133 233v205h1161v-205h-1161zM133 725v205h1161v-205h-1161z" />
<glyph unicode="&#x3e;" horiz-adv-x="1427" d="M131 4v225l866 355l-866 354v225l1163 -479v-203z" />
<glyph unicode="?" horiz-adv-x="1071" d="M35 1165q69 123 184 185.5t291 62.5q238 0 363.5 -98.5t125.5 -276.5q0 -99 -40.5 -176t-114.5 -140t-240 -144v-179h-272v301q163 68 235 112t107 93t35 113q0 153 -197 153q-90 0 -144.5 -35.5t-99.5 -109.5zM309 139q0 82 36 118t126 36q92 0 128 -36t36 -118 q0 -86 -39 -119.5t-125 -33.5q-94 0 -128 37.5t-34 115.5z" />
<glyph unicode="@" horiz-adv-x="1950" d="M104 553q0 239 114 436.5t319 310.5t452 113q402 0 629 -223t227 -621q0 -169 -45 -292t-135.5 -192t-224.5 -69q-99 0 -164.5 27t-93.5 98q-141 -98 -283 -98q-127 0 -215 59t-134 166.5t-46 249.5q0 231 113 367.5t315 136.5q113 0 231 -70v41h215v-696q0 -66 22.5 -81 t51.5 -15q64 0 106 46t64.5 128t22.5 186q0 328 -168.5 499t-485.5 171q-195 0 -353 -88t-245.5 -244.5t-87.5 -347.5q0 -207 84.5 -361t238 -235.5t359.5 -81.5q123 0 228.5 9t220.5 36l39 -180q-190 -47 -490 -47q-260 0 -460 104.5t-310.5 302t-110.5 455.5zM725 520 q0 -143 55 -209.5t158 -66.5q89 0 223 92v422q-114 69 -198 69q-117 0 -177.5 -72.5t-60.5 -234.5z" />
<glyph unicode="A" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM477 528h373l-186 572z" />
<glyph unicode="B" horiz-adv-x="1298" d="M150 0v1384h489q266 0 381 -77.5t115 -245.5q0 -129 -62.5 -209t-195.5 -107q174 -24 253.5 -110t79.5 -234q0 -208 -143 -304.5t-397 -96.5h-520zM432 250h143q165 0 227.5 16t91 54t28.5 106q0 93 -63 131.5t-236 38.5h-191v-346zM432 842h172q125 0 185.5 35t60.5 122 q0 79 -58 109.5t-180 30.5h-180v-297z" />
<glyph unicode="C" horiz-adv-x="1333" d="M96 692q0 369 163 545t470 176q203 0 331 -68.5t195 -179.5l-219 -170q-48 72 -88 104t-91 48t-122 16q-170 0 -259 -108.5t-89 -362.5q0 -237 83.5 -354t266.5 -117q123 0 191.5 47t124.5 125l223 -164q-89 -133 -218.5 -195.5t-318.5 -62.5q-643 0 -643 721z" />
<glyph unicode="D" horiz-adv-x="1313" d="M137 0v1384h418q245 0 389.5 -71t213.5 -221.5t69 -399.5q0 -250 -69 -402t-208 -221t-391 -69h-422zM420 258h108q167 0 251.5 38.5t120.5 128.5t36 269q0 181 -35.5 268.5t-120.5 125.5t-252 38h-108v-868z" />
<glyph unicode="E" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899z" />
<glyph unicode="F" horiz-adv-x="1104" d="M150 0v1384h890v-258h-608v-299h510v-249h-510v-578h-282z" />
<glyph unicode="G" horiz-adv-x="1415" d="M96 680q0 733 645 733q188 0 328 -63t213 -185l-217 -170q-53 86 -129 127t-191 41q-189 0 -273.5 -121.5t-84.5 -361.5q0 -238 83.5 -348.5t268.5 -110.5q140 0 258 58v215h-270v249h553v-612q-96 -72 -238.5 -116t-293.5 -44q-324 0 -488 169t-164 540z" />
<glyph unicode="H" horiz-adv-x="1409" d="M150 0v1384h282v-538h545v538h283v-1384h-283v588h-545v-588h-282z" />
<glyph unicode="I" horiz-adv-x="872" d="M102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668z" />
<glyph unicode="J" horiz-adv-x="924" d="M20 23l86 251q32 -17 102.5 -36t110.5 -19q74 0 107 20t47 70t14 144v931h283v-1007q0 -219 -110.5 -313.5t-346.5 -94.5q-51 0 -142 15t-151 39z" />
<glyph unicode="K" horiz-adv-x="1280" d="M150 0v1384h282v-540l453 540h329l-516 -596l553 -788h-352l-383 578l-84 -97v-481h-282z" />
<glyph unicode="L" horiz-adv-x="1038" d="M150 0v1384h282v-1126h582v-258h-864z" />
<glyph unicode="M" horiz-adv-x="1667" d="M150 0v1384h325l361 -657l364 657h318v-1384h-273v930l-332 -578h-163l-328 578v-930h-272z" />
<glyph unicode="N" horiz-adv-x="1411" d="M150 0v1384h366l469 -933v933h277v-1384h-332l-504 989v-989h-276z" />
<glyph unicode="O" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5 t-69.5 -358.5z" />
<glyph unicode="P" horiz-adv-x="1239" d="M150 0v1384h520q235 0 363 -109.5t128 -354.5q0 -250 -117.5 -371t-381.5 -121h-230v-428h-282zM432 674h115q155 0 214.5 21.5t84 72.5t24.5 150q0 117 -64.5 169t-232.5 52h-141v-465z" />
<glyph unicode="Q" horiz-adv-x="1364" d="M86 692q0 346 144.5 533.5t453.5 187.5q307 0 450.5 -188.5t143.5 -532.5q0 -611 -428 -706q10 -54 43 -78.5t119 -24.5q45 0 104.5 9.5t100.5 21.5l65 -227q-34 -11 -118 -23t-160 -12q-399 0 -461 330q-213 32 -335 205t-122 505zM377 692q0 -246 69.5 -358.5 t237.5 -112.5t235.5 114t67.5 357q0 246 -69.5 358.5t-233.5 112.5q-170 0 -238.5 -112.5t-68.5 -358.5z" />
<glyph unicode="R" horiz-adv-x="1284" d="M150 0v1384h503q267 0 390.5 -96t123.5 -315q0 -177 -74.5 -282t-211.5 -134l370 -557h-323l-353 524h-143v-524h-282zM432 770h207q95 0 146 18t73.5 56t22.5 117q0 106 -53.5 142t-176.5 36h-219v-369z" />
<glyph unicode="S" horiz-adv-x="1229" d="M66 229l217 166q48 -68 91 -102t102 -53t136 -19q115 0 179.5 39.5t64.5 120.5q0 46 -22.5 77t-67.5 53.5t-156 51.5q-108 29 -203.5 58.5t-165 76.5t-109.5 118t-40 179q0 197 133 307.5t381 110.5q359 0 508 -246l-215 -168q-57 88 -128 126t-169 38t-159.5 -35.5 t-61.5 -111.5q0 -67 64 -102.5t223 -71.5q88 -23 174 -49.5t153.5 -73.5t108.5 -123t41 -195q0 -208 -136.5 -319t-402.5 -111q-184 0 -319.5 61t-220.5 197z" />
<glyph unicode="T" horiz-adv-x="1204" d="M35 1126v258h1134v-258h-426v-1126h-282v1126h-426z" />
<glyph unicode="U" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5z" />
<glyph unicode="V" horiz-adv-x="1243" d="M27 1384h286l312 -1032l311 1032h281l-431 -1384h-333z" />
<glyph unicode="W" horiz-adv-x="1833" d="M43 1384h281l221 -903l229 903h279l231 -909l227 909h279l-358 -1384h-289l-232 915l-233 -915h-285z" />
<glyph unicode="X" horiz-adv-x="1286" d="M29 0l463 694l-451 690h321l287 -466l297 466h311l-454 -684l452 -700h-317l-297 477l-301 -477h-311z" />
<glyph unicode="Y" horiz-adv-x="1188" d="M18 1384h308l270 -579l276 579h297l-434 -856v-528h-284v522z" />
<glyph unicode="Z" horiz-adv-x="1147" d="M72 0v238l635 888h-605v258h942v-227l-641 -899h658v-258h-989z" />
<glyph unicode="[" horiz-adv-x="764" d="M154 -395v1884h548v-207h-309v-1470h309v-207h-548z" />
<glyph unicode="\" horiz-adv-x="1036" d="M102 1520h256l691 -1819h-254z" />
<glyph unicode="]" horiz-adv-x="764" d="M61 -188h310v1470h-310v207h549v-1884h-549v207z" />
<glyph unicode="^" horiz-adv-x="1300" d="M123 594l434 790h186l435 -790h-220l-307 557l-309 -557h-219z" />
<glyph unicode="_" horiz-adv-x="1024" d="M-10 -154h1044v-102h-1044v102z" />
<glyph unicode="`" horiz-adv-x="1044" d="M195 1569h315l188 -361h-204z" />
<glyph unicode="a" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM350 299 q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123z" />
<glyph unicode="b" d="M145 0v1489h258v-524q142 114 314 114q211 0 309 -145.5t98 -401.5q0 -261 -109.5 -412t-312.5 -151q-80 0 -174.5 36.5t-150.5 92.5l-35 -98h-197zM403 291q43 -37 104.5 -65.5t119.5 -28.5q111 0 171 84.5t60 246.5t-51 243t-164 81q-63 0 -127.5 -29.5t-112.5 -72.5 v-459z" />
<glyph unicode="c" horiz-adv-x="1059" d="M92 518q0 265 126 413t378 148q135 0 240.5 -44t160.5 -136l-192 -137q-35 47 -82 69.5t-121 22.5q-132 0 -188 -81t-56 -251t57.5 -248.5t196.5 -78.5q60 0 110 17t95 75l195 -137q-60 -89 -158 -135t-248 -46q-254 0 -384 138.5t-130 410.5z" />
<glyph unicode="d" d="M92 516q0 267 115.5 415t324.5 148q74 0 152 -30.5t129 -77.5v518h258v-1489h-237v102q-72 -61 -152 -97t-182 -36q-198 0 -303 143t-105 404zM358 520q0 -151 51.5 -237t159.5 -86q64 0 130.5 29.5t113.5 72.5v459q-41 37 -101.5 65.5t-123.5 28.5q-104 0 -167 -89.5 t-63 -242.5z" />
<glyph unicode="e" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM365 635h434q0 239 -209 239q-69 0 -113 -23.5t-70.5 -70t-41.5 -145.5z" />
<glyph unicode="f" horiz-adv-x="659" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133z" />
<glyph unicode="g" d="M92 535q0 162 51.5 285.5t151 191t240.5 67.5q83 0 166 -36.5t139 -92.5l34 99h197v-1029q0 -210 -129 -312.5t-414 -102.5q-235 0 -411 90l76 211q163 -76 335 -76q160 0 222.5 46t62.5 155v86q-128 -117 -309 -117q-192 0 -302 138t-110 397zM358 539q0 -160 57.5 -236 t149.5 -76q128 0 248 103v428q-106 94 -231 94q-94 0 -159 -86t-65 -227z" />
<glyph unicode="h" d="M145 0v1489h258v-576q82 82 175 124t182 42q176 0 247.5 -99t71.5 -280v-700h-258v578q0 166 -31 220t-110 54q-115 0 -277 -152v-700h-258z" />
<glyph unicode="i" horiz-adv-x="549" d="M131 1335q0 70 32 100.5t109 30.5q78 0 112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97zM145 0v1049h258v-1049h-258z" />
<glyph unicode="j" horiz-adv-x="563" d="M-162 -365l56 224q73 -29 151 -29t96.5 48t18.5 159v1012h258v-1094q0 -188 -84 -269t-275 -81q-43 0 -113 9.5t-108 20.5zM145 1335q0 70 32 100.5t110 30.5t111.5 -29.5t33.5 -101.5q0 -73 -36 -102t-109 -29q-82 0 -112 34t-30 97z" />
<glyph unicode="k" horiz-adv-x="1100" d="M145 0v1489h258v-852l353 412h299l-396 -441l418 -608h-293l-280 434l-101 -108v-326h-258z" />
<glyph unicode="l" horiz-adv-x="549" d="M145 0v1489h258v-1489h-258z" />
<glyph unicode="m" horiz-adv-x="1790" d="M145 0v1049h258v-136q72 78 151 122t175 44q131 0 193.5 -45t85.5 -133q90 90 168.5 134t183.5 44q153 0 223 -87t70 -292v-700h-258v618q0 93 -11 145t-33.5 70.5t-74.5 18.5q-59 0 -125 -44t-123 -108v-700h-258v618q0 102 -9 147.5t-32 66t-78 20.5q-48 0 -111 -36.5 t-137 -115.5v-700h-258z" />
<glyph unicode="n" d="M145 0v1049h258v-136q82 82 175 124t182 42q161 0 240 -88t79 -291v-700h-258v578q0 164 -29.5 219t-111.5 55q-115 0 -277 -152v-700h-258z" />
<glyph unicode="o" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5t-56 -250.5z" />
<glyph unicode="p" d="M145 -395v1444h238v-103q72 62 151.5 97.5t182.5 35.5q199 0 303 -140t104 -407q0 -169 -51 -298t-146 -197t-227 -68q-174 0 -297 109v-473h-258zM403 291q41 -37 101.5 -65.5t124.5 -28.5q106 0 167.5 90.5t61.5 240.5q0 153 -53 238.5t-158 85.5q-63 0 -129.5 -29.5 t-114.5 -72.5v-459z" />
<glyph unicode="q" d="M92 516q0 266 114 414.5t324 148.5q95 0 178 -40t132 -89l34 99h197v-1444h-258v479q-141 -115 -313 -115q-198 0 -303 140t-105 407zM358 520q0 -153 50 -238t161 -85q64 0 130.5 29.5t113.5 72.5v459q-47 43 -107.5 68.5t-117.5 25.5q-104 0 -167 -89.5t-63 -242.5z " />
<glyph unicode="r" horiz-adv-x="840" d="M145 0v1049h258v-150q66 72 142 119t170 47q80 0 114 -21l-51 -247q-40 20 -106 20q-72 0 -136.5 -34.5t-132.5 -100.5v-682h-258z" />
<glyph unicode="s" horiz-adv-x="1026" d="M76 152l192 135q47 -64 108.5 -85.5t131.5 -21.5q184 0 184 107q0 47 -52 72.5t-163 52.5q-209 46 -294 130t-85 218q0 139 106.5 229t313.5 90q141 0 248.5 -45t165.5 -135l-193 -137q-69 106 -225 106q-80 0 -121 -27.5t-41 -70.5q0 -41 37 -65.5t146 -51.5 q179 -44 255.5 -87.5t116 -108t39.5 -158.5q0 -104 -52.5 -178t-149 -113t-220.5 -39q-329 0 -448 183z" />
<glyph unicode="t" horiz-adv-x="739" d="M31 844v205h133v292h258v-292h244v-205h-244v-494q0 -98 30.5 -133t86.5 -35q71 0 141 29l45 -211q-104 -31 -219 -31q-182 0 -262 82t-80 266v527h-133z" />
<glyph unicode="u" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5z" />
<glyph unicode="v" horiz-adv-x="1040" d="M27 1049h264l233 -691l232 691h258l-377 -1049h-238z" />
<glyph unicode="w" horiz-adv-x="1565" d="M27 1049h268l162 -676l235 676h195l237 -670l156 670h258l-281 -1049h-235l-236 668l-237 -668h-236z" />
<glyph unicode="x" horiz-adv-x="1079" d="M31 0l362 518l-356 531h301l209 -332l215 332h285l-361 -517l363 -532h-306l-208 334l-218 -334h-286z" />
<glyph unicode="y" horiz-adv-x="1085" d="M-20 -365l55 224q84 -29 151 -29q58 0 102 35t91 145l27 62l-379 977h268l248 -670l254 670h262l-451 -1121q-55 -135 -107 -200t-121.5 -94t-174.5 -29q-114 0 -225 30z" />
<glyph unicode="z" horiz-adv-x="930" d="M57 0v188l490 656h-477v205h786v-187l-491 -657h507v-205h-815z" />
<glyph unicode="{" horiz-adv-x="915" d="M102 453v221h39q111 0 170.5 77.5t59.5 223.5v139q0 197 95 301.5t318 104.5h70v-207h-41q-117 0 -160 -48t-43 -165v-166q0 -137 -64.5 -231.5t-174.5 -141.5q108 -39 173.5 -137t65.5 -234v-165q0 -117 43 -165t160 -48h41v-207h-70q-221 0 -317 103.5t-96 301.5v142 q0 141 -59.5 221t-170.5 80h-39z" />
<glyph unicode="|" horiz-adv-x="801" d="M281 -395v1915h239v-1915h-239z" />
<glyph unicode="}" horiz-adv-x="915" d="M61 -188h41q117 0 160 48t43 165v165q0 136 65.5 234t174.5 137q-111 47 -175.5 141.5t-64.5 231.5v166q0 117 -43 165t-160 48h-41v207h70q223 0 318.5 -104.5t95.5 -301.5v-139q0 -146 59.5 -223.5t169.5 -77.5h39v-221h-39q-110 0 -169.5 -80t-59.5 -221v-142 q0 -198 -96.5 -301.5t-317.5 -103.5h-70v207z" />
<glyph unicode="~" horiz-adv-x="1386" d="M143 580v229q56 47 106 73t95 38t117 12q65 0 128.5 -24.5t122 -54.5t114 -54.5t106.5 -24.5q80 0 154.5 38t156.5 110v-222q-67 -53 -141 -92t-166 -39q-72 0 -137.5 24.5t-126 54.5t-114.5 54.5t-101 24.5q-92 0 -170 -45t-144 -102z" />
<glyph unicode="&#xa1;" horiz-adv-x="584" d="M129 954q0 78 34 116t128 38q86 0 125 -34t39 -120q0 -82 -36 -117.5t-128 -35.5q-90 0 -126 35.5t-36 117.5zM152 -395l34 1059h215l31 -1059h-280z" />
<glyph unicode="&#xa2;" horiz-adv-x="1059" d="M92 518q0 265 126 413t378 148h18l48 209h180l-54 -237q145 -49 209 -152l-192 -137q-27 35 -66 61l-139 -628h12q60 0 110 17t95 75l195 -137q-60 -89 -158 -135t-248 -46l-55 2l-51 -231h-183l60 266q-152 57 -218.5 189.5t-66.5 322.5zM358 522q0 -196 74 -270 l133 600q-107 -9 -157 -86t-50 -244z" />
<glyph unicode="&#xa3;" horiz-adv-x="1280" d="M100 0v213q65 13 103 58.5t55.5 110t17.5 183.5h-151v189h137l-11 44q-42 128 -42 228q0 187 135 287t367 100q176 0 296.5 -61.5t184.5 -167.5l-217 -131q-41 65 -111.5 104t-152.5 39q-119 0 -176.5 -54.5t-57.5 -144.5q0 -73 44 -202l11 -41h379v-189h-370 q0 -224 -117 -325h784v-240h-1108z" />
<glyph unicode="&#xa4;" horiz-adv-x="1280" d="M139 281l142 135q-72 115 -72 231q0 125 72 232l-142 137l123 125l141 -140q105 72 236 72q57 0 119.5 -17.5t115.5 -54.5l142 140l125 -125l-144 -137q72 -109 72 -232q0 -122 -72 -231l144 -135l-125 -125l-142 139q-103 -72 -235 -72q-131 0 -236 72l-141 -139z M385 649q0 -102 75 -177t179 -75q65 0 124.5 33.5t94.5 93t35 125.5q0 104 -76.5 177t-175.5 73q-102 0 -179 -72t-77 -178z" />
<glyph unicode="&#xa5;" horiz-adv-x="1280" d="M45 1384h307l291 -538l295 538h297l-307 -538h211v-178h-314l-45 -80v-31h359v-176h-359v-381h-282v381h-361v176h361v27l-47 84h-314v178h213z" />
<glyph unicode="&#xa6;" horiz-adv-x="801" d="M281 283h239v-678h-239v678zM281 842v678h239v-678h-239z" />
<glyph unicode="&#xa7;" horiz-adv-x="1110" d="M92 545q0 188 211 307q-72 53 -110.5 110.5t-38.5 129.5q0 149 105.5 235t322.5 86q282 0 407 -160l-176 -131q-84 84 -227 84q-92 0 -133 -27.5t-41 -68.5q0 -31 45 -69.5t252 -166.5q128 -79 186.5 -133t90.5 -112.5t32 -126.5q0 -191 -211 -307q78 -60 113.5 -117.5 t35.5 -120.5q0 -162 -112.5 -243t-308.5 -81q-160 0 -257.5 43t-156.5 117l176 131q75 -84 233 -84q72 0 120 23.5t48 68.5t-74.5 97.5t-222.5 142.5q-153 92 -231 176t-78 197zM336 549q0 -41 67.5 -94.5t208.5 -139.5q68 41 115 89t47 90q0 24 -15.5 46.5t-48 49t-85 59.5 t-127.5 80q-80 -49 -121 -91t-41 -89z" />
<glyph unicode="&#xa8;" horiz-adv-x="1044" d="M152 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM596 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xa9;" horiz-adv-x="1802" d="M96 610q0 217 106 402.5t293.5 293t405.5 107.5q217 0 403 -106.5t293 -292.5t107 -404q0 -217 -105.5 -403t-292.5 -295t-405 -109q-219 0 -406 108.5t-293 295t-106 403.5zM258 610q0 -176 87.5 -328t235 -237.5t320.5 -85.5t320.5 85.5t235 237t87.5 328.5 q0 173 -86 323.5t-235.5 237t-321.5 86.5q-174 0 -323 -87t-234.5 -237.5t-85.5 -322.5zM504 612q0 217 100.5 331t317.5 114q133 0 209.5 -51.5t134.5 -143.5l-176 -100q-33 47 -67 78.5t-103 31.5q-109 0 -155 -59t-46 -201q0 -143 48 -200.5t155 -57.5q65 0 104 29t76 78 l180 -96q-71 -88 -118.5 -123.5t-106 -53.5t-131.5 -18q-422 0 -422 442z" />
<glyph unicode="&#xaa;" horiz-adv-x="834" d="M92 1014q0 105 65 164t222 73l129 13v20q0 49 -27.5 67.5t-93.5 18.5q-65 0 -95 -21.5t-46 -50.5l-148 93q31 53 100.5 91t192.5 38q146 0 224.5 -50.5t78.5 -191.5v-461h-174v57q-95 -75 -196 -75q-117 0 -174.5 59.5t-57.5 155.5zM285 1018q0 -39 19.5 -54.5 t57.5 -15.5q64 0 146 66v110l-68 -6q-90 -8 -122.5 -31.5t-32.5 -68.5z" />
<glyph unicode="&#xab;" horiz-adv-x="1436" d="M61 524l420 471h299l-420 -471l420 -471h-299zM635 524l420 471h299l-420 -471l420 -471h-299z" />
<glyph unicode="&#xac;" horiz-adv-x="1427" d="M133 801v205h1161v-682h-207v477h-954z" />
<glyph unicode="&#xad;" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
<glyph unicode="&#xae;" horiz-adv-x="1802" d="M96 610q0 217 106 402.5t293.5 293t405.5 107.5q217 0 403 -106.5t293 -292.5t107 -404q0 -217 -105.5 -403t-292.5 -295t-405 -109q-219 0 -406 108.5t-293 295t-106 403.5zM258 610q0 -176 87.5 -328t235 -237.5t320.5 -85.5t320.5 85.5t235 237t87.5 328.5 q0 173 -86 323.5t-235.5 237t-321.5 86.5q-174 0 -323 -87t-234.5 -237.5t-85.5 -322.5zM588 201v850h305q178 0 260 -63t82 -197q0 -185 -145 -246l239 -344h-250l-211 307h-75v-307h-205zM793 682h96q54 0 81 7t39.5 25.5t12.5 65.5t-21.5 70.5t-103.5 23.5h-104v-192z " />
<glyph unicode="&#xaf;" horiz-adv-x="1044" d="M186 1255v185h672v-185h-672z" />
<glyph unicode="&#xb0;" horiz-adv-x="868" d="M123 1241q0 130 91.5 219.5t219.5 89.5q129 0 220 -90.5t91 -218.5q0 -83 -40.5 -154.5t-114 -115t-154.5 -43.5q-83 0 -157 42.5t-115 114t-41 156.5zM303 1241q0 -55 38 -94t95 -39q53 0 91 39t38 92q0 55 -38 93t-91 38q-59 0 -96 -39t-37 -90z" />
<glyph unicode="&#xb1;" horiz-adv-x="1427" d="M133 0v205h1161v-205h-1161zM133 829v205h479v479h205v-479h477v-205h-477v-477h-205v477h-479z" />
<glyph unicode="&#xb2;" horiz-adv-x="938" d="M76 1348q133 172 377 172q180 0 262 -71t82 -179q0 -60 -16 -107.5t-52.5 -92.5t-130.5 -115t-166 -111h397v-197h-737v182l108 78q228 160 283.5 217t55.5 113q0 78 -97 78q-101 0 -170 -88z" />
<glyph unicode="&#xb3;" horiz-adv-x="938" d="M59 801l199 102q64 -88 164 -88q72 0 98.5 32t26.5 66q0 91 -141 91h-115v176h102q92 0 124 22.5t32 63.5q0 28 -27.5 48.5t-85.5 20.5q-103 0 -168 -78l-182 107q61 74 143 115t224 41q172 0 255 -67t83 -159q0 -71 -38 -116t-124 -74q92 -23 134 -77t42 -126 q0 -137 -102.5 -203.5t-282.5 -66.5q-127 0 -221.5 49t-139.5 121z" />
<glyph unicode="&#xb4;" horiz-adv-x="1044" d="M348 1208l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xb5;" horiz-adv-x="1202" d="M131 -395v1444h258v-750q29 -39 83 -69.5t114 -30.5q131 0 227 120v730h256v-1049h-238l-4 111q-49 -70 -104 -106t-133 -36q-62 0 -109 17.5t-92 52.5v-434h-258z" />
<glyph unicode="&#xb6;" horiz-adv-x="1321" d="M41 1047q0 206 134 324t378 118h727v-207h-188v-1677h-234v1677h-162v-1677h-233v1001q-204 22 -313 138t-109 303z" />
<glyph unicode="&#xb7;" horiz-adv-x="584" d="M129 743q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118z" />
<glyph unicode="&#xb8;" horiz-adv-x="1044" d="M199 -350l69 145q106 -45 193 -45q53 0 74.5 11.5t21.5 35.5q0 63 -180 72l88 170h170l-31 -62q62 -14 104 -61t42 -121q0 -190 -287 -190q-174 0 -264 45z" />
<glyph unicode="&#xb9;" horiz-adv-x="938" d="M170 1200v152q97 3 150 17t82 43t49 91h200v-856h-252v553h-229z" />
<glyph unicode="&#xba;" horiz-adv-x="842" d="M92 1157q0 172 80 267.5t250 95.5q168 0 248 -95.5t80 -267.5q0 -170 -80 -264t-248 -94q-172 0 -251 95t-79 263zM285 1157q0 -100 31.5 -148t105.5 -48q72 0 103.5 47.5t31.5 148.5q0 119 -39 160t-96 41q-60 0 -98.5 -41t-38.5 -160z" />
<glyph unicode="&#xbb;" horiz-adv-x="1436" d="M82 53l420 471l-420 471h299l420 -471l-420 -471h-299zM655 53l420 471l-420 471h299l420 -471l-420 -471h-299z" />
<glyph unicode="&#xbc;" horiz-adv-x="2095" d="M45 1085v152q97 3 150 17t82 43t49 91h200v-856h-252v553h-229zM469 -51l747 1489h238l-750 -1489h-235zM1155 160v166l492 530h227v-524h115v-172h-115v-160h-232v160h-487zM1386 332h256v276z" />
<glyph unicode="&#xbd;" horiz-adv-x="2095" d="M43 1085v152q97 3 150 17t82 43t49 91h200v-856h-252v553h-229zM406 -51l747 1489h238l-750 -1489h-235zM1213 701q133 172 377 172q180 0 262 -71t82 -179q0 -60 -16 -107.5t-52.5 -92.5t-130.5 -115t-166 -111h397v-197h-737v182l108 78q228 160 283.5 217t55.5 113 q0 78 -97 78q-101 0 -170 -88z" />
<glyph unicode="&#xbe;" horiz-adv-x="2095" d="M59 686l199 102q64 -88 164 -88q72 0 98.5 32t26.5 66q0 91 -141 91h-115v176h102q92 0 124 22.5t32 63.5q0 28 -27.5 48.5t-85.5 20.5q-103 0 -168 -78l-182 107q61 74 143 115t224 41q172 0 255 -67t83 -159q0 -71 -38 -116t-124 -74q92 -23 134 -77t42 -126 q0 -137 -102.5 -203.5t-282.5 -66.5q-127 0 -221.5 49t-139.5 121zM592 -51l747 1489h238l-750 -1489h-235zM1202 160v166l492 530h227v-524h115v-172h-115v-160h-232v160h-487zM1433 332h256v276z" />
<glyph unicode="&#xbf;" horiz-adv-x="1071" d="M72 0q0 105 39 185t112.5 145.5t243.5 154.5v179h272v-302q-55 -28 -120.5 -61t-122 -75t-95.5 -94t-39 -120q0 -78 44.5 -122t152.5 -44q90 0 144.5 37t99.5 111l233 -139q-69 -123 -184 -186.5t-291 -63.5q-237 0 -363 103.5t-126 291.5zM436 954q0 86 39 120t125 34 q94 0 128 -38t34 -116q0 -82 -36 -117.5t-126 -35.5q-92 0 -128 35.5t-36 117.5z" />
<glyph unicode="&#xc0;" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM373 1905h315l188 -361h-204zM477 528h373l-186 572z" />
<glyph unicode="&#xc1;" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM477 528h373l-186 572zM491 1544l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xc2;" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM305 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM477 528h373l-186 572z" />
<glyph unicode="&#xc3;" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM254 1567q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5 q-67 0 -67 -127h-182zM477 528h373l-186 572z" />
<glyph unicode="&#xc4;" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM293 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM477 528h373l-186 572zM737 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5 t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xc5;" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM434 1716q0 107 57.5 166.5t171.5 59.5q119 0 175.5 -60.5t56.5 -165.5q0 -110 -59.5 -167.5t-172.5 -57.5q-117 0 -173 60.5t-56 164.5zM477 528h373l-186 572zM577 1716q0 -90 86 -90q88 0 88 90t-88 90 q-86 0 -86 -90z" />
<glyph unicode="&#xc6;" horiz-adv-x="1810" d="M20 0l555 1384h1135v-249h-567v-301h469v-250h-469v-326h567v-258h-850v360h-409l-144 -360h-287zM547 608h313v527h-104z" />
<glyph unicode="&#xc7;" horiz-adv-x="1333" d="M96 692q0 369 163 545t470 176q203 0 331 -68.5t195 -179.5l-219 -170q-48 72 -88 104t-91 48t-122 16q-170 0 -259 -108.5t-89 -362.5q0 -237 83.5 -354t266.5 -117q123 0 191.5 47t124.5 125l223 -164q-66 -96 -165 -164.5t-263 -87.5q61 -14 103 -61t42 -121 q0 -190 -286 -190q-172 0 -265 45l70 145q106 -45 193 -45q53 0 74.5 11.5t21.5 35.5q0 63 -180 72l53 104q-578 37 -578 719z" />
<glyph unicode="&#xc8;" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899zM267 1905h315l188 -361h-204z" />
<glyph unicode="&#xc9;" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899zM426 1544l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xca;" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899zM236 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209z" />
<glyph unicode="&#xcb;" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899zM228 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM672 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102 t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xcc;" horiz-adv-x="872" d="M80 1905h315l188 -361h-204zM102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668z" />
<glyph unicode="&#xcd;" horiz-adv-x="872" d="M102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668zM270 1544l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xce;" horiz-adv-x="872" d="M78 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668z" />
<glyph unicode="&#xcf;" horiz-adv-x="872" d="M72 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668zM516 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102 t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xd0;" horiz-adv-x="1399" d="M2 580v225h148v579h434q263 0 416.5 -70.5t228 -222.5t74.5 -399q0 -250 -74.5 -402t-224.5 -221t-418 -69h-436v580h-148zM432 258h127q184 0 278 40t134.5 130t40.5 266t-39 264.5t-132 128t-282 39.5h-127v-321h322v-225h-322v-322z" />
<glyph unicode="&#xd1;" horiz-adv-x="1411" d="M150 0v1384h366l469 -933v933h277v-1384h-332l-504 989v-989h-276zM285 1526q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5 q-67 0 -67 -127h-182z" />
<glyph unicode="&#xd2;" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM371 1905h315l188 -361h-204zM377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5 t-235.5 112.5t-235.5 -112.5t-69.5 -358.5z" />
<glyph unicode="&#xd3;" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5 t-69.5 -358.5zM530 1544l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xd4;" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM334 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM377 692q0 -246 70.5 -358.5t234.5 -112.5 q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5t-69.5 -358.5z" />
<glyph unicode="&#xd5;" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM283 1567q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182 q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182zM377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5t-69.5 -358.5z" />
<glyph unicode="&#xd6;" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM332 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97z M377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5t-69.5 -358.5zM776 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xd7;" horiz-adv-x="1427" d="M129 145l438 437l-438 436l145 145l439 -436l438 436l145 -145l-438 -436l438 -437l-145 -145l-438 438l-439 -438z" />
<glyph unicode="&#xd8;" horiz-adv-x="1364" d="M27 -115l194 285q-135 180 -135 522q0 344 144.5 532.5t451.5 188.5q201 0 334 -84l108 160h199l-184 -270q139 -182 139 -527q0 -361 -152.5 -541t-443.5 -180q-207 0 -338 86l-117 -172h-200zM377 692q0 -157 26 -256l461 674q-69 53 -182 53q-166 0 -235.5 -112.5 t-69.5 -358.5zM496 276q67 -55 186 -55q166 0 235.5 112.5t69.5 358.5q0 158 -29 262z" />
<glyph unicode="&#xd9;" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5zM392 1905h315l188 -361h-204z" />
<glyph unicode="&#xda;" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5zM551 1544l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xdb;" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5zM365 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209z" />
<glyph unicode="&#xdc;" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5zM353 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29 q-82 0 -111.5 34t-29.5 97zM797 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xdd;" horiz-adv-x="1188" d="M18 1384h308l270 -579l276 579h297l-434 -856v-528h-284v522zM424 1544l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xde;" horiz-adv-x="1239" d="M150 0v1384h282v-200h238q235 0 363 -109.5t128 -355.5q0 -250 -117.5 -371t-381.5 -121h-230v-227h-282zM432 473h115q155 0 214 21.5t84 71.5t25 151q0 81 -30 129.5t-91 70t-176 21.5h-141v-465z" />
<glyph unicode="&#xdf;" d="M145 0v1020q0 252 117.5 376t355.5 124q203 0 313.5 -91t110.5 -255q0 -123 -53 -196t-129 -106q122 -27 193 -136.5t71 -262.5q0 -250 -93 -377t-312 -127q-47 0 -103.5 10.5t-89.5 20.5v227q86 -30 154 -30q88 0 131 63.5t43 220.5q0 108 -28.5 160.5t-92.5 74 t-190 21.5v224q93 0 143 18.5t72 57t22 118.5q0 70 -43 106.5t-123 36.5q-104 0 -157.5 -59t-53.5 -211v-1028h-258z" />
<glyph unicode="&#xe0;" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM207 1569h315 l188 -361h-204zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123z" />
<glyph unicode="&#xe1;" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM350 299 q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123zM366 1208l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xe2;" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM195 1208l235 361 h244l236 -361h-211l-146 174l-149 -174h-209zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123z" />
<glyph unicode="&#xe3;" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM150 1231 q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200 l-131 -12q-139 -12 -200.5 -53t-61.5 -123z" />
<glyph unicode="&#xe4;" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM168 1335 q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123zM612 1335q0 70 31.5 100.5t109.5 30.5 t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xe5;" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM309 1378 q0 107 57.5 166.5t171.5 59.5q119 0 175.5 -60.5t56.5 -165.5q0 -110 -59.5 -167.5t-172.5 -57.5q-117 0 -173 60.5t-56 164.5zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123zM452 1378q0 -90 86 -90 q88 0 88 90t-88 90q-86 0 -86 -90z" />
<glyph unicode="&#xe6;" horiz-adv-x="1786" d="M84 303q0 157 105.5 244t332.5 106l221 21v47q0 86 -52 119.5t-148 33.5q-109 0 -162 -32.5t-80 -75.5l-201 129q53 89 164.5 136.5t276.5 47.5q254 0 356 -123q121 123 350 123q220 0 335.5 -127.5t115.5 -367.5v-127h-697q7 -140 67 -201t196 -61q73 0 130.5 19 t100.5 73l193 -137q-64 -91 -162.5 -136t-257.5 -45q-299 0 -428 168q-97 -82 -196 -125t-212 -43q-170 0 -259 91.5t-89 242.5zM350 299q0 -125 139 -125q64 0 140 25.5t141 76.5q-13 40 -20 113t-7 98l-131 -12q-139 -12 -200.5 -53t-61.5 -123zM1008 635h434 q0 239 -211 239q-113 0 -160 -64.5t-63 -174.5z" />
<glyph unicode="&#xe7;" horiz-adv-x="1059" d="M92 518q0 265 126 413t378 148q135 0 240.5 -44t160.5 -136l-192 -137q-35 47 -82 69.5t-121 22.5q-132 0 -188 -81t-56 -251t57.5 -248.5t196.5 -78.5q60 0 110 17t95 75l195 -137q-105 -153 -318 -177q56 -16 93.5 -62t37.5 -116q0 -190 -286 -190q-172 0 -265 45 l70 145q106 -45 193 -45q53 0 74.5 11.5t21.5 35.5q0 63 -180 72l55 106q-416 56 -416 543z" />
<glyph unicode="&#xe8;" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM248 1569h315l188 -361h-204zM365 635h434q0 239 -209 239q-69 0 -113 -23.5 t-70.5 -70t-41.5 -145.5z" />
<glyph unicode="&#xe9;" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM365 635h434q0 239 -209 239q-69 0 -113 -23.5t-70.5 -70t-41.5 -145.5z M407 1208l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xea;" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM232 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM365 635h434 q0 239 -209 239q-69 0 -113 -23.5t-70.5 -70t-41.5 -145.5z" />
<glyph unicode="&#xeb;" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM220 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5 q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM365 635h434q0 239 -209 239q-69 0 -113 -23.5t-70.5 -70t-41.5 -145.5zM664 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xec;" horiz-adv-x="549" d="M-53 1569h315l188 -361h-204zM145 0v1049h258v-1049h-258z" />
<glyph unicode="&#xed;" horiz-adv-x="549" d="M127 1208l189 361h315l-299 -361h-205zM145 0v1049h258v-1049h-258z" />
<glyph unicode="&#xee;" horiz-adv-x="549" d="M-80 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM145 0v1049h258v-1049h-258z" />
<glyph unicode="&#xef;" horiz-adv-x="549" d="M-92 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM145 0v1049h258v-1049h-258zM352 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xf0;" horiz-adv-x="1190" d="M92 520q0 156 55 278t158 186.5t238 64.5q41 0 94 -18.5t94 -49.5q-15 39 -65.5 122t-90.5 130l-225 -94l-67 149l180 76q-34 48 -184 156h274q49 -29 98 -78l187 78l69 -148l-131 -55q142 -147 232 -360t90 -435q0 -267 -126.5 -410t-375.5 -143q-247 0 -375.5 138 t-128.5 413zM358 520q0 -158 54.5 -241.5t183.5 -83.5t182 83.5t53 243.5q0 303 -237 303q-116 0 -176 -77.5t-60 -227.5z" />
<glyph unicode="&#xf1;" d="M145 0v1049h258v-136q82 82 175 124t182 42q161 0 240 -88t79 -291v-700h-258v578q0 164 -29.5 219t-111.5 55q-115 0 -277 -152v-700h-258zM197 1231q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5 t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182z" />
<glyph unicode="&#xf2;" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM269 1569h315l188 -361h-204zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5 t-56 -250.5z" />
<glyph unicode="&#xf3;" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5t-56 -250.5zM428 1208l189 361h315 l-299 -361h-205z" />
<glyph unicode="&#xf4;" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM242 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5 t-181 79.5q-126 0 -182 -81.5t-56 -250.5z" />
<glyph unicode="&#xf5;" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM191 1231q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5 q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5t-56 -250.5z" />
<glyph unicode="&#xf6;" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM230 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM358 522q0 -168 55.5 -247.5 t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5t-56 -250.5zM674 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xf7;" horiz-adv-x="1427" d="M133 479v205h1161v-205h-1161zM592 2v252h246v-252h-246zM592 911v252h246v-252h-246z" />
<glyph unicode="&#xf8;" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q141 0 246 -47l61 92h182l-118 -180q131 -145 131 -422q0 -262 -121 -407.5t-381 -145.5q-144 0 -248 45l-59 -90h-183l117 176q-131 141 -131 422zM358 522q0 -103 23 -184l328 493q-45 23 -113 23q-126 0 -182 -81.5t-56 -250.5z M483 215q47 -20 113 -20q125 0 180 78.5t55 248.5q0 108 -22 185z" />
<glyph unicode="&#xf9;" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5zM281 1569h315l188 -361h-204z" />
<glyph unicode="&#xfa;" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5zM440 1208l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xfb;" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5zM244 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209z" />
<glyph unicode="&#xfc;" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5zM232 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29 q-82 0 -111.5 34t-29.5 97zM676 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#xfd;" horiz-adv-x="1085" d="M-20 -365l55 224q84 -29 151 -29q58 0 102 35t91 145l27 62l-379 977h268l248 -670l254 670h262l-451 -1121q-55 -135 -107 -200t-121.5 -94t-174.5 -29q-114 0 -225 30zM368 1208l189 361h315l-299 -361h-205z" />
<glyph unicode="&#xfe;" d="M145 -395v1884h258v-533q127 123 316 123q198 0 301.5 -141.5t103.5 -405.5q0 -169 -51 -298t-146 -197t-227 -68q-174 0 -297 109v-473h-258zM403 291q41 -37 101.5 -65.5t124.5 -28.5q106 0 167.5 90.5t61.5 240.5q0 153 -53 238.5t-158 85.5q-63 0 -129.5 -29.5 t-114.5 -72.5v-459z" />
<glyph unicode="&#xff;" horiz-adv-x="1085" d="M-20 -365l55 224q84 -29 151 -29q58 0 102 35t91 145l27 62l-379 977h268l248 -670l254 670h262l-451 -1121q-55 -135 -107 -200t-121.5 -94t-174.5 -29q-114 0 -225 30zM179 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29 q-82 0 -111.5 34t-29.5 97zM623 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#x152;" horiz-adv-x="1919" d="M96 692q0 344 151.5 532.5t459.5 188.5q121 0 247 -29h865v-249h-568v-301h467v-250h-467v-326h568v-258h-861q-106 -29 -251 -29q-312 0 -461.5 189.5t-149.5 531.5zM387 692q0 -246 78 -358.5t264 -112.5q78 0 130 14.5t108 49.5v813q-100 65 -238 65q-182 0 -262 -110 t-80 -361z" />
<glyph unicode="&#x153;" horiz-adv-x="1874" d="M92 522q0 269 121 413t373 144q244 0 377 -149q57 63 144 106t230 43q219 0 334 -128.5t115 -366.5v-127h-696q6 -140 66.5 -201t193.5 -61q73 0 131.5 19t101.5 73l193 -137q-64 -91 -162 -136t-260 -45q-264 0 -391 152q-139 -152 -367 -152q-264 0 -384 146.5 t-120 406.5zM358 522q0 -168 55.5 -247.5t182.5 -79.5q117 0 176 74.5t59 252.5q0 184 -58 258t-177 74q-126 0 -182 -81.5t-56 -250.5zM1096 635h434q0 239 -209 239q-68 0 -113 -23.5t-71 -70.5t-41 -145z" />
<glyph unicode="&#x178;" horiz-adv-x="1188" d="M18 1384h308l270 -579l276 579h297l-434 -856v-528h-284v522zM226 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM670 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102 t-110 -29q-82 0 -111.5 34t-29.5 97z" />
<glyph unicode="&#x2c6;" horiz-adv-x="1044" d="M164 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209z" />
<glyph unicode="&#x2dc;" horiz-adv-x="1044" d="M113 1231q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182z" />
<glyph unicode="&#x2000;" horiz-adv-x="971" />
<glyph unicode="&#x2001;" horiz-adv-x="1942" />
<glyph unicode="&#x2002;" horiz-adv-x="971" />
<glyph unicode="&#x2003;" horiz-adv-x="1942" />
<glyph unicode="&#x2004;" horiz-adv-x="647" />
<glyph unicode="&#x2005;" horiz-adv-x="485" />
<glyph unicode="&#x2006;" horiz-adv-x="323" />
<glyph unicode="&#x2007;" horiz-adv-x="323" />
<glyph unicode="&#x2008;" horiz-adv-x="242" />
<glyph unicode="&#x2009;" horiz-adv-x="388" />
<glyph unicode="&#x200a;" horiz-adv-x="107" />
<glyph unicode="&#x2010;" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
<glyph unicode="&#x2011;" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
<glyph unicode="&#x2012;" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
<glyph unicode="&#x2013;" horiz-adv-x="1044" d="M31 424v205h983v-205h-983z" />
<glyph unicode="&#x2014;" horiz-adv-x="2068" d="M31 424v205h2007v-205h-2007z" />
<glyph unicode="&#x2018;" horiz-adv-x="584" d="M129 967q0 123 42 234.5t91 182.5h193q-62 -86 -91.5 -164.5t-33.5 -117.5q65 -4 95 -42t30 -114q0 -74 -35 -117t-131 -43q-160 0 -160 181z" />
<glyph unicode="&#x2019;" horiz-adv-x="584" d="M129 815q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-193z" />
<glyph unicode="&#x201a;" horiz-adv-x="584" d="M129 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-193q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113z" />
<glyph unicode="&#x201c;" horiz-adv-x="1047" d="M129 967q0 123 42 234.5t91 182.5h193q-62 -86 -91.5 -164.5t-33.5 -117.5q65 -4 95 -42t30 -114q0 -74 -35 -117t-131 -43q-160 0 -160 181zM592 967q0 123 42 234.5t91 182.5h193q-62 -86 -91.5 -164.5t-33.5 -117.5q65 -4 95 -42t30 -114q0 -74 -35 -117t-131 -43 q-160 0 -160 181z" />
<glyph unicode="&#x201d;" horiz-adv-x="1047" d="M129 815q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-193zM592 815q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-92 -183.5h-192z" />
<glyph unicode="&#x201e;" horiz-adv-x="1047" d="M129 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-193q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113zM592 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-92 -183.5h-192q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113z" />
<glyph unicode="&#x2022;" horiz-adv-x="760" d="M92 745q0 78 38.5 145t106.5 105.5t144 38.5q115 0 201 -83t86 -206q0 -118 -84 -202t-203 -84q-76 0 -143 37.5t-106.5 104.5t-39.5 144z" />
<glyph unicode="&#x2026;" horiz-adv-x="2068" d="M188 145q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118zM870 145q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118zM1552 145q0 82 36 121t126 39q92 0 128 -38t36 -122 q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118z" />
<glyph unicode="&#x202f;" horiz-adv-x="388" />
<glyph unicode="&#x2039;" horiz-adv-x="862" d="M61 524l420 471h299l-420 -471l420 -471h-299z" />
<glyph unicode="&#x203a;" horiz-adv-x="862" d="M82 53l420 471l-420 471h299l420 -471l-420 -471h-299z" />
<glyph unicode="&#x205f;" horiz-adv-x="485" />
<glyph unicode="&#x20ac;" horiz-adv-x="1280" d="M20 444l39 191h58v119h-97l43 190h76q96 469 592 469q197 0 321 -68.5t189 -179.5l-201 -161q-53 78 -90.5 107.5t-85.5 44.5t-116 15q-132 0 -206.5 -55t-107.5 -172h522l-43 -190h-505v-119h487l-39 -191h-424q35 -127 110.5 -179t205.5 -52q92 0 162 40t143 146 l209 -149q-80 -118 -149 -174t-157 -80.5t-215 -24.5q-505 0 -602 473h-119z" />
<glyph unicode="&#x2122;" horiz-adv-x="1692" d="M43 1208v176h639v-176h-219v-538h-199v538h-221zM836 670v714h215l149 -303l152 303h215v-714h-193v391l-117 -232h-110l-119 234v-393h-192z" />
<glyph unicode="&#x25fc;" horiz-adv-x="1050" d="M0 0v1050h1050v-1050h-1050z" />
<hkern u1="&#x28;" u2="j" k="-164" />
<hkern u1="&#x2a;" u2="&#xc5;" k="123" />
<hkern u1="&#x2a;" u2="&#xc4;" k="123" />
<hkern u1="&#x2a;" u2="&#xc3;" k="123" />
<hkern u1="&#x2a;" u2="&#xc2;" k="123" />
<hkern u1="&#x2a;" u2="&#xc1;" k="123" />
<hkern u1="&#x2a;" u2="&#xc0;" k="123" />
<hkern u1="&#x2a;" u2="T" k="-92" />
<hkern u1="&#x2a;" u2="J" k="174" />
<hkern u1="&#x2a;" u2="A" k="123" />
<hkern u1="A" u2="&#x3f;" k="102" />
<hkern u1="A" u2="&#x2a;" k="123" />
<hkern u1="F" u2="&#xef;" k="-61" />
<hkern u1="F" u2="&#xee;" k="-20" />
<hkern u1="K" u2="&#xef;" k="-10" />
<hkern u1="K" u2="&#xee;" k="41" />
<hkern u1="L" u2="&#xd8;" k="10" />
<hkern u1="L" u2="&#x3f;" k="102" />
<hkern u1="L" u2="&#x2a;" k="205" />
<hkern u1="T" u2="&#xef;" k="-123" />
<hkern u1="T" u2="&#xee;" k="-61" />
<hkern u1="T" u2="&#xe4;" k="123" />
<hkern u1="T" u2="&#xe3;" k="123" />
<hkern u1="T" u2="&#xe2;" k="164" />
<hkern u1="T" u2="&#x3f;" k="-82" />
<hkern u1="T" u2="&#x2a;" k="-92" />
<hkern u1="V" u2="&#xef;" k="-72" />
<hkern u1="V" u2="&#xee;" k="-10" />
<hkern u1="W" u2="&#xef;" k="-72" />
<hkern u1="W" u2="&#xee;" k="-10" />
<hkern u1="X" u2="&#xef;" k="-82" />
<hkern u1="X" u2="&#xee;" k="-41" />
<hkern u1="Y" u2="&#xef;" k="-102" />
<hkern u1="Y" u2="&#xee;" k="-20" />
<hkern u1="[" u2="j" k="-164" />
<hkern u1="f" u2="&#xef;" k="-225" />
<hkern u1="f" u2="&#xee;" k="-102" />
<hkern u1="f" u2="&#xec;" k="-82" />
<hkern u1="f" u2="&#x3f;" k="-123" />
<hkern u1="f" u2="&#x2a;" k="-143" />
<hkern u1="f" u2="&#x21;" k="-61" />
<hkern u1="j" u2="&#xff;" k="-41" />
<hkern u1="j" u2="&#xfd;" k="-41" />
<hkern u1="j" u2="y" k="-41" />
<hkern u1="&#x7b;" u2="j" k="-164" />
<hkern u1="&#xa1;" u2="&#x178;" k="102" />
<hkern u1="&#xa1;" u2="&#xdd;" k="102" />
<hkern u1="&#xa1;" u2="Y" k="102" />
<hkern u1="&#xa1;" u2="W" k="61" />
<hkern u1="&#xa1;" u2="V" k="61" />
<hkern u1="&#xbf;" u2="&#x178;" k="184" />
<hkern u1="&#xbf;" u2="&#xdd;" k="184" />
<hkern u1="&#xbf;" u2="Y" k="184" />
<hkern u1="&#xbf;" u2="W" k="123" />
<hkern u1="&#xbf;" u2="V" k="123" />
<hkern u1="&#xbf;" u2="T" k="184" />
<hkern u1="&#xc0;" u2="&#x3f;" k="102" />
<hkern u1="&#xc0;" u2="&#x2a;" k="123" />
<hkern u1="&#xc1;" u2="&#x3f;" k="102" />
<hkern u1="&#xc1;" u2="&#x2a;" k="123" />
<hkern u1="&#xc2;" u2="&#x3f;" k="102" />
<hkern u1="&#xc2;" u2="&#x2a;" k="123" />
<hkern u1="&#xc3;" u2="&#x3f;" k="102" />
<hkern u1="&#xc3;" u2="&#x2a;" k="123" />
<hkern u1="&#xc4;" u2="&#x3f;" k="102" />
<hkern u1="&#xc4;" u2="&#x2a;" k="123" />
<hkern u1="&#xc5;" u2="&#x3f;" k="102" />
<hkern u1="&#xc5;" u2="&#x2a;" k="123" />
<hkern u1="&#xdd;" u2="&#xef;" k="-102" />
<hkern u1="&#xdd;" u2="&#xee;" k="-20" />
<hkern u1="&#xde;" u2="X" k="123" />
<hkern u1="&#xde;" u2="W" k="31" />
<hkern u1="&#xde;" u2="V" k="31" />
<hkern u1="&#xde;" u2="T" k="82" />
<hkern u1="&#x178;" u2="&#xef;" k="-102" />
<hkern u1="&#x178;" u2="&#xee;" k="-20" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="T" k="164" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="V" k="82" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="W" k="61" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Y,Yacute,Ydieresis" k="113" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quotedbl,quotesingle" k="123" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="-41" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="colon,semicolon" k="-41" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="t" k="31" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="z" k="-31" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="trademark" k="164" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quoteleft,quotedblleft" k="184" />
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quoteright,quotedblright" k="164" />
<hkern g1="B" g2="J" k="61" />
<hkern g1="B" g2="T" k="41" />
<hkern g1="B" g2="V" k="41" />
<hkern g1="B" g2="W" k="41" />
<hkern g1="B" g2="Y,Yacute,Ydieresis" k="51" />
<hkern g1="C,Ccedilla" g2="J" k="20" />
<hkern g1="C,Ccedilla" g2="V" k="31" />
<hkern g1="C,Ccedilla" g2="W" k="31" />
<hkern g1="C,Ccedilla" g2="X" k="31" />
<hkern g1="C,Ccedilla" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="F" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="102" />
<hkern g1="F" g2="J" k="246" />
<hkern g1="F" g2="X" k="41" />
<hkern g1="F" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="231" />
<hkern g1="F" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
<hkern g1="F" g2="t" k="20" />
<hkern g1="F" g2="z" k="61" />
<hkern g1="F" g2="S" k="20" />
<hkern g1="F" g2="Z" k="41" />
<hkern g1="F" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41" />
<hkern g1="F" g2="i,j,igrave,iacute,icircumflex,idieresis" k="41" />
<hkern g1="F" g2="m,n,p,r,ntilde" k="72" />
<hkern g1="F" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
<hkern g1="F" g2="s" k="82" />
<hkern g1="F" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41" />
<hkern g1="F" g2="v" k="41" />
<hkern g1="F" g2="w" k="41" />
<hkern g1="F" g2="x" k="82" />
<hkern g1="F" g2="y,yacute,ydieresis" k="61" />
<hkern g1="G" g2="J" k="51" />
<hkern g1="G" g2="T" k="41" />
<hkern g1="G" g2="V" k="41" />
<hkern g1="G" g2="W" k="41" />
<hkern g1="G" g2="X" k="31" />
<hkern g1="G" g2="Y,Yacute,Ydieresis" k="61" />
<hkern g1="J" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
<hkern g1="J" g2="J" k="61" />
<hkern g1="J" g2="X" k="20" />
<hkern g1="J" g2="AE" k="61" />
<hkern g1="K" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
<hkern g1="K" g2="T" k="31" />
<hkern g1="K" g2="V" k="51" />
<hkern g1="K" g2="W" k="51" />
<hkern g1="K" g2="X" k="41" />
<hkern g1="K" g2="Y,Yacute,Ydieresis" k="82" />
<hkern g1="K" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
<hkern g1="K" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41" />
<hkern g1="K" g2="t" k="61" />
<hkern g1="K" g2="S" k="51" />
<hkern g1="K" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="61" />
<hkern g1="K" g2="i,j,igrave,iacute,icircumflex,idieresis" k="41" />
<hkern g1="K" g2="m,n,p,r,ntilde" k="41" />
<hkern g1="K" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
<hkern g1="K" g2="s" k="61" />
<hkern g1="K" g2="u,ugrave,uacute,ucircumflex,udieresis" k="61" />
<hkern g1="K" g2="v" k="51" />
<hkern g1="K" g2="w" k="51" />
<hkern g1="K" g2="y,yacute,ydieresis" k="102" />
<hkern g1="K" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
<hkern g1="L" g2="T" k="143" />
<hkern g1="L" g2="V" k="102" />
<hkern g1="L" g2="W" k="102" />
<hkern g1="L" g2="Y,Yacute,Ydieresis" k="143" />
<hkern g1="L" g2="quotedbl,quotesingle" k="287" />
<hkern g1="L" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="-20" />
<hkern g1="L" g2="colon,semicolon" k="-41" />
<hkern g1="L" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
<hkern g1="L" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41" />
<hkern g1="L" g2="t" k="31" />
<hkern g1="L" g2="trademark" k="287" />
<hkern g1="L" g2="quoteleft,quotedblleft" k="328" />
<hkern g1="L" g2="quoteright,quotedblright" k="328" />
<hkern g1="L" g2="S" k="10" />
<hkern g1="L" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="L" g2="v" k="61" />
<hkern g1="L" g2="w" k="61" />
<hkern g1="L" g2="y,yacute,ydieresis" k="102" />
<hkern g1="L" g2="copyright,registered" k="61" />
<hkern g1="P,Thorn" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="102" />
<hkern g1="P,Thorn" g2="J" k="164" />
<hkern g1="P,Thorn" g2="T" k="20" />
<hkern g1="P,Thorn" g2="V" k="-10" />
<hkern g1="P,Thorn" g2="W" k="-10" />
<hkern g1="P,Thorn" g2="X" k="20" />
<hkern g1="P,Thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="266" />
<hkern g1="P,Thorn" g2="S" k="-20" />
<hkern g1="P,Thorn" g2="Z" k="41" />
<hkern g1="P,Thorn" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20" />
<hkern g1="P,Thorn" g2="AE" k="82" />
<hkern g1="P,Thorn" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41" />
<hkern g1="R" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
<hkern g1="R" g2="T" k="20" />
<hkern g1="R" g2="V" k="41" />
<hkern g1="R" g2="W" k="41" />
<hkern g1="R" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="S" g2="J" k="41" />
<hkern g1="S" g2="T" k="41" />
<hkern g1="S" g2="V" k="31" />
<hkern g1="S" g2="W" k="31" />
<hkern g1="S" g2="X" k="20" />
<hkern g1="S" g2="Y,Yacute,Ydieresis" k="61" />
<hkern g1="T" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="164" />
<hkern g1="T" g2="J" k="143" />
<hkern g1="T" g2="X" k="20" />
<hkern g1="T" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
<hkern g1="T" g2="colon,semicolon" k="82" />
<hkern g1="T" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="51" />
<hkern g1="T" g2="t" k="20" />
<hkern g1="T" g2="z" k="156" />
<hkern g1="T" g2="trademark" k="-82" />
<hkern g1="T" g2="quoteleft,quotedblleft" k="-41" />
<hkern g1="T" g2="quoteright,quotedblright" k="-41" />
<hkern g1="T" g2="S" k="41" />
<hkern g1="T" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="205" />
<hkern g1="T" g2="i,j,igrave,iacute,icircumflex,idieresis" k="41" />
<hkern g1="T" g2="m,n,p,r,ntilde" k="184" />
<hkern g1="T" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="205" />
<hkern g1="T" g2="s" k="205" />
<hkern g1="T" g2="u,ugrave,uacute,ucircumflex,udieresis" k="143" />
<hkern g1="T" g2="v" k="184" />
<hkern g1="T" g2="w" k="184" />
<hkern g1="T" g2="x" k="205" />
<hkern g1="T" g2="y,yacute,ydieresis" k="143" />
<hkern g1="T" g2="AE" k="184" />
<hkern g1="T" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
<hkern g1="T" g2="copyright,registered" k="102" />
<hkern g1="T" g2="hyphen,endash,emdash" k="102" />
<hkern g1="T" g2="guillemotleft,guilsinglleft" k="143" />
<hkern g1="T" g2="guillemotright,guilsinglright" k="61" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="J" k="51" />
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="X" k="41" />
<hkern g1="W" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="61" />
<hkern g1="W" g2="J" k="143" />
<hkern g1="W" g2="X" k="20" />
<hkern g1="W" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="W" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="143" />
<hkern g1="W" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
<hkern g1="W" g2="t" k="20" />
<hkern g1="W" g2="z" k="41" />
<hkern g1="W" g2="S" k="10" />
<hkern g1="W" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="61" />
<hkern g1="W" g2="m,n,p,r,ntilde" k="61" />
<hkern g1="W" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
<hkern g1="W" g2="s" k="61" />
<hkern g1="W" g2="u,ugrave,uacute,ucircumflex,udieresis" k="61" />
<hkern g1="W" g2="x" k="31" />
<hkern g1="W" g2="y,yacute,ydieresis" k="20" />
<hkern g1="W" g2="AE" k="41" />
<hkern g1="W" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
<hkern g1="W" g2="b,h,k,l,germandbls,thorn" k="31" />
<hkern g1="X" g2="T" k="20" />
<hkern g1="X" g2="V" k="20" />
<hkern g1="X" g2="W" k="20" />
<hkern g1="X" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="X" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
<hkern g1="X" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41" />
<hkern g1="X" g2="S" k="20" />
<hkern g1="X" g2="m,n,p,r,ntilde" k="31" />
<hkern g1="X" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
<hkern g1="X" g2="u,ugrave,uacute,ucircumflex,udieresis" k="82" />
<hkern g1="X" g2="v" k="41" />
<hkern g1="X" g2="w" k="41" />
<hkern g1="X" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="31" />
<hkern g1="X" g2="copyright,registered" k="61" />
<hkern g1="Y,Yacute,Ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="113" />
<hkern g1="Y,Yacute,Ydieresis" g2="J" k="184" />
<hkern g1="Y,Yacute,Ydieresis" g2="V" k="41" />
<hkern g1="Y,Yacute,Ydieresis" g2="W" k="41" />
<hkern g1="Y,Yacute,Ydieresis" g2="X" k="41" />
<hkern g1="Y,Yacute,Ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="205" />
<hkern g1="Y,Yacute,Ydieresis" g2="colon,semicolon" k="41" />
<hkern g1="Y,Yacute,Ydieresis" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="61" />
<hkern g1="Y,Yacute,Ydieresis" g2="t" k="31" />
<hkern g1="Y,Yacute,Ydieresis" g2="z" k="102" />
<hkern g1="Y,Yacute,Ydieresis" g2="S" k="61" />
<hkern g1="Y,Yacute,Ydieresis" g2="Z" k="20" />
<hkern g1="Y,Yacute,Ydieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="123" />
<hkern g1="Y,Yacute,Ydieresis" g2="i,j,igrave,iacute,icircumflex,idieresis" k="41" />
<hkern g1="Y,Yacute,Ydieresis" g2="m,n,p,r,ntilde" k="133" />
<hkern g1="Y,Yacute,Ydieresis" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="143" />
<hkern g1="Y,Yacute,Ydieresis" g2="s" k="123" />
<hkern g1="Y,Yacute,Ydieresis" g2="u,ugrave,uacute,ucircumflex,udieresis" k="102" />
<hkern g1="Y,Yacute,Ydieresis" g2="v" k="82" />
<hkern g1="Y,Yacute,Ydieresis" g2="w" k="82" />
<hkern g1="Y,Yacute,Ydieresis" g2="x" k="82" />
<hkern g1="Y,Yacute,Ydieresis" g2="AE" k="143" />
<hkern g1="Y,Yacute,Ydieresis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
<hkern g1="Y,Yacute,Ydieresis" g2="copyright,registered" k="82" />
<hkern g1="Y,Yacute,Ydieresis" g2="guillemotleft,guilsinglleft" k="102" />
<hkern g1="Y,Yacute,Ydieresis" g2="b,h,k,l,germandbls,thorn" k="41" />
<hkern g1="Z" g2="Y,Yacute,Ydieresis" k="31" />
<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="t" k="20" />
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="20" />
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="quoteleft,quotedblleft" k="61" />
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="quoteright,quotedblright" k="61" />
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="v" k="20" />
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="x" k="31" />
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="y,yacute,ydieresis" k="10" />
<hkern g1="h,m,n,ntilde" g2="v" k="10" />
<hkern g1="h,m,n,ntilde" g2="w" k="10" />
<hkern g1="f" g2="quotedbl,quotesingle" k="-123" />
<hkern g1="f" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="41" />
<hkern g1="f" g2="trademark" k="-164" />
<hkern g1="f" g2="quoteleft,quotedblleft" k="-102" />
<hkern g1="f" g2="quoteright,quotedblright" k="-123" />
<hkern g1="f" g2="parenright,bracketright,braceright" k="-164" />
<hkern g1="k" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31" />
<hkern g1="k" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
<hkern g1="k" g2="s" k="20" />
<hkern g1="k" g2="v" k="20" />
<hkern g1="k" g2="w" k="20" />
<hkern g1="r" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="266" />
<hkern g1="r" g2="quoteleft,quotedblleft" k="-41" />
<hkern g1="r" g2="quoteright,quotedblright" k="-41" />
<hkern g1="r" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20" />
<hkern g1="r" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
<hkern g1="r" g2="s" k="20" />
<hkern g1="r" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="-20" />
<hkern g1="r" g2="guillemotright,guilsinglright" k="-41" />
<hkern g1="s" g2="t" k="20" />
<hkern g1="s" g2="v" k="41" />
<hkern g1="s" g2="w" k="41" />
<hkern g1="s" g2="x" k="20" />
<hkern g1="t" g2="z" k="-31" />
<hkern g1="t" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="-20" />
<hkern g1="t" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="t" g2="u,ugrave,uacute,ucircumflex,udieresis" k="10" />
<hkern g1="t" g2="v" k="10" />
<hkern g1="t" g2="w" k="10" />
<hkern g1="t" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="10" />
<hkern g1="w" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="61" />
<hkern g1="w" g2="s" k="20" />
<hkern g1="w" g2="y,yacute,ydieresis" k="10" />
<hkern g1="x" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="31" />
<hkern g1="y,yacute,ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="143" />
<hkern g1="y,yacute,ydieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31" />
<hkern g1="y,yacute,ydieresis" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
<hkern g1="y,yacute,ydieresis" g2="s" k="31" />
<hkern g1="y,yacute,ydieresis" g2="v" k="20" />
<hkern g1="y,yacute,ydieresis" g2="w" k="20" />
<hkern g1="y,yacute,ydieresis" g2="x" k="31" />
<hkern g1="y,yacute,ydieresis" g2="parenright,bracketright,braceright" k="61" />
<hkern g1="z" g2="z" k="-31" />
<hkern g1="colon,semicolon" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="-41" />
<hkern g1="colon,semicolon" g2="J" k="-41" />
<hkern g1="colon,semicolon" g2="T" k="82" />
<hkern g1="colon,semicolon" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="-41" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="J" k="-41" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="T" k="184" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="V" k="143" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="W" k="143" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="Y,Yacute,Ydieresis" k="205" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="quoteleft,quotedblleft" k="174" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="quoteright,quotedblright" k="174" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="v" k="61" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="w" k="61" />
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="AE" k="-61" />
<hkern g1="guillemotleft,guilsinglleft" g2="T" k="61" />
<hkern g1="guillemotright,guilsinglright" g2="T" k="143" />
<hkern g1="guillemotright,guilsinglright" g2="Y,Yacute,Ydieresis" k="102" />
<hkern g1="hyphen,endash,emdash" g2="T" k="102" />
<hkern g1="parenleft,bracketleft,braceleft" g2="y,yacute,ydieresis" k="-61" />
<hkern g1="quoteleft,quotedblleft" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="184" />
<hkern g1="quoteleft,quotedblleft" g2="J" k="246" />
<hkern g1="quoteleft,quotedblleft" g2="T" k="-41" />
<hkern g1="quoteleft,quotedblleft" g2="quoteleft,quotedblleft" k="113" />
<hkern g1="quoteleft,quotedblleft" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
<hkern g1="quoteleft,quotedblleft" g2="AE" k="184" />
<hkern g1="quoteright,quotedblright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="184" />
<hkern g1="quoteright,quotedblright" g2="J" k="246" />
<hkern g1="quoteright,quotedblright" g2="T" k="-41" />
<hkern g1="quoteright,quotedblright" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="174" />
<hkern g1="quoteright,quotedblright" g2="quoteright,quotedblright" k="113" />
<hkern g1="quoteright,quotedblright" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
<hkern g1="quoteright,quotedblright" g2="AE" k="184" />
<hkern g1="quotedbl,quotesingle" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="123" />
<hkern g1="quotedbl,quotesingle" g2="J" k="225" />
<hkern g1="V" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="82" />
<hkern g1="V" g2="J" k="143" />
<hkern g1="V" g2="X" k="20" />
<hkern g1="V" g2="Y,Yacute,Ydieresis" k="41" />
<hkern g1="V" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="143" />
<hkern g1="V" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
<hkern g1="V" g2="t" k="20" />
<hkern g1="V" g2="z" k="41" />
<hkern g1="V" g2="S" k="10" />
<hkern g1="V" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="61" />
<hkern g1="V" g2="m,n,p,r,ntilde" k="61" />
<hkern g1="V" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
<hkern g1="V" g2="s" k="61" />
<hkern g1="V" g2="u,ugrave,uacute,ucircumflex,udieresis" k="61" />
<hkern g1="V" g2="x" k="31" />
<hkern g1="V" g2="y,yacute,ydieresis" k="20" />
<hkern g1="V" g2="AE" k="41" />
<hkern g1="V" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
<hkern g1="V" g2="b,h,k,l,germandbls,thorn" k="31" />
<hkern g1="v" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="61" />
<hkern g1="v" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20" />
<hkern g1="v" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
<hkern g1="v" g2="s" k="20" />
<hkern g1="v" g2="y,yacute,ydieresis" k="10" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 77 KiB

Some files were not shown because too many files have changed in this diff Show More