parse-server 4.10.9 → 4.10.12

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.
@@ -20,22 +20,23 @@ const crypto = require('crypto');
20
20
 
21
21
  const https = require('https');
22
22
 
23
- const url = require('url');
23
+ const {
24
+ pki
25
+ } = require('node-forge');
24
26
 
27
+ const ca = {
28
+ cert: null,
29
+ url: null
30
+ };
25
31
  const cache = {}; // (publicKey -> cert) cache
26
32
 
27
33
  function verifyPublicKeyUrl(publicKeyUrl) {
28
- const parsedUrl = url.parse(publicKeyUrl);
29
-
30
- if (parsedUrl.protocol !== 'https:') {
34
+ try {
35
+ const regex = /^https:\/\/(?:[-_A-Za-z0-9]+\.){0,}apple\.com\/.*\.cer$/;
36
+ return regex.test(publicKeyUrl);
37
+ } catch (error) {
31
38
  return false;
32
39
  }
33
-
34
- const hostnameParts = parsedUrl.hostname.split('.');
35
- const length = hostnameParts.length;
36
- const domainParts = hostnameParts.slice(length - 2, length);
37
- const domain = domainParts.join('.');
38
- return domain === 'apple.com';
39
40
  }
40
41
 
41
42
  function convertX509CertToPEM(X509Cert) {
@@ -46,7 +47,7 @@ function convertX509CertToPEM(X509Cert) {
46
47
  return pemPreFix + certBody + pemPostFix;
47
48
  }
48
49
 
49
- function getAppleCertificate(publicKeyUrl) {
50
+ async function getAppleCertificate(publicKeyUrl) {
50
51
  if (!verifyPublicKeyUrl(publicKeyUrl)) {
51
52
  throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `Apple Game Center - invalid publicKeyUrl: ${publicKeyUrl}`);
52
53
  }
@@ -55,28 +56,66 @@ function getAppleCertificate(publicKeyUrl) {
55
56
  return cache[publicKeyUrl];
56
57
  }
57
58
 
59
+ const url = new URL(publicKeyUrl);
60
+ const headOptions = {
61
+ hostname: url.hostname,
62
+ path: url.pathname,
63
+ method: 'HEAD'
64
+ };
65
+ const cert_headers = await new Promise((resolve, reject) => https.get(headOptions, res => resolve(res.headers)).on('error', reject));
66
+ const validContentTypes = ['application/x-x509-ca-cert', 'application/pkix-cert'];
67
+
68
+ if (!validContentTypes.includes(cert_headers['content-type']) || cert_headers['content-length'] == null || cert_headers['content-length'] > 10000) {
69
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `Apple Game Center - invalid publicKeyUrl: ${publicKeyUrl}`);
70
+ }
71
+
72
+ const {
73
+ certificate,
74
+ headers
75
+ } = await getCertificate(publicKeyUrl);
76
+
77
+ if (headers['cache-control']) {
78
+ const expire = headers['cache-control'].match(/max-age=([0-9]+)/);
79
+
80
+ if (expire) {
81
+ cache[publicKeyUrl] = certificate; // we'll expire the cache entry later, as per max-age
82
+
83
+ setTimeout(() => {
84
+ delete cache[publicKeyUrl];
85
+ }, parseInt(expire[1], 10) * 1000);
86
+ }
87
+ }
88
+
89
+ return verifyPublicKeyIssuer(certificate, publicKeyUrl);
90
+ }
91
+
92
+ function getCertificate(url, buffer) {
58
93
  return new Promise((resolve, reject) => {
59
- https.get(publicKeyUrl, res => {
60
- let data = '';
94
+ https.get(url, res => {
95
+ const data = [];
61
96
  res.on('data', chunk => {
62
- data += chunk.toString('base64');
97
+ data.push(chunk);
63
98
  });
64
99
  res.on('end', () => {
65
- const cert = convertX509CertToPEM(data);
66
-
67
- if (res.headers['cache-control']) {
68
- var expire = res.headers['cache-control'].match(/max-age=([0-9]+)/);
100
+ if (buffer) {
101
+ resolve({
102
+ certificate: Buffer.concat(data),
103
+ headers: res.headers
104
+ });
105
+ return;
106
+ }
69
107
 
70
- if (expire) {
71
- cache[publicKeyUrl] = cert; // we'll expire the cache entry later, as per max-age
108
+ let cert = '';
72
109
 
73
- setTimeout(() => {
74
- delete cache[publicKeyUrl];
75
- }, parseInt(expire[1], 10) * 1000);
76
- }
110
+ for (const chunk of data) {
111
+ cert += chunk.toString('base64');
77
112
  }
78
113
 
79
- resolve(cert);
114
+ const certificate = convertX509CertToPEM(cert);
115
+ resolve({
116
+ certificate,
117
+ headers: res.headers
118
+ });
80
119
  });
81
120
  }).on('error', reject);
82
121
  });
@@ -101,6 +140,24 @@ function verifySignature(publicKey, authData) {
101
140
  if (!verifier.verify(publicKey, authData.signature, 'base64')) {
102
141
  throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Apple Game Center - invalid signature');
103
142
  }
143
+ }
144
+
145
+ function verifyPublicKeyIssuer(cert, publicKeyUrl) {
146
+ const publicKeyCert = pki.certificateFromPem(cert);
147
+
148
+ if (!ca.cert) {
149
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Apple Game Center auth adapter parameter `rootCertificateURL` is invalid.');
150
+ }
151
+
152
+ try {
153
+ if (!ca.cert.verify(publicKeyCert)) {
154
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `Apple Game Center - invalid publicKeyUrl: ${publicKeyUrl}`);
155
+ }
156
+ } catch (e) {
157
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `Apple Game Center - invalid publicKeyUrl: ${publicKeyUrl}`);
158
+ }
159
+
160
+ return cert;
104
161
  } // Returns a promise that fulfills if this user id is valid.
105
162
 
106
163
 
@@ -115,12 +172,31 @@ async function validateAuthData(authData) {
115
172
  } // Returns a promise that fulfills if this app id is valid.
116
173
 
117
174
 
118
- function validateAppId() {
119
- return Promise.resolve();
175
+ async function validateAppId(appIds, authData, options = {}) {
176
+ if (!options.rootCertificateUrl) {
177
+ options.rootCertificateUrl = 'https://cacerts.digicert.com/DigiCertTrustedG4CodeSigningRSA4096SHA3842021CA1.crt.pem';
178
+ }
179
+
180
+ if (ca.url === options.rootCertificateUrl) {
181
+ return;
182
+ }
183
+
184
+ const {
185
+ certificate,
186
+ headers
187
+ } = await getCertificate(options.rootCertificateUrl, true);
188
+
189
+ if (headers['content-type'] !== 'application/x-pem-file' || headers['content-length'] == null || headers['content-length'] > 10000) {
190
+ throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Apple Game Center auth adapter parameter `rootCertificateURL` is invalid.');
191
+ }
192
+
193
+ ca.cert = pki.certificateFromPem(certificate);
194
+ ca.url = options.rootCertificateUrl;
120
195
  }
121
196
 
122
197
  module.exports = {
123
198
  validateAppId,
124
- validateAuthData
199
+ validateAuthData,
200
+ cache
125
201
  };
126
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2djZW50ZXIuanMiXSwibmFtZXMiOlsiUGFyc2UiLCJyZXF1aXJlIiwiY3J5cHRvIiwiaHR0cHMiLCJ1cmwiLCJjYWNoZSIsInZlcmlmeVB1YmxpY0tleVVybCIsInB1YmxpY0tleVVybCIsInBhcnNlZFVybCIsInBhcnNlIiwicHJvdG9jb2wiLCJob3N0bmFtZVBhcnRzIiwiaG9zdG5hbWUiLCJzcGxpdCIsImxlbmd0aCIsImRvbWFpblBhcnRzIiwic2xpY2UiLCJkb21haW4iLCJqb2luIiwiY29udmVydFg1MDlDZXJ0VG9QRU0iLCJYNTA5Q2VydCIsInBlbVByZUZpeCIsInBlbVBvc3RGaXgiLCJiYXNlNjQiLCJjZXJ0Qm9keSIsIm1hdGNoIiwiUmVnRXhwIiwiZ2V0QXBwbGVDZXJ0aWZpY2F0ZSIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJ0b1N0cmluZyIsImNlcnQiLCJoZWFkZXJzIiwiZXhwaXJlIiwic2V0VGltZW91dCIsInBhcnNlSW50IiwiY29udmVydFRpbWVzdGFtcFRvQmlnRW5kaWFuIiwidGltZXN0YW1wIiwiYnVmZmVyIiwiQnVmZmVyIiwiYWxsb2MiLCJoaWdoIiwibG93Iiwid3JpdGVVSW50MzJCRSIsInZlcmlmeVNpZ25hdHVyZSIsInB1YmxpY0tleSIsImF1dGhEYXRhIiwidmVyaWZpZXIiLCJjcmVhdGVWZXJpZnkiLCJ1cGRhdGUiLCJwbGF5ZXJJZCIsImJ1bmRsZUlkIiwic2FsdCIsInZlcmlmeSIsInNpZ25hdHVyZSIsInZhbGlkYXRlQXV0aERhdGEiLCJpZCIsInZhbGlkYXRlQXBwSWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7Ozs7QUFhQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBWUMsT0FBTyxDQUFDLFlBQUQs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QWdCSCxRQUFRLENBQUNNLElBQXpCLEVBQStCLFFBQS9COztBQUVBLE1BQUksQ0FBQ0wsUUFBUSxDQUFDTSxNQUFULENBQWdCUixTQUFoQixFQUEyQkMsUUFBUSxDQUFDUSxTQUFwQyxFQUErQyxRQUEvQyxDQUFMLEVBQStEO0FBQzdELFVBQU0sSUFBSTlELEtBQUssQ0FBQzRCLEtBQVYsQ0FBZ0I1QixLQUFLLENBQUM0QixLQUFOLENBQVlDLGdCQUE1QixFQUE4Qyx1Q0FBOUMsQ0FBTjtBQUNEO0FBQ0YsQyxDQUVEOzs7QUFDQSxlQUFla0MsZ0JBQWYsQ0FBZ0NULFFBQWhDLEVBQTBDO0FBQ3hDLE1BQUksQ0FBQ0EsUUFBUSxDQUFDVSxFQUFkLEVBQWtCO0FBQ2hCLFVBQU0sSUFBSWhFLEtBQUssQ0FBQzRCLEtBQVYsQ0FBZ0I1QixLQUFLLENBQUM0QixLQUFOLENBQVlDLGdCQUE1QixFQUE4Qyx5Q0FBOUMsQ0FBTjtBQUNEOztBQUNEeUIsRUFBQUEsUUFBUSxDQUFDSSxRQUFULEdBQW9CSixRQUFRLENBQUNVLEVBQTdCO0FBQ0EsUUFBTVgsU0FBUyxHQUFHLE1BQU0xQixtQkFBbUIsQ0FBQzJCLFFBQVEsQ0FBQy9DLFlBQVYsQ0FBM0M7QUFDQSxTQUFPNkMsZUFBZSxDQUFDQyxTQUFELEVBQVlDLFFBQVosQ0FBdEI7QUFDRCxDLENBRUQ7OztBQUNBLFNBQVNXLGFBQVQsR0FBeUI7QUFDdkIsU0FBT25DLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0Q7O0FBRURtQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZkYsRUFBQUEsYUFEZTtBQUVmRixFQUFBQTtBQUZlLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLyogQXBwbGUgR2FtZSBDZW50ZXIgQXV0aFxuaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vZ2FtZWtpdC9na2xvY2FscGxheWVyLzE1MTU0MDctZ2VuZXJhdGVpZGVudGl0eXZlcmlmaWNhdGlvbnNpZ24jZGlzY3Vzc2lvblxuXG5jb25zdCBhdXRoRGF0YSA9IHtcbiAgcHVibGljS2V5VXJsOiAnaHR0cHM6Ly92YWxpZC5hcHBsZS5jb20vcHVibGljL3RpbWVvdXQuY2VyJyxcbiAgdGltZXN0YW1wOiAxNDYwOTgxNDIxMzAzLFxuICBzaWduYXR1cmU6ICdQb0R3ZjM5RENONDY0QjQ5akpDVTBkOVkwSicsXG4gIHNhbHQ6ICdzYWx0U1Q9PScsXG4gIGJ1bmRsZUlkOiAnY29tLnZhbGlkLmFwcCdcbiAgaWQ6ICdwbGF5ZXJJZCcsXG59O1xuKi9cblxuY29uc3QgeyBQYXJzZSB9ID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5jb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5jb25zdCB1cmwgPSByZXF1aXJlKCd1cmwnKTtcblxuY29uc3QgY2FjaGUgPSB7fTsgLy8gKHB1YmxpY0tleSAtPiBjZXJ0KSBjYWNoZVxuXG5mdW5jdGlvbiB2ZXJpZnlQdWJsaWNLZXlVcmwocHVibGljS2V5VXJsKSB7XG4gIGNvbnN0IHBhcnNlZFVybCA9IHVybC5wYXJzZShwdWJsaWNLZXlVcmwpO1xuICBpZiAocGFyc2VkVXJsLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBob3N0bmFtZVBhcnRzID0gcGFyc2VkVXJsLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gIGNvbnN0IGxlbmd0aCA9IGhvc3RuYW1lUGFydHMubGVuZ3RoO1xuICBjb25zdCBkb21haW5QYXJ0cyA9IGhvc3RuYW1lUGFydHMuc2xpY2UobGVuZ3RoIC0gMiwgbGVuZ3RoKTtcbiAgY29uc3QgZG9tYWluID0gZG9tYWluUGFydHMuam9pbignLicpO1xuICByZXR1cm4gZG9tYWluID09PSAnYXBwbGUuY29tJztcbn1cblxuZnVuY3Rpb24gY29udmVydFg1MDlDZXJ0VG9QRU0oWDUwOUNlcnQpIHtcbiAgY29uc3QgcGVtUHJlRml4ID0gJy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxcbic7XG4gIGNvbnN0IHBlbVBvc3RGaXggPSAnLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLSc7XG5cbiAgY29uc3QgYmFzZTY0ID0gWDUwOUNlcnQ7XG4gIGNvbnN0IGNlcnRCb2R5ID0gYmFzZTY0Lm1hdGNoKG5ldyBSZWdFeHAoJy57MCw2NH0nLCAnZycpKS5qb2luKCdcXG4nKTtcblxuICByZXR1cm4gcGVtUHJlRml4ICsgY2VydEJvZHkgKyBwZW1Qb3N0Rml4O1xufVxuXG5mdW5jdGlvbiBnZXRBcHBsZUNlcnRpZmljYXRlKHB1YmxpY0tleVVybCkge1xuICBpZiAoIXZlcmlmeVB1YmxpY0tleVVybChwdWJsaWNLZXlVcmwpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBBcHBsZSBHYW1lIENlbnRlciAtIGludmFsaWQgcHVibGljS2V5VXJsOiAke3B1YmxpY0tleVVybH1gXG4gICAgKTtcbiAgfVxuICBpZiAoY2FjaGVbcHVibGljS2V5VXJsXSkge1xuICAgIHJldHVybiBjYWNoZVtwdWJsaWNLZXlVcmxdO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaHR0cHNcbiAgICAgIC5nZXQocHVibGljS2V5VXJsLCByZXMgPT4ge1xuICAgICAgICBsZXQgZGF0YSA9ICcnO1xuICAgICAgICByZXMub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICAgICAgZGF0YSArPSBjaHVuay50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjZXJ0ID0gY29udmVydFg1MDlDZXJ0VG9QRU0oZGF0YSk7XG4gICAgICAgICAgaWYgKHJlcy5oZWFkZXJzWydjYWNoZS1jb250cm9sJ10pIHtcbiAgICAgICAgICAgIHZhciBleHBpcmUgPSByZXMuaGVhZGVyc1snY2FjaGUtY29udHJvbCddLm1hdGNoKC9tYXgtYWdlPShbMC05XSspLyk7XG4gICAgICAgICAgICBpZiAoZXhwaXJlKSB7XG4gICAgICAgICAgICAgIGNhY2hlW3B1YmxpY0tleVVybF0gPSBjZXJ0O1xuICAgICAgICAgICAgICAvLyB3ZSdsbCBleHBpcmUgdGhlIGNhY2hlIGVudHJ5IGxhdGVyLCBhcyBwZXIgbWF4LWFnZVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbcHVibGljS2V5VXJsXTtcbiAgICAgICAgICAgICAgfSwgcGFyc2VJbnQoZXhwaXJlWzFdLCAxMCkgKiAxMDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShjZXJ0KTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VGltZXN0YW1wVG9CaWdFbmRpYW4odGltZXN0YW1wKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg4KTtcblxuICBjb25zdCBoaWdoID0gfn4odGltZXN0YW1wIC8gMHhmZmZmZmZmZik7XG4gIGNvbnN0IGxvdyA9IHRpbWVzdGFtcCAlICgweGZmZmZmZmZmICsgMHgxKTtcblxuICBidWZmZXIud3JpdGVVSW50MzJCRShwYXJzZUludChoaWdoLCAxMCksIDApO1xuICBidWZmZXIud3JpdGVVSW50MzJCRShwYXJzZUludChsb3csIDEwKSwgNCk7XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlKHB1YmxpY0tleSwgYXV0aERhdGEpIHtcbiAgY29uc3QgdmVyaWZpZXIgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KCdzaGEyNTYnKTtcbiAgdmVyaWZpZXIudXBkYXRlKGF1dGhEYXRhLnBsYXllcklkLCAndXRmOCcpO1xuICB2ZXJpZmllci51cGRhdGUoYXV0aERhdGEuYnVuZGxlSWQsICd1dGY4Jyk7XG4gIHZlcmlmaWVyLnVwZGF0ZShjb252ZXJ0VGltZXN0YW1wVG9CaWdFbmRpYW4oYXV0aERhdGEudGltZXN0YW1wKSk7XG4gIHZlcmlmaWVyLnVwZGF0ZShhdXRoRGF0YS5zYWx0LCAnYmFzZTY0Jyk7XG5cbiAgaWYgKCF2ZXJpZmllci52ZXJpZnkocHVibGljS2V5LCBhdXRoRGF0YS5zaWduYXR1cmUsICdiYXNlNjQnKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnQXBwbGUgR2FtZSBDZW50ZXIgLSBpbnZhbGlkIHNpZ25hdHVyZScpO1xuICB9XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSkge1xuICBpZiAoIWF1dGhEYXRhLmlkKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdBcHBsZSBHYW1lIENlbnRlciAtIGF1dGhEYXRhIGlkIG1pc3NpbmcnKTtcbiAgfVxuICBhdXRoRGF0YS5wbGF5ZXJJZCA9IGF1dGhEYXRhLmlkO1xuICBjb25zdCBwdWJsaWNLZXkgPSBhd2FpdCBnZXRBcHBsZUNlcnRpZmljYXRlKGF1dGhEYXRhLnB1YmxpY0tleVVybCk7XG4gIHJldHVybiB2ZXJpZnlTaWduYXR1cmUocHVibGljS2V5LCBhdXRoRGF0YSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdfQ==
202
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2djZW50ZXIuanMiXSwibmFtZXMiOlsiUGFyc2UiLCJyZXF1aXJlIiwiY3J5cHRvIiwiaHR0cHMiLCJwa2kiLCJjYSIsImNlcnQiLCJ1cmwiLCJjYWNoZSIsInZlcmlmeVB1YmxpY0tleVVybCIsInB1YmxpY0tleVVybCIsInJlZ2V4IiwidGVzdCIsImVycm9yIiwiY29udmVydFg1MDlDZXJ0VG9QRU0iLCJYNTA5Q2VydCIsInBlbVByZUZpeCIsInBlbVBvc3RGaXgiLCJiYXNlNjQiLCJjZXJ0Qm9keSIsIm1hdGNoIiwiUmVnRXhwIiwiam9pbiIsImdldEFwcGxlQ2VydGlmaWNhdGUiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJVUkwiLCJoZWFkT3B0aW9ucyIsImhvc3RuYW1lIiwicGF0aCIsInBhdGhuYW1lIiwibWV0aG9kIiwiY2VydF9oZWFkZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJnZXQiLCJyZXMiLCJoZWFkZXJzIiwib24iLCJ2YWxpZENvbnRlbnRUeXBlcyIsImluY2x1ZGVzIiwiY2VydGlmaWNhdGUiLCJnZXRDZXJ0aWZpY2F0ZSIsImV4cGlyZSIsInNldFRpbWVvdXQiLCJwYXJzZUludCIsInZlcmlmeVB1YmxpY0tleUlzc3VlciIsImJ1ZmZlciIsImRhdGEiLCJjaHVuayIsInB1c2giLCJCdWZmZXIiLCJjb25jYXQiLCJ0b1N0cmluZyIsImNvbnZlcnRUaW1lc3RhbXBUb0JpZ0VuZGlhbiIsInRpbWVzdGFtcCIsImFsbG9jIiwiaGlnaCIsImxvdyIsIndyaXRlVUludDMyQkUiLCJ2ZXJpZnlTaWduYXR1cmUiLCJwdWJsaWNLZXkiLCJhdXRoRGF0YSIsInZlcmlmaWVyIiwiY3JlYXRlVmVyaWZ5IiwidXBkYXRlIiwicGxheWVySWQiLCJidW5kbGVJZCIsInNhbHQiLCJ2ZXJpZnkiLCJzaWduYXR1cmUiLCJwdWJsaWNLZXlDZXJ0IiwiY2VydGlmaWNhdGVGcm9tUGVtIiwiZSIsInZhbGlkYXRlQXV0aERhdGEiLCJpZCIsInZhbGlkYXRlQXBwSWQiLCJhcHBJZHMiLCJvcHRpb25zIiwicm9vdENlcnRpZmljYXRlVXJsIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7Ozs7O0FBYUEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQVlDLE9BQU8sQ0FBQyxZQUFELENBQXpCOztBQUNBLE1BQU1DLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUUsS0FBSyxHQUFHRixPQUFPLENBQUMsT0FBRCxDQUFyQjs7QUFDQSxNQUFNO0FBQUVHLEVBQUFBO0FBQUYsSUFBVUgsT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBQ0EsTUFBTUksRUFBRSxHQUFHO0FBQUVDLEVBQUFBLElBQUksRUFBRSxJQUFSO0FBQWNDLEVBQUFBLEdBQUcsRUFBRTtBQUFuQixDQUFYO0FBQ0EsTUFBTUMsS0FBSyxHQUFHLEVBQWQsQyxDQUFrQjs7QUFFbEIsU0FBU0Msa0JBQVQsQ0FBNEJDLFlBQTVCLEVBQTBDO0FBQ3hDLE1BQUk7QUFDRixVQUFNQyxLQUFLLEdBQUcseURBQWQ7QUFDQSxXQUFPQSxLQUFLLENBQUNDLElBQU4sQ0FBV0YsWUFBWCxDQUFQO0FBQ0QsR0FIRCxDQUdFLE9BQU9HLEtBQVAsRUFBYztBQUNkLFdBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU0Msb0JBQVQsQ0FBOEJDLFFBQTlCLEVBQXdDO0FBQ3RDLFFBQU1DLFNBQVMsR0FBRywrQkFBbEI7QUFDQSxRQUFNQyxVQUFVLEdBQUcsMkJBQW5CO0FBRUEsUUFBTUMsTUFBTSxHQUFHSCxRQUFmO0FBQ0EsUUFBTUksUUFBUSxHQUFHRCxNQUFNLENBQUNFLEtBQVAsQ0FBYSxJQUFJQyxNQUFKLENBQVcsU0FBWCxFQUFzQixHQUF0QixDQUFiLEVBQXlDQyxJQUF6QyxDQUE4QyxJQUE5QyxDQUFqQjtBQUVBLFNBQU9OLFNBQVMsR0FBR0csUUFBWixHQUF1QkYsVUFBOUI7QUFDRDs7QUFFRCxlQUFlTSxtQkFBZixDQUFtQ2IsWUFBbkMsRUFBaUQ7QUFDL0MsTUFBSSxDQUFDRCxrQkFBa0IsQ0FBQ0MsWUFBRCxDQUF2QixFQUF1QztBQUNyQyxVQUFNLElBQUlWLEtBQUssQ0FBQ3dCLEtBQVYsQ0FDSnhCLEtBQUssQ0FBQ3dCLEtBQU4sQ0FBWUMsZ0JBRFIsRUFFSCw2Q0FBNENmLFlBQWEsRUFGdEQsQ0FBTjtBQUlEOztBQUNELE1BQUlGLEtBQUssQ0FBQ0UsWUFBRCxDQUFULEVBQXlCO0FBQ3ZCLFdBQU9GLEtBQUssQ0FBQ0UsWUFBRCxDQUFaO0FBQ0Q7O0FBQ0QsUUFBTUgsR0FBRyxHQUFHLElBQUltQixHQUFKLENBQVFoQixZQUFSLENBQVo7QUFDQSxRQUFNaUIsV0FBVyxHQUFHO0FBQ2xCQyxJQUFBQSxRQUFRLEVBQUVyQixHQUFHLENBQUNxQixRQURJO0FBRWxCQyxJQUFBQSxJQUFJLEVBQUV0QixHQUFHLENBQUN1QixRQUZRO0FBR2xCQyxJQUFBQSxNQUFNLEVBQUU7QUFIVSxHQUFwQjtBQUtBLFFBQU1DLFlBQVksR0FBRyxNQUFNLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FDckNoQyxLQUFLLENBQUNpQyxHQUFOLENBQVVULFdBQVYsRUFBdUJVLEdBQUcsSUFBSUgsT0FBTyxDQUFDRyxHQUFHLENBQUNDLE9BQUwsQ0FBckMsRUFBb0RDLEVBQXBELENBQXVELE9BQXZELEVBQWdFSixNQUFoRSxDQUR5QixDQUEzQjtBQUdBLFFBQU1LLGlCQUFpQixHQUFHLENBQUMsNEJBQUQsRUFBK0IsdUJBQS9CLENBQTFCOztBQUNBLE1BQ0UsQ0FBQ0EsaUJBQWlCLENBQUNDLFFBQWxCLENBQTJCVCxZQUFZLENBQUMsY0FBRCxDQUF2QyxDQUFELElBQ0FBLFlBQVksQ0FBQyxnQkFBRCxDQUFaLElBQWtDLElBRGxDLElBRUFBLFlBQVksQ0FBQyxnQkFBRCxDQUFaLEdBQWlDLEtBSG5DLEVBSUU7QUFDQSxVQUFNLElBQUloQyxLQUFLLENBQUN3QixLQUFWLENBQ0p4QixLQUFLLENBQUN3QixLQUFOLENBQVlDLGdCQURSLEVBRUgsNkNBQTRDZixZQUFhLEVBRnRELENBQU47QUFJRDs7QUFDRCxRQUFNO0FBQUVnQyxJQUFBQSxXQUFGO0FBQWVKLElBQUFBO0FBQWYsTUFBMkIsTUFBTUssY0FBYyxDQUFDakMsWUFBRCxDQUFyRDs7QUFDQSxNQUFJNEIsT0FBTyxDQUFDLGVBQUQsQ0FBWCxFQUE4QjtBQUM1QixVQUFNTSxNQUFNLEdBQUdOLE9BQU8sQ0FBQyxlQUFELENBQVAsQ0FBeUJsQixLQUF6QixDQUErQixrQkFBL0IsQ0FBZjs7QUFDQSxRQUFJd0IsTUFBSixFQUFZO0FBQ1ZwQyxNQUFBQSxLQUFLLENBQUNFLFlBQUQsQ0FBTCxHQUFzQmdDLFdBQXRCLENBRFUsQ0FFVjs7QUFDQUcsTUFBQUEsVUFBVSxDQUFDLE1BQU07QUFDZixlQUFPckMsS0FBSyxDQUFDRSxZQUFELENBQVo7QUFDRCxPQUZTLEVBRVBvQyxRQUFRLENBQUNGLE1BQU0sQ0FBQyxDQUFELENBQVAsRUFBWSxFQUFaLENBQVIsR0FBMEIsSUFGbkIsQ0FBVjtBQUdEO0FBQ0Y7O0FBQ0QsU0FBT0cscUJBQXFCLENBQUNMLFdBQUQsRUFBY2hDLFlBQWQsQ0FBNUI7QUFDRDs7QUFFRCxTQUFTaUMsY0FBVCxDQUF3QnBDLEdBQXhCLEVBQTZCeUMsTUFBN0IsRUFBcUM7QUFDbkMsU0FBTyxJQUFJZixPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDaEMsSUFBQUEsS0FBSyxDQUNGaUMsR0FESCxDQUNPN0IsR0FEUCxFQUNZOEIsR0FBRyxJQUFJO0FBQ2YsWUFBTVksSUFBSSxHQUFHLEVBQWI7QUFDQVosTUFBQUEsR0FBRyxDQUFDRSxFQUFKLENBQU8sTUFBUCxFQUFlVyxLQUFLLElBQUk7QUFDdEJELFFBQUFBLElBQUksQ0FBQ0UsSUFBTCxDQUFVRCxLQUFWO0FBQ0QsT0FGRDtBQUdBYixNQUFBQSxHQUFHLENBQUNFLEVBQUosQ0FBTyxLQUFQLEVBQWMsTUFBTTtBQUNsQixZQUFJUyxNQUFKLEVBQVk7QUFDVmQsVUFBQUEsT0FBTyxDQUFDO0FBQUVRLFlBQUFBLFdBQVcsRUFBRVUsTUFBTSxDQUFDQyxNQUFQLENBQWNKLElBQWQsQ0FBZjtBQUFvQ1gsWUFBQUEsT0FBTyxFQUFFRCxHQUFHLENBQUNDO0FBQWpELFdBQUQsQ0FBUDtBQUNBO0FBQ0Q7O0FBQ0QsWUFBSWhDLElBQUksR0FBRyxFQUFYOztBQUNBLGFBQUssTUFBTTRDLEtBQVgsSUFBb0JELElBQXBCLEVBQTBCO0FBQ3hCM0MsVUFBQUEsSUFBSSxJQUFJNEMsS0FBSyxDQUFDSSxRQUFOLENBQWUsUUFBZixDQUFSO0FBQ0Q7O0FBQ0QsY0FBTVosV0FBVyxHQUFHNUIsb0JBQW9CLENBQUNSLElBQUQsQ0FBeEM7QUFDQTRCLFFBQUFBLE9BQU8sQ0FBQztBQUFFUSxVQUFBQSxXQUFGO0FBQWVKLFVBQUFBLE9BQU8sRUFBRUQsR0FBRyxDQUFDQztBQUE1QixTQUFELENBQVA7QUFDRCxPQVhEO0FBWUQsS0FsQkgsRUFtQkdDLEVBbkJILENBbUJNLE9BbkJOLEVBbUJlSixNQW5CZjtBQW9CRCxHQXJCTSxDQUFQO0FBc0JEOztBQUVELFNBQVNvQiwyQkFBVCxDQUFxQ0MsU0FBckMsRUFBZ0Q7QUFDOUMsUUFBTVIsTUFBTSxHQUFHSSxNQUFNLENBQUNLLEtBQVAsQ0FBYSxDQUFiLENBQWY7QUFFQSxRQUFNQyxJQUFJLEdBQUcsQ0FBQyxFQUFFRixTQUFTLEdBQUcsVUFBZCxDQUFkO0FBQ0EsUUFBTUcsR0FBRyxHQUFHSCxTQUFTLElBQUksYUFBYSxHQUFqQixDQUFyQjtBQUVBUixFQUFBQSxNQUFNLENBQUNZLGFBQVAsQ0FBcUJkLFFBQVEsQ0FBQ1ksSUFBRCxFQUFPLEVBQVAsQ0FBN0IsRUFBeUMsQ0FBekM7QUFDQVYsRUFBQUEsTUFBTSxDQUFDWSxhQUFQLENBQXFCZCxRQUFRLENBQUNhLEdBQUQsRUFBTSxFQUFOLENBQTdCLEVBQXdDLENBQXhDO0FBRUEsU0FBT1gsTUFBUDtBQUNEOztBQUVELFNBQVNhLGVBQVQsQ0FBeUJDLFNBQXpCLEVBQW9DQyxRQUFwQyxFQUE4QztBQUM1QyxRQUFNQyxRQUFRLEdBQUc5RCxNQUFNLENBQUMrRCxZQUFQLENBQW9CLFFBQXBCLENBQWpCO0FBQ0FELEVBQUFBLFFBQVEsQ0FBQ0UsTUFBVCxDQUFnQkgsUUFBUSxDQUFDSSxRQUF6QixFQUFtQyxNQUFuQztBQUNBSCxFQUFBQSxRQUFRLENBQUNFLE1BQVQsQ0FBZ0JILFFBQVEsQ0FBQ0ssUUFBekIsRUFBbUMsTUFBbkM7QUFDQUosRUFBQUEsUUFBUSxDQUFDRSxNQUFULENBQWdCWCwyQkFBMkIsQ0FBQ1EsUUFBUSxDQUFDUCxTQUFWLENBQTNDO0FBQ0FRLEVBQUFBLFFBQVEsQ0FBQ0UsTUFBVCxDQUFnQkgsUUFBUSxDQUFDTSxJQUF6QixFQUErQixRQUEvQjs7QUFFQSxNQUFJLENBQUNMLFFBQVEsQ0FBQ00sTUFBVCxDQUFnQlIsU0FBaEIsRUFBMkJDLFFBQVEsQ0FBQ1EsU0FBcEMsRUFBK0MsUUFBL0MsQ0FBTCxFQUErRDtBQUM3RCxVQUFNLElBQUl2RSxLQUFLLENBQUN3QixLQUFWLENBQWdCeEIsS0FBSyxDQUFDd0IsS0FBTixDQUFZQyxnQkFBNUIsRUFBOEMsdUNBQTlDLENBQU47QUFDRDtBQUNGOztBQUVELFNBQVNzQixxQkFBVCxDQUErQnpDLElBQS9CLEVBQXFDSSxZQUFyQyxFQUFtRDtBQUNqRCxRQUFNOEQsYUFBYSxHQUFHcEUsR0FBRyxDQUFDcUUsa0JBQUosQ0FBdUJuRSxJQUF2QixDQUF0Qjs7QUFDQSxNQUFJLENBQUNELEVBQUUsQ0FBQ0MsSUFBUixFQUFjO0FBQ1osVUFBTSxJQUFJTixLQUFLLENBQUN3QixLQUFWLENBQ0p4QixLQUFLLENBQUN3QixLQUFOLENBQVlDLGdCQURSLEVBRUosMkVBRkksQ0FBTjtBQUlEOztBQUNELE1BQUk7QUFDRixRQUFJLENBQUNwQixFQUFFLENBQUNDLElBQUgsQ0FBUWdFLE1BQVIsQ0FBZUUsYUFBZixDQUFMLEVBQW9DO0FBQ2xDLFlBQU0sSUFBSXhFLEtBQUssQ0FBQ3dCLEtBQVYsQ0FDSnhCLEtBQUssQ0FBQ3dCLEtBQU4sQ0FBWUMsZ0JBRFIsRUFFSCw2Q0FBNENmLFlBQWEsRUFGdEQsQ0FBTjtBQUlEO0FBQ0YsR0FQRCxDQU9FLE9BQU9nRSxDQUFQLEVBQVU7QUFDVixVQUFNLElBQUkxRSxLQUFLLENBQUN3QixLQUFWLENBQ0p4QixLQUFLLENBQUN3QixLQUFOLENBQVlDLGdCQURSLEVBRUgsNkNBQTRDZixZQUFhLEVBRnRELENBQU47QUFJRDs7QUFDRCxTQUFPSixJQUFQO0FBQ0QsQyxDQUVEOzs7QUFDQSxlQUFlcUUsZ0JBQWYsQ0FBZ0NaLFFBQWhDLEVBQTBDO0FBQ3hDLE1BQUksQ0FBQ0EsUUFBUSxDQUFDYSxFQUFkLEVBQWtCO0FBQ2hCLFVBQU0sSUFBSTVFLEtBQUssQ0FBQ3dCLEtBQVYsQ0FBZ0J4QixLQUFLLENBQUN3QixLQUFOLENBQVlDLGdCQUE1QixFQUE4Qyx5Q0FBOUMsQ0FBTjtBQUNEOztBQUNEc0MsRUFBQUEsUUFBUSxDQUFDSSxRQUFULEdBQW9CSixRQUFRLENBQUNhLEVBQTdCO0FBQ0EsUUFBTWQsU0FBUyxHQUFHLE1BQU12QyxtQkFBbUIsQ0FBQ3dDLFFBQVEsQ0FBQ3JELFlBQVYsQ0FBM0M7QUFDQSxTQUFPbUQsZUFBZSxDQUFDQyxTQUFELEVBQVlDLFFBQVosQ0FBdEI7QUFDRCxDLENBRUQ7OztBQUNBLGVBQWVjLGFBQWYsQ0FBNkJDLE1BQTdCLEVBQXFDZixRQUFyQyxFQUErQ2dCLE9BQU8sR0FBRyxFQUF6RCxFQUE2RDtBQUMzRCxNQUFJLENBQUNBLE9BQU8sQ0FBQ0Msa0JBQWIsRUFBaUM7QUFDL0JELElBQUFBLE9BQU8sQ0FBQ0Msa0JBQVIsR0FDRSx1RkFERjtBQUVEOztBQUNELE1BQUkzRSxFQUFFLENBQUNFLEdBQUgsS0FBV3dFLE9BQU8sQ0FBQ0Msa0JBQXZCLEVBQTJDO0FBQ3pDO0FBQ0Q7O0FBQ0QsUUFBTTtBQUFFdEMsSUFBQUEsV0FBRjtBQUFlSixJQUFBQTtBQUFmLE1BQTJCLE1BQU1LLGNBQWMsQ0FBQ29DLE9BQU8sQ0FBQ0Msa0JBQVQsRUFBNkIsSUFBN0IsQ0FBckQ7O0FBQ0EsTUFDRTFDLE9BQU8sQ0FBQyxjQUFELENBQVAsS0FBNEIsd0JBQTVCLElBQ0FBLE9BQU8sQ0FBQyxnQkFBRCxDQUFQLElBQTZCLElBRDdCLElBRUFBLE9BQU8sQ0FBQyxnQkFBRCxDQUFQLEdBQTRCLEtBSDlCLEVBSUU7QUFDQSxVQUFNLElBQUl0QyxLQUFLLENBQUN3QixLQUFWLENBQ0p4QixLQUFLLENBQUN3QixLQUFOLENBQVlDLGdCQURSLEVBRUosMkVBRkksQ0FBTjtBQUlEOztBQUNEcEIsRUFBQUEsRUFBRSxDQUFDQyxJQUFILEdBQVVGLEdBQUcsQ0FBQ3FFLGtCQUFKLENBQXVCL0IsV0FBdkIsQ0FBVjtBQUNBckMsRUFBQUEsRUFBRSxDQUFDRSxHQUFILEdBQVN3RSxPQUFPLENBQUNDLGtCQUFqQjtBQUNEOztBQUVEQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZkwsRUFBQUEsYUFEZTtBQUVmRixFQUFBQSxnQkFGZTtBQUdmbkUsRUFBQUE7QUFIZSxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIEFwcGxlIEdhbWUgQ2VudGVyIEF1dGhcbmh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL2dhbWVraXQvZ2tsb2NhbHBsYXllci8xNTE1NDA3LWdlbmVyYXRlaWRlbnRpdHl2ZXJpZmljYXRpb25zaWduI2Rpc2N1c3Npb25cblxuY29uc3QgYXV0aERhdGEgPSB7XG4gIHB1YmxpY0tleVVybDogJ2h0dHBzOi8vdmFsaWQuYXBwbGUuY29tL3B1YmxpYy90aW1lb3V0LmNlcicsXG4gIHRpbWVzdGFtcDogMTQ2MDk4MTQyMTMwMyxcbiAgc2lnbmF0dXJlOiAnUG9Ed2YzOURDTjQ2NEI0OWpKQ1UwZDlZMEonLFxuICBzYWx0OiAnc2FsdFNUPT0nLFxuICBidW5kbGVJZDogJ2NvbS52YWxpZC5hcHAnXG4gIGlkOiAncGxheWVySWQnLFxufTtcbiovXG5cbmNvbnN0IHsgUGFyc2UgfSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKTtcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuY29uc3QgeyBwa2kgfSA9IHJlcXVpcmUoJ25vZGUtZm9yZ2UnKTtcbmNvbnN0IGNhID0geyBjZXJ0OiBudWxsLCB1cmw6IG51bGwgfTtcbmNvbnN0IGNhY2hlID0ge307IC8vIChwdWJsaWNLZXkgLT4gY2VydCkgY2FjaGVcblxuZnVuY3Rpb24gdmVyaWZ5UHVibGljS2V5VXJsKHB1YmxpY0tleVVybCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlZ2V4ID0gL15odHRwczpcXC9cXC8oPzpbLV9BLVphLXowLTldK1xcLil7MCx9YXBwbGVcXC5jb21cXC8uKlxcLmNlciQvO1xuICAgIHJldHVybiByZWdleC50ZXN0KHB1YmxpY0tleVVybCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRYNTA5Q2VydFRvUEVNKFg1MDlDZXJ0KSB7XG4gIGNvbnN0IHBlbVByZUZpeCA9ICctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS1cXG4nO1xuICBjb25zdCBwZW1Qb3N0Rml4ID0gJy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0nO1xuXG4gIGNvbnN0IGJhc2U2NCA9IFg1MDlDZXJ0O1xuICBjb25zdCBjZXJ0Qm9keSA9IGJhc2U2NC5tYXRjaChuZXcgUmVnRXhwKCcuezAsNjR9JywgJ2cnKSkuam9pbignXFxuJyk7XG5cbiAgcmV0dXJuIHBlbVByZUZpeCArIGNlcnRCb2R5ICsgcGVtUG9zdEZpeDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXBwbGVDZXJ0aWZpY2F0ZShwdWJsaWNLZXlVcmwpIHtcbiAgaWYgKCF2ZXJpZnlQdWJsaWNLZXlVcmwocHVibGljS2V5VXJsKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgQXBwbGUgR2FtZSBDZW50ZXIgLSBpbnZhbGlkIHB1YmxpY0tleVVybDogJHtwdWJsaWNLZXlVcmx9YFxuICAgICk7XG4gIH1cbiAgaWYgKGNhY2hlW3B1YmxpY0tleVVybF0pIHtcbiAgICByZXR1cm4gY2FjaGVbcHVibGljS2V5VXJsXTtcbiAgfVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKHB1YmxpY0tleVVybCk7XG4gIGNvbnN0IGhlYWRPcHRpb25zID0ge1xuICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgcGF0aDogdXJsLnBhdGhuYW1lLFxuICAgIG1ldGhvZDogJ0hFQUQnLFxuICB9O1xuICBjb25zdCBjZXJ0X2hlYWRlcnMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIGh0dHBzLmdldChoZWFkT3B0aW9ucywgcmVzID0+IHJlc29sdmUocmVzLmhlYWRlcnMpKS5vbignZXJyb3InLCByZWplY3QpXG4gICk7XG4gIGNvbnN0IHZhbGlkQ29udGVudFR5cGVzID0gWydhcHBsaWNhdGlvbi94LXg1MDktY2EtY2VydCcsICdhcHBsaWNhdGlvbi9wa2l4LWNlcnQnXTtcbiAgaWYgKFxuICAgICF2YWxpZENvbnRlbnRUeXBlcy5pbmNsdWRlcyhjZXJ0X2hlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB8fFxuICAgIGNlcnRfaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSA9PSBudWxsIHx8XG4gICAgY2VydF9oZWFkZXJzWydjb250ZW50LWxlbmd0aCddID4gMTAwMDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBBcHBsZSBHYW1lIENlbnRlciAtIGludmFsaWQgcHVibGljS2V5VXJsOiAke3B1YmxpY0tleVVybH1gXG4gICAgKTtcbiAgfVxuICBjb25zdCB7IGNlcnRpZmljYXRlLCBoZWFkZXJzIH0gPSBhd2FpdCBnZXRDZXJ0aWZpY2F0ZShwdWJsaWNLZXlVcmwpO1xuICBpZiAoaGVhZGVyc1snY2FjaGUtY29udHJvbCddKSB7XG4gICAgY29uc3QgZXhwaXJlID0gaGVhZGVyc1snY2FjaGUtY29udHJvbCddLm1hdGNoKC9tYXgtYWdlPShbMC05XSspLyk7XG4gICAgaWYgKGV4cGlyZSkge1xuICAgICAgY2FjaGVbcHVibGljS2V5VXJsXSA9IGNlcnRpZmljYXRlO1xuICAgICAgLy8gd2UnbGwgZXhwaXJlIHRoZSBjYWNoZSBlbnRyeSBsYXRlciwgYXMgcGVyIG1heC1hZ2VcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkZWxldGUgY2FjaGVbcHVibGljS2V5VXJsXTtcbiAgICAgIH0sIHBhcnNlSW50KGV4cGlyZVsxXSwgMTApICogMTAwMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2ZXJpZnlQdWJsaWNLZXlJc3N1ZXIoY2VydGlmaWNhdGUsIHB1YmxpY0tleVVybCk7XG59XG5cbmZ1bmN0aW9uIGdldENlcnRpZmljYXRlKHVybCwgYnVmZmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaHR0cHNcbiAgICAgIC5nZXQodXJsLCByZXMgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gW107XG4gICAgICAgIHJlcy5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgICBkYXRhLnB1c2goY2h1bmspO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKGJ1ZmZlcikge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IGNlcnRpZmljYXRlOiBCdWZmZXIuY29uY2F0KGRhdGEpLCBoZWFkZXJzOiByZXMuaGVhZGVycyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGNlcnQgPSAnJztcbiAgICAgICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGRhdGEpIHtcbiAgICAgICAgICAgIGNlcnQgKz0gY2h1bmsudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IGNvbnZlcnRYNTA5Q2VydFRvUEVNKGNlcnQpO1xuICAgICAgICAgIHJlc29sdmUoeyBjZXJ0aWZpY2F0ZSwgaGVhZGVyczogcmVzLmhlYWRlcnMgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCByZWplY3QpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRpbWVzdGFtcFRvQmlnRW5kaWFuKHRpbWVzdGFtcCkge1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoOCk7XG5cbiAgY29uc3QgaGlnaCA9IH5+KHRpbWVzdGFtcCAvIDB4ZmZmZmZmZmYpO1xuICBjb25zdCBsb3cgPSB0aW1lc3RhbXAgJSAoMHhmZmZmZmZmZiArIDB4MSk7XG5cbiAgYnVmZmVyLndyaXRlVUludDMyQkUocGFyc2VJbnQoaGlnaCwgMTApLCAwKTtcbiAgYnVmZmVyLndyaXRlVUludDMyQkUocGFyc2VJbnQobG93LCAxMCksIDQpO1xuXG4gIHJldHVybiBidWZmZXI7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZShwdWJsaWNLZXksIGF1dGhEYXRhKSB7XG4gIGNvbnN0IHZlcmlmaWVyID0gY3J5cHRvLmNyZWF0ZVZlcmlmeSgnc2hhMjU2Jyk7XG4gIHZlcmlmaWVyLnVwZGF0ZShhdXRoRGF0YS5wbGF5ZXJJZCwgJ3V0ZjgnKTtcbiAgdmVyaWZpZXIudXBkYXRlKGF1dGhEYXRhLmJ1bmRsZUlkLCAndXRmOCcpO1xuICB2ZXJpZmllci51cGRhdGUoY29udmVydFRpbWVzdGFtcFRvQmlnRW5kaWFuKGF1dGhEYXRhLnRpbWVzdGFtcCkpO1xuICB2ZXJpZmllci51cGRhdGUoYXV0aERhdGEuc2FsdCwgJ2Jhc2U2NCcpO1xuXG4gIGlmICghdmVyaWZpZXIudmVyaWZ5KHB1YmxpY0tleSwgYXV0aERhdGEuc2lnbmF0dXJlLCAnYmFzZTY0JykpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0FwcGxlIEdhbWUgQ2VudGVyIC0gaW52YWxpZCBzaWduYXR1cmUnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2ZXJpZnlQdWJsaWNLZXlJc3N1ZXIoY2VydCwgcHVibGljS2V5VXJsKSB7XG4gIGNvbnN0IHB1YmxpY0tleUNlcnQgPSBwa2kuY2VydGlmaWNhdGVGcm9tUGVtKGNlcnQpO1xuICBpZiAoIWNhLmNlcnQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgJ0FwcGxlIEdhbWUgQ2VudGVyIGF1dGggYWRhcHRlciBwYXJhbWV0ZXIgYHJvb3RDZXJ0aWZpY2F0ZVVSTGAgaXMgaW52YWxpZC4nXG4gICAgKTtcbiAgfVxuICB0cnkge1xuICAgIGlmICghY2EuY2VydC52ZXJpZnkocHVibGljS2V5Q2VydCkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgYEFwcGxlIEdhbWUgQ2VudGVyIC0gaW52YWxpZCBwdWJsaWNLZXlVcmw6ICR7cHVibGljS2V5VXJsfWBcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBBcHBsZSBHYW1lIENlbnRlciAtIGludmFsaWQgcHVibGljS2V5VXJsOiAke3B1YmxpY0tleVVybH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY2VydDtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIHVzZXIgaWQgaXMgdmFsaWQuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhKSB7XG4gIGlmICghYXV0aERhdGEuaWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0FwcGxlIEdhbWUgQ2VudGVyIC0gYXV0aERhdGEgaWQgbWlzc2luZycpO1xuICB9XG4gIGF1dGhEYXRhLnBsYXllcklkID0gYXV0aERhdGEuaWQ7XG4gIGNvbnN0IHB1YmxpY0tleSA9IGF3YWl0IGdldEFwcGxlQ2VydGlmaWNhdGUoYXV0aERhdGEucHVibGljS2V5VXJsKTtcbiAgcmV0dXJuIHZlcmlmeVNpZ25hdHVyZShwdWJsaWNLZXksIGF1dGhEYXRhKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICghb3B0aW9ucy5yb290Q2VydGlmaWNhdGVVcmwpIHtcbiAgICBvcHRpb25zLnJvb3RDZXJ0aWZpY2F0ZVVybCA9XG4gICAgICAnaHR0cHM6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0LnBlbSc7XG4gIH1cbiAgaWYgKGNhLnVybCA9PT0gb3B0aW9ucy5yb290Q2VydGlmaWNhdGVVcmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgeyBjZXJ0aWZpY2F0ZSwgaGVhZGVycyB9ID0gYXdhaXQgZ2V0Q2VydGlmaWNhdGUob3B0aW9ucy5yb290Q2VydGlmaWNhdGVVcmwsIHRydWUpO1xuICBpZiAoXG4gICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gIT09ICdhcHBsaWNhdGlvbi94LXBlbS1maWxlJyB8fFxuICAgIGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10gPT0gbnVsbCB8fFxuICAgIGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10gPiAxMDAwMFxuICApIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgJ0FwcGxlIEdhbWUgQ2VudGVyIGF1dGggYWRhcHRlciBwYXJhbWV0ZXIgYHJvb3RDZXJ0aWZpY2F0ZVVSTGAgaXMgaW52YWxpZC4nXG4gICAgKTtcbiAgfVxuICBjYS5jZXJ0ID0gcGtpLmNlcnRpZmljYXRlRnJvbVBlbShjZXJ0aWZpY2F0ZSk7XG4gIGNhLnVybCA9IG9wdGlvbnMucm9vdENlcnRpZmljYXRlVXJsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YSxcbiAgY2FjaGUsXG59O1xuIl19
@@ -78,6 +78,16 @@ class FilesRouter {
78
78
  getHandler(req, res) {
79
79
  const config = _Config.default.get(req.params.appId);
80
80
 
81
+ if (!config) {
82
+ res.status(403);
83
+ const err = new _node.default.Error(_node.default.Error.OPERATION_FORBIDDEN, 'Invalid application ID.');
84
+ res.json({
85
+ code: err.code,
86
+ error: err.message
87
+ });
88
+ return;
89
+ }
90
+
81
91
  const filesController = config.filesController;
82
92
  const filename = req.params.filename;
83
93
 
@@ -231,16 +241,15 @@ class FilesRouter {
231
241
  }
232
242
 
233
243
  async metadataHandler(req, res) {
234
- const config = _Config.default.get(req.params.appId);
235
-
236
- const {
237
- filesController
238
- } = config;
239
- const {
240
- filename
241
- } = req.params;
242
-
243
244
  try {
245
+ const config = _Config.default.get(req.params.appId);
246
+
247
+ const {
248
+ filesController
249
+ } = config;
250
+ const {
251
+ filename
252
+ } = req.params;
244
253
  const data = await filesController.getMetadata(filename);
245
254
  res.status(200);
246
255
  res.json(data);
@@ -257,4 +266,4 @@ exports.FilesRouter = FilesRouter;
257
266
  function isFileStreamable(req, filesController) {
258
267
  return req.get('Range') && typeof filesController.adapter.handleFileStream === 'function';
259
268
  }
260
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sIm5hbWVzIjpbInRyaWdnZXJzIiwicmVxdWlyZSIsImh0dHAiLCJkb3dubG9hZEZpbGVGcm9tVVJJIiwidXJpIiwiUHJvbWlzZSIsInJlcyIsInJlaiIsImdldCIsInJlc3BvbnNlIiwic2V0RGVmYXVsdEVuY29kaW5nIiwiYm9keSIsImhlYWRlcnMiLCJvbiIsImRhdGEiLCJlIiwibWVzc2FnZSIsImFkZEZpbGVEYXRhSWZOZWVkZWQiLCJmaWxlIiwiX3NvdXJjZSIsImZvcm1hdCIsImJhc2U2NCIsIl9wcmV2aW91c1NhdmUiLCJfZGF0YSIsIl9yZXF1ZXN0VGFzayIsIkZpbGVzUm91dGVyIiwiZXhwcmVzc1JvdXRlciIsIm1heFVwbG9hZFNpemUiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwiZ2V0SGFuZGxlciIsIm1ldGFkYXRhSGFuZGxlciIsInBvc3QiLCJyZXEiLCJuZXh0IiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwiQm9keVBhcnNlciIsInJhdyIsInR5cGUiLCJsaW1pdCIsIk1pZGRsZXdhcmVzIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiY3JlYXRlSGFuZGxlciIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiY29uZmlnIiwiQ29uZmlnIiwicGFyYW1zIiwiYXBwSWQiLCJmaWxlc0NvbnRyb2xsZXIiLCJmaWxlbmFtZSIsImNvbnRlbnRUeXBlIiwibWltZSIsImdldFR5cGUiLCJpc0ZpbGVTdHJlYW1hYmxlIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwic3RhdHVzIiwic2V0IiwiZW5kIiwiZ2V0RmlsZURhdGEiLCJ0aGVuIiwibGVuZ3RoIiwiRklMRV9TQVZFX0VSUk9SIiwiZXJyb3IiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwidG9TdHJpbmciLCJGaWxlIiwibWV0YWRhdGEiLCJ0YWdzIiwiZmlsZURhdGEiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJmaWxlU2l6ZSIsIkJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZVNhdmVGaWxlIiwiYXV0aCIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiX25hbWUiLCJidWZmZXJEYXRhIiwiZnJvbSIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3RhZ3MiLCJfbWV0YWRhdGEiLCJfdXJsIiwicmVzb2x2ZSIsImFmdGVyU2F2ZUZpbGUiLCJqc29uIiwibG9nZ2VyIiwicmVzb2x2ZUVycm9yIiwiY29kZSIsImFkYXB0ZXIiLCJnZXRGaWxlTG9jYXRpb24iLCJiZWZvcmVEZWxldGVGaWxlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlRmlsZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFDQSxNQUFNQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUUsbUJBQW1CLEdBQUdDLEdBQUcsSUFBSTtBQUNqQyxTQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxHQUFELEVBQU1DLEdBQU4sS0FBYztBQUMvQkwsSUFBQUEsSUFBSSxDQUNETSxHQURILENBQ09KLEdBRFAsRUFDWUssUUFBUSxJQUFJO0FBQ3BCQSxNQUFBQSxRQUFRLENBQUNDLGtCQUFULENBQTRCLFFBQTVCO0FBQ0EsVUFBSUMsSUFBSSxHQUFJLFFBQU9GLFFBQVEsQ0FBQ0csT0FBVCxDQUFpQixjQUFqQixDQUFpQyxVQUFwRDtBQUNBSCxNQUFBQSxRQUFRLENBQUNJLEVBQVQsQ0FBWSxNQUFaLEVBQW9CQyxJQUFJLElBQUtILElB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QkFBVCxDQUEwQnhCLEdBQTFCLEVBQStCbUIsZUFBL0IsRUFBZ0Q7QUFDOUMsU0FBT25CLEdBQUcsQ0FBQzFCLEdBQUosQ0FBUSxPQUFSLEtBQW9CLE9BQU82QyxlQUFlLENBQUNrRCxPQUFoQixDQUF3QjVDLGdCQUEvQixLQUFvRCxVQUEvRTtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgQm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlcyBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgbWltZSBmcm9tICdtaW1lJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5cbmNvbnN0IGRvd25sb2FkRmlsZUZyb21VUkkgPSB1cmkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgaHR0cFxuICAgICAgLmdldCh1cmksIHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmVzcG9uc2Uuc2V0RGVmYXVsdEVuY29kaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgbGV0IGJvZHkgPSBgZGF0YToke3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddfTtiYXNlNjQsYDtcbiAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCBkYXRhID0+IChib2R5ICs9IGRhdGEpKTtcbiAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHJlcyhib2R5KSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgICByZWooYEVycm9yIGRvd25sb2FkaW5nIGZpbGUgZnJvbSAke3VyaX06ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfSk7XG4gIH0pO1xufTtcblxuY29uc3QgYWRkRmlsZURhdGFJZk5lZWRlZCA9IGFzeW5jIGZpbGUgPT4ge1xuICBpZiAoZmlsZS5fc291cmNlLmZvcm1hdCA9PT0gJ3VyaScpIHtcbiAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVVJJKGZpbGUuX3NvdXJjZS51cmkpO1xuICAgIGZpbGUuX3ByZXZpb3VzU2F2ZSA9IGZpbGU7XG4gICAgZmlsZS5fZGF0YSA9IGJhc2U2NDtcbiAgICBmaWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGZpbGU7XG59O1xuXG5leHBvcnQgY2xhc3MgRmlsZXNSb3V0ZXIge1xuICBleHByZXNzUm91dGVyKHsgbWF4VXBsb2FkU2l6ZSA9ICcyME1iJyB9ID0ge30pIHtcbiAgICB2YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLzpmaWxlbmFtZScsIHRoaXMuZ2V0SGFuZGxlcik7XG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC9tZXRhZGF0YS86ZmlsZW5hbWUnLCB0aGlzLm1ldGFkYXRhSGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIEJvZHlQYXJzZXIucmF3KHtcbiAgICAgICAgdHlwZTogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBsaW1pdDogbWF4VXBsb2FkU2l6ZSxcbiAgICAgIH0pLCAvLyBBbGxvdyB1cGxvYWRzIHdpdGhvdXQgQ29udGVudC1UeXBlLCBvciB3aXRoIGFueSBDb250ZW50LVR5cGUuXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICB0aGlzLmNyZWF0ZUhhbmRsZXJcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVxLnBhcmFtcy5maWxlbmFtZTtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICBmaWxlc0NvbnRyb2xsZXIuaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlc0NvbnRyb2xsZXJcbiAgICAgICAgLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1MZW5ndGgnLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgcmVzLmVuZChkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZUZpbGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIGlmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgLy8gc2V0IGZpbGVTaXplIHRvIG51bGwgYmVjYXVzZSB3ZSB3b250IGtub3cgaG93IGJpZyBpdCBpcyBoZXJlXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCBza2lwIHNhdmluZyBhbnl0aGluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIGlmIHRoZSBQYXJzZUZpbGUgcmV0dXJuZWQgaXMgdHlwZSB1cmksIGRvd25sb2FkIHRoZSBmaWxlIGJlZm9yZSBzYXZpbmcgaXRcbiAgICAgICAgYXdhaXQgYWRkRmlsZURhdGFJZk5lZWRlZChmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgY29uc3QgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHNhdmUgZmlsZVxuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBidWZmZXJEYXRhLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fc291cmNlLnR5cGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzLFxuICAgICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmVGaWxlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVPYmplY3QuZmlsZS5fbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgICAvLyBydW4gYmVmb3JlRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUpO1xuICAgICAgZmlsZS5fdXJsID0gZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplOiBudWxsIH07XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGVGaWxlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlRmlsZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldE1ldGFkYXRhKGZpbGVuYW1lKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKHt9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICByZXR1cm4gcmVxLmdldCgnUmFuZ2UnKSAmJiB0eXBlb2YgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcbn1cbiJdfQ==
269
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sIm5hbWVzIjpbInRyaWdnZXJzIiwicmVxdWlyZSIsImh0dHAiLCJkb3dubG9hZEZpbGVGcm9tVVJJIiwidXJpIiwiUHJvbWlzZSIsInJlcyIsInJlaiIsImdldCIsInJlc3BvbnNlIiwic2V0RGVmYXVsdEVuY29kaW5nIiwiYm9keSIsImhlYWRlcnMiLCJvbiIsImRhdGEiLCJlIiwibWVzc2FnZSIsImFkZEZpbGVEYXRhSWZOZWVkZWQiLCJmaWxlIiwiX3NvdXJjZSIsImZvcm1hdCIsImJhc2U2NCIsIl9wcmV2aW91c1NhdmUiLCJfZGF0YSIsIl9yZXF1ZXN0VGFzayIsIkZpbGVzUm91dGVyIiwiZXhwcmVzc1JvdXRlciIsIm1heFVwbG9hZFNpemUiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwiZ2V0SGFuZGxlciIsIm1ldGFkYXRhSGFuZGxlciIsInBvc3QiLCJyZXEiLCJuZXh0IiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwiQm9keVBhcnNlciIsInJhdyIsInR5cGUiLCJsaW1pdCIsIk1pZGRsZXdhcmVzIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiY3JlYXRlSGFuZGxlciIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiY29uZmlnIiwiQ29uZmlnIiwicGFyYW1zIiwiYXBwSWQiLCJzdGF0dXMiLCJlcnIiLCJPUEVSQVRJT05fRk9SQklEREVOIiwianNvbiIsImNvZGUiLCJlcnJvciIsImZpbGVzQ29udHJvbGxlciIsImZpbGVuYW1lIiwiY29udGVudFR5cGUiLCJtaW1lIiwiZ2V0VHlwZSIsImlzRmlsZVN0cmVhbWFibGUiLCJoYW5kbGVGaWxlU3RyZWFtIiwiY2F0Y2giLCJzZXQiLCJlbmQiLCJnZXRGaWxlRGF0YSIsInRoZW4iLCJsZW5ndGgiLCJGSUxFX1NBVkVfRVJST1IiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwidG9TdHJpbmciLCJGaWxlIiwibWV0YWRhdGEiLCJ0YWdzIiwiZmlsZURhdGEiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJmaWxlU2l6ZSIsIkJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZVNhdmVGaWxlIiwiYXV0aCIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiX25hbWUiLCJidWZmZXJEYXRhIiwiZnJvbSIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3RhZ3MiLCJfbWV0YWRhdGEiLCJfdXJsIiwicmVzb2x2ZSIsImFmdGVyU2F2ZUZpbGUiLCJsb2dnZXIiLCJyZXNvbHZlRXJyb3IiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlRmlsZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZUZpbGUiLCJGSUxFX0RFTEVURV9FUlJPUiIsImdldE1ldGFkYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBQ0EsTUFBTUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsYUFBRCxDQUF4Qjs7QUFDQSxNQUFNQyxJQUFJLEdBQUdELE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUVBLE1BQU1FLG1CQUFtQixHQUFHQyxHQUFHLElBQUk7QUFDakMsU0FBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLEtBQWM7QUFDL0JMLElBQUFBLElBQUksQ0FDRE0sR0FESCxDQUNPSixHQURQLEVBQ1lLLFFBQVEsSUFBSTtBQUNwQkEsTUFBQUEsUUFBUSxDQUFDQyxrQkFBVCxDQUE0QixRQUE1QjtBQUNBLFVBQUlDLElBQUksR0FBSSxRQUFPRixRQUFRLENBQUNHLE9BQVQsQ0FBaUIsY0FBakIsQ0FBaUMsVUFBcEQ7QUFDQUgsTUFBQUEsUUFBUSxDQUFDSSxFQUFULENB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R0FBRyxDQUFDaUIsTUFBekI7QUFDQSxZQUFNckMsSUFBSSxHQUFHLE1BQU02QyxlQUFlLENBQUNvRCxXQUFoQixDQUE0Qm5ELFFBQTVCLENBQW5CO0FBQ0F0RCxNQUFBQSxHQUFHLENBQUMrQyxNQUFKLENBQVcsR0FBWDtBQUNBL0MsTUFBQUEsR0FBRyxDQUFDa0QsSUFBSixDQUFTMUMsSUFBVDtBQUNELEtBUEQsQ0FPRSxPQUFPQyxDQUFQLEVBQVU7QUFDVlQsTUFBQUEsR0FBRyxDQUFDK0MsTUFBSixDQUFXLEdBQVg7QUFDQS9DLE1BQUFBLEdBQUcsQ0FBQ2tELElBQUosQ0FBUyxFQUFUO0FBQ0Q7QUFDRjs7QUE5TXNCOzs7O0FBaU56QixTQUFTUSxnQkFBVCxDQUEwQjlCLEdBQTFCLEVBQStCeUIsZUFBL0IsRUFBZ0Q7QUFDOUMsU0FBT3pCLEdBQUcsQ0FBQzFCLEdBQUosQ0FBUSxPQUFSLEtBQW9CLE9BQU9tRCxlQUFlLENBQUM4QyxPQUFoQixDQUF3QnhDLGdCQUEvQixLQUFvRCxVQUEvRTtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgQm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlcyBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgbWltZSBmcm9tICdtaW1lJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5cbmNvbnN0IGRvd25sb2FkRmlsZUZyb21VUkkgPSB1cmkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgaHR0cFxuICAgICAgLmdldCh1cmksIHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmVzcG9uc2Uuc2V0RGVmYXVsdEVuY29kaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgbGV0IGJvZHkgPSBgZGF0YToke3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddfTtiYXNlNjQsYDtcbiAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCBkYXRhID0+IChib2R5ICs9IGRhdGEpKTtcbiAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHJlcyhib2R5KSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgICByZWooYEVycm9yIGRvd25sb2FkaW5nIGZpbGUgZnJvbSAke3VyaX06ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfSk7XG4gIH0pO1xufTtcblxuY29uc3QgYWRkRmlsZURhdGFJZk5lZWRlZCA9IGFzeW5jIGZpbGUgPT4ge1xuICBpZiAoZmlsZS5fc291cmNlLmZvcm1hdCA9PT0gJ3VyaScpIHtcbiAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVVJJKGZpbGUuX3NvdXJjZS51cmkpO1xuICAgIGZpbGUuX3ByZXZpb3VzU2F2ZSA9IGZpbGU7XG4gICAgZmlsZS5fZGF0YSA9IGJhc2U2NDtcbiAgICBmaWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGZpbGU7XG59O1xuXG5leHBvcnQgY2xhc3MgRmlsZXNSb3V0ZXIge1xuICBleHByZXNzUm91dGVyKHsgbWF4VXBsb2FkU2l6ZSA9ICcyME1iJyB9ID0ge30pIHtcbiAgICB2YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLzpmaWxlbmFtZScsIHRoaXMuZ2V0SGFuZGxlcik7XG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC9tZXRhZGF0YS86ZmlsZW5hbWUnLCB0aGlzLm1ldGFkYXRhSGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIEJvZHlQYXJzZXIucmF3KHtcbiAgICAgICAgdHlwZTogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBsaW1pdDogbWF4VXBsb2FkU2l6ZSxcbiAgICAgIH0pLCAvLyBBbGxvdyB1cGxvYWRzIHdpdGhvdXQgQ29udGVudC1UeXBlLCBvciB3aXRoIGFueSBDb250ZW50LVR5cGUuXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICB0aGlzLmNyZWF0ZUhhbmRsZXJcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVxLnBhcmFtcy5maWxlbmFtZTtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICBmaWxlc0NvbnRyb2xsZXIuaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlc0NvbnRyb2xsZXJcbiAgICAgICAgLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1MZW5ndGgnLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgcmVzLmVuZChkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZUZpbGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIGlmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgLy8gc2V0IGZpbGVTaXplIHRvIG51bGwgYmVjYXVzZSB3ZSB3b250IGtub3cgaG93IGJpZyBpdCBpcyBoZXJlXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCBza2lwIHNhdmluZyBhbnl0aGluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIGlmIHRoZSBQYXJzZUZpbGUgcmV0dXJuZWQgaXMgdHlwZSB1cmksIGRvd25sb2FkIHRoZSBmaWxlIGJlZm9yZSBzYXZpbmcgaXRcbiAgICAgICAgYXdhaXQgYWRkRmlsZURhdGFJZk5lZWRlZChmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgY29uc3QgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHNhdmUgZmlsZVxuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBidWZmZXJEYXRhLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fc291cmNlLnR5cGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzLFxuICAgICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmVGaWxlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVPYmplY3QuZmlsZS5fbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgICAvLyBydW4gYmVmb3JlRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUpO1xuICAgICAgZmlsZS5fdXJsID0gZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplOiBudWxsIH07XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGVGaWxlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlRmlsZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldE1ldGFkYXRhKGZpbGVuYW1lKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKHt9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICByZXR1cm4gcmVxLmdldCgnUmFuZ2UnKSAmJiB0eXBlb2YgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "4.10.9",
3
+ "version": "4.10.12",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {