@milkio/redis 1.0.0-beta.186 → 1.0.0-beta.188
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.
- package/index.d.ts +7 -6
- package/index.js +54 -19
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
export type MilkioRedisCacheOptions<T> = {
|
|
2
2
|
defaultValue?: T | undefined;
|
|
3
|
-
expireMs: number;
|
|
3
|
+
expireMs: number | null;
|
|
4
4
|
};
|
|
5
5
|
export type MilkioRedisFetchOptions<T> = {
|
|
6
6
|
defaultValue?: T | undefined;
|
|
7
|
-
expireMs: number;
|
|
8
|
-
realExpireMs?: number;
|
|
7
|
+
expireMs: number | null;
|
|
8
|
+
realExpireMs?: number | null;
|
|
9
9
|
lockInterval?: number;
|
|
10
10
|
refreshLockInterval?: number;
|
|
11
|
-
notFoundExpireMs?: number;
|
|
11
|
+
notFoundExpireMs?: number | null;
|
|
12
12
|
fetch: () => T | undefined | Promise<T | undefined>;
|
|
13
13
|
};
|
|
14
14
|
export type MilkioRedis<RedisT = any> = {
|
|
15
15
|
redis: RedisT;
|
|
16
16
|
useCache: <T>(key: string, options?: MilkioRedisCacheOptions<T>) => {
|
|
17
|
-
set: (value: T, expireMs: number) => Promise<T>;
|
|
17
|
+
set: (value: T, expireMs: number | null) => Promise<T>;
|
|
18
18
|
get: () => Promise<T | undefined>;
|
|
19
19
|
pull: () => Promise<T | undefined>;
|
|
20
20
|
has: () => Promise<boolean>;
|
|
@@ -28,7 +28,7 @@ export type MilkioRedis<RedisT = any> = {
|
|
|
28
28
|
};
|
|
29
29
|
useCount: (key: string) => {
|
|
30
30
|
get: () => Promise<number>;
|
|
31
|
-
add: (amount: number, expireMs?: number) => Promise<number>;
|
|
31
|
+
add: (amount: number, expireMs?: number | null) => Promise<number>;
|
|
32
32
|
sub: (amount: number) => Promise<number>;
|
|
33
33
|
};
|
|
34
34
|
useClockIn: (key: string, cleanDate: Date) => {
|
|
@@ -43,6 +43,7 @@ export type MilkioRedis<RedisT = any> = {
|
|
|
43
43
|
};
|
|
44
44
|
export declare function createRedis<RedisT extends {
|
|
45
45
|
PSETEX: any;
|
|
46
|
+
SET: any;
|
|
46
47
|
[others: string | number | symbol]: any;
|
|
47
48
|
}>(redisClient: RedisT): Promise<MilkioRedis<RedisT>>;
|
|
48
49
|
export type Redis = MilkioRedis;
|
package/index.js
CHANGED
|
@@ -5,7 +5,11 @@ async function createRedis(redisClient) {
|
|
|
5
5
|
redis,
|
|
6
6
|
useCache: (key, options) => ({
|
|
7
7
|
set: async (value, expireMs) => {
|
|
8
|
-
|
|
8
|
+
if (expireMs === null) {
|
|
9
|
+
await redis.SET(key, JSON.stringify(value));
|
|
10
|
+
} else {
|
|
11
|
+
await redis.PSETEX(key, expireMs, JSON.stringify(value));
|
|
12
|
+
}
|
|
9
13
|
return value;
|
|
10
14
|
},
|
|
11
15
|
get: async () => {
|
|
@@ -30,17 +34,17 @@ async function createRedis(redisClient) {
|
|
|
30
34
|
}
|
|
31
35
|
}),
|
|
32
36
|
useFetch: (key, options) => {
|
|
33
|
-
if (typeof options.expireMs !== "number" || options.expireMs <= 0) {
|
|
34
|
-
throw new Error("expireMs must be a positive number");
|
|
37
|
+
if (options.expireMs !== null && (typeof options.expireMs !== "number" || options.expireMs <= 0)) {
|
|
38
|
+
throw new Error("expireMs must be a positive number or null");
|
|
35
39
|
}
|
|
36
40
|
if (options.lockInterval !== undefined && (typeof options.lockInterval !== "number" || options.lockInterval <= 0)) {
|
|
37
41
|
throw new Error("lockInterval must be a positive number if provided");
|
|
38
42
|
}
|
|
39
|
-
if (options.realExpireMs !== undefined && (typeof options.realExpireMs !== "number" || options.realExpireMs <= 0)) {
|
|
40
|
-
throw new Error("realExpireMs must be a positive number if provided");
|
|
43
|
+
if (options.realExpireMs !== undefined && options.realExpireMs !== null && (typeof options.realExpireMs !== "number" || options.realExpireMs <= 0)) {
|
|
44
|
+
throw new Error("realExpireMs must be a positive number or null if provided");
|
|
41
45
|
}
|
|
42
|
-
if (options.notFoundExpireMs !== undefined && (typeof options.notFoundExpireMs !== "number" || options.notFoundExpireMs <= 0)) {
|
|
43
|
-
throw new Error("notFoundExpireMs must be a positive number if provided");
|
|
46
|
+
if (options.notFoundExpireMs !== undefined && options.notFoundExpireMs !== null && (typeof options.notFoundExpireMs !== "number" || options.notFoundExpireMs <= 0)) {
|
|
47
|
+
throw new Error("notFoundExpireMs must be a positive number or null if provided");
|
|
44
48
|
}
|
|
45
49
|
if (options.refreshLockInterval !== undefined) {
|
|
46
50
|
if (typeof options.refreshLockInterval !== "number" || options.refreshLockInterval <= 0) {
|
|
@@ -64,8 +68,11 @@ async function createRedis(redisClient) {
|
|
|
64
68
|
},
|
|
65
69
|
fetch: async () => {
|
|
66
70
|
const lockInterval = options.lockInterval ?? 8192;
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
let realExpireMs = options.realExpireMs ?? null;
|
|
72
|
+
if (options.expireMs !== null) {
|
|
73
|
+
realExpireMs = options.realExpireMs ?? Math.floor(options.expireMs * (Math.random() + 0.5)) + 8192;
|
|
74
|
+
}
|
|
75
|
+
const notFoundExpireMs = options.notFoundExpireMs ?? (options.expireMs !== null ? Math.min(options.expireMs, 16384) : 86400000);
|
|
69
76
|
const resultRaw = await redis.GET(key);
|
|
70
77
|
const result = resultRaw ? reviveJSONParse(JSON.parse(resultRaw)) : undefined;
|
|
71
78
|
const now = Date.now();
|
|
@@ -93,9 +100,16 @@ async function createRedis(redisClient) {
|
|
|
93
100
|
await redis.DEL(lockKey);
|
|
94
101
|
throw error;
|
|
95
102
|
}
|
|
96
|
-
|
|
103
|
+
let effectiveExpireMs = null;
|
|
104
|
+
if (data !== undefined) {
|
|
105
|
+
if (options.expireMs !== null) {
|
|
106
|
+
effectiveExpireMs = options.expireMs + (realExpireMs ?? 0);
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
effectiveExpireMs = notFoundExpireMs;
|
|
110
|
+
}
|
|
97
111
|
const cacheValue = {
|
|
98
|
-
T: now + (data !== undefined ? options.expireMs : notFoundExpireMs),
|
|
112
|
+
T: now + (data !== undefined ? options.expireMs ?? Number.MAX_SAFE_INTEGER : notFoundExpireMs),
|
|
99
113
|
R: data
|
|
100
114
|
};
|
|
101
115
|
const refreshLockExists = await redis.EXISTS(refreshLockKey);
|
|
@@ -103,7 +117,11 @@ async function createRedis(redisClient) {
|
|
|
103
117
|
await redis.DEL(lockKey);
|
|
104
118
|
return data;
|
|
105
119
|
}
|
|
106
|
-
|
|
120
|
+
if (effectiveExpireMs === null) {
|
|
121
|
+
await redis.MULTI().SET(key, JSON.stringify(cacheValue)).DEL(lockKey).EXEC();
|
|
122
|
+
} else {
|
|
123
|
+
await redis.MULTI().PSETEX(key, effectiveExpireMs, JSON.stringify(cacheValue)).DEL(lockKey).EXEC();
|
|
124
|
+
}
|
|
107
125
|
return data;
|
|
108
126
|
},
|
|
109
127
|
refresh: async () => {
|
|
@@ -120,13 +138,27 @@ async function createRedis(redisClient) {
|
|
|
120
138
|
await redis.DEL(refreshLockKey);
|
|
121
139
|
throw error;
|
|
122
140
|
}
|
|
123
|
-
|
|
124
|
-
|
|
141
|
+
let realExpireMs = options.realExpireMs ?? null;
|
|
142
|
+
if (options.expireMs !== null) {
|
|
143
|
+
realExpireMs = options.realExpireMs ?? Math.floor(options.expireMs * (Math.random() + 0.5)) + 8192;
|
|
144
|
+
}
|
|
145
|
+
let effectiveExpireMs = null;
|
|
146
|
+
if (data !== undefined) {
|
|
147
|
+
if (options.expireMs !== null) {
|
|
148
|
+
effectiveExpireMs = options.expireMs + (realExpireMs ?? 0);
|
|
149
|
+
}
|
|
150
|
+
} else {
|
|
151
|
+
effectiveExpireMs = options.notFoundExpireMs ?? (options.expireMs !== null ? Math.min(options.expireMs, 16384) : 86400000);
|
|
152
|
+
}
|
|
125
153
|
const cacheValue = {
|
|
126
|
-
T: now + (data !== undefined ? options.expireMs : options.notFoundExpireMs ?? Math.min(options.expireMs, 16384)),
|
|
154
|
+
T: now + (data !== undefined ? options.expireMs ?? Number.MAX_SAFE_INTEGER : options.notFoundExpireMs ?? (options.expireMs !== null ? Math.min(options.expireMs, 16384) : 86400000)),
|
|
127
155
|
R: data
|
|
128
156
|
};
|
|
129
|
-
|
|
157
|
+
if (effectiveExpireMs === null) {
|
|
158
|
+
await redis.SET(key, JSON.stringify(cacheValue));
|
|
159
|
+
} else {
|
|
160
|
+
await redis.PSETEX(key, effectiveExpireMs, JSON.stringify(cacheValue));
|
|
161
|
+
}
|
|
130
162
|
}
|
|
131
163
|
};
|
|
132
164
|
},
|
|
@@ -136,7 +168,10 @@ async function createRedis(redisClient) {
|
|
|
136
168
|
return result ? Number(result) : 0;
|
|
137
169
|
},
|
|
138
170
|
add: async (amount, expireMs) => {
|
|
139
|
-
if (
|
|
171
|
+
if (expireMs === null) {
|
|
172
|
+
const result = await redis.INCRBY(key, amount);
|
|
173
|
+
return result;
|
|
174
|
+
} else if (!expireMs) {
|
|
140
175
|
const result = await redis.INCRBY(key, amount);
|
|
141
176
|
return result;
|
|
142
177
|
} else {
|
|
@@ -216,5 +251,5 @@ export {
|
|
|
216
251
|
createRedis
|
|
217
252
|
};
|
|
218
253
|
|
|
219
|
-
//# debugId=
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+ID0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogVCB8IHVuZGVmaW5lZDtcclxuICAgIGV4cGlyZU1zOiBudW1iZXI7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpc0ZldGNoT3B0aW9uczxUPiA9IHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IFQgfCB1bmRlZmluZWQ7XHJcbiAgICBleHBpcmVNczogbnVtYmVyO1xyXG4gICAgcmVhbEV4cGlyZU1zPzogbnVtYmVyO1xyXG4gICAgbG9ja0ludGVydmFsPzogbnVtYmVyO1xyXG4gICAgcmVmcmVzaExvY2tJbnRlcnZhbD86IG51bWJlcjtcclxuICAgIG5vdEZvdW5kRXhwaXJlTXM/OiBudW1iZXI7XHJcbiAgICBmZXRjaDogKCkgPT4gVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpczxSZWRpc1QgPSBhbnk+ID0ge1xyXG4gICAgcmVkaXM6IFJlZGlzVDtcclxuICAgIHVzZUNhY2hlOiA8VD4oa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBNaWxraW9SZWRpc0NhY2hlT3B0aW9uczxUPikgPT4ge1xyXG4gICAgICAgIHNldDogKHZhbHVlOiBULCBleHBpcmVNczogbnVtYmVyKSA9PiBQcm9taXNlPFQ+O1xyXG4gICAgICAgIGdldDogKCkgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcclxuICAgICAgICBwdWxsOiAoKSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xyXG4gICAgICAgIGhhczogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcclxuICAgICAgICBkZWw6ICgpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG4gICAgdXNlRmV0Y2g6IDxUPihrZXk6IHN0cmluZywgb3B0aW9uczogTWlsa2lvUmVkaXNGZXRjaE9wdGlvbnM8VD4pID0+IHtcclxuICAgICAgICBoYXM6ICgpID0+IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICAgICAgZGVsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgICAgIGZldGNoOiAoKSA9PiBQcm9taXNlPFQ+O1xyXG4gICAgICAgIHJlZnJlc2g6ICgpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG4gICAgdXNlQ291bnQ6IChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGdldDogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgICAgIGFkZDogKGFtb3VudDogbnVtYmVyLCBleHBpcmVNcz86IG51bWJlcikgPT4gUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgICAgIHN1YjogKGFtb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlcj47XHJcbiAgICB9O1xyXG4gICAgdXNlQ2xvY2tJbjogKGtleTogc3RyaW5nLCBjbGVhbkRhdGU6IERhdGUpID0+IHtcclxuICAgICAgICBjbG9ja0luOiAob2Zmc2V0OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICAgICAgY2hlY2s6IChvZmZzZXQ6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuPjtcclxuICAgICAgICBmaXJzdENsb2NrSW46ICgpID0+IFByb21pc2U8bnVtYmVyPjtcclxuICAgICAgICBsYXN0Q2xvY2tJbjogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgICAgIHRvQXJyYXk6IChsZW5ndGg6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuW10+O1xyXG4gICAgICAgIGNvdW50OiAoKSA9PiBQcm9taXNlPG51bWJlcj47XHJcbiAgICAgICAgY2xlYW46ICgpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlZGlzPFJlZGlzVCBleHRlbmRzIHsgUFNFVEVYOiBhbnksIFtvdGhlcnM6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueSB9PihyZWRpc0NsaWVudDogUmVkaXNUKTogUHJvbWlzZTxNaWxraW9SZWRpczxSZWRpc1Q+PiB7XHJcbiAgICAvLyBjb25zdCByZWRpcyA9IHJlZGlzQ2xpZW50IGFzIGFueSBhcyBBd2FpdGVkPFJldHVyblR5cGU8UmV0dXJuVHlwZTx0eXBlb2YgTm9kZVJlZGlzLmNyZWF0ZUNsaWVudD5bJ2Nvbm5lY3QnXT4+O1xyXG4gICAgY29uc3QgcmVkaXMgPSByZWRpc0NsaWVudCBhcyBhbnk7XHJcblxyXG4gICAgY29uc3QgbWlsa2lvUmVkaXM6IGFueSA9IHtcclxuICAgICAgICByZWRpcyxcclxuICAgICAgICB1c2VDYWNoZTogPFQ+KGtleTogc3RyaW5nLCBvcHRpb25zPzogTWlsa2lvUmVkaXNDYWNoZU9wdGlvbnM8VD4pID0+ICh7XHJcbiAgICAgICAgICAgIHNldDogYXN5bmMgKHZhbHVlOiBULCBleHBpcmVNczogbnVtYmVyKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5QU0VURVgoa2V5LCBleHBpcmVNcywgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBvcHRpb25zPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0IGFzIGFueSBhcyBzdHJpbmcpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcHVsbDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuTVVMVEkoKS5HRVQoa2V5KS5ERUwoa2V5KS5FWEVDKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRSYXdbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gb3B0aW9ucz8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlc3VsdCBhcyBhbnkgYXMgc3RyaW5nKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhczogYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChrZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICB1c2VGZXRjaDogPE9wdGlvbnMgZXh0ZW5kcyBNaWxraW9SZWRpc0ZldGNoT3B0aW9uczxhbnk+PihrZXk6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlTXMgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5leHBpcmVNcyA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHBpcmVNcyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NrSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG9wdGlvbnMubG9ja0ludGVydmFsICE9PSBcIm51bWJlclwiIHx8IG9wdGlvbnMubG9ja0ludGVydmFsIDw9IDApKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVhbEV4cGlyZU1zICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLnJlYWxFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlYWxFeHBpcmVNcyA8PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVhbEV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgaWYgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPD0gMCkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdEZvdW5kRXhwaXJlTXMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZnJlc2hMb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NrSW50ZXJ2YWwgPSBvcHRpb25zLmxvY2tJbnRlcnZhbCA/PyA4MTkyO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA8PSBsb2NrSW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWZyZXNoTG9ja0ludGVydmFsIG11c3QgYmUgZ3JlYXRlciB0aGFuIGxvY2tJbnRlcnZhbFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmZldGNoICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZldGNoIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhhczogYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZGVsOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmV0Y2g6IGFzeW5jICgpOiBQcm9taXNlPEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+Pj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbEV4cGlyZU1zID0gb3B0aW9ucy5yZWFsRXhwaXJlTXMgPz8gTWF0aC5mbG9vcihvcHRpb25zLmV4cGlyZU1zICogKE1hdGgucmFuZG9tKCkgKyAwLjUpKSArIDgxOTI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdEZvdW5kRXhwaXJlTXMgPSBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRSYXcgPyAocmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0UmF3IGFzIHN0cmluZykpIGFzIHsgVDogbnVtYmVyOyBSOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfSkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuVCA+IG5vdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LlI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0tleSA9IGAke2tleX06cmVmcmVzaC1sb2NrYDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgcmVkaXMuRVhJU1RTKHJlZnJlc2hMb2NrS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LlIgOiBvcHRpb25zPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NrS2V5ID0gYCR7a2V5fTpsb2NrYDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NrU2V0ID0gYXdhaXQgcmVkaXMuU0VUKGxvY2tLZXksIFwiMVwiLCB7IFBYOiBsb2NrSW50ZXJ2YWwsIE5YOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvdExvY2sgPSBsb2NrU2V0ID09PSBcIk9LXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZ290TG9jaykgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdC5SIDogb3B0aW9ucy5kZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2hlY2tSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNoZWNrID0gcmVjaGVja1JhdyA/IChyZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZWNoZWNrUmF3IGFzIHN0cmluZykpIGFzIHsgVDogbnVtYmVyOyBSOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfSkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNoZWNrICYmIHJlY2hlY2suVCA+IG5vdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVjaGVjay5SO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGE6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYXdhaXQgb3B0aW9ucy5mZXRjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChsb2NrS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RpdmVFeHBpcmVNcyA9IGRhdGEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZXhwaXJlTXMgKyByZWFsRXhwaXJlTXMgOiBub3RGb3VuZEV4cGlyZU1zO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZVZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBUOiBub3cgKyAoZGF0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5leHBpcmVNcyA6IG5vdEZvdW5kRXhwaXJlTXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hMb2NrRXhpc3RzID0gYXdhaXQgcmVkaXMuRVhJU1RTKHJlZnJlc2hMb2NrS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmcmVzaExvY2tFeGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGxvY2tLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuUFNFVEVYKGtleSwgZWZmZWN0aXZlRXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKS5ERUwobG9ja0tleSkuRVhFQygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICByZWZyZXNoOiBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tLZXkgPSBgJHtrZXl9OnJlZnJlc2gtbG9ja2A7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tJbnRlcnZhbCA9IG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA/PyAob3B0aW9ucy5sb2NrSW50ZXJ2YWwgPz8gODE5MikgKyAxMDI0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5TRVQocmVmcmVzaExvY2tLZXksIFwiMVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBYOiByZWZyZXNoTG9ja0ludGVydmFsLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGF3YWl0IG9wdGlvbnMuZmV0Y2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwocmVmcmVzaExvY2tLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxFeHBpcmVNcyA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IE1hdGguZmxvb3Iob3B0aW9ucy5leHBpcmVNcyAqIChNYXRoLnJhbmRvbSgpICsgMC41KSkgKyA4MTkyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUV4cGlyZU1zID0gZGF0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5leHBpcmVNcyArIHJlYWxFeHBpcmVNcyA6IChvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVWYWx1ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVDogbm93ICsgKGRhdGEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZXhwaXJlTXMgOiAob3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zID8/IE1hdGgubWluKG9wdGlvbnMuZXhwaXJlTXMsIDE2Mzg0KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLlBTRVRFWChrZXksIGVmZmVjdGl2ZUV4cGlyZU1zLCBKU09OLnN0cmluZ2lmeShjYWNoZVZhbHVlKSk7IC8vIERvIG5vdCBjbGVhbiB0aGUgdXBkYXRlIGxvY2shIEluc3RlYWQsIHdhaXQgZm9yIGl0IHRvIGV4cGlyZSBuYXR1cmFsbHlcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXNlQ291bnQ6IChrZXk6IHN0cmluZykgPT4gKHtcclxuICAgICAgICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IE51bWJlcihyZXN1bHQpIDogMDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkOiBhc3luYyAoYW1vdW50OiBudW1iZXIsIGV4cGlyZU1zPzogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZXhwaXJlTXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5JTkNSQlkoa2V5LCBhbW91bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5NVUxUSSgpLklOQ1JCWShrZXksIGFtb3VudCkuUEVYUElSRShrZXksIGV4cGlyZU1zKS5FWEVDKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihyZXN1bHRbMF0pIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3ViOiBhc3luYyAoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuREVDUkJZKGtleSwgYW1vdW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICB1c2VDbG9ja0luOiAoa2V5OiBzdHJpbmcsIGNsZWFuRGF0ZTogRGF0ZSkgPT4gKHtcclxuICAgICAgICAgICAgY2xvY2tJbjogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5NVUxUSSgpLlNFVEJJVChrZXksIG9mZnNldCwgMSkuUEVYUElSRUFUKGtleSwgY2xlYW5EYXRlLmdldFRpbWUoKSkuRVhFQygpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjaGVjazogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVRCSVQoa2V5LCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gMTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlyc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxhc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEsIC0xKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b0FycmF5OiBhc3luYyAobGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW5bXT4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuQklURklFTEQoa2V5LCBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBgdSR7bGVuZ3RofWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogXCIjMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IE51bWJlci5wYXJzZUludChgJHtyZXN1bHRSYXd9YCkudG9TdHJpbmcoMikuc3BsaXQoXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxsID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aCAtIHJlc3VsdC5sZW5ndGg7IGkrKykgZmlsbC5wdXNoKFwiMFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZmlsbCwgLi4ucmVzdWx0XS5tYXAoKHYpID0+IHYgPT09IFwiMVwiKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY291bnQ6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuQklUQ09VTlQoa2V5KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjbGVhbjogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSksXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtaWxraW9SZWRpcztcclxufVxyXG5cclxuZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcclxuICAgIGNvbnN0IGlzb0RhdGVQYXR0ZXJuID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSwzfSk/KShafFsrLV1cXGR7Mn06P1xcZHsyfSk/JC87XHJcblxyXG4gICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4ganNvbjtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGpzb24ubWFwKChpdGVtKSA9PiByZXZpdmVKU09OUGFyc2UoaXRlbSkpIGFzIGFueTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gXCJvYmplY3RcIiAmJiBqc29uICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24pLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgYWNjW2tleSBhcyBrZXlvZiBUXSA9IHJldml2ZUpTT05QYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30gYXMgVCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IGpzb24ubWF0Y2goaXNvRGF0ZVBhdHRlcm4pO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKFwiOlwiLCBcIlwiKX1gIDogYCR7bWF0Y2hbMV19WmA7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBqc29uO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWRpcyA9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RUFDakMsSUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQUEsSUFDckIsT0FBTyxLQUFLLElBQUksQ0FBQyxTQUFTLGdCQUFnQixJQUFJLENBQUM7QUFBQSxFQUNuRDtBQUFBLEVBQ0EsSUFBSSxPQUFPLFNBQVMsWUFBWSxTQUFTLE1BQU07QUFBQSxJQUMzQyxPQUFPLE9BQU8sUUFBUSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sS0FBSyxXQUFXO0FBQUEsTUFDdEQsSUFBSSxPQUFrQixnQkFBZ0IsS0FBSztBQUFBLE1BQzNDLE9BQU87QUFBQSxPQUNSLENBQUMsQ0FBTTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLElBQUksT0FBTyxTQUFTLFVBQVU7QUFBQSxJQUMxQixNQUFNLFFBQVEsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUN2QyxJQUFJLE9BQU87QUFBQSxNQUNQLE1BQU0sdUJBQXVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxNQUFNLEdBQUcsUUFBUSxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU07QUFBQSxNQUM3RixPQUFPLElBQUksS0FBSyxvQkFBb0I7QUFBQSxJQUN4QztBQUFBLEVBQ0o7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIkNBOUM1QzUxNTM3Nzc0N0Q2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
|
254
|
+
//# debugId=840E4CE7CC3CCA9864756E2164756E21
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+ID0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogVCB8IHVuZGVmaW5lZDtcclxuICAgIGV4cGlyZU1zOiBudW1iZXIgfCBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgTWlsa2lvUmVkaXNGZXRjaE9wdGlvbnM8VD4gPSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBUIHwgdW5kZWZpbmVkO1xyXG4gICAgZXhwaXJlTXM6IG51bWJlciB8IG51bGw7XHJcbiAgICByZWFsRXhwaXJlTXM/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgbG9ja0ludGVydmFsPzogbnVtYmVyO1xyXG4gICAgcmVmcmVzaExvY2tJbnRlcnZhbD86IG51bWJlcjtcclxuICAgIG5vdEZvdW5kRXhwaXJlTXM/OiBudW1iZXIgfCBudWxsO1xyXG4gICAgZmV0Y2g6ICgpID0+IFQgfCB1bmRlZmluZWQgfCBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgTWlsa2lvUmVkaXM8UmVkaXNUID0gYW55PiA9IHtcclxuICAgIHJlZGlzOiBSZWRpc1Q7XHJcbiAgICB1c2VDYWNoZTogPFQ+KGtleTogc3RyaW5nLCBvcHRpb25zPzogTWlsa2lvUmVkaXNDYWNoZU9wdGlvbnM8VD4pID0+IHtcclxuICAgICAgICBzZXQ6ICh2YWx1ZTogVCwgZXhwaXJlTXM6IG51bWJlciB8IG51bGwpID0+IFByb21pc2U8VD47XHJcbiAgICAgICAgZ2V0OiAoKSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xyXG4gICAgICAgIHB1bGw6ICgpID0+IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XHJcbiAgICAgICAgaGFzOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgICAgIGRlbDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcclxuICAgIH07XHJcbiAgICB1c2VGZXRjaDogPFQ+KGtleTogc3RyaW5nLCBvcHRpb25zOiBNaWxraW9SZWRpc0ZldGNoT3B0aW9uczxUPikgPT4ge1xyXG4gICAgICAgIGhhczogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcclxuICAgICAgICBkZWw6ICgpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICAgICAgZmV0Y2g6ICgpID0+IFByb21pc2U8VD47XHJcbiAgICAgICAgcmVmcmVzaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcclxuICAgIH07XHJcbiAgICB1c2VDb3VudDogKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiBQcm9taXNlPG51bWJlcj47XHJcbiAgICAgICAgYWRkOiAoYW1vdW50OiBudW1iZXIsIGV4cGlyZU1zPzogbnVtYmVyIHwgbnVsbCkgPT4gUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgICAgIHN1YjogKGFtb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlcj47XHJcbiAgICB9O1xyXG4gICAgdXNlQ2xvY2tJbjogKGtleTogc3RyaW5nLCBjbGVhbkRhdGU6IERhdGUpID0+IHtcclxuICAgICAgICBjbG9ja0luOiAob2Zmc2V0OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICAgICAgY2hlY2s6IChvZmZzZXQ6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuPjtcclxuICAgICAgICBmaXJzdENsb2NrSW46ICgpID0+IFByb21pc2U8bnVtYmVyPjtcclxuICAgICAgICBsYXN0Q2xvY2tJbjogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgICAgIHRvQXJyYXk6IChsZW5ndGg6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuW10+O1xyXG4gICAgICAgIGNvdW50OiAoKSA9PiBQcm9taXNlPG51bWJlcj47XHJcbiAgICAgICAgY2xlYW46ICgpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlZGlzPFJlZGlzVCBleHRlbmRzIHsgUFNFVEVYOiBhbnk7IFNFVDogYW55O1tvdGhlcnM6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueSB9PihyZWRpc0NsaWVudDogUmVkaXNUKTogUHJvbWlzZTxNaWxraW9SZWRpczxSZWRpc1Q+PiB7XHJcbiAgICBjb25zdCByZWRpcyA9IHJlZGlzQ2xpZW50IGFzIGFueTtcclxuXHJcbiAgICBjb25zdCBtaWxraW9SZWRpczogYW55ID0ge1xyXG4gICAgICAgIHJlZGlzLFxyXG4gICAgICAgIHVzZUNhY2hlOiA8VD4oa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBNaWxraW9SZWRpc0NhY2hlT3B0aW9uczxUPikgPT4gKHtcclxuICAgICAgICAgICAgc2V0OiBhc3luYyAodmFsdWU6IFQsIGV4cGlyZU1zOiBudW1iZXIgfCBudWxsKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJlTXMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmsLjkuYXkv53lrZhcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5TRVQoa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5QU0VURVgoa2V5LCBleHBpcmVNcywgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBvcHRpb25zPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0IGFzIGFueSBhcyBzdHJpbmcpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcHVsbDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuTVVMVEkoKS5HRVQoa2V5KS5ERUwoa2V5KS5FWEVDKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRSYXdbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gb3B0aW9ucz8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlc3VsdCBhcyBhbnkgYXMgc3RyaW5nKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhczogYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChrZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICB1c2VGZXRjaDogPE9wdGlvbnMgZXh0ZW5kcyBNaWxraW9SZWRpc0ZldGNoT3B0aW9uczxhbnk+PihrZXk6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlTXMgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5leHBpcmVNcyA8PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXhwaXJlTXMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvciBudWxsXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NrSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG9wdGlvbnMubG9ja0ludGVydmFsICE9PSBcIm51bWJlclwiIHx8IG9wdGlvbnMubG9ja0ludGVydmFsIDw9IDApKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVhbEV4cGlyZU1zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZWFsRXhwaXJlTXMgIT09IG51bGwgJiYgKHR5cGVvZiBvcHRpb25zLnJlYWxFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlYWxFeHBpcmVNcyA8PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVhbEV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgb3IgbnVsbCBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPD0gMCkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdEZvdW5kRXhwaXJlTXMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvciBudWxsIGlmIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsICE9PSBcIm51bWJlclwiIHx8IG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsIDw9IGxvY2tJbnRlcnZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZnJlc2hMb2NrSW50ZXJ2YWwgbXVzdCBiZSBncmVhdGVyIHRoYW4gbG9ja0ludGVydmFsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmV0Y2ggIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmV0Y2ggbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaGFzOiBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwoa2V5KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmZXRjaDogYXN5bmMgKCk6IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+PiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9ja0ludGVydmFsID0gb3B0aW9ucy5sb2NrSW50ZXJ2YWwgPz8gODE5MjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5aSE55CG5rC45LmF5L+d5a2Y55qE5oOF5Ya1XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxFeHBpcmVNczogbnVtYmVyIHwgbnVsbCA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXhwaXJlTXMgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhbEV4cGlyZU1zID0gb3B0aW9ucy5yZWFsRXhwaXJlTXMgPz8gTWF0aC5mbG9vcihvcHRpb25zLmV4cGlyZU1zICogKE1hdGgucmFuZG9tKCkgKyAwLjUpKSArIDgxOTI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RGb3VuZEV4cGlyZU1zID0gb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zID8/IChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsID8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpIDogODY0MDAwMDApOyAvLyDpu5jorqQx5aSpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdFJhdyA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdFJhdyA/IChyZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXN1bHRSYXcgYXMgc3RyaW5nKSkgYXMgeyBUOiBudW1iZXI7IFI6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PiB9KSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5UID4gbm93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuUjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hMb2NrS2V5ID0gYCR7a2V5fTpyZWZyZXNoLWxvY2tgO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhd2FpdCByZWRpcy5FWElTVFMocmVmcmVzaExvY2tLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuUiA6IG9wdGlvbnM/LmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tLZXkgPSBgJHtrZXl9OmxvY2tgO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tTZXQgPSBhd2FpdCByZWRpcy5TRVQobG9ja0tleSwgXCIxXCIsIHsgUFg6IGxvY2tJbnRlcnZhbCwgTlg6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ290TG9jayA9IGxvY2tTZXQgPT09IFwiT0tcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFnb3RMb2NrKSByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LlIgOiBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjaGVja1JhdyA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2hlY2sgPSByZWNoZWNrUmF3ID8gKHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlY2hlY2tSYXcgYXMgc3RyaW5nKSkgYXMgeyBUOiBudW1iZXI7IFI6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PiB9KSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY2hlY2sgJiYgcmVjaGVjay5UID4gbm93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWNoZWNrLlI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YTogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+O1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBvcHRpb25zLmZldGNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGxvY2tLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOiuoeeul+i/h+acn+aXtumXtFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlZmZlY3RpdmVFeHBpcmVNczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlRXhwaXJlTXMgPSBvcHRpb25zLmV4cGlyZU1zICsgKHJlYWxFeHBpcmVNcyA/PyAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpwgZXhwaXJlTXMg5Li6IG51bGzvvIxlZmZlY3RpdmVFeHBpcmVNcyDkv53mjIEgbnVsbO+8iOawuOS5heS/neWtmO+8iVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUV4cGlyZU1zID0gbm90Rm91bmRFeHBpcmVNcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFQ6IG5vdyArIChkYXRhICE9PSB1bmRlZmluZWQgPyAob3B0aW9ucy5leHBpcmVNcyA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgOiBub3RGb3VuZEV4cGlyZU1zKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUjogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0V4aXN0cyA9IGF3YWl0IHJlZGlzLkVYSVNUUyhyZWZyZXNoTG9ja0tleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZnJlc2hMb2NrRXhpc3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChsb2NrS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWZmZWN0aXZlRXhwaXJlTXMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5rC45LmF5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuU0VUKGtleSwgSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpLkRFTChsb2NrS2V5KS5FWEVDKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuTVVMVEkoKS5QU0VURVgoa2V5LCBlZmZlY3RpdmVFeHBpcmVNcywgSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpLkRFTChsb2NrS2V5KS5FWEVDKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICByZWZyZXNoOiBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tLZXkgPSBgJHtrZXl9OnJlZnJlc2gtbG9ja2A7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tJbnRlcnZhbCA9IG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA/PyAob3B0aW9ucy5sb2NrSW50ZXJ2YWwgPz8gODE5MikgKyAxMDI0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5TRVQocmVmcmVzaExvY2tLZXksIFwiMVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBYOiByZWZyZXNoTG9ja0ludGVydmFsLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGF3YWl0IG9wdGlvbnMuZmV0Y2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwocmVmcmVzaExvY2tLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWkhOeQhuawuOS5heS/neWtmOeahOaDheWGtVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsRXhwaXJlTXM6IG51bWJlciB8IG51bGwgPSBvcHRpb25zLnJlYWxFeHBpcmVNcyA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxFeHBpcmVNcyA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IE1hdGguZmxvb3Iob3B0aW9ucy5leHBpcmVNcyAqIChNYXRoLnJhbmRvbSgpICsgMC41KSkgKyA4MTkyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6K6h566X6L+H5pyf5pe26Ze0XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVmZmVjdGl2ZUV4cGlyZU1zOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVFeHBpcmVNcyA9IG9wdGlvbnMuZXhwaXJlTXMgKyAocmVhbEV4cGlyZU1zID8/IDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenCBleHBpcmVNcyDkuLogbnVsbO+8jGVmZmVjdGl2ZUV4cGlyZU1zIOS/neaMgSBudWxs77yI5rC45LmF5L+d5a2Y77yJXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlRXhwaXJlTXMgPSBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gKG9wdGlvbnMuZXhwaXJlTXMgIT09IG51bGwgPyBNYXRoLm1pbihvcHRpb25zLmV4cGlyZU1zLCAxNjM4NCkgOiA4NjQwMDAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZVZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBUOiBub3cgKyAoZGF0YSAhPT0gdW5kZWZpbmVkID8gKG9wdGlvbnMuZXhwaXJlTXMgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIDogKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyA/PyAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCA/IE1hdGgubWluKG9wdGlvbnMuZXhwaXJlTXMsIDE2Mzg0KSA6IDg2NDAwMDAwKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZmZlY3RpdmVFeHBpcmVNcyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmsLjkuYXkv53lrZhcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuU0VUKGtleSwgSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLlBTRVRFWChrZXksIGVmZmVjdGl2ZUV4cGlyZU1zLCBKU09OLnN0cmluZ2lmeShjYWNoZVZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCBjbGVhbiB0aGUgdXBkYXRlIGxvY2shIEluc3RlYWQsIHdhaXQgZm9yIGl0IHRvIGV4cGlyZSBuYXR1cmFsbHlcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXNlQ291bnQ6IChrZXk6IHN0cmluZykgPT4gKHtcclxuICAgICAgICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IE51bWJlcihyZXN1bHQpIDogMDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkOiBhc3luYyAoYW1vdW50OiBudW1iZXIsIGV4cGlyZU1zPzogbnVtYmVyIHwgbnVsbCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJlTXMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmsLjkuYXkv53lrZhcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5JTkNSQlkoa2V5LCBhbW91bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZXhwaXJlTXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5JTkNSQlkoa2V5LCBhbW91bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5NVUxUSSgpLklOQ1JCWShrZXksIGFtb3VudCkuUEVYUElSRShrZXksIGV4cGlyZU1zKS5FWEVDKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihyZXN1bHRbMF0pIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3ViOiBhc3luYyAoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuREVDUkJZKGtleSwgYW1vdW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICB1c2VDbG9ja0luOiAoa2V5OiBzdHJpbmcsIGNsZWFuRGF0ZTogRGF0ZSkgPT4gKHtcclxuICAgICAgICAgICAgY2xvY2tJbjogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5NVUxUSSgpLlNFVEJJVChrZXksIG9mZnNldCwgMSkuUEVYUElSRUFUKGtleSwgY2xlYW5EYXRlLmdldFRpbWUoKSkuRVhFQygpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjaGVjazogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVRCSVQoa2V5LCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gMTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlyc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxhc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEsIC0xKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b0FycmF5OiBhc3luYyAobGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW5bXT4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuQklURklFTEQoa2V5LCBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBgdSR7bGVuZ3RofWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogXCIjMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IE51bWJlci5wYXJzZUludChgJHtyZXN1bHRSYXd9YCkudG9TdHJpbmcoMikuc3BsaXQoXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxsID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aCAtIHJlc3VsdC5sZW5ndGg7IGkrKykgZmlsbC5wdXNoKFwiMFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZmlsbCwgLi4ucmVzdWx0XS5tYXAoKHYpID0+IHYgPT09IFwiMVwiKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY291bnQ6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuQklUQ09VTlQoa2V5KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjbGVhbjogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSksXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtaWxraW9SZWRpcztcclxufVxyXG5cclxuZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcclxuICAgIGNvbnN0IGlzb0RhdGVQYXR0ZXJuID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSwzfSk/KShafFsrLV1cXGR7Mn06P1xcZHsyfSk/JC87XHJcblxyXG4gICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4ganNvbjtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGpzb24ubWFwKChpdGVtKSA9PiByZXZpdmVKU09OUGFyc2UoaXRlbSkpIGFzIGFueTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gXCJvYmplY3RcIiAmJiBqc29uICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24pLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgYWNjW2tleSBhcyBrZXlvZiBUXSA9IHJldml2ZUpTT05QYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30gYXMgVCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IGpzb24ubWF0Y2goaXNvRGF0ZVBhdHRlcm4pO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKFwiOlwiLCBcIlwiKX1gIDogYCR7bWF0Y2hbMV19WmA7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBqc29uO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWRpcyA9IE1pbGtpb1JlZGlzOyIKICBdLAogICJtYXBwaW5ncyI6ICI7QUE4Q0EsZUFBc0IsV0FBNkYsQ0FBQyxhQUFtRDtBQUFBLEVBQ25LLE1BQU0sUUFBUTtBQUFBLEVBRWQsTUFBTSxjQUFtQjtBQUFBLElBQ3JCO0FBQUEsSUFDQSxVQUFVLENBQUksS0FBYSxhQUEwQztBQUFBLE1B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QUFBQSxJQUMzQyxPQUFPLE9BQU8sUUFBUSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sS0FBSyxXQUFXO0FBQUEsTUFDdEQsSUFBSSxPQUFrQixnQkFBZ0IsS0FBSztBQUFBLE1BQzNDLE9BQU87QUFBQSxPQUNSLENBQUMsQ0FBTTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLElBQUksT0FBTyxTQUFTLFVBQVU7QUFBQSxJQUMxQixNQUFNLFFBQVEsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUN2QyxJQUFJLE9BQU87QUFBQSxNQUNQLE1BQU0sdUJBQXVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxNQUFNLEdBQUcsUUFBUSxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU07QUFBQSxNQUM3RixPQUFPLElBQUksS0FBSyxvQkFBb0I7QUFBQSxJQUN4QztBQUFBLEVBQ0o7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIjg0MEU0Q0U3Q0MzQ0NBOTg2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@milkio/redis","version":"1.0.0-beta.
|
|
1
|
+
{"name":"@milkio/redis","version":"1.0.0-beta.188","type":"module","exports":"./index.js","types":"./index.d.ts","dependencies":{}}
|