Java 导出谷歌 Chrome 浏览器所有已安装插件教程

mvn 依赖 <dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.8.0</version> </dependency>原理很简单,获取 Chrome 浏览器插件默认存储位置,遍历出插件信息并批量复制插件到 下载 目录,可以在其它 Chrome 浏览器中以 加载已解压拓展程序 安装插件,适用于在 chrome 插件商城下载某插件,但 edge 或 360 等浏览器商城里没该插件,互联网第三方网站也没有,此时这种直接提取方式最方便,代码import java.io.File;import java.io.FileReader;import java.io.IOException;import java.nio.file.*;import java.util.Arrays;import java.util.Comparator;import java.util.List;import java.util.stream.Collectors;import org.apache.commons.io.FileUtils;import org.json.simple.JSONObject;import org.json.simple.parser.JSONParser;public class Main {public static void main(String[] args) throws IOException { // 获取 Windows 用户名 String username = System.getenv("USERNAME"); // 构建 Chrome 插件数据目录路径 String chromeExtensionsDir = "C:\\Users\\" + username + "\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Extensions"; System.out.println(chromeExtensionsDir); File extensionsDir = new File(chromeExtensionsDir); if (extensionsDir.exists() && extensionsDir.isDirectory()) {File[] extensionFolders = extensionsDir.listFiles((dir, name) -> name.length() == 32); if (extensionFolders != null) {for (File extensionFolder : extensionFolders) {String extensionId = extensionFolder.getName(); System.out.println("Processing extension with ID: " + extensionId); // 寻找最新修改的子文件夹 File latestSubFolder = findLatestSubFolder(extensionFolder); if (latestSubFolder != null) {String version = latestSubFolder.getName(); // 解析 manifest.json 文件 String pluginName = parseManifestForName(latestSubFolder); // 构建下载目录路径 String downloadDir = System.getenv("USERPROFILE") + "\\Downloads"; File downloadDirectory = new File(downloadDir); // 复制文件夹到下载目录// copyFolder(latestSubFolder, downloadDirectory, pluginName + "_" + version); CopyOption[] options = new CopyOption[]{ StandardCopyOption.REPLACE_EXISTING, // 替换已存在的文件 StandardCopyOption.COPY_ATTRIBUTES // 复制文件属性 }; String pluginFullName = pluginName.replace(" ", "") + "_" + version; System.out.println("pluginFullName: " + pluginFullName); FileUtils.copyDirectory(latestSubFolder, new File(downloadDirectory + "\\" + pluginFullName) , null, false, options); } } } } } private static File findLatestSubFolder(File folder) {File[] subFolders = folder.listFiles((dir, name) -> dir.isDirectory()); List<File> subFoldersList = Arrays.stream(subFolders) .filter(File::isDirectory) .collect(Collectors.toList()); for (File subFolder : subFoldersList) {System.out.println("version: " + subFolder.getName()); } if (!subFoldersList.isEmpty()) {return subFoldersList.stream() .max(Comparator.comparingLong(File::lastModified)) .orElse(null); } return null; } private static String parseManifestForName(File folder) {File manifestFile = new File(folder, "manifest.json"); JSONParser parser = new JSONParser(); try (FileReader reader = new FileReader(manifestFile)) {JSONObject jsonObject = (JSONObject) parser.parse(reader); String name = (String) jsonObject.get("name"); if (name.contains("MSG_")) { // 假设 action 是一个 JSONObject JSONObject actionObject = (JSONObject) jsonObject.get("action"); if (actionObject != null) { // 获取 default_title 字段值 String defaultTitle = (String) actionObject.get("default_title"); if (defaultTitle != null) {name = defaultTitle;} } } return name; } catch (IOException | org.json.simple.parser.ParseException e) {e.printStackTrace(); return null; } } private static void copyFolder(File sourceFolder, File targetDirectory, String newFolderName) {File newFolder = new File(targetDirectory, newFolderName); try {if (!newFolder.exists()) {boolean created = newFolder.mkdir(); if (!created) {System.out.println("Failed to create new folder: " + newFolderName); return; } } Files.walk(sourceFolder.toPath()) .sorted(Comparator.reverseOrder()) .forEach(path -> { try {Path targetPath = Paths.get(targetDirectory.getPath(), newFolderName, path.toString().substring(sourceFolder.getPath().length())); Files.copy(path, targetPath); } catch (IOException e) {e.printStackTrace(); } }); } catch (IOException e) {e.printStackTrace(); } }}

免费常用公共 API 接口地址

GitHub - public-apis/public-apis: A collective list of free APIs300k star,该仓库包含各种 API 接口信息,方便使用或测试。

DrissionPage 爬虫 / 自动化测试工具

官网:DrissionPage 官网 DrissionPage 是一个基于 python 的网页自动化工具。 它既能控制浏览器,也能收发数据包,还能把两者合而为一。 可兼顾浏览器自动化的便利性和 requests 的高效率。

Java、python 学习的 GitHub 项目

GitHub - Snailclimb/JavaGuide: 「Java 学习 + 面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!GitHub - Snailclimb/JavaGuide-Interview: JavaGuide 面试突击版 Java 面试指南 | JavaGuideGitHub - gxcuizy/Python: Python3 编写的各种大小程序,包含从零学 Python 系列、12306 抢票、省市区地址库以及系列网站爬虫等学习源码

免费编程助手 double,ChatGPT4,Claude3 免费用

打开 VS code,插件商店搜索“double”后安装,然后打开 vscode 侧边栏,将 double 拖动到侧边栏即可。登录可选择 github 登录,登录后可选 GPT4,Claude3 模型。

navicat 无限试用脚本

支持 Windows 和 Mac! Windows bat:@echo offecho Delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration[version and language]for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium" /s | findstr /L Registration"') do (reg delete %%i /va /f)echo.echo Delete Info folder under HKEY_CURRENT_USER\Software\Classes\CLSIDfor /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\Classes\CLSID" /s | findstr /E Info"') do (reg delete %%i /va /f)echo.echo Finishpause 激活文件下载地址:https://txx.lanzoub.com/iclta01fbi4f

AI 正则表达式在线生成教程,一秒出正则

使用起来很简单,使用 Regex.ai 书写正则表达式,只需要三步:输入你的文本 找出你需要的数据(选中即可)点击生成,完毕官网:Regex.ai - Artificial Intelligence Regular Expression Generator来源:Regex.ai - 让 AI 帮你写正则表达式|再也不用学习正则了 - 小众软件

可一键部署应用的网站 快速部署 Alist 等应用

可一键部署应用的网站(可免费使用)Zeabur - Deploy your service with one clickRailway-500h 运行时间 Render · The Easiest Cloud For All Your Apps【教程】只需一个浏览器!免费搭建永久 Alist 网盘,有手就行! 哔哩哔哩 bilibili

随身 WIFI 板子安装 LNMP 教程

装 LNMP,准备工作 # 连 wifinmtui# 更新源apt-get update# 装 ssl 证书sudo apt install apt-transport-https ca-certificates# 修改源文件权限 使其能用 xftp 直接编辑chmod 777 /etc/apt/sources.listsources.list 源内容,可根据个人喜好选择源 # deb http://mirrors.163.com/debian/ bullseye main contrib non-free# deb http://security.debian.org/ bullseye-security main contrib non-free# 默认注释了源码镜像以提高 apt update 速度# 清华大学的软件源deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free# 阿里云的软件源# deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib# deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib# deb https://mirrors.aliyun.com/debian-security/ bullseye-security main# deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main# deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib# deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib# deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib# deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib# 中科大的软件源# deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free # deb-src https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free # deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free # deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free # deb https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free # deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free # deb https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free # deb-src https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free 继续执行命令安装 PHP、Nginxapt-get updateapt-get upgrade# 安装 PHP 拓展sudo apt-get install -y php php-fpm php-curl php-gd php-intl php-mbstring php-mysql php-imap php-opcache php-sqlite3 php-xml php-xmlrpc php-zip# 查看 php 版本 验证是否成功php -vsudo apt-get install nginx# 验证 nginx 是否成功 安装 curl、nano 编辑器、wgetapt-get install curl nano wgetcurl 127.0.0.1# 找到 index 配置,添加 index.phpsudo nano /etc/nginx/sites-enabled/default 找到# pass PHP scripts to FastCGI server 后面的 location 删除注释如下 location ~ \.php$ {include snippets/fastcgi-php.conf;## # With php-fpm (or other unix sockets):fastcgi_pass unix:/run/php/php7.3-fpm.sock;# # With php-cgi (or other tcp sockets):#fastcgi_pass 127.0.0.1:9000;} 重启 nginx 验证 phpsudo systemctl restart nginxsudo nano /var/www/html/phpinfo.php 新建 phpinfo.php 文件验证,文件内容为 <?phpphpinfo(); 电脑浏览器访问:http://192.168.68.1/phpinfo.php 即可看到 PHP 探针信息。 安装 MySqlsudo apt-get install mariadb-server mariadb-clientsudo mysql_secure_installation# 参考sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf# 将 bind-address 这行注释掉# 或者将 127.0.0.1 这个值改为 0.0.0.0# 然后重启sudo systemctl restart mariadb.service 设置远程访问权限 mysql -u root -puse mysql;# 例如账号 root 密码 rootpwdGRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'rootpwd' WITH GRANT OPTION;flush privileges;# ctrl + c 退出界面,执行命令重启服务sudo systemctl restart mariadb.service# 查看 mysql 服务状态sudo systemctl status mariadb.service 安装 Z -Blog 示例 cd /var/www/html/# 上传程序包到该目录wget https://update.zblogcn.com/zip/Z-BlogPHP_1_7_2_3060_Tenet.zipunzip Z-BlogPHP_1_7_2_3060_Tenet.zip# 返回上一级,将网站目录文件全部授权 777(个人之便)cd ..chmod -R 777 ./html 然后访问:http://192.168.68.1 即可安装网站程序。执行命令:ip addr 获取棒子连接 WIFI 的地址,记下来会用到。 拔掉随身 WIFI 随便插在某个插头上,等几分钟后访问 ip addr 获取的 ip 即可访问网站。 后续也可以内网穿透来公网访问,根据个人喜好来安装吧!

IDEA2022 最新版激活码

直接复制粘贴到 activation code 即可激活:F5TRIB85C7-eyJsaWNlbnNlSWQiOiJGNVRSSUI4NUM3IiwibGljZW5zZWVOYW1lIjoiU2hhbmRvbmcgVW5pdmVyc2l0eSIsImFzc2lnbmVlTmFtZSI6ImFvIGxpIiwiYXNzaWduZWVFbWFpbCI6IjI4Njc4MTYyNjhAcXEuY29tIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiRm9yIGVkdWNhdGlvbmFsIHVzZSBvbmx5IiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiRE0iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTRiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJEUyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJBQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUlNWIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IkRDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSU1UiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkRQIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBEQiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQV1MiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNJIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBQUyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQQ1dNUCIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQR08iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFBDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBSQiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQU1ciLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUlMiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAxMjAyMjA3MTVMUEFBMDA2MDA4IiwiaGFzaCI6IjMzMjc1MzQ1LzE2OTgzMDkyOjE3NTA1Njk2NTMiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-EOufLPiykodPlQXl6v9pAd7geesvSLDca88HhDihCP5LSabX33BwTVfkSQaLUah0qyH84Shzp2NZv+LZK2dTXwwF1XCYq/9Lmt3iwlFovsrifhrfTGQCEXrlyzigZdwl+cpKysVKS9DdVKQIl64L0xQkX1ZrjOhofWUMFrgNwqie1xNn9iSSnbh/NiZ0/b7kdfMukFX995RFNkPMCvqwrGpNLFHnPoiEGqIKCh+2o8YQaO7AxPHckOLZLAF+l5dIkiM7tFdICOBT/GCEEPXG2CsVoufNvGmkdSUPr6j6+EuMAv+0iBscxQrkjfqH3wED6jXR9Pjl/+6OGaT6T4YhJg==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCP4uk4SlVdA5nuA3DQC+NsEnZS9npFnO0zrmMWcz1++q2UWJNuGTh0rwi+3fUJIArfvVh7gNtIp93rxjtrQAuf4/Fa6sySp4c32MeFACfC0q+oUoWebhOIaYTYUxm4LAZ355vzt8YeDPmvWKxA81udqEk4gU9NNAOz1Um5/8LyR8SGsSc4EDBRSjcMWMwMkYSauGqGcEUK8WhfplsyF61lKSOFA6VmfUmeDK15rUWWLbOMKgn2cxFA98A+s74T9Oo96CU7rp/umDXvhnyhAXSukw/qCGOVhwKR8B6aeDtoBWQgjnvMtPgOUPRTPkPGbwPwwDkvAHYiuKJ7Bd2wH7rAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAB2J1ysRudbkqmkUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/wi9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD2018.1 以下旧版本:F5TRIB85C7-eyJsaWNlbnNlSWQiOiJGNVRSSUI4NUM3IiwibGljZW5zZWVOYW1lIjoiU2hhbmRvbmcgVW5pdmVyc2l0eSIsImFzc2lnbmVlTmFtZSI6ImFvIGxpIiwiYXNzaWduZWVFbWFpbCI6IjI4Njc4MTYyNjhAcXEuY29tIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiRm9yIGVkdWNhdGlvbmFsIHVzZSBvbmx5IiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBTIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJSU0MiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IkRNIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiUlNGIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiRFMiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiQ0wiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJBQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlJTViIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IkRDIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiUlNVIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In0seyJjb2RlIjoiRFAiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQREIiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQV1MiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQU0kiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQUFMiLCJwYWlkVXBUbyI6IjIwMjMtMDQtMTgifSx7ImNvZGUiOiJQQ1dNUCIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBHTyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBQQyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBSQiIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlBTVyIsInBhaWRVcFRvIjoiMjAyMy0wNC0xOCJ9LHsiY29kZSI6IlJTIiwicGFpZFVwVG8iOiIyMDIzLTA0LTE4In1dLCJoYXNoIjoiMzMyNzUzNDUvMTY5ODMwOTI6MTc1MDU2OTY1MyIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-lY3tKc+4E4dJpJFSL5ToHqXgZz/E0Q6cALc9DVk+z7E7wJbeFD+TkvcDnzdVpOG8oiCGPlpeqqJHpC8nuLd9yUY2XV0JHHwuhBmtl4iQcqeEo4tHc+SJwkhkChgYfNqzvVb2Vxm868Pd72ZRnabPmzzyheihWNbpqQTHOXc2LLJP5BGhJ3wZRl9m60iG6daqMvA0nvAc/hrdD22657O1kwwct125rfCBgvU1HnE8Abv/gDDZXxNQdhT9pUaNUAiWBmTRC3+kYAUR8jMBl6tJNZrPeLbCXmUpmku2pMjgjUb5VDBnd7SIJEBQB2CILoO1ASWzWJ/hzEnHYnZ8YzXTdQ==-MIIETDCCAjSgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCP4uk4SlVdA5nuA3DQC+NsEnZS9npFnO0zrmMWcz1++q2UWJNuGTh0rwi+3fUJIArfvVh7gNtIp93rxjtrQAuf4/Fa6sySp4c32MeFACfC0q+oUoWebhOIaYTYUxm4LAZ355vzt8YeDPmvWKxA81udqEk4gU9NNAOz1Um5/8LyR8SGsSc4EDBRSjcMWMwMkYSauGqGcEUK8WhfplsyF61lKSOFA6VmfUmeDK15rUWWLbOMKgn2cxFA98A+s74T9Oo96CU7rp/umDXvhnyhAXSukw/qCGOVhwKR8B6aeDtoBWQgjnvMtPgOUPRTPkPGbwPwwDkvAHYiuKJ7Bd2wH7rAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAB2J1ysRudbkqmkUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK3syIfIGQZNCxYhLLUuet2HE6LJYPQ5c0jH4kDooRpcVZ4rBxNwddpctUO2te9UU5/FjhioZQsPvd92qOTsV+8Cyl2fvNhNKD1Uu9ff5AkVIQn4JU23ozdB/R5oUlebwaTE6WZNBs+TA/qPj+5/wi9NH71WRB0hqUoLI2AKKyiPw++FtN4Su1vsdDlrAzDj9ILjpjJKA1ImuVcG329/WTYIKysZ1CWK3zATg9BeCUPAV1pQy8ToXOq+RSYen6winZ2OO93eyHv2Iw5kbn1dqfBw1BuTE29V2FJKicJSu8iEOpfoafwJISXmz1wnnWL3V/0NxTulfWsXugOoLfv0ZIBP1xH9kmf22jjQ2JiHhQZP7ZDsreRrOeIQ/c4yR8IQvMLfC0WKQqrHu5ZzXTH4NO3CwGWSlTY74kE91zXB5mwWAx1jig+UXYc2w4RkVhy0//lOmVya/PEepuuTTI4+UJwC7qbVlh5zfhj8oTNUXgN0AOc+Q0/WFPl1aw5VV/VrO8FCoB15lFVlpKaQ1Yh+DVU8ke+rt9Th0BCHXe0uZOEmH0nOnH/0onD