@libs-ui/utils 0.2.317-0 → 0.2.318-0

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.
@@ -30,11 +30,15 @@ export declare const isFrameworkObject: <T = any>(obj: any) => obj is TemplateRe
30
30
  /**
31
31
  * Kiểm tra đối tượng có phải là File/Blob object không
32
32
  */
33
- export declare const isFileObject: (obj: any) => obj is File | Blob;
33
+ export declare const isFile: (obj: any) => obj is File | Blob;
34
34
  /**
35
35
  * Kiểm tra đối tượng có phải là Built-in object không
36
36
  */
37
37
  export declare const isBuiltInObject: (obj: any) => obj is Date | RegExp | HttpParams;
38
+ /**
39
+ * Kiểm tra đối tượng có phải là RegExp object không
40
+ */
41
+ export declare const isRegExp: (obj: any) => obj is RegExp;
38
42
  /**
39
43
  * Kiểm tra đối tượng có phải là Async object không
40
44
  */
@@ -55,15 +59,15 @@ export declare const isSkippableObject: (obj: any) => boolean;
55
59
  /**
56
60
  * Kiểm tra đối tượng có phải là Map object không
57
61
  */
58
- export declare const isMapObject: <T = any>(obj: any) => obj is Map<string, T>;
62
+ export declare const isMap: <T = any>(obj: any) => obj is Map<string, T>;
59
63
  /**
60
64
  * Kiểm tra đối tượng có phải là Set object không
61
65
  */
62
- export declare const isSetObject: <T = any>(obj: any) => obj is Set<T>;
66
+ export declare const isSet: <T = any>(obj: any) => obj is Set<T>;
63
67
  /**
64
68
  * Kiểm tra đối tượng có phải là Array object không
65
69
  */
66
- export declare const isArrayObject: <T = any>(obj: any) => obj is Array<T>;
70
+ export declare const isArray: <T = any>(obj: any) => obj is Array<T>;
67
71
  /**
68
72
  * Kiểm tra đối tượng có phải là object cần trả về nguyên trạng không
69
73
  * Bao gồm: dangerous objects, special objects, dayjs objects
@@ -66,7 +66,7 @@ export const isFrameworkObject = (obj) => {
66
66
  /**
67
67
  * Kiểm tra đối tượng có phải là File/Blob object không
68
68
  */
