mxcad-app 1.0.67 → 1.0.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/chunks/identificationFrame.js.gz +0 -0
  2. package/dist/chunks/index10.js.gz +0 -0
  3. package/dist/chunks/index17.js.gz +0 -0
  4. package/dist/chunks/index20.js.gz +0 -0
  5. package/dist/chunks/index25.js.gz +0 -0
  6. package/dist/chunks/index28.js.gz +0 -0
  7. package/dist/chunks/index29.js.gz +0 -0
  8. package/dist/chunks/index36.js.gz +0 -0
  9. package/dist/chunks/index37.js.gz +0 -0
  10. package/dist/chunks/index38.js.gz +0 -0
  11. package/dist/chunks/index4.js.gz +0 -0
  12. package/dist/chunks/index42.js +1 -1
  13. package/dist/chunks/index44.js.gz +0 -0
  14. package/dist/chunks/index45.js.gz +0 -0
  15. package/dist/chunks/index5.js.gz +0 -0
  16. package/dist/chunks/index9.js.gz +0 -0
  17. package/dist/chunks/lib.js.gz +0 -0
  18. package/dist/chunks/mxcad.js.gz +0 -0
  19. package/dist/chunks/mxdraw.js.gz +0 -0
  20. package/dist/index.cjs.gz +0 -0
  21. package/dist/index.d.ts +17 -17
  22. package/dist/index.umd.js.gz +0 -0
  23. package/dist/mxcad.d.ts +153 -127
  24. package/dist/mxcadAppAssets/mxServerConfig.json.gz +0 -0
  25. package/dist/mxcadAppAssets/wasm/2d/mxdrawassembly_min.js.gz +0 -0
  26. package/dist/mxcadAppAssets/wasm/2d/mxdrawassembly_min.wasm.gz +0 -0
  27. package/dist/mxcadAppAssets/wasm/2d-st/mxdrawassembly_min.js.gz +0 -0
  28. package/dist/mxcadAppAssets/wasm/2d-st/mxdrawassembly_minst.wasm.gz +0 -0
  29. package/dist/mxcadAppAssets/wasm/2d-x64/mxdrawassembly_min.js.gz +0 -0
  30. package/dist/mxcadAppAssets/wasm/2d-x64/mxdrawassembly_min.wasm.gz +0 -0
  31. package/dist/mxcadAppAssets/wasm/2d-x64-st/mxdrawassembly_min.js.gz +0 -0
  32. package/dist/mxcadAppAssets/wasm/2d-x64-st/mxdrawassembly_minst.wasm.gz +0 -0
  33. package/dist/mxdraw.d.ts +2 -2
  34. package/dist/styles/style.css.gz +0 -0
  35. package/packToolPlugin/api-map.json.d.ts +1 -0
  36. package/packToolPlugin/{index-CXnnCbjH.mjs → index-Bkyb2FxJ.mjs} +2 -1
  37. package/packToolPlugin/{index-DubbRmDj.js → index-CmQPXuBg.js} +3 -2
  38. package/packToolPlugin/rollup/index.cjs +1 -1
  39. package/packToolPlugin/rollup/index.mjs +1 -1
  40. package/packToolPlugin/shared/types/mxServerConfig.d.ts +4 -0
  41. package/packToolPlugin/vite/index.cjs +1 -1
  42. package/packToolPlugin/vite/index.mjs +1 -1
  43. package/packToolPlugin/webpack/index.cjs +1 -1
  44. package/packToolPlugin/webpack/index.mjs +1 -1
  45. package/package.json +1 -1
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { H as o } from "./mxcad.js";
1
+ import { I as o } from "./mxcad.js";
2
2
  import { T as r, h as s, s as b } from "./lib.js";
3
3
  export {
4
4
  o as McDbXlsxTable,
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/dist/index.cjs.gz CHANGED
Binary file
package/dist/index.d.ts CHANGED
@@ -2635,15 +2635,15 @@ declare module '@howdyjs/to-drag' {
2635
2635
 
2636
2636
  declare module '@tiptap/core' {
2637
2637
  interface Commands<ReturnType> {
2638
- fontSize: {
2638
+ TextDecoration: {
2639
2639
  /**
2640
2640
  * Set the font size attribute
2641
2641
  */
2642
- setFontSize: (size: string) => ReturnType;
2642
+ setTextDecoration: (textDecoration: string) => ReturnType;
2643
2643
  /**
2644
2644
  * Unset the font size attribute
2645
2645
  */
2646
- unsetFontSize: () => ReturnType;
2646
+ unsetTextDecoration: () => ReturnType;
2647
2647
  };
2648
2648
  }
2649
2649
  }
@@ -2676,6 +2676,17 @@ declare module '@tiptap/core' {
2676
2676
  }
2677
2677
 
2678
2678
 
2679
+ declare module '@tiptap/core' {
2680
+ interface Commands<ReturnType> {
2681
+ Underline: {
2682
+ setUnderline: () => ReturnType;
2683
+ unsetUnderline: () => ReturnType;
2684
+ toggleUnderline: () => ReturnType;
2685
+ };
2686
+ }
2687
+ }
2688
+
2689
+
2679
2690
  declare module '@tiptap/core' {
2680
2691
  interface Commands<ReturnType> {
2681
2692
  Overline: {
@@ -2695,26 +2706,15 @@ declare module '@tiptap/core' {
2695
2706
 
2696
2707
  declare module '@tiptap/core' {
2697
2708
  interface Commands<ReturnType> {
2698
- Underline: {
2699
- setUnderline: () => ReturnType;
2700
- unsetUnderline: () => ReturnType;
2701
- toggleUnderline: () => ReturnType;
2702
- };
2703
- }
2704
- }
2705
-
2706
-
2707
- declare module '@tiptap/core' {
2708
- interface Commands<ReturnType> {
2709
- TextDecoration: {
2709
+ fontSize: {
2710
2710
  /**
2711
2711
  * Set the font size attribute
2712
2712
  */
2713
- setTextDecoration: (textDecoration: string) => ReturnType;
2713
+ setFontSize: (size: string) => ReturnType;
2714
2714
  /**
2715
2715
  * Unset the font size attribute
2716
2716
  */
2717
- unsetTextDecoration: () => ReturnType;
2717
+ unsetFontSize: () => ReturnType;
2718
2718
  };
2719
2719
  }
2720
2720
  }
Binary file
package/dist/mxcad.d.ts CHANGED
@@ -3,129 +3,6 @@ declare module "mxcad" {
3
3
 
4
4
  import { AcquirePointOsnapMode, AcquirePointType, DetailedResult, DynamicInputType, McEdGetPointWorldDrawObject, MrxDbgUiPrBaseReturn, MrxDbgUiPrPoint, MxCursorType, MxDbEntity, MxDrawObject } from 'mxdraw';
5
5
 
6
- /**
7
- * 将数据进行 Base64 编码
8
- * @param str 目标数据
9
- * @return Base64 编码
10
- */
11
- export function b64Encode(str: string): string;
12
- /**
13
- * 将 Base64 编码的字符串解码为原始数据
14
- * @param str Base64 编码
15
- * @returns 原始数据
16
- */
17
- export function b64Decode(str: string): string;
18
- /**
19
- * 把字符串转成16进制格式编辑
20
- */
21
- export function crateHexString(str: string): string;
22
- export type FileTypes = {
23
- description?: string;
24
- accept: {
25
- [type: string]: string[];
26
- };
27
- }[];
28
- /**
29
- * 文件下载保存(另存为只支持 Chrome86 或 Edge 86 以及 Opera 72)兼容 iE10等较低版本的浏览器
30
- */
31
- export function saveAsFileDialog({ blob, filename, types }: {
32
- blob: Blob;
33
- filename?: string;
34
- types?: FileTypes;
35
- }): Promise<false | (FileSystemFileHandle & {
36
- createWritable: () => Promise<WritableStreamDefaultWriter<any>>;
37
- }) | undefined>;
38
- /**
39
- * 在浏览器中下载一个文件
40
- * @param blob Blob 对象,它包含了要下载的文件的数据
41
- * @param filename 将要保存的文件的文件名
42
- */
43
- export function downloadFile(blob: any, filename: string): void;
44
- /**
45
- * 从指定的 URL 下载文件到用户的计算机中
46
- * @param url 下载文件的 URL 地址
47
- * @param filename 将要保存的文件的文件名
48
- */
49
- export function downloadFileFromUrl(url: string, filename: string): void;
50
- /**
51
- * 从指定URL中获取文件json字符串
52
- * @param url 文件的 URL 地址
53
- * @returns json字符串
54
- */
55
- export const getJsonFromUrl: (url: string) => Promise<any>;
56
- /**
57
- * 从指定URL中获取文件
58
- * @param url 文件的 URL 地址
59
- * @returns 目标文件
60
- */
61
- export const getFileFromUrl: (url: string) => Promise<Response | undefined>;
62
- /** 接收输入的提示字符串
63
- * @param strId 字符串的ID 起一个符合定义的ID名称
64
- * @param str 提示字符串
65
- * */
66
- export function _ML_String(strId: string, str: string): string;
67
- /**
68
- * 检查一个数值是否接近于零的
69
- * @param val 数值
70
- * @returns 布尔值
71
- */
72
- export function IsZero(val: number): boolean;
73
- /**
74
- * 将内存中的数据发送到指定的 URL,以实现文件上传功能
75
- * @param memoryData 内存中数据的对象或者数据结构
76
- * @param url 数据将要发送到的目标 URL 地址
77
- * @param filename 上传的文件的文件名
78
- * @param retCall 回调函数
79
- * @param param 可选的额外参数,可以用来传递额外的数据或配置信息给上传函数
80
- */
81
- export function postMemoryFile(memoryData: any, url: string, filename: string, retCall: (code: number, message: string) => void, param?: any): void;
82
- /**
83
- * 从 IndexedDB(Indexed Database,索引数据库)中获取文件,并将其上传到指定的 URL
84
- * @param filekey 从 IndexedDB 中获取的文件的键(key)
85
- * @param url 数据将要发送到的目标 URL 地址,用于上传文件
86
- * @param retCall 回调函数
87
- * @param param 可选的额外参数,可以用来传递额外的数据或配置信息给上传函数
88
- */
89
- export function postEmscriptenIndexedDBFile(filekey: string, url: string, retCall: (code: number, message: string) => void, param?: any): void;
90
- export function createCursor(cursorSize?: number, targetFrameSize?: number, color?: string): any;
91
- export const MxTools: {
92
- b64Encode: typeof b64Encode;
93
- b64Decode: typeof b64Decode;
94
- saveAsFileDialog: typeof saveAsFileDialog;
95
- downloadFile: typeof downloadFile;
96
- downloadFileFromUrl: typeof downloadFileFromUrl;
97
- getJsonFromUrl: (url: string) => Promise<any>;
98
- getFileFromUrl: (url: string) => Promise<Response | undefined>;
99
- _ML_String: typeof _ML_String;
100
- IsZero: typeof IsZero;
101
- postEmscriptenIndexedDBFile: typeof postEmscriptenIndexedDBFile;
102
- postMemoryFile: typeof postMemoryFile;
103
- createCursor: typeof createCursor;
104
- };
105
- export class MxCanvas2Image {
106
- private $support;
107
- private downloadMime;
108
- private mydocument;
109
- constructor(in_document?: any);
110
- private scaleCanvas;
111
- private getDataURL;
112
- private saveFile;
113
- private genImage;
114
- private fixType;
115
- private encodeData;
116
- private getImageData;
117
- private makeURI;
118
- private genBitmapImage;
119
- /**
120
- * saveAsImage
121
- * @param canvasElement
122
- * @param {String} image type
123
- * @param {Number} [optional] png width
124
- * @param {Number} [optional] png height
125
- */
126
- saveAsImage(canvas: any, width: any, height: any, type: any): void;
127
- convertToImage(canvas: any, width: any, height: any, type: any): HTMLImageElement | undefined;
128
- }
129
6
  /**
130
7
  * 表示一个 Rx 对象的基类。
131
8
  */
@@ -272,6 +149,8 @@ declare module "mxcad" {
272
149
  * @param type 对象的类型。
273
150
  */
274
151
  constructor(id?: number, type?: McObjectIdType);
152
+ initFromCpp(id: number | string): void;
153
+ getValueFromCpp(): any;
275
154
  /**
276
155
  * id是否有效.
277
156
  * @returns 布尔值
@@ -2418,6 +2297,17 @@ declare module "mxcad" {
2418
2297
  val: McObjectId;
2419
2298
  ret: boolean;
2420
2299
  };
2300
+ /**
2301
+ * 获取 resbuf 数据项中的 ObjectId 值。
2302
+ * @param lItem 数据项索引。
2303
+ * @example
2304
+ * ```ts
2305
+ * ```
2306
+ */
2307
+ AtObjectIdValue(lItem: number): {
2308
+ val: number;
2309
+ ret: boolean;
2310
+ };
2421
2311
  /**
2422
2312
  * 获取 resbuf 数据项中的字符串。
2423
2313
  * @param lItem 数据项索引。
@@ -2518,7 +2408,7 @@ declare module "mxcad" {
2518
2408
  * filter.AddObjectId (objId);
2519
2409
  * ```
2520
2410
  */
2521
- AddObjectId(val: number, lDataType?: number): number;
2411
+ AddObjectId(val: number | BigInt, lDataType?: number): number;
2522
2412
  /**
2523
2413
  * 添加字符串到 resbuf 中。
2524
2414
  * @param str 字符串。
@@ -9652,8 +9542,8 @@ declare module "mxcad" {
9652
9542
  * }
9653
9543
  * ```
9654
9544
  */
9655
- shapeStyleAt(index: number): number;
9656
- setShapeStyleAt(index: number, value: number): boolean;
9545
+ shapeStyleAt(index: number): McObjectId;
9546
+ setShapeStyleAt(index: number, id: McObjectId): boolean;
9657
9547
  /**
9658
9548
  * 获取或设置指定索引处的形状编号。
9659
9549
  * @param index 线型定义数组中索引。
@@ -13649,6 +13539,7 @@ declare module "mxcad" {
13649
13539
  /** TrueType字体 */
13650
13540
  private trueFonts;
13651
13541
  private dMcGeBakTol;
13542
+ private iIsWasmx64;
13652
13543
  /**
13653
13544
  * 初始化 McAppType 对象。
13654
13545
  * @param imp 传入的 imp 对象。
@@ -13851,6 +13742,7 @@ declare module "mxcad" {
13851
13742
  * ```
13852
13743
  */
13853
13744
  addNetworkLoadingFont(fontfiles: string | string[], fontFilesLoadOnInitialization?: string[], isAddTo?: boolean): void;
13745
+ isWasmx64(): boolean;
13854
13746
  /**
13855
13747
  * 全局参数的初始设置
13856
13748
  * @param ini 初始设置值
@@ -14161,6 +14053,13 @@ declare module "mxcad" {
14161
14053
  * ```
14162
14054
  */
14163
14055
  encodeToGb2312(str: string): string;
14056
+ /**
14057
+ * 得到cpp转过的id value
14058
+ * @example
14059
+ * ```ts
14060
+ * ```
14061
+ */
14062
+ getIdFromCpp(id: number | string): any;
14164
14063
  }
14165
14064
  /**
14166
14065
  * MxCADUI 模块提供插件程序使用的接口.
@@ -16381,7 +16280,7 @@ declare module "mxcad" {
16381
16280
  });
16382
16281
  * ```
16383
16282
  */
16384
- export function loadMxCADassembly(call?: (MxCpp: MxCppType) => void, locateFile?: (fileName: string, base?: string | URL) => string, wasmBinary?: ArrayBuffer, fontspath?: string, networkFonts?: string[], mxcad?: any): Promise<MxCppType>;
16283
+ export function loadMxCADassembly(call?: (MxCpp: MxCppType) => void, locateFile?: any, wasmBinary?: ArrayBuffer, fontspath?: string, networkFonts?: string[], mxcad?: any, wasmx64?: any): Promise<MxCppType>;
16385
16284
  /**
16386
16285
  * 检查浏览器类型和版本
16387
16286
  * @returns { object } ok 布尔值,表示浏览器是否符合要求 | error 如果浏览器不符合要求,则包含错误信息;否则为空字符串 | var 包含了浏览器信息的对象
@@ -16506,6 +16405,8 @@ declare module "mxcad" {
16506
16405
  browse?: boolean | number;
16507
16406
  /**是否使用webgl1方式启动 */
16508
16407
  webgl1?: boolean;
16408
+ /**是否加载64位的wasm,默认加载32位 */
16409
+ wasmx64?: boolean;
16509
16410
  }
16510
16411
  /** 创建MxCad实例
16511
16412
  * @param config 参数配置
@@ -16567,6 +16468,131 @@ declare module "mxcad" {
16567
16468
  * 绘制矩形
16568
16469
  */
16569
16470
  export const drawRectang: () => Promise<void>;
16471
+ /**
16472
+ * 将数据进行 Base64 编码
16473
+ * @param str 目标数据
16474
+ * @return Base64 编码
16475
+ */
16476
+ export function b64Encode(str: string): string;
16477
+ /**
16478
+ * 将 Base64 编码的字符串解码为原始数据
16479
+ * @param str Base64 编码
16480
+ * @returns 原始数据
16481
+ */
16482
+ export function b64Decode(str: string): string;
16483
+ /**
16484
+ * 把字符串转成16进制格式编辑
16485
+ */
16486
+ export function crateHexString(str: string): string;
16487
+ export type FileTypes = {
16488
+ description?: string;
16489
+ accept: {
16490
+ [type: string]: string[];
16491
+ };
16492
+ }[];
16493
+ /**
16494
+ * 文件下载保存(另存为只支持 Chrome86 或 Edge 86 以及 Opera 72)兼容 iE10等较低版本的浏览器
16495
+ */
16496
+ export function saveAsFileDialog({ blob, filename, types }: {
16497
+ blob: Blob;
16498
+ filename?: string;
16499
+ types?: FileTypes;
16500
+ }): Promise<false | (FileSystemFileHandle & {
16501
+ createWritable: () => Promise<WritableStreamDefaultWriter<any>>;
16502
+ }) | undefined>;
16503
+ /**
16504
+ * 在浏览器中下载一个文件
16505
+ * @param blob Blob 对象,它包含了要下载的文件的数据
16506
+ * @param filename 将要保存的文件的文件名
16507
+ */
16508
+ export function downloadFile(blob: any, filename: string): void;
16509
+ /**
16510
+ * 从指定的 URL 下载文件到用户的计算机中
16511
+ * @param url 下载文件的 URL 地址
16512
+ * @param filename 将要保存的文件的文件名
16513
+ */
16514
+ export function downloadFileFromUrl(url: string, filename: string): void;
16515
+ /**
16516
+ * 从指定URL中获取文件json字符串
16517
+ * @param url 文件的 URL 地址
16518
+ * @returns json字符串
16519
+ */
16520
+ export const getJsonFromUrl: (url: string) => Promise<any>;
16521
+ /**
16522
+ * 从指定URL中获取文件
16523
+ * @param url 文件的 URL 地址
16524
+ * @returns 目标文件
16525
+ */
16526
+ export const getFileFromUrl: (url: string) => Promise<Response | undefined>;
16527
+ /** 接收输入的提示字符串
16528
+ * @param strId 字符串的ID 起一个符合定义的ID名称
16529
+ * @param str 提示字符串
16530
+ * */
16531
+ export function _ML_String(strId: string, str: string): string;
16532
+ /**
16533
+ * 检查一个数值是否接近于零的
16534
+ * @param val 数值
16535
+ * @returns 布尔值
16536
+ */
16537
+ export function IsZero(val: number): boolean;
16538
+ /**
16539
+ * 将内存中的数据发送到指定的 URL,以实现文件上传功能
16540
+ * @param memoryData 内存中数据的对象或者数据结构
16541
+ * @param url 数据将要发送到的目标 URL 地址
16542
+ * @param filename 上传的文件的文件名
16543
+ * @param retCall 回调函数
16544
+ * @param param 可选的额外参数,可以用来传递额外的数据或配置信息给上传函数
16545
+ */
16546
+ export function postMemoryFile(memoryData: any, url: string, filename: string, retCall: (code: number, message: string) => void, param?: any): void;
16547
+ /**
16548
+ * 从 IndexedDB(Indexed Database,索引数据库)中获取文件,并将其上传到指定的 URL
16549
+ * @param filekey 从 IndexedDB 中获取的文件的键(key)
16550
+ * @param url 数据将要发送到的目标 URL 地址,用于上传文件
16551
+ * @param retCall 回调函数
16552
+ * @param param 可选的额外参数,可以用来传递额外的数据或配置信息给上传函数
16553
+ */
16554
+ export function postEmscriptenIndexedDBFile(filekey: string, url: string, retCall: (code: number, message: string) => void, param?: any): void;
16555
+ export function createCursor(cursorSize?: number, targetFrameSize?: number, color?: string): any;
16556
+ export function createMdGeLongLongArrayFormAryId(aryId: McObjectId[]): any;
16557
+ export const MxTools: {
16558
+ b64Encode: typeof b64Encode;
16559
+ b64Decode: typeof b64Decode;
16560
+ saveAsFileDialog: typeof saveAsFileDialog;
16561
+ downloadFile: typeof downloadFile;
16562
+ downloadFileFromUrl: typeof downloadFileFromUrl;
16563
+ getJsonFromUrl: (url: string) => Promise<any>;
16564
+ getFileFromUrl: (url: string) => Promise<Response | undefined>;
16565
+ _ML_String: typeof _ML_String;
16566
+ IsZero: typeof IsZero;
16567
+ postEmscriptenIndexedDBFile: typeof postEmscriptenIndexedDBFile;
16568
+ postMemoryFile: typeof postMemoryFile;
16569
+ createCursor: typeof createCursor;
16570
+ createMdGeLongLongArrayFormAryId: typeof createMdGeLongLongArrayFormAryId;
16571
+ };
16572
+ export class MxCanvas2Image {
16573
+ private $support;
16574
+ private downloadMime;
16575
+ private mydocument;
16576
+ constructor(in_document?: any);
16577
+ private scaleCanvas;
16578
+ private getDataURL;
16579
+ private saveFile;
16580
+ private genImage;
16581
+ private fixType;
16582
+ private encodeData;
16583
+ private getImageData;
16584
+ private makeURI;
16585
+ private genBitmapImage;
16586
+ /**
16587
+ * saveAsImage
16588
+ * @param canvasElement
16589
+ * @param {String} image type
16590
+ * @param {Number} [optional] png width
16591
+ * @param {Number} [optional] png height
16592
+ */
16593
+ saveAsImage(canvas: any, width: any, height: any, type: any): void;
16594
+ convertToImage(canvas: any, width: any, height: any, type: any): HTMLImageElement | undefined;
16595
+ }
16570
16596
  export type Map = any;
16571
16597
  /**
16572
16598
  * cad地图对象
package/dist/mxdraw.d.ts CHANGED
@@ -1935,7 +1935,7 @@ declare module "mxdraw" {
1935
1935
  initRendererParam(param: object): void;
1936
1936
  getMxAllSelect(): Array<number>;
1937
1937
  addMxCurrentSelect(id: number, isFireSelectChange: boolean, isDisplayGrid: boolean): boolean;
1938
- clearMxCurrentSelect(): boolean;
1938
+ clearMxCurrentSelect(isClearPrvCommandSelect: boolean): boolean;
1939
1939
  getMxEntityUserObject(id: number): MxDbEntity;
1940
1940
  findMxEntityAtPoint(ptMouse: THREE.Vector3, isDocCoord?: boolean, retWordDrawXDataCall?: (id: number, data: any) => void): Array<MxDbEntity>;
1941
1941
  setMouseMiddlePan(isPan: boolean | number): void;
@@ -2520,7 +2520,7 @@ declare module "mxdraw" {
2520
2520
  *
2521
2521
  * ```
2522
2522
  */
2523
- clearMxCurrentSelect(): boolean;
2523
+ clearMxCurrentSelect(isClearPrvCommandSelect?: boolean): boolean;
2524
2524
  /**
2525
2525
  * 清除显示的夹点
2526
2526
  * @returns void
Binary file
@@ -169,6 +169,7 @@ declare const _default: {
169
169
  "crateHexString",
170
170
  "createCursor",
171
171
  "createMcCmColor",
172
+ "createMdGeLongLongArrayFormAryId",
172
173
  "createMxCad",
173
174
  "downloadFile",
174
175
  "downloadFileFromUrl",
@@ -172,6 +172,7 @@ const mxcad = [
172
172
  "crateHexString",
173
173
  "createCursor",
174
174
  "createMcCmColor",
175
+ "createMdGeLongLongArrayFormAryId",
175
176
  "createMxCad",
176
177
  "downloadFile",
177
178
  "downloadFileFromUrl",
@@ -1522,4 +1523,4 @@ export {
1522
1523
  getContentType as h,
1523
1524
  resolveOptions as r
1524
1525
  };
1525
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtQ1hubkNiakgubWpzIiwic291cmNlcyI6WyIuLi8uLi9wYWNrVG9vbFBsdWdpblNyYy9zaGFyZWQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbi8vIHBsdWdpbnMvc2hhcmVkL2luZGV4LnRzXHJcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMsIHsgTm9QYXJhbUNhbGxiYWNrIH0gZnJvbSAnZnMnO1xyXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcclxuaW1wb3J0IHsgbmFtZSB9IGZyb20gXCIuLi8uLi9saWIvcGFja2FnZS5qc29uXCJcclxuXHJcbmltcG9ydCB7IE14UXVpY2tDb21tYW5kIH0gZnJvbSBcIi4vdHlwZXMvbXhRdWlja0NvbW1hbmQuZFwiXHJcbmltcG9ydCB7IE14U2VydmVyQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhTZXJ2ZXJDb25maWcuZFwiXHJcbmltcG9ydCB7IE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcuZFwiXHJcbmltcG9ydCB7IE14VWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFVpQ29uZmlnLmRcIlxyXG5pbXBvcnQgeyBNeGNhZFVpQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhjYWRVaUNvbmZpZy5kXCJcclxuaW1wb3J0IHsgVnVldGlmeVRoZW1lQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvdnVldGlmeVRoZW1lQ29uZmlnLmRcIlxyXG5pbXBvcnQgYXBpTWFwIGZyb20gJy4uL2FwaS1tYXAuanNvbidcclxuZXhwb3J0IGNvbnN0IGdldEFwaU1hcCA9ICgpID0+IGFwaU1hcFxyXG5leHBvcnQgaW50ZXJmYWNlIE14UGx1Z2luQ29uZmlnIHtcclxuICBwbHVnaW5zOiAoc3RyaW5nIHwge1xyXG4gICAgbmFtZT86IHN0cmluZyxcclxuICAgIGlzQWZ0ZXJMb2FkPzogYm9vbGVhbixcclxuICAgIGRpcj86IGJvb2xlYW4sXHJcbiAgICB2ZXJzaW9uPzogc3RyaW5nXHJcbiAgfSlbXVxyXG59XHJcbi8vID09PSDmlrDlop7vvJrphY3nva7mlofku7blkI3luLjph48gPT09XHJcbmV4cG9ydCBjb25zdCBDT05GSUdfRklMRU5BTUVTID0gW1xyXG4gIC8vICdteGNhZFVpQ29uZmlnLmpzb24nLFxyXG4gICdteFF1aWNrQ29tbWFuZC5qc29uJyxcclxuICAnbXhTZXJ2ZXJDb25maWcuanNvbicsXHJcbiAgJ214U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnLmpzb24nLFxyXG4gICdteFVpQ29uZmlnLmpzb24nLFxyXG4gICd2dWV0aWZ5VGhlbWVDb25maWcuanNvbicsXHJcbiAgLy8gJ3BsdWdpbnMvY29uZmlnLmpzb24nXHJcbl0gYXMgY29uc3Q7XHJcbi8qKlxyXG4gKiDphY3nva7mlofku7blpITnkIblmahcclxuICog5Y+v6YCJ77ya5a+554m55a6a6YWN572u5paH5Lu26L+b6KGM6L+Q6KGM5pe25L+u5pS5XHJcbiAqIOWHveaVsOaOpeaUtuWOn+WniyBKU09OIOaVsOaNru+8jOi/lOWbnuS/ruaUueWQjueahCBKU09OIOaVsOaNru+8iOWPr+W8guatpe+8iVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1GdW5jdGlvbnMge1xyXG4gIC8vIHRyYW5zZm9ybU14Y2FkVWlDb25maWcoZGF0YTogTXhjYWRVaUNvbmZpZyk6IFByb21pc2U8TXhjYWRVaUNvbmZpZz4gfCBNeGNhZFVpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybU14UXVpY2tDb21tYW5kKGRhdGE6IE14UXVpY2tDb21tYW5kKTogUHJvbWlzZTxNeFF1aWNrQ29tbWFuZD4gfCBNeFF1aWNrQ29tbWFuZDtcclxuICB0cmFuc2Zvcm1NeFNlcnZlckNvbmZpZyhkYXRhOiBNeFNlcnZlckNvbmZpZyk6IFByb21pc2U8TXhTZXJ2ZXJDb25maWc+IHwgTXhTZXJ2ZXJDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcoZGF0YTogTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcpOiBQcm9taXNlPE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnPiB8IE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybU14VWlDb25maWcoZGF0YTogTXhVaUNvbmZpZyk6IFByb21pc2U8TXhVaUNvbmZpZz4gfCBNeFVpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybVZ1ZXRpZnlUaGVtZUNvbmZpZyhkYXRhOiBWdWV0aWZ5VGhlbWVDb25maWcpOiBQcm9taXNlPFZ1ZXRpZnlUaGVtZUNvbmZpZz4gfCBWdWV0aWZ5VGhlbWVDb25maWc7XHJcbiAgLy8gdHJhbnNmb3JtTXhQbHVnaW5zQ29uZmlnKGRhdGE6IE14UGx1Z2luQ29uZmlnW10pOiBQcm9taXNlPE14UGx1Z2luQ29uZmlnW10+IHwgTXhQbHVnaW5Db25maWdbXTtcclxufVxyXG4vLyDmianlsZXmj5Lku7bpgInpobnmjqXlj6MgPT09XHJcbmV4cG9ydCBpbnRlcmZhY2UgTXhDYWRBc3NldHNQbHVnaW5PcHRpb25zIGV4dGVuZHMgUGFydGlhbDxUcmFuc2Zvcm1GdW5jdGlvbnM+IHtcclxuICAvKipcclxuICAgKiDmnoTlu7rlkI7vvIxteGNhZEFwcEFzc2V0cyDotYTmupDlrZjmlL7nmoTlrZDnm67lvZXlkI3jgIJcclxuICAgKiBAZGVmYXVsdCAnbXhjYWRBcHBBc3NldHMnXHJcbiAgICovXHJcbiAgb3V0cHV0RGlyPzogc3RyaW5nO1xyXG4gIC8qKiDnrKzkuInmlrnkvp3otZYqL1xyXG4gIGxpYnJhcnlOYW1lcz86IChrZXlvZiB0eXBlb2YgZXh0ZXJuYWxzKVtdO1xyXG4gIC8qKiDmmK/lkKbljZXnur/nqIvliqDovb13YXNtICjpu5jorqTkvb/nlKjlpJrnur/nqIvlj4rliqDovb0pICovXHJcbiAgaXNXYXNtU3Q/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICog5piv5ZCm5ZCv55So6aKE5Y6L57yp6LWE5rqQ77yI5aaCIC5neiDmlofku7bvvInnmoTmi7fotJ0g6buY6K6k5pivdHJ1ZVxyXG4gICog6K6+572u5Li6IGZhbHNlIOaXtu+8jC5neiDljovnvKnmlofku7blsIbkuI3kvJrooqvlpI3liLbliLDovpPlh7rnm67lvZVcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqL1xyXG4gIGVuYWJsZUNvbXByZXNzZWRBc3NldHM/OiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuLy8gPT09IOWinuW8uu+8mnJlc29sdmVPcHRpb25zIOm7mOiupOWAvCA9PT1cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVPcHRpb25zKG9wdGlvbnM6IE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucyA9IHt9KTogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPiB7XHJcbiAgY29uc3QgcmVzb2x2ZWQ6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4gPSB7XHJcbiAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyIHx8ICdteGNhZEFwcEFzc2V0cycsXHJcbiAgICBsaWJyYXJ5TmFtZXM6IG9wdGlvbnMubGlicmFyeU5hbWVzIHx8IFtdLFxyXG4gICAgaXNXYXNtU3Q6IG9wdGlvbnMuaXNXYXNtU3QgfHwgZmFsc2UsXHJcbiAgICBlbmFibGVDb21wcmVzc2VkQXNzZXRzOiBvcHRpb25zLmVuYWJsZUNvbXByZXNzZWRBc3NldHMgfHwgdHJ1ZSxcclxuICAgIC8vIHRyYW5zZm9ybU14Y2FkVWlDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhjYWRVaUNvbmZpZyB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhRdWlja0NvbW1hbmQ6IG9wdGlvbnMudHJhbnNmb3JtTXhRdWlja0NvbW1hbmQgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybU14U2VydmVyQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14U2VydmVyQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFVpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1WdWV0aWZ5VGhlbWVDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtVnVldGlmeVRoZW1lQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICAvLyB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhQbHVnaW5zQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgfTtcclxuICByZXR1cm4gcmVzb2x2ZWQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFBhdGhSZXN1bHQge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgZmlsZVBhdGg/OiBzdHJpbmc7ICAgICAgICAgLy8g5beyIHJlc29sdmUg55qE5a6J5YWo5paH5Lu26Lev5b6EXHJcbiAgdXJsUGF0aD86IHN0cmluZzsgICAgICAgICAgLy8g6Kej56CB5ZCO55qEIFVSTCDot6/lvoTvvIjkuI3lkKsgcXVlcnnvvIlcclxuICBmaWxlTmFtZT86IHN0cmluZzsgICAgICAgICAvLyDmlofku7blkI3vvIhiYXNlbmFtZe+8iVxyXG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XHJcbiAgbWVzc2FnZT86IHN0cmluZztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiDlronlhajop6PmnpDlubbpqozor4Hor7fmsYLot6/lvoRcclxuICogQHBhcmFtIHJlcVVybCDor7fmsYLnmoQgVVJM77yI5aaCICcvYXNzZXRzL214U2VydmVyQ29uZmlnLmpzb24/dj0xJ++8iVxyXG4gKiBAcGFyYW0gcm9vdCDmnKzlnLDmoLnnm67lvZXvvIjlpoIgJ0Q6L3Byb2plY3QvZGlzdC9teGNhZCfvvIlcclxuICogQHBhcmFtIGJhc2VQYXRoIOWPr+mAieeahOWfuuehgOi3r+W+hOWJjee8gO+8iOWmgiAnL214Y2FkLyfvvIznlKjkuo4gVml0Ze+8iVxyXG4gKiBAcmV0dXJucyDop6PmnpDnu5PmnpzmiJbplJnor69cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2FmZVBhdGgoXHJcbiAgcmVxVXJsOiBzdHJpbmcsXHJcbiAgcm9vdDogc3RyaW5nLFxyXG4gIGJhc2VQYXRoPzogc3RyaW5nXHJcbik6IFBhcnNlZFBhdGhSZXN1bHQge1xyXG4gIC8vIDEuIOWfuuacrOagoemqjFxyXG4gIGlmICghcmVxVXJsIHx8IHR5cGVvZiByZXFVcmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnQmFkIFJlcXVlc3QnIH07XHJcbiAgfVxyXG5cclxuICAvLyAyLiDmj5Dlj5bot6/lvoTvvIjljrsgcXVlcnkg5ZKMIGhhc2jvvIlcclxuICBsZXQgdXJsUGF0aCA9IHJlcVVybC5zcGxpdCgnPycpWzBdLnNwbGl0KCcjJylbMF07XHJcblxyXG4gIC8vIDMuIOino+eggSBVUkxcclxuICBsZXQgZGVjb2RlZFBhdGg6IHN0cmluZztcclxuICB0cnkge1xyXG4gICAgZGVjb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsUGF0aCk7XHJcbiAgICAvLyDpmLLmraIgbnVsbCDlrZfoioLmlLvlh7tcclxuICAgIGlmIChkZWNvZGVkUGF0aC5pbmNsdWRlcygnXFwwJykpIHtcclxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHN0YXR1c0NvZGU6IDQwMCwgbWVzc2FnZTogJ0ludmFsaWQgVVJMJyB9O1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHN0YXR1c0NvZGU6IDQwMCwgbWVzc2FnZTogJ0ludmFsaWQgVVJMIGVuY29kaW5nJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8gNC4g5aSE55CGIGJhc2VQYXRo77yI5aaCIFZpdGUg55qEIGJhc2XvvIlcclxuICBpZiAoYmFzZVBhdGggJiYgZGVjb2RlZFBhdGguc3RhcnRzV2l0aChiYXNlUGF0aCkpIHtcclxuICAgIGRlY29kZWRQYXRoID0gZGVjb2RlZFBhdGguc2xpY2UoYmFzZVBhdGgubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIC8vIDUuIOa4heeQhui3r+W+hO+8muWOu+mZpOW8gOWktOWkmuS9meeahCAvXHJcbiAgLy8g5L6L5aaC77yaLy9hc3NldHMvZmlsZS5qc29uIC0+IGFzc2V0cy9maWxlLmpzb25cclxuICBjb25zdCBjbGVhbmVkUGF0aCA9IGRlY29kZWRQYXRoLnJlcGxhY2UoL15cXC8rLywgJycpO1xyXG5cclxuICAvLyA2LiDmi7zmjqXmlofku7bot6/lvoRcclxuICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocm9vdCwgY2xlYW5lZFBhdGggfHwgJy4nKTtcclxuXHJcbiAgLy8gNy4g5a6J5YWo5qOA5p+l77ya6Ziy5q2i6Lev5b6E56m/6LaKXHJcbiAgbGV0IG5vcm1hbGl6ZWRGaWxlOiBzdHJpbmc7XHJcbiAgbGV0IG5vcm1hbGl6ZWRSb290OiBzdHJpbmc7XHJcbiAgdHJ5IHtcclxuICAgIG5vcm1hbGl6ZWRGaWxlID0gcmVzb2x2ZShmaWxlUGF0aCk7XHJcbiAgICBub3JtYWxpemVkUm9vdCA9IHJlc29sdmUocm9vdCk7XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNTAwLCBtZXNzYWdlOiAnUGF0aCByZXNvbHV0aW9uIGZhaWxlZCcgfTtcclxuICB9XHJcblxyXG4gIC8vIOKchSDlhbPplK7vvJrnoa7kv50gbm9ybWFsaXplZEZpbGUg5ZyoIG5vcm1hbGl6ZWRSb290IOebruW9leS4i1xyXG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWxlU3RyID0gbm9ybWFsaXplZEZpbGUucmVwbGFjZSgvXFxcXC9nLCAnLycpICsgJy8nO1xyXG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290U3RyID0gbm9ybWFsaXplZFJvb3QucmVwbGFjZSgvXFxcXC9nLCAnLycpICsgJy8nO1xyXG5cclxuICBpZiAoIW5vcm1hbGl6ZWRGaWxlU3RyLnN0YXJ0c1dpdGgobm9ybWFsaXplZFJvb3RTdHIpKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAzLCBtZXNzYWdlOiAnRm9yYmlkZGVuOiBQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfTtcclxuICB9XHJcblxyXG4gIC8vIDguIOaPkOWPliBmaWxlTmFtZVxyXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IGNsZWFuZWRQYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aFNlZ21lbnRzLmxlbmd0aCA+IDAgPyBiYXNlbmFtZShwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDFdKSA6ICcnO1xyXG5cclxuICAvLyDinIUg5oiQ5YqfXHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmaWxlUGF0aDogbm9ybWFsaXplZEZpbGUsXHJcbiAgICB1cmxQYXRoOiBkZWNvZGVkUGF0aCxcclxuICAgIGZpbGVOYW1lLFxyXG4gIH07XHJcbn1cclxuXHJcblxyXG50eXBlIENvbmZpZ0ZpbGVuYW1lID0gKHR5cGVvZiBDT05GSUdfRklMRU5BTUVTKVtudW1iZXJdO1xyXG5mdW5jdGlvbiBoYW5kbGVDb25maWdGaWxlKFxyXG4gIHNyY1BhdGg6IHN0cmluZyxcclxuICBkZXN0UGF0aDogc3RyaW5nLFxyXG4gIGZpbGVuYW1lOiBDb25maWdGaWxlbmFtZSxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIGNhbGxiYWNrOiBOb1BhcmFtQ2FsbGJhY2tcclxuKSB7XHJcbiAgZnMucmVhZEZpbGUoc3JjUGF0aCwgJ3V0Zi04JywgYXN5bmMgKGVyciwgY29udGVudCkgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRhdGEgPSBjb250ZW50LnRyaW0oKSA/IEpTT04ucGFyc2UoY29udGVudCkgOiB7fTtcclxuXHJcbiAgICAgIC8vIOKchSDmraPnoa7nlJ/miJAgdHJhbnNmb3JtIOWHveaVsOWQjVxyXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kL2ksICcnKTtcclxuICAgICAgY29uc3QgdHJhbnNmb3JtS2V5ID0gYHRyYW5zZm9ybSR7cGFzY2FsQ2FzZShiYXNlTmFtZSl9YDsgLy8g5L6L5aaCOiB0cmFuc2Zvcm1QbHVnaW5zQ29uZmlnIOaIliB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWdcclxuXHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybUZuID0gKG9wdGlvbnMgYXMgYW55KVt0cmFuc2Zvcm1LZXldO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGRhdGEgPSBhd2FpdCB0cmFuc2Zvcm1GbihkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xyXG4gICAgICBmcy53cml0ZUZpbGUoZGVzdFBhdGgsIGpzb24sICd1dGYtOCcsIGNhbGxiYWNrKTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcbi8qKlxyXG4gKiDlpITnkIbphY3nva7mlofku7bor7fmsYLvvJror7vlj5Yg4oaSIOi9rOaNoiDihpIg6L+U5Zue5ZON5bqUXHJcbiAqIOeUqOS6jiBWaXRlL1dlYnBhY2sgZGV2IHNlcnZlciDkuK3pl7Tku7ZcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVDb25maWdSZXF1ZXN0KFxyXG4gIGZpbGVQYXRoOiBzdHJpbmcsICAgICAgICAgICAvLyDlt7Lnu4/pqozor4Hov4fnmoTlronlhajot6/lvoRcclxuICBmaWxlTmFtZTogc3RyaW5nLCAgICAgICAgICAgLy8g5paH5Lu25ZCN77yM5aaCICdteFNlcnZlckNvbmZpZy5qc29uJ1xyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sXHJcbiAgcmVzOiBhbnksXHJcbiAgbG9nZ2VyPzogeyBpbmZvPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkOyBlcnJvcj86IChtc2c6IHN0cmluZykgPT4gdm9pZCB9XHJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gIC8vIOS7heWkhOeQhueZveWQjeWNleWGheeahOaWh+S7tlxyXG4gIGlmICghKENPTkZJR19GSUxFTkFNRVMgYXMgdW5rbm93biBhcyBzdHJpbmcpLmluY2x1ZGVzKGZpbGVOYW1lKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICBsZXQgZGF0YSA9IGNvbnRlbnQudHJpbSgpID8gSlNPTi5wYXJzZShjb250ZW50KSA6IHt9O1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybUtleSA9IGB0cmFuc2Zvcm0ke3Bhc2NhbENhc2UoZmlsZU5hbWUucmVwbGFjZSgvXFwuanNvbiQvaSwgJycpKX1gO1xyXG4gICAgY29uc3QgdHJhbnNmb3JtRm4gPSAob3B0aW9ucyBhcyBhbnkpW3RyYW5zZm9ybUtleV07XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBkYXRhID0gYXdhaXQgdHJhbnNmb3JtRm4oZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcclxuICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGxvZ2dlcj8uZXJyb3I/LihgW214Y2FkLWFzc2V0c10g4p2MIEZhaWxlZCB0byBzZXJ2ZSAke2ZpbGVOYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xyXG4gICAgICByZXMuZW5kKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlOyAvLyDlt7LlpITnkIbplJnor69cclxuICB9XHJcbn1cclxuXHJcbi8qKiDliJvlu7rpgJrnlKjlhajlsYDkuK3pl7Tku7YgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdsb2JhbFVuaXZlcnNhbE1pZGRsZXdhcmUob3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPikge1xyXG4gIHJldHVybiBhc3luYyAocmVxOiBhbnksIHJlczogYW55LCBuZXh0OiBhbnkpID0+IHtcclxuICAgIGlmICghb3B0aW9ucy5pc1dhc21TdCkge1xyXG4gICAgICByZXMuc2V0SGVhZGVyKCdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsICdzYW1lLW9yaWdpbicpO1xyXG4gICAgICByZXMuc2V0SGVhZGVyKCdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JywgJ3JlcXVpcmUtY29ycCcpO1xyXG4gICAgfVxyXG4gICAgbmV4dCgpO1xyXG4gIH1cclxufVxyXG4vLyA9PT0g6L6F5Yqp5Ye95pWw77ya5a2X56ym5Liy6L2sIFBhc2NhbENhc2UgPT09XHJcbmV4cG9ydCBmdW5jdGlvbiBwYXNjYWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3RyXHJcbiAgICAucmVwbGFjZSgvW15hLXpBLVowLTldKyguKS9nLCAobSwgY2hyKSA9PiBjaHIudG9VcHBlckNhc2UoKSlcclxuICAgIC5yZXBsYWNlKC9eLi8sIGMgPT4gYy50b1VwcGVyQ2FzZSgpKTtcclxufVxyXG5cclxuLy8gPT09IOWFtuS7luWOn+acieWvvOWHuuS/neaMgeS4jeWPmCA9PT1cclxuZXhwb3J0IGNvbnN0IGV4dGVybmFscyA9IHtcclxuICAndnVlJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLlZ1ZScsXHJcbiAgJ2F4aW9zJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLmF4aW9zJyxcclxuICAndnVldGlmeSc6ICdNWENBREFQUF9FWFRFUk5BTExJQlJBUklFUy52dWV0aWZ5JyxcclxuICAndnVldGlmeS9jb21wb25lbnRzJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLnZ1ZXRpZnlDb21wb25lbnRzJyxcclxuICAnbWFwYm94LWdsJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLm1hcGJveGdsJyxcclxuICAncGluaWEnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMucGluaWEnXHJcbn07XHJcbi8vIOWni+e7iOS/neeVmeeahOaooeWdl1xyXG5jb25zdCBBTFdBWVNfS0VFUCA9IG5ldyBTZXQoWydteGNhZCcsICdteGRyYXcnXSk7XHJcblxyXG4vKipcclxuICog5riF55CG5bm25YaZ5YWl5q2j56Gu55qE57G75Z6L5byV55SoXHJcbiAqL1xyXG5mdW5jdGlvbiBzeW5jVHlwZVJlZmVyZW5jZXMobGlicmFyeU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gIGNvbnN0IHJvb3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xyXG4gIGNvbnN0IGRpc3REaXIgPSByZXNvbHZlKHJvb3REaXIsICdub2RlX21vZHVsZXMnLCAnbXhjYWQtYXBwJywgJ2Rpc3QnKTtcclxuICBjb25zdCBpbmRleFBhdGggPSByZXNvbHZlKGRpc3REaXIsICdpbmRleC5kLnRzJyk7XHJcblxyXG4gIHRyeSB7XHJcbiAgICAvLyDinIUgMS4g5qOA5p+lIGRpc3Qg55uu5b2VXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlzdERpcikpIHtcclxuICAgICAgY29uc29sZS53YXJuKGDimqDvuI8gbXhjYWQtYXBwL2Rpc3Qg55uu5b2V5LiN5a2Y5Zyo77yM6Lez6L+H57G75Z6L5ZCM5q2lOiAke2Rpc3REaXJ9YCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgMi4g56Gu5L+dIGluZGV4LmQudHMg5a2Y5ZyoXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoaW5kZXhQYXRoKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4UGF0aCwgJycsICd1dGYtOCcpO1xyXG4gICAgICBjb25zb2xlLmxvZyhg4pyFIOW3suWIm+W7uuepuuexu+Wei+aWh+S7tjogJHtpbmRleFBhdGh9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoaW5kZXhQYXRoLCAndXRmLTgnKTtcclxuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pO1xyXG5cclxuICAgIC8vIOKchSAzLiDmj5Dlj5bmiYDmnInnjrDmnInnmoQgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4veHh4LmQudHNcIiAvPiDooYxcclxuICAgIGNvbnN0IHJlZmVyZW5jZVJlZ2V4ID0gL1xcL1xcL1xcL1xccyo8cmVmZXJlbmNlXFxzK3BhdGg9XCJcXC5cXC8oW15cIl0rXFwuZFxcLnRzKVwiXFxzKlxcLz4vO1xyXG4gICAgY29uc3QgZXhpc3RpbmdSZWZzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3Qgbm9uUmVmTGluZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgY29uc3QgbWF0Y2ggPSBsaW5lLnRyaW0oKS5tYXRjaChyZWZlcmVuY2VSZWdleCk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gbWF0Y2hbMV07IC8vIOWmgiBcInZ1ZS5kLnRzXCJcclxuICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvXFwuZFxcLnRzJC8sICcnKTsgLy8g5o+Q5Y+W5qih5Z2X5ZCNXHJcbiAgICAgICAgZXhpc3RpbmdSZWZzLnB1c2gobW9kdWxlTmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbm9uUmVmTGluZXMucHVzaChsaW5lKTsgLy8g5L+d55WZ6Z2eIHJlZmVyZW5jZSDooYxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDQuIOiuoeeul+acgOe7iOW6lOivpeS/neeVmeeahOaooeWdl1xyXG4gICAgY29uc3QgdmFsaWRNb2R1bGVzID0gbmV3IFNldDxzdHJpbmc+KEFMV0FZU19LRUVQKTtcclxuXHJcbiAgICBsaWJyYXJ5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgLy8g5b+F6aG75ZyoIGV4dGVybmFscyDkuK3lrprkuYnvvIzkuJTnsbvlnovmlofku7blrZjlnKhcclxuICAgICAgaWYgKG5hbWUgaW4gZXh0ZXJuYWxzKSB7XHJcbiAgICAgICAgY29uc3QgZHRzUGF0aCA9IHJlc29sdmUoZGlzdERpciwgYCR7bmFtZX0uZC50c2ApO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGR0c1BhdGgpKSB7XHJcbiAgICAgICAgICB2YWxpZE1vZHVsZXMuYWRkKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDUuIOeUn+aIkOacgOe7iOeahCByZWZlcmVuY2Ug6KGM77yI5L+d5oyBIG14Y2FkIOWSjCBteGRyYXcg5Zyo5pyA5YmN77yJXHJcbiAgICBjb25zdCBmaW5hbFJlZnMgPSBbJ214Y2FkJywgJ214ZHJhdyddXHJcbiAgICAgIC5maWx0ZXIobmFtZSA9PiB2YWxpZE1vZHVsZXMuaGFzKG5hbWUpKVxyXG4gICAgICAubWFwKG5hbWUgPT4gYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLyR7bmFtZX0uZC50c1wiIC8+YCk7XHJcblxyXG4gICAgLy8g5re75Yqg5YW25LuWIHZhbGlkTW9kdWxlcyDkuK3nmoTvvIjljrvph43vvIlcclxuICAgIEFycmF5LmZyb20odmFsaWRNb2R1bGVzKVxyXG4gICAgICAuZmlsdGVyKG5hbWUgPT4gIUFMV0FZU19LRUVQLmhhcyhuYW1lKSlcclxuICAgICAgLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgZmluYWxSZWZzLnB1c2goYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLyR7bmFtZX0uZC50c1wiIC8+YCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIOKchSA2LiDlkIjlubbvvJrmnIDnu4jlvJXnlKggKyDljp/lp4vpnZ7lvJXnlKjooYxcclxuICAgIGNvbnN0IHJlc3VsdExpbmVzID0gWy4uLmZpbmFsUmVmcywgJycsIC4uLm5vblJlZkxpbmVzLmZpbHRlcihsID0+IGwudHJpbSgpLmxlbmd0aCA+IDApXTtcclxuXHJcbiAgICAvLyDnp7vpmaTov57nu63nqbrooYzvvIzkv53nlZnkuIDkuKrliIbpmpRcclxuICAgIGNvbnN0IGNsZWFuZWRMaW5lcyA9IHJlc3VsdExpbmVzLmZpbHRlcigobGluZSwgaSwgYXJyKSA9PlxyXG4gICAgICAhKGxpbmUudHJpbSgpID09PSAnJyAmJiBpID4gMCAmJiBhcnJbaSAtIDFdLnRyaW0oKSA9PT0gJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjbGVhbmVkTGluZXMuam9pbignXFxuJykudHJpbSgpICsgJ1xcbic7XHJcblxyXG4gICAgLy8g4pyFIDcuIOWGmeWbnuaWh+S7tu+8iOS7heW9k+WGheWuueWPmOWMluaXtu+8iVxyXG4gICAgaWYgKGNvbnRlbnQudHJpbSgpICE9PSBuZXdDb250ZW50LnRyaW0oKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4UGF0aCwgbmV3Q29udGVudCwgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDinIUg5bey5ZCM5q2lIG14Y2FkLWFwcC9kaXN0L2luZGV4LmQudHMg57G75Z6L5byV55SoYCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKGDinYwg5ZCM5q2l57G75Z6L5byV55So5aSx6LSlOmAsIGVycik7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog6aKE5a6a5LmJ5bqT5ZCN5Yiw5YWo5bGA5Y+Y6YeP55qE5pig5bCEXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSUJSQVJZX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICBteGNhZDogJ014Q0FEJyxcclxuICBteGRyYXc6ICdNeCdcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxzKFxyXG4gIGxpYnJhcnlOYW1lczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPlsnbGlicmFyeU5hbWVzJ11cclxuKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XHJcbiAgc3luY1R5cGVSZWZlcmVuY2VzKGxpYnJhcnlOYW1lcyk7XHJcbiAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0geyAuLi5ERUZBVUxUX0xJQlJBUllfTUFQIH1cclxuICBpZiAoIUFycmF5LmlzQXJyYXkobGlicmFyeU5hbWVzKSkgcmV0dXJuIHJlc3VsdDtcclxuICBsaWJyYXJ5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIGlmIChuYW1lIGluIGV4dGVybmFscykge1xyXG4gICAgICByZXN1bHRbbmFtZV0gPSBleHRlcm5hbHNbbmFtZSBhcyBrZXlvZiB0eXBlb2YgZXh0ZXJuYWxzXTtcclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlQXNzZXRzUGF0aCgpOiBzdHJpbmcge1xyXG4gIGxldCBjdXJyZW50RmlsZTogc3RyaW5nO1xyXG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGN1cnJlbnRGaWxlID0gX19maWxlbmFtZTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgY3VycmVudEZpbGUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XHJcbiAgfVxyXG4gIGNvbnN0IHBhY2thZ2VSb290ID0gcmVzb2x2ZShjdXJyZW50RmlsZSwgJy4uJywgJy4uJywgJy4uJyk7XHJcbiAgY29uc3QgYXNzZXRzUGF0aCA9IHJlc29sdmUocGFja2FnZVJvb3QsIG5hbWUsICdkaXN0JywgJ214Y2FkQXBwQXNzZXRzJyk7XHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGFzc2V0c1BhdGgpKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG14LWNhZC1hcHAgYXNzZXRzIG5vdCBmb3VuZCBhdDogJHthc3NldHNQYXRofWApO1xyXG4gIH1cclxuICByZXR1cm4gYXNzZXRzUGF0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU291cmNlQXNzZXRzRXhpc3QoKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgcGF0aCA9IGdldFNvdXJjZUFzc2V0c1BhdGgoKTtcclxuICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKSAmJiBmcy5sc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUnVudGltZUNvbmZpZ1NjcmlwdChwdWJsaWNQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgXHJcbiAgICA8c2NyaXB0PlxyXG4gICAgICB3aW5kb3cuX19NWF9DQURfQVBQX0FTU0VUX1BBVEhfXyA9ICcke3B1YmxpY1BhdGh9JztcclxuICAgIDwvc2NyaXB0PlxyXG4gIGAudHJpbSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weURpcihcclxuICBzcmM6IHN0cmluZyxcclxuICBkZXN0OiBzdHJpbmcsXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkXHJcbik6IHZvaWQge1xyXG4gIC8vIOKchSDmlrDlop7vvJrmo4Dmn6UgcHVibGljRGlyIOaYr+WQpuWtmOWcqFxyXG4gIGlmICghZnMuZXhpc3RzU3luYyhwdWJsaWNEaXIpKSB7XHJcbiAgICAvLyDkuI3lrZjlnKjliJnot7Pov4fmiavmj4/vvIznm7TmjqXlpI3liLZcclxuICAgIGRvQ29weShzcmMsIGRlc3QsIHB1YmxpY0RpciwgbmV3IFNldCgpLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIC8vIOesrOS4gOatpe+8muaJq+aPjyBwdWJsaWNEaXIg5LiL5omA5pyJ5paH5Lu277yI55u45a+55LqOIHB1YmxpY0RpciDnmoTot6/lvoTvvIlcclxuICBzY2FuUHVibGljRGlyKHB1YmxpY0RpciwgKGVyciwgcHVibGljRmlsZXMpID0+IHtcclxuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgIC8vIOesrOS6jOatpe+8muW8gOWni+WkjeWItu+8jOS8oOWFpSBwdWJsaWNGaWxlcyDnvJPlrZhcclxuICAgIGRvQ29weShzcmMsIGRlc3QsIHB1YmxpY0RpciwgcHVibGljRmlsZXMhLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIOWunumZheaJp+ihjOWkjeWItueahOWHveaVsFxyXG5mdW5jdGlvbiBkb0NvcHkoXHJcbiAgc3JjOiBzdHJpbmcsXHJcbiAgZGVzdDogc3RyaW5nLFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIHB1YmxpY0ZpbGVzOiBTZXQ8c3RyaW5nPixcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LCAvLyDms6jmhI/vvJrov5nph4zpnIDopoHnoa7kv50gZW5hYmxlQ29tcHJlc3NlZEFzc2V0cyDmmK/lv4XpgInnmoRcclxuICBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkXHJcbikge1xyXG4gIGZzLm1rZGlyKGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0sIChlcnIpID0+IHtcclxuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgIGZzLnJlYWRkaXIoc3JjLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyciwgZGlyZW50cykgPT4ge1xyXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICAgIGxldCBwZW5kaW5nID0gZGlyZW50cy5sZW5ndGg7XHJcbiAgICAgIGlmIChwZW5kaW5nID09PSAwKSByZXR1cm4gY2FsbGJhY2soKTtcclxuXHJcbiAgICAgIC8vIOaPkOWJjeWumuS5ieWOi+e8qeaWh+S7tuaJqeWxleWQjVxyXG4gICAgICBjb25zdCBjb21wcmVzc2VkRXh0cyA9IFsnLmd6J107IC8vIOWPr+aMiemcgOaJqeWxlVxyXG5cclxuICAgICAgZGlyZW50cy5mb3JFYWNoKChkaXJlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBzcmNQYXRoID0gcmVzb2x2ZShzcmMsIGRpcmVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHJlc29sdmUoZGVzdCwgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKHNyYywgc3JjUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpIGFzIENvbmZpZ0ZpbGVuYW1lO1xyXG5cclxuICAgICAgICAvLyDmlrDlop7vvJrlpoLmnpznpoHnlKjljovnvKnotYTmupDkuJTmmK/ljovnvKnmlofku7bvvIzliJnot7Pov4dcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhb3B0aW9ucy5lbmFibGVDb21wcmVzc2VkQXNzZXRzICYmXHJcbiAgICAgICAgICBjb21wcmVzc2VkRXh0cy5zb21lKGV4dCA9PiByZWxhdGl2ZVBhdGguZW5kc1dpdGgoZXh0KSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIGRvQ29weShzcmNQYXRoLCBkZXN0UGF0aCwgcHVibGljRGlyLCBwdWJsaWNGaWxlcywgb3B0aW9ucywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIGlmIChwdWJsaWNGaWxlcy5oYXMocmVsYXRpdmVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGaWxlUGF0aCA9IHJlc29sdmUocHVibGljRGlyLCByZWxhdGl2ZVBhdGgpO1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZShwdWJsaWNGaWxlUGF0aCwgZGVzdFBhdGgsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoQ09ORklHX0ZJTEVOQU1FUy5pbmNsdWRlcyhyZWxhdGl2ZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpZ0ZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIHJlbGF0aXZlUGF0aCwgb3B0aW9ucywgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZnMuY29weUZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuLy8g5omr5o+PIHB1YmxpY0RpciDkuIvmiYDmnInmlofku7bvvIzov5Tlm57nm7jlr7nkuo4gcHVibGljRGlyIOeahOi3r+W+hOmbhuWQiFxyXG5mdW5jdGlvbiBzY2FuUHVibGljRGlyKFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIGNhbGxiYWNrOiAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24gfCBudWxsLCBmaWxlcz86IFNldDxzdHJpbmc+KSA9PiB2b2lkXHJcbikge1xyXG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICBmdW5jdGlvbiB3YWxrKGRpcjogc3RyaW5nKSB7XHJcbiAgICBmcy5yZWFkZGlyKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChlcnIsIGRpcmVudHMpID0+IHtcclxuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgICBsZXQgcGVuZGluZyA9IGRpcmVudHMubGVuZ3RoO1xyXG4gICAgICBpZiAocGVuZGluZyA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXJlbnRzLmZvckVhY2goKGRpcmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVzb2x2ZShkaXIsIGRpcmVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCByZWxQYXRoID0gcmVsYXRpdmUocHVibGljRGlyLCBmdWxsUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIHdhbGsoZnVsbFBhdGgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZW50LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgICByZXN1bHQuYWRkKHJlbFBhdGgpO1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd2FsayhwdWJsaWNEaXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgZXh0ID0gZmlsZVBhdGguc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAnJztcclxuICBjb25zdCB0eXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICdjc3MnOiAndGV4dC9jc3MnLFxyXG4gICAgJ2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxyXG4gICAgJ2pzb24nOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAncG5nJzogJ2ltYWdlL3BuZycsXHJcbiAgICAnanBnJzogJ2ltYWdlL2pwZWcnLFxyXG4gICAgJ2pwZWcnOiAnaW1hZ2UvanBlZycsXHJcbiAgICAnZ2lmJzogJ2ltYWdlL2dpZicsXHJcbiAgICAnc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxyXG4gICAgJ3dvZmYnOiAnZm9udC93b2ZmJyxcclxuICAgICd3b2ZmMic6ICdmb250L3dvZmYyJyxcclxuICAgICd0dGYnOiAnZm9udC90dGYnLFxyXG4gICAgJ2VvdCc6ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCcsXHJcbiAgICAnaWNvJzogJ2ltYWdlL3gtaWNvbicsXHJcbiAgICAnd2FzbSc6ICdhcHBsaWNhdGlvbi93YXNtJyxcclxuICAgICd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcclxuICAgICdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXHJcbiAgICAnN3onOiAnYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkJyxcclxuICAgICd0YXInOiAnYXBwbGljYXRpb24veC10YXInLFxyXG4gICAgJ2d6JzogJ2FwcGxpY2F0aW9uL2d6aXAnLFxyXG4gICAgJ2J6Mic6ICdhcHBsaWNhdGlvbi94LWJ6aXAyJyxcclxuICAgICd4eic6ICdhcHBsaWNhdGlvbi94LXh6J1xyXG4gIH07XHJcbiAgcmV0dXJuIHR5cGVzW2V4dF0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICog5qCH5YeG5YyW6Lev5b6E77yM56Gu5L+d5LulICcvJyDnu5PlsL5cclxuICovXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocDogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gcmVzb2x2ZShwKS5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDliJvlu7rpgJrnlKjkuK3pl7Tku7bvvJrkvJjlhYjkvb/nlKggcHVibGljIOi1hOa6kO+8jOWbnumAgOWIsCBzb3VyY2VBc3NldHNQYXRoXHJcbiAqIOWvueaghyBjcmVhdGVTdGF0aWNNaWRkbGV3YXJlIOmjjuagvFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU14Q2FkQXNzZXRzTWlkZGxld2FyZShcclxuICByb290OiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICBwdWJsaWNEaXI6IHN0cmluZyxcclxuICBsb2dnZXI/OiBhbnlcclxuKSB7XHJcbiAgY29uc3QgeyBvdXRwdXREaXIsIGlzV2FzbVN0ID0gZmFsc2UgfSA9IG9wdGlvbnM7XHJcbiAgLy8g4pyFIDEuIOinhOiMg+WMlui3r+W+hFxyXG4gIGNvbnN0IGJhc2VQYXRoID0gYC8ke291dHB1dERpci5yZXBsYWNlKC9eXFwvKy8sICcnKX1gOyAvLyAnL214Y2FkQXBwQXNzZXRzJ1xyXG4gIGNvbnN0IHNvdXJjZUFzc2V0c1Jvb3QgPSBub3JtYWxpemVQYXRoKHJvb3QpO1xyXG5cclxuICByZXR1cm4gYXN5bmMgKHJlcTogYW55LCByZXM6IGFueSwgbmV4dDogKCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgLy8g4pyFIDIuIOWfuuacrOagoemqjFxyXG4gICAgaWYgKCFyZXEudXJsIHx8IHR5cGVvZiByZXEudXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSAzLiDorr7nva7lronlhajlpLTvvIjpnZ4gaXNXYXNtU3Qg5qih5byP77yJXHJcbiAgICBpZiAoIWlzV2FzbVN0KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JywgJ3NhbWUtb3JpZ2luJyk7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLCAncmVxdWlyZS1jb3JwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIDQuIOino+aekCBVUkwg6Lev5b6E77yI5Y67IHF1ZXJ577yM6Kej56CB77yJXHJcbiAgICBjb25zdCB1cmxQYXRoID0gcmVxLnVybC5zcGxpdCgnPycpWzBdO1xyXG4gICAgbGV0IGZpbGVQYXRoITogc3RyaW5nO1xyXG4gICAgbGV0IGZpbGVOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGRlY29kZWRQYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybFBhdGgpO1xyXG4gICAgICAvLyDop4TojIPljJbot6/lvoTvvIzpmLLmraIgLi4vLi4vIOi2iuadg1xyXG4gICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGRlY29kZWRQYXRoLnJlcGxhY2UoL15bL1xcXFxdKy8sICcnKTtcclxuXHJcbiAgICAgIC8vIOKchSA1LiDkvJjlhYjvvJrmo4Dmn6UgcHVibGljLyR7b3V0cHV0RGlyfSDnm67lvZVcclxuICAgICAgY29uc3QgcHVibGljRmlsZVBhdGggPSBqb2luKHB1YmxpY0Rpciwgbm9ybWFsaXplZFBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnByb21pc2VzLnN0YXQocHVibGljRmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChzdGF0LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgICBmaWxlUGF0aCA9IHB1YmxpY0ZpbGVQYXRoO1xyXG4gICAgICAgICAgZmlsZU5hbWUgPSBiYXNlbmFtZShub3JtYWxpemVkUGF0aCk7XHJcbiAgICAgICAgICByZXR1cm4gc2VydmVGaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSwgcmVzLCBsb2dnZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgLy8gcHVibGljIOS4reayoeacie+8jOe7p+e7reafpeaJviBzb3VyY2VBc3NldHNQYXRoXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOKchSA2LiBmYWxsYmFja++8muafpeaJviBzb3VyY2VBc3NldHNQYXRoXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVTYWZlUGF0aChkZWNvZGVkUGF0aCwgc291cmNlQXNzZXRzUm9vdCwgYmFzZVBhdGgpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSByZXN1bHQuc3RhdHVzQ29kZSB8fCA0MDA7XHJcbiAgICAgICAgcmV0dXJuIHJlcy5lbmQocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmZpbGVQYXRoKSBmaWxlUGF0aCA9IHJlc3VsdC5maWxlUGF0aDtcclxuICAgICAgaWYgKHJlc3VsdC5maWxlTmFtZSkgZmlsZU5hbWUgPSByZXN1bHQuZmlsZU5hbWU7XHJcblxyXG4gICAgICAvLyDinIUgNy4g5bCd6K+V55SxIGhhbmRsZUNvbmZpZ1JlcXVlc3Qg5aSE55CG77yI5aaC5rOo5YWl6YWN572u77yJXHJcbiAgICAgIGNvbnN0IGhhbmRsZWQgPSBhd2FpdCBoYW5kbGVDb25maWdSZXF1ZXN0KFxyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgcmVzLFxyXG4gICAgICAgIGxvZ2dlclxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaGFuZGxlZCkgcmV0dXJuO1xyXG5cclxuICAgICAgLy8g4pyFIDguIOehruS/neaYr+aWh+S7tlxyXG4gICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChmaWxlUGF0aCk7XHJcbiAgICAgIGlmICghc3RhdC5pc0ZpbGUoKSkge1xyXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xyXG4gICAgICAgIHJldHVybiByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VydmVGaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSwgcmVzLCBsb2dnZXIpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGxvZ2dlcj8ud2Fybj8uKGBbTXhDYWRBc3NldHNdIFNlcnZlIGZhaWxlZCBmb3IgJHtyZXEudXJsfTogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xyXG4gICAgICBpZiAocmVzLmhlYWRlcnNTZW50KSByZXR1cm47XHJcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xyXG4gICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDlsIHoo4Xmlofku7blk43lupTpgLvovpHvvIjmtYHlvI/kvKDovpPvvIlcclxuICovXHJcbmZ1bmN0aW9uIHNlcnZlRmlsZShmaWxlUGF0aDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCByZXM6IGFueSwgbG9nZ2VyPzogYW55KSB7XHJcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XHJcblxyXG4gIHN0cmVhbS5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcclxuICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcclxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcgfHwgZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XHJcbiAgICAgIHJldHVybiByZXMuc3RhdHVzQ29kZSA9PT0gMjAwID8gcmVzLmVuZCgpIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbG9nZ2VyPy5lcnJvcj8uKGBbTXhDYWRBc3NldHNdIFJlYWQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCwgZXJyKTtcclxuICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xyXG4gICAgcmVzLmVuZCgnSW50ZXJuYWwgU2VydmVyIEVycm9yJyk7XHJcbiAgfSk7XHJcblxyXG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGdldENvbnRlbnRUeXBlKGZpbGVOYW1lKSk7XHJcbiAgcmVzLnNldEhlYWRlcignWC1Db250ZW50LVR5cGUtT3B0aW9ucycsICdub3NuaWZmJyk7XHJcblxyXG4gIHN0cmVhbS5waXBlKHJlcyk7XHJcbn0iXSwibmFtZXMiOlsiZnMiLCJlcnIiLCJuYW1lIiwic3RhdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
1526
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtQmt5YjJGeEoubWpzIiwic291cmNlcyI6WyIuLi8uLi9wYWNrVG9vbFBsdWdpblNyYy9zaGFyZWQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbi8vIHBsdWdpbnMvc2hhcmVkL2luZGV4LnRzXHJcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMsIHsgTm9QYXJhbUNhbGxiYWNrIH0gZnJvbSAnZnMnO1xyXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcclxuaW1wb3J0IHsgbmFtZSB9IGZyb20gXCIuLi8uLi9saWIvcGFja2FnZS5qc29uXCJcclxuXHJcbmltcG9ydCB7IE14UXVpY2tDb21tYW5kIH0gZnJvbSBcIi4vdHlwZXMvbXhRdWlja0NvbW1hbmQuZFwiXHJcbmltcG9ydCB7IE14U2VydmVyQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhTZXJ2ZXJDb25maWcuZFwiXHJcbmltcG9ydCB7IE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcuZFwiXHJcbmltcG9ydCB7IE14VWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFVpQ29uZmlnLmRcIlxyXG5pbXBvcnQgeyBNeGNhZFVpQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvbXhjYWRVaUNvbmZpZy5kXCJcclxuaW1wb3J0IHsgVnVldGlmeVRoZW1lQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvdnVldGlmeVRoZW1lQ29uZmlnLmRcIlxyXG5pbXBvcnQgYXBpTWFwIGZyb20gJy4uL2FwaS1tYXAuanNvbidcclxuZXhwb3J0IGNvbnN0IGdldEFwaU1hcCA9ICgpID0+IGFwaU1hcFxyXG5leHBvcnQgaW50ZXJmYWNlIE14UGx1Z2luQ29uZmlnIHtcclxuICBwbHVnaW5zOiAoc3RyaW5nIHwge1xyXG4gICAgbmFtZT86IHN0cmluZyxcclxuICAgIGlzQWZ0ZXJMb2FkPzogYm9vbGVhbixcclxuICAgIGRpcj86IGJvb2xlYW4sXHJcbiAgICB2ZXJzaW9uPzogc3RyaW5nXHJcbiAgfSlbXVxyXG59XHJcbi8vID09PSDmlrDlop7vvJrphY3nva7mlofku7blkI3luLjph48gPT09XHJcbmV4cG9ydCBjb25zdCBDT05GSUdfRklMRU5BTUVTID0gW1xyXG4gIC8vICdteGNhZFVpQ29uZmlnLmpzb24nLFxyXG4gICdteFF1aWNrQ29tbWFuZC5qc29uJyxcclxuICAnbXhTZXJ2ZXJDb25maWcuanNvbicsXHJcbiAgJ214U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnLmpzb24nLFxyXG4gICdteFVpQ29uZmlnLmpzb24nLFxyXG4gICd2dWV0aWZ5VGhlbWVDb25maWcuanNvbicsXHJcbiAgLy8gJ3BsdWdpbnMvY29uZmlnLmpzb24nXHJcbl0gYXMgY29uc3Q7XHJcbi8qKlxyXG4gKiDphY3nva7mlofku7blpITnkIblmahcclxuICog5Y+v6YCJ77ya5a+554m55a6a6YWN572u5paH5Lu26L+b6KGM6L+Q6KGM5pe25L+u5pS5XHJcbiAqIOWHveaVsOaOpeaUtuWOn+WniyBKU09OIOaVsOaNru+8jOi/lOWbnuS/ruaUueWQjueahCBKU09OIOaVsOaNru+8iOWPr+W8guatpe+8iVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1GdW5jdGlvbnMge1xyXG4gIC8vIHRyYW5zZm9ybU14Y2FkVWlDb25maWcoZGF0YTogTXhjYWRVaUNvbmZpZyk6IFByb21pc2U8TXhjYWRVaUNvbmZpZz4gfCBNeGNhZFVpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybU14UXVpY2tDb21tYW5kKGRhdGE6IE14UXVpY2tDb21tYW5kKTogUHJvbWlzZTxNeFF1aWNrQ29tbWFuZD4gfCBNeFF1aWNrQ29tbWFuZDtcclxuICB0cmFuc2Zvcm1NeFNlcnZlckNvbmZpZyhkYXRhOiBNeFNlcnZlckNvbmZpZyk6IFByb21pc2U8TXhTZXJ2ZXJDb25maWc+IHwgTXhTZXJ2ZXJDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcoZGF0YTogTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcpOiBQcm9taXNlPE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnPiB8IE14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybU14VWlDb25maWcoZGF0YTogTXhVaUNvbmZpZyk6IFByb21pc2U8TXhVaUNvbmZpZz4gfCBNeFVpQ29uZmlnO1xyXG4gIHRyYW5zZm9ybVZ1ZXRpZnlUaGVtZUNvbmZpZyhkYXRhOiBWdWV0aWZ5VGhlbWVDb25maWcpOiBQcm9taXNlPFZ1ZXRpZnlUaGVtZUNvbmZpZz4gfCBWdWV0aWZ5VGhlbWVDb25maWc7XHJcbiAgLy8gdHJhbnNmb3JtTXhQbHVnaW5zQ29uZmlnKGRhdGE6IE14UGx1Z2luQ29uZmlnW10pOiBQcm9taXNlPE14UGx1Z2luQ29uZmlnW10+IHwgTXhQbHVnaW5Db25maWdbXTtcclxufVxyXG4vLyDmianlsZXmj5Lku7bpgInpobnmjqXlj6MgPT09XHJcbmV4cG9ydCBpbnRlcmZhY2UgTXhDYWRBc3NldHNQbHVnaW5PcHRpb25zIGV4dGVuZHMgUGFydGlhbDxUcmFuc2Zvcm1GdW5jdGlvbnM+IHtcclxuICAvKipcclxuICAgKiDmnoTlu7rlkI7vvIxteGNhZEFwcEFzc2V0cyDotYTmupDlrZjmlL7nmoTlrZDnm67lvZXlkI3jgIJcclxuICAgKiBAZGVmYXVsdCAnbXhjYWRBcHBBc3NldHMnXHJcbiAgICovXHJcbiAgb3V0cHV0RGlyPzogc3RyaW5nO1xyXG4gIC8qKiDnrKzkuInmlrnkvp3otZYqL1xyXG4gIGxpYnJhcnlOYW1lcz86IChrZXlvZiB0eXBlb2YgZXh0ZXJuYWxzKVtdO1xyXG4gIC8qKiDmmK/lkKbljZXnur/nqIvliqDovb13YXNtICjpu5jorqTkvb/nlKjlpJrnur/nqIvlj4rliqDovb0pICovXHJcbiAgaXNXYXNtU3Q/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICog5piv5ZCm5ZCv55So6aKE5Y6L57yp6LWE5rqQ77yI5aaCIC5neiDmlofku7bvvInnmoTmi7fotJ0g6buY6K6k5pivdHJ1ZVxyXG4gICog6K6+572u5Li6IGZhbHNlIOaXtu+8jC5neiDljovnvKnmlofku7blsIbkuI3kvJrooqvlpI3liLbliLDovpPlh7rnm67lvZVcclxuICAqIEBkZWZhdWx0IHRydWVcclxuICAqL1xyXG4gIGVuYWJsZUNvbXByZXNzZWRBc3NldHM/OiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuLy8gPT09IOWinuW8uu+8mnJlc29sdmVPcHRpb25zIOm7mOiupOWAvCA9PT1cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVPcHRpb25zKG9wdGlvbnM6IE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucyA9IHt9KTogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPiB7XHJcbiAgY29uc3QgcmVzb2x2ZWQ6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4gPSB7XHJcbiAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyIHx8ICdteGNhZEFwcEFzc2V0cycsXHJcbiAgICBsaWJyYXJ5TmFtZXM6IG9wdGlvbnMubGlicmFyeU5hbWVzIHx8IFtdLFxyXG4gICAgaXNXYXNtU3Q6IG9wdGlvbnMuaXNXYXNtU3QgfHwgZmFsc2UsXHJcbiAgICBlbmFibGVDb21wcmVzc2VkQXNzZXRzOiBvcHRpb25zLmVuYWJsZUNvbXByZXNzZWRBc3NldHMgfHwgdHJ1ZSxcclxuICAgIC8vIHRyYW5zZm9ybU14Y2FkVWlDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhjYWRVaUNvbmZpZyB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhRdWlja0NvbW1hbmQ6IG9wdGlvbnMudHJhbnNmb3JtTXhRdWlja0NvbW1hbmQgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybU14U2VydmVyQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14U2VydmVyQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFVpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1WdWV0aWZ5VGhlbWVDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtVnVldGlmeVRoZW1lQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICAvLyB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhQbHVnaW5zQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgfTtcclxuICByZXR1cm4gcmVzb2x2ZWQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFBhdGhSZXN1bHQge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgZmlsZVBhdGg/OiBzdHJpbmc7ICAgICAgICAgLy8g5beyIHJlc29sdmUg55qE5a6J5YWo5paH5Lu26Lev5b6EXHJcbiAgdXJsUGF0aD86IHN0cmluZzsgICAgICAgICAgLy8g6Kej56CB5ZCO55qEIFVSTCDot6/lvoTvvIjkuI3lkKsgcXVlcnnvvIlcclxuICBmaWxlTmFtZT86IHN0cmluZzsgICAgICAgICAvLyDmlofku7blkI3vvIhiYXNlbmFtZe+8iVxyXG4gIHN0YXR1c0NvZGU/OiBudW1iZXI7XHJcbiAgbWVzc2FnZT86IHN0cmluZztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiDlronlhajop6PmnpDlubbpqozor4Hor7fmsYLot6/lvoRcclxuICogQHBhcmFtIHJlcVVybCDor7fmsYLnmoQgVVJM77yI5aaCICcvYXNzZXRzL214U2VydmVyQ29uZmlnLmpzb24/dj0xJ++8iVxyXG4gKiBAcGFyYW0gcm9vdCDmnKzlnLDmoLnnm67lvZXvvIjlpoIgJ0Q6L3Byb2plY3QvZGlzdC9teGNhZCfvvIlcclxuICogQHBhcmFtIGJhc2VQYXRoIOWPr+mAieeahOWfuuehgOi3r+W+hOWJjee8gO+8iOWmgiAnL214Y2FkLyfvvIznlKjkuo4gVml0Ze+8iVxyXG4gKiBAcmV0dXJucyDop6PmnpDnu5PmnpzmiJbplJnor69cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2FmZVBhdGgoXHJcbiAgcmVxVXJsOiBzdHJpbmcsXHJcbiAgcm9vdDogc3RyaW5nLFxyXG4gIGJhc2VQYXRoPzogc3RyaW5nXHJcbik6IFBhcnNlZFBhdGhSZXN1bHQge1xyXG4gIC8vIDEuIOWfuuacrOagoemqjFxyXG4gIGlmICghcmVxVXJsIHx8IHR5cGVvZiByZXFVcmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnQmFkIFJlcXVlc3QnIH07XHJcbiAgfVxyXG5cclxuICAvLyAyLiDmj5Dlj5bot6/lvoTvvIjljrsgcXVlcnkg5ZKMIGhhc2jvvIlcclxuICBsZXQgdXJsUGF0aCA9IHJlcVVybC5zcGxpdCgnPycpWzBdLnNwbGl0KCcjJylbMF07XHJcblxyXG4gIC8vIDMuIOino+eggSBVUkxcclxuICBsZXQgZGVjb2RlZFBhdGg6IHN0cmluZztcclxuICB0cnkge1xyXG4gICAgZGVjb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsUGF0aCk7XHJcbiAgICAvLyDpmLLmraIgbnVsbCDlrZfoioLmlLvlh7tcclxuICAgIGlmIChkZWNvZGVkUGF0aC5pbmNsdWRlcygnXFwwJykpIHtcclxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHN0YXR1c0NvZGU6IDQwMCwgbWVzc2FnZTogJ0ludmFsaWQgVVJMJyB9O1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHN0YXR1c0NvZGU6IDQwMCwgbWVzc2FnZTogJ0ludmFsaWQgVVJMIGVuY29kaW5nJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8gNC4g5aSE55CGIGJhc2VQYXRo77yI5aaCIFZpdGUg55qEIGJhc2XvvIlcclxuICBpZiAoYmFzZVBhdGggJiYgZGVjb2RlZFBhdGguc3RhcnRzV2l0aChiYXNlUGF0aCkpIHtcclxuICAgIGRlY29kZWRQYXRoID0gZGVjb2RlZFBhdGguc2xpY2UoYmFzZVBhdGgubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIC8vIDUuIOa4heeQhui3r+W+hO+8muWOu+mZpOW8gOWktOWkmuS9meeahCAvXHJcbiAgLy8g5L6L5aaC77yaLy9hc3NldHMvZmlsZS5qc29uIC0+IGFzc2V0cy9maWxlLmpzb25cclxuICBjb25zdCBjbGVhbmVkUGF0aCA9IGRlY29kZWRQYXRoLnJlcGxhY2UoL15cXC8rLywgJycpO1xyXG5cclxuICAvLyA2LiDmi7zmjqXmlofku7bot6/lvoRcclxuICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocm9vdCwgY2xlYW5lZFBhdGggfHwgJy4nKTtcclxuXHJcbiAgLy8gNy4g5a6J5YWo5qOA5p+l77ya6Ziy5q2i6Lev5b6E56m/6LaKXHJcbiAgbGV0IG5vcm1hbGl6ZWRGaWxlOiBzdHJpbmc7XHJcbiAgbGV0IG5vcm1hbGl6ZWRSb290OiBzdHJpbmc7XHJcbiAgdHJ5IHtcclxuICAgIG5vcm1hbGl6ZWRGaWxlID0gcmVzb2x2ZShmaWxlUGF0aCk7XHJcbiAgICBub3JtYWxpemVkUm9vdCA9IHJlc29sdmUocm9vdCk7XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNTAwLCBtZXNzYWdlOiAnUGF0aCByZXNvbHV0aW9uIGZhaWxlZCcgfTtcclxuICB9XHJcblxyXG4gIC8vIOKchSDlhbPplK7vvJrnoa7kv50gbm9ybWFsaXplZEZpbGUg5ZyoIG5vcm1hbGl6ZWRSb290IOebruW9leS4i1xyXG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWxlU3RyID0gbm9ybWFsaXplZEZpbGUucmVwbGFjZSgvXFxcXC9nLCAnLycpICsgJy8nO1xyXG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290U3RyID0gbm9ybWFsaXplZFJvb3QucmVwbGFjZSgvXFxcXC9nLCAnLycpICsgJy8nO1xyXG5cclxuICBpZiAoIW5vcm1hbGl6ZWRGaWxlU3RyLnN0YXJ0c1dpdGgobm9ybWFsaXplZFJvb3RTdHIpKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAzLCBtZXNzYWdlOiAnRm9yYmlkZGVuOiBQYXRoIHRyYXZlcnNhbCBkZXRlY3RlZCcgfTtcclxuICB9XHJcblxyXG4gIC8vIDguIOaPkOWPliBmaWxlTmFtZVxyXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IGNsZWFuZWRQYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aFNlZ21lbnRzLmxlbmd0aCA+IDAgPyBiYXNlbmFtZShwYXRoU2VnbWVudHNbcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDFdKSA6ICcnO1xyXG5cclxuICAvLyDinIUg5oiQ5YqfXHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmaWxlUGF0aDogbm9ybWFsaXplZEZpbGUsXHJcbiAgICB1cmxQYXRoOiBkZWNvZGVkUGF0aCxcclxuICAgIGZpbGVOYW1lLFxyXG4gIH07XHJcbn1cclxuXHJcblxyXG50eXBlIENvbmZpZ0ZpbGVuYW1lID0gKHR5cGVvZiBDT05GSUdfRklMRU5BTUVTKVtudW1iZXJdO1xyXG5mdW5jdGlvbiBoYW5kbGVDb25maWdGaWxlKFxyXG4gIHNyY1BhdGg6IHN0cmluZyxcclxuICBkZXN0UGF0aDogc3RyaW5nLFxyXG4gIGZpbGVuYW1lOiBDb25maWdGaWxlbmFtZSxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIGNhbGxiYWNrOiBOb1BhcmFtQ2FsbGJhY2tcclxuKSB7XHJcbiAgZnMucmVhZEZpbGUoc3JjUGF0aCwgJ3V0Zi04JywgYXN5bmMgKGVyciwgY29udGVudCkgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRhdGEgPSBjb250ZW50LnRyaW0oKSA/IEpTT04ucGFyc2UoY29udGVudCkgOiB7fTtcclxuXHJcbiAgICAgIC8vIOKchSDmraPnoa7nlJ/miJAgdHJhbnNmb3JtIOWHveaVsOWQjVxyXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kL2ksICcnKTtcclxuICAgICAgY29uc3QgdHJhbnNmb3JtS2V5ID0gYHRyYW5zZm9ybSR7cGFzY2FsQ2FzZShiYXNlTmFtZSl9YDsgLy8g5L6L5aaCOiB0cmFuc2Zvcm1QbHVnaW5zQ29uZmlnIOaIliB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWdcclxuXHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybUZuID0gKG9wdGlvbnMgYXMgYW55KVt0cmFuc2Zvcm1LZXldO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGRhdGEgPSBhd2FpdCB0cmFuc2Zvcm1GbihkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xyXG4gICAgICBmcy53cml0ZUZpbGUoZGVzdFBhdGgsIGpzb24sICd1dGYtOCcsIGNhbGxiYWNrKTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcbi8qKlxyXG4gKiDlpITnkIbphY3nva7mlofku7bor7fmsYLvvJror7vlj5Yg4oaSIOi9rOaNoiDihpIg6L+U5Zue5ZON5bqUXHJcbiAqIOeUqOS6jiBWaXRlL1dlYnBhY2sgZGV2IHNlcnZlciDkuK3pl7Tku7ZcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVDb25maWdSZXF1ZXN0KFxyXG4gIGZpbGVQYXRoOiBzdHJpbmcsICAgICAgICAgICAvLyDlt7Lnu4/pqozor4Hov4fnmoTlronlhajot6/lvoRcclxuICBmaWxlTmFtZTogc3RyaW5nLCAgICAgICAgICAgLy8g5paH5Lu25ZCN77yM5aaCICdteFNlcnZlckNvbmZpZy5qc29uJ1xyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sXHJcbiAgcmVzOiBhbnksXHJcbiAgbG9nZ2VyPzogeyBpbmZvPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkOyBlcnJvcj86IChtc2c6IHN0cmluZykgPT4gdm9pZCB9XHJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gIC8vIOS7heWkhOeQhueZveWQjeWNleWGheeahOaWh+S7tlxyXG4gIGlmICghKENPTkZJR19GSUxFTkFNRVMgYXMgdW5rbm93biBhcyBzdHJpbmcpLmluY2x1ZGVzKGZpbGVOYW1lKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICBsZXQgZGF0YSA9IGNvbnRlbnQudHJpbSgpID8gSlNPTi5wYXJzZShjb250ZW50KSA6IHt9O1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybUtleSA9IGB0cmFuc2Zvcm0ke3Bhc2NhbENhc2UoZmlsZU5hbWUucmVwbGFjZSgvXFwuanNvbiQvaSwgJycpKX1gO1xyXG4gICAgY29uc3QgdHJhbnNmb3JtRm4gPSAob3B0aW9ucyBhcyBhbnkpW3RyYW5zZm9ybUtleV07XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBkYXRhID0gYXdhaXQgdHJhbnNmb3JtRm4oZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgIHJlcy5zZXRIZWFkZXIoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKTtcclxuICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGxvZ2dlcj8uZXJyb3I/LihgW214Y2FkLWFzc2V0c10g4p2MIEZhaWxlZCB0byBzZXJ2ZSAke2ZpbGVOYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xyXG4gICAgICByZXMuZW5kKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlOyAvLyDlt7LlpITnkIbplJnor69cclxuICB9XHJcbn1cclxuXHJcbi8qKiDliJvlu7rpgJrnlKjlhajlsYDkuK3pl7Tku7YgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdsb2JhbFVuaXZlcnNhbE1pZGRsZXdhcmUob3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPikge1xyXG4gIHJldHVybiBhc3luYyAocmVxOiBhbnksIHJlczogYW55LCBuZXh0OiBhbnkpID0+IHtcclxuICAgIGlmICghb3B0aW9ucy5pc1dhc21TdCkge1xyXG4gICAgICByZXMuc2V0SGVhZGVyKCdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsICdzYW1lLW9yaWdpbicpO1xyXG4gICAgICByZXMuc2V0SGVhZGVyKCdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JywgJ3JlcXVpcmUtY29ycCcpO1xyXG4gICAgfVxyXG4gICAgbmV4dCgpO1xyXG4gIH1cclxufVxyXG4vLyA9PT0g6L6F5Yqp5Ye95pWw77ya5a2X56ym5Liy6L2sIFBhc2NhbENhc2UgPT09XHJcbmV4cG9ydCBmdW5jdGlvbiBwYXNjYWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3RyXHJcbiAgICAucmVwbGFjZSgvW15hLXpBLVowLTldKyguKS9nLCAobSwgY2hyKSA9PiBjaHIudG9VcHBlckNhc2UoKSlcclxuICAgIC5yZXBsYWNlKC9eLi8sIGMgPT4gYy50b1VwcGVyQ2FzZSgpKTtcclxufVxyXG5cclxuLy8gPT09IOWFtuS7luWOn+acieWvvOWHuuS/neaMgeS4jeWPmCA9PT1cclxuZXhwb3J0IGNvbnN0IGV4dGVybmFscyA9IHtcclxuICAndnVlJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLlZ1ZScsXHJcbiAgJ2F4aW9zJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLmF4aW9zJyxcclxuICAndnVldGlmeSc6ICdNWENBREFQUF9FWFRFUk5BTExJQlJBUklFUy52dWV0aWZ5JyxcclxuICAndnVldGlmeS9jb21wb25lbnRzJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLnZ1ZXRpZnlDb21wb25lbnRzJyxcclxuICAnbWFwYm94LWdsJzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLm1hcGJveGdsJyxcclxuICAncGluaWEnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMucGluaWEnXHJcbn07XHJcbi8vIOWni+e7iOS/neeVmeeahOaooeWdl1xyXG5jb25zdCBBTFdBWVNfS0VFUCA9IG5ldyBTZXQoWydteGNhZCcsICdteGRyYXcnXSk7XHJcblxyXG4vKipcclxuICog5riF55CG5bm25YaZ5YWl5q2j56Gu55qE57G75Z6L5byV55SoXHJcbiAqL1xyXG5mdW5jdGlvbiBzeW5jVHlwZVJlZmVyZW5jZXMobGlicmFyeU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gIGNvbnN0IHJvb3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xyXG4gIGNvbnN0IGRpc3REaXIgPSByZXNvbHZlKHJvb3REaXIsICdub2RlX21vZHVsZXMnLCAnbXhjYWQtYXBwJywgJ2Rpc3QnKTtcclxuICBjb25zdCBpbmRleFBhdGggPSByZXNvbHZlKGRpc3REaXIsICdpbmRleC5kLnRzJyk7XHJcblxyXG4gIHRyeSB7XHJcbiAgICAvLyDinIUgMS4g5qOA5p+lIGRpc3Qg55uu5b2VXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlzdERpcikpIHtcclxuICAgICAgY29uc29sZS53YXJuKGDimqDvuI8gbXhjYWQtYXBwL2Rpc3Qg55uu5b2V5LiN5a2Y5Zyo77yM6Lez6L+H57G75Z6L5ZCM5q2lOiAke2Rpc3REaXJ9YCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgMi4g56Gu5L+dIGluZGV4LmQudHMg5a2Y5ZyoXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoaW5kZXhQYXRoKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4UGF0aCwgJycsICd1dGYtOCcpO1xyXG4gICAgICBjb25zb2xlLmxvZyhg4pyFIOW3suWIm+W7uuepuuexu+Wei+aWh+S7tjogJHtpbmRleFBhdGh9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoaW5kZXhQYXRoLCAndXRmLTgnKTtcclxuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgvXFxyP1xcbi8pO1xyXG5cclxuICAgIC8vIOKchSAzLiDmj5Dlj5bmiYDmnInnjrDmnInnmoQgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4veHh4LmQudHNcIiAvPiDooYxcclxuICAgIGNvbnN0IHJlZmVyZW5jZVJlZ2V4ID0gL1xcL1xcL1xcL1xccyo8cmVmZXJlbmNlXFxzK3BhdGg9XCJcXC5cXC8oW15cIl0rXFwuZFxcLnRzKVwiXFxzKlxcLz4vO1xyXG4gICAgY29uc3QgZXhpc3RpbmdSZWZzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3Qgbm9uUmVmTGluZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgY29uc3QgbWF0Y2ggPSBsaW5lLnRyaW0oKS5tYXRjaChyZWZlcmVuY2VSZWdleCk7XHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gbWF0Y2hbMV07IC8vIOWmgiBcInZ1ZS5kLnRzXCJcclxuICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvXFwuZFxcLnRzJC8sICcnKTsgLy8g5o+Q5Y+W5qih5Z2X5ZCNXHJcbiAgICAgICAgZXhpc3RpbmdSZWZzLnB1c2gobW9kdWxlTmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbm9uUmVmTGluZXMucHVzaChsaW5lKTsgLy8g5L+d55WZ6Z2eIHJlZmVyZW5jZSDooYxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDQuIOiuoeeul+acgOe7iOW6lOivpeS/neeVmeeahOaooeWdl1xyXG4gICAgY29uc3QgdmFsaWRNb2R1bGVzID0gbmV3IFNldDxzdHJpbmc+KEFMV0FZU19LRUVQKTtcclxuXHJcbiAgICBsaWJyYXJ5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgLy8g5b+F6aG75ZyoIGV4dGVybmFscyDkuK3lrprkuYnvvIzkuJTnsbvlnovmlofku7blrZjlnKhcclxuICAgICAgaWYgKG5hbWUgaW4gZXh0ZXJuYWxzKSB7XHJcbiAgICAgICAgY29uc3QgZHRzUGF0aCA9IHJlc29sdmUoZGlzdERpciwgYCR7bmFtZX0uZC50c2ApO1xyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGR0c1BhdGgpKSB7XHJcbiAgICAgICAgICB2YWxpZE1vZHVsZXMuYWRkKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDUuIOeUn+aIkOacgOe7iOeahCByZWZlcmVuY2Ug6KGM77yI5L+d5oyBIG14Y2FkIOWSjCBteGRyYXcg5Zyo5pyA5YmN77yJXHJcbiAgICBjb25zdCBmaW5hbFJlZnMgPSBbJ214Y2FkJywgJ214ZHJhdyddXHJcbiAgICAgIC5maWx0ZXIobmFtZSA9PiB2YWxpZE1vZHVsZXMuaGFzKG5hbWUpKVxyXG4gICAgICAubWFwKG5hbWUgPT4gYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLyR7bmFtZX0uZC50c1wiIC8+YCk7XHJcblxyXG4gICAgLy8g5re75Yqg5YW25LuWIHZhbGlkTW9kdWxlcyDkuK3nmoTvvIjljrvph43vvIlcclxuICAgIEFycmF5LmZyb20odmFsaWRNb2R1bGVzKVxyXG4gICAgICAuZmlsdGVyKG5hbWUgPT4gIUFMV0FZU19LRUVQLmhhcyhuYW1lKSlcclxuICAgICAgLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgZmluYWxSZWZzLnB1c2goYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLyR7bmFtZX0uZC50c1wiIC8+YCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIOKchSA2LiDlkIjlubbvvJrmnIDnu4jlvJXnlKggKyDljp/lp4vpnZ7lvJXnlKjooYxcclxuICAgIGNvbnN0IHJlc3VsdExpbmVzID0gWy4uLmZpbmFsUmVmcywgJycsIC4uLm5vblJlZkxpbmVzLmZpbHRlcihsID0+IGwudHJpbSgpLmxlbmd0aCA+IDApXTtcclxuXHJcbiAgICAvLyDnp7vpmaTov57nu63nqbrooYzvvIzkv53nlZnkuIDkuKrliIbpmpRcclxuICAgIGNvbnN0IGNsZWFuZWRMaW5lcyA9IHJlc3VsdExpbmVzLmZpbHRlcigobGluZSwgaSwgYXJyKSA9PlxyXG4gICAgICAhKGxpbmUudHJpbSgpID09PSAnJyAmJiBpID4gMCAmJiBhcnJbaSAtIDFdLnRyaW0oKSA9PT0gJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjbGVhbmVkTGluZXMuam9pbignXFxuJykudHJpbSgpICsgJ1xcbic7XHJcblxyXG4gICAgLy8g4pyFIDcuIOWGmeWbnuaWh+S7tu+8iOS7heW9k+WGheWuueWPmOWMluaXtu+8iVxyXG4gICAgaWYgKGNvbnRlbnQudHJpbSgpICE9PSBuZXdDb250ZW50LnRyaW0oKSkge1xyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4UGF0aCwgbmV3Q29udGVudCwgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDinIUg5bey5ZCM5q2lIG14Y2FkLWFwcC9kaXN0L2luZGV4LmQudHMg57G75Z6L5byV55SoYCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKGDinYwg5ZCM5q2l57G75Z6L5byV55So5aSx6LSlOmAsIGVycik7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog6aKE5a6a5LmJ5bqT5ZCN5Yiw5YWo5bGA5Y+Y6YeP55qE5pig5bCEXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSUJSQVJZX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICBteGNhZDogJ014Q0FEJyxcclxuICBteGRyYXc6ICdNeCdcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxzKFxyXG4gIGxpYnJhcnlOYW1lczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPlsnbGlicmFyeU5hbWVzJ11cclxuKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XHJcbiAgc3luY1R5cGVSZWZlcmVuY2VzKGxpYnJhcnlOYW1lcyk7XHJcbiAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0geyAuLi5ERUZBVUxUX0xJQlJBUllfTUFQIH1cclxuICBpZiAoIUFycmF5LmlzQXJyYXkobGlicmFyeU5hbWVzKSkgcmV0dXJuIHJlc3VsdDtcclxuICBsaWJyYXJ5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIGlmIChuYW1lIGluIGV4dGVybmFscykge1xyXG4gICAgICByZXN1bHRbbmFtZV0gPSBleHRlcm5hbHNbbmFtZSBhcyBrZXlvZiB0eXBlb2YgZXh0ZXJuYWxzXTtcclxuICAgIH1cclxuICB9KTtcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlQXNzZXRzUGF0aCgpOiBzdHJpbmcge1xyXG4gIGxldCBjdXJyZW50RmlsZTogc3RyaW5nO1xyXG4gIGlmICh0eXBlb2YgX19maWxlbmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGN1cnJlbnRGaWxlID0gX19maWxlbmFtZTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgY3VycmVudEZpbGUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XHJcbiAgfVxyXG4gIGNvbnN0IHBhY2thZ2VSb290ID0gcmVzb2x2ZShjdXJyZW50RmlsZSwgJy4uJywgJy4uJywgJy4uJyk7XHJcbiAgY29uc3QgYXNzZXRzUGF0aCA9IHJlc29sdmUocGFja2FnZVJvb3QsIG5hbWUsICdkaXN0JywgJ214Y2FkQXBwQXNzZXRzJyk7XHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGFzc2V0c1BhdGgpKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG14LWNhZC1hcHAgYXNzZXRzIG5vdCBmb3VuZCBhdDogJHthc3NldHNQYXRofWApO1xyXG4gIH1cclxuICByZXR1cm4gYXNzZXRzUGF0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU291cmNlQXNzZXRzRXhpc3QoKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgcGF0aCA9IGdldFNvdXJjZUFzc2V0c1BhdGgoKTtcclxuICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKSAmJiBmcy5sc3RhdFN5bmMocGF0aCkuaXNEaXJlY3RvcnkoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUnVudGltZUNvbmZpZ1NjcmlwdChwdWJsaWNQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgXHJcbiAgICA8c2NyaXB0PlxyXG4gICAgICB3aW5kb3cuX19NWF9DQURfQVBQX0FTU0VUX1BBVEhfXyA9ICcke3B1YmxpY1BhdGh9JztcclxuICAgIDwvc2NyaXB0PlxyXG4gIGAudHJpbSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weURpcihcclxuICBzcmM6IHN0cmluZyxcclxuICBkZXN0OiBzdHJpbmcsXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkXHJcbik6IHZvaWQge1xyXG4gIC8vIOKchSDmlrDlop7vvJrmo4Dmn6UgcHVibGljRGlyIOaYr+WQpuWtmOWcqFxyXG4gIGlmICghZnMuZXhpc3RzU3luYyhwdWJsaWNEaXIpKSB7XHJcbiAgICAvLyDkuI3lrZjlnKjliJnot7Pov4fmiavmj4/vvIznm7TmjqXlpI3liLZcclxuICAgIGRvQ29weShzcmMsIGRlc3QsIHB1YmxpY0RpciwgbmV3IFNldCgpLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIC8vIOesrOS4gOatpe+8muaJq+aPjyBwdWJsaWNEaXIg5LiL5omA5pyJ5paH5Lu277yI55u45a+55LqOIHB1YmxpY0RpciDnmoTot6/lvoTvvIlcclxuICBzY2FuUHVibGljRGlyKHB1YmxpY0RpciwgKGVyciwgcHVibGljRmlsZXMpID0+IHtcclxuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgIC8vIOesrOS6jOatpe+8muW8gOWni+WkjeWItu+8jOS8oOWFpSBwdWJsaWNGaWxlcyDnvJPlrZhcclxuICAgIGRvQ29weShzcmMsIGRlc3QsIHB1YmxpY0RpciwgcHVibGljRmlsZXMhLCBvcHRpb25zLCBjYWxsYmFjayk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIOWunumZheaJp+ihjOWkjeWItueahOWHveaVsFxyXG5mdW5jdGlvbiBkb0NvcHkoXHJcbiAgc3JjOiBzdHJpbmcsXHJcbiAgZGVzdDogc3RyaW5nLFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIHB1YmxpY0ZpbGVzOiBTZXQ8c3RyaW5nPixcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LCAvLyDms6jmhI/vvJrov5nph4zpnIDopoHnoa7kv50gZW5hYmxlQ29tcHJlc3NlZEFzc2V0cyDmmK/lv4XpgInnmoRcclxuICBjYWxsYmFjazogKGVycj86IEVycm9yKSA9PiB2b2lkXHJcbikge1xyXG4gIGZzLm1rZGlyKGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0sIChlcnIpID0+IHtcclxuICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgIGZzLnJlYWRkaXIoc3JjLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyciwgZGlyZW50cykgPT4ge1xyXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICAgIGxldCBwZW5kaW5nID0gZGlyZW50cy5sZW5ndGg7XHJcbiAgICAgIGlmIChwZW5kaW5nID09PSAwKSByZXR1cm4gY2FsbGJhY2soKTtcclxuXHJcbiAgICAgIC8vIOaPkOWJjeWumuS5ieWOi+e8qeaWh+S7tuaJqeWxleWQjVxyXG4gICAgICBjb25zdCBjb21wcmVzc2VkRXh0cyA9IFsnLmd6J107IC8vIOWPr+aMiemcgOaJqeWxlVxyXG5cclxuICAgICAgZGlyZW50cy5mb3JFYWNoKChkaXJlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBzcmNQYXRoID0gcmVzb2x2ZShzcmMsIGRpcmVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHJlc29sdmUoZGVzdCwgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlKHNyYywgc3JjUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpIGFzIENvbmZpZ0ZpbGVuYW1lO1xyXG5cclxuICAgICAgICAvLyDmlrDlop7vvJrlpoLmnpznpoHnlKjljovnvKnotYTmupDkuJTmmK/ljovnvKnmlofku7bvvIzliJnot7Pov4dcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhb3B0aW9ucy5lbmFibGVDb21wcmVzc2VkQXNzZXRzICYmXHJcbiAgICAgICAgICBjb21wcmVzc2VkRXh0cy5zb21lKGV4dCA9PiByZWxhdGl2ZVBhdGguZW5kc1dpdGgoZXh0KSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIGRvQ29weShzcmNQYXRoLCBkZXN0UGF0aCwgcHVibGljRGlyLCBwdWJsaWNGaWxlcywgb3B0aW9ucywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIGlmIChwdWJsaWNGaWxlcy5oYXMocmVsYXRpdmVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGaWxlUGF0aCA9IHJlc29sdmUocHVibGljRGlyLCByZWxhdGl2ZVBhdGgpO1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZShwdWJsaWNGaWxlUGF0aCwgZGVzdFBhdGgsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoQ09ORklHX0ZJTEVOQU1FUy5pbmNsdWRlcyhyZWxhdGl2ZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpZ0ZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIHJlbGF0aXZlUGF0aCwgb3B0aW9ucywgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZnMuY29weUZpbGUoc3JjUGF0aCwgZGVzdFBhdGgsIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuICAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuLy8g5omr5o+PIHB1YmxpY0RpciDkuIvmiYDmnInmlofku7bvvIzov5Tlm57nm7jlr7nkuo4gcHVibGljRGlyIOeahOi3r+W+hOmbhuWQiFxyXG5mdW5jdGlvbiBzY2FuUHVibGljRGlyKFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIGNhbGxiYWNrOiAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24gfCBudWxsLCBmaWxlcz86IFNldDxzdHJpbmc+KSA9PiB2b2lkXHJcbikge1xyXG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICBmdW5jdGlvbiB3YWxrKGRpcjogc3RyaW5nKSB7XHJcbiAgICBmcy5yZWFkZGlyKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChlcnIsIGRpcmVudHMpID0+IHtcclxuICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgICBsZXQgcGVuZGluZyA9IGRpcmVudHMubGVuZ3RoO1xyXG4gICAgICBpZiAocGVuZGluZyA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXJlbnRzLmZvckVhY2goKGRpcmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVzb2x2ZShkaXIsIGRpcmVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCByZWxQYXRoID0gcmVsYXRpdmUocHVibGljRGlyLCBmdWxsUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgICAgICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgIHdhbGsoZnVsbFBhdGgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZW50LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgICByZXN1bHQuYWRkKHJlbFBhdGgpO1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd2FsayhwdWJsaWNEaXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgZXh0ID0gZmlsZVBhdGguc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAnJztcclxuICBjb25zdCB0eXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICdjc3MnOiAndGV4dC9jc3MnLFxyXG4gICAgJ2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxyXG4gICAgJ2pzb24nOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAncG5nJzogJ2ltYWdlL3BuZycsXHJcbiAgICAnanBnJzogJ2ltYWdlL2pwZWcnLFxyXG4gICAgJ2pwZWcnOiAnaW1hZ2UvanBlZycsXHJcbiAgICAnZ2lmJzogJ2ltYWdlL2dpZicsXHJcbiAgICAnc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxyXG4gICAgJ3dvZmYnOiAnZm9udC93b2ZmJyxcclxuICAgICd3b2ZmMic6ICdmb250L3dvZmYyJyxcclxuICAgICd0dGYnOiAnZm9udC90dGYnLFxyXG4gICAgJ2VvdCc6ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCcsXHJcbiAgICAnaWNvJzogJ2ltYWdlL3gtaWNvbicsXHJcbiAgICAnd2FzbSc6ICdhcHBsaWNhdGlvbi93YXNtJyxcclxuICAgICd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcclxuICAgICdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXHJcbiAgICAnN3onOiAnYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkJyxcclxuICAgICd0YXInOiAnYXBwbGljYXRpb24veC10YXInLFxyXG4gICAgJ2d6JzogJ2FwcGxpY2F0aW9uL2d6aXAnLFxyXG4gICAgJ2J6Mic6ICdhcHBsaWNhdGlvbi94LWJ6aXAyJyxcclxuICAgICd4eic6ICdhcHBsaWNhdGlvbi94LXh6J1xyXG4gIH07XHJcbiAgcmV0dXJuIHR5cGVzW2V4dF0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICog5qCH5YeG5YyW6Lev5b6E77yM56Gu5L+d5LulICcvJyDnu5PlsL5cclxuICovXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocDogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gcmVzb2x2ZShwKS5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDliJvlu7rpgJrnlKjkuK3pl7Tku7bvvJrkvJjlhYjkvb/nlKggcHVibGljIOi1hOa6kO+8jOWbnumAgOWIsCBzb3VyY2VBc3NldHNQYXRoXHJcbiAqIOWvueaghyBjcmVhdGVTdGF0aWNNaWRkbGV3YXJlIOmjjuagvFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU14Q2FkQXNzZXRzTWlkZGxld2FyZShcclxuICByb290OiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICBwdWJsaWNEaXI6IHN0cmluZyxcclxuICBsb2dnZXI/OiBhbnlcclxuKSB7XHJcbiAgY29uc3QgeyBvdXRwdXREaXIsIGlzV2FzbVN0ID0gZmFsc2UgfSA9IG9wdGlvbnM7XHJcbiAgLy8g4pyFIDEuIOinhOiMg+WMlui3r+W+hFxyXG4gIGNvbnN0IGJhc2VQYXRoID0gYC8ke291dHB1dERpci5yZXBsYWNlKC9eXFwvKy8sICcnKX1gOyAvLyAnL214Y2FkQXBwQXNzZXRzJ1xyXG4gIGNvbnN0IHNvdXJjZUFzc2V0c1Jvb3QgPSBub3JtYWxpemVQYXRoKHJvb3QpO1xyXG5cclxuICByZXR1cm4gYXN5bmMgKHJlcTogYW55LCByZXM6IGFueSwgbmV4dDogKCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgLy8g4pyFIDIuIOWfuuacrOagoemqjFxyXG4gICAgaWYgKCFyZXEudXJsIHx8IHR5cGVvZiByZXEudXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gbmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSAzLiDorr7nva7lronlhajlpLTvvIjpnZ4gaXNXYXNtU3Qg5qih5byP77yJXHJcbiAgICBpZiAoIWlzV2FzbVN0KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JywgJ3NhbWUtb3JpZ2luJyk7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLCAncmVxdWlyZS1jb3JwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIDQuIOino+aekCBVUkwg6Lev5b6E77yI5Y67IHF1ZXJ577yM6Kej56CB77yJXHJcbiAgICBjb25zdCB1cmxQYXRoID0gcmVxLnVybC5zcGxpdCgnPycpWzBdO1xyXG4gICAgbGV0IGZpbGVQYXRoITogc3RyaW5nO1xyXG4gICAgbGV0IGZpbGVOYW1lITogc3RyaW5nO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGRlY29kZWRQYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybFBhdGgpO1xyXG4gICAgICAvLyDop4TojIPljJbot6/lvoTvvIzpmLLmraIgLi4vLi4vIOi2iuadg1xyXG4gICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGRlY29kZWRQYXRoLnJlcGxhY2UoL15bL1xcXFxdKy8sICcnKTtcclxuXHJcbiAgICAgIC8vIOKchSA1LiDkvJjlhYjvvJrmo4Dmn6UgcHVibGljLyR7b3V0cHV0RGlyfSDnm67lvZVcclxuICAgICAgY29uc3QgcHVibGljRmlsZVBhdGggPSBqb2luKHB1YmxpY0Rpciwgbm9ybWFsaXplZFBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnByb21pc2VzLnN0YXQocHVibGljRmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChzdGF0LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgICBmaWxlUGF0aCA9IHB1YmxpY0ZpbGVQYXRoO1xyXG4gICAgICAgICAgZmlsZU5hbWUgPSBiYXNlbmFtZShub3JtYWxpemVkUGF0aCk7XHJcbiAgICAgICAgICByZXR1cm4gc2VydmVGaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSwgcmVzLCBsb2dnZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgLy8gcHVibGljIOS4reayoeacie+8jOe7p+e7reafpeaJviBzb3VyY2VBc3NldHNQYXRoXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOKchSA2LiBmYWxsYmFja++8muafpeaJviBzb3VyY2VBc3NldHNQYXRoXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVTYWZlUGF0aChkZWNvZGVkUGF0aCwgc291cmNlQXNzZXRzUm9vdCwgYmFzZVBhdGgpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSByZXN1bHQuc3RhdHVzQ29kZSB8fCA0MDA7XHJcbiAgICAgICAgcmV0dXJuIHJlcy5lbmQocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmZpbGVQYXRoKSBmaWxlUGF0aCA9IHJlc3VsdC5maWxlUGF0aDtcclxuICAgICAgaWYgKHJlc3VsdC5maWxlTmFtZSkgZmlsZU5hbWUgPSByZXN1bHQuZmlsZU5hbWU7XHJcblxyXG4gICAgICAvLyDinIUgNy4g5bCd6K+V55SxIGhhbmRsZUNvbmZpZ1JlcXVlc3Qg5aSE55CG77yI5aaC5rOo5YWl6YWN572u77yJXHJcbiAgICAgIGNvbnN0IGhhbmRsZWQgPSBhd2FpdCBoYW5kbGVDb25maWdSZXF1ZXN0KFxyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgcmVzLFxyXG4gICAgICAgIGxvZ2dlclxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaGFuZGxlZCkgcmV0dXJuO1xyXG5cclxuICAgICAgLy8g4pyFIDguIOehruS/neaYr+aWh+S7tlxyXG4gICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChmaWxlUGF0aCk7XHJcbiAgICAgIGlmICghc3RhdC5pc0ZpbGUoKSkge1xyXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xyXG4gICAgICAgIHJldHVybiByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZCcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VydmVGaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSwgcmVzLCBsb2dnZXIpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGxvZ2dlcj8ud2Fybj8uKGBbTXhDYWRBc3NldHNdIFNlcnZlIGZhaWxlZCBmb3IgJHtyZXEudXJsfTogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xyXG4gICAgICBpZiAocmVzLmhlYWRlcnNTZW50KSByZXR1cm47XHJcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xyXG4gICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDlsIHoo4Xmlofku7blk43lupTpgLvovpHvvIjmtYHlvI/kvKDovpPvvIlcclxuICovXHJcbmZ1bmN0aW9uIHNlcnZlRmlsZShmaWxlUGF0aDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCByZXM6IGFueSwgbG9nZ2VyPzogYW55KSB7XHJcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XHJcblxyXG4gIHN0cmVhbS5vbignZXJyb3InLCAoZXJyOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pID0+IHtcclxuICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcclxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcgfHwgZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XHJcbiAgICAgIHJldHVybiByZXMuc3RhdHVzQ29kZSA9PT0gMjAwID8gcmVzLmVuZCgpIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbG9nZ2VyPy5lcnJvcj8uKGBbTXhDYWRBc3NldHNdIFJlYWQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCwgZXJyKTtcclxuICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xyXG4gICAgcmVzLmVuZCgnSW50ZXJuYWwgU2VydmVyIEVycm9yJyk7XHJcbiAgfSk7XHJcblxyXG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGdldENvbnRlbnRUeXBlKGZpbGVOYW1lKSk7XHJcbiAgcmVzLnNldEhlYWRlcignWC1Db250ZW50LVR5cGUtT3B0aW9ucycsICdub3NuaWZmJyk7XHJcblxyXG4gIHN0cmVhbS5waXBlKHJlcyk7XHJcbn0iXSwibmFtZXMiOlsiZnMiLCJlcnIiLCJuYW1lIiwic3RhdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -174,6 +174,7 @@ const mxcad = [
174
174
  "crateHexString",
175
175
  "createCursor",
176
176
  "createMcCmColor",
177
+ "createMdGeLongLongArrayFormAryId",
177
178
  "createMxCad",
178
179
  "downloadFile",
179
180
  "downloadFileFromUrl",
@@ -1308,7 +1309,7 @@ function getSourceAssetsPath() {
1308
1309
  if (typeof __filename !== "undefined") {
1309
1310
  currentFile = __filename;
1310
1311
  } else {
1311
- currentFile = url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("index-DubbRmDj.js", document.baseURI).href);
1312
+ currentFile = url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("index-CmQPXuBg.js", document.baseURI).href);
1312
1313
  }
1313
1314
  const packageRoot = path.resolve(currentFile, "..", "..", "..");
1314
1315
  const assetsPath = path.resolve(packageRoot, name, "dist", "mxcadAppAssets");
@@ -1522,4 +1523,4 @@ exports.getContentType = getContentType;
1522
1523
  exports.getExternals = getExternals;
1523
1524
  exports.getSourceAssetsPath = getSourceAssetsPath;
1524
1525
  exports.resolveOptions = resolveOptions;
1525
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtRHViYlJtRGouanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2tUb29sUGx1Z2luU3JjL3NoYXJlZC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLy8gcGx1Z2lucy9zaGFyZWQvaW5kZXgudHNcclxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcywgeyBOb1BhcmFtQ2FsbGJhY2sgfSBmcm9tICdmcyc7XHJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xyXG5pbXBvcnQgeyBuYW1lIH0gZnJvbSBcIi4uLy4uL2xpYi9wYWNrYWdlLmpzb25cIlxyXG5cclxuaW1wb3J0IHsgTXhRdWlja0NvbW1hbmQgfSBmcm9tIFwiLi90eXBlcy9teFF1aWNrQ29tbWFuZC5kXCJcclxuaW1wb3J0IHsgTXhTZXJ2ZXJDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFNlcnZlckNvbmZpZy5kXCJcclxuaW1wb3J0IHsgTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZy5kXCJcclxuaW1wb3J0IHsgTXhVaUNvbmZpZyB9IGZyb20gXCIuL3R5cGVzL214VWlDb25maWcuZFwiXHJcbmltcG9ydCB7IE14Y2FkVWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teGNhZFVpQ29uZmlnLmRcIlxyXG5pbXBvcnQgeyBWdWV0aWZ5VGhlbWVDb25maWcgfSBmcm9tIFwiLi90eXBlcy92dWV0aWZ5VGhlbWVDb25maWcuZFwiXHJcbmltcG9ydCBhcGlNYXAgZnJvbSAnLi4vYXBpLW1hcC5qc29uJ1xyXG5leHBvcnQgY29uc3QgZ2V0QXBpTWFwID0gKCkgPT4gYXBpTWFwXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXhQbHVnaW5Db25maWcge1xyXG4gIHBsdWdpbnM6IChzdHJpbmcgfCB7XHJcbiAgICBuYW1lPzogc3RyaW5nLFxyXG4gICAgaXNBZnRlckxvYWQ/OiBib29sZWFuLFxyXG4gICAgZGlyPzogYm9vbGVhbixcclxuICAgIHZlcnNpb24/OiBzdHJpbmdcclxuICB9KVtdXHJcbn1cclxuLy8gPT09IOaWsOWinu+8mumFjee9ruaWh+S7tuWQjeW4uOmHjyA9PT1cclxuZXhwb3J0IGNvbnN0IENPTkZJR19GSUxFTkFNRVMgPSBbXHJcbiAgLy8gJ214Y2FkVWlDb25maWcuanNvbicsXHJcbiAgJ214UXVpY2tDb21tYW5kLmpzb24nLFxyXG4gICdteFNlcnZlckNvbmZpZy5qc29uJyxcclxuICAnbXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcuanNvbicsXHJcbiAgJ214VWlDb25maWcuanNvbicsXHJcbiAgJ3Z1ZXRpZnlUaGVtZUNvbmZpZy5qc29uJyxcclxuICAvLyAncGx1Z2lucy9jb25maWcuanNvbidcclxuXSBhcyBjb25zdDtcclxuLyoqXHJcbiAqIOmFjee9ruaWh+S7tuWkhOeQhuWZqFxyXG4gKiDlj6/pgInvvJrlr7nnibnlrprphY3nva7mlofku7bov5vooYzov5DooYzml7bkv67mlLlcclxuICog5Ye95pWw5o6l5pS25Y6f5aeLIEpTT04g5pWw5o2u77yM6L+U5Zue5L+u5pS55ZCO55qEIEpTT04g5pWw5o2u77yI5Y+v5byC5q2l77yJXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybUZ1bmN0aW9ucyB7XHJcbiAgLy8gdHJhbnNmb3JtTXhjYWRVaUNvbmZpZyhkYXRhOiBNeGNhZFVpQ29uZmlnKTogUHJvbWlzZTxNeGNhZFVpQ29uZmlnPiB8IE14Y2FkVWlDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhRdWlja0NvbW1hbmQoZGF0YTogTXhRdWlja0NvbW1hbmQpOiBQcm9taXNlPE14UXVpY2tDb21tYW5kPiB8IE14UXVpY2tDb21tYW5kO1xyXG4gIHRyYW5zZm9ybU14U2VydmVyQ29uZmlnKGRhdGE6IE14U2VydmVyQ29uZmlnKTogUHJvbWlzZTxNeFNlcnZlckNvbmZpZz4gfCBNeFNlcnZlckNvbmZpZztcclxuICB0cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyhkYXRhOiBNeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyk6IFByb21pc2U8TXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWc+IHwgTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhVaUNvbmZpZyhkYXRhOiBNeFVpQ29uZmlnKTogUHJvbWlzZTxNeFVpQ29uZmlnPiB8IE14VWlDb25maWc7XHJcbiAgdHJhbnNmb3JtVnVldGlmeVRoZW1lQ29uZmlnKGRhdGE6IFZ1ZXRpZnlUaGVtZUNvbmZpZyk6IFByb21pc2U8VnVldGlmeVRoZW1lQ29uZmlnPiB8IFZ1ZXRpZnlUaGVtZUNvbmZpZztcclxuICAvLyB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWcoZGF0YTogTXhQbHVnaW5Db25maWdbXSk6IFByb21pc2U8TXhQbHVnaW5Db25maWdbXT4gfCBNeFBsdWdpbkNvbmZpZ1tdO1xyXG59XHJcbi8vIOaJqeWxleaPkuS7tumAiemhueaOpeWPoyA9PT1cclxuZXhwb3J0IGludGVyZmFjZSBNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zZm9ybUZ1bmN0aW9ucz4ge1xyXG4gIC8qKlxyXG4gICAqIOaehOW7uuWQju+8jG14Y2FkQXBwQXNzZXRzIOi1hOa6kOWtmOaUvueahOWtkOebruW9leWQjeOAglxyXG4gICAqIEBkZWZhdWx0ICdteGNhZEFwcEFzc2V0cydcclxuICAgKi9cclxuICBvdXRwdXREaXI/OiBzdHJpbmc7XHJcbiAgLyoqIOesrOS4ieaWueS+nei1liovXHJcbiAgbGlicmFyeU5hbWVzPzogKGtleW9mIHR5cGVvZiBleHRlcm5hbHMpW107XHJcbiAgLyoqIOaYr+WQpuWNlee6v+eoi+WKoOi9vXdhc20gKOm7mOiupOS9v+eUqOWkmue6v+eoi+WPiuWKoOi9vSkgKi9cclxuICBpc1dhc21TdD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgKiDmmK/lkKblkK/nlKjpooTljovnvKnotYTmupDvvIjlpoIgLmd6IOaWh+S7tu+8ieeahOaLt+i0nSDpu5jorqTmmK90cnVlXHJcbiAgKiDorr7nva7kuLogZmFsc2Ug5pe277yMLmd6IOWOi+e8qeaWh+S7tuWwhuS4jeS8muiiq+WkjeWItuWIsOi+k+WHuuebruW9lVxyXG4gICogQGRlZmF1bHQgdHJ1ZVxyXG4gICovXHJcbiAgZW5hYmxlQ29tcHJlc3NlZEFzc2V0cz86IGJvb2xlYW47XHJcbn1cclxuXHJcblxyXG4vLyA9PT0g5aKe5by677yacmVzb2x2ZU9wdGlvbnMg6buY6K6k5YC8ID09PVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbnMob3B0aW9uczogTXhDYWRBc3NldHNQbHVnaW5PcHRpb25zID0ge30pOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+IHtcclxuICBjb25zdCByZXNvbHZlZDogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPiA9IHtcclxuICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIgfHwgJ214Y2FkQXBwQXNzZXRzJyxcclxuICAgIGxpYnJhcnlOYW1lczogb3B0aW9ucy5saWJyYXJ5TmFtZXMgfHwgW10sXHJcbiAgICBpc1dhc21TdDogb3B0aW9ucy5pc1dhc21TdCB8fCBmYWxzZSxcclxuICAgIGVuYWJsZUNvbXByZXNzZWRBc3NldHM6IG9wdGlvbnMuZW5hYmxlQ29tcHJlc3NlZEFzc2V0cyB8fCB0cnVlLFxyXG4gICAgLy8gdHJhbnNmb3JtTXhjYWRVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeGNhZFVpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFF1aWNrQ29tbWFuZDogb3B0aW9ucy50cmFuc2Zvcm1NeFF1aWNrQ29tbWFuZCB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhTZXJ2ZXJDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhTZXJ2ZXJDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybU14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFVpQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14VWlDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybVZ1ZXRpZnlUaGVtZUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1WdWV0aWZ5VGhlbWVDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIC8vIHRyYW5zZm9ybU14UGx1Z2luc0NvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFBsdWdpbnNDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICB9O1xyXG4gIHJldHVybiByZXNvbHZlZDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUGF0aFJlc3VsdCB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBmaWxlUGF0aD86IHN0cmluZzsgICAgICAgICAvLyDlt7IgcmVzb2x2ZSDnmoTlronlhajmlofku7bot6/lvoRcclxuICB1cmxQYXRoPzogc3RyaW5nOyAgICAgICAgICAvLyDop6PnoIHlkI7nmoQgVVJMIOi3r+W+hO+8iOS4jeWQqyBxdWVyee+8iVxyXG4gIGZpbGVOYW1lPzogc3RyaW5nOyAgICAgICAgIC8vIOaWh+S7tuWQje+8iGJhc2VuYW1l77yJXHJcbiAgc3RhdHVzQ29kZT86IG51bWJlcjtcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIOWuieWFqOino+aekOW5tumqjOivgeivt+axgui3r+W+hFxyXG4gKiBAcGFyYW0gcmVxVXJsIOivt+axgueahCBVUkzvvIjlpoIgJy9hc3NldHMvbXhTZXJ2ZXJDb25maWcuanNvbj92PTEn77yJXHJcbiAqIEBwYXJhbSByb290IOacrOWcsOagueebruW9le+8iOWmgiAnRDovcHJvamVjdC9kaXN0L214Y2FkJ++8iVxyXG4gKiBAcGFyYW0gYmFzZVBhdGgg5Y+v6YCJ55qE5Z+656GA6Lev5b6E5YmN57yA77yI5aaCICcvbXhjYWQvJ++8jOeUqOS6jiBWaXRl77yJXHJcbiAqIEByZXR1cm5zIOino+aekOe7k+aenOaIlumUmeivr1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTYWZlUGF0aChcclxuICByZXFVcmw6IHN0cmluZyxcclxuICByb290OiBzdHJpbmcsXHJcbiAgYmFzZVBhdGg/OiBzdHJpbmdcclxuKTogUGFyc2VkUGF0aFJlc3VsdCB7XHJcbiAgLy8gMS4g5Z+65pys5qCh6aqMXHJcbiAgaWYgKCFyZXFVcmwgfHwgdHlwZW9mIHJlcVVybCAhPT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA0MDAsIG1lc3NhZ2U6ICdCYWQgUmVxdWVzdCcgfTtcclxuICB9XHJcblxyXG4gIC8vIDIuIOaPkOWPlui3r+W+hO+8iOWOuyBxdWVyeSDlkowgaGFzaO+8iVxyXG4gIGxldCB1cmxQYXRoID0gcmVxVXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXTtcclxuXHJcbiAgLy8gMy4g6Kej56CBIFVSTFxyXG4gIGxldCBkZWNvZGVkUGF0aDogc3RyaW5nO1xyXG4gIHRyeSB7XHJcbiAgICBkZWNvZGVkUGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmxQYXRoKTtcclxuICAgIC8vIOmYsuatoiBudWxsIOWtl+iKguaUu+WHu1xyXG4gICAgaWYgKGRlY29kZWRQYXRoLmluY2x1ZGVzKCdcXDAnKSkge1xyXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnSW52YWxpZCBVUkwnIH07XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnSW52YWxpZCBVUkwgZW5jb2RpbmcnIH07XHJcbiAgfVxyXG5cclxuICAvLyA0LiDlpITnkIYgYmFzZVBhdGjvvIjlpoIgVml0ZSDnmoQgYmFzZe+8iVxyXG4gIGlmIChiYXNlUGF0aCAmJiBkZWNvZGVkUGF0aC5zdGFydHNXaXRoKGJhc2VQYXRoKSkge1xyXG4gICAgZGVjb2RlZFBhdGggPSBkZWNvZGVkUGF0aC5zbGljZShiYXNlUGF0aC5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gNS4g5riF55CG6Lev5b6E77ya5Y676Zmk5byA5aS05aSa5L2Z55qEIC9cclxuICAvLyDkvovlpoLvvJovL2Fzc2V0cy9maWxlLmpzb24gLT4gYXNzZXRzL2ZpbGUuanNvblxyXG4gIGNvbnN0IGNsZWFuZWRQYXRoID0gZGVjb2RlZFBhdGgucmVwbGFjZSgvXlxcLysvLCAnJyk7XHJcblxyXG4gIC8vIDYuIOaLvOaOpeaWh+S7tui3r+W+hFxyXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihyb290LCBjbGVhbmVkUGF0aCB8fCAnLicpO1xyXG5cclxuICAvLyA3LiDlronlhajmo4Dmn6XvvJrpmLLmraLot6/lvoTnqb/otopcclxuICBsZXQgbm9ybWFsaXplZEZpbGU6IHN0cmluZztcclxuICBsZXQgbm9ybWFsaXplZFJvb3Q6IHN0cmluZztcclxuICB0cnkge1xyXG4gICAgbm9ybWFsaXplZEZpbGUgPSByZXNvbHZlKGZpbGVQYXRoKTtcclxuICAgIG5vcm1hbGl6ZWRSb290ID0gcmVzb2x2ZShyb290KTtcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA1MDAsIG1lc3NhZ2U6ICdQYXRoIHJlc29sdXRpb24gZmFpbGVkJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8g4pyFIOWFs+mUru+8muehruS/nSBub3JtYWxpemVkRmlsZSDlnKggbm9ybWFsaXplZFJvb3Qg55uu5b2V5LiLXHJcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVTdHIgPSBub3JtYWxpemVkRmlsZS5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcbiAgY29uc3Qgbm9ybWFsaXplZFJvb3RTdHIgPSBub3JtYWxpemVkUm9vdC5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcblxyXG4gIGlmICghbm9ybWFsaXplZEZpbGVTdHIuc3RhcnRzV2l0aChub3JtYWxpemVkUm9vdFN0cikpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA0MDMsIG1lc3NhZ2U6ICdGb3JiaWRkZW46IFBhdGggdHJhdmVyc2FsIGRldGVjdGVkJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8gOC4g5o+Q5Y+WIGZpbGVOYW1lXHJcbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gY2xlYW5lZFBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgY29uc3QgZmlsZU5hbWUgPSBwYXRoU2VnbWVudHMubGVuZ3RoID4gMCA/IGJhc2VuYW1lKHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMV0pIDogJyc7XHJcblxyXG4gIC8vIOKchSDmiJDlip9cclxuICByZXR1cm4ge1xyXG4gICAgc3VjY2VzczogdHJ1ZSxcclxuICAgIGZpbGVQYXRoOiBub3JtYWxpemVkRmlsZSxcclxuICAgIHVybFBhdGg6IGRlY29kZWRQYXRoLFxyXG4gICAgZmlsZU5hbWUsXHJcbiAgfTtcclxufVxyXG5cclxuXHJcbnR5cGUgQ29uZmlnRmlsZW5hbWUgPSAodHlwZW9mIENPTkZJR19GSUxFTkFNRVMpW251bWJlcl07XHJcbmZ1bmN0aW9uIGhhbmRsZUNvbmZpZ0ZpbGUoXHJcbiAgc3JjUGF0aDogc3RyaW5nLFxyXG4gIGRlc3RQYXRoOiBzdHJpbmcsXHJcbiAgZmlsZW5hbWU6IENvbmZpZ0ZpbGVuYW1lLFxyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sXHJcbiAgY2FsbGJhY2s6IE5vUGFyYW1DYWxsYmFja1xyXG4pIHtcclxuICBmcy5yZWFkRmlsZShzcmNQYXRoLCAndXRmLTgnLCBhc3luYyAoZXJyLCBjb250ZW50KSA9PiB7XHJcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZGF0YSA9IGNvbnRlbnQudHJpbSgpID8gSlNPTi5wYXJzZShjb250ZW50KSA6IHt9O1xyXG5cclxuICAgICAgLy8g4pyFIOato+ehrueUn+aIkCB0cmFuc2Zvcm0g5Ye95pWw5ZCNXHJcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvaSwgJycpO1xyXG4gICAgICBjb25zdCB0cmFuc2Zvcm1LZXkgPSBgdHJhbnNmb3JtJHtwYXNjYWxDYXNlKGJhc2VOYW1lKX1gOyAvLyDkvovlpoI6IHRyYW5zZm9ybVBsdWdpbnNDb25maWcg5oiWIHRyYW5zZm9ybU14UGx1Z2luc0NvbmZpZ1xyXG5cclxuICAgICAgY29uc3QgdHJhbnNmb3JtRm4gPSAob3B0aW9ucyBhcyBhbnkpW3RyYW5zZm9ybUtleV07XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRyYW5zZm9ybUZuKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XHJcbiAgICAgIGZzLndyaXRlRmlsZShkZXN0UGF0aCwganNvbiwgJ3V0Zi04JywgY2FsbGJhY2spO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuLyoqXHJcbiAqIOWkhOeQhumFjee9ruaWh+S7tuivt+axgu+8muivu+WPliDihpIg6L2s5o2iIOKGkiDov5Tlm57lk43lupRcclxuICog55So5LqOIFZpdGUvV2VicGFjayBkZXYgc2VydmVyIOS4remXtOS7tlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNvbmZpZ1JlcXVlc3QoXHJcbiAgZmlsZVBhdGg6IHN0cmluZywgICAgICAgICAgIC8vIOW3sue7j+mqjOivgei/h+eahOWuieWFqOi3r+W+hFxyXG4gIGZpbGVOYW1lOiBzdHJpbmcsICAgICAgICAgICAvLyDmlofku7blkI3vvIzlpoIgJ214U2VydmVyQ29uZmlnLmpzb24nXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICByZXM6IGFueSxcclxuICBsb2dnZXI/OiB7IGluZm8/OiAobXNnOiBzdHJpbmcpID0+IHZvaWQ7IGVycm9yPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkIH1cclxuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgLy8g5LuF5aSE55CG55m95ZCN5Y2V5YaF55qE5paH5Lu2XHJcbiAgaWYgKCEoQ09ORklHX0ZJTEVOQU1FUyBhcyB1bmtub3duIGFzIHN0cmluZykuaW5jbHVkZXMoZmlsZU5hbWUpKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcclxuICAgIGxldCBkYXRhID0gY29udGVudC50cmltKCkgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDoge307XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtS2V5ID0gYHRyYW5zZm9ybSR7cGFzY2FsQ2FzZShmaWxlTmFtZS5yZXBsYWNlKC9cXC5qc29uJC9pLCAnJykpfWA7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm1GbiA9IChvcHRpb25zIGFzIGFueSlbdHJhbnNmb3JtS2V5XTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGRhdGEgPSBhd2FpdCB0cmFuc2Zvcm1GbihkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgcmVzLnNldEhlYWRlcignQ2FjaGUtQ29udHJvbCcsICduby1jYWNoZScpO1xyXG4gICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgbG9nZ2VyPy5lcnJvcj8uKGBbbXhjYWQtYXNzZXRzXSDinYwgRmFpbGVkIHRvIHNlcnZlICR7ZmlsZU5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xyXG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcclxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XHJcbiAgICAgIHJlcy5lbmQoJ0ludGVybmFsIFNlcnZlciBFcnJvcicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7IC8vIOW3suWkhOeQhumUmeivr1xyXG4gIH1cclxufVxyXG5cclxuLyoqIOWIm+W7uumAmueUqOWFqOWxgOS4remXtOS7tiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2xvYmFsVW5pdmVyc2FsTWlkZGxld2FyZShvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+KSB7XHJcbiAgcmV0dXJuIGFzeW5jIChyZXE6IGFueSwgcmVzOiBhbnksIG5leHQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFvcHRpb25zLmlzV2FzbVN0KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JywgJ3NhbWUtb3JpZ2luJyk7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLCAncmVxdWlyZS1jb3JwJyk7XHJcbiAgICB9XHJcbiAgICBuZXh0KCk7XHJcbiAgfVxyXG59XHJcbi8vID09PSDovoXliqnlh73mlbDvvJrlrZfnrKbkuLLovawgUGFzY2FsQ2FzZSA9PT1cclxuZXhwb3J0IGZ1bmN0aW9uIHBhc2NhbENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBzdHJcclxuICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rKC4pL2csIChtLCBjaHIpID0+IGNoci50b1VwcGVyQ2FzZSgpKVxyXG4gICAgLnJlcGxhY2UoL14uLywgYyA9PiBjLnRvVXBwZXJDYXNlKCkpO1xyXG59XHJcblxyXG4vLyA9PT0g5YW25LuW5Y6f5pyJ5a+85Ye65L+d5oyB5LiN5Y+YID09PVxyXG5leHBvcnQgY29uc3QgZXh0ZXJuYWxzID0ge1xyXG4gICd2dWUnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMuVnVlJyxcclxuICAnYXhpb3MnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMuYXhpb3MnLFxyXG4gICd2dWV0aWZ5JzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLnZ1ZXRpZnknLFxyXG4gICd2dWV0aWZ5L2NvbXBvbmVudHMnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMudnVldGlmeUNvbXBvbmVudHMnLFxyXG4gICdtYXBib3gtZ2wnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMubWFwYm94Z2wnLFxyXG4gICdwaW5pYSc6ICdNWENBREFQUF9FWFRFUk5BTExJQlJBUklFUy5waW5pYSdcclxufTtcclxuLy8g5aeL57uI5L+d55WZ55qE5qih5Z2XXHJcbmNvbnN0IEFMV0FZU19LRUVQID0gbmV3IFNldChbJ214Y2FkJywgJ214ZHJhdyddKTtcclxuXHJcbi8qKlxyXG4gKiDmuIXnkIblubblhpnlhaXmraPnoa7nmoTnsbvlnovlvJXnlKhcclxuICovXHJcbmZ1bmN0aW9uIHN5bmNUeXBlUmVmZXJlbmNlcyhsaWJyYXJ5TmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgY29uc3Qgcm9vdERpciA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgY29uc3QgZGlzdERpciA9IHJlc29sdmUocm9vdERpciwgJ25vZGVfbW9kdWxlcycsICdteGNhZC1hcHAnLCAnZGlzdCcpO1xyXG4gIGNvbnN0IGluZGV4UGF0aCA9IHJlc29sdmUoZGlzdERpciwgJ2luZGV4LmQudHMnKTtcclxuXHJcbiAgdHJ5IHtcclxuICAgIC8vIOKchSAxLiDmo4Dmn6UgZGlzdCDnm67lvZVcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXN0RGlyKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oYOKaoO+4jyBteGNhZC1hcHAvZGlzdCDnm67lvZXkuI3lrZjlnKjvvIzot7Pov4fnsbvlnovlkIzmraU6ICR7ZGlzdERpcn1gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSAyLiDnoa7kv50gaW5kZXguZC50cyDlrZjlnKhcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhpbmRleFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW5kZXhQYXRoLCAnJywgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDinIUg5bey5Yib5bu656m657G75Z6L5paH5Lu2OiAke2luZGV4UGF0aH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhpbmRleFBhdGgsICd1dGYtOCcpO1xyXG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC9cXHI/XFxuLyk7XHJcblxyXG4gICAgLy8g4pyFIDMuIOaPkOWPluaJgOacieeOsOacieeahCAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi94eHguZC50c1wiIC8+IOihjFxyXG4gICAgY29uc3QgcmVmZXJlbmNlUmVnZXggPSAvXFwvXFwvXFwvXFxzKjxyZWZlcmVuY2VcXHMrcGF0aD1cIlxcLlxcLyhbXlwiXStcXC5kXFwudHMpXCJcXHMqXFwvPi87XHJcbiAgICBjb25zdCBleGlzdGluZ1JlZnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBub25SZWZMaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUudHJpbSgpLm1hdGNoKHJlZmVyZW5jZVJlZ2V4KTtcclxuICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBtYXRjaFsxXTsgLy8g5aaCIFwidnVlLmQudHNcIlxyXG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC5kXFwudHMkLywgJycpOyAvLyDmj5Dlj5bmqKHlnZflkI1cclxuICAgICAgICBleGlzdGluZ1JlZnMucHVzaChtb2R1bGVOYW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub25SZWZMaW5lcy5wdXNoKGxpbmUpOyAvLyDkv53nlZnpnZ4gcmVmZXJlbmNlIOihjFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDinIUgNC4g6K6h566X5pyA57uI5bqU6K+l5L+d55WZ55qE5qih5Z2XXHJcbiAgICBjb25zdCB2YWxpZE1vZHVsZXMgPSBuZXcgU2V0PHN0cmluZz4oQUxXQVlTX0tFRVApO1xyXG5cclxuICAgIGxpYnJhcnlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAvLyDlv4XpobvlnKggZXh0ZXJuYWxzIOS4reWumuS5ie+8jOS4lOexu+Wei+aWh+S7tuWtmOWcqFxyXG4gICAgICBpZiAobmFtZSBpbiBleHRlcm5hbHMpIHtcclxuICAgICAgICBjb25zdCBkdHNQYXRoID0gcmVzb2x2ZShkaXN0RGlyLCBgJHtuYW1lfS5kLnRzYCk7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZHRzUGF0aCkpIHtcclxuICAgICAgICAgIHZhbGlkTW9kdWxlcy5hZGQobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDinIUgNS4g55Sf5oiQ5pyA57uI55qEIHJlZmVyZW5jZSDooYzvvIjkv53mjIEgbXhjYWQg5ZKMIG14ZHJhdyDlnKjmnIDliY3vvIlcclxuICAgIGNvbnN0IGZpbmFsUmVmcyA9IFsnbXhjYWQnLCAnbXhkcmF3J11cclxuICAgICAgLmZpbHRlcihuYW1lID0+IHZhbGlkTW9kdWxlcy5oYXMobmFtZSkpXHJcbiAgICAgIC5tYXAobmFtZSA9PiBgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vJHtuYW1lfS5kLnRzXCIgLz5gKTtcclxuXHJcbiAgICAvLyDmt7vliqDlhbbku5YgdmFsaWRNb2R1bGVzIOS4reeahO+8iOWOu+mHje+8iVxyXG4gICAgQXJyYXkuZnJvbSh2YWxpZE1vZHVsZXMpXHJcbiAgICAgIC5maWx0ZXIobmFtZSA9PiAhQUxXQVlTX0tFRVAuaGFzKG5hbWUpKVxyXG4gICAgICAuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICBmaW5hbFJlZnMucHVzaChgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vJHtuYW1lfS5kLnRzXCIgLz5gKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDYuIOWQiOW5tu+8muacgOe7iOW8leeUqCArIOWOn+Wni+mdnuW8leeUqOihjFxyXG4gICAgY29uc3QgcmVzdWx0TGluZXMgPSBbLi4uZmluYWxSZWZzLCAnJywgLi4ubm9uUmVmTGluZXMuZmlsdGVyKGwgPT4gbC50cmltKCkubGVuZ3RoID4gMCldO1xyXG5cclxuICAgIC8vIOenu+mZpOi/nue7reepuuihjO+8jOS/neeVmeS4gOS4quWIhumalFxyXG4gICAgY29uc3QgY2xlYW5lZExpbmVzID0gcmVzdWx0TGluZXMuZmlsdGVyKChsaW5lLCBpLCBhcnIpID0+XHJcbiAgICAgICEobGluZS50cmltKCkgPT09ICcnICYmIGkgPiAwICYmIGFycltpIC0gMV0udHJpbSgpID09PSAnJylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbmV3Q29udGVudCA9IGNsZWFuZWRMaW5lcy5qb2luKCdcXG4nKS50cmltKCkgKyAnXFxuJztcclxuXHJcbiAgICAvLyDinIUgNy4g5YaZ5Zue5paH5Lu277yI5LuF5b2T5YaF5a655Y+Y5YyW5pe277yJXHJcbiAgICBpZiAoY29udGVudC50cmltKCkgIT09IG5ld0NvbnRlbnQudHJpbSgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW5kZXhQYXRoLCBuZXdDb250ZW50LCAndXRmLTgnKTtcclxuICAgICAgY29uc29sZS5sb2coYOKchSDlt7LlkIzmraUgbXhjYWQtYXBwL2Rpc3QvaW5kZXguZC50cyDnsbvlnovlvJXnlKhgKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoYOKdjCDlkIzmraXnsbvlnovlvJXnlKjlpLHotKU6YCwgZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDpooTlrprkuYnlupPlkI3liLDlhajlsYDlj5jph4/nmoTmmKDlsIRcclxuICovXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJQlJBUllfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gIG14Y2FkOiAnTXhDQUQnLFxyXG4gIG14ZHJhdzogJ014J1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbHMoXHJcbiAgbGlicmFyeU5hbWVzOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+WydsaWJyYXJ5TmFtZXMnXVxyXG4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICBzeW5jVHlwZVJlZmVyZW5jZXMobGlicmFyeU5hbWVzKTtcclxuICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IC4uLkRFRkFVTFRfTElCUkFSWV9NQVAgfVxyXG4gIGlmICghQXJyYXkuaXNBcnJheShsaWJyYXJ5TmFtZXMpKSByZXR1cm4gcmVzdWx0O1xyXG4gIGxpYnJhcnlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgaWYgKG5hbWUgaW4gZXh0ZXJuYWxzKSB7XHJcbiAgICAgIHJlc3VsdFtuYW1lXSA9IGV4dGVybmFsc1tuYW1lIGFzIGtleW9mIHR5cGVvZiBleHRlcm5hbHNdO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VBc3NldHNQYXRoKCk6IHN0cmluZyB7XHJcbiAgbGV0IGN1cnJlbnRGaWxlOiBzdHJpbmc7XHJcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgY3VycmVudEZpbGUgPSBfX2ZpbGVuYW1lO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjdXJyZW50RmlsZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcclxuICB9XHJcbiAgY29uc3QgcGFja2FnZVJvb3QgPSByZXNvbHZlKGN1cnJlbnRGaWxlLCAnLi4nLCAnLi4nLCAnLi4nKTtcclxuICBjb25zdCBhc3NldHNQYXRoID0gcmVzb2x2ZShwYWNrYWdlUm9vdCwgbmFtZSwgJ2Rpc3QnLCAnbXhjYWRBcHBBc3NldHMnKTtcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYXNzZXRzUGF0aCkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgbXgtY2FkLWFwcCBhc3NldHMgbm90IGZvdW5kIGF0OiAke2Fzc2V0c1BhdGh9YCk7XHJcbiAgfVxyXG4gIHJldHVybiBhc3NldHNQYXRoO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTb3VyY2VBc3NldHNFeGlzdCgpOiBib29sZWFuIHtcclxuICBjb25zdCBwYXRoID0gZ2V0U291cmNlQXNzZXRzUGF0aCgpO1xyXG4gIHJldHVybiBmcy5leGlzdHNTeW5jKHBhdGgpICYmIGZzLmxzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSdW50aW1lQ29uZmlnU2NyaXB0KHB1YmxpY1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGBcclxuICAgIDxzY3JpcHQ+XHJcbiAgICAgIHdpbmRvdy5fX01YX0NBRF9BUFBfQVNTRVRfUEFUSF9fID0gJyR7cHVibGljUGF0aH0nO1xyXG4gICAgPC9zY3JpcHQ+XHJcbiAgYC50cmltKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGlyKFxyXG4gIHNyYzogc3RyaW5nLFxyXG4gIGRlc3Q6IHN0cmluZyxcclxuICBwdWJsaWNEaXI6IHN0cmluZyxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWRcclxuKTogdm9pZCB7XHJcbiAgLy8g4pyFIOaWsOWinu+8muajgOafpSBwdWJsaWNEaXIg5piv5ZCm5a2Y5ZyoXHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHB1YmxpY0RpcikpIHtcclxuICAgIC8vIOS4jeWtmOWcqOWImei3s+i/h+aJq+aPj++8jOebtOaOpeWkjeWItlxyXG4gICAgZG9Db3B5KHNyYywgZGVzdCwgcHVibGljRGlyLCBuZXcgU2V0KCksIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgLy8g56ys5LiA5q2l77ya5omr5o+PIHB1YmxpY0RpciDkuIvmiYDmnInmlofku7bvvIjnm7jlr7nkuo4gcHVibGljRGlyIOeahOi3r+W+hO+8iVxyXG4gIHNjYW5QdWJsaWNEaXIocHVibGljRGlyLCAoZXJyLCBwdWJsaWNGaWxlcykgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgLy8g56ys5LqM5q2l77ya5byA5aeL5aSN5Yi277yM5Lyg5YWlIHB1YmxpY0ZpbGVzIOe8k+WtmFxyXG4gICAgZG9Db3B5KHNyYywgZGVzdCwgcHVibGljRGlyLCBwdWJsaWNGaWxlcyEsIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICB9KTtcclxufVxyXG5cclxuLy8g5a6e6ZmF5omn6KGM5aSN5Yi255qE5Ye95pWwXHJcbmZ1bmN0aW9uIGRvQ29weShcclxuICBzcmM6IHN0cmluZyxcclxuICBkZXN0OiBzdHJpbmcsXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgcHVibGljRmlsZXM6IFNldDxzdHJpbmc+LFxyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sIC8vIOazqOaEj++8mui/memHjOmcgOimgeehruS/nSBlbmFibGVDb21wcmVzc2VkQXNzZXRzIOaYr+W/hemAieeahFxyXG4gIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWRcclxuKSB7XHJcbiAgZnMubWtkaXIoZGVzdCwgeyByZWN1cnNpdmU6IHRydWUgfSwgKGVycikgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgZnMucmVhZGRpcihzcmMsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9LCAoZXJyLCBkaXJlbnRzKSA9PiB7XHJcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgICAgbGV0IHBlbmRpbmcgPSBkaXJlbnRzLmxlbmd0aDtcclxuICAgICAgaWYgKHBlbmRpbmcgPT09IDApIHJldHVybiBjYWxsYmFjaygpO1xyXG5cclxuICAgICAgLy8g5o+Q5YmN5a6a5LmJ5Y6L57yp5paH5Lu25omp5bGV5ZCNXHJcbiAgICAgIGNvbnN0IGNvbXByZXNzZWRFeHRzID0gWycuZ3onXTsgLy8g5Y+v5oyJ6ZyA5omp5bGVXHJcblxyXG4gICAgICBkaXJlbnRzLmZvckVhY2goKGRpcmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNyY1BhdGggPSByZXNvbHZlKHNyYywgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcmVzb2x2ZShkZXN0LCBkaXJlbnQubmFtZSk7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoc3JjLCBzcmNQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJykgYXMgQ29uZmlnRmlsZW5hbWU7XHJcblxyXG4gICAgICAgIC8vIOaWsOWinu+8muWmguaenOemgeeUqOWOi+e8qei1hOa6kOS4lOaYr+WOi+e8qeaWh+S7tu+8jOWImei3s+i/h1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFvcHRpb25zLmVuYWJsZUNvbXByZXNzZWRBc3NldHMgJiZcclxuICAgICAgICAgIGNvbXByZXNzZWRFeHRzLnNvbWUoZXh0ID0+IHJlbGF0aXZlUGF0aC5lbmRzV2l0aChleHQpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgZG9Db3B5KHNyY1BhdGgsIGRlc3RQYXRoLCBwdWJsaWNEaXIsIHB1YmxpY0ZpbGVzLCBvcHRpb25zLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVudC5pc0ZpbGUoKSkge1xyXG4gICAgICAgICAgaWYgKHB1YmxpY0ZpbGVzLmhhcyhyZWxhdGl2ZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0ZpbGVQYXRoID0gcmVzb2x2ZShwdWJsaWNEaXIsIHJlbGF0aXZlUGF0aCk7XHJcbiAgICAgICAgICAgIGZzLmNvcHlGaWxlKHB1YmxpY0ZpbGVQYXRoLCBkZXN0UGF0aCwgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChDT05GSUdfRklMRU5BTUVTLmluY2x1ZGVzKHJlbGF0aXZlUGF0aCkpIHtcclxuICAgICAgICAgICAgaGFuZGxlQ29uZmlnRmlsZShzcmNQYXRoLCBkZXN0UGF0aCwgcmVsYXRpdmVQYXRoLCBvcHRpb25zLCAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZShzcmNQYXRoLCBkZXN0UGF0aCwgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9KTtcclxufVxyXG4vLyDmiavmj48gcHVibGljRGlyIOS4i+aJgOacieaWh+S7tu+8jOi/lOWbnuebuOWvueS6jiBwdWJsaWNEaXIg55qE6Lev5b6E6ZuG5ZCIXHJcbmZ1bmN0aW9uIHNjYW5QdWJsaWNEaXIoXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgY2FsbGJhY2s6IChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB8IG51bGwsIGZpbGVzPzogU2V0PHN0cmluZz4pID0+IHZvaWRcclxuKSB7XHJcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gIGZ1bmN0aW9uIHdhbGsoZGlyOiBzdHJpbmcpIHtcclxuICAgIGZzLnJlYWRkaXIoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyciwgZGlyZW50cykgPT4ge1xyXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICAgIGxldCBwZW5kaW5nID0gZGlyZW50cy5sZW5ndGg7XHJcbiAgICAgIGlmIChwZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpcmVudHMuZm9yRWFjaCgoZGlyZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlKGRpciwgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHJlbFBhdGggPSByZWxhdGl2ZShwdWJsaWNEaXIsIGZ1bGxQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcblxyXG4gICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgd2FsayhmdWxsUGF0aCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIHJlc3VsdC5hZGQocmVsUGF0aCk7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB3YWxrKHB1YmxpY0Rpcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50VHlwZShmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBleHQgPSBmaWxlUGF0aC5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gIGNvbnN0IHR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgJ2Nzcyc6ICd0ZXh0L2NzcycsXHJcbiAgICAnanMnOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcsXHJcbiAgICAnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICdwbmcnOiAnaW1hZ2UvcG5nJyxcclxuICAgICdqcGcnOiAnaW1hZ2UvanBlZycsXHJcbiAgICAnanBlZyc6ICdpbWFnZS9qcGVnJyxcclxuICAgICdnaWYnOiAnaW1hZ2UvZ2lmJyxcclxuICAgICdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXHJcbiAgICAnd29mZic6ICdmb250L3dvZmYnLFxyXG4gICAgJ3dvZmYyJzogJ2ZvbnQvd29mZjInLFxyXG4gICAgJ3R0Zic6ICdmb250L3R0ZicsXHJcbiAgICAnZW90JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcclxuICAgICdpY28nOiAnaW1hZ2UveC1pY29uJyxcclxuICAgICd3YXNtJzogJ2FwcGxpY2F0aW9uL3dhc20nLFxyXG4gICAgJ3ppcCc6ICdhcHBsaWNhdGlvbi96aXAnLFxyXG4gICAgJ3Jhcic6ICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJyxcclxuICAgICc3eic6ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLFxyXG4gICAgJ3Rhcic6ICdhcHBsaWNhdGlvbi94LXRhcicsXHJcbiAgICAnZ3onOiAnYXBwbGljYXRpb24vZ3ppcCcsXHJcbiAgICAnYnoyJzogJ2FwcGxpY2F0aW9uL3gtYnppcDInLFxyXG4gICAgJ3h6JzogJ2FwcGxpY2F0aW9uL3gteHonXHJcbiAgfTtcclxuICByZXR1cm4gdHlwZXNbZXh0XSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiDmoIflh4bljJbot6/lvoTvvIznoa7kv53ku6UgJy8nIOe7k+WwvlxyXG4gKi9cclxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiByZXNvbHZlKHApLnJlcGxhY2UoL1xcXFwvZywgJy8nKSArICcvJztcclxufVxyXG5cclxuLyoqXHJcbiAqIOWIm+W7uumAmueUqOS4remXtOS7tu+8muS8mOWFiOS9v+eUqCBwdWJsaWMg6LWE5rqQ77yM5Zue6YCA5YiwIHNvdXJjZUFzc2V0c1BhdGhcclxuICog5a+55qCHIGNyZWF0ZVN0YXRpY01pZGRsZXdhcmUg6aOO5qC8XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXhDYWRBc3NldHNNaWRkbGV3YXJlKFxyXG4gIHJvb3Q6IHN0cmluZyxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIGxvZ2dlcj86IGFueVxyXG4pIHtcclxuICBjb25zdCB7IG91dHB1dERpciwgaXNXYXNtU3QgPSBmYWxzZSB9ID0gb3B0aW9ucztcclxuICAvLyDinIUgMS4g6KeE6IyD5YyW6Lev5b6EXHJcbiAgY29uc3QgYmFzZVBhdGggPSBgLyR7b3V0cHV0RGlyLnJlcGxhY2UoL15cXC8rLywgJycpfWA7IC8vICcvbXhjYWRBcHBBc3NldHMnXHJcbiAgY29uc3Qgc291cmNlQXNzZXRzUm9vdCA9IG5vcm1hbGl6ZVBhdGgocm9vdCk7XHJcblxyXG4gIHJldHVybiBhc3luYyAocmVxOiBhbnksIHJlczogYW55LCBuZXh0OiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAvLyDinIUgMi4g5Z+65pys5qCh6aqMXHJcbiAgICBpZiAoIXJlcS51cmwgfHwgdHlwZW9mIHJlcS51cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIDMuIOiuvue9ruWuieWFqOWktO+8iOmdniBpc1dhc21TdCDmqKHlvI/vvIlcclxuICAgIGlmICghaXNXYXNtU3QpIHtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3knLCAnc2FtZS1vcmlnaW4nKTtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsICdyZXF1aXJlLWNvcnAnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgNC4g6Kej5p6QIFVSTCDot6/lvoTvvIjljrsgcXVlcnnvvIzop6PnoIHvvIlcclxuICAgIGNvbnN0IHVybFBhdGggPSByZXEudXJsLnNwbGl0KCc/JylbMF07XHJcbiAgICBsZXQgZmlsZVBhdGghOiBzdHJpbmc7XHJcbiAgICBsZXQgZmlsZU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGVjb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsUGF0aCk7XHJcbiAgICAgIC8vIOinhOiMg+WMlui3r+W+hO+8jOmYsuatoiAuLi8uLi8g6LaK5p2DXHJcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZGVjb2RlZFBhdGgucmVwbGFjZSgvXlsvXFxcXF0rLywgJycpO1xyXG5cclxuICAgICAgLy8g4pyFIDUuIOS8mOWFiO+8muajgOafpSBwdWJsaWMvJHtvdXRwdXREaXJ9IOebruW9lVxyXG4gICAgICBjb25zdCBwdWJsaWNGaWxlUGF0aCA9IGpvaW4ocHVibGljRGlyLCBub3JtYWxpemVkUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChwdWJsaWNGaWxlUGF0aCk7XHJcbiAgICAgICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIGZpbGVQYXRoID0gcHVibGljRmlsZVBhdGg7XHJcbiAgICAgICAgICBmaWxlTmFtZSA9IGJhc2VuYW1lKG5vcm1hbGl6ZWRQYXRoKTtcclxuICAgICAgICAgIHJldHVybiBzZXJ2ZUZpbGUoZmlsZVBhdGgsIGZpbGVOYW1lLCByZXMsIGxvZ2dlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAvLyBwdWJsaWMg5Lit5rKh5pyJ77yM57un57ut5p+l5om+IHNvdXJjZUFzc2V0c1BhdGhcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g4pyFIDYuIGZhbGxiYWNr77ya5p+l5om+IHNvdXJjZUFzc2V0c1BhdGhcclxuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVNhZmVQYXRoKGRlY29kZWRQYXRoLCBzb3VyY2VBc3NldHNSb290LCBiYXNlUGF0aCk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHJlc3VsdC5zdGF0dXNDb2RlIHx8IDQwMDtcclxuICAgICAgICByZXR1cm4gcmVzLmVuZChyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZXN1bHQuZmlsZVBhdGgpIGZpbGVQYXRoID0gcmVzdWx0LmZpbGVQYXRoO1xyXG4gICAgICBpZiAocmVzdWx0LmZpbGVOYW1lKSBmaWxlTmFtZSA9IHJlc3VsdC5maWxlTmFtZTtcclxuXHJcbiAgICAgIC8vIOKchSA3LiDlsJ3or5XnlLEgaGFuZGxlQ29uZmlnUmVxdWVzdCDlpITnkIbvvIjlpoLms6jlhaXphY3nva7vvIlcclxuICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZUNvbmZpZ1JlcXVlc3QoXHJcbiAgICAgICAgZmlsZVBhdGgsXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICByZXMsXHJcbiAgICAgICAgbG9nZ2VyXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChoYW5kbGVkKSByZXR1cm47XHJcblxyXG4gICAgICAvLyDinIUgOC4g56Gu5L+d5piv5paH5Lu2XHJcbiAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZpbGVQYXRoKTtcclxuICAgICAgaWYgKCFzdGF0LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzZXJ2ZUZpbGUoZmlsZVBhdGgsIGZpbGVOYW1lLCByZXMsIGxvZ2dlcik7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgbG9nZ2VyPy53YXJuPy4oYFtNeENhZEFzc2V0c10gU2VydmUgZmFpbGVkIGZvciAke3JlcS51cmx9OiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XHJcbiAgICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcclxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XHJcbiAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWwgeijheaWh+S7tuWTjeW6lOmAu+i+ke+8iOa1geW8j+S8oOi+k++8iVxyXG4gKi9cclxuZnVuY3Rpb24gc2VydmVGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIHJlczogYW55LCBsb2dnZXI/OiBhbnkpIHtcclxuICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcclxuXHJcbiAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbikgPT4ge1xyXG4gICAgaWYgKHJlcy5oZWFkZXJzU2VudCkgcmV0dXJuO1xyXG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJyB8fCBlcnIuY29kZSA9PT0gJ0VBQ0NFUycpIHtcclxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXNDb2RlID09PSAyMDAgPyByZXMuZW5kKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsb2dnZXI/LmVycm9yPy4oYFtNeENhZEFzc2V0c10gUmVhZCBlcnJvcjogJHtlcnIubWVzc2FnZX1gLCBlcnIpO1xyXG4gICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XHJcbiAgICByZXMuZW5kKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcclxuICB9KTtcclxuXHJcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgZ2V0Q29udGVudFR5cGUoZmlsZU5hbWUpKTtcclxuICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcclxuXHJcbiAgc3RyZWFtLnBpcGUocmVzKTtcclxufSJdLCJuYW1lcyI6WyJqb2luIiwicmVzb2x2ZSIsImJhc2VuYW1lIiwiZXJyIiwibmFtZSIsImZpbGVVUkxUb1BhdGgiLCJyZWxhdGl2ZSIsInN0YXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
1526
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtQ21RUFh1QmcuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BhY2tUb29sUGx1Z2luU3JjL3NoYXJlZC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLy8gcGx1Z2lucy9zaGFyZWQvaW5kZXgudHNcclxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcywgeyBOb1BhcmFtQ2FsbGJhY2sgfSBmcm9tICdmcyc7XHJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xyXG5pbXBvcnQgeyBuYW1lIH0gZnJvbSBcIi4uLy4uL2xpYi9wYWNrYWdlLmpzb25cIlxyXG5cclxuaW1wb3J0IHsgTXhRdWlja0NvbW1hbmQgfSBmcm9tIFwiLi90eXBlcy9teFF1aWNrQ29tbWFuZC5kXCJcclxuaW1wb3J0IHsgTXhTZXJ2ZXJDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFNlcnZlckNvbmZpZy5kXCJcclxuaW1wb3J0IHsgTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZy5kXCJcclxuaW1wb3J0IHsgTXhVaUNvbmZpZyB9IGZyb20gXCIuL3R5cGVzL214VWlDb25maWcuZFwiXHJcbmltcG9ydCB7IE14Y2FkVWlDb25maWcgfSBmcm9tIFwiLi90eXBlcy9teGNhZFVpQ29uZmlnLmRcIlxyXG5pbXBvcnQgeyBWdWV0aWZ5VGhlbWVDb25maWcgfSBmcm9tIFwiLi90eXBlcy92dWV0aWZ5VGhlbWVDb25maWcuZFwiXHJcbmltcG9ydCBhcGlNYXAgZnJvbSAnLi4vYXBpLW1hcC5qc29uJ1xyXG5leHBvcnQgY29uc3QgZ2V0QXBpTWFwID0gKCkgPT4gYXBpTWFwXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXhQbHVnaW5Db25maWcge1xyXG4gIHBsdWdpbnM6IChzdHJpbmcgfCB7XHJcbiAgICBuYW1lPzogc3RyaW5nLFxyXG4gICAgaXNBZnRlckxvYWQ/OiBib29sZWFuLFxyXG4gICAgZGlyPzogYm9vbGVhbixcclxuICAgIHZlcnNpb24/OiBzdHJpbmdcclxuICB9KVtdXHJcbn1cclxuLy8gPT09IOaWsOWinu+8mumFjee9ruaWh+S7tuWQjeW4uOmHjyA9PT1cclxuZXhwb3J0IGNvbnN0IENPTkZJR19GSUxFTkFNRVMgPSBbXHJcbiAgLy8gJ214Y2FkVWlDb25maWcuanNvbicsXHJcbiAgJ214UXVpY2tDb21tYW5kLmpzb24nLFxyXG4gICdteFNlcnZlckNvbmZpZy5qc29uJyxcclxuICAnbXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWcuanNvbicsXHJcbiAgJ214VWlDb25maWcuanNvbicsXHJcbiAgJ3Z1ZXRpZnlUaGVtZUNvbmZpZy5qc29uJyxcclxuICAvLyAncGx1Z2lucy9jb25maWcuanNvbidcclxuXSBhcyBjb25zdDtcclxuLyoqXHJcbiAqIOmFjee9ruaWh+S7tuWkhOeQhuWZqFxyXG4gKiDlj6/pgInvvJrlr7nnibnlrprphY3nva7mlofku7bov5vooYzov5DooYzml7bkv67mlLlcclxuICog5Ye95pWw5o6l5pS25Y6f5aeLIEpTT04g5pWw5o2u77yM6L+U5Zue5L+u5pS55ZCO55qEIEpTT04g5pWw5o2u77yI5Y+v5byC5q2l77yJXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybUZ1bmN0aW9ucyB7XHJcbiAgLy8gdHJhbnNmb3JtTXhjYWRVaUNvbmZpZyhkYXRhOiBNeGNhZFVpQ29uZmlnKTogUHJvbWlzZTxNeGNhZFVpQ29uZmlnPiB8IE14Y2FkVWlDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhRdWlja0NvbW1hbmQoZGF0YTogTXhRdWlja0NvbW1hbmQpOiBQcm9taXNlPE14UXVpY2tDb21tYW5kPiB8IE14UXVpY2tDb21tYW5kO1xyXG4gIHRyYW5zZm9ybU14U2VydmVyQ29uZmlnKGRhdGE6IE14U2VydmVyQ29uZmlnKTogUHJvbWlzZTxNeFNlcnZlckNvbmZpZz4gfCBNeFNlcnZlckNvbmZpZztcclxuICB0cmFuc2Zvcm1NeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyhkYXRhOiBNeFNrZXRjaGVzQW5kTm90ZXNVaUNvbmZpZyk6IFByb21pc2U8TXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWc+IHwgTXhTa2V0Y2hlc0FuZE5vdGVzVWlDb25maWc7XHJcbiAgdHJhbnNmb3JtTXhVaUNvbmZpZyhkYXRhOiBNeFVpQ29uZmlnKTogUHJvbWlzZTxNeFVpQ29uZmlnPiB8IE14VWlDb25maWc7XHJcbiAgdHJhbnNmb3JtVnVldGlmeVRoZW1lQ29uZmlnKGRhdGE6IFZ1ZXRpZnlUaGVtZUNvbmZpZyk6IFByb21pc2U8VnVldGlmeVRoZW1lQ29uZmlnPiB8IFZ1ZXRpZnlUaGVtZUNvbmZpZztcclxuICAvLyB0cmFuc2Zvcm1NeFBsdWdpbnNDb25maWcoZGF0YTogTXhQbHVnaW5Db25maWdbXSk6IFByb21pc2U8TXhQbHVnaW5Db25maWdbXT4gfCBNeFBsdWdpbkNvbmZpZ1tdO1xyXG59XHJcbi8vIOaJqeWxleaPkuS7tumAiemhueaOpeWPoyA9PT1cclxuZXhwb3J0IGludGVyZmFjZSBNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zZm9ybUZ1bmN0aW9ucz4ge1xyXG4gIC8qKlxyXG4gICAqIOaehOW7uuWQju+8jG14Y2FkQXBwQXNzZXRzIOi1hOa6kOWtmOaUvueahOWtkOebruW9leWQjeOAglxyXG4gICAqIEBkZWZhdWx0ICdteGNhZEFwcEFzc2V0cydcclxuICAgKi9cclxuICBvdXRwdXREaXI/OiBzdHJpbmc7XHJcbiAgLyoqIOesrOS4ieaWueS+nei1liovXHJcbiAgbGlicmFyeU5hbWVzPzogKGtleW9mIHR5cGVvZiBleHRlcm5hbHMpW107XHJcbiAgLyoqIOaYr+WQpuWNlee6v+eoi+WKoOi9vXdhc20gKOm7mOiupOS9v+eUqOWkmue6v+eoi+WPiuWKoOi9vSkgKi9cclxuICBpc1dhc21TdD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgKiDmmK/lkKblkK/nlKjpooTljovnvKnotYTmupDvvIjlpoIgLmd6IOaWh+S7tu+8ieeahOaLt+i0nSDpu5jorqTmmK90cnVlXHJcbiAgKiDorr7nva7kuLogZmFsc2Ug5pe277yMLmd6IOWOi+e8qeaWh+S7tuWwhuS4jeS8muiiq+WkjeWItuWIsOi+k+WHuuebruW9lVxyXG4gICogQGRlZmF1bHQgdHJ1ZVxyXG4gICovXHJcbiAgZW5hYmxlQ29tcHJlc3NlZEFzc2V0cz86IGJvb2xlYW47XHJcbn1cclxuXHJcblxyXG4vLyA9PT0g5aKe5by677yacmVzb2x2ZU9wdGlvbnMg6buY6K6k5YC8ID09PVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbnMob3B0aW9uczogTXhDYWRBc3NldHNQbHVnaW5PcHRpb25zID0ge30pOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+IHtcclxuICBjb25zdCByZXNvbHZlZDogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPiA9IHtcclxuICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIgfHwgJ214Y2FkQXBwQXNzZXRzJyxcclxuICAgIGxpYnJhcnlOYW1lczogb3B0aW9ucy5saWJyYXJ5TmFtZXMgfHwgW10sXHJcbiAgICBpc1dhc21TdDogb3B0aW9ucy5pc1dhc21TdCB8fCBmYWxzZSxcclxuICAgIGVuYWJsZUNvbXByZXNzZWRBc3NldHM6IG9wdGlvbnMuZW5hYmxlQ29tcHJlc3NlZEFzc2V0cyB8fCB0cnVlLFxyXG4gICAgLy8gdHJhbnNmb3JtTXhjYWRVaUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeGNhZFVpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFF1aWNrQ29tbWFuZDogb3B0aW9ucy50cmFuc2Zvcm1NeFF1aWNrQ29tbWFuZCB8fCAoKGQpID0+IGQpLFxyXG4gICAgdHJhbnNmb3JtTXhTZXJ2ZXJDb25maWc6IG9wdGlvbnMudHJhbnNmb3JtTXhTZXJ2ZXJDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybU14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14U2tldGNoZXNBbmROb3Rlc1VpQ29uZmlnIHx8ICgoZCkgPT4gZCksXHJcbiAgICB0cmFuc2Zvcm1NeFVpQ29uZmlnOiBvcHRpb25zLnRyYW5zZm9ybU14VWlDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIHRyYW5zZm9ybVZ1ZXRpZnlUaGVtZUNvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1WdWV0aWZ5VGhlbWVDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICAgIC8vIHRyYW5zZm9ybU14UGx1Z2luc0NvbmZpZzogb3B0aW9ucy50cmFuc2Zvcm1NeFBsdWdpbnNDb25maWcgfHwgKChkKSA9PiBkKSxcclxuICB9O1xyXG4gIHJldHVybiByZXNvbHZlZDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUGF0aFJlc3VsdCB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBmaWxlUGF0aD86IHN0cmluZzsgICAgICAgICAvLyDlt7IgcmVzb2x2ZSDnmoTlronlhajmlofku7bot6/lvoRcclxuICB1cmxQYXRoPzogc3RyaW5nOyAgICAgICAgICAvLyDop6PnoIHlkI7nmoQgVVJMIOi3r+W+hO+8iOS4jeWQqyBxdWVyee+8iVxyXG4gIGZpbGVOYW1lPzogc3RyaW5nOyAgICAgICAgIC8vIOaWh+S7tuWQje+8iGJhc2VuYW1l77yJXHJcbiAgc3RhdHVzQ29kZT86IG51bWJlcjtcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIOWuieWFqOino+aekOW5tumqjOivgeivt+axgui3r+W+hFxyXG4gKiBAcGFyYW0gcmVxVXJsIOivt+axgueahCBVUkzvvIjlpoIgJy9hc3NldHMvbXhTZXJ2ZXJDb25maWcuanNvbj92PTEn77yJXHJcbiAqIEBwYXJhbSByb290IOacrOWcsOagueebruW9le+8iOWmgiAnRDovcHJvamVjdC9kaXN0L214Y2FkJ++8iVxyXG4gKiBAcGFyYW0gYmFzZVBhdGgg5Y+v6YCJ55qE5Z+656GA6Lev5b6E5YmN57yA77yI5aaCICcvbXhjYWQvJ++8jOeUqOS6jiBWaXRl77yJXHJcbiAqIEByZXR1cm5zIOino+aekOe7k+aenOaIlumUmeivr1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTYWZlUGF0aChcclxuICByZXFVcmw6IHN0cmluZyxcclxuICByb290OiBzdHJpbmcsXHJcbiAgYmFzZVBhdGg/OiBzdHJpbmdcclxuKTogUGFyc2VkUGF0aFJlc3VsdCB7XHJcbiAgLy8gMS4g5Z+65pys5qCh6aqMXHJcbiAgaWYgKCFyZXFVcmwgfHwgdHlwZW9mIHJlcVVybCAhPT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA0MDAsIG1lc3NhZ2U6ICdCYWQgUmVxdWVzdCcgfTtcclxuICB9XHJcblxyXG4gIC8vIDIuIOaPkOWPlui3r+W+hO+8iOWOuyBxdWVyeSDlkowgaGFzaO+8iVxyXG4gIGxldCB1cmxQYXRoID0gcmVxVXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXTtcclxuXHJcbiAgLy8gMy4g6Kej56CBIFVSTFxyXG4gIGxldCBkZWNvZGVkUGF0aDogc3RyaW5nO1xyXG4gIHRyeSB7XHJcbiAgICBkZWNvZGVkUGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmxQYXRoKTtcclxuICAgIC8vIOmYsuatoiBudWxsIOWtl+iKguaUu+WHu1xyXG4gICAgaWYgKGRlY29kZWRQYXRoLmluY2x1ZGVzKCdcXDAnKSkge1xyXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnSW52YWxpZCBVUkwnIH07XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgc3RhdHVzQ29kZTogNDAwLCBtZXNzYWdlOiAnSW52YWxpZCBVUkwgZW5jb2RpbmcnIH07XHJcbiAgfVxyXG5cclxuICAvLyA0LiDlpITnkIYgYmFzZVBhdGjvvIjlpoIgVml0ZSDnmoQgYmFzZe+8iVxyXG4gIGlmIChiYXNlUGF0aCAmJiBkZWNvZGVkUGF0aC5zdGFydHNXaXRoKGJhc2VQYXRoKSkge1xyXG4gICAgZGVjb2RlZFBhdGggPSBkZWNvZGVkUGF0aC5zbGljZShiYXNlUGF0aC5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gNS4g5riF55CG6Lev5b6E77ya5Y676Zmk5byA5aS05aSa5L2Z55qEIC9cclxuICAvLyDkvovlpoLvvJovL2Fzc2V0cy9maWxlLmpzb24gLT4gYXNzZXRzL2ZpbGUuanNvblxyXG4gIGNvbnN0IGNsZWFuZWRQYXRoID0gZGVjb2RlZFBhdGgucmVwbGFjZSgvXlxcLysvLCAnJyk7XHJcblxyXG4gIC8vIDYuIOaLvOaOpeaWh+S7tui3r+W+hFxyXG4gIGNvbnN0IGZpbGVQYXRoID0gam9pbihyb290LCBjbGVhbmVkUGF0aCB8fCAnLicpO1xyXG5cclxuICAvLyA3LiDlronlhajmo4Dmn6XvvJrpmLLmraLot6/lvoTnqb/otopcclxuICBsZXQgbm9ybWFsaXplZEZpbGU6IHN0cmluZztcclxuICBsZXQgbm9ybWFsaXplZFJvb3Q6IHN0cmluZztcclxuICB0cnkge1xyXG4gICAgbm9ybWFsaXplZEZpbGUgPSByZXNvbHZlKGZpbGVQYXRoKTtcclxuICAgIG5vcm1hbGl6ZWRSb290ID0gcmVzb2x2ZShyb290KTtcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA1MDAsIG1lc3NhZ2U6ICdQYXRoIHJlc29sdXRpb24gZmFpbGVkJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8g4pyFIOWFs+mUru+8muehruS/nSBub3JtYWxpemVkRmlsZSDlnKggbm9ybWFsaXplZFJvb3Qg55uu5b2V5LiLXHJcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVTdHIgPSBub3JtYWxpemVkRmlsZS5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcbiAgY29uc3Qgbm9ybWFsaXplZFJvb3RTdHIgPSBub3JtYWxpemVkUm9vdC5yZXBsYWNlKC9cXFxcL2csICcvJykgKyAnLyc7XHJcblxyXG4gIGlmICghbm9ybWFsaXplZEZpbGVTdHIuc3RhcnRzV2l0aChub3JtYWxpemVkUm9vdFN0cikpIHtcclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBzdGF0dXNDb2RlOiA0MDMsIG1lc3NhZ2U6ICdGb3JiaWRkZW46IFBhdGggdHJhdmVyc2FsIGRldGVjdGVkJyB9O1xyXG4gIH1cclxuXHJcbiAgLy8gOC4g5o+Q5Y+WIGZpbGVOYW1lXHJcbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gY2xlYW5lZFBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgY29uc3QgZmlsZU5hbWUgPSBwYXRoU2VnbWVudHMubGVuZ3RoID4gMCA/IGJhc2VuYW1lKHBhdGhTZWdtZW50c1twYXRoU2VnbWVudHMubGVuZ3RoIC0gMV0pIDogJyc7XHJcblxyXG4gIC8vIOKchSDmiJDlip9cclxuICByZXR1cm4ge1xyXG4gICAgc3VjY2VzczogdHJ1ZSxcclxuICAgIGZpbGVQYXRoOiBub3JtYWxpemVkRmlsZSxcclxuICAgIHVybFBhdGg6IGRlY29kZWRQYXRoLFxyXG4gICAgZmlsZU5hbWUsXHJcbiAgfTtcclxufVxyXG5cclxuXHJcbnR5cGUgQ29uZmlnRmlsZW5hbWUgPSAodHlwZW9mIENPTkZJR19GSUxFTkFNRVMpW251bWJlcl07XHJcbmZ1bmN0aW9uIGhhbmRsZUNvbmZpZ0ZpbGUoXHJcbiAgc3JjUGF0aDogc3RyaW5nLFxyXG4gIGRlc3RQYXRoOiBzdHJpbmcsXHJcbiAgZmlsZW5hbWU6IENvbmZpZ0ZpbGVuYW1lLFxyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sXHJcbiAgY2FsbGJhY2s6IE5vUGFyYW1DYWxsYmFja1xyXG4pIHtcclxuICBmcy5yZWFkRmlsZShzcmNQYXRoLCAndXRmLTgnLCBhc3luYyAoZXJyLCBjb250ZW50KSA9PiB7XHJcbiAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZGF0YSA9IGNvbnRlbnQudHJpbSgpID8gSlNPTi5wYXJzZShjb250ZW50KSA6IHt9O1xyXG5cclxuICAgICAgLy8g4pyFIOato+ehrueUn+aIkCB0cmFuc2Zvcm0g5Ye95pWw5ZCNXHJcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvaSwgJycpO1xyXG4gICAgICBjb25zdCB0cmFuc2Zvcm1LZXkgPSBgdHJhbnNmb3JtJHtwYXNjYWxDYXNlKGJhc2VOYW1lKX1gOyAvLyDkvovlpoI6IHRyYW5zZm9ybVBsdWdpbnNDb25maWcg5oiWIHRyYW5zZm9ybU14UGx1Z2luc0NvbmZpZ1xyXG5cclxuICAgICAgY29uc3QgdHJhbnNmb3JtRm4gPSAob3B0aW9ucyBhcyBhbnkpW3RyYW5zZm9ybUtleV07XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRyYW5zZm9ybUZuKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XHJcbiAgICAgIGZzLndyaXRlRmlsZShkZXN0UGF0aCwganNvbiwgJ3V0Zi04JywgY2FsbGJhY2spO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuLyoqXHJcbiAqIOWkhOeQhumFjee9ruaWh+S7tuivt+axgu+8muivu+WPliDihpIg6L2s5o2iIOKGkiDov5Tlm57lk43lupRcclxuICog55So5LqOIFZpdGUvV2VicGFjayBkZXYgc2VydmVyIOS4remXtOS7tlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNvbmZpZ1JlcXVlc3QoXHJcbiAgZmlsZVBhdGg6IHN0cmluZywgICAgICAgICAgIC8vIOW3sue7j+mqjOivgei/h+eahOWuieWFqOi3r+W+hFxyXG4gIGZpbGVOYW1lOiBzdHJpbmcsICAgICAgICAgICAvLyDmlofku7blkI3vvIzlpoIgJ214U2VydmVyQ29uZmlnLmpzb24nXHJcbiAgb3B0aW9uczogUmVxdWlyZWQ8TXhDYWRBc3NldHNQbHVnaW5PcHRpb25zPixcclxuICByZXM6IGFueSxcclxuICBsb2dnZXI/OiB7IGluZm8/OiAobXNnOiBzdHJpbmcpID0+IHZvaWQ7IGVycm9yPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkIH1cclxuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgLy8g5LuF5aSE55CG55m95ZCN5Y2V5YaF55qE5paH5Lu2XHJcbiAgaWYgKCEoQ09ORklHX0ZJTEVOQU1FUyBhcyB1bmtub3duIGFzIHN0cmluZykuaW5jbHVkZXMoZmlsZU5hbWUpKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcclxuICAgIGxldCBkYXRhID0gY29udGVudC50cmltKCkgPyBKU09OLnBhcnNlKGNvbnRlbnQpIDoge307XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtS2V5ID0gYHRyYW5zZm9ybSR7cGFzY2FsQ2FzZShmaWxlTmFtZS5yZXBsYWNlKC9cXC5qc29uJC9pLCAnJykpfWA7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm1GbiA9IChvcHRpb25zIGFzIGFueSlbdHJhbnNmb3JtS2V5XTtcclxuXHJcbiAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGRhdGEgPSBhd2FpdCB0cmFuc2Zvcm1GbihkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xyXG4gICAgcmVzLnNldEhlYWRlcignQ2FjaGUtQ29udHJvbCcsICduby1jYWNoZScpO1xyXG4gICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgbG9nZ2VyPy5lcnJvcj8uKGBbbXhjYWQtYXNzZXRzXSDinYwgRmFpbGVkIHRvIHNlcnZlICR7ZmlsZU5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xyXG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcclxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XHJcbiAgICAgIHJlcy5lbmQoJ0ludGVybmFsIFNlcnZlciBFcnJvcicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7IC8vIOW3suWkhOeQhumUmeivr1xyXG4gIH1cclxufVxyXG5cclxuLyoqIOWIm+W7uumAmueUqOWFqOWxgOS4remXtOS7tiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2xvYmFsVW5pdmVyc2FsTWlkZGxld2FyZShvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+KSB7XHJcbiAgcmV0dXJuIGFzeW5jIChyZXE6IGFueSwgcmVzOiBhbnksIG5leHQ6IGFueSkgPT4ge1xyXG4gICAgaWYgKCFvcHRpb25zLmlzV2FzbVN0KSB7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JywgJ3NhbWUtb3JpZ2luJyk7XHJcbiAgICAgIHJlcy5zZXRIZWFkZXIoJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLCAncmVxdWlyZS1jb3JwJyk7XHJcbiAgICB9XHJcbiAgICBuZXh0KCk7XHJcbiAgfVxyXG59XHJcbi8vID09PSDovoXliqnlh73mlbDvvJrlrZfnrKbkuLLovawgUGFzY2FsQ2FzZSA9PT1cclxuZXhwb3J0IGZ1bmN0aW9uIHBhc2NhbENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBzdHJcclxuICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rKC4pL2csIChtLCBjaHIpID0+IGNoci50b1VwcGVyQ2FzZSgpKVxyXG4gICAgLnJlcGxhY2UoL14uLywgYyA9PiBjLnRvVXBwZXJDYXNlKCkpO1xyXG59XHJcblxyXG4vLyA9PT0g5YW25LuW5Y6f5pyJ5a+85Ye65L+d5oyB5LiN5Y+YID09PVxyXG5leHBvcnQgY29uc3QgZXh0ZXJuYWxzID0ge1xyXG4gICd2dWUnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMuVnVlJyxcclxuICAnYXhpb3MnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMuYXhpb3MnLFxyXG4gICd2dWV0aWZ5JzogJ01YQ0FEQVBQX0VYVEVSTkFMTElCUkFSSUVTLnZ1ZXRpZnknLFxyXG4gICd2dWV0aWZ5L2NvbXBvbmVudHMnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMudnVldGlmeUNvbXBvbmVudHMnLFxyXG4gICdtYXBib3gtZ2wnOiAnTVhDQURBUFBfRVhURVJOQUxMSUJSQVJJRVMubWFwYm94Z2wnLFxyXG4gICdwaW5pYSc6ICdNWENBREFQUF9FWFRFUk5BTExJQlJBUklFUy5waW5pYSdcclxufTtcclxuLy8g5aeL57uI5L+d55WZ55qE5qih5Z2XXHJcbmNvbnN0IEFMV0FZU19LRUVQID0gbmV3IFNldChbJ214Y2FkJywgJ214ZHJhdyddKTtcclxuXHJcbi8qKlxyXG4gKiDmuIXnkIblubblhpnlhaXmraPnoa7nmoTnsbvlnovlvJXnlKhcclxuICovXHJcbmZ1bmN0aW9uIHN5bmNUeXBlUmVmZXJlbmNlcyhsaWJyYXJ5TmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgY29uc3Qgcm9vdERpciA9IHByb2Nlc3MuY3dkKCk7XHJcbiAgY29uc3QgZGlzdERpciA9IHJlc29sdmUocm9vdERpciwgJ25vZGVfbW9kdWxlcycsICdteGNhZC1hcHAnLCAnZGlzdCcpO1xyXG4gIGNvbnN0IGluZGV4UGF0aCA9IHJlc29sdmUoZGlzdERpciwgJ2luZGV4LmQudHMnKTtcclxuXHJcbiAgdHJ5IHtcclxuICAgIC8vIOKchSAxLiDmo4Dmn6UgZGlzdCDnm67lvZVcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXN0RGlyKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oYOKaoO+4jyBteGNhZC1hcHAvZGlzdCDnm67lvZXkuI3lrZjlnKjvvIzot7Pov4fnsbvlnovlkIzmraU6ICR7ZGlzdERpcn1gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSAyLiDnoa7kv50gaW5kZXguZC50cyDlrZjlnKhcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhpbmRleFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW5kZXhQYXRoLCAnJywgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDinIUg5bey5Yib5bu656m657G75Z6L5paH5Lu2OiAke2luZGV4UGF0aH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhpbmRleFBhdGgsICd1dGYtOCcpO1xyXG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC9cXHI/XFxuLyk7XHJcblxyXG4gICAgLy8g4pyFIDMuIOaPkOWPluaJgOacieeOsOacieeahCAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi94eHguZC50c1wiIC8+IOihjFxyXG4gICAgY29uc3QgcmVmZXJlbmNlUmVnZXggPSAvXFwvXFwvXFwvXFxzKjxyZWZlcmVuY2VcXHMrcGF0aD1cIlxcLlxcLyhbXlwiXStcXC5kXFwudHMpXCJcXHMqXFwvPi87XHJcbiAgICBjb25zdCBleGlzdGluZ1JlZnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdCBub25SZWZMaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaCA9IGxpbmUudHJpbSgpLm1hdGNoKHJlZmVyZW5jZVJlZ2V4KTtcclxuICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBtYXRjaFsxXTsgLy8g5aaCIFwidnVlLmQudHNcIlxyXG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC5kXFwudHMkLywgJycpOyAvLyDmj5Dlj5bmqKHlnZflkI1cclxuICAgICAgICBleGlzdGluZ1JlZnMucHVzaChtb2R1bGVOYW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub25SZWZMaW5lcy5wdXNoKGxpbmUpOyAvLyDkv53nlZnpnZ4gcmVmZXJlbmNlIOihjFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDinIUgNC4g6K6h566X5pyA57uI5bqU6K+l5L+d55WZ55qE5qih5Z2XXHJcbiAgICBjb25zdCB2YWxpZE1vZHVsZXMgPSBuZXcgU2V0PHN0cmluZz4oQUxXQVlTX0tFRVApO1xyXG5cclxuICAgIGxpYnJhcnlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAvLyDlv4XpobvlnKggZXh0ZXJuYWxzIOS4reWumuS5ie+8jOS4lOexu+Wei+aWh+S7tuWtmOWcqFxyXG4gICAgICBpZiAobmFtZSBpbiBleHRlcm5hbHMpIHtcclxuICAgICAgICBjb25zdCBkdHNQYXRoID0gcmVzb2x2ZShkaXN0RGlyLCBgJHtuYW1lfS5kLnRzYCk7XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZHRzUGF0aCkpIHtcclxuICAgICAgICAgIHZhbGlkTW9kdWxlcy5hZGQobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDinIUgNS4g55Sf5oiQ5pyA57uI55qEIHJlZmVyZW5jZSDooYzvvIjkv53mjIEgbXhjYWQg5ZKMIG14ZHJhdyDlnKjmnIDliY3vvIlcclxuICAgIGNvbnN0IGZpbmFsUmVmcyA9IFsnbXhjYWQnLCAnbXhkcmF3J11cclxuICAgICAgLmZpbHRlcihuYW1lID0+IHZhbGlkTW9kdWxlcy5oYXMobmFtZSkpXHJcbiAgICAgIC5tYXAobmFtZSA9PiBgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vJHtuYW1lfS5kLnRzXCIgLz5gKTtcclxuXHJcbiAgICAvLyDmt7vliqDlhbbku5YgdmFsaWRNb2R1bGVzIOS4reeahO+8iOWOu+mHje+8iVxyXG4gICAgQXJyYXkuZnJvbSh2YWxpZE1vZHVsZXMpXHJcbiAgICAgIC5maWx0ZXIobmFtZSA9PiAhQUxXQVlTX0tFRVAuaGFzKG5hbWUpKVxyXG4gICAgICAuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgICBmaW5hbFJlZnMucHVzaChgLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vJHtuYW1lfS5kLnRzXCIgLz5gKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8g4pyFIDYuIOWQiOW5tu+8muacgOe7iOW8leeUqCArIOWOn+Wni+mdnuW8leeUqOihjFxyXG4gICAgY29uc3QgcmVzdWx0TGluZXMgPSBbLi4uZmluYWxSZWZzLCAnJywgLi4ubm9uUmVmTGluZXMuZmlsdGVyKGwgPT4gbC50cmltKCkubGVuZ3RoID4gMCldO1xyXG5cclxuICAgIC8vIOenu+mZpOi/nue7reepuuihjO+8jOS/neeVmeS4gOS4quWIhumalFxyXG4gICAgY29uc3QgY2xlYW5lZExpbmVzID0gcmVzdWx0TGluZXMuZmlsdGVyKChsaW5lLCBpLCBhcnIpID0+XHJcbiAgICAgICEobGluZS50cmltKCkgPT09ICcnICYmIGkgPiAwICYmIGFycltpIC0gMV0udHJpbSgpID09PSAnJylcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbmV3Q29udGVudCA9IGNsZWFuZWRMaW5lcy5qb2luKCdcXG4nKS50cmltKCkgKyAnXFxuJztcclxuXHJcbiAgICAvLyDinIUgNy4g5YaZ5Zue5paH5Lu277yI5LuF5b2T5YaF5a655Y+Y5YyW5pe277yJXHJcbiAgICBpZiAoY29udGVudC50cmltKCkgIT09IG5ld0NvbnRlbnQudHJpbSgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoaW5kZXhQYXRoLCBuZXdDb250ZW50LCAndXRmLTgnKTtcclxuICAgICAgY29uc29sZS5sb2coYOKchSDlt7LlkIzmraUgbXhjYWQtYXBwL2Rpc3QvaW5kZXguZC50cyDnsbvlnovlvJXnlKhgKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoYOKdjCDlkIzmraXnsbvlnovlvJXnlKjlpLHotKU6YCwgZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDpooTlrprkuYnlupPlkI3liLDlhajlsYDlj5jph4/nmoTmmKDlsIRcclxuICovXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJQlJBUllfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gIG14Y2FkOiAnTXhDQUQnLFxyXG4gIG14ZHJhdzogJ014J1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlcm5hbHMoXHJcbiAgbGlicmFyeU5hbWVzOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+WydsaWJyYXJ5TmFtZXMnXVxyXG4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICBzeW5jVHlwZVJlZmVyZW5jZXMobGlicmFyeU5hbWVzKTtcclxuICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IC4uLkRFRkFVTFRfTElCUkFSWV9NQVAgfVxyXG4gIGlmICghQXJyYXkuaXNBcnJheShsaWJyYXJ5TmFtZXMpKSByZXR1cm4gcmVzdWx0O1xyXG4gIGxpYnJhcnlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgaWYgKG5hbWUgaW4gZXh0ZXJuYWxzKSB7XHJcbiAgICAgIHJlc3VsdFtuYW1lXSA9IGV4dGVybmFsc1tuYW1lIGFzIGtleW9mIHR5cGVvZiBleHRlcm5hbHNdO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3VyY2VBc3NldHNQYXRoKCk6IHN0cmluZyB7XHJcbiAgbGV0IGN1cnJlbnRGaWxlOiBzdHJpbmc7XHJcbiAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgY3VycmVudEZpbGUgPSBfX2ZpbGVuYW1lO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjdXJyZW50RmlsZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcclxuICB9XHJcbiAgY29uc3QgcGFja2FnZVJvb3QgPSByZXNvbHZlKGN1cnJlbnRGaWxlLCAnLi4nLCAnLi4nLCAnLi4nKTtcclxuICBjb25zdCBhc3NldHNQYXRoID0gcmVzb2x2ZShwYWNrYWdlUm9vdCwgbmFtZSwgJ2Rpc3QnLCAnbXhjYWRBcHBBc3NldHMnKTtcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoYXNzZXRzUGF0aCkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihgbXgtY2FkLWFwcCBhc3NldHMgbm90IGZvdW5kIGF0OiAke2Fzc2V0c1BhdGh9YCk7XHJcbiAgfVxyXG4gIHJldHVybiBhc3NldHNQYXRoO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTb3VyY2VBc3NldHNFeGlzdCgpOiBib29sZWFuIHtcclxuICBjb25zdCBwYXRoID0gZ2V0U291cmNlQXNzZXRzUGF0aCgpO1xyXG4gIHJldHVybiBmcy5leGlzdHNTeW5jKHBhdGgpICYmIGZzLmxzdGF0U3luYyhwYXRoKS5pc0RpcmVjdG9yeSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSdW50aW1lQ29uZmlnU2NyaXB0KHB1YmxpY1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGBcclxuICAgIDxzY3JpcHQ+XHJcbiAgICAgIHdpbmRvdy5fX01YX0NBRF9BUFBfQVNTRVRfUEFUSF9fID0gJyR7cHVibGljUGF0aH0nO1xyXG4gICAgPC9zY3JpcHQ+XHJcbiAgYC50cmltKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGlyKFxyXG4gIHNyYzogc3RyaW5nLFxyXG4gIGRlc3Q6IHN0cmluZyxcclxuICBwdWJsaWNEaXI6IHN0cmluZyxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWRcclxuKTogdm9pZCB7XHJcbiAgLy8g4pyFIOaWsOWinu+8muajgOafpSBwdWJsaWNEaXIg5piv5ZCm5a2Y5ZyoXHJcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHB1YmxpY0RpcikpIHtcclxuICAgIC8vIOS4jeWtmOWcqOWImei3s+i/h+aJq+aPj++8jOebtOaOpeWkjeWItlxyXG4gICAgZG9Db3B5KHNyYywgZGVzdCwgcHVibGljRGlyLCBuZXcgU2V0KCksIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgLy8g56ys5LiA5q2l77ya5omr5o+PIHB1YmxpY0RpciDkuIvmiYDmnInmlofku7bvvIjnm7jlr7nkuo4gcHVibGljRGlyIOeahOi3r+W+hO+8iVxyXG4gIHNjYW5QdWJsaWNEaXIocHVibGljRGlyLCAoZXJyLCBwdWJsaWNGaWxlcykgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgLy8g56ys5LqM5q2l77ya5byA5aeL5aSN5Yi277yM5Lyg5YWlIHB1YmxpY0ZpbGVzIOe8k+WtmFxyXG4gICAgZG9Db3B5KHNyYywgZGVzdCwgcHVibGljRGlyLCBwdWJsaWNGaWxlcyEsIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICB9KTtcclxufVxyXG5cclxuLy8g5a6e6ZmF5omn6KGM5aSN5Yi255qE5Ye95pWwXHJcbmZ1bmN0aW9uIGRvQ29weShcclxuICBzcmM6IHN0cmluZyxcclxuICBkZXN0OiBzdHJpbmcsXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgcHVibGljRmlsZXM6IFNldDxzdHJpbmc+LFxyXG4gIG9wdGlvbnM6IFJlcXVpcmVkPE14Q2FkQXNzZXRzUGx1Z2luT3B0aW9ucz4sIC8vIOazqOaEj++8mui/memHjOmcgOimgeehruS/nSBlbmFibGVDb21wcmVzc2VkQXNzZXRzIOaYr+W/hemAieeahFxyXG4gIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWRcclxuKSB7XHJcbiAgZnMubWtkaXIoZGVzdCwgeyByZWN1cnNpdmU6IHRydWUgfSwgKGVycikgPT4ge1xyXG4gICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcblxyXG4gICAgZnMucmVhZGRpcihzcmMsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9LCAoZXJyLCBkaXJlbnRzKSA9PiB7XHJcbiAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG5cclxuICAgICAgbGV0IHBlbmRpbmcgPSBkaXJlbnRzLmxlbmd0aDtcclxuICAgICAgaWYgKHBlbmRpbmcgPT09IDApIHJldHVybiBjYWxsYmFjaygpO1xyXG5cclxuICAgICAgLy8g5o+Q5YmN5a6a5LmJ5Y6L57yp5paH5Lu25omp5bGV5ZCNXHJcbiAgICAgIGNvbnN0IGNvbXByZXNzZWRFeHRzID0gWycuZ3onXTsgLy8g5Y+v5oyJ6ZyA5omp5bGVXHJcblxyXG4gICAgICBkaXJlbnRzLmZvckVhY2goKGRpcmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNyY1BhdGggPSByZXNvbHZlKHNyYywgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcmVzb2x2ZShkZXN0LCBkaXJlbnQubmFtZSk7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoc3JjLCBzcmNQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJykgYXMgQ29uZmlnRmlsZW5hbWU7XHJcblxyXG4gICAgICAgIC8vIOaWsOWinu+8muWmguaenOemgeeUqOWOi+e8qei1hOa6kOS4lOaYr+WOi+e8qeaWh+S7tu+8jOWImei3s+i/h1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFvcHRpb25zLmVuYWJsZUNvbXByZXNzZWRBc3NldHMgJiZcclxuICAgICAgICAgIGNvbXByZXNzZWRFeHRzLnNvbWUoZXh0ID0+IHJlbGF0aXZlUGF0aC5lbmRzV2l0aChleHQpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgZG9Db3B5KHNyY1BhdGgsIGRlc3RQYXRoLCBwdWJsaWNEaXIsIHB1YmxpY0ZpbGVzLCBvcHRpb25zLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVudC5pc0ZpbGUoKSkge1xyXG4gICAgICAgICAgaWYgKHB1YmxpY0ZpbGVzLmhhcyhyZWxhdGl2ZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0ZpbGVQYXRoID0gcmVzb2x2ZShwdWJsaWNEaXIsIHJlbGF0aXZlUGF0aCk7XHJcbiAgICAgICAgICAgIGZzLmNvcHlGaWxlKHB1YmxpY0ZpbGVQYXRoLCBkZXN0UGF0aCwgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChDT05GSUdfRklMRU5BTUVTLmluY2x1ZGVzKHJlbGF0aXZlUGF0aCkpIHtcclxuICAgICAgICAgICAgaGFuZGxlQ29uZmlnRmlsZShzcmNQYXRoLCBkZXN0UGF0aCwgcmVsYXRpdmVQYXRoLCBvcHRpb25zLCAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XHJcbiAgICAgICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCkgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmcy5jb3B5RmlsZShzcmNQYXRoLCBkZXN0UGF0aCwgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xyXG4gICAgICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9KTtcclxufVxyXG4vLyDmiavmj48gcHVibGljRGlyIOS4i+aJgOacieaWh+S7tu+8jOi/lOWbnuebuOWvueS6jiBwdWJsaWNEaXIg55qE6Lev5b6E6ZuG5ZCIXHJcbmZ1bmN0aW9uIHNjYW5QdWJsaWNEaXIoXHJcbiAgcHVibGljRGlyOiBzdHJpbmcsXHJcbiAgY2FsbGJhY2s6IChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB8IG51bGwsIGZpbGVzPzogU2V0PHN0cmluZz4pID0+IHZvaWRcclxuKSB7XHJcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gIGZ1bmN0aW9uIHdhbGsoZGlyOiBzdHJpbmcpIHtcclxuICAgIGZzLnJlYWRkaXIoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSwgKGVyciwgZGlyZW50cykgPT4ge1xyXG4gICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcclxuXHJcbiAgICAgIGxldCBwZW5kaW5nID0gZGlyZW50cy5sZW5ndGg7XHJcbiAgICAgIGlmIChwZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpcmVudHMuZm9yRWFjaCgoZGlyZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlKGRpciwgZGlyZW50Lm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHJlbFBhdGggPSByZWxhdGl2ZShwdWJsaWNEaXIsIGZ1bGxQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcblxyXG4gICAgICAgIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgd2FsayhmdWxsUGF0aCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIHJlc3VsdC5hZGQocmVsUGF0aCk7XHJcbiAgICAgICAgICBpZiAoLS1wZW5kaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgtLXBlbmRpbmcgPT09IDApIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB3YWxrKHB1YmxpY0Rpcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50VHlwZShmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBleHQgPSBmaWxlUGF0aC5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xyXG4gIGNvbnN0IHR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgJ2Nzcyc6ICd0ZXh0L2NzcycsXHJcbiAgICAnanMnOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcsXHJcbiAgICAnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICdwbmcnOiAnaW1hZ2UvcG5nJyxcclxuICAgICdqcGcnOiAnaW1hZ2UvanBlZycsXHJcbiAgICAnanBlZyc6ICdpbWFnZS9qcGVnJyxcclxuICAgICdnaWYnOiAnaW1hZ2UvZ2lmJyxcclxuICAgICdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXHJcbiAgICAnd29mZic6ICdmb250L3dvZmYnLFxyXG4gICAgJ3dvZmYyJzogJ2ZvbnQvd29mZjInLFxyXG4gICAgJ3R0Zic6ICdmb250L3R0ZicsXHJcbiAgICAnZW90JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcclxuICAgICdpY28nOiAnaW1hZ2UveC1pY29uJyxcclxuICAgICd3YXNtJzogJ2FwcGxpY2F0aW9uL3dhc20nLFxyXG4gICAgJ3ppcCc6ICdhcHBsaWNhdGlvbi96aXAnLFxyXG4gICAgJ3Jhcic6ICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJyxcclxuICAgICc3eic6ICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnLFxyXG4gICAgJ3Rhcic6ICdhcHBsaWNhdGlvbi94LXRhcicsXHJcbiAgICAnZ3onOiAnYXBwbGljYXRpb24vZ3ppcCcsXHJcbiAgICAnYnoyJzogJ2FwcGxpY2F0aW9uL3gtYnppcDInLFxyXG4gICAgJ3h6JzogJ2FwcGxpY2F0aW9uL3gteHonXHJcbiAgfTtcclxuICByZXR1cm4gdHlwZXNbZXh0XSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiDmoIflh4bljJbot6/lvoTvvIznoa7kv53ku6UgJy8nIOe7k+WwvlxyXG4gKi9cclxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiByZXNvbHZlKHApLnJlcGxhY2UoL1xcXFwvZywgJy8nKSArICcvJztcclxufVxyXG5cclxuLyoqXHJcbiAqIOWIm+W7uumAmueUqOS4remXtOS7tu+8muS8mOWFiOS9v+eUqCBwdWJsaWMg6LWE5rqQ77yM5Zue6YCA5YiwIHNvdXJjZUFzc2V0c1BhdGhcclxuICog5a+55qCHIGNyZWF0ZVN0YXRpY01pZGRsZXdhcmUg6aOO5qC8XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXhDYWRBc3NldHNNaWRkbGV3YXJlKFxyXG4gIHJvb3Q6IHN0cmluZyxcclxuICBvcHRpb25zOiBSZXF1aXJlZDxNeENhZEFzc2V0c1BsdWdpbk9wdGlvbnM+LFxyXG4gIHB1YmxpY0Rpcjogc3RyaW5nLFxyXG4gIGxvZ2dlcj86IGFueVxyXG4pIHtcclxuICBjb25zdCB7IG91dHB1dERpciwgaXNXYXNtU3QgPSBmYWxzZSB9ID0gb3B0aW9ucztcclxuICAvLyDinIUgMS4g6KeE6IyD5YyW6Lev5b6EXHJcbiAgY29uc3QgYmFzZVBhdGggPSBgLyR7b3V0cHV0RGlyLnJlcGxhY2UoL15cXC8rLywgJycpfWA7IC8vICcvbXhjYWRBcHBBc3NldHMnXHJcbiAgY29uc3Qgc291cmNlQXNzZXRzUm9vdCA9IG5vcm1hbGl6ZVBhdGgocm9vdCk7XHJcblxyXG4gIHJldHVybiBhc3luYyAocmVxOiBhbnksIHJlczogYW55LCBuZXh0OiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAvLyDinIUgMi4g5Z+65pys5qCh6aqMXHJcbiAgICBpZiAoIXJlcS51cmwgfHwgdHlwZW9mIHJlcS51cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBuZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pyFIDMuIOiuvue9ruWuieWFqOWktO+8iOmdniBpc1dhc21TdCDmqKHlvI/vvIlcclxuICAgIGlmICghaXNXYXNtU3QpIHtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3knLCAnc2FtZS1vcmlnaW4nKTtcclxuICAgICAgcmVzLnNldEhlYWRlcignQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsICdyZXF1aXJlLWNvcnAnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDinIUgNC4g6Kej5p6QIFVSTCDot6/lvoTvvIjljrsgcXVlcnnvvIzop6PnoIHvvIlcclxuICAgIGNvbnN0IHVybFBhdGggPSByZXEudXJsLnNwbGl0KCc/JylbMF07XHJcbiAgICBsZXQgZmlsZVBhdGghOiBzdHJpbmc7XHJcbiAgICBsZXQgZmlsZU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGVjb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodXJsUGF0aCk7XHJcbiAgICAgIC8vIOinhOiMg+WMlui3r+W+hO+8jOmYsuatoiAuLi8uLi8g6LaK5p2DXHJcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZGVjb2RlZFBhdGgucmVwbGFjZSgvXlsvXFxcXF0rLywgJycpO1xyXG5cclxuICAgICAgLy8g4pyFIDUuIOS8mOWFiO+8muajgOafpSBwdWJsaWMvJHtvdXRwdXREaXJ9IOebruW9lVxyXG4gICAgICBjb25zdCBwdWJsaWNGaWxlUGF0aCA9IGpvaW4ocHVibGljRGlyLCBub3JtYWxpemVkUGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChwdWJsaWNGaWxlUGF0aCk7XHJcbiAgICAgICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcclxuICAgICAgICAgIGZpbGVQYXRoID0gcHVibGljRmlsZVBhdGg7XHJcbiAgICAgICAgICBmaWxlTmFtZSA9IGJhc2VuYW1lKG5vcm1hbGl6ZWRQYXRoKTtcclxuICAgICAgICAgIHJldHVybiBzZXJ2ZUZpbGUoZmlsZVBhdGgsIGZpbGVOYW1lLCByZXMsIGxvZ2dlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAvLyBwdWJsaWMg5Lit5rKh5pyJ77yM57un57ut5p+l5om+IHNvdXJjZUFzc2V0c1BhdGhcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g4pyFIDYuIGZhbGxiYWNr77ya5p+l5om+IHNvdXJjZUFzc2V0c1BhdGhcclxuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVNhZmVQYXRoKGRlY29kZWRQYXRoLCBzb3VyY2VBc3NldHNSb290LCBiYXNlUGF0aCk7XHJcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHJlc3VsdC5zdGF0dXNDb2RlIHx8IDQwMDtcclxuICAgICAgICByZXR1cm4gcmVzLmVuZChyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZXN1bHQuZmlsZVBhdGgpIGZpbGVQYXRoID0gcmVzdWx0LmZpbGVQYXRoO1xyXG4gICAgICBpZiAocmVzdWx0LmZpbGVOYW1lKSBmaWxlTmFtZSA9IHJlc3VsdC5maWxlTmFtZTtcclxuXHJcbiAgICAgIC8vIOKchSA3LiDlsJ3or5XnlLEgaGFuZGxlQ29uZmlnUmVxdWVzdCDlpITnkIbvvIjlpoLms6jlhaXphY3nva7vvIlcclxuICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZUNvbmZpZ1JlcXVlc3QoXHJcbiAgICAgICAgZmlsZVBhdGgsXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgb3B0aW9ucyxcclxuICAgICAgICByZXMsXHJcbiAgICAgICAgbG9nZ2VyXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChoYW5kbGVkKSByZXR1cm47XHJcblxyXG4gICAgICAvLyDinIUgOC4g56Gu5L+d5piv5paH5Lu2XHJcbiAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZpbGVQYXRoKTtcclxuICAgICAgaWYgKCFzdGF0LmlzRmlsZSgpKSB7XHJcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XHJcbiAgICAgICAgcmV0dXJuIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzZXJ2ZUZpbGUoZmlsZVBhdGgsIGZpbGVOYW1lLCByZXMsIGxvZ2dlcik7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgbG9nZ2VyPy53YXJuPy4oYFtNeENhZEFzc2V0c10gU2VydmUgZmFpbGVkIGZvciAke3JlcS51cmx9OiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XHJcbiAgICAgIGlmIChyZXMuaGVhZGVyc1NlbnQpIHJldHVybjtcclxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XHJcbiAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWwgeijheaWh+S7tuWTjeW6lOmAu+i+ke+8iOa1geW8j+S8oOi+k++8iVxyXG4gKi9cclxuZnVuY3Rpb24gc2VydmVGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIHJlczogYW55LCBsb2dnZXI/OiBhbnkpIHtcclxuICBjb25zdCBzdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcclxuXHJcbiAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbikgPT4ge1xyXG4gICAgaWYgKHJlcy5oZWFkZXJzU2VudCkgcmV0dXJuO1xyXG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJyB8fCBlcnIuY29kZSA9PT0gJ0VBQ0NFUycpIHtcclxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXNDb2RlID09PSAyMDAgPyByZXMuZW5kKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsb2dnZXI/LmVycm9yPy4oYFtNeENhZEFzc2V0c10gUmVhZCBlcnJvcjogJHtlcnIubWVzc2FnZX1gLCBlcnIpO1xyXG4gICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XHJcbiAgICByZXMuZW5kKCdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcclxuICB9KTtcclxuXHJcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgZ2V0Q29udGVudFR5cGUoZmlsZU5hbWUpKTtcclxuICByZXMuc2V0SGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJywgJ25vc25pZmYnKTtcclxuXHJcbiAgc3RyZWFtLnBpcGUocmVzKTtcclxufSJdLCJuYW1lcyI6WyJqb2luIiwicmVzb2x2ZSIsImJhc2VuYW1lIiwiZXJyIiwibmFtZSIsImZpbGVVUkxUb1BhdGgiLCJyZWxhdGl2ZSIsInN0YXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const path = require("path");
4
4
  const fs = require("fs");
5
- const index = require("../index-DubbRmDj.js");
5
+ const index = require("../index-CmQPXuBg.js");
6
6
  function _interopNamespaceDefault(e) {
7
7
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
8
  if (e) {
@@ -1,6 +1,6 @@
1
1
  import { resolve } from "path";
2
2
  import * as fs from "fs";
3
- import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, f as generateRuntimeConfigScript, c as copyDir, h as getContentType, b as createGlobalUniversalMiddleware, e as getApiMap } from "../index-CXnnCbjH.mjs";
3
+ import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, f as generateRuntimeConfigScript, c as copyDir, h as getContentType, b as createGlobalUniversalMiddleware, e as getApiMap } from "../index-Bkyb2FxJ.mjs";
4
4
  function mxcadAssetsPlugin(options = {}) {
5
5
  const resolvedOptions = resolveOptions(options);
6
6
  const sourceAssetsPath = getSourceAssetsPath();
@@ -80,6 +80,10 @@ export interface MxServerConfigWasmConfig {
80
80
  * 如果没有设置url, 我们可以通过该项目本地存放的assets目录下wasm相关的文件, 目前可选项有: 2d和2d-st 2d是多线程加载,可能需要一些额外的服务器配置, 而2d-st是单线程的,你可以很方便的使用它,也可以通过访问地址参数调置http://xxxx/mxcad/?wasmtype=st
81
81
  */
82
82
  type: string;
83
+ /**
84
+ * 是否使用64位加载也可以通过访问地址参数调置http://xxxx/mxcad/?wasm64=true
85
+ */
86
+ wasm64: string;
83
87
  [k: string]: any;
84
88
  }
85
89
 
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const path = require("path");
4
4
  const fs = require("fs");
5
- const index = require("../index-DubbRmDj.js");
5
+ const index = require("../index-CmQPXuBg.js");
6
6
  function _interopNamespaceDefault(e) {
7
7
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
8
  if (e) {
@@ -1,6 +1,6 @@
1
1
  import { resolve } from "path";
2
2
  import * as fs from "fs";
3
- import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, c as copyDir, b as createGlobalUniversalMiddleware, d as createMxCadAssetsMiddleware, e as getApiMap, f as generateRuntimeConfigScript } from "../index-CXnnCbjH.mjs";
3
+ import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, c as copyDir, b as createGlobalUniversalMiddleware, d as createMxCadAssetsMiddleware, e as getApiMap, f as generateRuntimeConfigScript } from "../index-Bkyb2FxJ.mjs";
4
4
  function mxcadAssetsPlugin(options = {}) {
5
5
  let config;
6
6
  const resolvedOptions = resolveOptions(options);
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const webpack = require("webpack");
4
4
  const fs = require("fs");
5
5
  const path = require("path");
6
- const index = require("../index-DubbRmDj.js");
6
+ const index = require("../index-CmQPXuBg.js");
7
7
  function _interopNamespaceDefault(e) {
8
8
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
9
9
  if (e) {
@@ -1,7 +1,7 @@
1
1
  import { Compilation } from "webpack";
2
2
  import * as fs from "fs";
3
3
  import * as path from "path";
4
- import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, b as createGlobalUniversalMiddleware, d as createMxCadAssetsMiddleware, c as copyDir, f as generateRuntimeConfigScript } from "../index-CXnnCbjH.mjs";
4
+ import { r as resolveOptions, g as getSourceAssetsPath, a as getExternals, b as createGlobalUniversalMiddleware, d as createMxCadAssetsMiddleware, c as copyDir, f as generateRuntimeConfigScript } from "../index-Bkyb2FxJ.mjs";
5
5
  class MxCadAssetsWebpackPlugin {
6
6
  options;
7
7
  sourceAssetsPath;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mxcad-app",
3
- "version": "1.0.67",
3
+ "version": "1.0.68",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",