From 532ac96abbc5837521d2d03cead97af76b7b24d7 Mon Sep 17 00:00:00 2001 From: landaiqing <3517283258@qq.com> Date: Fri, 12 Apr 2024 00:04:05 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=E4=BF=AE=E5=A4=8D(antd):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dantd=E7=BB=84=E4=BB=B6=E6=8C=89=E9=9C=80?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=A4=B1=E8=B4=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cz-config.js | 10 +- .eslintrc-auto-import.json | 14 +- auto-import.d.ts | 12 + components.d.ts | 4 + src/views/login/LoginPage.vue | 1 + tsconfig.json | 4 +- vite.config.mts | 26 +- ....timestamp-1711172711463-e712dd6497908.mjs | 223 ------------------ 8 files changed, 52 insertions(+), 242 deletions(-) delete mode 100644 vite.config.mts.timestamp-1711172711463-e712dd6497908.mjs diff --git a/.cz-config.js b/.cz-config.js index 729abbc..503d873 100644 --- a/.cz-config.js +++ b/.cz-config.js @@ -22,7 +22,7 @@ module.exports = { { value: '⚡️性能', name: '性能: 提升性能' }, { value: '✅测试', name: '测试: 添加一个测试' }, { value: '🔧工具', name: '工具: 开发工具变动(构建、脚手架工具等)' }, - { value: '⏪回滚', name: '回滚: 代码回退' }, + { value: '⏪回滚', name: '回滚: 代码回退' } ], // scope 类型(定义之后,可通过上下键选择) @@ -36,11 +36,11 @@ module.exports = { ['auth', '对 auth 修改'], ['other', '其他修改'], // 如果选择 custom,后面会让你再输入一个自定义的 scope。也可以不设置此项,把后面的 allowCustomScopes 设置为 true - ['custom', '以上都不是?我要自定义'], + ['custom', '以上都不是?我要自定义'] ].map(([value, description]) => { return { value, - name: `${value.padEnd(30)} (${description})`, + name: `${value.padEnd(30)} (${description})` } }), @@ -76,7 +76,7 @@ module.exports = { '填写更加详细的变更描述(可选)。使用 "|" 换行:\n', breaking: '列举非兼容性重大的变更(可选):\n', footer: '列举出所有变更的 ISSUES CLOSED(可选)。 例如: #31, #34:\n', - confirmCommit: '确认提交?', + confirmCommit: '确认提交?' }, // 设置只有 type 选择了 feat 或 fix,才询问 breaking message @@ -87,7 +87,7 @@ module.exports = { // subject 限制长度 subjectLimit: 100, - breaklineChar: '|', // 支持 body 和 footer + breaklineChar: '|' // 支持 body 和 footer // footerPrefix : 'ISSUES CLOSED:' // askForBreakingChangeFirst : true, } diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json index 11e5e4c..05fd05d 100644 --- a/.eslintrc-auto-import.json +++ b/.eslintrc-auto-import.json @@ -288,6 +288,18 @@ "watchThrottled": true, "watchTriggerable": true, "watchWithFilter": true, - "whenever": true + "whenever": true, + "acceptHMRUpdate": true, + "createPinia": true, + "defineStore": true, + "getActivePinia": true, + "mapActions": true, + "mapGetters": true, + "mapState": true, + "mapStores": true, + "mapWritableState": true, + "setActivePinia": true, + "setMapStoreSuffix": true, + "storeToRefs": true } } diff --git a/auto-import.d.ts b/auto-import.d.ts index 610dfb1..db76c43 100644 --- a/auto-import.d.ts +++ b/auto-import.d.ts @@ -6,6 +6,7 @@ export {} declare global { const EffectScope: typeof import('vue')['EffectScope'] + const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] const computed: typeof import('vue')['computed'] @@ -19,6 +20,7 @@ declare global { const createEventHook: typeof import('@vueuse/core')['createEventHook'] const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] + const createPinia: typeof import('pinia')['createPinia'] const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] @@ -29,9 +31,11 @@ declare global { const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] const defineComponent: typeof import('vue')['defineComponent'] + const defineStore: typeof import('pinia')['defineStore'] const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] const effectScope: typeof import('vue')['effectScope'] const extendRef: typeof import('@vueuse/core')['extendRef'] + const getActivePinia: typeof import('pinia')['getActivePinia'] const getCurrentInstance: typeof import('vue')['getCurrentInstance'] const getCurrentScope: typeof import('vue')['getCurrentScope'] const h: typeof import('vue')['h'] @@ -44,6 +48,11 @@ declare global { const isReadonly: typeof import('vue')['isReadonly'] const isRef: typeof import('vue')['isRef'] const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] + const mapActions: typeof import('pinia')['mapActions'] + const mapGetters: typeof import('pinia')['mapGetters'] + const mapState: typeof import('pinia')['mapState'] + const mapStores: typeof import('pinia')['mapStores'] + const mapWritableState: typeof import('pinia')['mapWritableState'] const markRaw: typeof import('vue')['markRaw'] const nextTick: typeof import('vue')['nextTick'] const onActivated: typeof import('vue')['onActivated'] @@ -84,9 +93,12 @@ declare global { const resolveComponent: typeof import('vue')['resolveComponent'] const resolveRef: typeof import('@vueuse/core')['resolveRef'] const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] + const setActivePinia: typeof import('pinia')['setActivePinia'] + const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'] const shallowReactive: typeof import('vue')['shallowReactive'] const shallowReadonly: typeof import('vue')['shallowReadonly'] const shallowRef: typeof import('vue')['shallowRef'] + const storeToRefs: typeof import('pinia')['storeToRefs'] const syncRef: typeof import('@vueuse/core')['syncRef'] const syncRefs: typeof import('@vueuse/core')['syncRefs'] const templateRef: typeof import('@vueuse/core')['templateRef'] diff --git a/components.d.ts b/components.d.ts index f536da0..6e274ae 100644 --- a/components.d.ts +++ b/components.d.ts @@ -7,9 +7,13 @@ export {} declare module 'vue' { export interface GlobalComponents { + AButton: typeof import('ant-design-vue/es')['Button'] ECharts: typeof import('./src/components/echarts/ECharts.vue')['default'] + LoginPage: typeof import('./src/views/login/LoginPage.vue')['default'] + Photo: typeof import('./src/components/photo/photo.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SvgIcon: typeof import('./src/components/svgIcon/SvgIcon.vue')['default'] + Tip: typeof import('./src/components/tip/tip.vue')['default'] } } diff --git a/src/views/login/LoginPage.vue b/src/views/login/LoginPage.vue index 7d683af..f401d5f 100644 --- a/src/views/login/LoginPage.vue +++ b/src/views/login/LoginPage.vue @@ -14,6 +14,7 @@ export default defineComponent({

