parse-server 6.3.0-alpha.1 → 6.3.0-alpha.2

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.
@@ -24,7 +24,7 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
24
24
  super();
25
25
  this._databaseURI = mongoDatabaseURI;
26
26
  this._algorithm = 'aes-256-gcm';
27
- this._encryptionKey = encryptionKey !== undefined ? crypto.createHash('sha256').update(String(encryptionKey)).digest('base64').substr(0, 32) : null;
27
+ this._encryptionKey = encryptionKey !== undefined ? crypto.createHash('sha256').update(String(encryptionKey)).digest('base64').substring(0, 32) : null;
28
28
  const defaultMongoOptions = {
29
29
  useNewUrlParser: true,
30
30
  useUnifiedTopology: true
@@ -121,8 +121,8 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
121
121
  });
122
122
  }
123
123
  async rotateEncryptionKey(options = {}) {
124
- var fileNames = [];
125
- var oldKeyFileAdapter = {};
124
+ let fileNames = [];
125
+ let oldKeyFileAdapter = {};
126
126
  const bucket = await this._getBucket();
127
127
  if (options.oldKey !== undefined) {
128
128
  oldKeyFileAdapter = new GridFSBucketAdapter(this._databaseURI, this._mongoOptions, options.oldKey);
@@ -137,46 +137,25 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
137
137
  fileNames.push(file.filename);
138
138
  });
139
139
  }
