@wppconnect/server 2.2.4 → 2.2.5

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.
@@ -14,10 +14,11 @@
14
14
 
15
15
 
16
16
  var _axios = _interopRequireDefault(require("axios"));
17
- var _bufferToStream = _interopRequireDefault(require("buffer-to-stream"));
18
17
  var _formData = _interopRequireDefault(require("form-data"));
19
18
  var _mimeTypes = _interopRequireDefault(require("mime-types"));
20
19
 
20
+ var _bufferutils = _interopRequireDefault(require("./bufferutils"));
21
+
21
22
  var _sessionUtil = require("./sessionUtil"); /*
22
23
  * Copyright 2021 WPPConnect Team
23
24
  *
@@ -32,8 +33,8 @@ var _sessionUtil = require("./sessionUtil"); /*
32
33
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
33
34
  * See the License for the specific language governing permissions and
34
35
  * limitations under the License.
35
- */class chatWootClient {constructor(config, session) {this.config = config;this.mobile_name = this.config.mobile_name ?
36
- this.config.mobile_name :
36
+ */ // import bufferUtils from './bufferutils';
37
+ class chatWootClient {constructor(config, session) {this.config = config;this.mobile_name = this.config.mobile_name ? this.config.mobile_name :
37
38
  `WPPConnect`;
38
39
  this.mobile_number = this.config.mobile_number ?
39
40
  this.config.mobile_number :
@@ -86,8 +87,94 @@ var _sessionUtil = require("./sessionUtil"); /*
86
87
  });
87
88
  }
88
89
 
90
+ // async sendMessage(client: any, message: any) {
91
+ // if (message.isGroupMsg || message.chatId.indexOf('@broadcast') > 0) return;
92
+ // const contact = await this.createContact(message);
93
+ // const conversation = await this.createConversation(
94
+ // contact,
95
+ // message.chatId.split('@')[0]
96
+ // );
97
+
98
+ // try {
99
+ // if (
100
+ // message.type == 'image' ||
101
+ // message.type == 'video' ||
102
+ // message.type == 'in' ||
103
+ // message.type == 'document' ||
104
+ // message.type == 'ptt' ||
105
+ // message.type == 'audio' ||
106
+ // message.type == 'sticker'
107
+ // ) {
108
+ // if (message.mimetype == 'image/webp') message.mimetype = 'image/jpeg';
109
+ // const extension = mime.extension(message.mimetype);
110
+ // const filename = `${message.timestamp}.${extension}`;
111
+ // let b64;
112
+
113
+ // if (message.qrCode) b64 = message.qrCode;
114
+ // else {
115
+ // const buffer = await client.decryptFile(message);
116
+ // b64 = await buffer.toString('base64');
117
+ // }
118
+
119
+ // const mediaData = Buffer.from(b64, 'base64');
120
+
121
+ // // Create a readable stream from the Buffer
122
+ // const stream = new Readable();
123
+ // stream.push(mediaData);
124
+ // stream.push(null); // Signaling the end of the stream
125
+
126
+ // const data = new FormData();
127
+ // if (message.caption) {
128
+ // data.append('content', message.caption);
129
+ // }
130
+
131
+ // data.append('attachments[]', stream, {
132
+ // filename: filename,
133
+ // contentType: message.mimetype,
134
+ // });
135
+
136
+ // data.append('message_type', 'incoming');
137
+ // data.append('private', 'false');
138
+
139
+ // const configPost = Object.assign(
140
+ // {},
141
+ // {
142
+ // baseURL: this.config.baseURL,
143
+ // headers: {
144
+ // 'Content-Type': 'application/json;charset=utf-8',
145
+ // api_access_token: this.config.token,
146
+ // },
147
+ // }
148
+ // );
149
+
150
+ // configPost.headers = { ...configPost.headers, ...data.getHeaders() };
151
+ // console.log('PRÉ-REQUEST');
152
+ // const result = await axios.post(
153
+ // `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`,
154
+ // data,
155
+ // configPost
156
+ // );
157
+ // console.log('POS-REQUEST');
158
+ // return result;
159
+ // } else {
160
+ // const body = {
161
+ // content: message.body,
162
+ // message_type: 'incoming',
163
+ // };
164
+ // const { data } = await this.api.post(
165
+ // `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`,
166
+ // body
167
+ // );
168
+ // return data;
169
+ // }
170
+ // } catch (e) {
171
+ // return null;
172
+ // }
173
+ // }
174
+
89
175
  async sendMessage(client, message) {
90
176
  if (message.isGroupMsg || message.chatId.indexOf('@broadcast') > 0) return;
177
+
91
178
  const contact = await this.createContact(message);
92
179
  const conversation = await this.createConversation(
93
180
  contact,
@@ -96,55 +183,54 @@ var _sessionUtil = require("./sessionUtil"); /*
96
183
 
97
184
  try {
98
185
  if (
99
- message.type == 'image' ||
100
- message.type == 'video' ||
101
- message.type == 'in' ||
102
- message.type == 'document' ||
103
- message.type == 'ptt' ||
104
- message.type == 'audio' ||
105
- message.type == 'sticker')
186
+ [
187
+ 'image',
188
+ 'video',
189
+ 'in',
190
+ 'document',
191
+ 'ptt',
192
+ 'audio',
193
+ 'sticker'].
194
+ includes(message.type))
106
195
  {
107
- if (message.mimetype == 'image/webp') message.mimetype = 'image/jpeg';
196
+ if (message.mimetype === 'image/webp') message.mimetype = 'image/jpeg';
108
197
  const extension = _mimeTypes.default.extension(message.mimetype);
109
198
  const filename = `${message.timestamp}.${extension}`;
110
199
  let b64;
111
200
 
112
- if (message.qrCode) b64 = message.qrCode;else
113
- {
201
+ if (message.qrCode) {
202
+ b64 = message.qrCode;
203
+ } else {
114
204
  const buffer = await client.decryptFile(message);
115
- b64 = await buffer.toString('base64');
205
+ b64 = buffer.toString('base64');
116
206
  }
117
207
 
118
208
  const mediaData = Buffer.from(b64, 'base64');
209
+ const stream = _bufferutils.default.bufferToReadableStream(mediaData);
119
210
 
120
211
  const data = new _formData.default();
121
212
  if (message.caption) {
122
213
  data.append('content', message.caption);
123
214
  }
124
- data.append('attachments[]', (0, _bufferToStream.default)(mediaData), {
215
+
216
+ data.append('attachments[]', stream, {
125
217
  filename: filename,
126
218
  contentType: message.mimetype
127
219
  });
220
+
128
221
  data.append('message_type', 'incoming');
129
222
  data.append('private', 'false');
130
223
 
131
- const configPost = Object.assign(
132
- {},
133
- {
134
- baseURL: this.config.baseURL,
135
- headers: {
136
- 'Content-Type': 'application/json;charset=utf-8',
137
- api_access_token: this.config.token
138
- }
224
+ const configPost = {
225
+ baseURL: this.config.baseURL,
226
+ headers: {
227
+ api_access_token: this.config.token,
228
+ ...data.getHeaders()
139
229
  }
140
- );
141
- configPost.headers = { ...configPost.headers, ...data.getHeaders() };
230
+ };
231
+ const endpoint = `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`;
142
232
 
143
- const result = await _axios.default.post(
144
- `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`,
145
- data,
146
- configPost
147
- );
233
+ const result = await _axios.default.post(endpoint, data, configPost);
148
234
 
149
235
  return result;
150
236
  } else {
@@ -152,13 +238,13 @@ var _sessionUtil = require("./sessionUtil"); /*
152
238
  content: message.body,
153
239
  message_type: 'incoming'
154
240
  };
155
- const { data } = await this.api.post(
156
- `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`,
157
- body
158
- );
241
+ const endpoint = `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`;
242
+
243
+ const { data } = await this.api.post(endpoint, body);
159
244
  return data;
160
245
  }
161
246
  } catch (e) {
247
+ console.error('Error sending message:', e);
162
248
  return null;
163
249
  }
164
250
  }
@@ -205,10 +291,10 @@ var _sessionUtil = require("./sessionUtil"); /*
205
291
  async findConversation(contact) {
206
292
  try {
207
293
  const { data } = await this.api.get(
208
- `api/v1/accounts/${this.account_id}/conversations?inbox_id=${this.inbox_id}&status=all`
294
+ `api/v1/accounts/${this.account_id}/contacts/${contact.id}/conversations`
209
295
  );
210
- return data.data.payload.find(
211
- (e) => e.meta.sender.id == contact.id && e.status != 'resolved'
296
+ return data.payload.find(
297
+ (e) => e.inbox_id == this.inbox_id && e.status != 'resolved'
212
298
  );
213
299
  } catch (e) {
214
300
  console.log(e);
@@ -239,4 +325,4 @@ var _sessionUtil = require("./sessionUtil"); /*
239
325
  }
240
326
  }
241
327
  }exports.default = chatWootClient;
242
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9idWZmZXJUb1N0cmVhbSIsIl9mb3JtRGF0YSIsIl9taW1lVHlwZXMiLCJfc2Vzc2lvblV0aWwiLCJjaGF0V29vdENsaWVudCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwic2Vzc2lvbiIsIm1vYmlsZV9uYW1lIiwibW9iaWxlX251bWJlciIsInNlbmRlciIsInB1c2huYW1lIiwiaWQiLCJhY2NvdW50X2lkIiwiaW5ib3hfaWQiLCJhcGkiLCJheGlvcyIsImNyZWF0ZSIsImJhc2VVUkwiLCJoZWFkZXJzIiwiYXBpX2FjY2Vzc190b2tlbiIsInRva2VuIiwiZXZlbnRFbWl0dGVyIiwib24iLCJxckNvZGUiLCJ1cmxDb2RlIiwiY2xpZW50Iiwic2V0VGltZW91dCIsImNoYXR3b290Iiwic2VuZFFyQ29kZSIsInNlbmRNZXNzYWdlIiwiY2hhdElkIiwidHlwZSIsInRpbWVzdGFtcCIsIm1pbWV0eXBlIiwiY2FwdGlvbiIsInJlcGxhY2UiLCJzdGF0dXMiLCJzZW5kU3RhdHVzIiwiYm9keSIsIm1lc3NhZ2UiLCJpc0dyb3VwTXNnIiwiaW5kZXhPZiIsImNvbnRhY3QiLCJjcmVhdGVDb250YWN0IiwiY29udmVyc2F0aW9uIiwiY3JlYXRlQ29udmVyc2F0aW9uIiwic3BsaXQiLCJleHRlbnNpb24iLCJtaW1lIiwiZmlsZW5hbWUiLCJiNjQiLCJidWZmZXIiLCJkZWNyeXB0RmlsZSIsInRvU3RyaW5nIiwibWVkaWFEYXRhIiwiQnVmZmVyIiwiZnJvbSIsImRhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsInRvU3RyZWFtIiwiY29udGVudFR5cGUiLCJjb25maWdQb3N0IiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0SGVhZGVycyIsInJlc3VsdCIsInBvc3QiLCJjb250ZW50IiwibWVzc2FnZV90eXBlIiwiZSIsImZpbmRDb250YWN0IiwicXVlcnkiLCJnZXQiLCJjb25zb2xlIiwibG9nIiwibmFtZSIsImlzTXlDb250YWN0IiwiZm9ybWF0dGVkTmFtZSIsInBob25lX251bWJlciIsInVzZXIiLCJtZXRhIiwiY291bnQiLCJwYXlsb2FkIiwiZmluZENvbnZlcnNhdGlvbiIsImZpbmQiLCJzb3VyY2VfaWQiLCJjb250YWN0X2lkIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jaGF0V29vdENsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHRvU3RyZWFtIGZyb20gJ2J1ZmZlci10by1zdHJlYW0nO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBGb3JtRGF0YSB9IGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJztcblxuaW1wb3J0IHsgZXZlbnRFbWl0dGVyIH0gZnJvbSAnLi9zZXNzaW9uVXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGNoYXRXb290Q2xpZW50IHtcbiAgZGVjbGFyZSBjb25maWc6IGFueTtcbiAgZGVjbGFyZSBzZXNzaW9uOiBhbnk7XG4gIGRlY2xhcmUgbW9iaWxlX25hbWU6IGFueTtcbiAgZGVjbGFyZSBtb2JpbGVfbnVtYmVyOiBhbnk7XG4gIGRlY2xhcmUgc2VuZGVyOiBhbnk7XG4gIGRlY2xhcmUgYWNjb3VudF9pZDogYW55O1xuICBkZWNsYXJlIGluYm94X2lkOiBhbnk7XG4gIGRlY2xhcmUgYXBpOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBhbnksIHNlc3Npb246IHN0cmluZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMubW9iaWxlX25hbWUgPSB0aGlzLmNvbmZpZy5tb2JpbGVfbmFtZVxuICAgICAgPyB0aGlzLmNvbmZpZy5tb2JpbGVfbmFtZVxuICAgICAgOiBgV1BQQ29ubmVjdGA7XG4gICAgdGhpcy5tb2JpbGVfbnVtYmVyID0gdGhpcy5jb25maWcubW9iaWxlX251bWJlclxuICAgICAgPyB0aGlzLmNvbmZpZy5tb2JpbGVfbnVtYmVyXG4gICAgICA6ICc1NTExOTk5OTk5OTk5JztcbiAgICB0aGlzLnNlbmRlciA9IHtcbiAgICAgIHB1c2huYW1lOiB0aGlzLm1vYmlsZV9uYW1lLFxuICAgICAgaWQ6IHRoaXMubW9iaWxlX251bWJlcixcbiAgICB9O1xuICAgIHRoaXMuYWNjb3VudF9pZCA9IHRoaXMuY29uZmlnLmFjY291bnRfaWQ7XG4gICAgdGhpcy5pbmJveF9pZCA9IHRoaXMuY29uZmlnLmluYm94X2lkO1xuICAgIHRoaXMuYXBpID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMuY29uZmlnLmJhc2VVUkwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04JyxcbiAgICAgICAgYXBpX2FjY2Vzc190b2tlbjogdGhpcy5jb25maWcudG9rZW4sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy9hc3NpbmEgbyBldmVudG8gZG8gcXJjb2RlXG4gICAgZXZlbnRFbWl0dGVyLm9uKGBxcmNvZGUtJHtzZXNzaW9ufWAsIChxckNvZGUsIHVybENvZGUsIGNsaWVudCkgPT4ge1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChjb25maWc/LmNoYXR3b290Py5zZW5kUXJDb2RlICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoY2xpZW50LCB7XG4gICAgICAgICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgICAgICAgY2hhdElkOiB0aGlzLm1vYmlsZV9udW1iZXIgKyAnQGMudXMnLFxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogJ3FyY29kZScsXG4gICAgICAgICAgICBtaW1ldHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICBjYXB0aW9uOiAnbGVpYSBvIHFyQ29kZScsXG4gICAgICAgICAgICBxckNvZGU6IHFyQ29kZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCAxMDAwKTtcbiAgICB9KTtcblxuICAgIC8vYXNzaW9uYSBvIGV2ZW50byBkbyBzdGF0dXNcbiAgICBldmVudEVtaXR0ZXIub24oYHN0YXR1cy0ke3Nlc3Npb259YCwgKGNsaWVudCwgc3RhdHVzKSA9PiB7XG4gICAgICBpZiAoY29uZmlnPy5jaGF0d29vdD8uc2VuZFN0YXR1cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZShjbGllbnQsIHtcbiAgICAgICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgICAgIGNoYXRJZDogdGhpcy5tb2JpbGVfbnVtYmVyICsgJ0BjLnVzJyxcbiAgICAgICAgICBib2R5OiBgd3BwY29ubmVjdCBzdGF0dXM6ICR7c3RhdHVzfSBgLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vYXNzaW5hIG8gZXZlbnRvIGRlIG1lbnNhZ2VtXG4gICAgZXZlbnRFbWl0dGVyLm9uKGBtZW5zYWdlbS0ke3Nlc3Npb259YCwgKGNsaWVudCwgbWVzc2FnZSkgPT4ge1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZShjbGllbnQsIG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoY2xpZW50OiBhbnksIG1lc3NhZ2U6IGFueSkge1xuICAgIGlmIChtZXNzYWdlLmlzR3JvdXBNc2cgfHwgbWVzc2FnZS5jaGF0SWQuaW5kZXhPZignQGJyb2FkY2FzdCcpID4gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRhY3QgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnRhY3QobWVzc2FnZSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdGhpcy5jcmVhdGVDb252ZXJzYXRpb24oXG4gICAgICBjb250YWN0LFxuICAgICAgbWVzc2FnZS5jaGF0SWQuc3BsaXQoJ0AnKVswXVxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ2ltYWdlJyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ3ZpZGVvJyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ2luJyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ2RvY3VtZW50JyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ3B0dCcgfHxcbiAgICAgICAgbWVzc2FnZS50eXBlID09ICdhdWRpbycgfHxcbiAgICAgICAgbWVzc2FnZS50eXBlID09ICdzdGlja2VyJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChtZXNzYWdlLm1pbWV0eXBlID09ICdpbWFnZS93ZWJwJykgbWVzc2FnZS5taW1ldHlwZSA9ICdpbWFnZS9qcGVnJztcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gbWltZS5leHRlbnNpb24obWVzc2FnZS5taW1ldHlwZSk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7bWVzc2FnZS50aW1lc3RhbXB9LiR7ZXh0ZW5zaW9ufWA7XG4gICAgICAgIGxldCBiNjQ7XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UucXJDb2RlKSBiNjQgPSBtZXNzYWdlLnFyQ29kZTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2xpZW50LmRlY3J5cHRGaWxlKG1lc3NhZ2UpO1xuICAgICAgICAgIGI2NCA9IGF3YWl0IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZWRpYURhdGEgPSBCdWZmZXIuZnJvbShiNjQsICdiYXNlNjQnKTtcblxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLmNhcHRpb24pIHtcbiAgICAgICAgICBkYXRhLmFwcGVuZCgnY29udGVudCcsIG1lc3NhZ2UuY2FwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5hcHBlbmQoJ2F0dGFjaG1lbnRzW10nLCB0b1N0cmVhbShtZWRpYURhdGEpLCB7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBtZXNzYWdlLm1pbWV0eXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgZGF0YS5hcHBlbmQoJ21lc3NhZ2VfdHlwZScsICdpbmNvbWluZycpO1xuICAgICAgICBkYXRhLmFwcGVuZCgncHJpdmF0ZScsICdmYWxzZScpO1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZ1Bvc3QgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJhc2VVUkw6IHRoaXMuY29uZmlnLmJhc2VVUkwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04JyxcbiAgICAgICAgICAgICAgYXBpX2FjY2Vzc190b2tlbjogdGhpcy5jb25maWcudG9rZW4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY29uZmlnUG9zdC5oZWFkZXJzID0geyAuLi5jb25maWdQb3N0LmhlYWRlcnMsIC4uLmRhdGEuZ2V0SGVhZGVycygpIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXhpb3MucG9zdChcbiAgICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uLmlkfS9tZXNzYWdlc2AsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBjb25maWdQb3N0XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgY29udGVudDogbWVzc2FnZS5ib2R5LFxuICAgICAgICAgIG1lc3NhZ2VfdHlwZTogJ2luY29taW5nJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmFwaS5wb3N0KFxuICAgICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb24uaWR9L21lc3NhZ2VzYCxcbiAgICAgICAgICBib2R5XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbmRDb250YWN0KHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmFwaS5nZXQoXG4gICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnRhY3RzL3NlYXJjaC8/cT0ke3F1ZXJ5fWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNvbnRhY3QobWVzc2FnZTogYW55KSB7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIGluYm94X2lkOiB0aGlzLmluYm94X2lkLFxuICAgICAgbmFtZTogbWVzc2FnZS5zZW5kZXIuaXNNeUNvbnRhY3RcbiAgICAgICAgPyBtZXNzYWdlLnNlbmRlci5mb3JtYXR0ZWROYW1lXG4gICAgICAgIDogbWVzc2FnZS5zZW5kZXIucHVzaG5hbWUgfHwgbWVzc2FnZS5zZW5kZXIuZm9ybWF0dGVkTmFtZSxcbiAgICAgIHBob25lX251bWJlcjpcbiAgICAgICAgdHlwZW9mIG1lc3NhZ2Uuc2VuZGVyLmlkID09ICdvYmplY3QnXG4gICAgICAgICAgPyBtZXNzYWdlLnNlbmRlci5pZC51c2VyXG4gICAgICAgICAgOiBtZXNzYWdlLnNlbmRlci5pZC5zcGxpdCgnQCcpWzBdLFxuICAgIH07XG4gICAgYm9keS5waG9uZV9udW1iZXIgPSBgKyR7Ym9keS5waG9uZV9udW1iZXJ9YDtcbiAgICBjb25zdCBjb250YWN0ID0gYXdhaXQgdGhpcy5maW5kQ29udGFjdChib2R5LnBob25lX251bWJlci5yZXBsYWNlKCcrJywgJycpKTtcbiAgICBpZiAoY29udGFjdCAmJiBjb250YWN0Lm1ldGEuY291bnQgPiAwKSByZXR1cm4gY29udGFjdC5wYXlsb2FkWzBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmFwaS5wb3N0KFxuICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb250YWN0c2AsXG4gICAgICAgIGJvZHlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YS5kYXRhLnBheWxvYWQuY29udGFjdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbmRDb252ZXJzYXRpb24oY29udGFjdDogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hcGkuZ2V0KFxuICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb252ZXJzYXRpb25zP2luYm94X2lkPSR7dGhpcy5pbmJveF9pZH0mc3RhdHVzPWFsbGBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YS5kYXRhLnBheWxvYWQuZmluZChcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXRhLnNlbmRlci5pZCA9PSBjb250YWN0LmlkICYmIGUuc3RhdHVzICE9ICdyZXNvbHZlZCdcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVDb252ZXJzYXRpb24oY29udGFjdDogYW55LCBzb3VyY2VfaWQ6IGFueSkge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IHRoaXMuZmluZENvbnZlcnNhdGlvbihjb250YWN0KTtcbiAgICBpZiAoY29udmVyc2F0aW9uKSByZXR1cm4gY29udmVyc2F0aW9uO1xuXG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIHNvdXJjZV9pZDogc291cmNlX2lkLFxuICAgICAgaW5ib3hfaWQ6IHRoaXMuaW5ib3hfaWQsXG4gICAgICBjb250YWN0X2lkOiBjb250YWN0LmlkLFxuICAgICAgc3RhdHVzOiAnb3BlbicsXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBpLnBvc3QoXG4gICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnZlcnNhdGlvbnNgLFxuICAgICAgICBib2R5XG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBOztBQUVBLElBQUFJLFlBQUEsR0FBQUosT0FBQSxrQkFBNkMsQ0FwQjdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQVFlLE1BQU1LLGNBQWMsQ0FBQyxDQVVsQ0MsV0FBV0EsQ0FBQ0MsTUFBVyxFQUFFQyxPQUFlLEVBQUUsQ0FDeEMsSUFBSSxDQUFDRCxNQUFNLEdBQUdBLE1BQU0sQ0FDcEIsSUFBSSxDQUFDRSxXQUFXLEdBQUcsSUFBSSxDQUFDRixNQUFNLENBQUNFLFdBQVc7SUFDdEMsSUFBSSxDQUFDRixNQUFNLENBQUNFLFdBQVc7SUFDdEIsWUFBVztJQUNoQixJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJLENBQUNILE1BQU0sQ0FBQ0csYUFBYTtJQUMxQyxJQUFJLENBQUNILE1B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
328
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9mb3JtRGF0YSIsIl9taW1lVHlwZXMiLCJfYnVmZmVydXRpbHMiLCJfc2Vzc2lvblV0aWwiLCJjaGF0V29vdENsaWVudCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwic2Vzc2lvbiIsIm1vYmlsZV9uYW1lIiwibW9iaWxlX251bWJlciIsInNlbmRlciIsInB1c2huYW1lIiwiaWQiLCJhY2NvdW50X2lkIiwiaW5ib3hfaWQiLCJhcGkiLCJheGlvcyIsImNyZWF0ZSIsImJhc2VVUkwiLCJoZWFkZXJzIiwiYXBpX2FjY2Vzc190b2tlbiIsInRva2VuIiwiZXZlbnRFbWl0dGVyIiwib24iLCJxckNvZGUiLCJ1cmxDb2RlIiwiY2xpZW50Iiwic2V0VGltZW91dCIsImNoYXR3b290Iiwic2VuZFFyQ29kZSIsInNlbmRNZXNzYWdlIiwiY2hhdElkIiwidHlwZSIsInRpbWVzdGFtcCIsIm1pbWV0eXBlIiwiY2FwdGlvbiIsInJlcGxhY2UiLCJzdGF0dXMiLCJzZW5kU3RhdHVzIiwiYm9keSIsIm1lc3NhZ2UiLCJpc0dyb3VwTXNnIiwiaW5kZXhPZiIsImNvbnRhY3QiLCJjcmVhdGVDb250YWN0IiwiY29udmVyc2F0aW9uIiwiY3JlYXRlQ29udmVyc2F0aW9uIiwic3BsaXQiLCJpbmNsdWRlcyIsImV4dGVuc2lvbiIsIm1pbWUiLCJmaWxlbmFtZSIsImI2NCIsImJ1ZmZlciIsImRlY3J5cHRGaWxlIiwidG9TdHJpbmciLCJtZWRpYURhdGEiLCJCdWZmZXIiLCJmcm9tIiwic3RyZWFtIiwiYnVmZmVydXRpbHMiLCJidWZmZXJUb1JlYWRhYmxlU3RyZWFtIiwiZGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiY29udGVudFR5cGUiLCJjb25maWdQb3N0IiwiZ2V0SGVhZGVycyIsImVuZHBvaW50IiwicmVzdWx0IiwicG9zdCIsImNvbnRlbnQiLCJtZXNzYWdlX3R5cGUiLCJlIiwiY29uc29sZSIsImVycm9yIiwiZmluZENvbnRhY3QiLCJxdWVyeSIsImdldCIsImxvZyIsIm5hbWUiLCJpc015Q29udGFjdCIsImZvcm1hdHRlZE5hbWUiLCJwaG9uZV9udW1iZXIiLCJ1c2VyIiwibWV0YSIsImNvdW50IiwicGF5bG9hZCIsImZpbmRDb252ZXJzYXRpb24iLCJmaW5kIiwic291cmNlX2lkIiwiY29udGFjdF9pZCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvY2hhdFdvb3RDbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIxIFdQUENvbm5lY3QgVGVhbVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgRm9ybURhdGEgfSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcyc7XG5cbmltcG9ydCBidWZmZXJ1dGlscyBmcm9tICcuL2J1ZmZlcnV0aWxzJztcbi8vIGltcG9ydCBidWZmZXJVdGlscyBmcm9tICcuL2J1ZmZlcnV0aWxzJztcbmltcG9ydCB7IGV2ZW50RW1pdHRlciB9IGZyb20gJy4vc2Vzc2lvblV0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBjaGF0V29vdENsaWVudCB7XG4gIGRlY2xhcmUgY29uZmlnOiBhbnk7XG4gIGRlY2xhcmUgc2Vzc2lvbjogYW55O1xuICBkZWNsYXJlIG1vYmlsZV9uYW1lOiBhbnk7XG4gIGRlY2xhcmUgbW9iaWxlX251bWJlcjogYW55O1xuICBkZWNsYXJlIHNlbmRlcjogYW55O1xuICBkZWNsYXJlIGFjY291bnRfaWQ6IGFueTtcbiAgZGVjbGFyZSBpbmJveF9pZDogYW55O1xuICBkZWNsYXJlIGFwaTogQXhpb3NJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IGFueSwgc2Vzc2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5tb2JpbGVfbmFtZSA9IHRoaXMuY29uZmlnLm1vYmlsZV9uYW1lXG4gICAgICA/IHRoaXMuY29uZmlnLm1vYmlsZV9uYW1lXG4gICAgICA6IGBXUFBDb25uZWN0YDtcbiAgICB0aGlzLm1vYmlsZV9udW1iZXIgPSB0aGlzLmNvbmZpZy5tb2JpbGVfbnVtYmVyXG4gICAgICA/IHRoaXMuY29uZmlnLm1vYmlsZV9udW1iZXJcbiAgICAgIDogJzU1MTE5OTk5OTk5OTknO1xuICAgIHRoaXMuc2VuZGVyID0ge1xuICAgICAgcHVzaG5hbWU6IHRoaXMubW9iaWxlX25hbWUsXG4gICAgICBpZDogdGhpcy5tb2JpbGVfbnVtYmVyLFxuICAgIH07XG4gICAgdGhpcy5hY2NvdW50X2lkID0gdGhpcy5jb25maWcuYWNjb3VudF9pZDtcbiAgICB0aGlzLmluYm94X2lkID0gdGhpcy5jb25maWcuaW5ib3hfaWQ7XG4gICAgdGhpcy5hcGkgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogdGhpcy5jb25maWcuYmFzZVVSTCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnLFxuICAgICAgICBhcGlfYWNjZXNzX3Rva2VuOiB0aGlzLmNvbmZpZy50b2tlbixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvL2Fzc2luYSBvIGV2ZW50byBkbyBxcmNvZGVcbiAgICBldmVudEVtaXR0ZXIub24oYHFyY29kZS0ke3Nlc3Npb259YCwgKHFyQ29kZSwgdXJsQ29kZSwgY2xpZW50KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZz8uY2hhdHdvb3Q/LnNlbmRRckNvZGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZShjbGllbnQsIHtcbiAgICAgICAgICAgIHNlbmRlcjogdGhpcy5zZW5kZXIsXG4gICAgICAgICAgICBjaGF0SWQ6IHRoaXMubW9iaWxlX251bWJlciArICdAYy51cycsXG4gICAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgICAgdGltZXN0YW1wOiAncXJjb2RlJyxcbiAgICAgICAgICAgIG1pbWV0eXBlOiAnaW1hZ2UvcG5nJyxcbiAgICAgICAgICAgIGNhcHRpb246ICdsZWlhIG8gcXJDb2RlJyxcbiAgICAgICAgICAgIHFyQ29kZTogcXJDb2RlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDApO1xuICAgIH0pO1xuXG4gICAgLy9hc3Npb25hIG8gZXZlbnRvIGRvIHN0YXR1c1xuICAgIGV2ZW50RW1pdHRlci5vbihgc3RhdHVzLSR7c2Vzc2lvbn1gLCAoY2xpZW50LCBzdGF0dXMpID0+IHtcbiAgICAgIGlmIChjb25maWc/LmNoYXR3b290Py5zZW5kU3RhdHVzICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKGNsaWVudCwge1xuICAgICAgICAgIHNlbmRlcjogdGhpcy5zZW5kZXIsXG4gICAgICAgICAgY2hhdElkOiB0aGlzLm1vYmlsZV9udW1iZXIgKyAnQGMudXMnLFxuICAgICAgICAgIGJvZHk6IGB3cHBjb25uZWN0IHN0YXR1czogJHtzdGF0dXN9IGAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy9hc3NpbmEgbyBldmVudG8gZGUgbWVuc2FnZW1cbiAgICBldmVudEVtaXR0ZXIub24oYG1lbnNhZ2VtLSR7c2Vzc2lvbn1gLCAoY2xpZW50LCBtZXNzYWdlKSA9PiB7XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlKGNsaWVudCwgbWVzc2FnZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBhc3luYyBzZW5kTWVzc2FnZShjbGllbnQ6IGFueSwgbWVzc2FnZTogYW55KSB7XG4gIC8vICAgaWYgKG1lc3NhZ2UuaXNHcm91cE1zZyB8fCBtZXNzYWdlLmNoYXRJZC5pbmRleE9mKCdAYnJvYWRjYXN0JykgPiAwKSByZXR1cm47XG4gIC8vICAgY29uc3QgY29udGFjdCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29udGFjdChtZXNzYWdlKTtcbiAgLy8gICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnZlcnNhdGlvbihcbiAgLy8gICAgIGNvbnRhY3QsXG4gIC8vICAgICBtZXNzYWdlLmNoYXRJZC5zcGxpdCgnQCcpWzBdXG4gIC8vICAgKTtcblxuICAvLyAgIHRyeSB7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIG1lc3NhZ2UudHlwZSA9PSAnaW1hZ2UnIHx8XG4gIC8vICAgICAgIG1lc3NhZ2UudHlwZSA9PSAndmlkZW8nIHx8XG4gIC8vICAgICAgIG1lc3NhZ2UudHlwZSA9PSAnaW4nIHx8XG4gIC8vICAgICAgIG1lc3NhZ2UudHlwZSA9PSAnZG9jdW1lbnQnIHx8XG4gIC8vICAgICAgIG1lc3NhZ2UudHlwZSA9PSAncHR0JyB8fFxuICAvLyAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ2F1ZGlvJyB8fFxuICAvLyAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ3N0aWNrZXInXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgaWYgKG1lc3NhZ2UubWltZXR5cGUgPT0gJ2ltYWdlL3dlYnAnKSBtZXNzYWdlLm1pbWV0eXBlID0gJ2ltYWdlL2pwZWcnO1xuICAvLyAgICAgICBjb25zdCBleHRlbnNpb24gPSBtaW1lLmV4dGVuc2lvbihtZXNzYWdlLm1pbWV0eXBlKTtcbiAgLy8gICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHttZXNzYWdlLnRpbWVzdGFtcH0uJHtleHRlbnNpb259YDtcbiAgLy8gICAgICAgbGV0IGI2NDtcblxuICAvLyAgICAgICBpZiAobWVzc2FnZS5xckNvZGUpIGI2NCA9IG1lc3NhZ2UucXJDb2RlO1xuICAvLyAgICAgICBlbHNlIHtcbiAgLy8gICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjbGllbnQuZGVjcnlwdEZpbGUobWVzc2FnZSk7XG4gIC8vICAgICAgICAgYjY0ID0gYXdhaXQgYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGNvbnN0IG1lZGlhRGF0YSA9IEJ1ZmZlci5mcm9tKGI2NCwgJ2Jhc2U2NCcpO1xuXG4gIC8vICAgICAgIC8vIENyZWF0ZSBhIHJlYWRhYmxlIHN0cmVhbSBmcm9tIHRoZSBCdWZmZXJcbiAgLy8gICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlKCk7XG4gIC8vICAgICAgIHN0cmVhbS5wdXNoKG1lZGlhRGF0YSk7XG4gIC8vICAgICAgIHN0cmVhbS5wdXNoKG51bGwpOyAvLyBTaWduYWxpbmcgdGhlIGVuZCBvZiB0aGUgc3RyZWFtXG5cbiAgLy8gICAgICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAvLyAgICAgICBpZiAobWVzc2FnZS5jYXB0aW9uKSB7XG4gIC8vICAgICAgICAgZGF0YS5hcHBlbmQoJ2NvbnRlbnQnLCBtZXNzYWdlLmNhcHRpb24pO1xuICAvLyAgICAgICB9XG5cbiAgLy8gICAgICAgZGF0YS5hcHBlbmQoJ2F0dGFjaG1lbnRzW10nLCBzdHJlYW0sIHtcbiAgLy8gICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsXG4gIC8vICAgICAgICAgY29udGVudFR5cGU6IG1lc3NhZ2UubWltZXR5cGUsXG4gIC8vICAgICAgIH0pO1xuXG4gIC8vICAgICAgIGRhdGEuYXBwZW5kKCdtZXNzYWdlX3R5cGUnLCAnaW5jb21pbmcnKTtcbiAgLy8gICAgICAgZGF0YS5hcHBlbmQoJ3ByaXZhdGUnLCAnZmFsc2UnKTtcblxuICAvLyAgICAgICBjb25zdCBjb25maWdQb3N0ID0gT2JqZWN0LmFzc2lnbihcbiAgLy8gICAgICAgICB7fSxcbiAgLy8gICAgICAgICB7XG4gIC8vICAgICAgICAgICBiYXNlVVJMOiB0aGlzLmNvbmZpZy5iYXNlVVJMLFxuICAvLyAgICAgICAgICAgaGVhZGVyczoge1xuICAvLyAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCcsXG4gIC8vICAgICAgICAgICAgIGFwaV9hY2Nlc3NfdG9rZW46IHRoaXMuY29uZmlnLnRva2VuLFxuICAvLyAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgICk7XG5cbiAgLy8gICAgICAgY29uZmlnUG9zdC5oZWFkZXJzID0geyAuLi5jb25maWdQb3N0LmhlYWRlcnMsIC4uLmRhdGEuZ2V0SGVhZGVycygpIH07XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdQUsOJLVJFUVVFU1QnKTtcbiAgLy8gICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXhpb3MucG9zdChcbiAgLy8gICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uLmlkfS9tZXNzYWdlc2AsXG4gIC8vICAgICAgICAgZGF0YSxcbiAgLy8gICAgICAgICBjb25maWdQb3N0XG4gIC8vICAgICAgICk7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdQT1MtUkVRVUVTVCcpO1xuICAvLyAgICAgICByZXR1cm4gcmVzdWx0O1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgY29uc3QgYm9keSA9IHtcbiAgLy8gICAgICAgICBjb250ZW50OiBtZXNzYWdlLmJvZHksXG4gIC8vICAgICAgICAgbWVzc2FnZV90eXBlOiAnaW5jb21pbmcnLFxuICAvLyAgICAgICB9O1xuICAvLyAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBpLnBvc3QoXG4gIC8vICAgICAgICAgYGFwaS92MS9hY2NvdW50cy8ke3RoaXMuYWNjb3VudF9pZH0vY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbi5pZH0vbWVzc2FnZXNgLFxuICAvLyAgICAgICAgIGJvZHlcbiAgLy8gICAgICAgKTtcbiAgLy8gICAgICAgcmV0dXJuIGRhdGE7XG4gIC8vICAgICB9XG4gIC8vICAgfSBjYXRjaCAoZSkge1xuICAvLyAgICAgcmV0dXJuIG51bGw7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoY2xpZW50OiBhbnksIG1lc3NhZ2U6IGFueSkge1xuICAgIGlmIChtZXNzYWdlLmlzR3JvdXBNc2cgfHwgbWVzc2FnZS5jaGF0SWQuaW5kZXhPZignQGJyb2FkY2FzdCcpID4gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFjdCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29udGFjdChtZXNzYWdlKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnZlcnNhdGlvbihcbiAgICAgIGNvbnRhY3QsXG4gICAgICBtZXNzYWdlLmNoYXRJZC5zcGxpdCgnQCcpWzBdXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIFtcbiAgICAgICAgICAnaW1hZ2UnLFxuICAgICAgICAgICd2aWRlbycsXG4gICAgICAgICAgJ2luJyxcbiAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICdwdHQnLFxuICAgICAgICAgICdhdWRpbycsXG4gICAgICAgICAgJ3N0aWNrZXInLFxuICAgICAgICBdLmluY2x1ZGVzKG1lc3NhZ2UudHlwZSlcbiAgICAgICkge1xuICAgICAgICBpZiAobWVzc2FnZS5taW1ldHlwZSA9PT0gJ2ltYWdlL3dlYnAnKSBtZXNzYWdlLm1pbWV0eXBlID0gJ2ltYWdlL2pwZWcnO1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSBtaW1lLmV4dGVuc2lvbihtZXNzYWdlLm1pbWV0eXBlKTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHttZXNzYWdlLnRpbWVzdGFtcH0uJHtleHRlbnNpb259YDtcbiAgICAgICAgbGV0IGI2NDtcblxuICAgICAgICBpZiAobWVzc2FnZS5xckNvZGUpIHtcbiAgICAgICAgICBiNjQgPSBtZXNzYWdlLnFyQ29kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjbGllbnQuZGVjcnlwdEZpbGUobWVzc2FnZSk7XG4gICAgICAgICAgYjY0ID0gYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lZGlhRGF0YSA9IEJ1ZmZlci5mcm9tKGI2NCwgJ2Jhc2U2NCcpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBidWZmZXJ1dGlscy5idWZmZXJUb1JlYWRhYmxlU3RyZWFtKG1lZGlhRGF0YSk7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBpZiAobWVzc2FnZS5jYXB0aW9uKSB7XG4gICAgICAgICAgZGF0YS5hcHBlbmQoJ2NvbnRlbnQnLCBtZXNzYWdlLmNhcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5hcHBlbmQoJ2F0dGFjaG1lbnRzW10nLCBzdHJlYW0sIHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsXG4gICAgICAgICAgY29udGVudFR5cGU6IG1lc3NhZ2UubWltZXR5cGUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRhdGEuYXBwZW5kKCdtZXNzYWdlX3R5cGUnLCAnaW5jb21pbmcnKTtcbiAgICAgICAgZGF0YS5hcHBlbmQoJ3ByaXZhdGUnLCAnZmFsc2UnKTtcblxuICAgICAgICBjb25zdCBjb25maWdQb3N0OiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICAgICAgYmFzZVVSTDogdGhpcy5jb25maWcuYmFzZVVSTCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBhcGlfYWNjZXNzX3Rva2VuOiB0aGlzLmNvbmZpZy50b2tlbixcbiAgICAgICAgICAgIC4uLmRhdGEuZ2V0SGVhZGVycygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYGFwaS92MS9hY2NvdW50cy8ke3RoaXMuYWNjb3VudF9pZH0vY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbi5pZH0vbWVzc2FnZXNgO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF4aW9zLnBvc3QoZW5kcG9pbnQsIGRhdGEsIGNvbmZpZ1Bvc3QpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuYm9keSxcbiAgICAgICAgICBtZXNzYWdlX3R5cGU6ICdpbmNvbWluZycsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gYGFwaS92MS9hY2NvdW50cy8ke3RoaXMuYWNjb3VudF9pZH0vY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbi5pZH0vbWVzc2FnZXNgO1xuXG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hcGkucG9zdChlbmRwb2ludCwgYm9keSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZTonLCBlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbmRDb250YWN0KHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmFwaS5nZXQoXG4gICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnRhY3RzL3NlYXJjaC8/cT0ke3F1ZXJ5fWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNvbnRhY3QobWVzc2FnZTogYW55KSB7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIGluYm94X2lkOiB0aGlzLmluYm94X2lkLFxuICAgICAgbmFtZTogbWVzc2FnZS5zZW5kZXIuaXNNeUNvbnRhY3RcbiAgICAgICAgPyBtZXNzYWdlLnNlbmRlci5mb3JtYXR0ZWROYW1lXG4gICAgICAgIDogbWVzc2FnZS5zZW5kZXIucHVzaG5hbWUgfHwgbWVzc2FnZS5zZW5kZXIuZm9ybWF0dGVkTmFtZSxcbiAgICAgIHBob25lX251bWJlcjpcbiAgICAgICAgdHlwZW9mIG1lc3NhZ2Uuc2VuZGVyLmlkID09ICdvYmplY3QnXG4gICAgICAgICAgPyBtZXNzYWdlLnNlbmRlci5pZC51c2VyXG4gICAgICAgICAgOiBtZXNzYWdlLnNlbmRlci5pZC5zcGxpdCgnQCcpWzBdLFxuICAgIH07XG4gICAgYm9keS5waG9uZV9udW1iZXIgPSBgKyR7Ym9keS5waG9uZV9udW1iZXJ9YDtcbiAgICBjb25zdCBjb250YWN0ID0gYXdhaXQgdGhpcy5maW5kQ29udGFjdChib2R5LnBob25lX251bWJlci5yZXBsYWNlKCcrJywgJycpKTtcbiAgICBpZiAoY29udGFjdCAmJiBjb250YWN0Lm1ldGEuY291bnQgPiAwKSByZXR1cm4gY29udGFjdC5wYXlsb2FkWzBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmFwaS5wb3N0KFxuICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb250YWN0c2AsXG4gICAgICAgIGJvZHlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YS5kYXRhLnBheWxvYWQuY29udGFjdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbmRDb252ZXJzYXRpb24oY29udGFjdDogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hcGkuZ2V0KFxuICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb250YWN0cy8ke2NvbnRhY3QuaWR9L2NvbnZlcnNhdGlvbnNgXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGEucGF5bG9hZC5maW5kKFxuICAgICAgICAoZTogYW55KSA9PiBlLmluYm94X2lkID09IHRoaXMuaW5ib3hfaWQgJiYgZS5zdGF0dXMgIT0gJ3Jlc29sdmVkJ1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNvbnZlcnNhdGlvbihjb250YWN0OiBhbnksIHNvdXJjZV9pZDogYW55KSB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdGhpcy5maW5kQ29udmVyc2F0aW9uKGNvbnRhY3QpO1xuICAgIGlmIChjb252ZXJzYXRpb24pIHJldHVybiBjb252ZXJzYXRpb247XG5cbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgc291cmNlX2lkOiBzb3VyY2VfaWQsXG4gICAgICBpbmJveF9pZDogdGhpcy5pbmJveF9pZCxcbiAgICAgIGNvbnRhY3RfaWQ6IGNvbnRhY3QuaWQsXG4gICAgICBzdGF0dXM6ICdvcGVuJyxcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hcGkucG9zdChcbiAgICAgICAgYGFwaS92MS9hY2NvdW50cy8ke3RoaXMuYWNjb3VudF9pZH0vY29udmVyc2F0aW9uc2AsXG4gICAgICAgIGJvZHlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7O0FBRUEsSUFBQUcsWUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBOztBQUVBLElBQUFJLFlBQUEsR0FBQUosT0FBQSxrQkFBNkMsQ0FyQjdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQWRBLENBb0JBO0FBR2UsTUFBTUssY0FBYyxDQUFDLENBVWxDQyxXQUFXQSxDQUFDQyxNQUFXLEVBQUVDLE9B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
@@ -68,8 +68,12 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
68
68
  req.serverOptions.createOptions,
69
69
  {
70
70
  session: session,
71
- deviceName: req.serverOptions.deviceName,
72
- poweredBy: req.serverOptions.poweredBy || 'WPPConnect-Server',
71
+ deviceName:
72
+ client.config?.deviceName || req.serverOptions.deviceName,
73
+ poweredBy:
74
+ client.config?.poweredBy ||
75
+ req.serverOptions.poweredBy ||
76
+ 'WPPConnect-Server',
73
77
  catchQR: (
74
78
  base64Qr,
75
79
  asciiQR,
@@ -160,11 +164,18 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
160
164
  session: client.session
161
165
  });
162
166
 
163
- (0, _functions.callWebHook)(client, req, 'qrcode', { qrcode: qrCode, urlcode: urlCode });
167
+ (0, _functions.callWebHook)(client, req, 'qrcode', {
168
+ qrcode: qrCode,
169
+ urlcode: urlCode,
170
+ session: client.session
171
+ });
164
172
  if (res && !res._headerSent)
165
- res.
166
- status(200).
167
- json({ status: 'qrcode', qrcode: qrCode, urlcode: urlCode });
173
+ res.status(200).json({
174
+ status: 'qrcode',
175
+ qrcode: qrCode,
176
+ urlcode: urlCode,
177
+ session: client.session
178
+ });
168
179
  }
169
180
 
170
181
  async onParticipantsChanged(req, client) {
@@ -229,6 +240,8 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
229
240
  }
230
241
 
231
242
  req.io.emit('received-message', { response: message });
243
+ if (req.serverOptions.webhook.onSelfMessage && message.fromMe)
244
+ (0, _functions.callWebHook)(client, req, 'onselfmessage', message);
232
245
  });
233
246
 
234
247
  await client.onIncomingCall(async (call) => {
@@ -304,4 +317,4 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
304
317
  return client;
305
318
  }
306
319
  }exports.default = CreateSessionUtil;
307
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3BwY29ubmVjdCIsInJlcXVpcmUiLCJfc2Vzc2lvbkNvbnRyb2xsZXIiLCJfY2hhdFdvb3RDbGllbnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2Z1bmN0aW9ucyIsIl9zZXNzaW9uVXRpbCIsIl9mYWN0b3J5IiwiQ3JlYXRlU2Vzc2lvblV0aWwiLCJzdGFydENoYXRXb290Q2xpZW50IiwiY2xpZW50IiwiY29uZmlnIiwiY2hhdFdvb3QiLCJjaGF0V29vdENsaWVudCIsInNlc3Npb24iLCJjcmVhdGVTZXNzaW9uVXRpbCIsInJlcSIsImNsaWVudHNBcnJheSIsInJlcyIsImdldENsaWVudCIsInN0YXR1cyIsImJvZHkiLCJ0b2tlblN0b3JlIiwiRmFjdG9yeSIsIm15VG9rZW5TdG9yZSIsImNyZWF0ZVRva2VuU3RvcnkiLCJ0b2tlbkRhdGEiLCJnZXRUb2tlbiIsInNldFRva2VuIiwic2VydmVyT3B0aW9ucyIsImN1c3RvbVVzZXJEYXRhRGlyIiwiY3JlYXRlT3B0aW9ucyIsInB1cHBldGVlck9wdGlvbnMiLCJ1c2VyRGF0YURpciIsIndwcENsaWVudCIsImNyZWF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImRldmljZU5hbWUiLCJwb3dlcmVkQnkiLCJjYXRjaFFSIiwiYmFzZTY0UXIiLCJhc2NpaVFSIiwiYXR0ZW1wdCIsInVybENvZGUiLCJleHBvcnRRUiIsIm9uTG9hZGluZ1NjcmVlbiIsInBlcmNlbnQiLCJtZXNzYWdlIiwibG9nZ2VyIiwiaW5mbyIsInN0YXR1c0ZpbmQiLCJldmVudEVtaXR0ZXIiLCJlbWl0IiwicXJjb2RlIiwiY2xvc2UiLCJ1bmRlZmluZWQiLCJjYWxsV2ViSG9vayIsImVycm9yIiwic3RhcnQiLCJ3ZWJob29rIiwib25QYXJ0aWNpcGFudHNDaGFuZ2VkIiwib25SZWFjdGlvbk1lc3NhZ2UiLCJvblJldm9rZWRNZXNzYWdlIiwib25Qb2xsUmVzcG9uc2UiLCJvbkxhYmVsVXBkYXRlZCIsImUiLCJvcGVuZGF0YSIsInFyQ29kZSIsInVybGNvZGUiLCJyZXBsYWNlIiwiaW1hZ2VCdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiaW8iLCJkYXRhIiwidG9TdHJpbmciLCJfaGVhZGVyU2VudCIsImpzb24iLCJpc0Nvbm5lY3RlZCIsInN0YXJ0SGVscGVyIiwiY2hlY2tTdGF0ZVNlc3Npb24iLCJsaXN0ZW5NZXNzYWdlcyIsImxpc3RlbkFja3MiLCJvblByZXNlbmNlQ2hhbmdlZCIsIm9uU3RhdGVDaGFuZ2UiLCJzdGF0ZSIsImNvbmZsaXRzIiwiU29ja2V0U3RhdGUiLCJDT05GTElDVCIsImluY2x1ZGVzIiwidXNlSGVyZSIsIm9uTWVzc2FnZSIsInR5cGUiLCJvbkxpdmVMb2NhdGlvbiIsInNlbmRlciIsImlkIiwibG9jYXRpb24iLCJvbkFueU1lc3NhZ2UiLCJkb3dubG9hZCIsInJlc3BvbnNlIiwib25JbmNvbWluZ0NhbGwiLCJjYWxsIiwib25BY2siLCJhY2siLCJwcmVzZW5jZUNoYW5nZWRFdmVudCIsInJlYWN0aW9uIiwib25VcGRhdGVMYWJlbCIsImVuY29kZUZ1bmN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlY29kZUZ1bmN0aW9uIiwidGV4dCIsIm9iamVjdCIsInBhcnNlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jcmVhdGVTZXNzaW9uVXRpbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjcmVhdGUsIFNvY2tldFN0YXRlIH0gZnJvbSAnQHdwcGNvbm5lY3QtdGVhbS93cHBjb25uZWN0JztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcblxuaW1wb3J0IHsgZG93bmxvYWQgfSBmcm9tICcuLi9jb250cm9sbGVyL3Nlc3Npb25Db250cm9sbGVyJztcbmltcG9ydCB7IFdoYXRzQXBwU2VydmVyIH0gZnJvbSAnLi4vdHlwZXMvV2hhdHNBcHBTZXJ2ZXInO1xuaW1wb3J0IGNoYXRXb290Q2xpZW50IGZyb20gJy4vY2hhdFdvb3RDbGllbnQnO1xuaW1wb3J0IHsgY2FsbFdlYkhvb2ssIHN0YXJ0SGVscGVyIH0gZnJvbSAnLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY2xpZW50c0FycmF5LCBldmVudEVtaXR0ZXIgfSBmcm9tICcuL3Nlc3Npb25VdGlsJztcbmltcG9ydCBGYWN0b3J5IGZyb20gJy4vdG9rZW5TdG9yZS9mYWN0b3J5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3JlYXRlU2Vzc2lvblV0aWwge1xuICBzdGFydENoYXRXb290Q2xpZW50KGNsaWVudDogYW55KSB7XG4gICAgaWYgKGNsaWVudC5jb25maWcuY2hhdFdvb3QgJiYgIWNsaWVudC5fY2hhdFdvb3RDbGllbnQpXG4gICAgICBjbGllbnQuX2NoYXRXb290Q2xpZW50ID0gbmV3IGNoYXRXb290Q2xpZW50KFxuICAgICAgICBjbGllbnQuY29uZmlnLmNoYXRXb290LFxuICAgICAgICBjbGllbnQuc2Vzc2lvblxuICAgICAgKTtcbiAgICByZXR1cm4gY2xpZW50Ll9jaGF0V29vdENsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb25VdGlsKFxuICAgIHJlcTogYW55LFxuICAgIGNsaWVudHNBcnJheTogYW55LFxuICAgIHNlc3Npb246IHN0cmluZyxcbiAgICByZXM/OiBhbnlcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBjbGllbnQgPSB0aGlzLmdldENsaWVudChzZXNzaW9uKSBhcyBhbnk7XG4gICAgICBpZiAoY2xpZW50LnN0YXR1cyAhPSBudWxsICYmIGNsaWVudC5zdGF0dXMgIT09ICdDTE9TRUQnKSByZXR1cm47XG4gICAgICBjbGllbnQuc3RhdHVzID0gJ0lOSVRJQUxJWklORyc7XG4gICAgICBjbGllbnQuY29uZmlnID0gcmVxLmJvZHk7XG5cbiAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSBuZXcgRmFjdG9yeSgpO1xuICAgICAgY29uc3QgbXlUb2tlblN0b3JlID0gdG9rZW5TdG9yZS5jcmVhdGVUb2tlblN0b3J5KGNsaWVudCk7XG4gICAgICBjb25zdCB0b2tlbkRhdGEgPSBhd2FpdCBteVRva2VuU3RvcmUuZ2V0VG9rZW4oc2Vzc2lvbik7XG5cbiAgICAgIGlmICghdG9rZW5EYXRhKSB7XG4gICAgICAgIG15VG9rZW5TdG9yZS5zZXRUb2tlbihzZXNzaW9uLCB7fSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhcnRDaGF0V29vdENsaWVudChjbGllbnQpO1xuXG4gICAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMuY3VzdG9tVXNlckRhdGFEaXIpIHtcbiAgICAgICAgcmVxLnNlcnZlck9wdGlvbnMuY3JlYXRlT3B0aW9ucy5wdXBwZXRlZXJPcHRpb25zID0ge1xuICAgICAgICAgIHVzZXJEYXRhRGlyOiByZXEuc2VydmVyT3B0aW9ucy5jdXN0b21Vc2VyRGF0YURpciArIHNlc3Npb24sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdwcENsaWVudCA9IGF3YWl0IGNyZWF0ZShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7fSxcbiAgICAgICAgICB7IHRva2VuU3RvcmU6IG15VG9rZW5TdG9yZSB9LFxuICAgICAgICAgIHJlcS5zZXJ2ZXJPcHRpb25zLmNyZWF0ZU9wdGlvbnMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICAgICAgICAgIGRldmljZU5hbWU6IHJlcS5zZXJ2ZXJPcHRpb25zLmRldmljZU5hbWUsXG4gICAgICAgICAgICBwb3dlcmVkQnk6IHJlcS5zZXJ2ZXJPcHRpb25zLnBvd2VyZWRCeSB8fCAnV1BQQ29ubmVjdC1TZXJ2ZXInLFxuICAgICAgICAgICAgY2F0Y2hRUjogKFxuICAgICAgICAgICAgICBiYXNlNjRRcjogYW55LFxuICAgICAgICAgICAgICBhc2NpaVFSOiBhbnksXG4gICAgICAgICAgICAgIGF0dGVtcHQ6IGFueSxcbiAgICAgICAgICAgICAgdXJsQ29kZTogc3RyaW5nXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5leHBvcnRRUihyZXEsIGJhc2U2NFFyLCB1cmxDb2RlLCBjbGllbnQsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Mb2FkaW5nU2NyZWVuOiAocGVyY2VudDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgcmVxLmxvZ2dlci5pbmZvKGBbJHtzZXNzaW9ufV0gJHtwZXJjZW50fSUgLSAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzRmluZDogKHN0YXR1c0ZpbmQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KFxuICAgICAgICAgICAgICAgICAgYHN0YXR1cy0ke2NsaWVudC5zZXNzaW9ufWAsXG4gICAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgICBzdGF0dXNGaW5kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdGF0dXNGaW5kID09PSAnYXV0b2Nsb3NlQ2FsbGVkJyB8fFxuICAgICAgICAgICAgICAgICAgc3RhdHVzRmluZCA9PT0gJ2Rlc2Nvbm5lY3RlZE1vYmlsZSdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNsaWVudC5zdGF0dXMgPSAnQ0xPU0VEJztcbiAgICAgICAgICAgICAgICAgIGNsaWVudC5xcmNvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICBjbGllbnRzQXJyYXlbc2Vzc2lvbl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnc3RhdHVzLWZpbmQnLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c0ZpbmQsXG4gICAgICAgICAgICAgICAgICBzZXNzaW9uOiBjbGllbnQuc2Vzc2lvbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXEubG9nZ2VyLmluZm8oc3RhdHVzRmluZCArICdcXG5cXG4nKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgY2xpZW50ID0gY2xpZW50c0FycmF5W3Nlc3Npb25dID0gT2JqZWN0LmFzc2lnbih3cHBDbGllbnQsIGNsaWVudCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KHJlcSwgY2xpZW50KTtcblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25QYXJ0aWNpcGFudHNDaGFuZ2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25QYXJ0aWNpcGFudHNDaGFuZ2VkKHJlcSwgY2xpZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25SZWFjdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJlYWN0aW9uTWVzc2FnZShjbGllbnQsIHJlcSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUmV2b2tlZE1lc3NhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJldm9rZWRNZXNzYWdlKGNsaWVudCwgcmVxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25Qb2xsUmVzcG9uc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblBvbGxSZXNwb25zZShjbGllbnQsIHJlcSk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5vbkxhYmVsVXBkYXRlZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9uTGFiZWxVcGRhdGVkKGNsaWVudCwgcmVxKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5kYXRhKHJlcTogUmVxdWVzdCwgc2Vzc2lvbjogc3RyaW5nLCByZXM/OiBhbnkpIHtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVNlc3Npb25VdGlsKHJlcSwgY2xpZW50c0FycmF5LCBzZXNzaW9uLCByZXMpO1xuICB9XG5cbiAgZXhwb3J0UVIoXG4gICAgcmVxOiBhbnksXG4gICAgcXJDb2RlOiBhbnksXG4gICAgdXJsQ29kZTogYW55LFxuICAgIGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsXG4gICAgcmVzPzogYW55XG4gICkge1xuICAgIGV2ZW50RW1pdHRlci5lbWl0KGBxcmNvZGUtJHtjbGllbnQuc2Vzc2lvbn1gLCBxckNvZGUsIHVybENvZGUsIGNsaWVudCk7XG4gICAgT2JqZWN0LmFzc2lnbihjbGllbnQsIHtcbiAgICAgIHN0YXR1czogJ1FSQ09ERScsXG4gICAgICBxcmNvZGU6IHFyQ29kZSxcbiAgICAgIHVybGNvZGU6IHVybENvZGUsXG4gICAgfSk7XG5cbiAgICBxckNvZGUgPSBxckNvZGUucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcbiAgICBjb25zdCBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHFyQ29kZSwgJ2Jhc2U2NCcpO1xuXG4gICAgcmVxLmlvLmVtaXQoJ3FyQ29kZScsIHtcbiAgICAgIGRhdGE6ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJyArIGltYWdlQnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHNlc3Npb246IGNsaWVudC5zZXNzaW9uLFxuICAgIH0pO1xuXG4gICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdxcmNvZGUnLCB7IHFyY29kZTogcXJDb2RlLCB1cmxjb2RlOiB1cmxDb2RlIH0pO1xuICAgIGlmIChyZXMgJiYgIXJlcy5faGVhZGVyU2VudClcbiAgICAgIHJlc1xuICAgICAgICAuc3RhdHVzKDIwMClcbiAgICAgICAgLmpzb24oeyBzdGF0dXM6ICdxcmNvZGUnLCBxcmNvZGU6IHFyQ29kZSwgdXJsY29kZTogdXJsQ29kZSB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uUGFydGljaXBhbnRzQ2hhbmdlZChyZXE6IGFueSwgY2xpZW50OiBhbnkpIHtcbiAgICBhd2FpdCBjbGllbnQuaXNDb25uZWN0ZWQoKTtcbiAgICBhd2FpdCBjbGllbnQub25QYXJ0aWNpcGFudHNDaGFuZ2VkKChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb25wYXJ0aWNpcGFudHNjaGFuZ2VkJywgbWVzc2FnZSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydChyZXE6IFJlcXVlc3QsIGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgICBPYmplY3QuYXNzaWduKGNsaWVudCwgeyBzdGF0dXM6ICdDT05ORUNURUQnLCBxcmNvZGU6IG51bGwgfSk7XG5cbiAgICAgIHJlcS5sb2dnZXIuaW5mbyhgU3RhcnRlZCBTZXNzaW9uOiAke2NsaWVudC5zZXNzaW9ufWApO1xuICAgICAgLy9jYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ3Nlc3Npb24tbG9nZ2VkJywgeyBzdGF0dXM6ICdDT05ORUNURUQnfSk7XG4gICAgICByZXEuaW8uZW1pdCgnc2Vzc2lvbi1sb2dnZWQnLCB7IHN0YXR1czogdHJ1ZSwgc2Vzc2lvbjogY2xpZW50LnNlc3Npb24gfSk7XG4gICAgICBzdGFydEhlbHBlcihjbGllbnQsIHJlcSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgcmVxLmlvLmVtaXQoJ3Nlc3Npb24tZXJyb3InLCBjbGllbnQuc2Vzc2lvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jaGVja1N0YXRlU2Vzc2lvbihjbGllbnQsIHJlcSk7XG4gICAgYXdhaXQgdGhpcy5saXN0ZW5NZXNzYWdlcyhjbGllbnQsIHJlcSk7XG5cbiAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5saXN0ZW5BY2tzKSB7XG4gICAgICBhd2FpdCB0aGlzLmxpc3RlbkFja3MoY2xpZW50LCByZXEpO1xuICAgIH1cblxuICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUHJlc2VuY2VDaGFuZ2VkKSB7XG4gICAgICBhd2FpdCB0aGlzLm9uUHJlc2VuY2VDaGFuZ2VkKGNsaWVudCwgcmVxKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja1N0YXRlU2Vzc2lvbihjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25TdGF0ZUNoYW5nZSgoc3RhdGUpID0+IHtcbiAgICAgIHJlcS5sb2dnZXIuaW5mbyhgU3RhdGUgQ2hhbmdlICR7c3RhdGV9OiAke2NsaWVudC5zZXNzaW9ufWApO1xuICAgICAgY29uc3QgY29uZmxpdHMgPSBbU29ja2V0U3RhdGUuQ09ORkxJQ1RdO1xuXG4gICAgICBpZiAoY29uZmxpdHMuaW5jbHVkZXMoc3RhdGUpKSB7XG4gICAgICAgIGNsaWVudC51c2VIZXJlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0ZW5NZXNzYWdlcyhjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25NZXNzYWdlKGFzeW5jIChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIGV2ZW50RW1pdHRlci5lbWl0KGBtZW5zYWdlbS0ke2NsaWVudC5zZXNzaW9ufWAsIGNsaWVudCwgbWVzc2FnZSk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ubWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2xvY2F0aW9uJylcbiAgICAgICAgY2xpZW50Lm9uTGl2ZUxvY2F0aW9uKG1lc3NhZ2Uuc2VuZGVyLmlkLCAobG9jYXRpb24pID0+IHtcbiAgICAgICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ2xvY2F0aW9uJywgbG9jYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGNsaWVudC5vbkFueU1lc3NhZ2UoKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgICAgbWVzc2FnZS5zZXNzaW9uID0gY2xpZW50LnNlc3Npb247XG5cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdzdGlja2VyJykge1xuICAgICAgICBkb3dubG9hZChtZXNzYWdlLCBjbGllbnQsIHJlcS5sb2dnZXIpO1xuICAgICAgfVxuXG4gICAgICByZXEuaW8uZW1pdCgncmVjZWl2ZWQtbWVzc2FnZScsIHsgcmVzcG9uc2U6IG1lc3NhZ2UgfSk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjbGllbnQub25JbmNvbWluZ0NhbGwoYXN5bmMgKGNhbGwpID0+IHtcbiAgICAgIHJlcS5pby5lbWl0KCdpbmNvbWluZ2NhbGwnLCBjYWxsKTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnaW5jb21pbmdjYWxsJywgY2FsbCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0ZW5BY2tzKGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsIHJlcTogUmVxdWVzdCkge1xuICAgIGF3YWl0IGNsaWVudC5vbkFjayhhc3luYyAoYWNrKSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25hY2snLCBhY2spO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdvbmFjaycsIGFjayk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvblByZXNlbmNlQ2hhbmdlZChjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25QcmVzZW5jZUNoYW5nZWQoYXN5bmMgKHByZXNlbmNlQ2hhbmdlZEV2ZW50KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25wcmVzZW5jZWNoYW5nZWQnLCBwcmVzZW5jZUNoYW5nZWRFdmVudCk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucHJlc2VuY2VjaGFuZ2VkJywgcHJlc2VuY2VDaGFuZ2VkRXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25SZWFjdGlvbk1lc3NhZ2UoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgYXdhaXQgY2xpZW50Lm9uUmVhY3Rpb25NZXNzYWdlKGFzeW5jIChyZWFjdGlvbjogYW55KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25yZWFjdGlvbm1lc3NhZ2UnLCByZWFjdGlvbik7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucmVhY3Rpb25tZXNzYWdlJywgcmVhY3Rpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25SZXZva2VkTWVzc2FnZShjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQuaXNDb25uZWN0ZWQoKTtcbiAgICBhd2FpdCBjbGllbnQub25SZXZva2VkTWVzc2FnZShhc3luYyAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgcmVxLmlvLmVtaXQoJ29ucmV2b2tlZG1lc3NhZ2UnLCByZXNwb25zZSk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucmV2b2tlZG1lc3NhZ2UnLCByZXNwb25zZSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgb25Qb2xsUmVzcG9uc2UoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgYXdhaXQgY2xpZW50Lm9uUG9sbFJlc3BvbnNlKGFzeW5jIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25wb2xscmVzcG9uc2UnLCByZXNwb25zZSk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucG9sbHJlc3BvbnNlJywgcmVzcG9uc2UpO1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIG9uTGFiZWxVcGRhdGVkKGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsIHJlcTogUmVxdWVzdCkge1xuICAgIGF3YWl0IGNsaWVudC5pc0Nvbm5lY3RlZCgpO1xuICAgIGF3YWl0IGNsaWVudC5vblVwZGF0ZUxhYmVsKGFzeW5jIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb251cGRhdGVsYWJlbCcsIHJlc3BvbnNlKTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb251cGRhdGVsYWJlbCcsIHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGVuY29kZUZ1bmN0aW9uKGRhdGE6IGFueSwgd2ViaG9vazogYW55KSB7XG4gICAgZGF0YS53ZWJob29rID0gd2ViaG9vaztcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIH1cblxuICBkZWNvZGVGdW5jdGlvbih0ZXh0OiBhbnksIGNsaWVudDogYW55KSB7XG4gICAgY29uc3Qgb2JqZWN0ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICBpZiAob2JqZWN0LndlYmhvb2sgJiYgIWNsaWVudC53ZWJob29rKSBjbGllbnQud2ViaG9vayA9IG9iamVjdC53ZWJob29rO1xuICAgIGRlbGV0ZSBvYmplY3Qud2ViaG9vaztcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgZ2V0Q2xpZW50KHNlc3Npb246IGFueSkge1xuICAgIGxldCBjbGllbnQgPSBjbGllbnRzQXJyYXlbc2Vzc2lvbl07XG5cbiAgICBpZiAoIWNsaWVudClcbiAgICAgIGNsaWVudCA9IGNsaWVudHNBcnJheVtzZXNzaW9uXSA9IHtcbiAgICAgICAgc3RhdHVzOiBudWxsLFxuICAgICAgICBzZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgfSBhcyBhbnk7XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7OztBQUdBLElBQUFDLGtCQUFBLEdBQUFELE9BQUE7O0FBRUEsSUFBQUUsZUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxH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
320
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3BwY29ubmVjdCIsInJlcXVpcmUiLCJfc2Vzc2lvbkNvbnRyb2xsZXIiLCJfY2hhdFdvb3RDbGllbnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2Z1bmN0aW9ucyIsIl9zZXNzaW9uVXRpbCIsIl9mYWN0b3J5IiwiQ3JlYXRlU2Vzc2lvblV0aWwiLCJzdGFydENoYXRXb290Q2xpZW50IiwiY2xpZW50IiwiY29uZmlnIiwiY2hhdFdvb3QiLCJjaGF0V29vdENsaWVudCIsInNlc3Npb24iLCJjcmVhdGVTZXNzaW9uVXRpbCIsInJlcSIsImNsaWVudHNBcnJheSIsInJlcyIsImdldENsaWVudCIsInN0YXR1cyIsImJvZHkiLCJ0b2tlblN0b3JlIiwiRmFjdG9yeSIsIm15VG9rZW5TdG9yZSIsImNyZWF0ZVRva2VuU3RvcnkiLCJ0b2tlbkRhdGEiLCJnZXRUb2tlbiIsInNldFRva2VuIiwic2VydmVyT3B0aW9ucyIsImN1c3RvbVVzZXJEYXRhRGlyIiwiY3JlYXRlT3B0aW9ucyIsInB1cHBldGVlck9wdGlvbnMiLCJ1c2VyRGF0YURpciIsIndwcENsaWVudCIsImNyZWF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImRldmljZU5hbWUiLCJwb3dlcmVkQnkiLCJjYXRjaFFSIiwiYmFzZTY0UXIiLCJhc2NpaVFSIiwiYXR0ZW1wdCIsInVybENvZGUiLCJleHBvcnRRUiIsIm9uTG9hZGluZ1NjcmVlbiIsInBlcmNlbnQiLCJtZXNzYWdlIiwibG9nZ2VyIiwiaW5mbyIsInN0YXR1c0ZpbmQiLCJldmVudEVtaXR0ZXIiLCJlbWl0IiwicXJjb2RlIiwiY2xvc2UiLCJ1bmRlZmluZWQiLCJjYWxsV2ViSG9vayIsImVycm9yIiwic3RhcnQiLCJ3ZWJob29rIiwib25QYXJ0aWNpcGFudHNDaGFuZ2VkIiwib25SZWFjdGlvbk1lc3NhZ2UiLCJvblJldm9rZWRNZXNzYWdlIiwib25Qb2xsUmVzcG9uc2UiLCJvbkxhYmVsVXBkYXRlZCIsImUiLCJvcGVuZGF0YSIsInFyQ29kZSIsInVybGNvZGUiLCJyZXBsYWNlIiwiaW1hZ2VCdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiaW8iLCJkYXRhIiwidG9TdHJpbmciLCJfaGVhZGVyU2VudCIsImpzb24iLCJpc0Nvbm5lY3RlZCIsInN0YXJ0SGVscGVyIiwiY2hlY2tTdGF0ZVNlc3Npb24iLCJsaXN0ZW5NZXNzYWdlcyIsImxpc3RlbkFja3MiLCJvblByZXNlbmNlQ2hhbmdlZCIsIm9uU3RhdGVDaGFuZ2UiLCJzdGF0ZSIsImNvbmZsaXRzIiwiU29ja2V0U3RhdGUiLCJDT05GTElDVCIsImluY2x1ZGVzIiwidXNlSGVyZSIsIm9uTWVzc2FnZSIsInR5cGUiLCJvbkxpdmVMb2NhdGlvbiIsInNlbmRlciIsImlkIiwibG9jYXRpb24iLCJvbkFueU1lc3NhZ2UiLCJkb3dubG9hZCIsInJlc3BvbnNlIiwib25TZWxmTWVzc2FnZSIsImZyb21NZSIsIm9uSW5jb21pbmdDYWxsIiwiY2FsbCIsIm9uQWNrIiwiYWNrIiwicHJlc2VuY2VDaGFuZ2VkRXZlbnQiLCJyZWFjdGlvbiIsIm9uVXBkYXRlTGFiZWwiLCJlbmNvZGVGdW5jdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvZGVGdW5jdGlvbiIsInRleHQiLCJvYmplY3QiLCJwYXJzZSIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvY3JlYXRlU2Vzc2lvblV0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIxIFdQUENvbm5lY3QgVGVhbVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3JlYXRlLCBTb2NrZXRTdGF0ZSB9IGZyb20gJ0B3cHBjb25uZWN0LXRlYW0vd3BwY29ubmVjdCc7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5cbmltcG9ydCB7IGRvd25sb2FkIH0gZnJvbSAnLi4vY29udHJvbGxlci9zZXNzaW9uQ29udHJvbGxlcic7XG5pbXBvcnQgeyBXaGF0c0FwcFNlcnZlciB9IGZyb20gJy4uL3R5cGVzL1doYXRzQXBwU2VydmVyJztcbmltcG9ydCBjaGF0V29vdENsaWVudCBmcm9tICcuL2NoYXRXb290Q2xpZW50JztcbmltcG9ydCB7IGNhbGxXZWJIb29rLCBzdGFydEhlbHBlciB9IGZyb20gJy4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGNsaWVudHNBcnJheSwgZXZlbnRFbWl0dGVyIH0gZnJvbSAnLi9zZXNzaW9uVXRpbCc7XG5pbXBvcnQgRmFjdG9yeSBmcm9tICcuL3Rva2VuU3RvcmUvZmFjdG9yeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENyZWF0ZVNlc3Npb25VdGlsIHtcbiAgc3RhcnRDaGF0V29vdENsaWVudChjbGllbnQ6IGFueSkge1xuICAgIGlmIChjbGllbnQuY29uZmlnLmNoYXRXb290ICYmICFjbGllbnQuX2NoYXRXb290Q2xpZW50KVxuICAgICAgY2xpZW50Ll9jaGF0V29vdENsaWVudCA9IG5ldyBjaGF0V29vdENsaWVudChcbiAgICAgICAgY2xpZW50LmNvbmZpZy5jaGF0V29vdCxcbiAgICAgICAgY2xpZW50LnNlc3Npb25cbiAgICAgICk7XG4gICAgcmV0dXJuIGNsaWVudC5fY2hhdFdvb3RDbGllbnQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uVXRpbChcbiAgICByZXE6IGFueSxcbiAgICBjbGllbnRzQXJyYXk6IGFueSxcbiAgICBzZXNzaW9uOiBzdHJpbmcsXG4gICAgcmVzPzogYW55XG4gICkge1xuICAgIHRyeSB7XG4gICAgICBsZXQgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoc2Vzc2lvbikgYXMgYW55O1xuICAgICAgaWYgKGNsaWVudC5zdGF0dXMgIT0gbnVsbCAmJiBjbGllbnQuc3RhdHVzICE9PSAnQ0xPU0VEJykgcmV0dXJuO1xuICAgICAgY2xpZW50LnN0YXR1cyA9ICdJTklUSUFMSVpJTkcnO1xuICAgICAgY2xpZW50LmNvbmZpZyA9IHJlcS5ib2R5O1xuXG4gICAgICBjb25zdCB0b2tlblN0b3JlID0gbmV3IEZhY3RvcnkoKTtcbiAgICAgIGNvbnN0IG15VG9rZW5TdG9yZSA9IHRva2VuU3RvcmUuY3JlYXRlVG9rZW5TdG9yeShjbGllbnQpO1xuICAgICAgY29uc3QgdG9rZW5EYXRhID0gYXdhaXQgbXlUb2tlblN0b3JlLmdldFRva2VuKHNlc3Npb24pO1xuXG4gICAgICBpZiAoIXRva2VuRGF0YSkge1xuICAgICAgICBteVRva2VuU3RvcmUuc2V0VG9rZW4oc2Vzc2lvbiwge30pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXJ0Q2hhdFdvb3RDbGllbnQoY2xpZW50KTtcblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLmN1c3RvbVVzZXJEYXRhRGlyKSB7XG4gICAgICAgIHJlcS5zZXJ2ZXJPcHRpb25zLmNyZWF0ZU9wdGlvbnMucHVwcGV0ZWVyT3B0aW9ucyA9IHtcbiAgICAgICAgICB1c2VyRGF0YURpcjogcmVxLnNlcnZlck9wdGlvbnMuY3VzdG9tVXNlckRhdGFEaXIgKyBzZXNzaW9uLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cHBDbGllbnQgPSBhd2FpdCBjcmVhdGUoXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAgeyB0b2tlblN0b3JlOiBteVRva2VuU3RvcmUgfSxcbiAgICAgICAgICByZXEuc2VydmVyT3B0aW9ucy5jcmVhdGVPcHRpb25zLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlc3Npb246IHNlc3Npb24sXG4gICAgICAgICAgICBkZXZpY2VOYW1lOlxuICAgICAgICAgICAgICBjbGllbnQuY29uZmlnPy5kZXZpY2VOYW1lIHx8IHJlcS5zZXJ2ZXJPcHRpb25zLmRldmljZU5hbWUsXG4gICAgICAgICAgICBwb3dlcmVkQnk6XG4gICAgICAgICAgICAgIGNsaWVudC5jb25maWc/LnBvd2VyZWRCeSB8fFxuICAgICAgICAgICAgICByZXEuc2VydmVyT3B0aW9ucy5wb3dlcmVkQnkgfHxcbiAgICAgICAgICAgICAgJ1dQUENvbm5lY3QtU2VydmVyJyxcbiAgICAgICAgICAgIGNhdGNoUVI6IChcbiAgICAgICAgICAgICAgYmFzZTY0UXI6IGFueSxcbiAgICAgICAgICAgICAgYXNjaWlRUjogYW55LFxuICAgICAgICAgICAgICBhdHRlbXB0OiBhbnksXG4gICAgICAgICAgICAgIHVybENvZGU6IHN0cmluZ1xuICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZXhwb3J0UVIocmVxLCBiYXNlNjRRciwgdXJsQ29kZSwgY2xpZW50LCByZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uTG9hZGluZ1NjcmVlbjogKHBlcmNlbnQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHJlcS5sb2dnZXIuaW5mbyhgWyR7c2Vzc2lvbn1dICR7cGVyY2VudH0lIC0gJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXR1c0ZpbmQ6IChzdGF0dXNGaW5kOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBldmVudEVtaXR0ZXIuZW1pdChcbiAgICAgICAgICAgICAgICAgIGBzdGF0dXMtJHtjbGllbnQuc2Vzc2lvbn1gLFxuICAgICAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICAgICAgc3RhdHVzRmluZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3RhdHVzRmluZCA9PT0gJ2F1dG9jbG9zZUNhbGxlZCcgfHxcbiAgICAgICAgICAgICAgICAgIHN0YXR1c0ZpbmQgPT09ICdkZXNjb25uZWN0ZWRNb2JpbGUnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjbGllbnQuc3RhdHVzID0gJ0NMT1NFRCc7XG4gICAgICAgICAgICAgICAgICBjbGllbnQucXJjb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgY2xpZW50c0FycmF5W3Nlc3Npb25dID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ3N0YXR1cy1maW5kJywge1xuICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXNGaW5kLFxuICAgICAgICAgICAgICAgICAgc2Vzc2lvbjogY2xpZW50LnNlc3Npb24sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVxLmxvZ2dlci5pbmZvKHN0YXR1c0ZpbmQgKyAnXFxuXFxuJyk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudCA9IGNsaWVudHNBcnJheVtzZXNzaW9uXSA9IE9iamVjdC5hc3NpZ24od3BwQ2xpZW50LCBjbGllbnQpO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydChyZXEsIGNsaWVudCk7XG5cbiAgICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUGFydGljaXBhbnRzQ2hhbmdlZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9uUGFydGljaXBhbnRzQ2hhbmdlZChyZXEsIGNsaWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUmVhY3Rpb25NZXNzYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25SZWFjdGlvbk1lc3NhZ2UoY2xpZW50LCByZXEpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5vblJldm9rZWRNZXNzYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25SZXZva2VkTWVzc2FnZShjbGllbnQsIHJlcSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUG9sbFJlc3BvbnNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25Qb2xsUmVzcG9uc2UoY2xpZW50LCByZXEpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25MYWJlbFVwZGF0ZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkxhYmVsVXBkYXRlZChjbGllbnQsIHJlcSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvcGVuZGF0YShyZXE6IFJlcXVlc3QsIHNlc3Npb246IHN0cmluZywgcmVzPzogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVTZXNzaW9uVXRpbChyZXEsIGNsaWVudHNBcnJheSwgc2Vzc2lvbiwgcmVzKTtcbiAgfVxuXG4gIGV4cG9ydFFSKFxuICAgIHJlcTogYW55LFxuICAgIHFyQ29kZTogYW55LFxuICAgIHVybENvZGU6IGFueSxcbiAgICBjbGllbnQ6IFdoYXRzQXBwU2VydmVyLFxuICAgIHJlcz86IGFueVxuICApIHtcbiAgICBldmVudEVtaXR0ZXIuZW1pdChgcXJjb2RlLSR7Y2xpZW50LnNlc3Npb259YCwgcXJDb2RlLCB1cmxDb2RlLCBjbGllbnQpO1xuICAgIE9iamVjdC5hc3NpZ24oY2xpZW50LCB7XG4gICAgICBzdGF0dXM6ICdRUkNPREUnLFxuICAgICAgcXJjb2RlOiBxckNvZGUsXG4gICAgICB1cmxjb2RlOiB1cmxDb2RlLFxuICAgIH0pO1xuXG4gICAgcXJDb2RlID0gcXJDb2RlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XG4gICAgY29uc3QgaW1hZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShxckNvZGUsICdiYXNlNjQnKTtcblxuICAgIHJlcS5pby5lbWl0KCdxckNvZGUnLCB7XG4gICAgICBkYXRhOiAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBpbWFnZUJ1ZmZlci50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICBzZXNzaW9uOiBjbGllbnQuc2Vzc2lvbixcbiAgICB9KTtcblxuICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAncXJjb2RlJywge1xuICAgICAgcXJjb2RlOiBxckNvZGUsXG4gICAgICB1cmxjb2RlOiB1cmxDb2RlLFxuICAgICAgc2Vzc2lvbjogY2xpZW50LnNlc3Npb24sXG4gICAgfSk7XG4gICAgaWYgKHJlcyAmJiAhcmVzLl9oZWFkZXJTZW50KVxuICAgICAgcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgICBzdGF0dXM6ICdxcmNvZGUnLFxuICAgICAgICBxcmNvZGU6IHFyQ29kZSxcbiAgICAgICAgdXJsY29kZTogdXJsQ29kZSxcbiAgICAgICAgc2Vzc2lvbjogY2xpZW50LnNlc3Npb24sXG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uUGFydGljaXBhbnRzQ2hhbmdlZChyZXE6IGFueSwgY2xpZW50OiBhbnkpIHtcbiAgICBhd2FpdCBjbGllbnQuaXNDb25uZWN0ZWQoKTtcbiAgICBhd2FpdCBjbGllbnQub25QYXJ0aWNpcGFudHNDaGFuZ2VkKChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb25wYXJ0aWNpcGFudHNjaGFuZ2VkJywgbWVzc2FnZSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydChyZXE6IFJlcXVlc3QsIGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgICBPYmplY3QuYXNzaWduKGNsaWVudCwgeyBzdGF0dXM6ICdDT05ORUNURUQnLCBxcmNvZGU6IG51bGwgfSk7XG5cbiAgICAgIHJlcS5sb2dnZXIuaW5mbyhgU3RhcnRlZCBTZXNzaW9uOiAke2NsaWVudC5zZXNzaW9ufWApO1xuICAgICAgLy9jYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ3Nlc3Npb24tbG9nZ2VkJywgeyBzdGF0dXM6ICdDT05ORUNURUQnfSk7XG4gICAgICByZXEuaW8uZW1pdCgnc2Vzc2lvbi1sb2dnZWQnLCB7IHN0YXR1czogdHJ1ZSwgc2Vzc2lvbjogY2xpZW50LnNlc3Npb24gfSk7XG4gICAgICBzdGFydEhlbHBlcihjbGllbnQsIHJlcSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgcmVxLmlvLmVtaXQoJ3Nlc3Npb24tZXJyb3InLCBjbGllbnQuc2Vzc2lvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jaGVja1N0YXRlU2Vzc2lvbihjbGllbnQsIHJlcSk7XG4gICAgYXdhaXQgdGhpcy5saXN0ZW5NZXNzYWdlcyhjbGllbnQsIHJlcSk7XG5cbiAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5saXN0ZW5BY2tzKSB7XG4gICAgICBhd2FpdCB0aGlzLmxpc3RlbkFja3MoY2xpZW50LCByZXEpO1xuICAgIH1cblxuICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUHJlc2VuY2VDaGFuZ2VkKSB7XG4gICAgICBhd2FpdCB0aGlzLm9uUHJlc2VuY2VDaGFuZ2VkKGNsaWVudCwgcmVxKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja1N0YXRlU2Vzc2lvbihjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25TdGF0ZUNoYW5nZSgoc3RhdGUpID0+IHtcbiAgICAgIHJlcS5sb2dnZXIuaW5mbyhgU3RhdGUgQ2hhbmdlICR7c3RhdGV9OiAke2NsaWVudC5zZXNzaW9ufWApO1xuICAgICAgY29uc3QgY29uZmxpdHMgPSBbU29ja2V0U3RhdGUuQ09ORkxJQ1RdO1xuXG4gICAgICBpZiAoY29uZmxpdHMuaW5jbHVkZXMoc3RhdGUpKSB7XG4gICAgICAgIGNsaWVudC51c2VIZXJlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0ZW5NZXNzYWdlcyhjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25NZXNzYWdlKGFzeW5jIChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIGV2ZW50RW1pdHRlci5lbWl0KGBtZW5zYWdlbS0ke2NsaWVudC5zZXNzaW9ufWAsIGNsaWVudCwgbWVzc2FnZSk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ubWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2xvY2F0aW9uJylcbiAgICAgICAgY2xpZW50Lm9uTGl2ZUxvY2F0aW9uKG1lc3NhZ2Uuc2VuZGVyLmlkLCAobG9jYXRpb24pID0+IHtcbiAgICAgICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ2xvY2F0aW9uJywgbG9jYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGNsaWVudC5vbkFueU1lc3NhZ2UoKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgICAgbWVzc2FnZS5zZXNzaW9uID0gY2xpZW50LnNlc3Npb247XG5cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdzdGlja2VyJykge1xuICAgICAgICBkb3dubG9hZChtZXNzYWdlLCBjbGllbnQsIHJlcS5sb2dnZXIpO1xuICAgICAgfVxuXG4gICAgICByZXEuaW8uZW1pdCgncmVjZWl2ZWQtbWVzc2FnZScsIHsgcmVzcG9uc2U6IG1lc3NhZ2UgfSk7XG4gICAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5vblNlbGZNZXNzYWdlICYmIG1lc3NhZ2UuZnJvbU1lKVxuICAgICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29uc2VsZm1lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGNsaWVudC5vbkluY29taW5nQ2FsbChhc3luYyAoY2FsbCkgPT4ge1xuICAgICAgcmVxLmlvLmVtaXQoJ2luY29taW5nY2FsbCcsIGNhbGwpO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdpbmNvbWluZ2NhbGwnLCBjYWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RlbkFja3MoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50Lm9uQWNrKGFzeW5jIChhY2spID0+IHtcbiAgICAgIHJlcS5pby5lbWl0KCdvbmFjaycsIGFjayk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29uYWNrJywgYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uUHJlc2VuY2VDaGFuZ2VkKGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsIHJlcTogUmVxdWVzdCkge1xuICAgIGF3YWl0IGNsaWVudC5vblByZXNlbmNlQ2hhbmdlZChhc3luYyAocHJlc2VuY2VDaGFuZ2VkRXZlbnQpID0+IHtcbiAgICAgIHJlcS5pby5lbWl0KCdvbnByZXNlbmNlY2hhbmdlZCcsIHByZXNlbmNlQ2hhbmdlZEV2ZW50KTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb25wcmVzZW5jZWNoYW5nZWQnLCBwcmVzZW5jZUNoYW5nZWRFdmVudCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvblJlYWN0aW9uTWVzc2FnZShjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQuaXNDb25uZWN0ZWQoKTtcbiAgICBhd2FpdCBjbGllbnQub25SZWFjdGlvbk1lc3NhZ2UoYXN5bmMgKHJlYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIHJlcS5pby5lbWl0KCdvbnJlYWN0aW9ubWVzc2FnZScsIHJlYWN0aW9uKTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb25yZWFjdGlvbm1lc3NhZ2UnLCByZWFjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvblJldm9rZWRNZXNzYWdlKGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsIHJlcTogUmVxdWVzdCkge1xuICAgIGF3YWl0IGNsaWVudC5pc0Nvbm5lY3RlZCgpO1xuICAgIGF3YWl0IGNsaWVudC5vblJldm9rZWRNZXNzYWdlKGFzeW5jIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25yZXZva2VkbWVzc2FnZScsIHJlc3BvbnNlKTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb25yZXZva2VkbWVzc2FnZScsIHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfVxuICBhc3luYyBvblBvbGxSZXNwb25zZShjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQuaXNDb25uZWN0ZWQoKTtcbiAgICBhd2FpdCBjbGllbnQub25Qb2xsUmVzcG9uc2UoYXN5bmMgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIHJlcS5pby5lbWl0KCdvbnBvbGxyZXNwb25zZScsIHJlc3BvbnNlKTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb25wb2xscmVzcG9uc2UnLCByZXNwb25zZSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgb25MYWJlbFVwZGF0ZWQoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgYXdhaXQgY2xpZW50Lm9uVXBkYXRlTGFiZWwoYXN5bmMgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIHJlcS5pby5lbWl0KCdvbnVwZGF0ZWxhYmVsJywgcmVzcG9uc2UpO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdvbnVwZGF0ZWxhYmVsJywgcmVzcG9uc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgZW5jb2RlRnVuY3Rpb24oZGF0YTogYW55LCB3ZWJob29rOiBhbnkpIHtcbiAgICBkYXRhLndlYmhvb2sgPSB3ZWJob29rO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgfVxuXG4gIGRlY29kZUZ1bmN0aW9uKHRleHQ6IGFueSwgY2xpZW50OiBhbnkpIHtcbiAgICBjb25zdCBvYmplY3QgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmIChvYmplY3Qud2ViaG9vayAmJiAhY2xpZW50LndlYmhvb2spIGNsaWVudC53ZWJob29rID0gb2JqZWN0LndlYmhvb2s7XG4gICAgZGVsZXRlIG9iamVjdC53ZWJob29rO1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBnZXRDbGllbnQoc2Vzc2lvbjogYW55KSB7XG4gICAgbGV0IGNsaWVudCA9IGNsaWVudHNBcnJheVtzZXNzaW9uXTtcblxuICAgIGlmICghY2xpZW50KVxuICAgICAgY2xpZW50ID0gY2xpZW50c0FycmF5W3Nlc3Npb25dID0ge1xuICAgICAgICBzdGF0dXM6IG51bGwsXG4gICAgICAgIHNlc3Npb246IHNlc3Npb24sXG4gICAgICB9IGFzIGFueTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQWVBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTs7O0FBR0EsSUFBQUMsa0JBQUEsR0FBQUQsT0FBQTs7QUFFQSxJQUFBRSxlQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFILHNCQUFBLENBQUFILE9BQUEsMEJBQTJDLENBdkIzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FXZSxNQUFNTyxpQkFBaUIsQ0FBQyxDQUNyQ0MsbUJBQW1CQSxDQUFDQyxNQUFXLEVBQUUsQ0FDL0IsSUFBSUEsTUFBTSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsSUFBSSxDQUFDRixNQUFNLENBQUNQLGVBQWUsRUFDbkRPLE1BQU0sQ0FBQ1AsZUFBZSxHQUFHLElBQUlVLHVCQUFjLENBQ3pDSCxNQUFNLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxFQUN0QkYsTUFBTSxDQUFDSSxPQUNULENBQUMsQ0FDSCxPQUFPSixNQUFNLENBQUNQLGVBQWUsQ0FDL0IsQ0FFQSxNQUFNWSxpQkFBaUJBLENBQ3JCQyxHQUFRLEVBQ1JDLFlBQWlCO0VBQ2pCSCxPQUFlO0VBQ2ZJLEdBQVM7RUFDVDtJQUNBLElBQUk7TUFDRixJQUFJUixNQUFNLEdBQUcsSUFBSSxDQUFDUyxTQUFTLENBQUNMLE9BQU8sQ0FBUTtNQUMzQyxJQUFJSixNQUFNLENBQUNVLE1BQU0sSUFB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