Login

测试页面,看到这个,那么项目就成功跑起来了

+ Loading diff --git a/tsconfig.json b/tsconfig.json index 7c8129d..03f1565 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -42,7 +42,9 @@ "src/**/*.tsx", "src/**/*.d.ts", "src/**/*.vue", - "auto-import.d.ts" + "./auto-imports.d.ts", + "./components.d.ts", + "./.eslintrc-auto-import.json" ], "references": [ { diff --git a/vite.config.mts b/vite.config.mts index 98e7e42..cd2188c 100644 --- a/vite.config.mts +++ b/vite.config.mts @@ -57,6 +57,17 @@ export default defineConfig(({ mode, command }) => { }, plugins: [ vue(), + AutoImport({ + //安装两行后你会发现在组件中不用再导入ref,reactive等 + imports: ['vue', 'vue-router','@vueuse/core','pinia'], + dts: 'auto-import.d.ts', + //ant-design-vue + resolvers: [AntDesignVueResolver()], + eslintrc: { + enabled: true // 1、改为true用于生成eslint配置。2、生成后改回false,避免重复生成消耗 + + } + }), createHtmlPlugin({ minify: true, /** @@ -123,22 +134,13 @@ export default defineConfig(({ mode, command }) => { targets: ['chrome 52'], // 需要兼容的目标列表 additionalLegacyPolyfills: ['regenerator-runtime/runtime'] // 面向IE11时需要此插件 }), - AutoImport({ - //安装两行后你会发现在组件中不用再导入ref,reactive等 - imports: ['vue', 'vue-router','@vueuse/core'], - dts: 'auto-import.d.ts', - //ant-design-vue - resolvers: [AntDesignVueResolver()], - eslintrc: { - enabled: true // 1、改为true用于生成eslint配置。2、生成后改回false,避免重复生成消耗 - } - }), Components({ + dts: true, // 指定自动导入的组件位置,默认是 src/components - dirs: ['src/components'], + dirs: ['src/components','src/views'], //ant-design-vue - resolvers: [AntDesignVueResolver({ importStyle: true, resolveIcons: true })] + resolvers: [AntDesignVueResolver({ importStyle: "less", resolveIcons: true })] }) ], optimizeDeps: { diff --git a/vite.config.mts.timestamp-1711172711463-e712dd6497908.mjs b/vite.config.mts.timestamp-1711172711463-e712dd6497908.mjs deleted file mode 100644 index 1ce44f1..0000000 --- a/vite.config.mts.timestamp-1711172711463-e712dd6497908.mjs +++ /dev/null @@ -1,223 +0,0 @@ -// vite.config.mts -import { defineConfig, loadEnv } from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/vite@5.2.2_@types+node@20.11.30_less@4.2.0_terser@5.29.2/node_modules/vite/dist/node/index.js"; -import vue from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/@vitejs+plugin-vue@5.0.4_vite@5.2.2_vue@3.4.21/node_modules/@vitejs/plugin-vue/dist/index.mjs"; -import * as path from "path"; -import legacy from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/@vitejs+plugin-legacy@5.3.2_terser@5.29.2_vite@5.2.2/node_modules/@vitejs/plugin-legacy/dist/index.mjs"; -import AutoImport from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/unplugin-auto-import@0.17.5_@vueuse+core@10.9.0/node_modules/unplugin-auto-import/dist/vite.js"; -import Components from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/unplugin-vue-components@0.26.0_vue@3.4.21/node_modules/unplugin-vue-components/dist/vite.js"; -import { AntDesignVueResolver } from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/unplugin-vue-components@0.26.0_vue@3.4.21/node_modules/unplugin-vue-components/dist/resolvers.js"; -import { createSvgIconsPlugin } from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/vite-plugin-svg-icons@2.0.1_vite@5.2.2/node_modules/vite-plugin-svg-icons/dist/index.mjs"; -import autoprefixer from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/autoprefixer@10.4.19_postcss@8.4.38/node_modules/autoprefixer/lib/autoprefixer.js"; -import viteCompression from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/vite-plugin-compression@0.5.1_vite@5.2.2/node_modules/vite-plugin-compression/dist/index.mjs"; -import imagemin from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/unplugin-imagemin@0.5.18/node_modules/unplugin-imagemin/dist/vite.mjs"; -import { createHtmlPlugin } from "file:///E:/vue-projects/schisandra-cloud-album-front/node_modules/.pnpm/vite-plugin-html@3.2.2_vite@5.2.2/node_modules/vite-plugin-html/dist/index.mjs"; -var __vite_injected_original_dirname = "E:\\vue-projects\\schisandra-cloud-album-front"; -var vite_config_default = defineConfig(({ mode, command }) => { - const env = loadEnv(mode, process.cwd()); - return { - resolve: { - //设置别名 - alias: { - "@": path.resolve(__vite_injected_original_dirname, "src") - } - }, - css: { - // CSS 预处理器 - preprocessorOptions: { - //define global less variable - less: { - javascriptEnabled: true, - charset: false, - //禁用字符集声明(charset 选项用于控制是否在生成的 CSS 文件的头部添加 @charset "UTF-8";) - additionalData: '@import "./src/assets/styles/variables.less";' - } - }, - postcss: { - plugins: [ - autoprefixer({ - overrideBrowserslist: ["Chrome > 40", "ff > 31", "ie 11"] - }) - ] - } - }, - esbuild: { - // configure this value when the browser version of the development environment is lower - // minimum support es2015 - // https://esbuild.github.io/api/#target - target: "es2015", - include: /\.(ts|jsx|tsx)$/ - }, - plugins: [ - vue(), - createHtmlPlugin({ - minify: true, - /** - * 在这里写entry后,你将不需要在`index.html`内添加 script 标签,原有标签需要删除 - * @default src/main.ts - */ - entry: "src/main.ts", - filename: "index.html", - /** - * 如果你想将 `index.html`存放在指定文件夹,可以修改它,否则不需要配置 - * @default index.html - */ - template: "index.html", - /** - * 需要注入 index.html ejs 模版的数据 - */ - inject: { - data: { - title: env.VITE_TITLE_NAME - } - } - }), - imagemin({ - // Default mode sharp. support squoosh and sharp - mode: "sharp", - beforeBundle: true, - // Default configuration options for compressing different pictures - compress: { - jpg: { - quality: 10 - }, - jpeg: { - quality: 10 - }, - png: { - quality: 10 - }, - webp: { - quality: 10 - } - }, - conversion: [ - { from: "jpeg", to: "webp" }, - { from: "png", to: "webp" }, - { from: "JPG", to: "jpeg" } - ] - }), - viteCompression({ - verbose: true, - // 是否在控制台中输出压缩结果 - disable: false, - threshold: 10240, - // 如果体积大于阈值,将被压缩,单位为b,体积过小时请不要压缩,以免适得其反 - algorithm: "gzip", - // 压缩算法,可选['gzip',' brotliccompress ','deflate ','deflateRaw'] - ext: ".gz", - deleteOriginFile: true - // 源文件压缩后是否删除 - }), - // 修改 icons 相关配置 - createSvgIconsPlugin({ - // 指定需要缓存的图标文件夹 - iconDirs: [path.resolve(__vite_injected_original_dirname, "./src/assets/icons")] - }), - legacy({ - renderLegacyChunks: true, - modernPolyfills: true, - targets: ["chrome 52"], - // 需要兼容的目标列表 - additionalLegacyPolyfills: ["regenerator-runtime/runtime"] - // 面向IE11时需要此插件 - }), - AutoImport({ - //安装两行后你会发现在组件中不用再导入ref,reactive等 - imports: ["vue", "vue-router", "@vueuse/core"], - dts: "auto-import.d.ts", - //ant-design-vue - resolvers: [AntDesignVueResolver()], - eslintrc: { - enabled: true - // 1、改为true用于生成eslint配置。2、生成后改回false,避免重复生成消耗 - } - }), - Components({ - // 指定自动导入的组件位置,默认是 src/components - dirs: ["src/components"], - //ant-design-vue - resolvers: [AntDesignVueResolver({ importStyle: true, resolveIcons: true })] - }) - ], - optimizeDeps: { - include: ["core-js"] - }, - server: { - proxy: { - "/api": { - //target是代理的目标路径 - target: env.VITE_API_BASE_URL, - changeOrigin: true, - //必须要开启跨域 - rewrite: (path2) => path2.replace(/\/api/, "") - // 路径重写 - } - } - }, - build: { - // target: ['es2015'], // 设置最终构建的浏览器兼容目标 - moduleResolution: "node", - // 决定如何处理模块。 - outDir: "dist", - // 指定输出路径 - assetsDir: "assets", - // 指定生成静态文件目录 - assetsInlineLimit: "4096", - // 小于此阈值的导入或引用资源将内联为 base64 编码 - cssCodeSplit: true, - // 启用 CSS 代码拆分 - // cssTarget: '', // 允许用户为 CSS 的压缩设置一个不同的浏览器 target 与 build.target 一致 - sourcemap: false, - // 构建后是否生成 source map 文件 - // lib: {}, // 构建为库 - manifest: false, - // 当设置为 true,构建后将会生成 manifest.json 文件 - ssrManifest: false, - // 构建不生成 SSR 的 manifest 文件 - ssr: void 0, - // 生成面向 SSR 的构建 - minify: "terser", - // 指定使用哪种混淆器 - // 传递给 Terser 的更多 minify 选项 - terserOptions: { - compress: { - drop_console: true, - drop_debugger: true - } - }, - write: true, - // 启用将构建后的文件写入磁盘 - emptyOutDir: true, - // 构建时清空该目录 - brotliSize: true, - // 启用 brotli 压缩大小报告 - chunkSizeWarningLimit: 2e3, - // chunk 大小警告的限制 - watch: null, - // 设置为 {} 则会启用 rollup 的监听器 - rollupOptions: { - // 自定义底层的 Rollup 打包配置 - output: { - chunkFileNames: "js/[name]-[hash].js", - // 引入文件名的名称 - entryFileNames: "js/[name]-[hash].js", - // 包的入口文件名称 - assetFileNames: "[ext]/[name]-[hash].[ext]" - // 资源文件像 字体,图片等 - } - } - }, - output: { - // 最小化拆分包 - manualChunks(id) { - if (id.includes("node_modules")) { - return id.toString().split("node_modules/")[1].split("/")[0].toString(); - } - } - } - }; -}); -export { - vite_config_default as default -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubXRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRTpcXFxcdnVlLXByb2plY3RzXFxcXHNjaGlzYW5kcmEtY2xvdWQtYWxidW0tZnJvbnRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXHZ1ZS1wcm9qZWN0c1xcXFxzY2hpc2FuZHJhLWNsb3VkLWFsYnVtLWZyb250XFxcXHZpdGUuY29uZmlnLm10c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRTovdnVlLXByb2plY3RzL3NjaGlzYW5kcmEtY2xvdWQtYWxidW0tZnJvbnQvdml0ZS5jb25maWcubXRzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnLCBsb2FkRW52IH0gZnJvbSAndml0ZSdcclxuaW1wb3J0IHZ1ZSBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUnXHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGxlZ2FjeSBmcm9tICdAdml0ZWpzL3BsdWdpbi1sZWdhY3knXHJcblxyXG4vLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjV2dWVcdTRFMkRob29rIHJlYWN0aXZlIHJlZlx1N0I0OVxyXG5pbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJ1xyXG4vL1x1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NXVpLVx1N0VDNFx1NEVGNiBcdTZCRDRcdTU5ODJcdThCRjRhbnQtZGVzaWduLXZ1ZSAgZWxlbWVudC1wbHVzXHU3QjQ5XHJcbmltcG9ydCBDb21wb25lbnRzIGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGUnXHJcbi8vYW50LWRlc2lnbi12dWVcclxuaW1wb3J0IHsgQW50RGVzaWduVnVlUmVzb2x2ZXIgfSBmcm9tICd1bnBsdWdpbi12dWUtY29tcG9uZW50cy9yZXNvbHZlcnMnXHJcblxyXG4vLyBpY29ucyBwbHVnaW5cclxuaW1wb3J0IHsgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1zdmctaWNvbnMnXHJcblxyXG5pbXBvcnQgYXV0b3ByZWZpeGVyIGZyb20gJ2F1dG9wcmVmaXhlcidcclxuXHJcbmltcG9ydCB2aXRlQ29tcHJlc3Npb24gZnJvbSAndml0ZS1wbHVnaW4tY29tcHJlc3Npb24nXHJcbmltcG9ydCBpbWFnZW1pbiBmcm9tICd1bnBsdWdpbi1pbWFnZW1pbi92aXRlJ1xyXG5cclxuXHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1odG1sJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKCh7IG1vZGUsIGNvbW1hbmQgfSkgPT4ge1xyXG5cdGNvbnN0IGVudiA9IGxvYWRFbnYobW9kZSwgcHJvY2Vzcy5jd2QoKSlcclxuXHRyZXR1cm4ge1xyXG5cdFx0cmVzb2x2ZToge1xyXG5cdFx0XHQvL1x1OEJCRVx1N0Y2RVx1NTIyQlx1NTQwRFxyXG5cdFx0XHRhbGlhczoge1xyXG5cdFx0XHRcdCdAJzogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3NyYycpXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRjc3M6IHtcclxuXHRcdFx0Ly8gQ1NTIFx1OTg4NFx1NTkwNFx1NzQwNlx1NTY2OFxyXG5cdFx0XHRwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcblx0XHRcdFx0Ly9kZWZpbmUgZ2xvYmFsIGxlc3MgdmFyaWFibGVcclxuXHRcdFx0XHRsZXNzOiB7XHJcblx0XHRcdFx0XHRqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcclxuXHRcdFx0XHRcdGNoYXJzZXQ6IGZhbHNlLCAvL1x1Nzk4MVx1NzUyOFx1NUI1N1x1N0IyNlx1OTZDNlx1NThGMFx1NjYwRShjaGFyc2V0IFx1OTAwOVx1OTg3OVx1NzUyOFx1NEU4RVx1NjNBN1x1NTIzNlx1NjYyRlx1NTQyNlx1NTcyOFx1NzUxRlx1NjIxMFx1NzY4NCBDU1MgXHU2NTg3XHU0RUY2XHU3Njg0XHU1OTM0XHU5MEU4XHU2REZCXHU1MkEwIEBjaGFyc2V0IFwiVVRGLThcIjspXHJcblx0XHRcdFx0XHRhZGRpdGlvbmFsRGF0YTogJ0BpbXBvcnQgXCIuL3NyYy9hc3NldHMvc3R5bGVzL3ZhcmlhYmxlcy5sZXNzXCI7J1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0cG9zdGNzczoge1xyXG5cdFx0XHRcdHBsdWdpbnM6IFtcclxuXHRcdFx0XHRcdGF1dG9wcmVmaXhlcih7XHJcblx0XHRcdFx0XHRcdG92ZXJyaWRlQnJvd3NlcnNsaXN0OiBbJ0Nocm9tZSA+IDQwJywgJ2ZmID4gMzEnLCAnaWUgMTEnXVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRdXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRlc2J1aWxkOiB7XHJcblx0XHRcdC8vIGNvbmZpZ3VyZSB0aGlzIHZhbHVlIHdoZW4gdGhlIGJyb3dzZXIgdmVyc2lvbiBvZiB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgaXMgbG93ZXJcclxuXHRcdFx0Ly8gbWluaW11bSBzdXBwb3J0IGVzMjAxNVxyXG5cdFx0XHQvLyBodHRwczovL2VzYnVpbGQuZ2l0aHViLmlvL2FwaS8jdGFyZ2V0XHJcblx0XHRcdHRhcmdldDogJ2VzMjAxNScsXHJcblx0XHRcdGluY2x1ZGU6IC9cXC4odHN8anN4fHRzeCkkL1xyXG5cdFx0fSxcclxuXHRcdHBsdWdpbnM6IFtcclxuXHRcdFx0dnVlKCksXHJcblx0XHRcdGNyZWF0ZUh0bWxQbHVnaW4oe1xyXG5cdFx0XHRcdG1pbmlmeTogdHJ1ZSxcclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBcdTU3MjhcdThGRDlcdTkxQ0NcdTUxOTllbnRyeVx1NTQwRVx1RkYwQ1x1NEY2MFx1NUMwNlx1NEUwRFx1OTcwMFx1ODk4MVx1NTcyOGBpbmRleC5odG1sYFx1NTE4NVx1NkRGQlx1NTJBMCBzY3JpcHQgXHU2ODA3XHU3QjdFXHVGRjBDXHU1MzlGXHU2NzA5XHU2ODA3XHU3QjdFXHU5NzAwXHU4OTgxXHU1MjIwXHU5NjY0XHJcblx0XHRcdFx0ICogQGRlZmF1bHQgc3JjL21haW4udHNcclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHRlbnRyeTogJ3NyYy9tYWluLnRzJyxcclxuXHRcdFx0XHRmaWxlbmFtZTogJ2luZGV4Lmh0bWwnLFxyXG5cdFx0XHRcdC8qKlxyXG5cdFx0XHRcdCAqIFx1NTk4Mlx1Njc5Q1x1NEY2MFx1NjBGM1x1NUMwNiBgaW5kZXguaHRtbGBcdTVCNThcdTY1M0VcdTU3MjhcdTYzMDdcdTVCOUFcdTY1ODdcdTRFRjZcdTU5MzlcdUZGMENcdTUzRUZcdTRFRTVcdTRGRUVcdTY1MzlcdTVCODNcdUZGMENcdTU0MjZcdTUyMTlcdTRFMERcdTk3MDBcdTg5ODFcdTkxNERcdTdGNkVcclxuXHRcdFx0XHQgKiBAZGVmYXVsdCBpbmRleC5odG1sXHJcblx0XHRcdFx0ICovXHJcblx0XHRcdFx0dGVtcGxhdGU6ICdpbmRleC5odG1sJyxcclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBcdTk3MDBcdTg5ODFcdTZDRThcdTUxNjUgaW5kZXguaHRtbCBlanMgXHU2QTIxXHU3MjQ4XHU3Njg0XHU2NTcwXHU2MzZFXHJcblx0XHRcdFx0ICovXHJcblx0XHRcdFx0aW5qZWN0OiB7XHJcblx0XHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiBlbnYuVklURV9USVRMRV9OQU1FLFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSksXHJcblx0XHRcdGltYWdlbWluKHtcclxuXHRcdFx0XHQvLyBEZWZhdWx0IG1vZGUgc2hhcnAuIHN1cHBvcnQgc3F1b29zaCBhbmQgc2hhcnBcclxuXHRcdFx0XHRtb2RlOiAnc2hhcnAnLFxyXG5cdFx0XHRcdGJlZm9yZUJ1bmRsZTogdHJ1ZSxcclxuXHRcdFx0XHQvLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgY29tcHJlc3NpbmcgZGlmZmVyZW50IHBpY3R1cmVzXHJcblx0XHRcdFx0Y29tcHJlc3M6IHtcclxuXHRcdFx0XHRcdGpwZzoge1xyXG5cdFx0XHRcdFx0XHRxdWFsaXR5OiAxMFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGpwZWc6IHtcclxuXHRcdFx0XHRcdFx0cXVhbGl0eTogMTBcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRwbmc6IHtcclxuXHRcdFx0XHRcdFx0cXVhbGl0eTogMTBcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR3ZWJwOiB7XHJcblx0XHRcdFx0XHRcdHF1YWxpdHk6IDEwXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRjb252ZXJzaW9uOiBbXHJcblx0XHRcdFx0XHR7IGZyb206ICdqcGVnJywgdG86ICd3ZWJwJyB9LFxyXG5cdFx0XHRcdFx0eyBmcm9tOiAncG5nJywgdG86ICd3ZWJwJyB9LFxyXG5cdFx0XHRcdFx0eyBmcm9tOiAnSlBHJywgdG86ICdqcGVnJyB9XHJcblx0XHRcdFx0XVxyXG5cdFx0XHR9KSxcclxuXHRcdFx0dml0ZUNvbXByZXNzaW9uKHtcclxuXHRcdFx0XHR2ZXJib3NlOiB0cnVlLCAvLyBcdTY2MkZcdTU0MjZcdTU3MjhcdTYzQTdcdTUyMzZcdTUzRjBcdTRFMkRcdThGOTNcdTUxRkFcdTUzOEJcdTdGMjlcdTdFRDNcdTY3OUNcclxuXHRcdFx0XHRkaXNhYmxlOiBmYWxzZSxcclxuXHRcdFx0XHR0aHJlc2hvbGQ6IDEwMjQwLCAvLyBcdTU5ODJcdTY3OUNcdTRGNTNcdTc5RUZcdTU5MjdcdTRFOEVcdTk2MDhcdTUwM0NcdUZGMENcdTVDMDZcdTg4QUJcdTUzOEJcdTdGMjlcdUZGMENcdTUzNTVcdTRGNERcdTRFM0FiXHVGRjBDXHU0RjUzXHU3OUVGXHU4RkM3XHU1QzBGXHU2NUY2XHU4QkY3XHU0RTBEXHU4OTgxXHU1MzhCXHU3RjI5XHVGRjBDXHU0RUU1XHU1MTREXHU5MDAyXHU1Rjk3XHU1MTc2XHU1M0NEXHJcblx0XHRcdFx0YWxnb3JpdGhtOiAnZ3ppcCcsIC8vIFx1NTM4Qlx1N0YyOVx1N0I5N1x1NkNENVx1RkYwQ1x1NTNFRlx1OTAwOVsnZ3ppcCdcdUZGMEMnIGJyb3RsaWNjb21wcmVzcyAnXHVGRjBDJ2RlZmxhdGUgJ1x1RkYwQydkZWZsYXRlUmF3J11cclxuXHRcdFx0XHRleHQ6ICcuZ3onLFxyXG5cdFx0XHRcdGRlbGV0ZU9yaWdpbkZpbGU6IHRydWUgLy8gXHU2RTkwXHU2NTg3XHU0RUY2XHU1MzhCXHU3RjI5XHU1NDBFXHU2NjJGXHU1NDI2XHU1MjIwXHU5NjY0XHJcblx0XHRcdH0pLFxyXG5cdFx0XHQvLyBcdTRGRUVcdTY1MzkgaWNvbnMgXHU3NkY4XHU1MTczXHU5MTREXHU3RjZFXHJcblx0XHRcdGNyZWF0ZVN2Z0ljb25zUGx1Z2luKHtcclxuXHRcdFx0XHQvLyBcdTYzMDdcdTVCOUFcdTk3MDBcdTg5ODFcdTdGMTNcdTVCNThcdTc2ODRcdTU2RkVcdTY4MDdcdTY1ODdcdTRFRjZcdTU5MzlcclxuXHRcdFx0XHRpY29uRGlyczogW3BhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYy9hc3NldHMvaWNvbnMnKV1cclxuXHRcdFx0fSksXHJcblx0XHRcdGxlZ2FjeSh7XHJcblx0XHRcdFx0cmVuZGVyTGVnYWN5Q2h1bmtzOiB0cnVlLFxyXG5cdFx0XHRcdG1vZGVyblBvbHlmaWxsczogdHJ1ZSxcclxuXHRcdFx0XHR0YXJnZXRzOiBbJ2Nocm9tZSA1MiddLCAvLyBcdTk3MDBcdTg5ODFcdTUxN0NcdTVCQjlcdTc2ODRcdTc2RUVcdTY4MDdcdTUyMTdcdTg4NjhcclxuXHRcdFx0XHRhZGRpdGlvbmFsTGVnYWN5UG9seWZpbGxzOiBbJ3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZSddIC8vIFx1OTc2Mlx1NTQxMUlFMTFcdTY1RjZcdTk3MDBcdTg5ODFcdTZCNjRcdTYzRDJcdTRFRjZcclxuXHRcdFx0fSksXHJcblx0XHRcdEF1dG9JbXBvcnQoe1xyXG5cdFx0XHRcdC8vXHU1Qjg5XHU4OEM1XHU0RTI0XHU4ODRDXHU1NDBFXHU0RjYwXHU0RjFBXHU1M0QxXHU3M0IwXHU1NzI4XHU3RUM0XHU0RUY2XHU0RTJEXHU0RTBEXHU3NTI4XHU1MThEXHU1QkZDXHU1MTY1cmVmXHVGRjBDcmVhY3RpdmVcdTdCNDlcclxuXHRcdFx0XHRpbXBvcnRzOiBbJ3Z1ZScsICd2dWUtcm91dGVyJywnQHZ1ZXVzZS9jb3JlJ10sXHJcblx0XHRcdFx0ZHRzOiAnYXV0by1pbXBvcnQuZC50cycsXHJcblx0XHRcdFx0Ly9hbnQtZGVzaWduLXZ1ZVxyXG5cdFx0XHRcdHJlc29sdmVyczogW0FudERlc2lnblZ1ZVJlc29sdmVyKCldLFxyXG5cdFx0XHRcdGVzbGludHJjOiB7XHJcblx0XHRcdFx0XHRlbmFibGVkOiB0cnVlIC8vIDFcdTMwMDFcdTY1MzlcdTRFM0F0cnVlXHU3NTI4XHU0RThFXHU3NTFGXHU2MjEwZXNsaW50XHU5MTREXHU3RjZFXHUzMDAyMlx1MzAwMVx1NzUxRlx1NjIxMFx1NTQwRVx1NjUzOVx1NTZERWZhbHNlXHVGRjBDXHU5MDdGXHU1MTREXHU5MUNEXHU1OTBEXHU3NTFGXHU2MjEwXHU2RDg4XHU4MDE3XHJcblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSksXHJcblx0XHRcdENvbXBvbmVudHMoe1xyXG5cdFx0XHRcdC8vIFx1NjMwN1x1NUI5QVx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NVx1NzY4NFx1N0VDNFx1NEVGNlx1NEY0RFx1N0Y2RVx1RkYwQ1x1OUVEOFx1OEJBNFx1NjYyRiBzcmMvY29tcG9uZW50c1xyXG5cdFx0XHRcdGRpcnM6IFsnc3JjL2NvbXBvbmVudHMnXSxcclxuXHRcdFx0XHQvL2FudC1kZXNpZ24tdnVlXHJcblx0XHRcdFx0cmVzb2x2ZXJzOiBbQW50RGVzaWduVnVlUmVzb2x2ZXIoeyBpbXBvcnRTdHlsZTogdHJ1ZSwgcmVzb2x2ZUljb25zOiB0cnVlIH0pXVxyXG5cdFx0XHR9KVxyXG5cdFx0XSxcclxuXHRcdG9wdGltaXplRGVwczoge1xyXG5cdFx0XHRpbmNsdWRlOiBbJ2NvcmUtanMnXVxyXG5cdFx0fSxcclxuXHRcdHNlcnZlcjoge1xyXG5cdFx0XHRwcm94eToge1xyXG5cdFx0XHRcdCcvYXBpJzoge1xyXG5cdFx0XHRcdFx0Ly90YXJnZXRcdTY2MkZcdTRFRTNcdTc0MDZcdTc2ODRcdTc2RUVcdTY4MDdcdThERUZcdTVGODRcclxuXHRcdFx0XHRcdHRhcmdldDogZW52LlZJVEVfQVBJX0JBU0VfVVJMLFxyXG5cdFx0XHRcdFx0Y2hhbmdlT3JpZ2luOiB0cnVlLCAvL1x1NUZDNVx1OTg3Qlx1ODk4MVx1NUYwMFx1NTQyRlx1OERFOFx1NTdERlxyXG5cdFx0XHRcdFx0cmV3cml0ZTogKHBhdGgpID0+IHBhdGgucmVwbGFjZSgvXFwvYXBpLywgJycpIC8vIFx1OERFRlx1NUY4NFx1OTFDRFx1NTE5OVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGJ1aWxkOiB7XHJcblx0XHRcdC8vIHRhcmdldDogWydlczIwMTUnXSwgLy8gXHU4QkJFXHU3RjZFXHU2NzAwXHU3RUM4XHU2Nzg0XHU1RUZBXHU3Njg0XHU2RDRGXHU4OUM4XHU1NjY4XHU1MTdDXHU1QkI5XHU3NkVFXHU2ODA3XHJcblx0XHRcdG1vZHVsZVJlc29sdXRpb246ICdub2RlJywgLy8gXHU1MUIzXHU1QjlBXHU1OTgyXHU0RjU1XHU1OTA0XHU3NDA2XHU2QTIxXHU1NzU3XHUzMDAyXHJcblx0XHRcdG91dERpcjogJ2Rpc3QnLCAvLyBcdTYzMDdcdTVCOUFcdThGOTNcdTUxRkFcdThERUZcdTVGODRcclxuXHRcdFx0YXNzZXRzRGlyOiAnYXNzZXRzJywgLy8gXHU2MzA3XHU1QjlBXHU3NTFGXHU2MjEwXHU5NzU5XHU2MDAxXHU2NTg3XHU0RUY2XHU3NkVFXHU1RjU1XHJcblx0XHRcdGFzc2V0c0lubGluZUxpbWl0OiAnNDA5NicsIC8vIFx1NUMwRlx1NEU4RVx1NkI2NFx1OTYwOFx1NTAzQ1x1NzY4NFx1NUJGQ1x1NTE2NVx1NjIxNlx1NUYxNVx1NzUyOFx1OEQ0NFx1NkU5MFx1NUMwNlx1NTE4NVx1ODA1NFx1NEUzQSBiYXNlNjQgXHU3RjE2XHU3ODAxXHJcblx0XHRcdGNzc0NvZGVTcGxpdDogdHJ1ZSwgLy8gXHU1NDJGXHU3NTI4IENTUyBcdTRFRTNcdTc4MDFcdTYyQzZcdTUyMDZcclxuXHRcdFx0Ly8gY3NzVGFyZ2V0OiAnJywgLy8gXHU1MTQxXHU4QkI4XHU3NTI4XHU2MjM3XHU0RTNBIENTUyBcdTc2ODRcdTUzOEJcdTdGMjlcdThCQkVcdTdGNkVcdTRFMDBcdTRFMkFcdTRFMERcdTU0MENcdTc2ODRcdTZENEZcdTg5QzhcdTU2NjggdGFyZ2V0IFx1NEUwRSBidWlsZC50YXJnZXQgXHU0RTAwXHU4MUY0XHJcblx0XHRcdHNvdXJjZW1hcDogZmFsc2UsIC8vIFx1Njc4NFx1NUVGQVx1NTQwRVx1NjYyRlx1NTQyNlx1NzUxRlx1NjIxMCBzb3VyY2UgbWFwIFx1NjU4N1x1NEVGNlxyXG5cclxuXHRcdFx0Ly8gbGliOiB7fSwgLy8gXHU2Nzg0XHU1RUZBXHU0RTNBXHU1RTkzXHJcblx0XHRcdG1hbmlmZXN0OiBmYWxzZSwgLy8gXHU1RjUzXHU4QkJFXHU3RjZFXHU0RTNBIHRydWVcdUZGMENcdTY3ODRcdTVFRkFcdTU0MEVcdTVDMDZcdTRGMUFcdTc1MUZcdTYyMTAgbWFuaWZlc3QuanNvbiBcdTY1ODdcdTRFRjZcclxuXHRcdFx0c3NyTWFuaWZlc3Q6IGZhbHNlLCAvLyBcdTY3ODRcdTVFRkFcdTRFMERcdTc1MUZcdTYyMTAgU1NSIFx1NzY4NCBtYW5pZmVzdCBcdTY1ODdcdTRFRjZcclxuXHRcdFx0c3NyOiB1bmRlZmluZWQsIC8vIFx1NzUxRlx1NjIxMFx1OTc2Mlx1NTQxMSBTU1IgXHU3Njg0XHU2Nzg0XHU1RUZBXHJcblx0XHRcdG1pbmlmeTogJ3RlcnNlcicsIC8vIFx1NjMwN1x1NUI5QVx1NEY3Rlx1NzUyOFx1NTRFQVx1NzlDRFx1NkRGN1x1NkRDNlx1NTY2OFxyXG5cdFx0XHQvLyBcdTRGMjBcdTkwMTJcdTdFRDkgVGVyc2VyIFx1NzY4NFx1NjZGNFx1NTkxQSBtaW5pZnkgXHU5MDA5XHU5ODc5XHJcblx0XHRcdHRlcnNlck9wdGlvbnM6IHtcclxuXHRcdFx0XHRjb21wcmVzczoge1xyXG5cdFx0XHRcdFx0ZHJvcF9jb25zb2xlOiB0cnVlLFxyXG5cdFx0XHRcdFx0ZHJvcF9kZWJ1Z2dlcjogdHJ1ZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0d3JpdGU6IHRydWUsIC8vIFx1NTQyRlx1NzUyOFx1NUMwNlx1Njc4NFx1NUVGQVx1NTQwRVx1NzY4NFx1NjU4N1x1NEVGNlx1NTE5OVx1NTE2NVx1NzhDMVx1NzZEOFxyXG5cdFx0XHRlbXB0eU91dERpcjogdHJ1ZSwgLy8gXHU2Nzg0XHU1RUZBXHU2NUY2XHU2RTA1XHU3QTdBXHU4QkU1XHU3NkVFXHU1RjU1XHJcblx0XHRcdGJyb3RsaVNpemU6IHRydWUsIC8vIFx1NTQyRlx1NzUyOCBicm90bGkgXHU1MzhCXHU3RjI5XHU1OTI3XHU1QzBGXHU2MkE1XHU1NDRBXHJcblx0XHRcdGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMjAwMCwgLy8gY2h1bmsgXHU1OTI3XHU1QzBGXHU4QjY2XHU1NDRBXHU3Njg0XHU5NjUwXHU1MjM2XHJcblx0XHRcdHdhdGNoOiBudWxsLCAvLyBcdThCQkVcdTdGNkVcdTRFM0Ege30gXHU1MjE5XHU0RjFBXHU1NDJGXHU3NTI4IHJvbGx1cCBcdTc2ODRcdTc2RDFcdTU0MkNcdTU2NjhcclxuXHRcdFx0cm9sbHVwT3B0aW9uczogeyAgLy8gXHU4MUVBXHU1QjlBXHU0RTQ5XHU1RTk1XHU1QzQyXHU3Njg0IFJvbGx1cCBcdTYyNTNcdTUzMDVcdTkxNERcdTdGNkVcclxuXHRcdFx0XHRvdXRwdXQ6IHtcclxuXHRcdFx0XHRcdGNodW5rRmlsZU5hbWVzOiAnanMvW25hbWVdLVtoYXNoXS5qcycsIC8vIFx1NUYxNVx1NTE2NVx1NjU4N1x1NEVGNlx1NTQwRFx1NzY4NFx1NTQwRFx1NzlGMFxyXG5cdFx0XHRcdFx0ZW50cnlGaWxlTmFtZXM6ICdqcy9bbmFtZV0tW2hhc2hdLmpzJywgLy8gXHU1MzA1XHU3Njg0XHU1MTY1XHU1M0UzXHU2NTg3XHU0RUY2XHU1NDBEXHU3OUYwXHJcblx0XHRcdFx0XHRhc3NldEZpbGVOYW1lczogJ1tleHRdL1tuYW1lXS1baGFzaF0uW2V4dF0nIC8vIFx1OEQ0NFx1NkU5MFx1NjU4N1x1NEVGNlx1NTBDRiBcdTVCNTdcdTRGNTNcdUZGMENcdTU2RkVcdTcyNDdcdTdCNDlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRvdXRwdXQ6IHtcclxuXHRcdFx0Ly8gXHU2NzAwXHU1QzBGXHU1MzE2XHU2MkM2XHU1MjA2XHU1MzA1XHJcblx0XHRcdG1hbnVhbENodW5rcyhpZCkge1xyXG5cdFx0XHRcdGlmIChpZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJykpIHtcclxuXHRcdFx0XHRcdHJldHVybiBpZC50b1N0cmluZygpLnNwbGl0KCdub2RlX21vZHVsZXMvJylbMV0uc3BsaXQoJy8nKVswXS50b1N0cmluZygpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59KVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQThULFNBQVMsY0FBYyxlQUFlO0FBQ3BXLE9BQU8sU0FBUztBQUNoQixZQUFZLFVBQVU7QUFDdEIsT0FBTyxZQUFZO0FBR25CLE9BQU8sZ0JBQWdCO0FBRXZCLE9BQU8sZ0JBQWdCO0FBRXZCLFNBQVMsNEJBQTRCO0FBR3JDLFNBQVMsNEJBQTRCO0FBRXJDLE9BQU8sa0JBQWtCO0FBRXpCLE9BQU8scUJBQXFCO0FBQzVCLE9BQU8sY0FBYztBQUdyQixTQUFTLHdCQUF3QjtBQXJCakMsSUFBTSxtQ0FBbUM7QUF1QnpDLElBQU8sc0JBQVEsYUFBYSxDQUFDLEVBQUUsTUFBTSxRQUFRLE1BQU07QUFDbEQsUUFBTSxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUksQ0FBQztBQUN2QyxTQUFPO0FBQUEsSUFDTixTQUFTO0FBQUE7QUFBQSxNQUVSLE9BQU87QUFBQSxRQUNOLEtBQVUsYUFBUSxrQ0FBVyxLQUFLO0FBQUEsTUFDbkM7QUFBQSxJQUNEO0FBQUEsSUFDQSxLQUFLO0FBQUE7QUFBQSxNQUVKLHFCQUFxQjtBQUFBO0FBQUEsUUFFcEIsTUFBTTtBQUFBLFVBQ0wsbUJBQW1CO0FBQUEsVUFDbkIsU0FBUztBQUFBO0FBQUEsVUFDVCxnQkFBZ0I7QUFBQSxRQUNqQjtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNSLFNBQVM7QUFBQSxVQUNSLGFBQWE7QUFBQSxZQUNaLHNCQUFzQixDQUFDLGVBQWUsV0FBVyxPQUFPO0FBQUEsVUFDekQsQ0FBQztBQUFBLFFBQ0Y7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLElBQ0EsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSVIsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLElBQ1Y7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNSLElBQUk7QUFBQSxNQUNKLGlCQUFpQjtBQUFBLFFBQ2hCLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS1IsT0FBTztBQUFBLFFBQ1AsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLVixVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJVixRQUFRO0FBQUEsVUFDUCxNQUFNO0FBQUEsWUFDTCxPQUFPLElBQUk7QUFBQSxVQUNaO0FBQUEsUUFDRDtBQUFBLE1BQ0QsQ0FBQztBQUFBLE1BQ0QsU0FBUztBQUFBO0FBQUEsUUFFUixNQUFNO0FBQUEsUUFDTixjQUFjO0FBQUE7QUFBQSxRQUVkLFVBQVU7QUFBQSxVQUNULEtBQUs7QUFBQSxZQUNKLFNBQVM7QUFBQSxVQUNWO0FBQUEsVUFDQSxNQUFNO0FBQUEsWUFDTCxTQUFTO0FBQUEsVUFDVjtBQUFBLFVBQ0EsS0FBSztBQUFBLFlBQ0osU0FBUztBQUFBLFVBQ1Y7QUFBQSxVQUNBLE1BQU07QUFBQSxZQUNMLFNBQVM7QUFBQSxVQUNWO0FBQUEsUUFDRDtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1gsRUFBRSxNQUFNLFFBQVEsSUFBSSxPQUFPO0FBQUEsVUFDM0IsRUFBRSxNQUFNLE9BQU8sSUFBSSxPQUFPO0FBQUEsVUFDMUIsRUFBRSxNQUFNLE9BQU8sSUFBSSxPQUFPO0FBQUEsUUFDM0I7QUFBQSxNQUNELENBQUM7QUFBQSxNQUNELGdCQUFnQjtBQUFBLFFBQ2YsU0FBUztBQUFBO0FBQUEsUUFDVCxTQUFTO0FBQUEsUUFDVCxXQUFXO0FBQUE7QUFBQSxRQUNYLFdBQVc7QUFBQTtBQUFBLFFBQ1gsS0FBSztBQUFBLFFBQ0wsa0JBQWtCO0FBQUE7QUFBQSxNQUNuQixDQUFDO0FBQUE7QUFBQSxNQUVELHFCQUFxQjtBQUFBO0FBQUEsUUFFcEIsVUFBVSxDQUFNLGFBQVEsa0NBQVcsb0JBQW9CLENBQUM7QUFBQSxNQUN6RCxDQUFDO0FBQUEsTUFDRCxPQUFPO0FBQUEsUUFDTixvQkFBb0I7QUFBQSxRQUNwQixpQkFBaUI7QUFBQSxRQUNqQixTQUFTLENBQUMsV0FBVztBQUFBO0FBQUEsUUFDckIsMkJBQTJCLENBQUMsNkJBQTZCO0FBQUE7QUFBQSxNQUMxRCxDQUFDO0FBQUEsTUFDRCxXQUFXO0FBQUE7QUFBQSxRQUVWLFNBQVMsQ0FBQyxPQUFPLGNBQWEsY0FBYztBQUFBLFFBQzVDLEtBQUs7QUFBQTtBQUFBLFFBRUwsV0FBVyxDQUFDLHFCQUFxQixDQUFDO0FBQUEsUUFDbEMsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBO0FBQUEsUUFFVjtBQUFBLE1BQ0QsQ0FBQztBQUFBLE1BQ0QsV0FBVztBQUFBO0FBQUEsUUFFVixNQUFNLENBQUMsZ0JBQWdCO0FBQUE7QUFBQSxRQUV2QixXQUFXLENBQUMscUJBQXFCLEVBQUUsYUFBYSxNQUFNLGNBQWMsS0FBSyxDQUFDLENBQUM7QUFBQSxNQUM1RSxDQUFDO0FBQUEsSUFDRjtBQUFBLElBQ0EsY0FBYztBQUFBLE1BQ2IsU0FBUyxDQUFDLFNBQVM7QUFBQSxJQUNwQjtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ1AsT0FBTztBQUFBLFFBQ04sUUFBUTtBQUFBO0FBQUEsVUFFUCxRQUFRLElBQUk7QUFBQSxVQUNaLGNBQWM7QUFBQTtBQUFBLFVBQ2QsU0FBUyxDQUFDQSxVQUFTQSxNQUFLLFFBQVEsU0FBUyxFQUFFO0FBQUE7QUFBQSxRQUM1QztBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxNQUVOLGtCQUFrQjtBQUFBO0FBQUEsTUFDbEIsUUFBUTtBQUFBO0FBQUEsTUFDUixXQUFXO0FBQUE7QUFBQSxNQUNYLG1CQUFtQjtBQUFBO0FBQUEsTUFDbkIsY0FBYztBQUFBO0FBQUE7QUFBQSxNQUVkLFdBQVc7QUFBQTtBQUFBO0FBQUEsTUFHWCxVQUFVO0FBQUE7QUFBQSxNQUNWLGFBQWE7QUFBQTtBQUFBLE1BQ2IsS0FBSztBQUFBO0FBQUEsTUFDTCxRQUFRO0FBQUE7QUFBQTtBQUFBLE1BRVIsZUFBZTtBQUFBLFFBQ2QsVUFBVTtBQUFBLFVBQ1QsY0FBYztBQUFBLFVBQ2QsZUFBZTtBQUFBLFFBQ2hCO0FBQUEsTUFDRDtBQUFBLE1BQ0EsT0FBTztBQUFBO0FBQUEsTUFDUCxhQUFhO0FBQUE7QUFBQSxNQUNiLFlBQVk7QUFBQTtBQUFBLE1BQ1osdUJBQXVCO0FBQUE7QUFBQSxNQUN2QixPQUFPO0FBQUE7QUFBQSxNQUNQLGVBQWU7QUFBQTtBQUFBLFFBQ2QsUUFBUTtBQUFBLFVBQ1AsZ0JBQWdCO0FBQUE7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQTtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBO0FBQUEsUUFDakI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLElBQ0EsUUFBUTtBQUFBO0FBQUEsTUFFUCxhQUFhLElBQUk7QUFDaEIsWUFBSSxHQUFHLFNBQVMsY0FBYyxHQUFHO0FBQ2hDLGlCQUFPLEdBQUcsU0FBUyxFQUFFLE1BQU0sZUFBZSxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsU0FBUztBQUFBLFFBQ3ZFO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQ0QsQ0FBQzsiLAogICJuYW1lcyI6IFsicGF0aCJdCn0K