140
- return new Promise(resolve => {
141
- var fileNamesNotRotated = fileNames;
142
- var fileNamesRotated = [];
143
- var fileNameTotal = fileNames.length;
144
- var fileNameIndex = 0;
145
- fileNames.forEach(fileName => {
146
- oldKeyFileAdapter.getFileData(fileName).then(plainTextData => {
147
- //Overwrite file with data encrypted with new key
148
- this.createFile(fileName, plainTextData).then(() => {
149
- fileNamesRotated.push(fileName);
150
- fileNamesNotRotated = fileNamesNotRotated.filter(function (value) {
151
- return value !== fileName;
152
- });
153
- fileNameIndex += 1;
154
- if (fileNameIndex == fileNameTotal) {
155
- resolve({
156
- rotated: fileNamesRotated,
157
- notRotated: fileNamesNotRotated
158
- });
159
- }
160
- }).catch(() => {
161
- fileNameIndex += 1;
162
- if (fileNameIndex == fileNameTotal) {
163
- resolve({
164
- rotated: fileNamesRotated,
165
- notRotated: fileNamesNotRotated
166
- });
167
- }
168
- });
169
- }).catch(() => {
170
- fileNameIndex += 1;
171
- if (fileNameIndex == fileNameTotal) {
172
- resolve({
173
- rotated: fileNamesRotated,
174
- notRotated: fileNamesNotRotated
175
- });
176
- }
140
+ let fileNamesNotRotated = fileNames;
141
+ const fileNamesRotated = [];
142
+ for (const fileName of fileNames) {
143
+ try {
144
+ const plainTextData = await oldKeyFileAdapter.getFileData(fileName);
145
+ // Overwrite file with data encrypted with new key
146
+ await this.createFile(fileName, plainTextData);
147
+ fileNamesRotated.push(fileName);
148
+ fileNamesNotRotated = fileNamesNotRotated.filter(function (value) {
149
+ return value !== fileName;
177
150
  });
178
- });
179
- });
151
+ } catch (err) {
152
+ continue;
153
+ }
154
+ }
155
+ return {
156
+ rotated: fileNamesRotated,
157
+ notRotated: fileNamesNotRotated
158
+ };
180
159
  }
181
160
  getFileLocation(config, filename) {
182
161
  return config.mount + '/files/' + config.applicationId + '/' + encodeURIComponent(filename);
@@ -252,4 +231,4 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
252
231
  exports.GridFSBucketAdapter = GridFSBucketAdapter;
253
232
  var _default = GridFSBucketAdapter;
254
233
  exports.default = _default;
255
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJyZXF1aXJlIiwiR3JpZEZTQnVja2V0QWRhcHRlciIsIkZpbGVzQWRhcHRlciIsImNvbnN0cnVjdG9yIiwibW9uZ29EYXRhYmFzZVVSSSIsImRlZmF1bHRzIiwiRGVmYXVsdE1vbmdvVVJJIiwibW9uZ29PcHRpb25zIiwiZW5jcnlwdGlvbktleSIsInVuZGVmaW5lZCIsIl9kYXRhYmFzZVVSSSIsIl9hbGdvcml0aG0iLCJfZW5jcnlwdGlvbktleSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJTdHJpbmciLCJkaWdlc3QiLCJzdWJzdHIiLCJkZWZhdWx0TW9uZ29PcHRpb25zIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiX21vbmdvT3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsImtleSIsIl9jb25uZWN0IiwiX2Nvbm5lY3Rpb25Qcm9taXNlIiwiTW9uZ29DbGllbnQiLCJjb25uZWN0IiwidGhlbiIsImNsaWVudCIsIl9jbGllbnQiLCJkYiIsInMiLCJvcHRpb25zIiwiZGJOYW1lIiwiX2dldEJ1Y2tldCIsImRhdGFiYXNlIiwiR3JpZEZTQnVja2V0IiwiY3JlYXRlRmlsZSIsImZpbGVuYW1lIiwiZGF0YSIsImNvbnRlbnRUeXBlIiwiYnVja2V0Iiwic3RyZWFtIiwib3BlblVwbG9hZFN0cmVhbSIsIm1ldGFkYXRhIiwiaXYiLCJyYW5kb21CeXRlcyIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkUmVzdWx0IiwiQnVmZmVyIiwiY29uY2F0IiwiZmluYWwiLCJnZXRBdXRoVGFnIiwid3JpdGUiLCJlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVuZCIsIm9uIiwiZGVsZXRlRmlsZSIsImRvY3VtZW50cyIsImZpbmQiLCJ0b0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJhbGwiLCJtYXAiLCJkb2MiLCJkZWxldGUiLCJfaWQiLCJnZXRGaWxlRGF0YSIsIm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZSIsInJlYWQiLCJjaHVua3MiLCJwdXNoIiwiYXV0aFRhZ0xvY2F0aW9uIiwiaXZMb2NhdGlvbiIsImF1dGhUYWciLCJzbGljZSIsImVuY3J5cHRlZCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsInNldEF1dGhUYWciLCJkZWNyeXB0ZWQiLCJyb3RhdGVFbmNyeXB0aW9uS2V5IiwiZmlsZU5hbWVzIiwib2xkS2V5RmlsZUFkYXB0ZXIiLCJvbGRLZXkiLCJmaWxlTmFtZXNJdGVyYXRvciIsImZvckVhY2giLCJmaWxlIiwiZmlsZU5hbWVzTm90Um90YXRlZCIsImZpbGVOYW1lc1JvdGF0ZWQiLCJmaWxlTmFtZVRvdGFsIiwiZmlsZU5hbWVJbmRleCIsImZpbGVOYW1lIiwicGxhaW5UZXh0RGF0YSIsImZpbHRlciIsInZhbHVlIiwicm90YXRlZCIsIm5vdFJvdGF0ZWQiLCJjYXRjaCIsImdldEZpbGVMb2NhdGlvbiIsImNvbmZpZyIsIm1vdW50IiwiYXBwbGljYXRpb25JZCIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldE1ldGFkYXRhIiwiZmlsZXMiLCJoYW5kbGVGaWxlU3RyZWFtIiwicmVxIiwicmVzIiwicGFydHMiLCJnZXQiLCJyZXBsYWNlIiwic3BsaXQiLCJwYXJ0aWFsc3RhcnQiLCJwYXJ0aWFsZW5kIiwiZmlsZUxlbmd0aCIsImZpbGVTdGFydCIsInBhcnNlSW50IiwiZmlsZUVuZCIsInN0YXJ0IiwiTWF0aCIsIm1pbiIsIm1heCIsImlzTmFOIiwic3RhdHVzIiwiaGVhZGVyIiwiY2h1bmsiLCJlIiwic2VuZCIsIm1lc3NhZ2UiLCJoYW5kbGVTaHV0ZG93biIsImNsb3NlIiwidmFsaWRhdGVGaWxlbmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkRlNCdWNrZXRBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuIEdyaWRGU0J1Y2tldEFkYXB0ZXJcbiBTdG9yZXMgZmlsZXMgaW4gTW9uZ28gdXNpbmcgR3JpZEZTXG4gUmVxdWlyZXMgdGhlIGRhdGFiYXNlIGFkYXB0ZXIgdG8gYmUgYmFzZWQgb24gbW9uZ29jbGllbnRcblxuIEBmbG93IHdlYWtcbiAqL1xuXG4vLyBAZmxvdy1kaXNhYmxlLW5leHRcbmltcG9ydCB7IE1vbmdvQ2xpZW50LCBHcmlkRlNCdWNrZXQsIERiIH0gZnJvbSAnbW9uZ29kYic7XG5pbXBvcnQgeyBGaWxlc0FkYXB0ZXIsIHZhbGlkYXRlRmlsZW5hbWUgfSBmcm9tICcuL0ZpbGVzQWRhcHRlcic7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vLi4vZGVmYXVsdHMnO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbmV4cG9ydCBjbGFzcyBHcmlkRlNCdWNrZXRBZGFwdGVyIGV4dGVuZHMgRmlsZXNBZGFwdGVyIHtcbiAgX2RhdGFiYXNlVVJJOiBzdHJpbmc7XG4gIF9jb25uZWN0aW9uUHJvbWlzZTogUHJvbWlzZTxEYj47XG4gIF9tb25nb09wdGlvbnM6IE9iamVjdDtcbiAgX2FsZ29yaXRobTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1vbmdvRGF0YWJhc2VVUkkgPSBkZWZhdWx0cy5EZWZhdWx0TW9uZ29VUkksXG4gICAgbW9uZ29PcHRpb25zID0ge30sXG4gICAgZW5jcnlwdGlvbktleSA9IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RhdGFiYXNlVVJJID0gbW9uZ29EYXRhYmFzZVVSSTtcbiAgICB0aGlzLl9hbGdvcml0aG0gPSAnYWVzLTI1Ni1nY20nO1xuICAgIHRoaXMuX2VuY3J5cHRpb25LZXkgPVxuICAgICAgZW5jcnlwdGlvbktleSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShTdHJpbmcoZW5jcnlwdGlvbktleSkpLmRpZ2VzdCgnYmFzZTY0Jykuc3Vic3RyKDAsIDMyKVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgZGVmYXVsdE1vbmdvT3B0aW9ucyA9IHtcbiAgICAgIHVzZU5ld1VybFBhcnNlcjogdHJ1ZSxcbiAgICAgIHVzZVVuaWZpZWRUb3BvbG9neTogdHJ1ZSxcbiAgICB9O1xuICAgIGNvbnN0IF9tb25nb09wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRNb25nb09wdGlvbnMsIG1vbmdvT3B0aW9ucyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgWydlbmFibGVTY2hlbWFIb29rcycsICdzY2hlbWFDYWNoZVR0bCcsICdtYXhUaW1lTVMnXSkge1xuICAgICAgZGVsZXRlIF9tb25nb09wdGlvbnNba2V5XTtcbiAgICB9XG4gICAgdGhpcy5fbW9uZ29PcHRpb25zID0gX21vbmdvT3B0aW9ucztcbiAgfVxuXG4gIF9jb25uZWN0KCkge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvblByb21pc2UpIHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlID0gTW9uZ29DbGllbnQuY29ubmVjdCh0aGlzLl9kYXRhYmFzZVVSSSwgdGhpcy5fbW9uZ29PcHRpb25zKS50aGVuKFxuICAgICAgICBjbGllbnQgPT4ge1xuICAgICAgICAgIHRoaXMuX2NsaWVudCA9IGNsaWVudDtcbiAgICAgICAgICByZXR1cm4gY2xpZW50LmRiKGNsaWVudC5zLm9wdGlvbnMuZGJOYW1lKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICB9XG5cbiAgX2dldEJ1Y2tldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdCgpLnRoZW4oZGF0YWJhc2UgPT4gbmV3IEdyaWRGU0J1Y2tldChkYXRhYmFzZSkpO1xuICB9XG5cbiAgLy8gRm9yIGEgZ2l2ZW4gY29uZmlnIG9iamVjdCwgZmlsZW5hbWUsIGFuZCBkYXRhLCBzdG9yZSBhIGZpbGVcbiAgLy8gUmV0dXJucyBhIHByb21pc2VcbiAgYXN5bmMgY3JlYXRlRmlsZShmaWxlbmFtZTogc3RyaW5nLCBkYXRhLCBjb250ZW50VHlwZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgYnVja2V0Lm9wZW5VcGxvYWRTdHJlYW0oZmlsZW5hbWUsIHtcbiAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLl9lbmNyeXB0aW9uS2V5ICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdih0aGlzLl9hbGdvcml0aG0sIHRoaXMuX2VuY3J5cHRpb25LZXksIGl2KTtcbiAgICAgICAgY29uc3QgZW5jcnlwdGVkUmVzdWx0ID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgY2lwaGVyLnVwZGF0ZShkYXRhKSxcbiAgICAgICAgICBjaXBoZXIuZmluYWwoKSxcbiAgICAgICAgICBpdixcbiAgICAgICAgICBjaXBoZXIuZ2V0QXV0aFRhZygpLFxuICAgICAgICBdKTtcbiAgICAgICAgYXdhaXQgc3RyZWFtLndyaXRlKGVuY3J5cHRlZFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzdHJlYW0ud3JpdGUoZGF0YSk7XG4gICAgfVxuICAgIHN0cmVhbS5lbmQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc3RyZWFtLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZG9jdW1lbnRzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZU5vdEZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGRvY3VtZW50cy5tYXAoZG9jID0+IHtcbiAgICAgICAgcmV0dXJuIGJ1Y2tldC5kZWxldGUoZG9jLl9pZCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRGaWxlRGF0YShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZShmaWxlbmFtZSk7XG4gICAgc3RyZWFtLnJlYWQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCBkYXRhID0+IHtcbiAgICAgICAgY2h1bmtzLnB1c2goZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgICBpZiAodGhpcy5fZW5jcnlwdGlvbktleSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoVGFnTG9jYXRpb24gPSBkYXRhLmxlbmd0aCAtIDE2O1xuICAgICAgICAgICAgY29uc3QgaXZMb2NhdGlvbiA9IGRhdGEubGVuZ3RoIC0gMzI7XG4gICAgICAgICAgICBjb25zdCBhdXRoVGFnID0gZGF0YS5zbGljZShhdXRoVGFnTG9jYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgaXYgPSBkYXRhLnNsaWNlKGl2TG9jYXRpb24sIGF1dGhUYWdMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWQgPSBkYXRhLnNsaWNlKDAsIGl2TG9jYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdih0aGlzLl9hbGdvcml0aG0sIHRoaXMuX2VuY3J5cHRpb25LZXksIGl2KTtcbiAgICAgICAgICAgIGRlY2lwaGVyLnNldEF1dGhUYWcoYXV0aFRhZyk7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkKSwgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGVjcnlwdGVkKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByb3RhdGVFbmNyeXB0aW9uS2V5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBmaWxlTmFtZXMgPSBbXTtcbiAgICB2YXIgb2xkS2V5RmlsZUFkYXB0ZXIgPSB7fTtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBpZiAob3B0aW9ucy5vbGRLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2xkS2V5RmlsZUFkYXB0ZXIgPSBuZXcgR3JpZEZTQnVja2V0QWRhcHRlcihcbiAgICAgICAgdGhpcy5fZGF0YWJhc2VVUkksXG4gICAgICAgIHRoaXMuX21vbmdvT3B0aW9ucyxcbiAgICAgICAgb3B0aW9ucy5vbGRLZXlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZEtleUZpbGVBZGFwdGVyID0gbmV3IEdyaWRGU0J1Y2tldEFkYXB0ZXIodGhpcy5fZGF0YWJhc2VVUkksIHRoaXMuX21vbmdvT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmZpbGVOYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlTmFtZXMgPSBvcHRpb25zLmZpbGVOYW1lcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsZU5hbWVzSXRlcmF0b3IgPSBhd2FpdCBidWNrZXQuZmluZCgpLnRvQXJyYXkoKTtcbiAgICAgIGZpbGVOYW1lc0l0ZXJhdG9yLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICAgIGZpbGVOYW1lcy5wdXNoKGZpbGUuZmlsZW5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHZhciBmaWxlTmFtZXNOb3RSb3RhdGVkID0gZmlsZU5hbWVzO1xuICAgICAgdmFyIGZpbGVOYW1lc1JvdGF0ZWQgPSBbXTtcbiAgICAgIHZhciBmaWxlTmFtZVRvdGFsID0gZmlsZU5hbWVzLmxlbmd0aDtcbiAgICAgIHZhciBmaWxlTmFtZUluZGV4ID0gMDtcbiAgICAgIGZpbGVOYW1lcy5mb3JFYWNoKGZpbGVOYW1lID0+IHtcbiAgICAgICAgb2xkS2V5RmlsZUFkYXB0ZXJcbiAgICAgICAgICAuZ2V0RmlsZURhdGEoZmlsZU5hbWUpXG4gICAgICAgICAgLnRoZW4ocGxhaW5UZXh0RGF0YSA9PiB7XG4gICAgICAgICAgICAvL092ZXJ3cml0ZSBmaWxlIHdpdGggZGF0YSBlbmNyeXB0ZWQgd2l0aCBuZXcga2V5XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbGUoZmlsZU5hbWUsIHBsYWluVGV4dERhdGEpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZXNSb3RhdGVkLnB1c2goZmlsZU5hbWUpO1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lc05vdFJvdGF0ZWQgPSBmaWxlTmFtZXNOb3RSb3RhdGVkLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gZmlsZU5hbWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZUluZGV4ID09IGZpbGVOYW1lVG90YWwpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICByb3RhdGVkOiBmaWxlTmFtZXNSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgICBub3RSb3RhdGVkOiBmaWxlTmFtZXNOb3RSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lSW5kZXggKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWVJbmRleCA9PSBmaWxlTmFtZVRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgcm90YXRlZDogZmlsZU5hbWVzUm90YXRlZCxcbiAgICAgICAgICAgICAgICAgICAgbm90Um90YXRlZDogZmlsZU5hbWVzTm90Um90YXRlZCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgZmlsZU5hbWVJbmRleCArPSAxO1xuICAgICAgICAgICAgaWYgKGZpbGVOYW1lSW5kZXggPT0gZmlsZU5hbWVUb3RhbCkge1xuICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICByb3RhdGVkOiBmaWxlTmFtZXNSb3RhdGVkLFxuICAgICAgICAgICAgICAgIG5vdFJvdGF0ZWQ6IGZpbGVOYW1lc05vdFJvdGF0ZWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSkge1xuICAgIHJldHVybiBjb25maWcubW91bnQgKyAnL2ZpbGVzLycgKyBjb25maWcuYXBwbGljYXRpb25JZCArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gIH1cblxuICBhc3luYyBnZXRNZXRhZGF0YShmaWxlbmFtZSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7IG1ldGFkYXRhIH0gPSBmaWxlc1swXTtcbiAgICByZXR1cm4geyBtZXRhZGF0YSB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlRmlsZVN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCByZXEsIHJlcywgY29udGVudFR5cGUpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGJ1Y2tldC5maW5kKHsgZmlsZW5hbWUgfSkudG9BcnJheSgpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZU5vdEZvdW5kJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gcmVxXG4gICAgICAuZ2V0KCdSYW5nZScpXG4gICAgICAucmVwbGFjZSgvYnl0ZXM9LywgJycpXG4gICAgICAuc3BsaXQoJy0nKTtcbiAgICBjb25zdCBwYXJ0aWFsc3RhcnQgPSBwYXJ0c1swXTtcbiAgICBjb25zdCBwYXJ0aWFsZW5kID0gcGFydHNbMV07XG5cbiAgICBjb25zdCBmaWxlTGVuZ3RoID0gZmlsZXNbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IGZpbGVTdGFydCA9IHBhcnNlSW50KHBhcnRpYWxzdGFydCwgMTApO1xuICAgIGNvbnN0IGZpbGVFbmQgPSBwYXJ0aWFsZW5kID8gcGFyc2VJbnQocGFydGlhbGVuZCwgMTApIDogZmlsZUxlbmd0aDtcblxuICAgIGxldCBzdGFydCA9IE1hdGgubWluKGZpbGVTdGFydCB8fCAwLCBmaWxlRW5kLCBmaWxlTGVuZ3RoKTtcbiAgICBsZXQgZW5kID0gTWF0aC5tYXgoZmlsZVN0YXJ0IHx8IDAsIGZpbGVFbmQpICsgMSB8fCBmaWxlTGVuZ3RoO1xuICAgIGlmIChpc05hTihmaWxlU3RhcnQpKSB7XG4gICAgICBzdGFydCA9IGZpbGVMZW5ndGggLSBlbmQgKyAxO1xuICAgICAgZW5kID0gZmlsZUxlbmd0aDtcbiAgICB9XG4gICAgZW5kID0gTWF0aC5taW4oZW5kLCBmaWxlTGVuZ3RoKTtcbiAgICBzdGFydCA9IE1hdGgubWF4KHN0YXJ0LCAwKTtcblxuICAgIHJlcy5zdGF0dXMoMjA2KTtcbiAgICByZXMuaGVhZGVyKCdBY2NlcHQtUmFuZ2VzJywgJ2J5dGVzJyk7XG4gICAgcmVzLmhlYWRlcignQ29udGVudC1MZW5ndGgnLCBlbmQgLSBzdGFydCk7XG4gICAgcmVzLmhlYWRlcignQ29udGVudC1SYW5nZScsICdieXRlcyAnICsgc3RhcnQgKyAnLScgKyBlbmQgKyAnLycgKyBmaWxlTGVuZ3RoKTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgY29uc3Qgc3RyZWFtID0gYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZShmaWxlbmFtZSk7XG4gICAgc3RyZWFtLnN0YXJ0KHN0YXJ0KTtcbiAgICBpZiAoZW5kKSB7XG4gICAgICBzdHJlYW0uZW5kKGVuZCk7XG4gICAgfVxuICAgIHN0cmVhbS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIHJlcy53cml0ZShjaHVuayk7XG4gICAgfSk7XG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgcmVzLnNlbmQoZS5tZXNzYWdlKTtcbiAgICB9KTtcbiAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuY2xvc2UoZmFsc2UpO1xuICB9XG5cbiAgdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSkge1xuICAgIHJldHVybiB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmlkRlNCdWNrZXRBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFBc0M7QUFYdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBSUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBRXpCLE1BQU1DLG1CQUFtQixTQUFTQywwQkFBWSxDQUFDO0VBTXBEQyxXQUFXLENBQ1RDLGdCQUFnQixHQUFHQyxpQkFBUSxDQUFDQyxlQUFlLEVBQzNDQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQ2pCQyxhQUFhLEdBQUdDLFNBQVMsRUFDekI7SUFD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
234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJyZXF1aXJlIiwiR3JpZEZTQnVja2V0QWRhcHRlciIsIkZpbGVzQWRhcHRlciIsImNvbnN0cnVjdG9yIiwibW9uZ29EYXRhYmFzZVVSSSIsImRlZmF1bHRzIiwiRGVmYXVsdE1vbmdvVVJJIiwibW9uZ29PcHRpb25zIiwiZW5jcnlwdGlvbktleSIsInVuZGVmaW5lZCIsIl9kYXRhYmFzZVVSSSIsIl9hbGdvcml0aG0iLCJfZW5jcnlwdGlvbktleSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJTdHJpbmciLCJkaWdlc3QiLCJzdWJzdHJpbmciLCJkZWZhdWx0TW9uZ29PcHRpb25zIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiX21vbmdvT3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsImtleSIsIl9jb25uZWN0IiwiX2Nvbm5lY3Rpb25Qcm9taXNlIiwiTW9uZ29DbGllbnQiLCJjb25uZWN0IiwidGhlbiIsImNsaWVudCIsIl9jbGllbnQiLCJkYiIsInMiLCJvcHRpb25zIiwiZGJOYW1lIiwiX2dldEJ1Y2tldCIsImRhdGFiYXNlIiwiR3JpZEZTQnVja2V0IiwiY3JlYXRlRmlsZSIsImZpbGVuYW1lIiwiZGF0YSIsImNvbnRlbnRUeXBlIiwiYnVja2V0Iiwic3RyZWFtIiwib3BlblVwbG9hZFN0cmVhbSIsIm1ldGFkYXRhIiwiaXYiLCJyYW5kb21CeXRlcyIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkUmVzdWx0IiwiQnVmZmVyIiwiY29uY2F0IiwiZmluYWwiLCJnZXRBdXRoVGFnIiwid3JpdGUiLCJlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVuZCIsIm9uIiwiZGVsZXRlRmlsZSIsImRvY3VtZW50cyIsImZpbmQiLCJ0b0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJhbGwiLCJtYXAiLCJkb2MiLCJkZWxldGUiLCJfaWQiLCJnZXRGaWxlRGF0YSIsIm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZSIsInJlYWQiLCJjaHVua3MiLCJwdXNoIiwiYXV0aFRhZ0xvY2F0aW9uIiwiaXZMb2NhdGlvbiIsImF1dGhUYWciLCJzbGljZSIsImVuY3J5cHRlZCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsInNldEF1dGhUYWciLCJkZWNyeXB0ZWQiLCJyb3RhdGVFbmNyeXB0aW9uS2V5IiwiZmlsZU5hbWVzIiwib2xkS2V5RmlsZUFkYXB0ZXIiLCJvbGRLZXkiLCJmaWxlTmFtZXNJdGVyYXRvciIsImZvckVhY2giLCJmaWxlIiwiZmlsZU5hbWVzTm90Um90YXRlZCIsImZpbGVOYW1lc1JvdGF0ZWQiLCJmaWxlTmFtZSIsInBsYWluVGV4dERhdGEiLCJmaWx0ZXIiLCJ2YWx1ZSIsInJvdGF0ZWQiLCJub3RSb3RhdGVkIiwiZ2V0RmlsZUxvY2F0aW9uIiwiY29uZmlnIiwibW91bnQiLCJhcHBsaWNhdGlvbklkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZ2V0TWV0YWRhdGEiLCJmaWxlcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJyZXEiLCJyZXMiLCJwYXJ0cyIsImdldCIsInJlcGxhY2UiLCJzcGxpdCIsInBhcnRpYWxzdGFydCIsInBhcnRpYWxlbmQiLCJmaWxlTGVuZ3RoIiwiZmlsZVN0YXJ0IiwicGFyc2VJbnQiLCJmaWxlRW5kIiwic3RhcnQiLCJNYXRoIiwibWluIiwibWF4IiwiaXNOYU4iLCJzdGF0dXMiLCJoZWFkZXIiLCJjaHVuayIsImUiLCJzZW5kIiwibWVzc2FnZSIsImhhbmRsZVNodXRkb3duIiwiY2xvc2UiLCJ2YWxpZGF0ZUZpbGVuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0ZpbGVzL0dyaWRGU0J1Y2tldEFkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gR3JpZEZTQnVja2V0QWRhcHRlclxuIFN0b3JlcyBmaWxlcyBpbiBNb25nbyB1c2luZyBHcmlkRlNcbiBSZXF1aXJlcyB0aGUgZGF0YWJhc2UgYWRhcHRlciB0byBiZSBiYXNlZCBvbiBtb25nb2NsaWVudFxuXG4gQGZsb3cgd2Vha1xuICovXG5cbi8vIEBmbG93LWRpc2FibGUtbmV4dFxuaW1wb3J0IHsgTW9uZ29DbGllbnQsIEdyaWRGU0J1Y2tldCwgRGIgfSBmcm9tICdtb25nb2RiJztcbmltcG9ydCB7IEZpbGVzQWRhcHRlciwgdmFsaWRhdGVGaWxlbmFtZSB9IGZyb20gJy4vRmlsZXNBZGFwdGVyJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi8uLi9kZWZhdWx0cyc7XG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuZXhwb3J0IGNsYXNzIEdyaWRGU0J1Y2tldEFkYXB0ZXIgZXh0ZW5kcyBGaWxlc0FkYXB0ZXIge1xuICBfZGF0YWJhc2VVUkk6IHN0cmluZztcbiAgX2Nvbm5lY3Rpb25Qcm9taXNlOiBQcm9taXNlPERiPjtcbiAgX21vbmdvT3B0aW9uczogT2JqZWN0O1xuICBfYWxnb3JpdGhtOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbW9uZ29EYXRhYmFzZVVSSSA9IGRlZmF1bHRzLkRlZmF1bHRNb25nb1VSSSxcbiAgICBtb25nb09wdGlvbnMgPSB7fSxcbiAgICBlbmNyeXB0aW9uS2V5ID0gdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGF0YWJhc2VVUkkgPSBtb25nb0RhdGFiYXNlVVJJO1xuICAgIHRoaXMuX2FsZ29yaXRobSA9ICdhZXMtMjU2LWdjbSc7XG4gICAgdGhpcy5fZW5jcnlwdGlvbktleSA9XG4gICAgICBlbmNyeXB0aW9uS2V5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBjcnlwdG9cbiAgICAgICAgICAuY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAgICAgICAudXBkYXRlKFN0cmluZyhlbmNyeXB0aW9uS2V5KSlcbiAgICAgICAgICAuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgICAgIC5zdWJzdHJpbmcoMCwgMzIpXG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBkZWZhdWx0TW9uZ29PcHRpb25zID0ge1xuICAgICAgdXNlTmV3VXJsUGFyc2VyOiB0cnVlLFxuICAgICAgdXNlVW5pZmllZFRvcG9sb2d5OiB0cnVlLFxuICAgIH07XG4gICAgY29uc3QgX21vbmdvT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdE1vbmdvT3B0aW9ucywgbW9uZ29PcHRpb25zKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ2VuYWJsZVNjaGVtYUhvb2tzJywgJ3NjaGVtYUNhY2hlVHRsJywgJ21heFRpbWVNUyddKSB7XG4gICAgICBkZWxldGUgX21vbmdvT3B0aW9uc1trZXldO1xuICAgIH1cbiAgICB0aGlzLl9tb25nb09wdGlvbnMgPSBfbW9uZ29PcHRpb25zO1xuICB9XG5cbiAgX2Nvbm5lY3QoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSkge1xuICAgICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBNb25nb0NsaWVudC5jb25uZWN0KHRoaXMuX2RhdGFiYXNlVVJJLCB0aGlzLl9tb25nb09wdGlvbnMpLnRoZW4oXG4gICAgICAgIGNsaWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICAgICAgICAgIHJldHVybiBjbGllbnQuZGIoY2xpZW50LnMub3B0aW9ucy5kYk5hbWUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gIH1cblxuICBfZ2V0QnVja2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0KCkudGhlbihkYXRhYmFzZSA9PiBuZXcgR3JpZEZTQnVja2V0KGRhdGFiYXNlKSk7XG4gIH1cblxuICAvLyBGb3IgYSBnaXZlbiBjb25maWcgb2JqZWN0LCBmaWxlbmFtZSwgYW5kIGRhdGEsIHN0b3JlIGEgZmlsZVxuICAvLyBSZXR1cm5zIGEgcHJvbWlzZVxuICBhc3luYyBjcmVhdGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGEsIGNvbnRlbnRUeXBlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBidWNrZXQub3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZSwge1xuICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuX2VuY3J5cHRpb25LZXkgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGl2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KTtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KHRoaXMuX2FsZ29yaXRobSwgdGhpcy5fZW5jcnlwdGlvbktleSwgaXYpO1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXN1bHQgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgICBjaXBoZXIudXBkYXRlKGRhdGEpLFxuICAgICAgICAgIGNpcGhlci5maW5hbCgpLFxuICAgICAgICAgIGl2LFxuICAgICAgICAgIGNpcGhlci5nZXRBdXRoVGFnKCksXG4gICAgICAgIF0pO1xuICAgICAgICBhd2FpdCBzdHJlYW0ud3JpdGUoZW5jcnlwdGVkUmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHN0cmVhbS53cml0ZShkYXRhKTtcbiAgICB9XG4gICAgc3RyZWFtLmVuZCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0ub24oJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBkb2N1bWVudHMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlTm90Rm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZG9jdW1lbnRzLm1hcChkb2MgPT4ge1xuICAgICAgICByZXR1cm4gYnVja2V0LmRlbGV0ZShkb2MuX2lkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVEYXRhKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBidWNrZXQub3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lKGZpbGVuYW1lKTtcbiAgICBzdHJlYW0ucmVhZCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIGRhdGEgPT4ge1xuICAgICAgICBjaHVua3MucHVzaChkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgIGlmICh0aGlzLl9lbmNyeXB0aW9uS2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUYWdMb2NhdGlvbiA9IGRhdGEubGVuZ3RoIC0gMTY7XG4gICAgICAgICAgICBjb25zdCBpdkxvY2F0aW9uID0gZGF0YS5sZW5ndGggLSAzMjtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUYWcgPSBkYXRhLnNsaWNlKGF1dGhUYWdMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBpdiA9IGRhdGEuc2xpY2UoaXZMb2NhdGlvbiwgYXV0aFRhZ0xvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZCA9IGRhdGEuc2xpY2UoMCwgaXZMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KHRoaXMuX2FsZ29yaXRobSwgdGhpcy5fZW5jcnlwdGlvbktleSwgaXYpO1xuICAgICAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyhhdXRoVGFnKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY2lwaGVyLnVwZGF0ZShlbmNyeXB0ZWQpLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkZWNyeXB0ZWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJvdGF0ZUVuY3J5cHRpb25LZXkob3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGZpbGVOYW1lcyA9IFtdO1xuICAgIGxldCBvbGRLZXlGaWxlQWRhcHRlciA9IHt9O1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGlmIChvcHRpb25zLm9sZEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvbGRLZXlGaWxlQWRhcHRlciA9IG5ldyBHcmlkRlNCdWNrZXRBZGFwdGVyKFxuICAgICAgICB0aGlzLl9kYXRhYmFzZVVSSSxcbiAgICAgICAgdGhpcy5fbW9uZ29PcHRpb25zLFxuICAgICAgICBvcHRpb25zLm9sZEtleVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkS2V5RmlsZUFkYXB0ZXIgPSBuZXcgR3JpZEZTQnVja2V0QWRhcHRlcih0aGlzLl9kYXRhYmFzZVVSSSwgdGhpcy5fbW9uZ29PcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZmlsZU5hbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVOYW1lcyA9IG9wdGlvbnMuZmlsZU5hbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWxlTmFtZXNJdGVyYXRvciA9IGF3YWl0IGJ1Y2tldC5maW5kKCkudG9BcnJheSgpO1xuICAgICAgZmlsZU5hbWVzSXRlcmF0b3IuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgZmlsZU5hbWVzLnB1c2goZmlsZS5maWxlbmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGZpbGVOYW1lc05vdFJvdGF0ZWQgPSBmaWxlTmFtZXM7XG4gICAgY29uc3QgZmlsZU5hbWVzUm90YXRlZCA9IFtdO1xuICAgIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwbGFpblRleHREYXRhID0gYXdhaXQgb2xkS2V5RmlsZUFkYXB0ZXIuZ2V0RmlsZURhdGEoZmlsZU5hbWUpO1xuICAgICAgICAvLyBPdmVyd3JpdGUgZmlsZSB3aXRoIGRhdGEgZW5jcnlwdGVkIHdpdGggbmV3IGtleVxuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUZpbGUoZmlsZU5hbWUsIHBsYWluVGV4dERhdGEpO1xuICAgICAgICBmaWxlTmFtZXNSb3RhdGVkLnB1c2goZmlsZU5hbWUpO1xuICAgICAgICBmaWxlTmFtZXNOb3RSb3RhdGVkID0gZmlsZU5hbWVzTm90Um90YXRlZC5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBmaWxlTmFtZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJvdGF0ZWQ6IGZpbGVOYW1lc1JvdGF0ZWQsIG5vdFJvdGF0ZWQ6IGZpbGVOYW1lc05vdFJvdGF0ZWQgfTtcbiAgfVxuXG4gIGdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5tb3VudCArICcvZmlsZXMvJyArIGNvbmZpZy5hcHBsaWNhdGlvbklkICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1ldGFkYXRhKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHsgbWV0YWRhdGEgfSA9IGZpbGVzWzBdO1xuICAgIHJldHVybiB7IG1ldGFkYXRhIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVGaWxlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlTm90Rm91bmQnKTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSByZXFcbiAgICAgIC5nZXQoJ1JhbmdlJylcbiAgICAgIC5yZXBsYWNlKC9ieXRlcz0vLCAnJylcbiAgICAgIC5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHBhcnRpYWxzdGFydCA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IHBhcnRpYWxlbmQgPSBwYXJ0c1sxXTtcblxuICAgIGNvbnN0IGZpbGVMZW5ndGggPSBmaWxlc1swXS5sZW5ndGg7XG4gICAgY29uc3QgZmlsZVN0YXJ0ID0gcGFyc2VJbnQocGFydGlhbHN0YXJ0LCAxMCk7XG4gICAgY29uc3QgZmlsZUVuZCA9IHBhcnRpYWxlbmQgPyBwYXJzZUludChwYXJ0aWFsZW5kLCAxMCkgOiBmaWxlTGVuZ3RoO1xuXG4gICAgbGV0IHN0YXJ0ID0gTWF0aC5taW4oZmlsZVN0YXJ0IHx8IDAsIGZpbGVFbmQsIGZpbGVMZW5ndGgpO1xuICAgIGxldCBlbmQgPSBNYXRoLm1heChmaWxlU3RhcnQgfHwgMCwgZmlsZUVuZCkgKyAxIHx8IGZpbGVMZW5ndGg7XG4gICAgaWYgKGlzTmFOKGZpbGVTdGFydCkpIHtcbiAgICAgIHN0YXJ0ID0gZmlsZUxlbmd0aCAtIGVuZCArIDE7XG4gICAgICBlbmQgPSBmaWxlTGVuZ3RoO1xuICAgIH1cbiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIGZpbGVMZW5ndGgpO1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIDApO1xuXG4gICAgcmVzLnN0YXR1cygyMDYpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2VwdC1SYW5nZXMnLCAnYnl0ZXMnKTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGVuZCAtIHN0YXJ0KTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LVJhbmdlJywgJ2J5dGVzICcgKyBzdGFydCArICctJyArIGVuZCArICcvJyArIGZpbGVMZW5ndGgpO1xuICAgIHJlcy5oZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCBzdHJlYW0gPSBidWNrZXQub3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lKGZpbGVuYW1lKTtcbiAgICBzdHJlYW0uc3RhcnQoc3RhcnQpO1xuICAgIGlmIChlbmQpIHtcbiAgICAgIHN0cmVhbS5lbmQoZW5kKTtcbiAgICB9XG4gICAgc3RyZWFtLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgcmVzLndyaXRlKGNodW5rKTtcbiAgICB9KTtcbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgZSA9PiB7XG4gICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICByZXMuc2VuZChlLm1lc3NhZ2UpO1xuICAgIH0pO1xuICAgIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2h1dGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5jbG9zZShmYWxzZSk7XG4gIH1cblxuICB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyaWRGU0J1Y2tldEFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUFzQztBQVh0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFJQSxNQUFNQSxNQUFNLEdBQUdDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFFekIsTUFBTUMsbUJBQW1CLFNBQVNDLDBCQUFZLENBQUM7RUFNcERDLFdBQVcsQ0FDVEMsZ0JBQWdCLEdBQUdDLGlCQUFRLENBQUNDLGVBQWUsRUFDM0NDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFDakJDLGFBQWEsR0FBR0MsU0FBUyxFQUN6QjtJQUNBLEtBQUssRUFBRTtJQUNQLElBQUksQ0FBQ0MsWUFBWSxHQUFHTixn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