From f97dc8fd2edd4d8bdf0e9419d35585c9776e8dbf Mon Sep 17 00:00:00 2001
From: yangchunlong <292345300@qq.com>
Date: Fri, 19 Sep 2025 17:59:00 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=A7=A9=20=E6=96=87=E7=AB=A0?=
=?UTF-8?q?=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD=E6=96=87?=
=?UTF-8?q?=E7=AB=A0=E5=88=86=E7=B1=BB2=E7=BA=A7=E6=9F=A5=E8=AF=A2ID?=
=?UTF-8?q?=E6=9C=AA=E4=BC=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components.d.ts | 9 +-
.../SearchForm/components/SearchFormItem.vue | 160 ++++++--
src/components/SearchForm/components/css.vue | 299 ++++++++++++++
src/components/SearchForm/index.scss | 2 +
....timestamp-1758267544139-041bd9def899c.mjs | 372 ++++++++++++++++++
5 files changed, 801 insertions(+), 41 deletions(-)
create mode 100644 src/components/SearchForm/components/css.vue
create mode 100644 vite.config.ts.timestamp-1758267544139-041bd9def899c.mjs
diff --git a/src/components.d.ts b/src/components.d.ts
index 207249a..663bb65 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -7,16 +7,12 @@ export {}
declare module "vue" {
export interface GlobalComponents {
+ Css: typeof import("./components/SearchForm/components/css.vue")["default"];
ElAside: typeof import("element-plus/es")["ElAside"];
ElAutocomplete: typeof import("element-plus/es")["ElAutocomplete"];
ElBreadcrumb: typeof import("element-plus/es")["ElBreadcrumb"];
ElBreadcrumbItem: typeof import("element-plus/es")["ElBreadcrumbItem"];
ElButton: typeof import("element-plus/es")["ElButton"];
- ElCarousel: typeof import("element-plus/es")["ElCarousel"];
- ElCarouselItem: typeof import("element-plus/es")["ElCarouselItem"];
- ElCheckbox: typeof import("element-plus/es")["ElCheckbox"];
- ElCheckboxGroup: typeof import("element-plus/es")["ElCheckboxGroup"];
- ElColorPicker: typeof import("element-plus/es")["ElColorPicker"];
ElContainer: typeof import("element-plus/es")["ElContainer"];
ElDatePicker: typeof import("element-plus/es")["ElDatePicker"];
ElDialog: typeof import("element-plus/es")["ElDialog"];
@@ -38,7 +34,6 @@ declare module "vue" {
ElOption: typeof import("element-plus/es")["ElOption"];
ElPagination: typeof import("element-plus/es")["ElPagination"];
ElRadio: typeof import("element-plus/es")["ElRadio"];
- ElRadioButton: typeof import("element-plus/es")["ElRadioButton"];
ElRadioGroup: typeof import("element-plus/es")["ElRadioGroup"];
ElScrollbar: typeof import("element-plus/es")["ElScrollbar"];
ElSelect: typeof import("element-plus/es")["ElSelect"];
@@ -49,8 +44,6 @@ declare module "vue" {
ElTabPane: typeof import("element-plus/es")["ElTabPane"];
ElTabs: typeof import("element-plus/es")["ElTabs"];
ElTag: typeof import("element-plus/es")["ElTag"];
- ElTooltip: typeof import("element-plus/es")["ElTooltip"];
- ElTree: typeof import("element-plus/es")["ElTree"];
ElTreeSelect: typeof import("element-plus/es")["ElTreeSelect"];
ElUpload: typeof import("element-plus/es")["ElUpload"];
IEpArrowDown: typeof import("~icons/ep/arrow-down")["default"];
diff --git a/src/components/SearchForm/components/SearchFormItem.vue b/src/components/SearchForm/components/SearchFormItem.vue
index 375ae2d..b80172e 100644
--- a/src/components/SearchForm/components/SearchFormItem.vue
+++ b/src/components/SearchForm/components/SearchFormItem.vue
@@ -52,13 +52,13 @@
class="m-2 select"
remote-show-suffix
:remote-method="
- (query:any) => {
- remoteMethod(
- query,
- item
- );
- }
- "
+ (query:any) => {
+ remoteMethod(
+ query,
+ item
+ );
+ }
+ "
:disabled="item.disabled"
style="width: 224px"
>
@@ -77,9 +77,10 @@
:check-strictly="false"
show-checkbox
style="width: 224px"
- clearable
- :collapse-tags="true"
+ :collapse-tags="false"
+ ref="treeSelectRef"
@change="handleTreeSelectChange(item)"
+ @remove-tag="handleRemoveTag(item, $event)"
/>
@@ -158,12 +159,12 @@
diff --git a/src/components/SearchForm/index.scss b/src/components/SearchForm/index.scss
index 05b5c7e..bfb5067 100644
--- a/src/components/SearchForm/index.scss
+++ b/src/components/SearchForm/index.scss
@@ -3,6 +3,8 @@
margin-bottom: 8px;
}
.form-item {
+ display: flex;
+ align-items: center;
width: 344px !important;
height: 32px;
margin-right: 12px !important;
diff --git a/vite.config.ts.timestamp-1758267544139-041bd9def899c.mjs b/vite.config.ts.timestamp-1758267544139-041bd9def899c.mjs
new file mode 100644
index 0000000..36eea6f
--- /dev/null
+++ b/vite.config.ts.timestamp-1758267544139-041bd9def899c.mjs
@@ -0,0 +1,372 @@
+// vite.config.ts
+import { defineConfig, loadEnv } from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/vite/dist/node/index.js";
+import { resolve as resolve2 } from "path";
+
+// build/getEnv.ts
+function wrapperEnv(envConf) {
+ const ret = {};
+ for (const envName of Object.keys(envConf)) {
+ let realName = envConf[envName].replace(/\\n/g, "\n");
+ realName = realName === "true" ? true : realName === "false" ? false : realName;
+ if (envName === "VITE_PORT")
+ realName = Number(realName);
+ if (envName === "VITE_PROXY") {
+ try {
+ realName = JSON.parse(realName);
+ } catch (error) {
+ }
+ }
+ ret[envName] = realName;
+ }
+ return ret;
+}
+
+// build/proxy.ts
+function createProxy(list = []) {
+ const ret = {};
+ for (const [prefix, target] of list) {
+ const httpsRE = /^https:\/\//;
+ const isHttps = httpsRE.test(target);
+ ret[prefix] = {
+ target,
+ changeOrigin: true,
+ ws: true,
+ rewrite: (path) => path.replace(new RegExp(`^${prefix}`), ""),
+ // https is require secure=false
+ ...isHttps ? { secure: false } : {}
+ };
+ }
+ return ret;
+}
+
+// build/plugins.ts
+import { resolve } from "path";
+import { VitePWA } from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/vite-plugin-pwa/dist/index.js";
+import { visualizer } from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/rollup-plugin-visualizer/dist/plugin/index.js";
+import { createHtmlPlugin } from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/vite-plugin-html/dist/index.mjs";
+import { createSvgIconsPlugin } from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/vite-plugin-svg-icons/dist/index.mjs";
+import vue from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/@vitejs/plugin-vue/dist/index.mjs";
+import vueJsx from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs";
+import eslintPlugin from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/vite-plugin-eslint/dist/index.mjs";
+import viteCompression from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/vite-plugin-compression/dist/index.mjs";
+import vueSetupExtend from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js";
+import AutoImport from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/unplugin-auto-import/dist/vite.js";
+import Components from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/unplugin-vue-components/dist/vite.mjs";
+import { ElementPlusResolver } from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/unplugin-vue-components/dist/resolvers.mjs";
+import Icons from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/unplugin-icons/dist/vite.mjs";
+import IconsResolver from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/unplugin-icons/dist/resolver.mjs";
+var createVitePlugins = (viteEnv) => {
+ const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv;
+ return [
+ vue(),
+ // vue 可以使用 jsx/tsx 语法
+ vueJsx(),
+ // esLint 报错信息显示在浏览器界面上
+ eslintPlugin(),
+ // name 可以写在 script 标签上
+ vueSetupExtend({}),
+ // 创建打包压缩配置
+ createCompression(viteEnv),
+ // 注入变量到 html 文件
+ createHtmlPlugin({
+ inject: {
+ data: { title: VITE_GLOB_APP_TITLE }
+ }
+ }),
+ // 使用 svg 图标
+ createSvgIconsPlugin({
+ iconDirs: [resolve(process.cwd(), "src/assets/icons")],
+ symbolId: "icon-[dir]-[name]"
+ }),
+ // element按需导入
+ AutoImport({
+ // 安装两行后你会发现在组件中不用再导入ref,reactive等
+ imports: ["vue", "vue-router"],
+ dts: "src/auto-import.d.ts",
+ // element
+ resolvers: [
+ ElementPlusResolver({ importStyle: "sass" }),
+ IconsResolver({
+ prefix: "Icon"
+ })
+ ]
+ }),
+ Components({
+ // element
+ resolvers: [
+ ElementPlusResolver({ importStyle: "sass" }),
+ IconsResolver({
+ enabledCollections: ["ep"]
+ })
+ ],
+ // 默认存放位置
+ dts: "src/components.d.ts"
+ }),
+ Icons({
+ autoInstall: true
+ }),
+ // vitePWA
+ VITE_PWA && createVitePwa(viteEnv),
+ // 是否生成包预览,分析依赖包大小做优化处理
+ VITE_REPORT && visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true })
+ ];
+};
+var createCompression = (viteEnv) => {
+ const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv;
+ const compressList = VITE_BUILD_COMPRESS.split(",");
+ const plugins = [];
+ if (compressList.includes("gzip")) {
+ plugins.push(
+ viteCompression({
+ ext: ".gz",
+ algorithm: "gzip",
+ deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE
+ })
+ );
+ }
+ if (compressList.includes("brotli")) {
+ plugins.push(
+ viteCompression({
+ ext: ".br",
+ algorithm: "brotliCompress",
+ deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE
+ })
+ );
+ }
+ return plugins;
+};
+var createVitePwa = (viteEnv) => {
+ const { VITE_GLOB_APP_TITLE } = viteEnv;
+ return VitePWA({
+ registerType: "autoUpdate",
+ manifest: {
+ name: VITE_GLOB_APP_TITLE,
+ short_name: VITE_GLOB_APP_TITLE,
+ theme_color: "#ffffff",
+ icons: [
+ {
+ src: "/logo.png",
+ sizes: "192x192",
+ type: "image/png"
+ },
+ {
+ src: "/logo.png",
+ sizes: "512x512",
+ type: "image/png"
+ },
+ {
+ src: "/logo.png",
+ sizes: "512x512",
+ type: "image/png",
+ purpose: "any maskable"
+ }
+ ]
+ }
+ });
+};
+
+// package.json
+var package_default = {
+ name: "yc_ops_admin_ts",
+ private: true,
+ version: "1.0.0",
+ type: "module",
+ scripts: {
+ dev: "vite",
+ serve: "vite",
+ "build:dev": "vue-tsc && vite build --mode development",
+ "build:test": "vue-tsc && vite build --mode test",
+ "build:pro": "vue-tsc && vite build --mode production",
+ "type:check": "vue-tsc --noEmit --skipLibCheck",
+ preview: "npm run build:dev && vite preview",
+ "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
+ "lint:prettier": 'prettier --write "src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}"',
+ "lint:stylelint": 'stylelint --cache --fix "**/*.{vue,less,postcss,css,scss}" --cache --cache-location node_modules/.cache/stylelint/',
+ "lint:lint-staged": "lint-staged",
+ prepare: "husky install",
+ release: "standard-version",
+ commit: "git add -A && czg && git push"
+ },
+ dependencies: {
+ "@element-plus/icons-vue": "^2.1.0",
+ "@types/decimal.js": "^7.4.0",
+ "@vueup/vue-quill": "^1.2.0",
+ "@vueuse/core": "^10.1.2",
+ "@wangeditor/editor": "^5.1.23",
+ "@wangeditor/editor-for-vue": "^5.1.12",
+ "@zhj-target/vue3-kind-editor": "^0.1.3",
+ "async-validator": "^4.2.5",
+ axios: "^1.4.0",
+ "bwip-js": "^4.3.2",
+ "crypto-js": "^4.2.0",
+ dayjs: "^1.11.9",
+ decimal: "^0.0.2",
+ "default-passive-events": "^2.0.0",
+ "driver.js": "^0.9.8",
+ "element-plus": "^2.3.4",
+ "file-saver": "^2.0.5",
+ "js-md5": "^0.7.3",
+ jsbarcode: "^3.11.6",
+ jsonpack: "^1.1.5",
+ "lodash-es": "^4.17.21",
+ "mavon-editor": "^3.0.2",
+ mitt: "^3.0.0",
+ nprogress: "^0.2.0",
+ pinia: "^2.1.3",
+ "pinia-plugin-persistedstate": "^3.1.0",
+ "print-js": "^1.6.0",
+ qs: "^6.13.1",
+ quill: "^2.0.3",
+ sortablejs: "^1.15.0",
+ vue: "^3.3.4",
+ "vue-router": "^4.2.2",
+ vuedraggable: "^4.1.0",
+ "vxe-table": "^4.5.0-beta.10",
+ "xe-utils": "^3.5.11",
+ xlsx: "^0.18.5"
+ },
+ devDependencies: {
+ "@commitlint/cli": "^17.6.3",
+ "@commitlint/config-conventional": "^17.6.3",
+ "@iconify-json/ep": "^1.1.10",
+ "@types/crypto-js": "^4.2.2",
+ "@types/file-saver": "^2.0.5",
+ "@types/js-md5": "^0.7.0",
+ "@types/nprogress": "^0.2.0",
+ "@types/qs": "^6.9.7",
+ "@types/sortablejs": "^1.15.1",
+ "@typescript-eslint/eslint-plugin": "^5.59.7",
+ "@typescript-eslint/parser": "^5.59.7",
+ "@vitejs/plugin-vue": "^4.2.3",
+ "@vitejs/plugin-vue-jsx": "^3.0.1",
+ autoprefixer: "^10.4.14",
+ "cz-git": "^1.6.1",
+ czg: "^1.6.1",
+ eslint: "^8.41.0",
+ "eslint-config-prettier": "^8.8.0",
+ "eslint-plugin-prettier": "^4.2.1",
+ "eslint-plugin-vue": "^9.14.0",
+ husky: "^8.0.3",
+ "lint-staged": "^13.2.2",
+ postcss: "^8.4.23",
+ "postcss-html": "^1.5.0",
+ prettier: "^2.8.8",
+ qrcode: "^1.5.3",
+ "rollup-plugin-visualizer": "^5.9.0",
+ sass: "^1.62.1",
+ "standard-version": "^9.5.0",
+ stylelint: "^15.6.2",
+ "stylelint-config-html": "^1.1.0",
+ "stylelint-config-recess-order": "^4.0.0",
+ "stylelint-config-recommended-scss": "^12.0.0",
+ "stylelint-config-recommended-vue": "^1.4.0",
+ "stylelint-config-standard": "^33.0.0",
+ "stylelint-config-standard-scss": "^9.0.0",
+ typescript: "^5.0.2",
+ "unplugin-auto-import": "^0.16.4",
+ "unplugin-icons": "^0.16.3",
+ "unplugin-vue-components": "^0.25.1",
+ "unplugin-vue-setup-extend-plus": "^1.0.0",
+ vite: "^4.3.9",
+ "vite-plugin-compression": "^0.5.1",
+ "vite-plugin-eslint": "^1.8.1",
+ "vite-plugin-html": "^3.2.0",
+ "vite-plugin-pwa": "^0.15.0",
+ "vite-plugin-svg-icons": "^2.0.1",
+ "vue-tsc": "^1.6.5"
+ },
+ engines: {
+ node: ">=16.0.0"
+ },
+ browserslist: {
+ production: [
+ "> 1%",
+ "not dead",
+ "not op_mini all"
+ ],
+ development: [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ },
+ config: {
+ commitizen: {
+ path: "node_modules/cz-git"
+ }
+ }
+};
+
+// vite.config.ts
+import dayjs from "file:///D:/new_ops/orico-officialWebsite-ts-admin(%E5%AE%98%E7%BD%91%E5%90%8E%E5%8F%B0-git)/node_modules/dayjs/dayjs.min.js";
+var __vite_injected_original_dirname = "D:\\new_ops\\orico-officialWebsite-ts-admin(\u5B98\u7F51\u540E\u53F0-git)";
+var { dependencies, devDependencies, name, version } = package_default;
+var __APP_INFO__ = {
+ pkg: { dependencies, devDependencies, name, version },
+ lastBuildTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
+};
+var vite_config_default = defineConfig(({ mode }) => {
+ const root = process.cwd();
+ const env = loadEnv(mode, root);
+ const viteEnv = wrapperEnv(env);
+ return {
+ base: viteEnv.VITE_PUBLIC_PATH,
+ root,
+ resolve: {
+ alias: {
+ "@": resolve2(__vite_injected_original_dirname, "./src")
+ }
+ },
+ define: {
+ __APP_INFO__: JSON.stringify(__APP_INFO__)
+ },
+ css: {
+ preprocessorOptions: {
+ scss: {
+ additionalData: `@use "@/styles/var.scss" as *;`
+ }
+ }
+ },
+ server: {
+ host: "0.0.0.0",
+ port: viteEnv.VITE_PORT,
+ open: viteEnv.VITE_OPEN,
+ cors: true,
+ // Load proxy configuration from .env.development
+ proxy: createProxy(viteEnv.VITE_PROXY)
+ },
+ plugins: createVitePlugins(viteEnv),
+ esbuild: {
+ //"console.log","console.log",
+ pure: viteEnv.VITE_DROP_CONSOLE ? ["debugger"] : []
+ },
+ build: {
+ outDir: "dist",
+ minify: "esbuild",
+ // esbuild 打包更快,但是不能去除 console.log,terser打包慢,但能去除 console.log
+ // minify: "terser",
+ // terserOptions: {
+ // compress: {
+ // drop_console: viteEnv.VITE_DROP_CONSOLE,
+ // drop_debugger: true
+ // }
+ // },
+ // 禁用 gzip 压缩大小报告,可略微减少打包时间
+ reportCompressedSize: false,
+ // 规定触发警告的 chunk 大小
+ chunkSizeWarningLimit: 2e3,
+ rollupOptions: {
+ output: {
+ // Static resource classification and packaging
+ chunkFileNames: "assets/js/[name]-[hash].js",
+ entryFileNames: "assets/js/[name]-[hash].js",
+ assetFileNames: "assets/[ext]/[name]-[hash].[ext]"
+ }
+ }
+ }
+ };
+});
+export {
+ vite_config_default as default
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiYnVpbGQvZ2V0RW52LnRzIiwgImJ1aWxkL3Byb3h5LnRzIiwgImJ1aWxkL3BsdWdpbnMudHMiLCAicGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1vZmZpY2lhbFdlYnNpdGUtdHMtYWRtaW4oXHU1Qjk4XHU3RjUxXHU1NDBFXHU1M0YwLWdpdClcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tb2ZmaWNpYWxXZWJzaXRlLXRzLWFkbWluKFx1NUI5OFx1N0Y1MVx1NTQwRVx1NTNGMC1naXQpXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9EOi9uZXdfb3BzL29yaWNvLW9mZmljaWFsV2Vic2l0ZS10cy1hZG1pbiglRTUlQUUlOTglRTclQkQlOTElRTUlOTAlOEUlRTUlOEYlQjAtZ2l0KS92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiwgQ29uZmlnRW52LCBVc2VyQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcclxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IHdyYXBwZXJFbnYgfSBmcm9tIFwiLi9idWlsZC9nZXRFbnZcIjtcclxuaW1wb3J0IHsgY3JlYXRlUHJveHkgfSBmcm9tIFwiLi9idWlsZC9wcm94eVwiO1xyXG5pbXBvcnQgeyBjcmVhdGVWaXRlUGx1Z2lucyB9IGZyb20gXCIuL2J1aWxkL3BsdWdpbnNcIjtcclxuXHJcbmltcG9ydCBwa2cgZnJvbSBcIi4vcGFja2FnZS5qc29uXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuXHJcbmNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMsIG5hbWUsIHZlcnNpb24gfSA9IHBrZztcclxuY29uc3QgX19BUFBfSU5GT19fID0ge1xyXG4gICAgcGtnOiB7IGRlcGVuZGVuY2llcywgZGV2RGVwZW5kZW5jaWVzLCBuYW1lLCB2ZXJzaW9uIH0sXHJcbiAgICBsYXN0QnVpbGRUaW1lOiBkYXlqcygpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3NcIilcclxufTtcclxuXHJcbi8vIEBzZWU6IGh0dHBzOi8vdml0ZWpzLmRldi9jb25maWcvXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBtb2RlIH06IENvbmZpZ0Vudik6IFVzZXJDb25maWcgPT4ge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHJvb3QpO1xyXG4gICAgY29uc3Qgdml0ZUVudiA9IHdyYXBwZXJFbnYoZW52KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGJhc2U6IHZpdGVFbnYuVklURV9QVUJMSUNfUEFUSCxcclxuICAgICAgICByb290LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgYWxpYXM6IHtcclxuICAgICAgICAgICAgICAgIFwiQFwiOiByZXNvbHZlKF9fZGlybmFtZSwgXCIuL3NyY1wiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWZpbmU6IHtcclxuICAgICAgICAgICAgX19BUFBfSU5GT19fOiBKU09OLnN0cmluZ2lmeShfX0FQUF9JTkZPX18pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgcHJlcHJvY2Vzc29yT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQHVzZSBcIkAvc3R5bGVzL3Zhci5zY3NzXCIgYXMgKjtgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlcnZlcjoge1xyXG4gICAgICAgICAgICBob3N0OiBcIjAuMC4wLjBcIixcclxuICAgICAgICAgICAgcG9ydDogdml0ZUVudi5WSVRFX1BPUlQsXHJcbiAgICAgICAgICAgIG9wZW46IHZpdGVFbnYuVklURV9PUEVOLFxyXG4gICAgICAgICAgICBjb3JzOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyBMb2FkIHByb3h5IGNvbmZpZ3VyYXRpb24gZnJvbSAuZW52LmRldmVsb3BtZW50XHJcbiAgICAgICAgICAgIHByb3h5OiBjcmVhdGVQcm94eSh2aXRlRW52LlZJVEVfUFJPWFkpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52KSxcclxuICAgICAgICBlc2J1aWxkOiB7XHJcbiAgICAgICAgICAgIC8vXCJjb25zb2xlLmxvZ1wiLFwiY29uc29sZS5sb2dcIixcclxuICAgICAgICAgICAgcHVyZTogdml0ZUVudi5WSVRFX0RST1BfQ09OU09MRSA/IFtcImRlYnVnZ2VyXCJdIDogW11cclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkOiB7XHJcbiAgICAgICAgICAgIG91dERpcjogXCJkaXN0XCIsXHJcbiAgICAgICAgICAgIG1pbmlmeTogXCJlc2J1aWxkXCIsXHJcbiAgICAgICAgICAgIC8vIGVzYnVpbGQgXHU2MjUzXHU1MzA1XHU2NkY0XHU1RkVCXHVGRjBDXHU0RjQ2XHU2NjJGXHU0RTBEXHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXHVGRjBDdGVyc2VyXHU2MjUzXHU1MzA1XHU2MTYyXHVGRjBDXHU0RjQ2XHU4MEZEXHU1M0JCXHU5NjY0IGNvbnNvbGUubG9nXHJcbiAgICAgICAgICAgIC8vIG1pbmlmeTogXCJ0ZXJzZXJcIixcclxuICAgICAgICAgICAgLy8gdGVyc2VyT3B0aW9uczoge1xyXG4gICAgICAgICAgICAvLyBcdGNvbXByZXNzOiB7XHJcbiAgICAgICAgICAgIC8vIFx0XHRkcm9wX2NvbnNvbGU6IHZpdGVFbnYuVklURV9EUk9QX0NPTlNPTEUsXHJcbiAgICAgICAgICAgIC8vIFx0XHRkcm9wX2RlYnVnZ2VyOiB0cnVlXHJcbiAgICAgICAgICAgIC8vIFx0fVxyXG4gICAgICAgICAgICAvLyB9LFxyXG4gICAgICAgICAgICAvLyBcdTc5ODFcdTc1MjggZ3ppcCBcdTUzOEJcdTdGMjlcdTU5MjdcdTVDMEZcdTYyQTVcdTU0NEFcdUZGMENcdTUzRUZcdTc1NjVcdTVGQUVcdTUxQ0ZcdTVDMTFcdTYyNTNcdTUzMDVcdTY1RjZcdTk1RjRcclxuICAgICAgICAgICAgcmVwb3J0Q29tcHJlc3NlZFNpemU6IGZhbHNlLFxyXG4gICAgICAgICAgICAvLyBcdTg5QzRcdTVCOUFcdTg5RTZcdTUzRDFcdThCNjZcdTU0NEFcdTc2ODQgY2h1bmsgXHU1OTI3XHU1QzBGXHJcbiAgICAgICAgICAgIGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMjAwMCxcclxuICAgICAgICAgICAgcm9sbHVwT3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGljIHJlc291cmNlIGNsYXNzaWZpY2F0aW9uIGFuZCBwYWNrYWdpbmdcclxuICAgICAgICAgICAgICAgICAgICBjaHVua0ZpbGVOYW1lczogXCJhc3NldHMvanMvW25hbWVdLVtoYXNoXS5qc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5RmlsZU5hbWVzOiBcImFzc2V0cy9qcy9bbmFtZV0tW2hhc2hdLmpzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYXNzZXRGaWxlTmFtZXM6IFwiYXNzZXRzL1tleHRdL1tuYW1lXS1baGFzaF0uW2V4dF1cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSk7XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1vZmZpY2lhbFdlYnNpdGUtdHMtYWRtaW4oXHU1Qjk4XHU3RjUxXHU1NDBFXHU1M0YwLWdpdClcXFxcYnVpbGRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkQ6XFxcXG5ld19vcHNcXFxcb3JpY28tb2ZmaWNpYWxXZWJzaXRlLXRzLWFkbWluKFx1NUI5OFx1N0Y1MVx1NTQwRVx1NTNGMC1naXQpXFxcXGJ1aWxkXFxcXGdldEVudi50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1vZmZpY2lhbFdlYnNpdGUtdHMtYWRtaW4oJUU1JUFFJTk4JUU3JUJEJTkxJUU1JTkwJThFJUU1JThGJUIwLWdpdCkvYnVpbGQvZ2V0RW52LnRzXCI7aW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RldkZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG1vZGUgPT09IFwiZGV2ZWxvcG1lbnRcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvZEZuKG1vZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG1vZGUgPT09IFwicHJvZHVjdGlvblwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0Rm4obW9kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbW9kZSA9PT0gXCJ0ZXN0XCI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXaGV0aGVyIHRvIGdlbmVyYXRlIHBhY2thZ2UgcHJldmlld1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwb3J0TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBwcm9jZXNzLmVudi5WSVRFX1JFUE9SVCA9PT0gXCJ0cnVlXCI7XHJcbn1cclxuXHJcbi8vIFJlYWQgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gcHJvY2Vzcy5lbnZcclxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBwZXJFbnYoZW52Q29uZjogUmVjb3JkYWJsZSk6IFZpdGVFbnYge1xyXG4gICAgY29uc3QgcmV0OiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVudk5hbWUgb2YgT2JqZWN0LmtleXMoZW52Q29uZikpIHtcclxuICAgICAgICBsZXQgcmVhbE5hbWUgPSBlbnZDb25mW2Vudk5hbWVdLnJlcGxhY2UoL1xcXFxuL2csIFwiXFxuXCIpO1xyXG4gICAgICAgIHJlYWxOYW1lID0gcmVhbE5hbWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHJlYWxOYW1lID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHJlYWxOYW1lO1xyXG4gICAgICAgIGlmIChlbnZOYW1lID09PSBcIlZJVEVfUE9SVFwiKSByZWFsTmFtZSA9IE51bWJlcihyZWFsTmFtZSk7XHJcbiAgICAgICAgaWYgKGVudk5hbWUgPT09IFwiVklURV9QUk9YWVwiKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZWFsTmFtZSA9IEpTT04ucGFyc2UocmVhbE5hbWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0W2Vudk5hbWVdID0gcmVhbE5hbWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHVzZXIgcm9vdCBkaXJlY3RvcnlcclxuICogQHBhcmFtIGRpciBmaWxlIHBhdGhcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290UGF0aCguLi5kaXI6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIC4uLmRpcik7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLW9mZmljaWFsV2Vic2l0ZS10cy1hZG1pbihcdTVCOThcdTdGNTFcdTU0MEVcdTUzRjAtZ2l0KVxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1vZmZpY2lhbFdlYnNpdGUtdHMtYWRtaW4oXHU1Qjk4XHU3RjUxXHU1NDBFXHU1M0YwLWdpdClcXFxcYnVpbGRcXFxccHJveHkudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Q6L25ld19vcHMvb3JpY28tb2ZmaWNpYWxXZWJzaXRlLXRzLWFkbWluKCVFNSVBRSU5OCVFNyVCRCU5MSVFNSU5MCU4RSVFNSU4RiVCMC1naXQpL2J1aWxkL3Byb3h5LnRzXCI7aW1wb3J0IHR5cGUgeyBQcm94eU9wdGlvbnMgfSBmcm9tIFwidml0ZVwiO1xyXG5cclxudHlwZSBQcm94eUl0ZW0gPSBbc3RyaW5nLCBzdHJpbmddO1xyXG5cclxudHlwZSBQcm94eUxpc3QgPSBQcm94eUl0ZW1bXTtcclxuXHJcbnR5cGUgUHJveHlUYXJnZXRMaXN0ID0gUmVjb3JkPHN0cmluZywgUHJveHlPcHRpb25zPjtcclxuXHJcbi8qKlxyXG4gKiBcdTUyMUJcdTVFRkFcdTRFRTNcdTc0MDZcdUZGMENcdTc1MjhcdTRFOEVcdTg5RTNcdTY3OTAgLmVudi5kZXZlbG9wbWVudCBcdTRFRTNcdTc0MDZcdTkxNERcdTdGNkVcclxuICogQHBhcmFtIGxpc3RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eShsaXN0OiBQcm94eUxpc3QgPSBbXSkge1xyXG4gICAgY29uc3QgcmV0OiBQcm94eVRhcmdldExpc3QgPSB7fTtcclxuICAgIGZvciAoY29uc3QgW3ByZWZpeCwgdGFyZ2V0XSBvZiBsaXN0KSB7XHJcbiAgICAgICAgY29uc3QgaHR0cHNSRSA9IC9eaHR0cHM6XFwvXFwvLztcclxuICAgICAgICBjb25zdCBpc0h0dHBzID0gaHR0cHNSRS50ZXN0KHRhcmdldCk7XHJcblxyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9odHRwLXBhcnR5L25vZGUtaHR0cC1wcm94eSNvcHRpb25zXHJcbiAgICAgICAgcmV0W3ByZWZpeF0gPSB7XHJcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXHJcbiAgICAgICAgICAgIHdzOiB0cnVlLFxyXG4gICAgICAgICAgICByZXdyaXRlOiBwYXRoID0+IHBhdGgucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtwcmVmaXh9YCksIFwiXCIpLFxyXG4gICAgICAgICAgICAvLyBodHRwcyBpcyByZXF1aXJlIHNlY3VyZT1mYWxzZVxyXG4gICAgICAgICAgICAuLi4oaXNIdHRwcyA/IHsgc2VjdXJlOiBmYWxzZSB9IDoge30pXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJEOlxcXFxuZXdfb3BzXFxcXG9yaWNvLW9mZmljaWFsV2Vic2l0ZS10cy1hZG1pbihcdTVCOThcdTdGNTFcdTU0MEVcdTUzRjAtZ2l0KVxcXFxidWlsZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRDpcXFxcbmV3X29wc1xcXFxvcmljby1vZmZpY2lhbFdlYnNpdGUtdHMtYWRtaW4oXHU1Qjk4XHU3RjUxXHU1NDBFXHU1M0YwLWdpdClcXFxcYnVpbGRcXFxccGx1Z2lucy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRDovbmV3X29wcy9vcmljby1vZmZpY2lhbFdlYnNpdGUtdHMtYWRtaW4oJUU1JUFFJTk4JUU3JUJEJTkxJUU1JTkwJThFJUU1JThGJUIwLWdpdCkvYnVpbGQvcGx1Z2lucy50c1wiO2ltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgeyBQbHVnaW5PcHRpb24gfSBmcm9tIFwidml0ZVwiO1xyXG5pbXBvcnQgeyBWaXRlUFdBIH0gZnJvbSBcInZpdGUtcGx1Z2luLXB3YVwiO1xyXG5pbXBvcnQgeyB2aXN1YWxpemVyIH0gZnJvbSBcInJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVIdG1sUGx1Z2luIH0gZnJvbSBcInZpdGUtcGx1Z2luLWh0bWxcIjtcclxuaW1wb3J0IHsgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4tc3ZnLWljb25zXCI7XHJcbmltcG9ydCB2dWUgZnJvbSBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiO1xyXG5pbXBvcnQgdnVlSnN4IGZyb20gXCJAdml0ZWpzL3BsdWdpbi12dWUtanN4XCI7XHJcbmltcG9ydCBlc2xpbnRQbHVnaW4gZnJvbSBcInZpdGUtcGx1Z2luLWVzbGludFwiO1xyXG5pbXBvcnQgdml0ZUNvbXByZXNzaW9uIGZyb20gXCJ2aXRlLXBsdWdpbi1jb21wcmVzc2lvblwiO1xyXG5pbXBvcnQgdnVlU2V0dXBFeHRlbmQgZnJvbSBcInVucGx1Z2luLXZ1ZS1zZXR1cC1leHRlbmQtcGx1cy92aXRlXCI7XHJcbi8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NXZ1ZVx1NEUyRGhvb2sgcmVhY3RpdmUgcmVmXHU3QjQ5XHJcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gXCJ1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlXCI7XHJcbi8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NXVpLVx1N0VDNFx1NEVGNiBcdTZCRDRcdTU5ODJcdThCRjRhbnQtZGVzaWduLXZ1ZSAgZWxlbWVudC1wbHVzXHU3QjQ5XHJcbmltcG9ydCBDb21wb25lbnRzIGZyb20gXCJ1bnBsdWdpbi12dWUtY29tcG9uZW50cy92aXRlXCI7XHJcbi8vIGVsZW1lbnRcclxuaW1wb3J0IHsgRWxlbWVudFBsdXNSZXNvbHZlciB9IGZyb20gXCJ1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnNcIjtcclxuLy8gXHU1QkZDXHU1MTY1XHU1NkZFXHU2ODA3XHJcbmltcG9ydCBJY29ucyBmcm9tIFwidW5wbHVnaW4taWNvbnMvdml0ZVwiO1xyXG5pbXBvcnQgSWNvbnNSZXNvbHZlciBmcm9tIFwidW5wbHVnaW4taWNvbnMvcmVzb2x2ZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBcdTUyMUJcdTVFRkEgdml0ZSBcdTYzRDJcdTRFRjZcclxuICogQHBhcmFtIHZpdGVFbnZcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVWaXRlUGx1Z2lucyA9ICh2aXRlRW52OiBWaXRlRW52KTogKFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdKVtdID0+IHtcclxuICAgIGNvbnN0IHsgVklURV9HTE9CX0FQUF9USVRMRSwgVklURV9SRVBPUlQsIFZJVEVfUFdBIH0gPSB2aXRlRW52O1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICB2dWUoKSxcclxuICAgICAgICAvLyB2dWUgXHU1M0VGXHU0RUU1XHU0RjdGXHU3NTI4IGpzeC90c3ggXHU4QkVEXHU2Q0Q1XHJcbiAgICAgICAgdnVlSnN4KCksXHJcbiAgICAgICAgLy8gZXNMaW50IFx1NjJBNVx1OTUxOVx1NEZFMVx1NjA2Rlx1NjYzRVx1NzkzQVx1NTcyOFx1NkQ0Rlx1ODlDOFx1NTY2OFx1NzU0Q1x1OTc2Mlx1NEUwQVxyXG4gICAgICAgIGVzbGludFBsdWdpbigpLFxyXG4gICAgICAgIC8vIG5hbWUgXHU1M0VGXHU0RUU1XHU1MTk5XHU1NzI4IHNjcmlwdCBcdTY4MDdcdTdCN0VcdTRFMEFcclxuICAgICAgICB2dWVTZXR1cEV4dGVuZCh7fSksXHJcbiAgICAgICAgLy8gXHU1MjFCXHU1RUZBXHU2MjUzXHU1MzA1XHU1MzhCXHU3RjI5XHU5MTREXHU3RjZFXHJcbiAgICAgICAgY3JlYXRlQ29tcHJlc3Npb24odml0ZUVudiksXHJcbiAgICAgICAgLy8gXHU2Q0U4XHU1MTY1XHU1M0Q4XHU5MUNGXHU1MjMwIGh0bWwgXHU2NTg3XHU0RUY2XHJcbiAgICAgICAgY3JlYXRlSHRtbFBsdWdpbih7XHJcbiAgICAgICAgICAgIGluamVjdDoge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogeyB0aXRsZTogVklURV9HTE9CX0FQUF9USVRMRSB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICAvLyBcdTRGN0ZcdTc1Mjggc3ZnIFx1NTZGRVx1NjgwN1xyXG4gICAgICAgIGNyZWF0ZVN2Z0ljb25zUGx1Z2luKHtcclxuICAgICAgICAgICAgaWNvbkRpcnM6IFtyZXNvbHZlKHByb2Nlc3MuY3dkKCksIFwic3JjL2Fzc2V0cy9pY29uc1wiKV0sXHJcbiAgICAgICAgICAgIHN5bWJvbElkOiBcImljb24tW2Rpcl0tW25hbWVdXCJcclxuICAgICAgICB9KSxcclxuICAgICAgICAvLyBlbGVtZW50XHU2MzA5XHU5NzAwXHU1QkZDXHU1MTY1XHJcbiAgICAgICAgQXV0b0ltcG9ydCh7XHJcbiAgICAgICAgICAgIC8vIFx1NUI4OVx1ODhDNVx1NEUyNFx1ODg0Q1x1NTQwRVx1NEY2MFx1NEYxQVx1NTNEMVx1NzNCMFx1NTcyOFx1N0VDNFx1NEVGNlx1NEUyRFx1NEUwRFx1NzUyOFx1NTE4RFx1NUJGQ1x1NTE2NXJlZlx1RkYwQ3JlYWN0aXZlXHU3QjQ5XHJcbiAgICAgICAgICAgIGltcG9ydHM6IFtcInZ1ZVwiLCBcInZ1ZS1yb3V0ZXJcIl0sXHJcbiAgICAgICAgICAgIGR0czogXCJzcmMvYXV0by1pbXBvcnQuZC50c1wiLFxyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIHJlc29sdmVyczogW1xyXG4gICAgICAgICAgICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcih7IGltcG9ydFN0eWxlOiBcInNhc3NcIiB9KSxcclxuICAgICAgICAgICAgICAgIEljb25zUmVzb2x2ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeDogXCJJY29uXCJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9KSxcclxuICAgICAgICBDb21wb25lbnRzKHtcclxuICAgICAgICAgICAgLy8gZWxlbWVudFxyXG4gICAgICAgICAgICByZXNvbHZlcnM6IFtcclxuICAgICAgICAgICAgICAgIEVsZW1lbnRQbHVzUmVzb2x2ZXIoeyBpbXBvcnRTdHlsZTogXCJzYXNzXCIgfSksXHJcbiAgICAgICAgICAgICAgICBJY29uc1Jlc29sdmVyKHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQ29sbGVjdGlvbnM6IFtcImVwXCJdXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAvLyBcdTlFRDhcdThCQTRcdTVCNThcdTY1M0VcdTRGNERcdTdGNkVcclxuICAgICAgICAgICAgZHRzOiBcInNyYy9jb21wb25lbnRzLmQudHNcIlxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIEljb25zKHtcclxuICAgICAgICAgICAgYXV0b0luc3RhbGw6IHRydWVcclxuICAgICAgICB9KSxcclxuICAgICAgICAvLyB2aXRlUFdBXHJcbiAgICAgICAgVklURV9QV0EgJiYgY3JlYXRlVml0ZVB3YSh2aXRlRW52KSxcclxuICAgICAgICAvLyBcdTY2MkZcdTU0MjZcdTc1MUZcdTYyMTBcdTUzMDVcdTk4ODRcdTg5QzhcdUZGMENcdTUyMDZcdTY3OTBcdTRGOURcdThENTZcdTUzMDVcdTU5MjdcdTVDMEZcdTUwNUFcdTRGMThcdTUzMTZcdTU5MDRcdTc0MDZcclxuICAgICAgICBWSVRFX1JFUE9SVCAmJiAodmlzdWFsaXplcih7IGZpbGVuYW1lOiBcInN0YXRzLmh0bWxcIiwgZ3ppcFNpemU6IHRydWUsIGJyb3RsaVNpemU6IHRydWUgfSkgYXMgUGx1Z2luT3B0aW9uKVxyXG4gICAgXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gXHU2ODM5XHU2MzZFIGNvbXByZXNzIFx1OTE0RFx1N0Y2RVx1RkYwQ1x1NzUxRlx1NjIxMFx1NEUwRFx1NTQwQ1x1NzY4NFx1NTM4Qlx1N0YyOVx1ODlDNFx1NTIxOVxyXG4gKiBAcGFyYW0gdml0ZUVudlxyXG4gKi9cclxuY29uc3QgY3JlYXRlQ29tcHJlc3Npb24gPSAodml0ZUVudjogVml0ZUVudik6IFBsdWdpbk9wdGlvbiB8IFBsdWdpbk9wdGlvbltdID0+IHtcclxuICAgIGNvbnN0IHsgVklURV9CVUlMRF9DT01QUkVTUyA9IFwibm9uZVwiLCBWSVRFX0JVSUxEX0NPTVBSRVNTX0RFTEVURV9PUklHSU5fRklMRSB9ID0gdml0ZUVudjtcclxuICAgIGNvbnN0IGNvbXByZXNzTGlzdCA9IFZJVEVfQlVJTERfQ09NUFJFU1Muc3BsaXQoXCIsXCIpO1xyXG4gICAgY29uc3QgcGx1Z2luczogUGx1Z2luT3B0aW9uW10gPSBbXTtcclxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJnemlwXCIpKSB7XHJcbiAgICAgICAgcGx1Z2lucy5wdXNoKFxyXG4gICAgICAgICAgICB2aXRlQ29tcHJlc3Npb24oe1xyXG4gICAgICAgICAgICAgICAgZXh0OiBcIi5nelwiLFxyXG4gICAgICAgICAgICAgICAgYWxnb3JpdGhtOiBcImd6aXBcIixcclxuICAgICAgICAgICAgICAgIGRlbGV0ZU9yaWdpbkZpbGU6IFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChjb21wcmVzc0xpc3QuaW5jbHVkZXMoXCJicm90bGlcIikpIHtcclxuICAgICAgICBwbHVnaW5zLnB1c2goXHJcbiAgICAgICAgICAgIHZpdGVDb21wcmVzc2lvbih7XHJcbiAgICAgICAgICAgICAgICBleHQ6IFwiLmJyXCIsXHJcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06IFwiYnJvdGxpQ29tcHJlc3NcIixcclxuICAgICAgICAgICAgICAgIGRlbGV0ZU9yaWdpbkZpbGU6IFZJVEVfQlVJTERfQ09NUFJFU1NfREVMRVRFX09SSUdJTl9GSUxFXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwbHVnaW5zO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBWaXRlUHdhXHJcbiAqIEBwYXJhbSB2aXRlRW52XHJcbiAqL1xyXG5jb25zdCBjcmVhdGVWaXRlUHdhID0gKHZpdGVFbnY6IFZpdGVFbnYpOiBQbHVnaW5PcHRpb24gfCBQbHVnaW5PcHRpb25bXSA9PiB7XHJcbiAgICBjb25zdCB7IFZJVEVfR0xPQl9BUFBfVElUTEUgfSA9IHZpdGVFbnY7XHJcbiAgICByZXR1cm4gVml0ZVBXQSh7XHJcbiAgICAgICAgcmVnaXN0ZXJUeXBlOiBcImF1dG9VcGRhdGVcIixcclxuICAgICAgICBtYW5pZmVzdDoge1xyXG4gICAgICAgICAgICBuYW1lOiBWSVRFX0dMT0JfQVBQX1RJVExFLFxyXG4gICAgICAgICAgICBzaG9ydF9uYW1lOiBWSVRFX0dMT0JfQVBQX1RJVExFLFxyXG4gICAgICAgICAgICB0aGVtZV9jb2xvcjogXCIjZmZmZmZmXCIsXHJcbiAgICAgICAgICAgIGljb25zOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3JjOiBcIi9sb2dvLnBuZ1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemVzOiBcIjE5MngxOTJcIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlL3BuZ1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogXCIvbG9nby5wbmdcIixcclxuICAgICAgICAgICAgICAgICAgICBzaXplczogXCI1MTJ4NTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZS9wbmdcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzcmM6IFwiL2xvZ28ucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFwiNTEyeDUxMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2UvcG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgcHVycG9zZTogXCJhbnkgbWFza2FibGVcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcbiIsICJ7XHJcbiAgICBcIm5hbWVcIjogXCJ5Y19vcHNfYWRtaW5fdHNcIixcclxuICAgIFwicHJpdmF0ZVwiOiB0cnVlLFxyXG4gICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcclxuICAgIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxyXG4gICAgXCJzY3JpcHRzXCI6IHtcclxuICAgICAgICBcImRldlwiOiBcInZpdGVcIixcclxuICAgICAgICBcInNlcnZlXCI6IFwidml0ZVwiLFxyXG4gICAgICAgIFwiYnVpbGQ6ZGV2XCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSBkZXZlbG9wbWVudFwiLFxyXG4gICAgICAgIFwiYnVpbGQ6dGVzdFwiOiBcInZ1ZS10c2MgJiYgdml0ZSBidWlsZCAtLW1vZGUgdGVzdFwiLFxyXG4gICAgICAgIFwiYnVpbGQ6cHJvXCI6IFwidnVlLXRzYyAmJiB2aXRlIGJ1aWxkIC0tbW9kZSBwcm9kdWN0aW9uXCIsXHJcbiAgICAgICAgXCJ0eXBlOmNoZWNrXCI6IFwidnVlLXRzYyAtLW5vRW1pdCAtLXNraXBMaWJDaGVja1wiLFxyXG4gICAgICAgIFwicHJldmlld1wiOiBcIm5wbSBydW4gYnVpbGQ6ZGV2ICYmIHZpdGUgcHJldmlld1wiLFxyXG4gICAgICAgIFwibGludDplc2xpbnRcIjogXCJlc2xpbnQgLS1maXggLS1leHQgLmpzLC50cywudnVlIC4vc3JjXCIsXHJcbiAgICAgICAgXCJsaW50OnByZXR0aWVyXCI6IFwicHJldHRpZXIgLS13cml0ZSBcXFwic3JjLyoqLyoue2pzLHRzLGpzb24sdHN4LGNzcyxsZXNzLHNjc3MsdnVlLGh0bWwsbWR9XFxcIlwiLFxyXG4gICAgICAgIFwibGludDpzdHlsZWxpbnRcIjogXCJzdHlsZWxpbnQgLS1jYWNoZSAtLWZpeCBcXFwiKiovKi57dnVlLGxlc3MscG9zdGNzcyxjc3Msc2Nzc31cXFwiIC0tY2FjaGUgLS1jYWNoZS1sb2NhdGlvbiBub2RlX21vZHVsZXMvLmNhY2hlL3N0eWxlbGludC9cIixcclxuICAgICAgICBcImxpbnQ6bGludC1zdGFnZWRcIjogXCJsaW50LXN0YWdlZFwiLFxyXG4gICAgICAgIFwicHJlcGFyZVwiOiBcImh1c2t5IGluc3RhbGxcIixcclxuICAgICAgICBcInJlbGVhc2VcIjogXCJzdGFuZGFyZC12ZXJzaW9uXCIsXHJcbiAgICAgICAgXCJjb21taXRcIjogXCJnaXQgYWRkIC1BICYmIGN6ZyAmJiBnaXQgcHVzaFwiXHJcbiAgICB9LFxyXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xyXG4gICAgICAgIFwiQGVsZW1lbnQtcGx1cy9pY29ucy12dWVcIjogXCJeMi4xLjBcIixcclxuICAgICAgICBcIkB0eXBlcy9kZWNpbWFsLmpzXCI6IFwiXjcuNC4wXCIsXHJcbiAgICAgICAgXCJAdnVldXAvdnVlLXF1aWxsXCI6IFwiXjEuMi4wXCIsXHJcbiAgICAgICAgXCJAdnVldXNlL2NvcmVcIjogXCJeMTAuMS4yXCIsXHJcbiAgICAgICAgXCJAd2FuZ2VkaXRvci9lZGl0b3JcIjogXCJeNS4xLjIzXCIsXHJcbiAgICAgICAgXCJAd2FuZ2VkaXRvci9lZGl0b3ItZm9yLXZ1ZVwiOiBcIl41LjEuMTJcIixcclxuICAgICAgICBcIkB6aGotdGFyZ2V0L3Z1ZTMta2luZC1lZGl0b3JcIjogXCJeMC4xLjNcIixcclxuICAgICAgICBcImFzeW5jLXZhbGlkYXRvclwiOiBcIl40LjIuNVwiLFxyXG4gICAgICAgIFwiYXhpb3NcIjogXCJeMS40LjBcIixcclxuICAgICAgICBcImJ3aXAtanNcIjogXCJeNC4zLjJcIixcclxuICAgICAgICBcImNyeXB0by1qc1wiOiBcIl40LjIuMFwiLFxyXG4gICAgICAgIFwiZGF5anNcIjogXCJeMS4xMS45XCIsXHJcbiAgICAgICAgXCJkZWNpbWFsXCI6IFwiXjAuMC4yXCIsXHJcbiAgICAgICAgXCJkZWZhdWx0LXBhc3NpdmUtZXZlbnRzXCI6IFwiXjIuMC4wXCIsXHJcbiAgICAgICAgXCJkcml2ZXIuanNcIjogXCJeMC45LjhcIixcclxuICAgICAgICBcImVsZW1lbnQtcGx1c1wiOiBcIl4yLjMuNFwiLFxyXG4gICAgICAgIFwiZmlsZS1zYXZlclwiOiBcIl4yLjAuNVwiLFxyXG4gICAgICAgIFwianMtbWQ1XCI6IFwiXjAuNy4zXCIsXHJcbiAgICAgICAgXCJqc2JhcmNvZGVcIjogXCJeMy4xMS42XCIsXHJcbiAgICAgICAgXCJqc29ucGFja1wiOiBcIl4xLjEuNVwiLFxyXG4gICAgICAgIFwibG9kYXNoLWVzXCI6IFwiXjQuMTcuMjFcIixcclxuICAgICAgICBcIm1hdm9uLWVkaXRvclwiOiBcIl4zLjAuMlwiLFxyXG4gICAgICAgIFwibWl0dFwiOiBcIl4zLjAuMFwiLFxyXG4gICAgICAgIFwibnByb2dyZXNzXCI6IFwiXjAuMi4wXCIsXHJcbiAgICAgICAgXCJwaW5pYVwiOiBcIl4yLjEuM1wiLFxyXG4gICAgICAgIFwicGluaWEtcGx1Z2luLXBlcnNpc3RlZHN0YXRlXCI6IFwiXjMuMS4wXCIsXHJcbiAgICAgICAgXCJwcmludC1qc1wiOiBcIl4xLjYuMFwiLFxyXG4gICAgICAgIFwicXNcIjogXCJeNi4xMy4xXCIsXHJcbiAgICAgICAgXCJxdWlsbFwiOiBcIl4yLjAuM1wiLFxyXG4gICAgICAgIFwic29ydGFibGVqc1wiOiBcIl4xLjE1LjBcIixcclxuICAgICAgICBcInZ1ZVwiOiBcIl4zLjMuNFwiLFxyXG4gICAgICAgIFwidnVlLXJvdXRlclwiOiBcIl40LjIuMlwiLFxyXG4gICAgICAgIFwidnVlZHJhZ2dhYmxlXCI6IFwiXjQuMS4wXCIsXHJcbiAgICAgICAgXCJ2eGUtdGFibGVcIjogXCJeNC41LjAtYmV0YS4xMFwiLFxyXG4gICAgICAgIFwieGUtdXRpbHNcIjogXCJeMy41LjExXCIsXHJcbiAgICAgICAgXCJ4bHN4XCI6IFwiXjAuMTguNVwiXHJcbiAgICB9LFxyXG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xyXG4gICAgICAgIFwiQGNvbW1pdGxpbnQvY2xpXCI6IFwiXjE3LjYuM1wiLFxyXG4gICAgICAgIFwiQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbFwiOiBcIl4xNy42LjNcIixcclxuICAgICAgICBcIkBpY29uaWZ5LWpzb24vZXBcIjogXCJeMS4xLjEwXCIsXHJcbiAgICAgICAgXCJAdHlwZXMvY3J5cHRvLWpzXCI6IFwiXjQuMi4yXCIsXHJcbiAgICAgICAgXCJAdHlwZXMvZmlsZS1zYXZlclwiOiBcIl4yLjAuNVwiLFxyXG4gICAgICAgIFwiQHR5cGVzL2pzLW1kNVwiOiBcIl4wLjcuMFwiLFxyXG4gICAgICAgIFwiQHR5cGVzL25wcm9ncmVzc1wiOiBcIl4wLjIuMFwiLFxyXG4gICAgICAgIFwiQHR5cGVzL3FzXCI6IFwiXjYuOS43XCIsXHJcbiAgICAgICAgXCJAdHlwZXMvc29ydGFibGVqc1wiOiBcIl4xLjE1LjFcIixcclxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luXCI6IFwiXjUuNTkuN1wiLFxyXG4gICAgICAgIFwiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlclwiOiBcIl41LjU5LjdcIixcclxuICAgICAgICBcIkB2aXRlanMvcGx1Z2luLXZ1ZVwiOiBcIl40LjIuM1wiLFxyXG4gICAgICAgIFwiQHZpdGVqcy9wbHVnaW4tdnVlLWpzeFwiOiBcIl4zLjAuMVwiLFxyXG4gICAgICAgIFwiYXV0b3ByZWZpeGVyXCI6IFwiXjEwLjQuMTRcIixcclxuICAgICAgICBcImN6LWdpdFwiOiBcIl4xLjYuMVwiLFxyXG4gICAgICAgIFwiY3pnXCI6IFwiXjEuNi4xXCIsXHJcbiAgICAgICAgXCJlc2xpbnRcIjogXCJeOC40MS4wXCIsXHJcbiAgICAgICAgXCJlc2xpbnQtY29uZmlnLXByZXR0aWVyXCI6IFwiXjguOC4wXCIsXHJcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyXCI6IFwiXjQuMi4xXCIsXHJcbiAgICAgICAgXCJlc2xpbnQtcGx1Z2luLXZ1ZVwiOiBcIl45LjE0LjBcIixcclxuICAgICAgICBcImh1c2t5XCI6IFwiXjguMC4zXCIsXHJcbiAgICAgICAgXCJsaW50LXN0YWdlZFwiOiBcIl4xMy4yLjJcIixcclxuICAgICAgICBcInBvc3Rjc3NcIjogXCJeOC40LjIzXCIsXHJcbiAgICAgICAgXCJwb3N0Y3NzLWh0bWxcIjogXCJeMS41LjBcIixcclxuICAgICAgICBcInByZXR0aWVyXCI6IFwiXjIuOC44XCIsXHJcbiAgICAgICAgXCJxcmNvZGVcIjogXCJeMS41LjNcIixcclxuICAgICAgICBcInJvbGx1cC1wbHVnaW4tdmlzdWFsaXplclwiOiBcIl41LjkuMFwiLFxyXG4gICAgICAgIFwic2Fzc1wiOiBcIl4xLjYyLjFcIixcclxuICAgICAgICBcInN0YW5kYXJkLXZlcnNpb25cIjogXCJeOS41LjBcIixcclxuICAgICAgICBcInN0eWxlbGludFwiOiBcIl4xNS42LjJcIixcclxuICAgICAgICBcInN0eWxlbGludC1jb25maWctaHRtbFwiOiBcIl4xLjEuMFwiLFxyXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1yZWNlc3Mtb3JkZXJcIjogXCJeNC4wLjBcIixcclxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtc2Nzc1wiOiBcIl4xMi4wLjBcIixcclxuICAgICAgICBcInN0eWxlbGludC1jb25maWctcmVjb21tZW5kZWQtdnVlXCI6IFwiXjEuNC4wXCIsXHJcbiAgICAgICAgXCJzdHlsZWxpbnQtY29uZmlnLXN0YW5kYXJkXCI6IFwiXjMzLjAuMFwiLFxyXG4gICAgICAgIFwic3R5bGVsaW50LWNvbmZpZy1zdGFuZGFyZC1zY3NzXCI6IFwiXjkuMC4wXCIsXHJcbiAgICAgICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuMC4yXCIsXHJcbiAgICAgICAgXCJ1bnBsdWdpbi1hdXRvLWltcG9ydFwiOiBcIl4wLjE2LjRcIixcclxuICAgICAgICBcInVucGx1Z2luLWljb25zXCI6IFwiXjAuMTYuM1wiLFxyXG4gICAgICAgIFwidW5wbHVnaW4tdnVlLWNvbXBvbmVudHNcIjogXCJeMC4yNS4xXCIsXHJcbiAgICAgICAgXCJ1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXNcIjogXCJeMS4wLjBcIixcclxuICAgICAgICBcInZpdGVcIjogXCJeNC4zLjlcIixcclxuICAgICAgICBcInZpdGUtcGx1Z2luLWNvbXByZXNzaW9uXCI6IFwiXjAuNS4xXCIsXHJcbiAgICAgICAgXCJ2aXRlLXBsdWdpbi1lc2xpbnRcIjogXCJeMS44LjFcIixcclxuICAgICAgICBcInZpdGUtcGx1Z2luLWh0bWxcIjogXCJeMy4yLjBcIixcclxuICAgICAgICBcInZpdGUtcGx1Z2luLXB3YVwiOiBcIl4wLjE1LjBcIixcclxuICAgICAgICBcInZpdGUtcGx1Z2luLXN2Zy1pY29uc1wiOiBcIl4yLjAuMVwiLFxyXG4gICAgICAgIFwidnVlLXRzY1wiOiBcIl4xLjYuNVwiXHJcbiAgICB9LFxyXG4gICAgXCJlbmdpbmVzXCI6IHtcclxuICAgICAgICBcIm5vZGVcIjogXCI+PTE2LjAuMFwiXHJcbiAgICB9LFxyXG4gICAgXCJicm93c2Vyc2xpc3RcIjoge1xyXG4gICAgICAgIFwicHJvZHVjdGlvblwiOiBbXHJcbiAgICAgICAgICAgIFwiPiAxJVwiLFxyXG4gICAgICAgICAgICBcIm5vdCBkZWFkXCIsXHJcbiAgICAgICAgICAgIFwibm90IG9wX21pbmkgYWxsXCJcclxuICAgICAgICBdLFxyXG4gICAgICAgIFwiZGV2ZWxvcG1lbnRcIjogW1xyXG4gICAgICAgICAgICBcImxhc3QgMSBjaHJvbWUgdmVyc2lvblwiLFxyXG4gICAgICAgICAgICBcImxhc3QgMSBmaXJlZm94IHZlcnNpb25cIixcclxuICAgICAgICAgICAgXCJsYXN0IDEgc2FmYXJpIHZlcnNpb25cIlxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICBcImNvbmZpZ1wiOiB7XHJcbiAgICAgICAgXCJjb21taXRpemVuXCI6IHtcclxuICAgICAgICAgICAgXCJwYXRoXCI6IFwibm9kZV9tb2R1bGVzL2N6LWdpdFwiXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBaVgsU0FBUyxjQUFjLGVBQXNDO0FBQzlhLFNBQVMsV0FBQUEsZ0JBQWU7OztBQ3FCakIsU0FBUyxXQUFXLFNBQThCO0FBQ3JELFFBQU0sTUFBVyxDQUFDO0FBRWxCLGFBQVcsV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3hDLFFBQUksV0FBVyxRQUFRLE9BQU8sRUFBRSxRQUFRLFFBQVEsSUFBSTtBQUNwRCxlQUFXLGFBQWEsU0FBUyxPQUFPLGFBQWEsVUFBVSxRQUFRO0FBQ3ZFLFFBQUksWUFBWTtBQUFhLGlCQUFXLE9BQU8sUUFBUTtBQUN2RCxRQUFJLFlBQVksY0FBYztBQUMxQixVQUFJO0FBQ0EsbUJBQVcsS0FBSyxNQUFNLFFBQVE7QUFBQSxNQUNsQyxTQUFTLE9BQVA7QUFBQSxNQUFlO0FBQUEsSUFDckI7QUFDQSxRQUFJLE9BQU8sSUFBSTtBQUFBLEVBQ25CO0FBQ0EsU0FBTztBQUNYOzs7QUN6Qk8sU0FBUyxZQUFZLE9BQWtCLENBQUMsR0FBRztBQUM5QyxRQUFNLE1BQXVCLENBQUM7QUFDOUIsYUFBVyxDQUFDLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFDakMsVUFBTSxVQUFVO0FBQ2hCLFVBQU0sVUFBVSxR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