@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.
Files changed (3) hide show
  1. package/index.d.ts +7 -6
  2. package/index.js +54 -19
  3. 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
- await redis.PSETEX(key, expireMs, JSON.stringify(value));
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
- const realExpireMs = options.realExpireMs ?? Math.floor(options.expireMs * (Math.random() + 0.5)) + 8192;
68
- const notFoundExpireMs = options.notFoundExpireMs ?? Math.min(options.expireMs, 16384);
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
- const effectiveExpireMs = data !== undefined ? options.expireMs + realExpireMs : notFoundExpireMs;
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
- await redis.MULTI().PSETEX(key, effectiveExpireMs, JSON.stringify(cacheValue)).DEL(lockKey).EXEC();
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
- const realExpireMs = options.realExpireMs ?? Math.floor(options.expireMs * (Math.random() + 0.5)) + 8192;
124
- const effectiveExpireMs = data !== undefined ? options.expireMs + realExpireMs : options.notFoundExpireMs ?? Math.min(options.expireMs, 16384);
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
- await redis.PSETEX(key, effectiveExpireMs, JSON.stringify(cacheValue));
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 (!expireMs) {
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=CA9C5C515377747D64756E2164756E21
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.186","type":"module","exports":"./index.js","types":"./index.d.ts","dependencies":{}}
1
+ {"name":"@milkio/redis","version":"1.0.0-beta.188","type":"module","exports":"./index.js","types":"./index.d.ts","dependencies":{}}