69
- export const isFileObject = (obj) => {
69
+ export const isFile = (obj) => {
70
70
  if (obj === null || typeof obj !== 'object') {
71
71
  return false;
72
72
  }
@@ -79,7 +79,13 @@ export const isBuiltInObject = (obj) => {
79
79
  if (obj === null || typeof obj !== 'object') {
80
80
  return false;
81
81
  }
82
- return obj instanceof Date || obj instanceof RegExp || obj instanceof HttpParams || ('hasOwnProperty' in obj && '__ngContext__' in obj);
82
+ return obj instanceof Date || isRegExp(obj) || obj instanceof HttpParams || ('hasOwnProperty' in obj && '__ngContext__' in obj);
83
+ };
84
+ /**
85
+ * Kiểm tra đối tượng có phải là RegExp object không
86
+ */
87
+ export const isRegExp = (obj) => {
88
+ return obj instanceof RegExp;
83
89
  };
84
90
  /**
85
91
  * Kiểm tra đối tượng có phải là Async object không
@@ -95,7 +101,7 @@ export const isAsyncObject = (obj) => {
95
101
  * Bao gồm: Framework objects, File objects, Built-in objects, Async objects
96
102
  */
97
103
  export const isSpecialObject = (obj) => {
98
- return isFrameworkObject(obj) || isFileObject(obj) || isBuiltInObject(obj) || isAsyncObject(obj);
104
+ return isFrameworkObject(obj) || isFile(obj) || isBuiltInObject(obj) || isAsyncObject(obj);
99
105
  };
100
106
  /**
101
107
  * Kiểm tra đối tượng có phải là dayjs object không
@@ -112,19 +118,19 @@ export const isSkippableObject = (obj) => {
112
118
  /**
113
119
  * Kiểm tra đối tượng có phải là Map object không
114
120
  */
115
- export const isMapObject = (obj) => {
121
+ export const isMap = (obj) => {
116
122
  return obj instanceof Map;
117
123
  };
118
124
  /**
119
125
  * Kiểm tra đối tượng có phải là Set object không
120
126
  */
121
- export const isSetObject = (obj) => {
127
+ export const isSet = (obj) => {
122
128
  return obj instanceof Set;
123
129
  };
124
130
  /**
125
131
  * Kiểm tra đối tượng có phải là Array object không
126
132
  */
127
- export const isArrayObject = (obj) => {
133
+ export const isArray = (obj) => {
128
134
  return Array.isArray(obj);
129
135
  };
130
136
  /**
@@ -140,4 +146,4 @@ export const isReturnAsIsObject = (obj) => {
140
146
  export const isSafeToProcess = (obj) => {
141
147
  return !isDangerousObject(obj);
142
148
  };
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFuZ2Vyb3VzLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2Rhbmdlcm91cy1vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEM7O0dBRUc7QUFDSCxNQUFNLDJCQUEyQixHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFVLENBQUM7QUFFek07O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQVEsRUFBb0UsRUFBRTtJQUNsSCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxHQUFHLFlBQVksTUFBTSxJQUFJLEdBQUcsWUFBWSxRQUFRLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxVQUFVLENBQUM7QUFDdEgsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFRLEVBQXVDLEVBQUU7SUFDM0UsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxD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QUFDO0FBQzVCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQVUsR0FBUSxFQUFpQixFQUFFO0lBQzlELE9BQU8sR0FBRyxZQUFZLEdBQUcsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFVLEdBQVEsRUFBbUIsRUFBRTtJQUNsRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFRLEVBQVcsRUFBRTtJQUN0RCxPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQVEsRUFBVyxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVGVtcGxhdGVSZWYsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBkYXlqcywgeyBEYXlqcyB9IGZyb20gJ2RheWpzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBEYW5oIHPDoWNoIGPDoWMgY29uc3RydWN0b3IgbmFtZSBuZ3V5IGhp4buDbVxuICovXG5jb25zdCBEQU5HRVJPVVNfQ09OU1RSVUNUT1JfTkFNRVMgPSBbJ1dpbmRvdycsICdEb2N1bWVudCcsICdIVE1MRG9jdW1lbnQnLCAnSFRNTEVsZW1lbnQnLCAnRWxlbWVudCcsICdOb2RlJywgJ0xvY2F0aW9uJywgJ05hdmlnYXRvcicsICdTY3JlZW4nLCAnSGlzdG9yeScsICdTdG9yYWdlJywgJ0NvbnNvbGUnLCAnUGVyZm9ybWFuY2UnXSBhcyBjb25zdDtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgYnJvd3NlciBnbG9iYWwgb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNCcm93c2VyR2xvYmFsT2JqZWN0ID0gKG9iajogYW55KTogb2JqIGlzIFdpbmRvdyB8IERvY3VtZW50IHwgV2luZG93IHwgRG9jdW1lbnQgfCB0eXBlb2YgZ2xvYmFsVGhpcyA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFdpbmRvdyB8fCBvYmogaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBvYmogPT09IHdpbmRvdyB8fCBvYmogPT09IGRvY3VtZW50IHx8IG9iaiA9PT0gZ2xvYmFsVGhpcztcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIERPTSBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTU9iamVjdCA9IChvYmo6IGFueSk6IG9iaiBpcyBIVE1MRWxlbWVudCB8IE5vZGUgfCBFbGVtZW50ID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgb2JqIGluc3RhbmNlb2YgTm9kZSB8fCBvYmogaW5zdGFuY2VvZiBFbGVtZW50O1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgYnJvd3NlciBBUEkgb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNCcm93c2VyQVBJT2JqZWN0ID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiA9PT0gd2luZG93LmxvY2F0aW9uIHx8IG9iaiA9PT0gd2luZG93Lm5hdmlnYXRvciB8fCBvYmogPT09IHdpbmRvdy5zY3JlZW4gfHwgb2JqID09PSB3aW5kb3cuaGlzdG9yeSB8fCBvYmogPT09IHdpbmRvdy5sb2NhbFN0b3JhZ2UgfHwgb2JqID09PSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgfHwgb2JqID09PSB3aW5kb3cuY29uc29sZSB8fCBvYmogPT09IHdpbmRvdy5wZXJmb3JtYW5jZTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSBjb25zdHJ1Y3RvciBuYW1lIGPDsyBu4bqxbSB0cm9uZyBkYW5oIHPDoWNoIG5ndXkgaGnhu4NtIGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaGFzRGFuZ2Vyb3VzQ29uc3RydWN0b3JOYW1lID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gb2JqLmNvbnN0cnVjdG9yPy5uYW1lO1xuICByZXR1cm4gY29uc3RydWN0b3JOYW1lICYmIERBTkdFUk9VU19DT05TVFJVQ1RPUl9OQU1FUy5pbmNsdWRlcyhjb25zdHJ1Y3Rvck5hbWUgYXMgYW55KTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIERPTSBvYmplY3QgaG/hurdjIGJyb3dzZXIgb2JqZWN0IG5ndXkgaGnhu4NtIGtow7RuZ1xuICogTmjhu69uZyDEkeG7kWkgdMaw4bujbmcgbsOgeSBjw7MgdGjhu4MgZ8OieSByYSBjaXJjdWxhciByZWZlcmVuY2UgdsOgIG1heGltdW0gY2FsbCBzdGFja1xuICovXG5leHBvcnQgY29uc3QgaXNEYW5nZXJvdXNPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0Jyb3dzZXJHbG9iYWxPYmplY3Qob2JqKSB8fCBpc0RPTU9iamVjdChvYmopIHx8IGlzQnJvd3NlckFQSU9iamVjdChvYmopIHx8IGhhc0Rhbmdlcm91c0NvbnN0cnVjdG9yTmFtZShvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBBbmd1bGFyL0ZyYW1ld29yayBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZyYW1ld29ya09iamVjdCA9IDxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBUZW1wbGF0ZVJlZjxUPiB8IEVsZW1lbnRSZWY8VD4gPT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCBvYmogaW5zdGFuY2VvZiBFbGVtZW50UmVmO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBGaWxlL0Jsb2Igb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWxlT2JqZWN0ID0gKG9iajogYW55KTogb2JqIGlzIEZpbGUgfCBCbG9iID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRmlsZSB8fCBvYmogaW5zdGFuY2VvZiBCbG9iIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBGaWxlXSc7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIEJ1aWx0LWluIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVpbHRJbk9iamVjdCA9IChvYmo6IGFueSk6IG9iaiBpcyBEYXRlIHwgUmVnRXhwIHwgSHR0cFBhcmFtcyA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwIHx8IG9iaiBpbnN0YW5jZW9mIEh0dHBQYXJhbXMgfHwgKCdoYXNPd25Qcm9wZXJ0eScgaW4gb2JqICYmICdfX25nQ29udGV4dF9fJyBpbiBvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBBc3luYyBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FzeW5jT2JqZWN0ID0gPFQgPSBhbnk+KG9iajogYW55KTogb2JqIGlzIFByb21pc2U8VD4gfCBPYnNlcnZhYmxlPFQ+ID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgUHJvbWlzZSB8fCBvYmogaW5zdGFuY2VvZiBPYnNlcnZhYmxlO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBTcGVjaWFsIG9iamVjdCBj4bqnbiBi4buPIHF1YSBraMO0bmdcbiAqIEJhbyBn4buTbTogRnJhbWV3b3JrIG9iamVjdHMsIEZpbGUgb2JqZWN0cywgQnVpbHQtaW4gb2JqZWN0cywgQXN5bmMgb2JqZWN0c1xuICovXG5leHBvcnQgY29uc3QgaXNTcGVjaWFsT2JqZWN0ID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0ZyYW1ld29ya09iamVjdChvYmopIHx8IGlzRmlsZU9iamVjdChvYmopIHx8IGlzQnVpbHRJbk9iamVjdChvYmopIHx8IGlzQXN5bmNPYmplY3Qob2JqKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgZGF5anMgb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNEYXlqc09iamVjdCA9IChvYmo6IGFueSk6IG9iaiBpcyBEYXlqcyA9PiB7XG4gIHJldHVybiBkYXlqcy5pc0RheWpzKG9iaik7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIG9iamVjdCBj4bqnbiBi4buPIHF1YSB0cm9uZyBxdcOhIHRyw6xuaCBjb252ZXJ0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNTa2lwcGFibGVPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGlzRGFuZ2Vyb3VzT2JqZWN0KG9iaikgfHwgaXNTcGVjaWFsT2JqZWN0KG9iaik7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIE1hcCBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc01hcE9iamVjdCA9IDxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBNYXA8c3RyaW5nLCBUPiA9PiB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBNYXA7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIFNldCBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NldE9iamVjdCA9IDxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBTZXQ8VD4gPT4ge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgU2V0O1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBBcnJheSBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FycmF5T2JqZWN0ID0gPFQgPSBhbnk+KG9iajogYW55KTogb2JqIGlzIEFycmF5PFQ+ID0+IHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6Agb2JqZWN0IGPhuqduIHRy4bqjIHbhu4Egbmd1ecOqbiB0cuG6oW5nIGtow7RuZ1xuICogQmFvIGfhu5NtOiBkYW5nZXJvdXMgb2JqZWN0cywgc3BlY2lhbCBvYmplY3RzLCBkYXlqcyBvYmplY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBpc1JldHVybkFzSXNPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGlzU2tpcHBhYmxlT2JqZWN0KG9iaikgfHwgaXNEYXlqc09iamVjdChvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSDEkeG7kWkgdMaw4bujbmcgY8OzIGFuIHRvw6BuIMSR4buDIGNsb25lL2NvbnZlcnQga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NhZmVUb1Byb2Nlc3MgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuICFpc0Rhbmdlcm91c09iamVjdChvYmopO1xufTtcbiJdfQ==
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFuZ2Vyb3VzLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2Rhbmdlcm91cy1vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEM7O0dBRUc7QUFDSCxNQUFNLDJCQUEyQixHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFVLENBQUM7QUFFek07O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQVEsRUFBb0UsRUFBRTtJQUNsSCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxHQUFHLFlBQVksTUFBTSxJQUFJLEdBQUcsWUFBWSxRQUFRLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxVQUFVLENBQUM7QUFDdEgsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFRLEVBQXVDLEVBQUU7SUFDM0UsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxD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QUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBVSxHQUFRLEVBQXlCLEVBQUU7SUFDaEUsT0FBTyxHQUFHLFlBQVksR0FBRyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQVUsR0FBUSxFQUFpQixFQUFFO0lBQ3hELE9BQU8sR0FBRyxZQUFZLEdBQUcsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFVLEdBQVEsRUFBbUIsRUFBRTtJQUM1RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFRLEVBQVcsRUFBRTtJQUN0RCxPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQVEsRUFBVyxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVGVtcGxhdGVSZWYsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBkYXlqcywgeyBEYXlqcyB9IGZyb20gJ2RheWpzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBEYW5oIHPDoWNoIGPDoWMgY29uc3RydWN0b3IgbmFtZSBuZ3V5IGhp4buDbVxuICovXG5jb25zdCBEQU5HRVJPVVNfQ09OU1RSVUNUT1JfTkFNRVMgPSBbJ1dpbmRvdycsICdEb2N1bWVudCcsICdIVE1MRG9jdW1lbnQnLCAnSFRNTEVsZW1lbnQnLCAnRWxlbWVudCcsICdOb2RlJywgJ0xvY2F0aW9uJywgJ05hdmlnYXRvcicsICdTY3JlZW4nLCAnSGlzdG9yeScsICdTdG9yYWdlJywgJ0NvbnNvbGUnLCAnUGVyZm9ybWFuY2UnXSBhcyBjb25zdDtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgYnJvd3NlciBnbG9iYWwgb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNCcm93c2VyR2xvYmFsT2JqZWN0ID0gKG9iajogYW55KTogb2JqIGlzIFdpbmRvdyB8IERvY3VtZW50IHwgV2luZG93IHwgRG9jdW1lbnQgfCB0eXBlb2YgZ2xvYmFsVGhpcyA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFdpbmRvdyB8fCBvYmogaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBvYmogPT09IHdpbmRvdyB8fCBvYmogPT09IGRvY3VtZW50IHx8IG9iaiA9PT0gZ2xvYmFsVGhpcztcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIERPTSBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RPTU9iamVjdCA9IChvYmo6IGFueSk6IG9iaiBpcyBIVE1MRWxlbWVudCB8IE5vZGUgfCBFbGVtZW50ID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgb2JqIGluc3RhbmNlb2YgTm9kZSB8fCBvYmogaW5zdGFuY2VvZiBFbGVtZW50O1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgYnJvd3NlciBBUEkgb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNCcm93c2VyQVBJT2JqZWN0ID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiA9PT0gd2luZG93LmxvY2F0aW9uIHx8IG9iaiA9PT0gd2luZG93Lm5hdmlnYXRvciB8fCBvYmogPT09IHdpbmRvdy5zY3JlZW4gfHwgb2JqID09PSB3aW5kb3cuaGlzdG9yeSB8fCBvYmogPT09IHdpbmRvdy5sb2NhbFN0b3JhZ2UgfHwgb2JqID09PSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgfHwgb2JqID09PSB3aW5kb3cuY29uc29sZSB8fCBvYmogPT09IHdpbmRvdy5wZXJmb3JtYW5jZTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSBjb25zdHJ1Y3RvciBuYW1lIGPDsyBu4bqxbSB0cm9uZyBkYW5oIHPDoWNoIG5ndXkgaGnhu4NtIGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaGFzRGFuZ2Vyb3VzQ29uc3RydWN0b3JOYW1lID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gb2JqLmNvbnN0cnVjdG9yPy5uYW1lO1xuICByZXR1cm4gY29uc3RydWN0b3JOYW1lICYmIERBTkdFUk9VU19DT05TVFJVQ1RPUl9OQU1FUy5pbmNsdWRlcyhjb25zdHJ1Y3Rvck5hbWUgYXMgYW55KTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIERPTSBvYmplY3QgaG/hurdjIGJyb3dzZXIgb2JqZWN0IG5ndXkgaGnhu4NtIGtow7RuZ1xuICogTmjhu69uZyDEkeG7kWkgdMaw4bujbmcgbsOgeSBjw7MgdGjhu4MgZ8OieSByYSBjaXJjdWxhciByZWZlcmVuY2UgdsOgIG1heGltdW0gY2FsbCBzdGFja1xuICovXG5leHBvcnQgY29uc3QgaXNEYW5nZXJvdXNPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0Jyb3dzZXJHbG9iYWxPYmplY3Qob2JqKSB8fCBpc0RPTU9iamVjdChvYmopIHx8IGlzQnJvd3NlckFQSU9iamVjdChvYmopIHx8IGhhc0Rhbmdlcm91c0NvbnN0cnVjdG9yTmFtZShvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBBbmd1bGFyL0ZyYW1ld29yayBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZyYW1ld29ya09iamVjdCA9IDxUID0gYW55PihvYmo6IGFueSk6IG9iaiBpcyBUZW1wbGF0ZVJlZjxUPiB8IEVsZW1lbnRSZWY8VD4gPT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCBvYmogaW5zdGFuY2VvZiBFbGVtZW50UmVmO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBGaWxlL0Jsb2Igb2JqZWN0IGtow7RuZ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWxlID0gKG9iajogYW55KTogb2JqIGlzIEZpbGUgfCBCbG9iID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRmlsZSB8fCBvYmogaW5zdGFuY2VvZiBCbG9iIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBGaWxlXSc7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIEJ1aWx0LWluIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVpbHRJbk9iamVjdCA9IChvYmo6IGFueSk6IG9iaiBpcyBEYXRlIHwgUmVnRXhwIHwgSHR0cFBhcmFtcyA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgaXNSZWdFeHAob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBIdHRwUGFyYW1zIHx8ICgnaGFzT3duUHJvcGVydHknIGluIG9iaiAmJiAnX19uZ0NvbnRleHRfXycgaW4gb2JqKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgUmVnRXhwIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVnRXhwID0gKG9iajogYW55KTogb2JqIGlzIFJlZ0V4cCA9PiB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBSZWdFeHA7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIEFzeW5jIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXN5bmNPYmplY3QgPSA8VCA9IGFueT4ob2JqOiBhbnkpOiBvYmogaXMgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4gPT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBQcm9taXNlIHx8IG9iaiBpbnN0YW5jZW9mIE9ic2VydmFibGU7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIFNwZWNpYWwgb2JqZWN0IGPhuqduIGLhu48gcXVhIGtow7RuZ1xuICogQmFvIGfhu5NtOiBGcmFtZXdvcmsgb2JqZWN0cywgRmlsZSBvYmplY3RzLCBCdWlsdC1pbiBvYmplY3RzLCBBc3luYyBvYmplY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NwZWNpYWxPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGlzRnJhbWV3b3JrT2JqZWN0KG9iaikgfHwgaXNGaWxlKG9iaikgfHwgaXNCdWlsdEluT2JqZWN0KG9iaikgfHwgaXNBc3luY09iamVjdChvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBkYXlqcyBvYmplY3Qga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RheWpzT2JqZWN0ID0gKG9iajogYW55KTogb2JqIGlzIERheWpzID0+IHtcbiAgcmV0dXJuIGRheWpzLmlzRGF5anMob2JqKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6Agb2JqZWN0IGPhuqduIGLhu48gcXVhIHRyb25nIHF1w6EgdHLDrG5oIGNvbnZlcnQga2jDtG5nXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NraXBwYWJsZU9iamVjdCA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEYW5nZXJvdXNPYmplY3Qob2JqKSB8fCBpc1NwZWNpYWxPYmplY3Qob2JqKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgTWFwIG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTWFwID0gPFQgPSBhbnk+KG9iajogYW55KTogb2JqIGlzIE1hcDxzdHJpbmcsIFQ+ID0+IHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE1hcDtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSDEkeG7kWkgdMaw4bujbmcgY8OzIHBo4bqjaSBsw6AgU2V0IG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2V0ID0gPFQgPSBhbnk+KG9iajogYW55KTogb2JqIGlzIFNldDxUPiA9PiB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBTZXQ7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgxJHhu5FpIHTGsOG7o25nIGPDsyBwaOG6o2kgbMOgIEFycmF5IG9iamVjdCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSA8VCA9IGFueT4ob2JqOiBhbnkpOiBvYmogaXMgQXJyYXk8VD4gPT4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIMSR4buRaSB0xrDhu6NuZyBjw7MgcGjhuqNpIGzDoCBvYmplY3QgY+G6p24gdHLhuqMgduG7gSBuZ3V5w6puIHRy4bqhbmcga2jDtG5nXG4gKiBCYW8gZ+G7k206IGRhbmdlcm91cyBvYmplY3RzLCBzcGVjaWFsIG9iamVjdHMsIGRheWpzIG9iamVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmV0dXJuQXNJc09iamVjdCA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNTa2lwcGFibGVPYmplY3Qob2JqKSB8fCBpc0RheWpzT2JqZWN0KG9iaik7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIMSR4buRaSB0xrDhu6NuZyBjw7MgYW4gdG/DoG4gxJHhu4MgY2xvbmUvY29udmVydCBraMO0bmdcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2FmZVRvUHJvY2VzcyA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gIWlzRGFuZ2Vyb3VzT2JqZWN0KG9iaik7XG59O1xuIl19
@@ -2,10 +2,10 @@
2
2
  import { HttpParams } from '@angular/common/http';
3
3
  import { isSignal, signal } from '@angular/core';
4
4
  import dayjs from 'dayjs';
5
- import { isDangerousObject, isReturnAsIsObject } from './dangerous-object';
5
+ import { isArray, isDangerousObject, isDayjsObject, isMap, isRegExp, isReturnAsIsObject, isSet } from './dangerous-object';
6
6
  import { getDayjs } from './date';
7
7
  import { UtilsHttpParamsRequest } from './http-params';
8
- import { convertSignalToObject } from './two-way-signal-object';
8
+ import { convertSignalToObject, unwrapSignal } from './two-way-signal-object';
9
9
  /**Các hàm tương tự thư viện lodash */
10
10
  /**
11
11
  * Kiểm tra xem một giá trị có phải là null hoặc undefined hay không
@@ -19,7 +19,7 @@ import { convertSignalToObject } from './two-way-signal-object';
19
19
  */
20
20
  export const isNil = (value, options) => {
21
21
  if (!options?.ignoreUnWrapSignal) {
22
- value = convertSignalToObject(value);
22
+ value = unwrapSignal(value);
23
23
  }
24
24
  return value === null || value === undefined;
25
25
  };
@@ -38,7 +38,7 @@ export const isNil = (value, options) => {
38
38
  */
39
39
  export const isEmpty = (value, options) => {
40
40
  if (!options?.ignoreUnWrapSignal) {
41
- value = convertSignalToObject(value);
41
+ value = unwrapSignal(value);
42
42
  }
43
43
  if (options?.ignoreCheckTypePrimitive) {
44
44
  return isEmptyTypeObject(value);
@@ -95,7 +95,7 @@ export const isTruthy = (value, options) => {
95
95
  */
96
96
  export const isFalsy = (value, options) => {
97
97
  if (!options?.ignoreUnWrapSignal) {
98
- value = convertSignalToObject(value);
98
+ value = unwrapSignal(value);
99
99
  }
100
100
  if (options?.ignoreZero && value === 0) {
101
101
  return false;
@@ -196,9 +196,7 @@ export const get = (obj, path, defaultValue, keepLastValueIfSignal) => {
196
196
  if (isNil(obj)) {
197
197
  return out(defaultValue);
198
198
  }
199
- while (isSignal(obj)) {
200
- obj = obj();
201
- }
199
+ obj = unwrapSignal(obj);
202
200
  if (path === '') {
203
201
  return out(obj);
204
202
  }
@@ -336,13 +334,13 @@ export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new We
336
334
  if (data instanceof Date) {
337
335
  return new Date(data.getTime());
338
336
  }
339
- if (dayjs.isDayjs(data)) {
337
+ if (isDayjsObject(data)) {
340
338
  return getDayjs({ date: data.valueOf() });
341
339
  }
342
- if (data instanceof RegExp) {
340
+ if (isRegExp(data)) {
343
341
  return new RegExp(data.source, data.flags);
344
342
  }
345
- if (data instanceof Map) {
343
+ if (isMap(data)) {
346
344
  const mapCopy = new Map();
347
345
  seen.set(data, mapCopy);
348
346
  data.forEach((val, key) => {
@@ -350,7 +348,7 @@ export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new We
350
348
  });
351
349
  return mapCopy;
352
350
  }
353
- if (data instanceof Set) {
351
+ if (isSet(data)) {
354
352
  const setCopy = new Set();
355
353
  seen.set(data, setCopy);
356
354
  data.forEach((val) => {
@@ -358,7 +356,7 @@ export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new We
358
356
  });
359
357
  return setCopy;
360
358
  }
361
- if (Array.isArray(data)) {
359
+ if (isArray(data)) {
362
360
  seen.set(data, data.map((item) => cloneDeep(item, options, seen)));
363
361
  return seen.get(data);
364
362
  }
@@ -388,7 +386,7 @@ export const cloneDeep = (data, options = { ignoreSignal: false }, seen = new We
388
386
  result[key] = getDayjs({ date: value.valueOf() });
389
387
  continue;
390
388
  }
391
- if (value instanceof RegExp) {
389
+ if (isRegExp(data)) {
392
390
  result[key] = new RegExp(value.source, value.flags);
393
391
  continue;
394
392
  }
@@ -638,4 +636,4 @@ export const generateInterface = (obj, interfaceName) => {
638
636
  const interfaceStr = `interface ${interfaceName} ${generateType(obj)}`;
639
637
  return interfaceStr;
640
638
  };
641
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQTBCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLHNDQUFzQztBQUN0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBMEMsRUFBNkIsRUFBRTtJQUM3RyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBMkcsRUFBc0MsRUFBRTtJQUN6TCxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLE9B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LE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDNUIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxZQUFZLENBQUM7WUFDdEIsQ0FBQztZQUNELE9BQU8sU0FBUyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzNDLFlBQVksSUFBSSxLQUFLLEdBQUcsS0FBSyxTQUFTLEtBQUssQ0FBQztnQkFDOUMsQ0FBQztZQUNILENBQUM7WUFDRCxZQUFZLElBQUksR0FBRyxDQUFDO1lBQ3BCLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHLGFBQWEsYUFBYSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3ZFLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBTaWduYWwsIFdyaXRhYmxlU2lnbmFsLCBpc1NpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHZXRSZXR1cm5UeXBlLCBHZXRWYWx1ZUF0UGF0aCwgUGF0aE9mLCBUWVBFX09CSkVDVCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB7IGlzRGFuZ2Vyb3VzT2JqZWN0LCBpc1JldHVybkFzSXNPYmplY3QgfSBmcm9tICcuL2Rhbmdlcm91cy1vYmplY3QnO1xuaW1wb3J0IHsgZ2V0RGF5anMgfSBmcm9tICcuL2RhdGUnO1xuaW1wb3J0IHsgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCB9IGZyb20gJy4vaHR0cC1wYXJhbXMnO1xuaW1wb3J0IHsgY29udmVydFNpZ25hbFRvT2JqZWN0IH0gZnJvbSAnLi90d28td2F5LXNpZ25hbC1vYmplY3QnO1xuXG4vKipDw6FjIGjDoG0gdMawxqFuZyB04buxIHRoxrAgdmnhu4duIGxvZGFzaCAqL1xuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIG51bGwgaG/hurdjIHVuZGVmaW5lZCBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwgaG/hurdjIHVuZGVmaW5lZCwgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNOaWwobnVsbCk7IC8vIHRydWVcbiAqIGlzTmlsKHVuZGVmaW5lZCk7IC8vIHRydWVcbiAqIGlzTmlsKDApOyAvLyBmYWxzZVxuICogaXNOaWwoJ2hlbGxvJyk7IC8vIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc05pbCA9ICh2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IHsgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghb3B0aW9ucz8uaWdub3JlVW5XcmFwU2lnbmFsKSB7XG4gICAgdmFsdWUgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIHLhu5duZyBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwsIHLhu5duZyBob+G6t2MgdW5kZWZpbmVkLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc0VtcHR5KG51bGwpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KCcnKTsgLy8gdHJ1ZVxuICogaXNFbXB0eSh1bmRlZmluZWQpOyAvLyB0cnVlXG4gKiBpc0VtcHR5KHt9KTsgLy8gdHJ1ZVxuICogaXNFbXB0eShbXSk7IC8vIHRydWVcbiAqIGlzRW1wdHkoWzEsIDIsIDNdKTsgLy8gZmFsc2VcbiAqIGlzRW1wdHkoeyBhOiAxIH0pOyAvLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNFbXB0eSA9ICh2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IHsgaWdub3JlQ2hlY2tUeXBlUHJpbWl0aXZlPzogYm9vbGVhbjsgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbjsgaWdub3JlQ2hlY2tTdHJpbmc/OiBib29sZWFuIH0pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkIHwgJycgfCAwID0+IHtcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZSA9IGNvbnZlcnRTaWduYWxUb09iamVjdCh2YWx1ZSk7XG4gIH1cbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZUNoZWNrVHlwZVByaW1pdGl2ZSkge1xuICAgIHJldHVybiBpc0VtcHR5VHlwZU9iamVjdCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gaXNFbXB0eVR5cGVQcmltaXRpdmUodmFsdWUsIHsgaWdub3JlQ2hlY2tTdHJpbmc6IG9wdGlvbnM/Lmlnbm9yZUNoZWNrU3RyaW5nIH0pIHx8IGlzRW1wdHlUeXBlT2JqZWN0KHZhbHVlKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBvYmplY3QgcuG7l25nIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6Agb2JqZWN0IHLhu5duZywgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNFbXB0eVR5cGVPYmplY3Qoe30pOyAvLyB0cnVlXG4gKiBpc0VtcHR5VHlwZU9iamVjdCh7IGE6IDEgfSk7IC8vIGZhbHNlXG4gKi9cbmNvbnN0IGlzRW1wdHlUeXBlT2JqZWN0ID0gPFQgPSBudWxsPih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFQgPT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAoSlNPTi5zdHJpbmdpZnkodmFsdWUpID09PSAne30nIHx8IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ1tdJyk7XG59O1xuXG5jb25zdCBpc0VtcHR5VHlwZVByaW1pdGl2ZSA9IDxUID0gbnVsbD4odmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7IGlnbm9yZUNoZWNrU3RyaW5nPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgVCA9PiB7XG4gIGlmIChvcHRpb25zPy5pZ25vcmVDaGVja1N0cmluZyAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdmFsdWUgPT09ICcnIHx8IGlzTmlsKHZhbHVlLCB7IGlnbm9yZVVuV3JhcFNpZ25hbDogdHJ1ZSB9KTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBudWxsLCBy4buXbmcsIHVuZGVmaW5lZCBob+G6t2MgMCBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcGFyYW0gb3B0aW9ucyBD4bqldSBow6xuaCB0w7l5IGNo4buNblxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlWmVybyBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBraeG7g20gdHJhIGdpw6EgdHLhu4sgMFxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsLCBy4buXbmcsIHVuZGVmaW5lZCBob+G6t2MgMCwgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNUcnV0aHkobnVsbCk7IC8vIGZhbHNlXG4gKiBpc1RydXRoeSgnJyk7IC8vIGZhbHNlXG4gKiBpc1RydXRoeSh1bmRlZmluZWQpOyAvLyBmYWxzZVxuICogaXNUcnV0aHkoMCk7IC8vIGZhbHNlXG4gKiBpc1RydXRoeSh7fSk7IC8vIHRydWVcbiAqIGlzVHJ1dGh5KDAsIHsgaWdub3JlWmVybzogdHJ1ZSB9KTsgLy8gdHJ1ZVxuICovXG5cbmV4cG9ydCBjb25zdCBpc1RydXRoeSA9IDxUPih2YWx1ZTogVCwgb3B0aW9ucz86IHsgaWdub3JlWmVybz86IGJvb2xlYW47IGlnbm9yZUNoZWNrU3RyaW5nPzogYm9vbGVhbjsgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgTm9uTnVsbGFibGU8VD4gPT4ge1xuICByZXR1cm4gIWlzRmFsc3kodmFsdWUsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBLaeG7g20gdHJhIHhlbSBt4buZdCBnacOhIHRy4buLIGPDsyBwaOG6o2kgbMOgIG51bGwsIHLhu5duZywgdW5kZWZpbmVkIGhv4bq3YyAwIGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIGtp4buDbSB0cmFcbiAqIEBwYXJhbSBvcHRpb25zIEPhuqV1IGjDrG5oIHTDuXkgY2jhu41uXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVaZXJvIE7hur91IHRydWUsIHPhur0ga2jDtG5nIGtp4buDbSB0cmEgZ2nDoSB0cuG7iyAwXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG51bGwsIHLhu5duZywgdW5kZWZpbmVkIGhv4bq3YyAwLCBmYWxzZSBu4bq/dSBraMO0bmdcbiAqIEBleGFtcGxlXG4gKiBpc0ZhbHN5KG51bGwpOyAvLyB0cnVlXG4gKiBpc0ZhbHN5KCcnKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSh1bmRlZmluZWQpOyAvLyB0cnVlXG4gKiBpc0ZhbHN5KDApOyAvLyB0cnVlXG4gKiBpc0ZhbHN5KHt9KTsgLy8gZmFsc2VcbiAqIGlzRmFsc3koMCwgeyBpZ25vcmVaZXJvOiB0cnVlIH0pOyAvLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNGYWxzeSA9ICh2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IHsgaWdub3JlWmVybz86IGJvb2xlYW47IGlnbm9yZUNoZWNrU3RyaW5nPzogYm9vbGVhbjsgaWdub3JlVW5XcmFwU2lnbmFsPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCB8ICcnIHwgMCA9PiB7XG4gIGlmICghb3B0aW9ucz8uaWdub3JlVW5XcmFwU2lnbmFsKSB7XG4gICAgdmFsdWUgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZVplcm8gJiYgdmFsdWUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAob3B0aW9ucz8uaWdub3JlQ2hlY2tTdHJpbmcgJiYgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICF2YWx1ZTtcbn07XG5cbi8qKlxuICogTG/huqFpIGLhu48gY8OhYyB0aHXhu5ljIHTDrW5oIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBk4buxYSB0csOqbiBt4buZdCBow6BtIMSRaeG7gXUga2nhu4duXG4gKiBAcGFyYW0gb2JqRGF0YSDEkOG7kWkgdMaw4bujbmcgY+G6p24geOG7rSBsw71cbiAqIEBwYXJhbSBwcmVkaWNhdGUgSMOgbSDEkWnhu4F1IGtp4buHbiDEkeG7gyBraeG7g20gdHJhIGdpw6EgdHLhu4sgY+G7p2EgdGh14buZYyB0w61uaC4gTuG6v3UgaMOgbSB0cuG6oyB24buBIHRydWUgdGjDrCB0aHXhu5ljIHTDrW5oIMSRw7Mgc+G6vSBi4buLIGxv4bqhaSBi4buPXG4gKiBAcmV0dXJucyDEkOG7kWkgdMaw4bujbmcgbeG7m2kgc2F1IGtoaSDEkcOjIGxv4bqhaSBi4buPIGPDoWMgdGh14buZYyB0w61uaCB0aOG7j2EgbcOjbiDEkWnhu4F1IGtp4buHblxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogbnVsbCwgYzogMywgZDogdW5kZWZpbmVkIH07XG4gKiBvbWl0Qnkob2JqLCBpc05pbCk7IC8vIHsgYTogMSwgYzogMyB9XG4gKi9cbmV4cG9ydCBjb25zdCBvbWl0QnkgPSA8VD4ob2JqRGF0YTogUmVjb3JkPHN0cmluZywgYW55PiwgcHJlZGljYXRlOiAodmFsOiBhbnkpID0+IGJvb2xlYW4pOiBUID0+IHtcbiAgaWYgKCFvYmpEYXRhIHx8IHR5cGVvZiBvYmpEYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9iakRhdGEpKSB7XG4gICAgcmV0dXJuIG9iakRhdGEgYXMgVDtcbiAgfVxuICBjb25zdCBuZXdPYmogPSB7fSBhcyBUO1xuXG4gIE9iamVjdC5rZXlzKG9iakRhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlT2ZLZXkgPSBnZXQob2JqRGF0YSwga2V5KTtcbiAgICBpZiAoIXByZWRpY2F0ZSh2YWx1ZU9mS2V5KSkge1xuICAgICAgc2V0KG5ld09iaiwga2V5IGFzIFBhdGhPZjxUPiwgdmFsdWVPZktleSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld09iajtcbn07XG5cbi8qKlxuICogTOG6pXkgZ2nDoSB0cuG7iyB04burIMSR4buRaSB0xrDhu6NuZyB0aGVvIMSRxrDhu51uZyBk4bqrbiBjaOG7iSDEkeG7i25oXG4gKlxuICogSMOgbSBuw6B5IGdpw7pwIGLhuqFuIHRydXkgY+G6rXAgdsOgbyBjw6FjIHRodeG7mWMgdMOtbmggc8OidSBiw6puIHRyb25nIG3hu5l0IMSR4buRaSB0xrDhu6NuZyBt4buZdCBjw6FjaCBhbiB0b8OgbixcbiAqIHRyw6FuaCBs4buXaSBraGkgdGh14buZYyB0w61uaCBraMO0bmcgdOG7k24gdOG6oWkuXG4gKlxuICogQHBhcmFtIG9iaiDEkOG7kWkgdMaw4bujbmcgbmd14buTbiBj4bqnbiBs4bqleSBnacOhIHRy4buLXG4gKiBAcGFyYW0gcGF0aCDEkMaw4budbmcgZOG6q24gxJHhur9uIHRodeG7mWMgdMOtbmggY+G6p24gbOG6pXkuIEPDsyB0aOG7gyBsw6A6XG4gKiAgIC0gQ2h14buXaTogJ3VzZXIucHJvZmlsZS5uYW1lJyBob+G6t2MgJ2l0ZW1zWzBdLnRpdGxlJ1xuICogICAtIE3huqNuZzogWyd1c2VyJywgJ3Byb2ZpbGUnLCAnbmFtZSddIGhv4bq3YyBbJ2l0ZW1zJywgJzAnLCAndGl0bGUnXVxuICogICAtIENodeG7l2kgcuG7l25nICcnOiB0cuG6oyB24buBIGNow61uaCDEkeG7kWkgdMaw4bujbmcgZ+G7kWNcbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgR2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oIHRy4bqjIHbhu4Ega2hpIGtow7RuZyB0w6xtIHRo4bqleSB0aHXhu5ljIHTDrW5oICht4bq3YyDEkeG7i25oOiB1bmRlZmluZWQpXG4gKiBAcGFyYW0ga2VlcExhc3RWYWx1ZUlmU2lnbmFsIEPDsyBnaeG7ryBuZ3V5w6puIHNpZ25hbCBjdeG7kWkgY8O5bmcgaGF5IGtow7RuZyAobeG6t2MgxJHhu4tuaDogZmFsc2UgLSBz4bq9IGfhu41pIHNpZ25hbCgpKVxuICogQHJldHVybnMgR2nDoSB0cuG7iyB0w6xtIMSRxrDhu6NjIGhv4bq3YyBnacOhIHRy4buLIG3hurdjIMSR4buLbmhcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVsOtIGThu6UgY8ahIGLhuqNuXG4gKiBjb25zdCB1c2VyID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAgfTtcbiAqIGdldCh1c2VyLCAnbmFtZScpOyAvLyAnSm9obidcbiAqIGdldCh1c2VyLCAnZW1haWwnKTsgLy8gdW5kZWZpbmVkXG4gKiBnZXQodXNlciwgJ2VtYWlsJywgJ25vLWVtYWlsJyk7IC8vICduby1lbWFpbCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJ1eeG7gW4gcGF0aCBy4buXbmcgLSB0cuG6oyB24buBIGNow61uaCDEkeG7kWkgdMaw4bujbmcgZ+G7kWNcbiAqIGNvbnN0IGRhdGEgPSB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfTtcbiAqIGdldChkYXRhLCAnJyk7IC8vIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAyNSB9IChjaMOtbmggxJHhu5FpIHTGsOG7o25nIGRhdGEpXG4gKiBnZXQoZGF0YSwgJycsICdkZWZhdWx0Jyk7IC8vIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAyNSB9IChi4buPIHF1YSBkZWZhdWx0VmFsdWUpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRydXkgY+G6rXAgdGh14buZYyB0w61uaCBzw6J1XG4gKiBjb25zdCBkYXRhID0ge1xuICogICB1c2VyOiB7XG4gKiAgICAgcHJvZmlsZToge1xuICogICAgICAgbmFtZTogJ0FsaWNlJyxcbiAqICAgICAgIHNldHRpbmdzOiB7IHRoZW1lOiAnZGFyaycgfVxuICogICAgIH1cbiAqICAgfVxuICogfTtcbiAqIGdldChkYXRhLCAndXNlci5wcm9maWxlLm5hbWUnKTsgLy8gJ0FsaWNlJ1xuICogZ2V0KGRhdGEsICd1c2VyLnByb2ZpbGUuc2V0dGluZ3MudGhlbWUnKTsgLy8gJ2RhcmsnXG4gKiBnZXQoZGF0YSwgJ3VzZXIucHJvZmlsZS5hdmF0YXInLCAnZGVmYXVsdC5qcGcnKTsgLy8gJ2RlZmF1bHQuanBnJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcnV5IGPhuq1wIG3huqNuZ1xuICogY29uc3QgaXRlbXMgPSBbXG4gKiAgIHsgbmFtZTogJ0l0ZW0gMScsIHByaWNlOiAxMDAgfSxcbiAqICAgeyBuYW1lOiAnSXRlbSAyJywgcHJpY2U6IDIwMCB9XG4gKiBdO1xuICogZ2V0KGl0ZW1zLCAnWzBdLm5hbWUnKTsgLy8gJ0l0ZW0gMSdcbiAqIGdldChpdGVtcywgJ1sxXS5uYW1lJyk7IC8vICdJdGVtIDInXG4gKiBnZXQoaXRlbXMsICdbMl0ubmFtZScsICdOb3QgZm91bmQnKTsgLy8gJ05vdCBmb3VuZCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU+G7rSBk4bulbmcgduG7m2kgbeG6o25nIHBhdGhcbiAqIGNvbnN0IG5lc3RlZCA9IHsgYTogeyBiOiB7IGM6ICdkZWVwIHZhbHVlJyB9IH0gfTtcbiAqIGdldChuZXN0ZWQsIFsnYScsICdiJywgJ2MnXSk7IC8vICdkZWVwIHZhbHVlJ1xuICogZ2V0KG5lc3RlZCwgWydhJywgJ2InLCAnZCddLCAnZGVmYXVsdCcpOyAvLyAnZGVmYXVsdCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHLGsOG7nW5nIGjhu6NwIMSR4bq3YyBiaeG7h3RcbiAqIGdldChudWxsLCAnYW55LnBhdGgnKTsgLy8gdW5kZWZpbmVkXG4gKiBnZXQodW5kZWZpbmVkLCAnYW55LnBhdGgnLCAnZmFsbGJhY2snKTsgLy8gJ2ZhbGxiYWNrJ1xuICovXG5leHBvcnQgY29uc3QgZ2V0ID0gPE8sIFAgZXh0ZW5kcyBQYXRoT2Y8Tz4gPSBQYXRoT2Y8Tz4sIEtTIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlLCBEIGV4dGVuZHMgR2V0VmFsdWVBdFBhdGg8TywgUCwgS1M+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgb2JqOiBTaWduYWw8Tz4gfCBPLFxuICBwYXRoOiBQLFxuICBkZWZhdWx0VmFsdWU/OiBELFxuICBrZWVwTGFzdFZhbHVlSWZTaWduYWw/OiBLU1xuKTogR2V0UmV0dXJuVHlwZTxPLCBQLCBLUywgRD4gPT4ge1xuICAvLyBoZWxwZXIgY2FzdCDEkeG7gyB0csOhbmggbOG6t3AgbOG6oWkga2nhu4N1IMSRaeG7gXUga2nhu4duIOG7nyBjw6FjIHJldHVyblxuICBjb25zdCBvdXQgPSAodjogdW5rbm93bikgPT4gdiBhcyBHZXRSZXR1cm5UeXBlPE8sIFAsIEtTLCBEPjtcblxuICBpZiAoaXNOaWwob2JqKSkge1xuICAgIHJldHVybiBvdXQoZGVmYXVsdFZhbHVlKTtcbiAgfVxuICB3aGlsZSAoaXNTaWduYWwob2JqKSkge1xuICAgIG9iaiA9IG9iaigpO1xuICB9XG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIHJldHVybiBvdXQob2JqKTtcbiAgfVxuICBpZiAob2JqIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBvdXQob2JqLmdldChgJHtwYXRofWApID8/IGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIERPTVJlY3QpIHtcbiAgICByZXR1cm4gb3V0KG9ialtwYXRoIGFzIGtleW9mIERPTVJlY3RdKTtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgID8gcGF0aFxuICAgIDogKHBhdGggYXMgc3RyaW5nKVxuICAgICAgICAucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnLiQxJylcbiAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkpO1xuICBmb3IgKGNvbnN0IGluZGV4IGluIHBhdGhzKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aHNbaW5kZXhdO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG4gICAgICBvYmogPSBvYmpba2V5IGFzIGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25dIGFzIE87XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIG9iaiA9IG9ialtrZXkgYXMga2V5b2YgSFRNTEVsZW1lbnRdIGFzIE87XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzTmlsKG9iaikgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHJldHVybiBvdXQoZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWwgPSBpc1NpZ25hbCgob2JqIGFzIGFueSlba2V5XSkgJiYgIWtlZXBMYXN0VmFsdWVJZlNpZ25hbCA/IChvYmogYXMgYW55KVtrZXldKCkgOiAob2JqIGFzIGFueSlba2V5XTtcblxuICAgIG9iaiA9IHZhbCBhcyBPO1xuICB9XG5cbiAgcmV0dXJuIG91dChvYmogPz8gZGVmYXVsdFZhbHVlKTtcbn07XG5cbi8qKlxuICogVGhp4bq/dCBs4bqtcCBnacOhIHRy4buLIGNobyBt4buZdCB0aHXhu5ljIHTDrW5oIHRyb25nIMSR4buRaSB0xrDhu6NuZyB0aGVvIMSRxrDhu51uZyBk4bqrbiBjaOG7iSDEkeG7i25oXG4gKiBAcGFyYW0gb2JqIMSQ4buRaSB0xrDhu6NuZyBj4bqnbiB0aGnhur90IGzhuq1wIGdpw6EgdHLhu4tcbiAqIEBwYXJhbSBwYXRoIMSQxrDhu51uZyBk4bqrbiDEkeG6v24gdGh14buZYyB0w61uaCwgY8OzIHRo4buDIGzDoCBjaHXhu5dpICh2ZDogJ2EuYi5jJykgaG/hurdjIG3huqNuZyAodmQ6IFsnYScsICdiJywgJ2MnXSlcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIHRoaeG6v3QgbOG6rXBcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyBzYXUga2hpIMSRw6MgdGhp4bq/dCBs4bqtcCBnacOhIHRy4buLXG4gKiBAdGhyb3dzIEVycm9yIG7hur91IHRoYW0gc+G7kSDEkeG6p3UgdGnDqm4ga2jDtG5nIHBo4bqjaSBsw6AgxJHhu5FpIHTGsOG7o25nXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JqID0geyBhOiB7IGI6IDEgfSB9O1xuICogc2V0KG9iaiwgJ2EuYicsIDIpOyAvLyB7IGE6IHsgYjogMiB9IH1cbiAqL1xuZXhwb3J0IGNvbnN0IHNldCA9IDxPLCBQIGV4dGVuZHMgUGF0aE9mPE8+ID0gUGF0aE9mPE8+LCBUIGV4dGVuZHMgR2V0VmFsdWVBdFBhdGg8TywgUCwgdHJ1ZT4gPSBHZXRWYWx1ZUF0UGF0aDxPLCBQLCB0cnVlPj4oXG4gIG9iajogU2lnbmFsPE8+IHwgTyxcbiAgcGF0aDogUCxcbiAgdmFsdWU6IFQsXG4gIG9wdGlvbnM/OiB7IHZhbHVlRGVmYXVsdFBhdGhPYmplY3RVbmRlZmluZWQ/OiBhbnk7IHZhbHVlRGVmYXVsdFBhdGhBcnJheVVuZGVmaW5lZD86IGFueSB9XG4pOiBPID0+IHtcbiAgaWYgKCFvYmogfHwgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmICFpc1NpZ25hbChvYmopKSB8fCAoaXNTaWduYWwob2JqKSAmJiB0eXBlb2Ygb2JqKCkgIT09ICdvYmplY3QnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAob2JqIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBvYmouc2V0KGAke3BhdGh9YCwgdmFsdWUgYXMgc3RyaW5nKSBhcyBPO1xuICB9XG5cbiAgY29uc3QgcGF0aEFycmF5ID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgID8gcGF0aFxuICAgIDogKHBhdGggYXMgc3RyaW5nKVxuICAgICAgICAucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnLlskMV0nKVxuICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSk7XG5cbiAgbGV0IGN1cnJlbnRPYmplY3RCeUtleTogYW55ID0gaXNTaWduYWwob2JqKSA/IG9iaigpIDogb2JqO1xuICBsZXQgcHJlT2JqZWN0QnlLZXkgPSBvYmo7XG5cbiAgcGF0aEFycmF5LmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPCBwYXRoQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKCEoa2V5IGluIGN1cnJlbnRPYmplY3RCeUtleSkgfHwgKHR5cGVvZiBjdXJyZW50T2JqZWN0QnlLZXlba2V5XSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleVtrZXldKSkpIHtcbiAgICAgICAgY29uc3QgbmV4dEtleSA9IHBhdGhBcnJheVtpbmRleCArIDFdO1xuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnJDEnKTtcbiAgICAgICAgaWYgKGlzTmlsKGN1cnJlbnRPYmplY3RCeUtleVtrZXldKSkge1xuICAgICAgICAgIGN1cnJlbnRPYmplY3RCeUtleVtrZXldID0gL1xcWyhcXGQrKV0vZy50ZXN0KG5leHRLZXkpID8gKG9wdGlvbnM/LnZhbHVlRGVmYXVsdFBhdGhBcnJheVVuZGVmaW5lZCA/PyBbXSkgOiAob3B0aW9ucz8udmFsdWVEZWZhdWx0UGF0aE9iamVjdFVuZGVmaW5lZCA/PyB7fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN1cnJlbnRPYmplY3RCeUtleSA9IGtleSA/IGN1cnJlbnRPYmplY3RCeUtleVtrZXldIDogY3VycmVudE9iamVjdEJ5S2V5O1xuICAgICAgcHJlT2JqZWN0QnlLZXkgPSBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICBjdXJyZW50T2JqZWN0QnlLZXkgPSBpc1NpZ25hbChjdXJyZW50T2JqZWN0QnlLZXkpID8gY3VycmVudE9iamVjdEJ5S2V5KCkgOiBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50T2JqZWN0QnlLZXkgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR8OhbiBnacOhIHRy4buLIOG7nyBjdeG7kWkgxJHGsOG7nW5nIGThuqtuXG4gICAga2V5ID0ga2V5LnJlcGxhY2UoL1xcWyhcXGQrKV0vZywgJyQxJyk7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGN1cnJlbnRPYmplY3RCeUtleVtrZXldO1xuICAgIGNvbnN0IHZhbHVlT2ZLZXlJc1NpZ25hbCA9IGlzU2lnbmFsKHZhbHVlT2ZLZXkpO1xuXG4gICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCAmJiAodHlwZW9mIHZhbHVlT2ZLZXkoKSAhPT0gJ29iamVjdCcgfHwgdmFsdWVPZktleSgpID09PSBudWxsKSkge1xuICAgICAgKHZhbHVlT2ZLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55Pikuc2V0KGlzU2lnbmFsKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1NpZ25hbChwcmVPYmplY3RCeUtleSkpIHtcbiAgICAgIChwcmVPYmplY3RCeUtleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS51cGRhdGUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhT2ZLZXkgPSBkYXRhW2tleV07XG4gICAgICAgIGlmIChpc05pbChkYXRhT2ZLZXkpIHx8ICF2YWx1ZU9mS2V5SXNTaWduYWwpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZU9mS2V5SXNTaWduYWwpIHtcbiAgICAgICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIFsuLi5kYXRhXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5kYXRhIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgKHZhbHVlT2ZLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55Pikuc2V0KGlzU2lnbmFsKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnJlbnRPYmplY3RCeUtleVtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiBvYmogYXMgTztcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgYuG6o24gc2FvIHPDonUgY+G7p2EgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBnacOhIHRy4buLIGLhuqV0IGvhu7NcbiAqIEBwYXJhbSBkYXRhIEThu68gbGnhu4d1IGPhuqduIHNhbyBjaMOpcFxuICogQHBhcmFtIG9wdGlvbnMgVMO5eSBjaOG7jW4gY+G6pXUgaMOsbmhcbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVNpZ25hbCBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBzYW8gY2jDqXAgY8OhYyBzaWduYWwgbcOgIHRy4bqjIHbhu4Egc2lnbmFsIGfhu5FjXG4gKiBAcGFyYW0gc2VlbiBXZWFrTWFwIMSR4buDIHRoZW8gZMO1aSBjw6FjIHRoYW0gY2hp4bq/dSDEkcOjIMSRxrDhu6NjIHNhbyBjaMOpcCwgdHLDoW5oIGzhurdwIHbDtCBo4bqhbiB24bubaSBjw6FjIHRoYW0gY2hp4bq/dSB2w7JuZ1xuICogQHJldHVybnMgQuG6o24gc2FvIHPDonUgY+G7p2EgZOG7ryBsaeG7h3UgxJHhuqd1IHbDoG9cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIGE6IDEsXG4gKiAgIGI6IHsgYzogMiB9LFxuICogICBkOiBbMSwgMiwgM11cbiAqIH07XG4gKiBjb25zdCBjbG9uZSA9IGNsb25lRGVlcChvYmopO1xuICogLy8gY2xvbmUgbMOgIG3hu5l0IGLhuqNuIHNhbyBob8OgbiB0b8OgbiDEkeG7mWMgbOG6rXAgY+G7p2Egb2JqXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZURlZXAgPSA8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zID0geyBpZ25vcmVTaWduYWw6IGZhbHNlIH0sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogVCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8ICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGRhdGEpKSB8fCBpc0Rhbmdlcm91c09iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRhLmdldFRpbWUoKSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGEpKSB7XG4gICAgcmV0dXJuIGdldERheWpzKHsgZGF0ZTogZGF0YS52YWx1ZU9mKCkgfSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoZGF0YS5zb3VyY2UsIGRhdGEuZmxhZ3MpIGFzIFQ7XG4gIH1cblxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgIGNvbnN0IG1hcENvcHkgPSBuZXcgTWFwKCk7XG4gICAgc2Vlbi5zZXQoZGF0YSwgbWFwQ29weSk7XG4gICAgZGF0YS5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgbWFwQ29weS5zZXQoY2xvbmVEZWVwKGtleSwgb3B0aW9ucywgc2VlbiksIGNsb25lRGVlcCh2YWwsIG9wdGlvbnMsIHNlZW4pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwQ29weSBhcyBUO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICBjb25zdCBzZXRDb3B5ID0gbmV3IFNldCgpO1xuICAgIHNlZW4uc2V0KGRhdGEsIHNldENvcHkpO1xuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBzZXRDb3B5LmFkZChjbG9uZURlZXAodmFsLCBvcHRpb25zLCBzZWVuKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldENvcHkgYXMgVDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YS5tYXAoKGl0ZW0pID0+IGNsb25lRGVlcChpdGVtLCBvcHRpb25zLCBzZWVuKSkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpIGFzIFQ7XG4gIH1cblxuICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgfVxuXG4gIGlmIChpc1NpZ25hbChkYXRhKSkge1xuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTaWduYWwpIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIHNpZ25hbChjbG9uZURlZXAoZGF0YSgpLCBvcHRpb25zLCBzZWVuKSkpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHNlZW4uc2V0KGRhdGEsIHJlc3VsdCk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgdmFsdWUpIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBEYXRlKHZhbHVlLmdldFRpbWUoKSkgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChkYXlqcy5pc0RheWpzKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBnZXREYXlqcyh7IGRhdGU6IHZhbHVlLnZhbHVlT2YoKSB9KSBhcyBUO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBSZWdFeHAodmFsdWUuc291cmNlLCB2YWx1ZS5mbGFncykgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGNsb25lRGVlcCh2YWx1ZSwgb3B0aW9ucywgc2Vlbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufTtcblxuLyoqXG4gKiBDaHV54buDbiDEkeG7lWkgbeG7mXQgbeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRow6BuaCBt4buZdCDEkeG7kWkgdMaw4bujbmcgduG7m2kga2jDs2EgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIGRhdGEgTeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIGNodXnhu4NuIMSR4buVaVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSB0cm9uZyDEkeG7kWkgdMaw4bujbmcga+G6v3QgcXXhuqNcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyB24bubaSBjw6FjIGdpw6EgdHLhu4sgdOG7qyBt4bqjbmcgxJHGsOG7o2MgxJHDoW5oIGtleSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiBdO1xuICoga2V5QnkoZGF0YSwgJ2lkJyk7XG4gKiAvLyBL4bq/dCBxdeG6ozoge1xuICogLy8gICAnMSc6IHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogLy8gICAnMic6IHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiAvLyB9XG4gKi9cbmV4cG9ydCBjb25zdCBrZXlCeSA9IChkYXRhOiBBcnJheTxUWVBFX09CSkVDVD4sIGtleTogc3RyaW5nKTogVFlQRV9PQkpFQ1QgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoIHx8ICFrZXkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIGRhdGEucmVkdWNlKChkaXIsIG5leHRJdGVtKSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChuZXh0SXRlbSwga2V5IGFzIFBhdGhPZjxUWVBFX09CSkVDVD4pO1xuICAgIGlmICh0eXBlb2YgdmFsdWVPZktleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoZGlyKS5pbmNsdWRlcyhgJHt2YWx1ZU9mS2V5fWApKSB7XG4gICAgICBkaXJbYCR7dmFsdWVPZktleX1gXSA9IG5leHRJdGVtO1xuICAgIH1cbiAgICByZXR1cm4gZGlyO1xuICB9LCB7fSk7XG59O1xuXG4vKipcbiAqIE5ow7NtIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRyb25nIG3hu5l0IG3huqNuZyB0aMOgbmggY8OhYyBuaMOzbSBk4buxYSB0csOqbiBt4buZdCB0aHXhu5ljIHTDrW5oIGPhu6UgdGjhu4NcbiAqIEBwYXJhbSBkYXRhIE3huqNuZyBjw6FjIMSR4buRaSB0xrDhu6NuZyBj4bqnbiBuaMOzbVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSBuaMOzbVxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHbhu5tpIGPDoWMgZ2nDoSB0cuG7iyB04burIG3huqNuZyDEkcaw4bujYyBuaMOzbSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9LFxuICogICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogXTtcbiAqIGdyb3VwQnkoZGF0YSwgJ2lkJyk7XG4gKiAvLyBL4bq/dCBxdeG6ozoge1xuICogLy8gICAnMSc6IFtcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogLy8gICBdLFxuICogLy8gICAnMic6IFtcbiAqIC8vICAgICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfVxuICogLy8gfVxuICovXG5leHBvcnQgY29uc3QgZ3JvdXBCeSA9IChkYXRhOiBBcnJheTxUWVBFX09CSkVDVD4sIGtleTogc3RyaW5nKTogVFlQRV9PQkpFQ1QgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoIHx8ICFPYmplY3Qua2V5cyhnZXQoZGF0YSwgJ1swXScpKS5sZW5ndGggfHwgIWtleSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gZGF0YS5yZWR1Y2UoKGRpciwgbmV4dEl0ZW0pID0+IHtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gZ2V0KG5leHRJdGVtLCBrZXkgYXMgUGF0aE9mPFRZUEVfT0JKRUNUPik7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhkaXIpLmluY2x1ZGVzKGAke3ZhbHVlT2ZLZXl9YCkpIHtcbiAgICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdID0gW107XG4gICAgfVxuICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdLnB1c2gobmV4dEl0ZW0pO1xuICAgIHJldHVybiBkaXI7XG4gIH0sIHt9KTtcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgbeG6o25nIGPDoWMgc+G7kSB04burIGdpw6EgdHLhu4sgYuG6r3QgxJHhuqd1IMSR4bq/biBnacOhIHRy4buLIGvhur90IHRow7pjIHbhu5tpIGLGsOG7m2MgbmjhuqN5IHTDuXkgY2jhu41uXG4gKiBAcGFyYW0gc3RhcnQgR2nDoSB0cuG7iyBi4bqvdCDEkeG6p3UgY+G7p2EgZMOjeSBz4buRLiBO4bq/dSBjaOG7iSBjw7MgbeG7mXQgdGhhbSBz4buRLCDEkcOieSBz4bq9IGzDoCBnacOhIHRy4buLIGvhur90IHRow7pjIHbDoCBnacOhIHRy4buLIGLhuq90IMSR4bqndSBz4bq9IGzDoCAwXG4gKiBAcGFyYW0gZW5kIEdpw6EgdHLhu4sga+G6v3QgdGjDumMgY+G7p2EgZMOjeSBz4buRICh0w7l5IGNo4buNbilcbiAqIEBwYXJhbSBzdGVwIELGsOG7m2MgbmjhuqN5IGdp4buvYSBjw6FjIHPhu5EgdHJvbmcgZMOjeSAodMO5eSBjaOG7jW4pLiBN4bq3YyDEkeG7i25oIGzDoCAxIG7hur91IGVuZCA+IHN0YXJ0LCAtMSBu4bq/dSBlbmQgPCBzdGFydFxuICogQHJldHVybnMgTeG6o25nIGPDoWMgc+G7kSB04burIHN0YXJ0IMSR4bq/biBlbmQgduG7m2kgYsaw4bubYyBuaOG6o3kgc3RlcFxuICogQGV4YW1wbGVcbiAqIHJhbmdlKDQpOyAgICAgIC8vIFswLCAxLCAyLCAzXVxuICogcmFuZ2UoMSwgNSk7ICAgLy8gWzEsIDIsIDMsIDRdXG4gKiByYW5nZSgwLCAyMCwgNSk7IC8vIFswLCA1LCAxMCwgMTVdXG4gKiByYW5nZSg1LCAyKTsgICAvLyBbNSwgNCwgM11cbiAqL1xuZXhwb3J0IGNvbnN0IHJhbmdlID0gKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlciwgc3RlcD86IG51bWJlcik6IEFycmF5PG51bWJlcj4gPT4ge1xuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID09PSBudWxsKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKCFzdGVwKSB7XG4gICAgc3RlcCA9IGVuZCA8IDAgPyAtMSA6IDE7XG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQgJiYgc3RlcCA+IDApIHtcbiAgICBzdGVwICo9IC0xO1xuICB9XG5cbiAgY29uc3QgdmFsdWVTdGFydEJ5U3RlcCA9IHN0ZXAgKyBzdGFydDtcbiAgY29uc3QgZGlyZWN0aW9uID0gc3RhcnQgPCBlbmQgPyAnYXNjJyA6ICdkZXNjJztcbiAgaWYgKChkaXJlY3Rpb24gPT09ICdhc2MnICYmICh2YWx1ZVN0YXJ0QnlTdGVwIDwgc3RhcnQgfHwgdmFsdWVTdGFydEJ5U3RlcCA+IGVuZCkpIHx8IChkaXJlY3Rpb24gPT09ICdkZXNjJyAmJiAodmFsdWVTdGFydEJ5U3RlcCA+IHN0YXJ0IHx8IHZhbHVlU3RhcnRCeVN0ZXAgPCBlbmQpKSkge1xuICAgIHJldHVybiBbc3RhcnRdO1xuICB9XG5cbiAgY29uc3QgYXJyID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5hYnMoZW5kIC0gc3RhcnQpOyBpbmRleCsrKSB7XG4gICAgbGV0IHZhbHVlID0gc3RhcnQgKyBpbmRleCAqIHN0ZXA7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmICgoZGlyZWN0aW9uID09PSAnYXNjJyAmJiAodmFsdWUgPCBzdGFydCB8fCB2YWx1ZSA+IGVuZCkpIHx8IChkaXJlY3Rpb24gPT09ICdkZXNjJyAmJiAodmFsdWUgPiBzdGFydCB8fCB2YWx1ZSA8IGVuZCkpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cblxuICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIFNvIHPDoW5oIGhhaSBnacOhIHRy4buLIGLhuqV0IGvhu7MgY8OzIGLhurFuZyBuaGF1IGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZTEgR2nDoSB0cuG7iyB0aOG7qSBuaOG6pXQgY+G6p24gc28gc8OhbmhcbiAqIEBwYXJhbSB2YWx1ZTIgR2nDoSB0cuG7iyB0aOG7qSBoYWkgY+G6p24gc28gc8OhbmhcbiAqIEBwYXJhbSBleGFjdGx5UG9zaXRpb24gQ8OzIHNvIHPDoW5oIGNow61uaCB4w6FjIHbhu4sgdHLDrSBjw6FjIHBo4bqnbiB04butIHRyb25nIG3huqNuZyBoYXkga2jDtG5nXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGhhaSBnacOhIHRy4buLIGLhurFuZyBuaGF1LCBmYWxzZSBu4bq/dSBraMO0bmcgYuG6sW5nIG5oYXVcbiAqIEBleGFtcGxlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFsxLDIsM10pOyAvLyB0cnVlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFszLDIsMV0pOyAvLyB0cnVlIGtoaSBleGFjdGx5UG9zaXRpb24gPSBmYWxzZVxuICogaXNFcXVhbChbMSwyLDNdLCBbMywyLDFdKTsgLy8gZmFsc2Uga2hpIGV4YWN0bHlQb3NpdGlvbiA9IHRydWVcbiAqIGlzRXF1YWwoe2E6MX0sIHthOjF9KTsgLy8gdHJ1ZVxuICovXG5leHBvcnQgY29uc3QgaXNFcXVhbCA9IChcbiAgdmFsdWUxOiBhbnksXG4gIHZhbHVlMjogYW55LFxuICBvcHRpb25zPzoge1xuICAgIGV4YWN0bHlQb3NpdGlvbj86IGJvb2xlYW47XG4gICAgaWdub3JlRXhhY3RseURhdGFUeXBlPzogYm9vbGVhbjtcbiAgICBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuO1xuICB9XG4pOiBib29sZWFuID0+IHtcbiAgLy8gSGFuZGxlIHNpZ25hbHNcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZTEgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUxKTtcbiAgICB2YWx1ZTIgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUyKTtcbiAgfVxuICBjb25zdCB7IGV4YWN0bHlQb3NpdGlvbiA9IGZhbHNlLCBpZ25vcmVFeGFjdGx5RGF0YVR5cGUgPSBmYWxzZSB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAodmFsdWUxID09PSB2YWx1ZTIgfHwgKHZhbHVlMSA9PT0gbnVsbCAmJiB2YWx1ZTIgPT09IG51bGwpIHx8ICh2YWx1ZTEgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZTIgPT09IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpZ25vcmVFeGFjdGx5RGF0YVR5cGUpIHtcbiAgICByZXR1cm4gaXNFcXVhbChpc05pbCh2YWx1ZTEpID8gdW5kZWZpbmVkIDogYCR7dmFsdWUxfWAsIGlzTmlsKHZhbHVlMikgPyB1bmRlZmluZWQgOiBgJHt2YWx1ZTJ9YCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlMiAhPT0gJ29iamVjdCcgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB8fCAoIUFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlMikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUxKSkge1xuICAgIGlmICh2YWx1ZTEubGVuZ3RoICE9PSB2YWx1ZTIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghZXhhY3RseVBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gIXZhbHVlMS5zb21lKChpdGVtKSA9PiAhdmFsdWUyLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXZhbHVlMS5zb21lKChpdGVtLCBpbmRleCkgPT4gIWlzRXF1YWwoaXRlbSwgdmFsdWUyW2luZGV4XSwgb3B0aW9ucykpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHZhbHVlMSkubGVuZ3RoICE9PSBPYmplY3Qua2V5cyh2YWx1ZTIpLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gIU9iamVjdC5rZXlzKHZhbHVlMSkuc29tZSgoa2V5KSA9PiAhaXNFcXVhbCh2YWx1ZTFba2V5XSwgdmFsdWUyW2tleV0sIG9wdGlvbnMpKTtcbn07XG5cbi8qKlxuICogTG/huqFpIGLhu48gY8OhYyBwaOG6p24gdOG7rSB0csO5bmcgbOG6t3AgdHJvbmcgbeG6o25nIGThu7FhIHRyw6puIG3hu5l0IHRodeG7mWMgdMOtbmggY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIGRhdGEgTeG6o25nIGThu68gbGnhu4d1IGPhuqduIHjhu60gbMO9XG4gKiBAcGFyYW0ga2V5IFTDqm4gdGh14buZYyB0w61uaCBkw7luZyDEkeG7gyBzbyBzw6FuaCB0csO5bmcgbOG6t3AuIE7hur91IGtow7RuZyBjw7Mga2V5IHRow6wgc28gc8OhbmggdHLhu7FjIHRp4bq/cCBnacOhIHRy4buLXG4gKiBAcmV0dXJucyBN4bqjbmcgbeG7m2kgY2jhu6lhIGPDoWMgcGjhuqduIHThu60ga2jDtG5nIHRyw7luZyBs4bq3cFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFyciA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0EnIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdCJyB9LFxuICogICB7IGlkOiAxLCBuYW1lOiAnQycgfVxuICogXTtcbiAqIHVuaXFCeShhcnIsICdpZCcpOyAvLyBbeyBpZDogMSwgbmFtZTogJ0EnIH0sIHsgaWQ6IDIsIG5hbWU6ICdCJyB9XVxuICpcbiAqIGNvbnN0IG51bWJlcnMgPSBbMSwgMiwgMiwgMywgM107XG4gKiB1bmlxQnkobnVtYmVycyk7IC8vIFsxLCAyLCAzXVxuICpcbiAqIGNvbnN0IG51bWJlcnNTaWduYWwgPSBbc2lnbmFsKDEpLCBzaWduYWwoMiksIHNpZ25hbCgzKSwgc2lnbmFsKDIpLCBzaWduYWwoNSksIHNpZ25hbCg0KSwgc2lnbmFsKDEpLCBzaWduYWwoNiksIHNpZ25hbCg3KSwgc2lnbmFsKDYpXTtcbiAqIHVuaXFCeShudW1iZXJzU2lnbmFsKTsgLy8gW3NpZ25hbCgxKSwgc2lnbmFsKDIpLCBzaWduYWwoMyksIHNpZ25hbCg1KSwgc2lnbmFsKDQpLCBzaWduYWwoNiksIHNpZ25hbCg3KV1cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXFCeSA9IDxUPihkYXRhOiBBcnJheTxUPiwga2V5Pzogc3RyaW5nKTogQXJyYXk8VD4gPT4ge1xuICBpZiAoIWtleSB8fCAhZGF0YT8ubGVuZ3RoIHx8IHR5cGVvZiBnZXQoZGF0YSwgJ1swXScpICE9PSAnb2JqZWN0Jykge1xuICAgIC8vIFjhu60gbMO9IG3huqNuZyBjaOG7qWEgc2lnbmFsIHZhbHVlc1xuICAgIGlmIChkYXRhWzBdICYmIGlzU2lnbmFsKGRhdGFbMF0pKSB7XG4gICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIHJldHVybiBkYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGAke2dldDxhbnk+KGl0ZW0sICcnKX1gO1xuICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gWOG7rSBsw70gbeG6o25nIHByaW1pdGl2ZSB2YWx1ZXNcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEpKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFVbmlxdWUgPSBrZXlCeShkYXRhIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+LCBrZXkpO1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhkYXRhVW5pcXVlKS5tYXAoKGtleSkgPT4gZGF0YVVuaXF1ZVtrZXldKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUludGVyZmFjZSA9IChvYmo6IGFueSwgaW50ZXJmYWNlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZ2VuZXJhdGVUeXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuICdib29sZWFuJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJ2FueSc7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuICdEYXRlJztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAnUmVnRXhwJztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdBcnJheTxhbnk+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiBgQXJyYXk8JHtnZW5lcmF0ZVR5cGUodmFsdWVbMF0pfT5gO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgbGV0IGludGVyZmFjZVN0ciA9ICd7XFxuJztcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSBnZW5lcmF0ZVR5cGUodmFsdWVba2V5XSk7XG4gICAgICAgICAgaW50ZXJmYWNlU3RyICs9IGAgICR7a2V5fTogJHt2YWx1ZVR5cGV9O1xcbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGludGVyZmFjZVN0ciArPSAnfSc7XG4gICAgICByZXR1cm4gaW50ZXJmYWNlU3RyO1xuICAgIH1cblxuICAgIHJldHVybiAnYW55JztcbiAgfTtcblxuICBjb25zdCBpbnRlcmZhY2VTdHIgPSBgaW50ZXJmYWNlICR7aW50ZXJmYWNlTmFtZX0gJHtnZW5lcmF0ZVR5cGUob2JqKX1gO1xuICByZXR1cm4gaW50ZXJmYWNlU3RyO1xufTtcbiJdfQ==
639
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQTBCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlFLHNDQUFzQztBQUN0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsT0FBMEMsRUFBNkIsRUFBRTtJQUM3RyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBYyxFQUFFLE9BQTJHLEVBQXNDLEVBQUU7SUFDekwsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLEtB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QUFDO1lBQzFCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQztZQUM1QixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLFlBQVksQ0FBQztZQUN0QixDQUFDO1lBQ0QsT0FBTyxTQUFTLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzVDLENBQUM7UUFFRCxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3JELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0MsWUFBWSxJQUFJLEtBQUssR0FBRyxLQUFLLFNBQVMsS0FBSyxDQUFDO2dCQUM5QyxDQUFDO1lBQ0gsQ0FBQztZQUNELFlBQVksSUFBSSxHQUFHLENBQUM7WUFDcEIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsYUFBYSxhQUFhLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDdkUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFNpZ25hbCwgV3JpdGFibGVTaWduYWwsIGlzU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdldFJldHVyblR5cGUsIEdldFZhbHVlQXRQYXRoLCBQYXRoT2YsIFRZUEVfT0JKRUNUIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNEYW5nZXJvdXNPYmplY3QsIGlzRGF5anNPYmplY3QsIGlzTWFwLCBpc1JlZ0V4cCwgaXNSZXR1cm5Bc0lzT2JqZWN0LCBpc1NldCB9IGZyb20gJy4vZGFuZ2Vyb3VzLW9iamVjdCc7XG5pbXBvcnQgeyBnZXREYXlqcyB9IGZyb20gJy4vZGF0ZSc7XG5pbXBvcnQgeyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0IH0gZnJvbSAnLi9odHRwLXBhcmFtcyc7XG5pbXBvcnQgeyBjb252ZXJ0U2lnbmFsVG9PYmplY3QsIHVud3JhcFNpZ25hbCB9IGZyb20gJy4vdHdvLXdheS1zaWduYWwtb2JqZWN0JztcblxuLyoqQ8OhYyBow6BtIHTGsMahbmcgdOG7sSB0aMawIHZp4buHbiBsb2Rhc2ggKi9cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBudWxsIGhv4bq3YyB1bmRlZmluZWQgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsIGhv4bq3YyB1bmRlZmluZWQsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzTmlsKG51bGwpOyAvLyB0cnVlXG4gKiBpc05pbCh1bmRlZmluZWQpOyAvLyB0cnVlXG4gKiBpc05pbCgwKTsgLy8gZmFsc2VcbiAqIGlzTmlsKCdoZWxsbycpOyAvLyBmYWxzZVxuICovXG5leHBvcnQgY29uc3QgaXNOaWwgPSAodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIW9wdGlvbnM/Lmlnbm9yZVVuV3JhcFNpZ25hbCkge1xuICAgIHZhbHVlID0gdW53cmFwU2lnbmFsKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBy4buXbmcgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsLCBy4buXbmcgaG/hurdjIHVuZGVmaW5lZCwgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNFbXB0eShudWxsKTsgLy8gdHJ1ZVxuICogaXNFbXB0eSgnJyk7IC8vIHRydWVcbiAqIGlzRW1wdHkodW5kZWZpbmVkKTsgLy8gdHJ1ZVxuICogaXNFbXB0eSh7fSk7IC8vIHRydWVcbiAqIGlzRW1wdHkoW10pOyAvLyB0cnVlXG4gKiBpc0VtcHR5KFsxLCAyLCAzXSk7IC8vIGZhbHNlXG4gKiBpc0VtcHR5KHsgYTogMSB9KTsgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7IGlnbm9yZUNoZWNrVHlwZVByaW1pdGl2ZT86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW47IGlnbm9yZUNoZWNrU3RyaW5nPzogYm9vbGVhbiB9KTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCB8ICcnIHwgMCA9PiB7XG4gIGlmICghb3B0aW9ucz8uaWdub3JlVW5XcmFwU2lnbmFsKSB7XG4gICAgdmFsdWUgPSB1bndyYXBTaWduYWwodmFsdWUpO1xuICB9XG4gIGlmIChvcHRpb25zPy5pZ25vcmVDaGVja1R5cGVQcmltaXRpdmUpIHtcbiAgICByZXR1cm4gaXNFbXB0eVR5cGVPYmplY3QodmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGlzRW1wdHlUeXBlUHJpbWl0aXZlKHZhbHVlLCB7IGlnbm9yZUNoZWNrU3RyaW5nOiBvcHRpb25zPy5pZ25vcmVDaGVja1N0cmluZyB9KSB8fCBpc0VtcHR5VHlwZU9iamVjdCh2YWx1ZSk7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6Agb2JqZWN0IHLhu5duZyBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGdpw6EgdHLhu4sgbMOgIG9iamVjdCBy4buXbmcsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzRW1wdHlUeXBlT2JqZWN0KHt9KTsgLy8gdHJ1ZVxuICogaXNFbXB0eVR5cGVPYmplY3QoeyBhOiAxIH0pOyAvLyBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5VHlwZU9iamVjdCA9IDxUID0gbnVsbD4odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUID0+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ3t9JyB8fCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICdbXScpO1xufTtcblxuY29uc3QgaXNFbXB0eVR5cGVQcmltaXRpdmUgPSA8VCA9IG51bGw+KHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogeyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIFQgPT4ge1xuICBpZiAob3B0aW9ucz8uaWdub3JlQ2hlY2tTdHJpbmcgJiYgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlID09PSAnJyB8fCBpc05pbCh2YWx1ZSwgeyBpZ25vcmVVbldyYXBTaWduYWw6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEtp4buDbSB0cmEgeGVtIG3hu5l0IGdpw6EgdHLhu4sgY8OzIHBo4bqjaSBsw6AgbnVsbCwgcuG7l25nLCB1bmRlZmluZWQgaG/hurdjIDAgaGF5IGtow7RuZ1xuICogQHBhcmFtIHZhbHVlIEdpw6EgdHLhu4sgY+G6p24ga2nhu4NtIHRyYVxuICogQHBhcmFtIG9wdGlvbnMgQ+G6pXUgaMOsbmggdMO5eSBjaOG7jW5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVplcm8gTuG6v3UgdHJ1ZSwgc+G6vSBraMO0bmcga2nhu4NtIHRyYSBnacOhIHRy4buLIDBcbiAqIEByZXR1cm5zIHRydWUgbuG6v3UgZ2nDoSB0cuG7iyBsw6AgbnVsbCwgcuG7l25nLCB1bmRlZmluZWQgaG/hurdjIDAsIGZhbHNlIG7hur91IGtow7RuZ1xuICogQGV4YW1wbGVcbiAqIGlzVHJ1dGh5KG51bGwpOyAvLyBmYWxzZVxuICogaXNUcnV0aHkoJycpOyAvLyBmYWxzZVxuICogaXNUcnV0aHkodW5kZWZpbmVkKTsgLy8gZmFsc2VcbiAqIGlzVHJ1dGh5KDApOyAvLyBmYWxzZVxuICogaXNUcnV0aHkoe30pOyAvLyB0cnVlXG4gKiBpc1RydXRoeSgwLCB7IGlnbm9yZVplcm86IHRydWUgfSk7IC8vIHRydWVcbiAqL1xuXG5leHBvcnQgY29uc3QgaXNUcnV0aHkgPSA8VD4odmFsdWU6IFQsIG9wdGlvbnM/OiB7IGlnbm9yZVplcm8/OiBib29sZWFuOyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIE5vbk51bGxhYmxlPFQ+ID0+IHtcbiAgcmV0dXJuICFpc0ZhbHN5KHZhbHVlLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogS2nhu4NtIHRyYSB4ZW0gbeG7mXQgZ2nDoSB0cuG7iyBjw7MgcGjhuqNpIGzDoCBudWxsLCBy4buXbmcsIHVuZGVmaW5lZCBob+G6t2MgMCBoYXkga2jDtG5nXG4gKiBAcGFyYW0gdmFsdWUgR2nDoSB0cuG7iyBj4bqnbiBraeG7g20gdHJhXG4gKiBAcGFyYW0gb3B0aW9ucyBD4bqldSBow6xuaCB0w7l5IGNo4buNblxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlWmVybyBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBraeG7g20gdHJhIGdpw6EgdHLhu4sgMFxuICogQHJldHVybnMgdHJ1ZSBu4bq/dSBnacOhIHRy4buLIGzDoCBudWxsLCBy4buXbmcsIHVuZGVmaW5lZCBob+G6t2MgMCwgZmFsc2UgbuG6v3Uga2jDtG5nXG4gKiBAZXhhbXBsZVxuICogaXNGYWxzeShudWxsKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSgnJyk7IC8vIHRydWVcbiAqIGlzRmFsc3kodW5kZWZpbmVkKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSgwKTsgLy8gdHJ1ZVxuICogaXNGYWxzeSh7fSk7IC8vIGZhbHNlXG4gKiBpc0ZhbHN5KDAsIHsgaWdub3JlWmVybzogdHJ1ZSB9KTsgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRmFsc3kgPSAodmFsdWU6IHVua25vd24sIG9wdGlvbnM/OiB7IGlnbm9yZVplcm8/OiBib29sZWFuOyBpZ25vcmVDaGVja1N0cmluZz86IGJvb2xlYW47IGlnbm9yZVVuV3JhcFNpZ25hbD86IGJvb2xlYW4gfSk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgfCAnJyB8IDAgPT4ge1xuICBpZiAoIW9wdGlvbnM/Lmlnbm9yZVVuV3JhcFNpZ25hbCkge1xuICAgIHZhbHVlID0gdW53cmFwU2lnbmFsKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5pZ25vcmVaZXJvICYmIHZhbHVlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/Lmlnbm9yZUNoZWNrU3RyaW5nICYmIHZhbHVlID09PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAhdmFsdWU7XG59O1xuXG4vKipcbiAqIExv4bqhaSBi4buPIGPDoWMgdGh14buZYyB0w61uaCBj4bunYSDEkeG7kWkgdMaw4bujbmcgZOG7sWEgdHLDqm4gbeG7mXQgaMOgbSDEkWnhu4F1IGtp4buHblxuICogQHBhcmFtIG9iakRhdGEgxJDhu5FpIHTGsOG7o25nIGPhuqduIHjhu60gbMO9XG4gKiBAcGFyYW0gcHJlZGljYXRlIEjDoG0gxJFp4buBdSBraeG7h24gxJHhu4Mga2nhu4NtIHRyYSBnacOhIHRy4buLIGPhu6dhIHRodeG7mWMgdMOtbmguIE7hur91IGjDoG0gdHLhuqMgduG7gSB0cnVlIHRow6wgdGh14buZYyB0w61uaCDEkcOzIHPhur0gYuG7iyBsb+G6oWkgYuG7j1xuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIG3hu5tpIHNhdSBraGkgxJHDoyBsb+G6oWkgYuG7jyBjw6FjIHRodeG7mWMgdMOtbmggdGjhu49hIG3Do24gxJFp4buBdSBraeG7h25cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7IGE6IDEsIGI6IG51bGwsIGM6IDMsIGQ6IHVuZGVmaW5lZCB9O1xuICogb21pdEJ5KG9iaiwgaXNOaWwpOyAvLyB7IGE6IDEsIGM6IDMgfVxuICovXG5leHBvcnQgY29uc3Qgb21pdEJ5ID0gPFQ+KG9iakRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sIHByZWRpY2F0ZTogKHZhbDogYW55KSA9PiBib29sZWFuKTogVCA9PiB7XG4gIGlmICghb2JqRGF0YSB8fCB0eXBlb2Ygb2JqRGF0YSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShvYmpEYXRhKSkge1xuICAgIHJldHVybiBvYmpEYXRhIGFzIFQ7XG4gIH1cbiAgY29uc3QgbmV3T2JqID0ge30gYXMgVDtcblxuICBPYmplY3Qua2V5cyhvYmpEYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gZ2V0KG9iakRhdGEsIGtleSk7XG4gICAgaWYgKCFwcmVkaWNhdGUodmFsdWVPZktleSkpIHtcbiAgICAgIHNldChuZXdPYmosIGtleSBhcyBQYXRoT2Y8VD4sIHZhbHVlT2ZLZXkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdPYmo7XG59O1xuXG4vKipcbiAqIEzhuqV5IGdpw6EgdHLhu4sgdOG7qyDEkeG7kWkgdMaw4bujbmcgdGhlbyDEkcaw4budbmcgZOG6q24gY2jhu4kgxJHhu4tuaFxuICpcbiAqIEjDoG0gbsOgeSBnacO6cCBi4bqhbiB0cnV5IGPhuq1wIHbDoG8gY8OhYyB0aHXhu5ljIHTDrW5oIHPDonUgYsOqbiB0cm9uZyBt4buZdCDEkeG7kWkgdMaw4bujbmcgbeG7mXQgY8OhY2ggYW4gdG/DoG4sXG4gKiB0csOhbmggbOG7l2kga2hpIHRodeG7mWMgdMOtbmgga2jDtG5nIHThu5NuIHThuqFpLlxuICpcbiAqIEBwYXJhbSBvYmogxJDhu5FpIHTGsOG7o25nIG5ndeG7k24gY+G6p24gbOG6pXkgZ2nDoSB0cuG7i1xuICogQHBhcmFtIHBhdGggxJDGsOG7nW5nIGThuqtuIMSR4bq/biB0aHXhu5ljIHTDrW5oIGPhuqduIGzhuqV5LiBDw7MgdGjhu4MgbMOgOlxuICogICAtIENodeG7l2k6ICd1c2VyLnByb2ZpbGUubmFtZScgaG/hurdjICdpdGVtc1swXS50aXRsZSdcbiAqICAgLSBN4bqjbmc6IFsndXNlcicsICdwcm9maWxlJywgJ25hbWUnXSBob+G6t2MgWydpdGVtcycsICcwJywgJ3RpdGxlJ11cbiAqICAgLSBDaHXhu5dpIHLhu5duZyAnJzogdHLhuqMgduG7gSBjaMOtbmggxJHhu5FpIHTGsOG7o25nIGfhu5FjXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaCB0cuG6oyB24buBIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkgdGh14buZYyB0w61uaCAobeG6t2MgxJHhu4tuaDogdW5kZWZpbmVkKVxuICogQHBhcmFtIGtlZXBMYXN0VmFsdWVJZlNpZ25hbCBDw7MgZ2nhu68gbmd1ecOqbiBzaWduYWwgY3Xhu5FpIGPDuW5nIGhheSBraMO0bmcgKG3hurdjIMSR4buLbmg6IGZhbHNlIC0gc+G6vSBn4buNaSBzaWduYWwoKSlcbiAqIEByZXR1cm5zIEdpw6EgdHLhu4sgdMOsbSDEkcaw4bujYyBob+G6t2MgZ2nDoSB0cuG7iyBt4bq3YyDEkeG7i25oXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFbDrSBk4bulIGPGoSBi4bqjblxuICogY29uc3QgdXNlciA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH07XG4gKiBnZXQodXNlciwgJ25hbWUnKTsgLy8gJ0pvaG4nXG4gKiBnZXQodXNlciwgJ2VtYWlsJyk7IC8vIHVuZGVmaW5lZFxuICogZ2V0KHVzZXIsICdlbWFpbCcsICduby1lbWFpbCcpOyAvLyAnbm8tZW1haWwnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRydXnhu4FuIHBhdGggcuG7l25nIC0gdHLhuqMgduG7gSBjaMOtbmggxJHhu5FpIHTGsOG7o25nIGfhu5FjXG4gKiBjb25zdCBkYXRhID0geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDI1IH07XG4gKiBnZXQoZGF0YSwgJycpOyAvLyB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfSAoY2jDrW5oIMSR4buRaSB0xrDhu6NuZyBkYXRhKVxuICogZ2V0KGRhdGEsICcnLCAnZGVmYXVsdCcpOyAvLyB7IG5hbWU6ICdBbGljZScsIGFnZTogMjUgfSAoYuG7jyBxdWEgZGVmYXVsdFZhbHVlKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUcnV5IGPhuq1wIHRodeG7mWMgdMOtbmggc8OidVxuICogY29uc3QgZGF0YSA9IHtcbiAqICAgdXNlcjoge1xuICogICAgIHByb2ZpbGU6IHtcbiAqICAgICAgIG5hbWU6ICdBbGljZScsXG4gKiAgICAgICBzZXR0aW5nczogeyB0aGVtZTogJ2RhcmsnIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBnZXQoZGF0YSwgJ3VzZXIucHJvZmlsZS5uYW1lJyk7IC8vICdBbGljZSdcbiAqIGdldChkYXRhLCAndXNlci5wcm9maWxlLnNldHRpbmdzLnRoZW1lJyk7IC8vICdkYXJrJ1xuICogZ2V0KGRhdGEsICd1c2VyLnByb2ZpbGUuYXZhdGFyJywgJ2RlZmF1bHQuanBnJyk7IC8vICdkZWZhdWx0LmpwZydcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVHJ1eSBj4bqtcCBt4bqjbmdcbiAqIGNvbnN0IGl0ZW1zID0gW1xuICogICB7IG5hbWU6ICdJdGVtIDEnLCBwcmljZTogMTAwIH0sXG4gKiAgIHsgbmFtZTogJ0l0ZW0gMicsIHByaWNlOiAyMDAgfVxuICogXTtcbiAqIGdldChpdGVtcywgJ1swXS5uYW1lJyk7IC8vICdJdGVtIDEnXG4gKiBnZXQoaXRlbXMsICdbMV0ubmFtZScpOyAvLyAnSXRlbSAyJ1xuICogZ2V0KGl0ZW1zLCAnWzJdLm5hbWUnLCAnTm90IGZvdW5kJyk7IC8vICdOb3QgZm91bmQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFPhu60gZOG7pW5nIHbhu5tpIG3huqNuZyBwYXRoXG4gKiBjb25zdCBuZXN0ZWQgPSB7IGE6IHsgYjogeyBjOiAnZGVlcCB2YWx1ZScgfSB9IH07XG4gKiBnZXQobmVzdGVkLCBbJ2EnLCAnYicsICdjJ10pOyAvLyAnZGVlcCB2YWx1ZSdcbiAqIGdldChuZXN0ZWQsIFsnYScsICdiJywgJ2QnXSwgJ2RlZmF1bHQnKTsgLy8gJ2RlZmF1bHQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0XG4gKiBnZXQobnVsbCwgJ2FueS5wYXRoJyk7IC8vIHVuZGVmaW5lZFxuICogZ2V0KHVuZGVmaW5lZCwgJ2FueS5wYXRoJywgJ2ZhbGxiYWNrJyk7IC8vICdmYWxsYmFjaydcbiAqL1xuZXhwb3J0IGNvbnN0IGdldCA9IDxPLCBQIGV4dGVuZHMgUGF0aE9mPE8+ID0gUGF0aE9mPE8+LCBLUyBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSwgRCBleHRlbmRzIEdldFZhbHVlQXRQYXRoPE8sIFAsIEtTPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIG9iajogU2lnbmFsPE8+IHwgTyxcbiAgcGF0aDogUCxcbiAgZGVmYXVsdFZhbHVlPzogRCxcbiAga2VlcExhc3RWYWx1ZUlmU2lnbmFsPzogS1Ncbik6IEdldFJldHVyblR5cGU8TywgUCwgS1MsIEQ+ID0+IHtcbiAgLy8gaGVscGVyIGNhc3QgxJHhu4MgdHLDoW5oIGzhurdwIGzhuqFpIGtp4buDdSDEkWnhu4F1IGtp4buHbiDhu58gY8OhYyByZXR1cm5cbiAgY29uc3Qgb3V0ID0gKHY6IHVua25vd24pID0+IHYgYXMgR2V0UmV0dXJuVHlwZTxPLCBQLCBLUywgRD47XG5cbiAgaWYgKGlzTmlsKG9iaikpIHtcbiAgICByZXR1cm4gb3V0KGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgb2JqID0gdW53cmFwU2lnbmFsKG9iaik7XG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIHJldHVybiBvdXQob2JqKTtcbiAgfVxuICBpZiAob2JqIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBvdXQob2JqLmdldChgJHtwYXRofWApID8/IGRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgaWYgKG9iaiBpbnN0YW5jZW9mIERPTVJlY3QpIHtcbiAgICByZXR1cm4gb3V0KG9ialtwYXRoIGFzIGtleW9mIERPTVJlY3RdKTtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgID8gcGF0aFxuICAgIDogKHBhdGggYXMgc3RyaW5nKVxuICAgICAgICAucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnLiQxJylcbiAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkpO1xuICBmb3IgKGNvbnN0IGluZGV4IGluIHBhdGhzKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aHNbaW5kZXhdO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG4gICAgICBvYmogPSBvYmpba2V5IGFzIGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25dIGFzIE87XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIG9iaiA9IG9ialtrZXkgYXMga2V5b2YgSFRNTEVsZW1lbnRdIGFzIE87XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzTmlsKG9iaikgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHJldHVybiBvdXQoZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWwgPSBpc1NpZ25hbCgob2JqIGFzIGFueSlba2V5XSkgJiYgIWtlZXBMYXN0VmFsdWVJZlNpZ25hbCA/IChvYmogYXMgYW55KVtrZXldKCkgOiAob2JqIGFzIGFueSlba2V5XTtcblxuICAgIG9iaiA9IHZhbCBhcyBPO1xuICB9XG5cbiAgcmV0dXJuIG91dChvYmogPz8gZGVmYXVsdFZhbHVlKTtcbn07XG5cbi8qKlxuICogVGhp4bq/dCBs4bqtcCBnacOhIHRy4buLIGNobyBt4buZdCB0aHXhu5ljIHTDrW5oIHRyb25nIMSR4buRaSB0xrDhu6NuZyB0aGVvIMSRxrDhu51uZyBk4bqrbiBjaOG7iSDEkeG7i25oXG4gKiBAcGFyYW0gb2JqIMSQ4buRaSB0xrDhu6NuZyBj4bqnbiB0aGnhur90IGzhuq1wIGdpw6EgdHLhu4tcbiAqIEBwYXJhbSBwYXRoIMSQxrDhu51uZyBk4bqrbiDEkeG6v24gdGh14buZYyB0w61uaCwgY8OzIHRo4buDIGzDoCBjaHXhu5dpICh2ZDogJ2EuYi5jJykgaG/hurdjIG3huqNuZyAodmQ6IFsnYScsICdiJywgJ2MnXSlcbiAqIEBwYXJhbSB2YWx1ZSBHacOhIHRy4buLIGPhuqduIHRoaeG6v3QgbOG6rXBcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyBzYXUga2hpIMSRw6MgdGhp4bq/dCBs4bqtcCBnacOhIHRy4buLXG4gKiBAdGhyb3dzIEVycm9yIG7hur91IHRoYW0gc+G7kSDEkeG6p3UgdGnDqm4ga2jDtG5nIHBo4bqjaSBsw6AgxJHhu5FpIHTGsOG7o25nXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgb2JqID0geyBhOiB7IGI6IDEgfSB9O1xuICogc2V0KG9iaiwgJ2EuYicsIDIpOyAvLyB7IGE6IHsgYjogMiB9IH1cbiAqL1xuZXhwb3J0IGNvbnN0IHNldCA9IDxPLCBQIGV4dGVuZHMgUGF0aE9mPE8+ID0gUGF0aE9mPE8+LCBUIGV4dGVuZHMgR2V0VmFsdWVBdFBhdGg8TywgUCwgdHJ1ZT4gPSBHZXRWYWx1ZUF0UGF0aDxPLCBQLCB0cnVlPj4oXG4gIG9iajogU2lnbmFsPE8+IHwgTyxcbiAgcGF0aDogUCxcbiAgdmFsdWU6IFQsXG4gIG9wdGlvbnM/OiB7IHZhbHVlRGVmYXVsdFBhdGhPYmplY3RVbmRlZmluZWQ/OiBhbnk7IHZhbHVlRGVmYXVsdFBhdGhBcnJheVVuZGVmaW5lZD86IGFueSB9XG4pOiBPID0+IHtcbiAgaWYgKCFvYmogfHwgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmICFpc1NpZ25hbChvYmopKSB8fCAoaXNTaWduYWwob2JqKSAmJiB0eXBlb2Ygb2JqKCkgIT09ICdvYmplY3QnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBpZiAob2JqIGluc3RhbmNlb2YgSHR0cFBhcmFtcykge1xuICAgIHJldHVybiBvYmouc2V0KGAke3BhdGh9YCwgdmFsdWUgYXMgc3RyaW5nKSBhcyBPO1xuICB9XG5cbiAgY29uc3QgcGF0aEFycmF5ID0gQXJyYXkuaXNBcnJheShwYXRoKVxuICAgID8gcGF0aFxuICAgIDogKHBhdGggYXMgc3RyaW5nKVxuICAgICAgICAucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnLlskMV0nKVxuICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSk7XG5cbiAgbGV0IGN1cnJlbnRPYmplY3RCeUtleTogYW55ID0gaXNTaWduYWwob2JqKSA/IG9iaigpIDogb2JqO1xuICBsZXQgcHJlT2JqZWN0QnlLZXkgPSBvYmo7XG5cbiAgcGF0aEFycmF5LmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPCBwYXRoQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKCEoa2V5IGluIGN1cnJlbnRPYmplY3RCeUtleSkgfHwgKHR5cGVvZiBjdXJyZW50T2JqZWN0QnlLZXlba2V5XSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGN1cnJlbnRPYmplY3RCeUtleVtrZXldKSkpIHtcbiAgICAgICAgY29uc3QgbmV4dEtleSA9IHBhdGhBcnJheVtpbmRleCArIDFdO1xuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFxbKFxcZCspXS9nLCAnJDEnKTtcbiAgICAgICAgaWYgKGlzTmlsKGN1cnJlbnRPYmplY3RCeUtleVtrZXldKSkge1xuICAgICAgICAgIGN1cnJlbnRPYmplY3RCeUtleVtrZXldID0gL1xcWyhcXGQrKV0vZy50ZXN0KG5leHRLZXkpID8gKG9wdGlvbnM/LnZhbHVlRGVmYXVsdFBhdGhBcnJheVVuZGVmaW5lZCA/PyBbXSkgOiAob3B0aW9ucz8udmFsdWVEZWZhdWx0UGF0aE9iamVjdFVuZGVmaW5lZCA/PyB7fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGN1cnJlbnRPYmplY3RCeUtleSA9IGtleSA/IGN1cnJlbnRPYmplY3RCeUtleVtrZXldIDogY3VycmVudE9iamVjdEJ5S2V5O1xuICAgICAgcHJlT2JqZWN0QnlLZXkgPSBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICBjdXJyZW50T2JqZWN0QnlLZXkgPSBpc1NpZ25hbChjdXJyZW50T2JqZWN0QnlLZXkpID8gY3VycmVudE9iamVjdEJ5S2V5KCkgOiBjdXJyZW50T2JqZWN0QnlLZXk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50T2JqZWN0QnlLZXkgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR8OhbiBnacOhIHRy4buLIOG7nyBjdeG7kWkgxJHGsOG7nW5nIGThuqtuXG4gICAga2V5ID0ga2V5LnJlcGxhY2UoL1xcWyhcXGQrKV0vZywgJyQxJyk7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGN1cnJlbnRPYmplY3RCeUtleVtrZXldO1xuICAgIGNvbnN0IHZhbHVlT2ZLZXlJc1NpZ25hbCA9IGlzU2lnbmFsKHZhbHVlT2ZLZXkpO1xuXG4gICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCAmJiAodHlwZW9mIHZhbHVlT2ZLZXkoKSAhPT0gJ29iamVjdCcgfHwgdmFsdWVPZktleSgpID09PSBudWxsKSkge1xuICAgICAgKHZhbHVlT2ZLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55Pikuc2V0KGlzU2lnbmFsKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1NpZ25hbChwcmVPYmplY3RCeUtleSkpIHtcbiAgICAgIChwcmVPYmplY3RCeUtleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS51cGRhdGUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhT2ZLZXkgPSBkYXRhW2tleV07XG4gICAgICAgIGlmIChpc05pbChkYXRhT2ZLZXkpIHx8ICF2YWx1ZU9mS2V5SXNTaWduYWwpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZU9mS2V5SXNTaWduYWwpIHtcbiAgICAgICAgICAodmFsdWVPZktleSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+KS5zZXQoaXNTaWduYWwodmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIFsuLi5kYXRhXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5kYXRhIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlT2ZLZXlJc1NpZ25hbCkge1xuICAgICAgKHZhbHVlT2ZLZXkgYXMgV3JpdGFibGVTaWduYWw8YW55Pikuc2V0KGlzU2lnbmFsKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnJlbnRPYmplY3RCeUtleVtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiBvYmogYXMgTztcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgYuG6o24gc2FvIHPDonUgY+G7p2EgbeG7mXQgxJHhu5FpIHTGsOG7o25nIGhv4bq3YyBnacOhIHRy4buLIGLhuqV0IGvhu7NcbiAqIEBwYXJhbSBkYXRhIEThu68gbGnhu4d1IGPhuqduIHNhbyBjaMOpcFxuICogQHBhcmFtIG9wdGlvbnMgVMO5eSBjaOG7jW4gY+G6pXUgaMOsbmhcbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZVNpZ25hbCBO4bq/dSB0cnVlLCBz4bq9IGtow7RuZyBzYW8gY2jDqXAgY8OhYyBzaWduYWwgbcOgIHRy4bqjIHbhu4Egc2lnbmFsIGfhu5FjXG4gKiBAcGFyYW0gc2VlbiBXZWFrTWFwIMSR4buDIHRoZW8gZMO1aSBjw6FjIHRoYW0gY2hp4bq/dSDEkcOjIMSRxrDhu6NjIHNhbyBjaMOpcCwgdHLDoW5oIGzhurdwIHbDtCBo4bqhbiB24bubaSBjw6FjIHRoYW0gY2hp4bq/dSB2w7JuZ1xuICogQHJldHVybnMgQuG6o24gc2FvIHPDonUgY+G7p2EgZOG7ryBsaeG7h3UgxJHhuqd1IHbDoG9cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIGE6IDEsXG4gKiAgIGI6IHsgYzogMiB9LFxuICogICBkOiBbMSwgMiwgM11cbiAqIH07XG4gKiBjb25zdCBjbG9uZSA9IGNsb25lRGVlcChvYmopO1xuICogLy8gY2xvbmUgbMOgIG3hu5l0IGLhuqNuIHNhbyBob8OgbiB0b8OgbiDEkeG7mWMgbOG6rXAgY+G7p2Egb2JqXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZURlZXAgPSA8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zID0geyBpZ25vcmVTaWduYWw6IGZhbHNlIH0sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogVCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8ICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgJiYgIWlzU2lnbmFsKGRhdGEpKSB8fCBpc0Rhbmdlcm91c09iamVjdChkYXRhKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKHNlZW4uaGFzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpO1xuICB9XG5cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgZGF0YSkgYXMgVDtcbiAgfVxuXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRhLmdldFRpbWUoKSkgYXMgVDtcbiAgfVxuXG4gIGlmIChpc0RheWpzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGdldERheWpzKHsgZGF0ZTogZGF0YS52YWx1ZU9mKCkgfSkgYXMgVDtcbiAgfVxuXG4gIGlmIChpc1JlZ0V4cChkYXRhKSkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGRhdGEuc291cmNlLCBkYXRhLmZsYWdzKSBhcyBUO1xuICB9XG5cbiAgaWYgKGlzTWFwKGRhdGEpKSB7XG4gICAgY29uc3QgbWFwQ29weSA9IG5ldyBNYXAoKTtcbiAgICBzZWVuLnNldChkYXRhLCBtYXBDb3B5KTtcbiAgICBkYXRhLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICBtYXBDb3B5LnNldChjbG9uZURlZXAoa2V5LCBvcHRpb25zLCBzZWVuKSwgY2xvbmVEZWVwKHZhbCwgb3B0aW9ucywgc2VlbikpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXBDb3B5IGFzIFQ7XG4gIH1cblxuICBpZiAoaXNTZXQoZGF0YSkpIHtcbiAgICBjb25zdCBzZXRDb3B5ID0gbmV3IFNldCgpO1xuICAgIHNlZW4uc2V0KGRhdGEsIHNldENvcHkpO1xuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBzZXRDb3B5LmFkZChjbG9uZURlZXAodmFsLCBvcHRpb25zLCBzZWVuKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldENvcHkgYXMgVDtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgc2Vlbi5zZXQoZGF0YSwgZGF0YS5tYXAoKGl0ZW0pID0+IGNsb25lRGVlcChpdGVtLCBvcHRpb25zLCBzZWVuKSkgYXMgVCk7XG4gICAgcmV0dXJuIHNlZW4uZ2V0KGRhdGEpIGFzIFQ7XG4gIH1cblxuICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGEgYXMgVDtcbiAgfVxuXG4gIGlmIChpc1NpZ25hbChkYXRhKSkge1xuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTaWduYWwpIHtcbiAgICAgIHJldHVybiBkYXRhIGFzIFQ7XG4gICAgfVxuICAgIHNlZW4uc2V0KGRhdGEsIHNpZ25hbChjbG9uZURlZXAoZGF0YSgpLCBvcHRpb25zLCBzZWVuKSkpO1xuICAgIHJldHVybiBzZWVuLmdldChkYXRhKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHNlZW4uc2V0KGRhdGEsIHJlc3VsdCk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBIdHRwUGFyYW1zKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHVuZGVmaW5lZCwgdmFsdWUpIGFzIFQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBEYXRlKHZhbHVlLmdldFRpbWUoKSkgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChkYXlqcy5pc0RheWpzKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBnZXREYXlqcyh7IGRhdGU6IHZhbHVlLnZhbHVlT2YoKSB9KSBhcyBUO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzUmVnRXhwKGRhdGEpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG5ldyBSZWdFeHAodmFsdWUuc291cmNlLCB2YWx1ZS5mbGFncykgYXMgVDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNSZXR1cm5Bc0lzT2JqZWN0KGRhdGEpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGNsb25lRGVlcCh2YWx1ZSwgb3B0aW9ucywgc2Vlbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufTtcblxuLyoqXG4gKiBDaHV54buDbiDEkeG7lWkgbeG7mXQgbeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRow6BuaCBt4buZdCDEkeG7kWkgdMaw4bujbmcgduG7m2kga2jDs2EgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIGRhdGEgTeG6o25nIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIGNodXnhu4NuIMSR4buVaVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSB0cm9uZyDEkeG7kWkgdMaw4bujbmcga+G6v3QgcXXhuqNcbiAqIEByZXR1cm5zIMSQ4buRaSB0xrDhu6NuZyB24bubaSBjw6FjIGdpw6EgdHLhu4sgdOG7qyBt4bqjbmcgxJHGsOG7o2MgxJHDoW5oIGtleSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiBdO1xuICoga2V5QnkoZGF0YSwgJ2lkJyk7XG4gKiAvLyBL4bq/dCBxdeG6ozoge1xuICogLy8gICAnMSc6IHsgaWQ6IDEsIG5hbWU6ICdKb2huJyB9LFxuICogLy8gICAnMic6IHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9XG4gKiAvLyB9XG4gKi9cbmV4cG9ydCBjb25zdCBrZXlCeSA9IChkYXRhOiBBcnJheTxUWVBFX09CSkVDVD4sIGtleTogc3RyaW5nKTogVFlQRV9PQkpFQ1QgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoIHx8ICFrZXkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIGRhdGEucmVkdWNlKChkaXIsIG5leHRJdGVtKSA9PiB7XG4gICAgY29uc3QgdmFsdWVPZktleSA9IGdldChuZXh0SXRlbSwga2V5IGFzIFBhdGhPZjxUWVBFX09CSkVDVD4pO1xuICAgIGlmICh0eXBlb2YgdmFsdWVPZktleSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LmtleXMoZGlyKS5pbmNsdWRlcyhgJHt2YWx1ZU9mS2V5fWApKSB7XG4gICAgICBkaXJbYCR7dmFsdWVPZktleX1gXSA9IG5leHRJdGVtO1xuICAgIH1cbiAgICByZXR1cm4gZGlyO1xuICB9LCB7fSk7XG59O1xuXG4vKipcbiAqIE5ow7NtIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRyb25nIG3hu5l0IG3huqNuZyB0aMOgbmggY8OhYyBuaMOzbSBk4buxYSB0csOqbiBt4buZdCB0aHXhu5ljIHTDrW5oIGPhu6UgdGjhu4NcbiAqIEBwYXJhbSBkYXRhIE3huqNuZyBjw6FjIMSR4buRaSB0xrDhu6NuZyBj4bqnbiBuaMOzbVxuICogQHBhcmFtIGtleSBUw6puIHRodeG7mWMgdMOtbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgbSBraMOzYSBuaMOzbVxuICogQHJldHVybnMgxJDhu5FpIHTGsOG7o25nIHbhu5tpIGPDoWMgZ2nDoSB0cuG7iyB04burIG3huqNuZyDEkcaw4bujYyBuaMOzbSB0aGVvIHRodeG7mWMgdMOtbmggxJHDoyBjaOG7iSDEkeG7i25oXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YSA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0pvaG4nIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdKYW5lJyB9LFxuICogICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogXTtcbiAqIGdyb3VwQnkoZGF0YSwgJ2lkJyk7XG4gKiAvLyBL4bq/dCBxdeG6ozoge1xuICogLy8gICAnMSc6IFtcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfSxcbiAqIC8vICAgICB7IGlkOiAxLCBuYW1lOiAnSm9obicgfVxuICogLy8gICBdLFxuICogLy8gICAnMic6IFtcbiAqIC8vICAgICB7IGlkOiAyLCBuYW1lOiAnSmFuZScgfVxuICogLy8gfVxuICovXG5leHBvcnQgY29uc3QgZ3JvdXBCeSA9IChkYXRhOiBBcnJheTxUWVBFX09CSkVDVD4sIGtleTogc3RyaW5nKTogVFlQRV9PQkpFQ1QgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoIHx8ICFPYmplY3Qua2V5cyhnZXQoZGF0YSwgJ1swXScpKS5sZW5ndGggfHwgIWtleSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4gZGF0YS5yZWR1Y2UoKGRpciwgbmV4dEl0ZW0pID0+IHtcbiAgICBjb25zdCB2YWx1ZU9mS2V5ID0gZ2V0KG5leHRJdGVtLCBrZXkgYXMgUGF0aE9mPFRZUEVfT0JKRUNUPik7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZU9mS2V5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVPZktleSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlT2ZLZXkgIT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG4gICAgaWYgKCFPYmplY3Qua2V5cyhkaXIpLmluY2x1ZGVzKGAke3ZhbHVlT2ZLZXl9YCkpIHtcbiAgICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdID0gW107XG4gICAgfVxuICAgIGRpcltgJHt2YWx1ZU9mS2V5fWBdLnB1c2gobmV4dEl0ZW0pO1xuICAgIHJldHVybiBkaXI7XG4gIH0sIHt9KTtcbn07XG5cbi8qKlxuICogVOG6oW8gbeG7mXQgbeG6o25nIGPDoWMgc+G7kSB04burIGdpw6EgdHLhu4sgYuG6r3QgxJHhuqd1IMSR4bq/biBnacOhIHRy4buLIGvhur90IHRow7pjIHbhu5tpIGLGsOG7m2MgbmjhuqN5IHTDuXkgY2jhu41uXG4gKiBAcGFyYW0gc3RhcnQgR2nDoSB0cuG7iyBi4bqvdCDEkeG6p3UgY+G7p2EgZMOjeSBz4buRLiBO4bq/dSBjaOG7iSBjw7MgbeG7mXQgdGhhbSBz4buRLCDEkcOieSBz4bq9IGzDoCBnacOhIHRy4buLIGvhur90IHRow7pjIHbDoCBnacOhIHRy4buLIGLhuq90IMSR4bqndSBz4bq9IGzDoCAwXG4gKiBAcGFyYW0gZW5kIEdpw6EgdHLhu4sga+G6v3QgdGjDumMgY+G7p2EgZMOjeSBz4buRICh0w7l5IGNo4buNbilcbiAqIEBwYXJhbSBzdGVwIELGsOG7m2MgbmjhuqN5IGdp4buvYSBjw6FjIHPhu5EgdHJvbmcgZMOjeSAodMO5eSBjaOG7jW4pLiBN4bq3YyDEkeG7i25oIGzDoCAxIG7hur91IGVuZCA+IHN0YXJ0LCAtMSBu4bq/dSBlbmQgPCBzdGFydFxuICogQHJldHVybnMgTeG6o25nIGPDoWMgc+G7kSB04burIHN0YXJ0IMSR4bq/biBlbmQgduG7m2kgYsaw4bubYyBuaOG6o3kgc3RlcFxuICogQGV4YW1wbGVcbiAqIHJhbmdlKDQpOyAgICAgIC8vIFswLCAxLCAyLCAzXVxuICogcmFuZ2UoMSwgNSk7ICAgLy8gWzEsIDIsIDMsIDRdXG4gKiByYW5nZSgwLCAyMCwgNSk7IC8vIFswLCA1LCAxMCwgMTVdXG4gKiByYW5nZSg1LCAyKTsgICAvLyBbNSwgNCwgM11cbiAqL1xuZXhwb3J0IGNvbnN0IHJhbmdlID0gKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlciwgc3RlcD86IG51bWJlcik6IEFycmF5PG51bWJlcj4gPT4ge1xuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID09PSBudWxsKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgaWYgKCFzdGVwKSB7XG4gICAgc3RlcCA9IGVuZCA8IDAgPyAtMSA6IDE7XG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQgJiYgc3RlcCA+IDApIHtcbiAgICBzdGVwICo9IC0xO1xuICB9XG5cbiAgY29uc3QgdmFsdWVTdGFydEJ5U3RlcCA9IHN0ZXAgKyBzdGFydDtcbiAgY29uc3QgZGlyZWN0aW9uID0gc3RhcnQgPCBlbmQgPyAnYXNjJyA6ICdkZXNjJztcbiAgaWYgKChkaXJlY3Rpb24gPT09ICdhc2MnICYmICh2YWx1ZVN0YXJ0QnlTdGVwIDwgc3RhcnQgfHwgdmFsdWVTdGFydEJ5U3RlcCA+IGVuZCkpIHx8IChkaXJlY3Rpb24gPT09ICdkZXNjJyAmJiAodmFsdWVTdGFydEJ5U3RlcCA+IHN0YXJ0IHx8IHZhbHVlU3RhcnRCeVN0ZXAgPCBlbmQpKSkge1xuICAgIHJldHVybiBbc3RhcnRdO1xuICB9XG5cbiAgY29uc3QgYXJyID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5hYnMoZW5kIC0gc3RhcnQpOyBpbmRleCsrKSB7XG4gICAgbGV0IHZhbHVlID0gc3RhcnQgKyBpbmRleCAqIHN0ZXA7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmICgoZGlyZWN0aW9uID09PSAnYXNjJyAmJiAodmFsdWUgPCBzdGFydCB8fCB2YWx1ZSA+IGVuZCkpIHx8IChkaXJlY3Rpb24gPT09ICdkZXNjJyAmJiAodmFsdWUgPiBzdGFydCB8fCB2YWx1ZSA8IGVuZCkpKSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cblxuICAgIGFyci5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIFNvIHPDoW5oIGhhaSBnacOhIHRy4buLIGLhuqV0IGvhu7MgY8OzIGLhurFuZyBuaGF1IGhheSBraMO0bmdcbiAqIEBwYXJhbSB2YWx1ZTEgR2nDoSB0cuG7iyB0aOG7qSBuaOG6pXQgY+G6p24gc28gc8OhbmhcbiAqIEBwYXJhbSB2YWx1ZTIgR2nDoSB0cuG7iyB0aOG7qSBoYWkgY+G6p24gc28gc8OhbmhcbiAqIEBwYXJhbSBleGFjdGx5UG9zaXRpb24gQ8OzIHNvIHPDoW5oIGNow61uaCB4w6FjIHbhu4sgdHLDrSBjw6FjIHBo4bqnbiB04butIHRyb25nIG3huqNuZyBoYXkga2jDtG5nXG4gKiBAcmV0dXJucyB0cnVlIG7hur91IGhhaSBnacOhIHRy4buLIGLhurFuZyBuaGF1LCBmYWxzZSBu4bq/dSBraMO0bmcgYuG6sW5nIG5oYXVcbiAqIEBleGFtcGxlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFsxLDIsM10pOyAvLyB0cnVlXG4gKiBpc0VxdWFsKFsxLDIsM10sIFszLDIsMV0pOyAvLyB0cnVlIGtoaSBleGFjdGx5UG9zaXRpb24gPSBmYWxzZVxuICogaXNFcXVhbChbMSwyLDNdLCBbMywyLDFdKTsgLy8gZmFsc2Uga2hpIGV4YWN0bHlQb3NpdGlvbiA9IHRydWVcbiAqIGlzRXF1YWwoe2E6MX0sIHthOjF9KTsgLy8gdHJ1ZVxuICovXG5leHBvcnQgY29uc3QgaXNFcXVhbCA9IChcbiAgdmFsdWUxOiBhbnksXG4gIHZhbHVlMjogYW55LFxuICBvcHRpb25zPzoge1xuICAgIGV4YWN0bHlQb3NpdGlvbj86IGJvb2xlYW47XG4gICAgaWdub3JlRXhhY3RseURhdGFUeXBlPzogYm9vbGVhbjtcbiAgICBpZ25vcmVVbldyYXBTaWduYWw/OiBib29sZWFuO1xuICB9XG4pOiBib29sZWFuID0+IHtcbiAgLy8gSGFuZGxlIHNpZ25hbHNcbiAgaWYgKCFvcHRpb25zPy5pZ25vcmVVbldyYXBTaWduYWwpIHtcbiAgICB2YWx1ZTEgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUxKTtcbiAgICB2YWx1ZTIgPSBjb252ZXJ0U2lnbmFsVG9PYmplY3QodmFsdWUyKTtcbiAgfVxuICBjb25zdCB7IGV4YWN0bHlQb3NpdGlvbiA9IGZhbHNlLCBpZ25vcmVFeGFjdGx5RGF0YVR5cGUgPSBmYWxzZSB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAodmFsdWUxID09PSB2YWx1ZTIgfHwgKHZhbHVlMSA9PT0gbnVsbCAmJiB2YWx1ZTIgPT09IG51bGwpIHx8ICh2YWx1ZTEgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZTIgPT09IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpZ25vcmVFeGFjdGx5RGF0YVR5cGUpIHtcbiAgICByZXR1cm4gaXNFcXVhbChpc05pbCh2YWx1ZTEpID8gdW5kZWZpbmVkIDogYCR7dmFsdWUxfWAsIGlzTmlsKHZhbHVlMikgPyB1bmRlZmluZWQgOiBgJHt2YWx1ZTJ9YCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlMSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlMiAhPT0gJ29iamVjdCcgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB8fCAoIUFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlMikpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUxKSkge1xuICAgIGlmICh2YWx1ZTEubGVuZ3RoICE9PSB2YWx1ZTIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghZXhhY3RseVBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gIXZhbHVlMS5zb21lKChpdGVtKSA9PiAhdmFsdWUyLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXZhbHVlMS5zb21lKChpdGVtLCBpbmRleCkgPT4gIWlzRXF1YWwoaXRlbSwgdmFsdWUyW2luZGV4XSwgb3B0aW9ucykpO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHZhbHVlMSkubGVuZ3RoICE9PSBPYmplY3Qua2V5cyh2YWx1ZTIpLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gIU9iamVjdC5rZXlzKHZhbHVlMSkuc29tZSgoa2V5KSA9PiAhaXNFcXVhbCh2YWx1ZTFba2V5XSwgdmFsdWUyW2tleV0sIG9wdGlvbnMpKTtcbn07XG5cbi8qKlxuICogTG/huqFpIGLhu48gY8OhYyBwaOG6p24gdOG7rSB0csO5bmcgbOG6t3AgdHJvbmcgbeG6o25nIGThu7FhIHRyw6puIG3hu5l0IHRodeG7mWMgdMOtbmggY2jhu4kgxJHhu4tuaFxuICogQHBhcmFtIGRhdGEgTeG6o25nIGThu68gbGnhu4d1IGPhuqduIHjhu60gbMO9XG4gKiBAcGFyYW0ga2V5IFTDqm4gdGh14buZYyB0w61uaCBkw7luZyDEkeG7gyBzbyBzw6FuaCB0csO5bmcgbOG6t3AuIE7hur91IGtow7RuZyBjw7Mga2V5IHRow6wgc28gc8OhbmggdHLhu7FjIHRp4bq/cCBnacOhIHRy4buLXG4gKiBAcmV0dXJucyBN4bqjbmcgbeG7m2kgY2jhu6lhIGPDoWMgcGjhuqduIHThu60ga2jDtG5nIHRyw7luZyBs4bq3cFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFyciA9IFtcbiAqICAgeyBpZDogMSwgbmFtZTogJ0EnIH0sXG4gKiAgIHsgaWQ6IDIsIG5hbWU6ICdCJyB9LFxuICogICB7IGlkOiAxLCBuYW1lOiAnQycgfVxuICogXTtcbiAqIHVuaXFCeShhcnIsICdpZCcpOyAvLyBbeyBpZDogMSwgbmFtZTogJ0EnIH0sIHsgaWQ6IDIsIG5hbWU6ICdCJyB9XVxuICpcbiAqIGNvbnN0IG51bWJlcnMgPSBbMSwgMiwgMiwgMywgM107XG4gKiB1bmlxQnkobnVtYmVycyk7IC8vIFsxLCAyLCAzXVxuICpcbiAqIGNvbnN0IG51bWJlcnNTaWduYWwgPSBbc2lnbmFsKDEpLCBzaWduYWwoMiksIHNpZ25hbCgzKSwgc2lnbmFsKDIpLCBzaWduYWwoNSksIHNpZ25hbCg0KSwgc2lnbmFsKDEpLCBzaWduYWwoNiksIHNpZ25hbCg3KSwgc2lnbmFsKDYpXTtcbiAqIHVuaXFCeShudW1iZXJzU2lnbmFsKTsgLy8gW3NpZ25hbCgxKSwgc2lnbmFsKDIpLCBzaWduYWwoMyksIHNpZ25hbCg1KSwgc2lnbmFsKDQpLCBzaWduYWwoNiksIHNpZ25hbCg3KV1cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXFCeSA9IDxUPihkYXRhOiBBcnJheTxUPiwga2V5Pzogc3RyaW5nKTogQXJyYXk8VD4gPT4ge1xuICBpZiAoIWtleSB8fCAhZGF0YT8ubGVuZ3RoIHx8IHR5cGVvZiBnZXQoZGF0YSwgJ1swXScpICE9PSAnb2JqZWN0Jykge1xuICAgIC8vIFjhu60gbMO9IG3huqNuZyBjaOG7qWEgc2lnbmFsIHZhbHVlc1xuICAgIGlmIChkYXRhWzBdICYmIGlzU2lnbmFsKGRhdGFbMF0pKSB7XG4gICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIHJldHVybiBkYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGAke2dldDxhbnk+KGl0ZW0sICcnKX1gO1xuICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gWOG7rSBsw70gbeG6o25nIHByaW1pdGl2ZSB2YWx1ZXNcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEpKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFVbmlxdWUgPSBrZXlCeShkYXRhIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+LCBrZXkpO1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhkYXRhVW5pcXVlKS5tYXAoKGtleSkgPT4gZGF0YVVuaXF1ZVtrZXldKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUludGVyZmFjZSA9IChvYmo6IGFueSwgaW50ZXJmYWNlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZ2VuZXJhdGVUeXBlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuICdib29sZWFuJztcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gJ2FueSc7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuICdEYXRlJztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAnUmVnRXhwJztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdBcnJheTxhbnk+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiBgQXJyYXk8JHtnZW5lcmF0ZVR5cGUodmFsdWVbMF0pfT5gO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgbGV0IGludGVyZmFjZVN0ciA9ICd7XFxuJztcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSBnZW5lcmF0ZVR5cGUodmFsdWVba2V5XSk7XG4gICAgICAgICAgaW50ZXJmYWNlU3RyICs9IGAgICR7a2V5fTogJHt2YWx1ZVR5cGV9O1xcbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGludGVyZmFjZVN0ciArPSAnfSc7XG4gICAgICByZXR1cm4gaW50ZXJmYWNlU3RyO1xuICAgIH1cblxuICAgIHJldHVybiAnYW55JztcbiAgfTtcblxuICBjb25zdCBpbnRlcmZhY2VTdHIgPSBgaW50ZXJmYWNlICR7aW50ZXJmYWNlTmFtZX0gJHtnZW5lcmF0ZVR5cGUob2JqKX1gO1xuICByZXR1cm4gaW50ZXJmYWNlU3RyO1xufTtcbiJdfQ==