@agilemotion/oui-react-js 2.0.24 → 2.0.26

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.
@@ -157,19 +157,19 @@ class RestService {
157
157
  // Body is passed through; the fetch layer drops it for verbs that
158
158
  // forbid one. DELETE with a body is uncommon but permitted by
159
159
  // HTTP — we don't block it here.
160
- // Pre-auth flows (registration wizard endpoints) must not
161
- // attach a bearer token Spring Security's BearerTokenAuthenticationFilter
162
- // validates *any* attached token even on permitAll() paths,
163
- // so an empty/stale token would 401 a whitelisted endpoint.
164
- // Path-prefix detection matches the equivalent fix in
165
- // RouteActionHandler for /view/public/get.
166
- const isPublicRegistration = service.url && /\/api\/v[0-9]+\/registration\//.test(service.url);
160
+ // Secure by default: attach the session token whenever one exists.
161
+ // No URL special-casingpre-auth surfaces (view/security/* login,
162
+ // register, reset) clear sessionStorage on mount, so nothing is
163
+ // attached on those screens. `secure` here only prevents leaking a
164
+ // token to a plain-http endpoint; the attachment itself is
165
+ // presence-based in fetchWithCustomConfig, so a stale/empty token is
166
+ // never sent.
167
167
  this.fetchWithCustomConfig({
168
168
  viewId: request.viewId,
169
169
  url,
170
170
  serviceType: request.service.type,
171
171
  method,
172
- secure: !isPublicRegistration && !service.url.startsWith('http://'),
172
+ secure: !service.url.startsWith('http://'),
173
173
  body: requestBody,
174
174
  headers,
175
175
  track: request.track !== false
@@ -264,12 +264,16 @@ class RestService {
264
264
  fetchConfig = {
265
265
  method: _Utils.default.isNull(request.method) ? 'GET' : request.method,
266
266
  headers: _objectSpread(_objectSpread({}, request.headers), {}, {
267
- 'Content-Type': request.contentType ? request.contentType : 'application/x-www-form-urlencoded',
268
- 'Authorization': 'Bearer ' + accessToken,
269
- 'idToken': idToken
267
+ 'Content-Type': request.contentType ? request.contentType : 'application/x-www-form-urlencoded'
270
268
  }),
271
269
  body: data
272
270
  };
271
+ // Secure by default, presence-based: attach auth ONLY when a
272
+ // session exists. Pre-auth screens (view/security/*) clear
273
+ // sessionStorage on mount, so nothing is attached there — and
274
+ // we never emit 'Bearer null' or a stale token.
275
+ if (accessToken) fetchConfig.headers['Authorization'] = 'Bearer ' + accessToken;
276
+ if (idToken) fetchConfig.headers['idToken'] = idToken;
273
277
  } else {
274
278
  fetchConfig = {
275
279
  method: _Utils.default.isNull(request.method) ? 'GET' : request.method,
@@ -412,4 +416,4 @@ const invokeRest = request => {
412
416
  return instance.invokeRest(request);
413
417
  };
414
418
  exports.invokeRest = invokeRest;
415
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfUmVzdFV0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImxvY2F0aW9uIiwiZXhwb3J0cyIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJzdGF0dXMiLCJyZXNwb25zZSIsIm9rIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJqc29uIiwidGV4dCIsIlJlc3RTZXJ2aWNlIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwiaW52b2tlUmVzdCIsInJlcXVlc3QiLCJzZXJ2aWNlIiwidXJsIiwic3RhcnRzV2l0aCIsImNvbmNhdCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290IiwicmVxdWVzdEJvZHkiLCJoZWFkZXJzIiwicGFyYW1ldGVycyIsInF1ZXJ5U3RyaW5nIiwicGF0aFBhcmFtZXRlcnMiLCJyZXF1ZXN0Qm9keVBhcmFtRm91bmQiLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInJlc29sdmVQYXJhbWV0ZXJWYWx1ZSIsImV2ZW50IiwiZGF0YSIsInZhbGlkYXRvciIsIm51bGxhYmxlIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsIm5hbWUiLCJyZXF1aXJlZCIsImVycm9yVHlwZSIsImh0dHBQYXJhbWV0ZXJUeXBlIiwiaW5jbHVkZVBhcmFtZXRlclR5cGVzIiwidHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNvbHZlZFZhbHVlIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5zdGFuY2VUeXBlIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJFcnJvciIsImNvbnRlbnRUeXBlIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJmZXRjaFdpdGhDdXN0b21Db25maWciLCJ2aWV3SWQiLCJzZXJ2aWNlVHlwZSIsInNlY3VyZSIsImRvd25sb2FkIiwidGhlbiIsImNhdGNoIiwiaXNQdWJsaWNSZWdpc3RyYXRpb24iLCJ0ZXN0IiwiYm9keSIsInRyYWNrIiwicGF0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwicmV0dXJuVmFsdWVCaW5kaW5nIiwidmFsdWVPYmplY3QiLCJwcm9wZXJ0eSIsInByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhIiwiY29tcG9uZW50Iiwic3VjY2Vzc01lc3NhZ2UiLCJpbnZva2VScGMiLCJycGNSZXF1ZXN0IiwiaWQiLCJzcGxpdCIsInNlcnZpY2VJZCIsInByb2NlZHVyZU5hbWUiLCJtb2R1bGUiLCJ0b0xvd2VyQ2FzZSIsInBhcmFtZXRlckNvbmZpZyIsImluZGV4IiwidmFsIiwiYWNjZXNzVG9rZW4iLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJpZFRva2VuIiwiRm9ybURhdGEiLCJmZXRjaENvbmZpZyIsImNvbmZpZyIsImFjY2VwdCIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvciIsImZldGNoIiwiZXJyb3JEYXRhIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJjb250ZW50RGlzcG9zaXRpb24iLCJnZXQiLCJmaWxlbmFtZSIsImluY2x1ZGVzIiwidHJpbSIsImJsb2IiLCJfcmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJlcnJvciIsImNvbnNvbGUiLCJ0cmFja1Byb21pc2UiLCJleGVjdXRlRmV0Y2giLCJlbmNvZGVVUkkiLCJlbmRzV2l0aCIsImNsZWFyIiwibmF2aWdhdGUiLCJ0b1N0cmluZyIsInBhcnNlIiwiaWdub3JlZCIsImRhdGFUeXBlIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJpbnN0YW5jZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvUmVzdFNlcnZpY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IHt0cmFja1Byb21pc2V9IGZyb20gJ3JlYWN0LXByb21pc2UtdHJhY2tlcic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IHtpbnN0YW5jZU9mfSBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtkb3dubG9hZCwgcG9zdERhdGEsIHNlbmRSZXF1ZXN0fSBmcm9tIFwiLi9SZXN0VXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbmNvbnN0IHN0YXR1cyA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgIH1cbn07XG5cbmNvbnN0IGpzb24gPSAocmVzcG9uc2UpID0+IHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufTtcblxuY2xhc3MgUmVzdFNlcnZpY2Uge1xuICAgIGlzUGFyYW1WYWx1ZU51bGwocGFyYW1WYWx1ZSkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbVZhbHVlLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUudmFsdWUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaW52b2tlUmVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBzZXJ2aWNlID0gcmVxdWVzdC5zZXJ2aWNlO1xuICAgICAgICBsZXQgdXJsID0gc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgP1xuICAgICAgICAgICAgc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UucGFyYW1ldGVycykpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHlQYXJhbUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2Ygc2VydmljZS5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcmFtZXRlci52YWxpZGF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHBhcmFtZXRlci52YWxpZGF0b3IubnVsbGFibGUgJiYgIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSwgcGFyYW1ldGVyLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkICYmIFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyYW1ldGVyLm5hbWUpKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgaHR0cFBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXIuaHR0cFBhcmFtZXRlclR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1ldGVyVHlwZSA9ICdRVUVSWV9QQVJBTUVURVInO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UuaW5jbHVkZVBhcmFtZXRlclR5cGVzKSAmJiBzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICh0eXBlb2YgcGFyYW1ldGVyVmFsdWUudmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdQQVRIX1ZBUklBQkxFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSkgOiBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpIDogcGFyYW1ldGVyVmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgYSBuYW1lIGFuZCB0aGUgVVJMIGNvbnRhaW5zIHtuYW1lfSwgcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScsIHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhQYXJhbWV0ZXJzICs9ICcvJyArIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyVmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdSRVFVRVNUX0JPRFknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHlQYXJhbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk9ubHkgb25lIHJlcXVlc3QgYm9keSBpcyBwZXJtaXR0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIHNsb3QgYXMgdGFrZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbnVsbC4gQSBzZWNvbmQgUkVRVUVTVF9CT0RZIHBhcmFtIGlzIGEgY29uZmlnIGJ1Z1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWl0aGVyIHdheSwgYW5kIHdlIHdhbnQgaXQgdG8gc3VyZmFjZSBsb3VkbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF0aFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9IHF1ZXJ5U3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBIVFRQIG1ldGhvZC4gSG9ub3Igc2VydmljZS5tZXRob2Qgd2hlbiBwcm92aWRlZCBzb1xuICAgICAgICAgICAgLy8gY2FsbGVycyBjYW4gaXNzdWUgREVMRVRFLCBQVVQsIFBBVENIIChub3QganVzdCBHRVQvUE9TVCkuXG4gICAgICAgICAgICAvLyBEZWZhdWx0OiBQT1NUIHdoZW4gYSBib2R5IHdhcyBib3VuZCwgR0VUIG90aGVyd2lzZSDigJQgcHJlc2VydmVzXG4gICAgICAgICAgICAvLyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgZm9yIGNhbGxlcnMgdGhhdCBvbWl0IHNlcnZpY2UubWV0aG9kLlxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gc2VydmljZS5tZXRob2RcbiAgICAgICAgICAgICAgICA/IHNlcnZpY2UubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IChyZXF1ZXN0Qm9keSAhPT0gbnVsbCA/ICdQT1NUJyA6ICdHRVQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvd25sb2FkIHBhdGggKFBERiAvIEV4Y2VsKSBpcyBHRVQtb25seSBhbmQgdXNlcyBhIHNlcGFyYXRlXG4gICAgICAgICAgICAvLyBmZXRjaCBzaGFwZSAoYmxvYiBoYW5kbGluZyk7IGJyYW5jaCBmaXJzdC5cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnICYmIChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVxdWVzdC5zZXJ2aWNlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNlY3VyZTogcmVxdWVzdC5zZWN1cmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaW5nbGUgZGlzcGF0Y2ggZm9yIEdFVCAvIFBPU1QgLyBQVVQgLyBQQVRDSCAvIERFTEVURSAvIGV0Yy5cbiAgICAgICAgICAgIC8vIEJvZHkgaXMgcGFzc2VkIHRocm91Z2g7IHRoZSBmZXRjaCBsYXllciBkcm9wcyBpdCBmb3IgdmVyYnMgdGhhdFxuICAgICAgICAgICAgLy8gZm9yYmlkIG9uZS4gREVMRVRFIHdpdGggYSBib2R5IGlzIHVuY29tbW9uIGJ1dCBwZXJtaXR0ZWQgYnlcbiAgICAgICAgICAgIC8vIEhUVFAg4oCUIHdlIGRvbid0IGJsb2NrIGl0IGhlcmUuXG4gICAgICAgICAgICAvLyBQcmUtYXV0aCBmbG93cyAocmVnaXN0cmF0aW9uIHdpemFyZCBlbmRwb2ludHMpIG11c3Qgbm90XG4gICAgICAgICAgICAgICAgLy8gYXR0YWNoIGEgYmVhcmVyIHRva2VuIOKAlCBTcHJpbmcgU2VjdXJpdHkncyBCZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uRmlsdGVyXG4gICAgICAgICAgICAgICAgLy8gdmFsaWRhdGVzICphbnkqIGF0dGFjaGVkIHRva2VuIGV2ZW4gb24gcGVybWl0QWxsKCkgcGF0aHMsXG4gICAgICAgICAgICAgICAgLy8gc28gYW4gZW1wdHkvc3RhbGUgdG9rZW4gd291bGQgNDAxIGEgd2hpdGVsaXN0ZWQgZW5kcG9pbnQuXG4gICAgICAgICAgICAgICAgLy8gUGF0aC1wcmVmaXggZGV0ZWN0aW9uIG1hdGNoZXMgdGhlIGVxdWl2YWxlbnQgZml4IGluXG4gICAgICAgICAgICAgICAgLy8gUm91dGVBY3Rpb25IYW5kbGVyIGZvciAvdmlldy9wdWJsaWMvZ2V0LlxuICAgICAgICAgICAgY29uc3QgaXNQdWJsaWNSZWdpc3RyYXRpb24gPSBzZXJ2aWNlLnVybFxuICAgICAgICAgICAgICAgICAgICAmJiAvXFwvYXBpXFwvdlswLTldK1xcL3JlZ2lzdHJhdGlvblxcLy8udGVzdChzZXJ2aWNlLnVybCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh7XG4gICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgc2VydmljZVR5cGU6IHJlcXVlc3Quc2VydmljZS50eXBlLFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICBzZWN1cmU6ICFpc1B1YmxpY1JlZ2lzdHJhdGlvbiAmJiAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgdHJhY2s6IHJlcXVlc3QudHJhY2sgIT09IGZhbHNlXG4gICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnByb3BlcnR5XSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnZva2VScGMocmVxdWVzdCkge1xuICAgICAgICBsZXQgcnBjUmVxdWVzdCA9IHt9O1xuICAgICAgICBycGNSZXF1ZXN0LmlkID0gcmVxdWVzdC52aWV3SWQ7XG5cbiAgICAgICAgbGV0IHNwbGl0ID0gcmVxdWVzdC5zZXJ2aWNlLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICBycGNSZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcnBjUmVxdWVzdC5tZXRob2QgPSByZXF1ZXN0LnNlcnZpY2UucHJvY2VkdXJlTmFtZTtcblxuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocmVxdWVzdC5zZXJ2aWNlLnBhcmFtZXRlcnMpICYmIHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBycGNSZXF1ZXN0LnBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSByZXF1ZXN0LnNlcnZpY2UucGFyYW1ldGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIubmFtZSA9IHBhcmFtZXRlckNvbmZpZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuaW5kZXggPSBwYXJhbWV0ZXJDb25maWcuaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSB2YWwudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICgocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcmFtZXRlci52YWxpZGF0b3IucmVxdWlyZWQgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkLCBwYXJhbWV0ZXIubmFtZSkpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyQ29uZmlnLmh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3BhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJwY1JlcXVlc3QucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICB2aWV3SWQ6IHJlcXVlc3Qudmlld0lkLFxuICAgICAgICAgICAgICAgIHVybDogbG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvJyArIG1vZHVsZSArICcvYXBpL3YxL3JwYy9pbnZva2UnLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXF1ZXN0LnNlcnZpY2UudHlwZSxcbiAgICAgICAgICAgICAgICBzZWN1cmU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgYm9keTogcnBjUmVxdWVzdCxcbiAgICAgICAgICAgICAgICB0cmFjazogcmVxdWVzdC50cmFjayAhPT0gZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmZXRjaFdpdGhDdXN0b21Db25maWcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJyk7XG4gICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpZFRva2VuJyk7XG5cbiAgICAgICAgbGV0IGRhdGEgPSByZXF1ZXN0LmJvZHkgPyAocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gcmVxdWVzdC5ib2R5IDogSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KSA6IG51bGw7XG4gICAgICAgIGxldCBmZXRjaENvbmZpZyA9IHJlcXVlc3QuY29uZmlnO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGZldGNoQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocmVxdWVzdC5zZWN1cmUpIHx8IHJlcXVlc3Quc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBVdGlscy5pc051bGwocmVxdWVzdC5tZXRob2QpID8gJ0dFVCcgOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHJlcXVlc3QuY29udGVudFR5cGUgPyByZXF1ZXN0LmNvbnRlbnRUeXBlIDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKHJlcXVlc3QubWV0aG9kKSA/ICdHRVQnIDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiByZXF1ZXN0LmNvbnRlbnRUeXBlID8gcmVxdWVzdC5jb250ZW50VHlwZSA6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogcmVxdWVzdC5hY2NlcHQgPyByZXF1ZXN0LmFjY2VwdCA6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3Jlc3QnID09PSByZXF1ZXN0LnNlcnZpY2VUeXBlICYmICEocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZSA/IHJlcXVlc3QuY29udGVudFR5cGUgOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChyZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydBY2NlcHQnXSA9IHJlcXVlc3QuYWNjZXB0ID8gcmVxdWVzdC5hY2NlcHQgOiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuZG93bmxvYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJyYnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vdXJsICs9ICdhY2Nlc3NfdG9rZW49JyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgICAgIC8vdXJsICs9ICcmaWRUb2tlbj0nICsgaWRUb2tlbjtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVByaW1hcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpKTtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVNlY29uZGFyeUNvbG9yPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uU2Vjb25kYXJ5Q29sb3IoKSk7XG5cbiAgICAgICAgICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkVG9rZW4nOiBpZFRva2VuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLnRoZW4oZXJyb3JEYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3JEYXRhLm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1EaXNwb3NpdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IFwiZG93bmxvYWRlZC1maWxlXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24gJiYgY29udGVudERpc3Bvc2l0aW9uLmluY2x1ZGVzKFwiZmlsZW5hbWU9XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBjb250ZW50RGlzcG9zaXRpb24uc3BsaXQoXCJmaWxlbmFtZT1cIilbMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvW1wiJ10vZywgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCkudGhlbihibG9iID0+ICh7YmxvYiwgZmlsZW5hbWV9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7YmxvYiwgZmlsZW5hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKFwiRG93bmxvYWQgZmFpbGVkOlwiLCBlcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHJlcXVlc3QudHJhY2spIHx8IHJlcXVlc3QudHJhY2sgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGZldGNoKGVuY29kZVVSSSh1cmwpLCBmZXRjaENvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbihzdGF0dXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oanNvbilcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEobnVsbCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnN0YXR1cyA9PT0gNDAxICYmICF1cmwuZW5kc1dpdGgoJy9sb2dvdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIubmF2aWdhdGUoJy9sb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKGNvbXBvbmVudCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyB8fCBVdGlscy5pc051bGwoZGF0YSkgfHwgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGFUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoc3VjY2Vzc01lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFwcGxpY2F0aW9uTWFuYWdlci5wb3B1bGF0ZVRlbXBsYXRlKHN1Y2Nlc3NNZXNzYWdlLCByZXNwb25zZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFJlc3RTZXJ2aWNlKCk7XG5cbmV4cG9ydCBjb25zdCBpbnZva2VScGMgPSAocmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5pbnZva2VScGMocmVxdWVzdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW52b2tlUmVzdCA9IChyZXF1ZXN0KSA9PiB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmludm9rZVJlc3QocmVxdWVzdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxvQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsbUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUE0RCxTQUFBRCx1QkFBQVMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFHLFFBQUFILENBQUEsRUFBQUksQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLE9BQUFNLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFSLENBQUEsR0FBQUksQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVgsQ0FBQSxFQUFBSSxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBZixDQUFBLGFBQUFJLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRCxPQUFBLENBQUFHLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQWUsZUFBQSxDQUFBbkIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQXJCLENBQUEsRUFBQU0sTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFGLE9BQUEsQ0FBQUcsTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUF0QixDQUFBLEVBQUFJLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFKLENBQUE7QUFBQSxTQUFBbUIsZ0JBQUFuQixDQUFBLEVBQUFJLENBQUEsRUFBQUMsQ0FBQSxZQUFBRCxDQUFBLEdBQUFtQixjQUFBLENBQUFuQixDQUFBLE1BQUFKLENBQUEsR0FBQU0sTUFBQSxDQUFBZ0IsY0FBQSxDQUFBdEIsQ0FBQSxFQUFBSSxDQUFBLElBQUFvQixLQUFBLEVBQUFuQixDQUFBLEVBQUFPLFVBQUEsTUFBQWEsWUFBQSxNQUFBQyxRQUFBLFVBQUExQixDQUFBLENBQUFJLENBQUEsSUFBQUMsQ0FBQSxFQUFBTCxDQUFBO0FBQUEsU0FBQXVCLGVBQUFsQixDQUFBLFFBQUFzQixDQUFBLEdBQUFDLFlBQUEsQ0FBQXZCLENBQUEsdUNBQUFzQixDQUFBLEdBQUFBLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFDLGFBQUF2QixDQUFBLEVBQUFELENBQUEsMkJBQUFDLENBQUEsS0FBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFMLENBQUEsR0FBQUssQ0FBQSxDQUFBd0IsTUFBQSxDQUFBQyxXQUFBLGtCQUFBOUIsQ0FBQSxRQUFBMkIsQ0FBQSxHQUFBM0IsQ0FBQSxDQUFBK0IsSUFBQSxDQUFBMUIsQ0FBQSxFQUFBRCxDQUFBLHVDQUFBdUIsQ0FBQSxTQUFBQSxDQUFBLFlBQUFLLFNBQUEseUVBQUE1QixDQUFBLEdBQUE2QixNQUFBLEdBQUFDLE1BQUEsRUFBQTdCLENBQUE7QUFFckQsTUFBTThCLFFBQVEsR0FBQUMsT0FBQSxDQUFBRCxRQUFBLEdBQUdFLE1BQU0sQ0FBQ0YsUUFBUSxDQUFDRyxRQUFRLEdBQUcsSUFBSSxHQUFHRCxNQUFNLENBQUNGLFFBQVEsQ0FBQ0ksUUFBUTtBQUNsRixNQUFNQyxNQUFNLEdBQUlDLFFBQVEsSUFBSztFQUN6QixJQUFJQSxRQUFRLENBQUNDLEVBQUUsRUFBRTtJQUNiLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDSCxRQUFRLENBQUM7RUFDcEMsQ0FBQyxNQUFNO0lBQ0gsT0FBT0UsT0FBTyxDQUFDRSxNQUFNLENBQUNKLFFBQVEsQ0FBQztFQUNuQztBQUNKLENBQUM7QUFFRCxNQUFNSyxJQUFJLEdBQUlMLFFBQVEsSUFBSztFQUN2QixPQUFPQSxRQUFRLENBQUNNLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNQyxXQUFXLENBQUM7RUFDZEMsZ0JBQWdCQSxDQUFDQyxVQUFVLEVBQUU7SUFDekIsSUFBSUMsY0FBSyxDQUFDQyxNQUFNLENBQUNGLFVBQVUsQ0FBQyxFQUFFO01BQzFCLE9BQU8sSUFBSTtJQUNmO0lBRUEsT0FBT0EsVUFBVSxDQUFDRyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUdGLGNBQUssQ0FBQ0MsTUFBTSxDQUFDRixVQUFVLENBQUMxQixLQUFLLENBQUMsR0FBRyxLQUFLO0VBQ3RGO0VBRUE4QixVQUFVQSxDQUFDQyxPQUFPLEVBQUU7SUFDaEIsSUFBSUMsT0FBTyxHQUFHRCxPQUFPLENBQUNDLE9BQU87SUFDN0IsSUFBSUMsR0FBRyxHQUFHRCxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJRixPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUM3RUYsT0FBTyxDQUFDQyxHQUFHLEdBQUd0QixRQUFRLE1BQUF3QixNQUFBLENBQU1DLDJCQUFrQixDQUFDQyxjQUFjLENBQUMsQ0FBQyxHQUFHTCxPQUFPLENBQUNDLEdBQUcsQ0FBRTtJQUNuRixJQUFJSyxXQUFXLEdBQUcsSUFBSTtJQUN0QixJQUFJQyxPQUFPLEdBQUdQLE9BQU8sQ0FBQ08sT0FBTztJQUU3QixPQUFPLElBQUlwQixPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDcEMsSUFBSSxDQUFDTSxjQUFLLENBQUNDLE1BQU0sQ0FBQ0ksT0FBTyxDQUFDUSxVQUFVLENBQUMsRUFBRTtRQUNuQyxJQUFJQyxXQUFXLEdBQUcsRUFBRTtRQUNwQixJQUFJQyxjQUFjLEdBQUcsRUFBRTtRQUN2QixJQUFJQyxxQkFBcUIsR0FBRyxLQUFLO1FBQ2pDLEtBQUssTUFBTUMsU0FBUyxJQUFJWixPQUFPLENBQUNRLFVBQVUsRUFBRTtVQUN4QyxJQUFJSyxjQUFjLEdBQUdULDJCQUFrQixDQUFDVSxxQkFBcUIsQ0FBQ0YsU0FBUyxFQUFFYixPQUFPLENBQUNnQixLQUFLLEdBQUdoQixPQUFPLENBQUNnQixLQUFLLENBQUNDLElBQUksR0FBRyxJQUFJLENBQUM7VUFDbkgsSUFBSSxDQUFDckIsY0FBSyxDQUFDQyxNQUFNLENBQUNnQixTQUFTLENBQUNLLFNBQVMsQ0FBQyxLQUM3QkwsU0FBUyxDQUFDSyxTQUFTLENBQUNDLFFBQVEsSUFBSSxDQUFDdkIsY0FBSyxDQUFDd0IseUJBQXlCLENBQUNQLFNBQVMsQ0FBQ0ssU0FBUyxDQUFDQyxRQUFRLEVBQUVOLFNBQVMsQ0FBQ1EsSUFBSSxDQUFDLElBQzFHekIsY0FBSyxDQUFDd0IseUJBQXlCLENBQUNQLFNBQVMsQ0FBQ0ssU0FBUyxDQUFDSSxRQUFRLElBQUkxQixjQUFLLENBQUN3Qix5QkFBeUIsQ0FBQ1AsU0FBUyxDQUFDSyxTQUFTLENBQUNJLFFBQVEsRUFBRVQsU0FBUyxDQUFDUSxJQUFJLENBQUMsQ0FBRyxDQUFDLElBQ3ZKLElBQUksQ0FBQzNCLGdCQUFnQixDQUFDb0IsY0FBYyxDQUFDLEVBQUU7WUFDMUN4QixNQUFNLENBQUM7Y0FDSGlDLFNBQVMsRUFBRSxtQkFBbUI7Y0FDOUJWO1lBQ0osQ0FBQyxDQUFDO1lBRUY7VUFDSjtVQUVBLElBQUlXLGlCQUFpQixHQUFHWCxTQUFTLENBQUNXLGlCQUFpQjtVQUNuRCxJQUFJNUIsY0FBSyxDQUFDQyxNQUFNLENBQUMyQixpQkFBaUIsQ0FBQyxFQUFFO1lBQ2pDQSxpQkFBaUIsR0FBRyxpQkFBaUI7VUFDekM7VUFFQSxJQUFJQSxpQkFBaUIsS0FBSyxpQkFBaUIsRUFBRTtZQUN6QyxJQUFJLENBQUM1QixjQUFLLENBQUNDLE1BQU0sQ0FBQ2lCLGNBQWMsQ0FBQyxFQUFFO2NBQy9CLElBQUlKLFdBQVcsQ0FBQ2hELE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCZ0QsV0FBVyxJQUFJLEdBQUc7Y0FDdEI7Y0FFQSxJQUFJLENBQUNkLGNBQUssQ0FBQ0MsTUFBTSxDQUFDSSxPQUFPLENBQUN3QixxQkFBcUIsQ0FBQyxJQUFJeEIsT0FBTyxDQUFDd0IscUJBQXFCLEtBQUssSUFBSSxFQUFFO2dCQUN4RmYsV0FBVyxJQUFJSSxjQUFjLENBQUNZLElBQUksR0FBRyxHQUFHO2NBQzVDO2NBRUFoQixXQUFXLElBQUlHLFNBQVMsQ0FBQ1EsSUFBSSxHQUFHLEdBQUc7Y0FDbkNYLFdBQVcsSUFBSyxPQUFPSSxjQUFjLENBQUM3QyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU82QyxjQUFjLENBQUM3QyxLQUFLLEtBQUssUUFBUSxHQUNoRzZDLGNBQWMsQ0FBQzdDLEtBQUssR0FBRzBELElBQUksQ0FBQ0MsU0FBUyxDQUFDZCxjQUFjLENBQUM3QyxLQUFLLENBQUU7WUFDcEU7VUFDSjtVQUVBLElBQUl1RCxpQkFBaUIsS0FBSyxlQUFlLEVBQUU7WUFDdkMsSUFBSSxDQUFDNUIsY0FBSyxDQUFDQyxNQUFNLENBQUNpQixjQUFjLENBQUMsRUFBRTtjQUMvQixJQUFJZSxhQUFhO2NBQ2pCLElBQUloQixTQUFTLENBQUNpQixNQUFNLEVBQUU7Z0JBQ2xCRCxhQUFhLEdBQUcsT0FBT2YsY0FBYyxDQUFDN0MsS0FBSyxLQUFLLFFBQVEsR0FDbEQ4RCxrQkFBa0IsQ0FBQ0osSUFBSSxDQUFDQyxTQUFTLENBQUNkLGNBQWMsQ0FBQzdDLEtBQUssQ0FBQyxDQUFDLEdBQUc2QyxjQUFjLENBQUNrQixZQUFZLEtBQUssWUFBWSxHQUNyR0Qsa0JBQWtCLENBQUNqQixjQUFjLENBQUM3QyxLQUFLLENBQUMsR0FBRzhELGtCQUFrQixDQUFDakIsY0FBYyxDQUFDO2NBQ3pGLENBQUMsTUFBTTtnQkFDSGUsYUFBYSxHQUFHLE9BQU9mLGNBQWMsQ0FBQzdDLEtBQUssS0FBSyxRQUFRLEdBQ2xEMEQsSUFBSSxDQUFDQyxTQUFTLENBQUNkLGNBQWMsQ0FBQzdDLEtBQUssQ0FBQyxHQUFHNkMsY0FBYyxDQUFDa0IsWUFBWSxLQUFLLFlBQVksR0FDakZsQixjQUFjLENBQUM3QyxLQUFLLEdBQUc2QyxjQUFjO2NBQ2pEOztjQUVBO2NBQ0EsSUFBSSxDQUFDbEIsY0FBSyxDQUFDQyxNQUFNLENBQUNnQixTQUFTLENBQUNRLElBQUksQ0FBQyxJQUFJbkIsR0FBRyxDQUFDK0IsT0FBTyxDQUFDLEdBQUcsR0FBR3BCLFNBQVMsQ0FBQ1EsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0VuQixHQUFHLEdBQUdBLEdBQUcsQ0FBQ2dDLE9BQU8sQ0FBQyxHQUFHLEdBQUdyQixTQUFTLENBQUNRLElBQUksR0FBRyxHQUFHLEVBQUVRLGFBQWEsQ0FBQztjQUNoRSxDQUFDLE1BQU07Z0JBQ0g7Z0JBQ0FsQixjQUFjLElBQUksR0FBRyxHQUFHa0IsYUFBYTtjQUN6QztZQUNKO1VBQ0o7VUFFQSxJQUFJTCxpQkFBaUIsS0FBSyxRQUFRLEVBQUU7WUFDaEMsSUFBSSxDQUFDNUIsY0FBSyxDQUFDQyxNQUFNLENBQUNpQixjQUFjLENBQUMsRUFBRTtjQUMvQixJQUFJLENBQUNOLE9BQU8sRUFBRTtnQkFDVkEsT0FBTyxHQUFHLENBQUMsQ0FBQztjQUNoQjtjQUVBQSxPQUFPLENBQUNLLFNBQVMsQ0FBQ1EsSUFBSSxDQUFDLEdBQUdQLGNBQWMsQ0FBQzdDLEtBQUs7WUFDbEQ7VUFDSjtVQUVBLElBQUl1RCxpQkFBaUIsS0FBSyxjQUFjLEVBQUU7WUFDdEMsSUFBSVoscUJBQXFCLEVBQUU7Y0FDdkJ0QixNQUFNLENBQUMsSUFBSTZDLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2NBQ3ZEO1lBQ0o7WUFDQTtZQUNBO1lBQ0E7WUFDQXZCLHFCQUFxQixHQUFHLElBQUk7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQ2xCLGdCQUFnQixDQUFDb0IsY0FBYyxDQUFDLEVBQUU7Y0FDeENQLFdBQVcsR0FBR08sY0FBYyxDQUFDa0IsWUFBWSxLQUFLLFlBQVksR0FBR2xCLGNBQWMsQ0FBQzdDLEtBQUssR0FBRzZDLGNBQWM7WUFDdEc7VUFDSjtRQUNKO1FBRUEsSUFBSUgsY0FBYyxDQUFDakQsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUMzQndDLEdBQUcsSUFBSVMsY0FBYztRQUN6QjtRQUVBLElBQUlELFdBQVcsQ0FBQ2hELE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDeEJ3QyxHQUFHLElBQUksR0FBRztVQUNWQSxHQUFHLElBQUlRLFdBQVc7UUFDdEI7TUFDSjtNQUVBLElBQUkwQixXQUFXLEdBQUcsSUFBSTtNQUV0QixJQUFJLENBQUN4QyxjQUFLLENBQUNDLE1BQU0sQ0FBQ1csT0FBTyxDQUFDLEVBQUU7UUFDeEI0QixXQUFXLEdBQUc1QixPQUFPLENBQUMsY0FBYyxDQUFDO01BQ3pDOztNQUVBO01BQ0E7TUFDQTtNQUNBO01BQ0EsTUFBTTZCLE1BQU0sR0FBR3BDLE9BQU8sQ0FBQ29DLE1BQU0sR0FDdkJwQyxPQUFPLENBQUNvQyxNQUFNLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEdBQzNCL0IsV0FBVyxLQUFLLElBQUksR0FBRyxNQUFNLEdBQUcsS0FBTTtNQUU3QyxJQUFJQSxXQUFXLEtBQUssSUFBSSxJQUFJOEIsTUFBTSxLQUFLLEtBQUssRUFBRTtRQUMxQy9DLE1BQU0sQ0FBQyxJQUFJNkMsS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7UUFDbkY7TUFDSjs7TUFFQTtNQUNBO01BQ0EsSUFBSUUsTUFBTSxLQUFLLEtBQUssS0FBS0QsV0FBVyxLQUFLLGlCQUFpQixJQUFJQSxXQUFXLEtBQUssMEJBQTBCLENBQUMsRUFBRTtRQUN2RyxJQUFJLENBQUNHLHFCQUFxQixDQUFDO1VBQ3ZCQyxNQUFNLEVBQUV4QyxPQUFPLENBQUN3QyxNQUFNO1VBQ3RCdEMsR0FBRztVQUNIdUMsV0FBVyxFQUFFekMsT0FBTyxDQUFDQyxPQUFPLENBQUN5QixJQUFJO1VBQ2pDZ0IsTUFBTSxFQUFFMUMsT0FBTyxDQUFDMEMsTUFBTTtVQUN0QkwsTUFBTSxFQUFFLEtBQUs7VUFDYk0sUUFBUSxFQUFFLElBQUk7VUFDZG5DO1FBQ0osQ0FBQyxDQUFDLENBQUNvQyxJQUFJLENBQUMsTUFBTTtVQUNWdkQsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQ3dELEtBQUssQ0FBRXBHLENBQUMsSUFBSztVQUNaNkMsTUFBTSxDQUFDN0MsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDO1FBQ0Y7TUFDSjs7TUFFQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0k7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNKLE1BQU1xRyxvQkFBb0IsR0FBRzdDLE9BQU8sQ0FBQ0MsR0FBRyxJQUM3QixnQ0FBZ0MsQ0FBQzZDLElBQUksQ0FBQzlDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO01BQzdELElBQUksQ0FBQ3FDLHFCQUFxQixDQUFDO1FBQ3ZCQyxNQUFNLEVBQUV4QyxPQUFPLENBQUN3QyxNQUFNO1FBQ3RCdEMsR0FBRztRQUNIdUMsV0FBVyxFQUFFekMsT0FBTyxDQUFDQyxPQUFPLENBQUN5QixJQUFJO1FBQ2pDVyxNQUFNO1FBQ05LLE1BQU0sRUFBRSxDQUFDSSxvQkFBb0IsSUFBSSxDQUFDN0MsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDbkU2QyxJQUFJLEVBQUV6QyxXQUFXO1FBQ2pCQyxPQUFPO1FBQ1B5QyxLQUFLLEVBQUVqRCxPQUFPLENBQUNpRCxLQUFLLEtBQUs7TUFDN0IsQ0FBQyxDQUFDLENBQUNMLElBQUksQ0FBRTFELFFBQVEsSUFBSztRQUNsQixJQUFJZ0UsSUFBSSxHQUFHdEQsY0FBSyxDQUFDdUQsb0JBQW9CLENBQUNuRCxPQUFPLENBQUNvRCxrQkFBa0IsQ0FBQztRQUNqRSxJQUFJLENBQUN4RCxjQUFLLENBQUNDLE1BQU0sQ0FBQ3FELElBQUksQ0FBQ0csV0FBVyxDQUFDLElBQUksQ0FBQ3pELGNBQUssQ0FBQ0MsTUFBTSxDQUFDcUQsSUFBSSxDQUFDSSxRQUFRLENBQUMsRUFBRTtVQUNqRUosSUFBSSxDQUFDRyxXQUFXLENBQUNILElBQUksQ0FBQ0ksUUFBUSxDQUFDLEdBQUdwRSxRQUFRO1FBQzlDO1FBRUFHLE9BQU8sQ0FBQyxJQUFJLENBQUNrRSw2QkFBNkIsQ0FBQ3ZELE9BQU8sQ0FBQ3dELFNBQVMsRUFBRXRFLFFBQVEsRUFBRWMsT0FBTyxDQUFDd0MsTUFBTSxFQUFFeEMsT0FBTyxDQUFDeUQsY0FBYyxDQUFDLENBQUM7TUFDcEgsQ0FBQyxDQUFDLENBQUNaLEtBQUssQ0FBRXBHLENBQUMsSUFBSztRQUNaNkMsTUFBTSxDQUFDN0MsQ0FBQyxDQUFDO01BQ2IsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047RUFFQWlILFNBQVNBLENBQUMxRCxPQUFPLEVBQUU7SUFDZixJQUFJMkQsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQkEsVUFBVSxDQUFDQyxFQUFFLEdBQUc1RCxPQUFPLENBQUN3QyxNQUFNO0lBRTlCLElBQUlxQixLQUFLLEdBQUc3RCxPQUFPLENBQUNDLE9BQU8sQ0FBQzZELFNBQVMsQ0FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNoREYsVUFBVSxDQUFDMUQsT0FBTyxHQUFHNEQsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QkYsVUFBVSxDQUFDdEIsTUFBTSxHQUFHckMsT0FBTyxDQUFDQyxPQUFPLENBQUM4RCxhQUFhO0lBRWpELElBQUlDLE1BQU0sR0FBR0gsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQztJQUVuQyxJQUFJekQsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixPQUFPLElBQUlwQixPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDcEMsSUFBSSxDQUFDTSxjQUFLLENBQUNDLE1BQU0sQ0FBQ0csT0FBTyxDQUFDQyxPQUFPLENBQUNRLFVBQVUsQ0FBQyxJQUFJVCxPQUFPLENBQUNDLE9BQU8sQ0FBQ1EsVUFBVSxDQUFDL0MsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwRmlHLFVBQVUsQ0FBQ2xELFVBQVUsR0FBRyxFQUFFO1FBQzFCLEtBQUssSUFBSXJDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzRCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDUSxVQUFVLENBQUMvQyxNQUFNLEVBQUVVLENBQUMsRUFBRSxFQUFFO1VBQ3hELElBQUk4RixlQUFlLEdBQUdsRSxPQUFPLENBQUNDLE9BQU8sQ0FBQ1EsVUFBVSxDQUFDckMsQ0FBQyxDQUFDO1VBQ25ELElBQUl5QyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1VBQ2xCQSxTQUFTLENBQUNRLElBQUksR0FBRzZDLGVBQWUsQ0FBQzdDLElBQUk7VUFDckNSLFNBQVMsQ0FBQ3NELEtBQUssR0FBR0QsZUFBZSxDQUFDQyxLQUFLO1VBRXZDLElBQUlDLEdBQUcsR0FBRy9ELDJCQUFrQixDQUFDVSxxQkFBcUIsQ0FBQ21ELGVBQWUsRUFBRWxFLE9BQU8sQ0FBQ2dCLEtBQUssR0FBR2hCLE9BQU8sQ0FBQ2dCLEtBQUssQ0FBQ0MsSUFBSSxHQUFHLElBQUksQ0FBQztVQUU5RyxJQUFJLENBQUNyQixjQUFLLENBQUNDLE1BQU0sQ0FBQ3VFLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCdkQsU0FBUyxDQUFDNUMsS0FBSyxHQUFHbUcsR0FBRyxDQUFDbkcsS0FBSztZQUMzQjRDLFNBQVMsQ0FBQ2EsSUFBSSxHQUFHMEMsR0FBRyxDQUFDMUMsSUFBSTtVQUM3QjtVQUVBLElBQUksT0FBT2IsU0FBUyxDQUFDNUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUN4QzRDLFNBQVMsQ0FBQzVDLEtBQUssR0FBRyxJQUFJO1VBQzFCO1VBRUEsSUFBSTJCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDZ0IsU0FBUyxDQUFDYSxJQUFJLENBQUMsRUFBRTtZQUM5QmIsU0FBUyxDQUFDYSxJQUFJLEdBQUcsUUFBUTtVQUM3QjtVQUVBLElBQUksQ0FBQzlCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDZ0IsU0FBUyxDQUFDSyxTQUFTLENBQUMsS0FDN0JMLFNBQVMsQ0FBQ0ssU0FBUyxDQUFDQyxRQUFRLElBQUksQ0FBQ3ZCLGNBQUssQ0FBQ3dCLHlCQUF5QixDQUFDUCxTQUFTLENBQUNLLFNBQVMsQ0FBQ0MsUUFBUSxFQUFFTixTQUFTLENBQUNRLElBQUksQ0FBQyxJQUMxR3pCLGNBQUssQ0FBQ3dCLHlCQUF5QixDQUFDUCxTQUFTLENBQUNLLFNBQVMsQ0FBQ0ksUUFBUSxJQUFJMUIsY0FBSyxDQUFDd0IseUJBQXlCLENBQUNQLFNBQVMsQ0FBQ0ssU0FBUyxDQUFDSSxRQUFRLEVBQUVULFNBQVMsQ0FBQ1EsSUFBSSxDQUFDLENBQUcsQ0FBQyxJQUN2SixJQUFJLENBQUMzQixnQkFBZ0IsQ0FBQ21CLFNBQVMsQ0FBQzVDLEtBQUssQ0FBQyxFQUFFO1lBQzNDcUIsTUFBTSxDQUFDO2NBQ0hpQyxTQUFTLEVBQUUsbUJBQW1CO2NBQzlCVjtZQUNKLENBQUMsQ0FBQztZQUVGO1VBQ0o7VUFFQSxJQUFJcUQsZUFBZSxDQUFDMUMsaUJBQWlCLEtBQUssUUFBUSxFQUFFO1lBQ2hELElBQUksQ0FBQzVCLGNBQUssQ0FBQ0MsTUFBTSxDQUFDZ0IsU0FBUyxDQUFDNUMsS0FBSyxDQUFDLEVBQUU7Y0FDaEMsSUFBSSxDQUFDdUMsT0FBTyxFQUFFO2dCQUNWQSxPQUFPLEdBQUcsQ0FBQyxDQUFDO2NBQ2hCO2NBRUFBLE9BQU8sQ0FBQ0ssU0FBUyxDQUFDUSxJQUFJLENBQUMsR0FBR1IsU0FBUyxDQUFDNUMsS0FBSztZQUM3QztVQUNKLENBQUMsTUFBTTtZQUNIMEYsVUFBVSxDQUFDbEQsVUFBVSxDQUFDbkQsSUFBSSxDQUFDdUQsU0FBUyxDQUFDO1VBQ3pDO1FBQ0o7TUFDSjtNQUVBLElBQUksQ0FBQzBCLHFCQUFxQixDQUFDO1FBQ3ZCQyxNQUFNLEVBQUV4QyxPQUFPLENBQUN3QyxNQUFNO1FBQ3RCdEMsR0FBRyxFQUFFdEIsUUFBUSxHQUFHeUIsMkJBQWtCLENBQUNDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHMEQsTUFBTSxHQUFHLG9CQUFvQjtRQUN6RnZCLFdBQVcsRUFBRXpDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDeUIsSUFBSTtRQUNqQ2dCLE1BQU0sRUFBRSxJQUFJO1FBQ1pMLE1BQU0sRUFBRSxNQUFNO1FBQ2RXLElBQUksRUFBRVcsVUFBVTtRQUNoQlYsS0FBSyxFQUFFakQsT0FBTyxDQUFDaUQsS0FBSyxLQUFLLEtBQUs7UUFDOUJiLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0I1QjtNQUNKLENBQUMsQ0FBQyxDQUNHb0MsSUFBSSxDQUFFMUQsUUFBUSxJQUFLO1FBQ2hCLElBQUljLE9BQU8sQ0FBQ29ELGtCQUFrQixFQUFFO1VBQzVCLElBQUlGLElBQUksR0FBR3RELGNBQUssQ0FBQ3VELG9CQUFvQixDQUFDbkQsT0FBTyxDQUFDb0Qsa0JBQWtCLENBQUM7VUFDakUsSUFBSSxDQUFDeEQsY0FBSyxDQUFDQyxNQUFNLENBQUNxRCxJQUFJLENBQUNHLFdBQVcsQ0FBQyxJQUFJLENBQUN6RCxjQUFLLENBQUNDLE1BQU0sQ0FBQ3FELElBQUksQ0FBQ0ksUUFBUSxDQUFDLEVBQUU7WUFDakVKLElBQUksQ0FBQ0csV0FBVyxDQUFDSCxJQUFJLENBQUNJLFFBQVEsQ0FBQyxHQUFHcEUsUUFBUTtVQUM5QztRQUNKO1FBRUFHLE9BQU8sQ0FBQyxJQUFJLENBQUNrRSw2QkFBNkIsQ0FBQ3ZELE9BQU8sQ0FBQ3dELFNBQVMsRUFBRXRFLFFBQVEsRUFBRWMsT0FBTyxDQUFDd0MsTUFBTSxFQUFFeEMsT0FBTyxDQUFDeUQsY0FBYyxDQUFDLENBQUM7TUFDcEgsQ0FBQyxDQUFDLENBQUNaLEtBQUssQ0FBRXBHLENBQUMsSUFBSztRQUNoQjZDLE1BQU0sQ0FBQzdDLENBQUMsQ0FBQztNQUNiLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOO0VBRUE4RixxQkFBcUJBLENBQUN2QyxPQUFPLEVBQUU7SUFDM0IsTUFBTXFFLFdBQVcsR0FBR0MsY0FBYyxDQUFDQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3pELE1BQU1DLE9BQU8sR0FBR0YsY0FBYyxDQUFDQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBRWpELElBQUl0RCxJQUFJLEdBQUdqQixPQUFPLENBQUNnRCxJQUFJLEdBQUloRCxPQUFPLENBQUNnRCxJQUFJLFlBQVl5QixRQUFRLEdBQUl6RSxPQUFPLENBQUNnRCxJQUFJLEdBQUdyQixJQUFJLENBQUNDLFNBQVMsQ0FBQzVCLE9BQU8sQ0FBQ2dELElBQUksQ0FBQyxHQUFHLElBQUk7SUFDakgsSUFBSTBCLFdBQVcsR0FBRzFFLE9BQU8sQ0FBQzJFLE1BQU07SUFFaEMsT0FBTyxJQUFJdkYsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3BDLElBQUlNLGNBQUssQ0FBQ0MsTUFBTSxDQUFDNkUsV0FBVyxDQUFDLEVBQUU7UUFDM0IsSUFBSTlFLGNBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUMwQyxNQUFNLENBQUMsSUFBSTFDLE9BQU8sQ0FBQzBDLE1BQU0sS0FBSyxJQUFJLEVBQUU7VUFDekRnQyxXQUFXLEdBQUc7WUFDVnJDLE1BQU0sRUFBRXpDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNxQyxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUdyQyxPQUFPLENBQUNxQyxNQUFNO1lBQzdEN0IsT0FBTyxFQUFBaEQsYUFBQSxDQUFBQSxhQUFBLEtBQ0F3QyxPQUFPLENBQUNRLE9BQU87Y0FDbEIsY0FBYyxFQUFFUixPQUFPLENBQUNvQyxXQUFXLEdBQUdwQyxPQUFPLENBQUNvQyxXQUFXLEdBQUcsbUNBQW1DO2NBQy9GLGVBQWUsRUFBRSxTQUFTLEdBQUdpQyxXQUFXO2NBQ3hDLFNBQVMsRUFBRUc7WUFBTyxFQUVyQjtZQUNEeEIsSUFBSSxFQUFFL0I7VUFDVixDQUFDO1FBQ0wsQ0FBQyxNQUFNO1VBQ0h5RCxXQUFXLEdBQUc7WUFDVnJDLE1BQU0sRUFBRXpDLGNBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNxQyxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUdyQyxPQUFPLENBQUNxQyxNQUFNO1lBQzdEN0IsT0FBTyxFQUFBaEQsYUFBQSxDQUFBQSxhQUFBLEtBQ0F3QyxPQUFPLENBQUNRLE9BQU87Y0FDbEIsY0FBYyxFQUFFUixPQUFPLENBQUNvQyxXQUFXLEdBQUdwQyxPQUFPLENBQUNvQyxXQUFXLEdBQUcsa0JBQWtCO2NBQzlFLFFBQVEsRUFBRXBDLE9BQU8sQ0FBQzRFLE1BQU0sR0FBRzVFLE9BQU8sQ0FBQzRFLE1BQU0sR0FBRztZQUFrQixFQUNqRTtZQUNENUIsSUFBSSxFQUFFL0I7VUFDVixDQUFDO1FBQ0w7UUFFQSxJQUFJLE1BQU0sS0FBS2pCLE9BQU8sQ0FBQ3lDLFdBQVcsSUFBSSxFQUFFekMsT0FBTyxDQUFDZ0QsSUFBSSxZQUFZeUIsUUFBUSxDQUFDLEVBQUU7VUFDdkVDLFdBQVcsQ0FBQ2xFLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBR1IsT0FBTyxDQUFDb0MsV0FBVyxHQUFHcEMsT0FBTyxDQUFDb0MsV0FBVyxHQUFHLGlDQUFpQztRQUN2SDtRQUVBLElBQUtwQyxPQUFPLENBQUNnRCxJQUFJLFlBQVl5QixRQUFRLEVBQUc7VUFDcEMsT0FBT0MsV0FBVyxDQUFDbEUsT0FBTyxDQUFDLGNBQWMsQ0FBQztVQUMxQ2tFLFdBQVcsQ0FBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBR1IsT0FBTyxDQUFDNEUsTUFBTSxHQUFHNUUsT0FBTyxDQUFDNEUsTUFBTSxHQUFHLGtCQUFrQjtRQUN4RjtNQUNKO01BRUEsSUFBSTVFLE9BQU8sQ0FBQ29DLFdBQVcsRUFBRTtRQUNyQnNDLFdBQVcsQ0FBQ2xFLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBR1IsT0FBTyxDQUFDb0MsV0FBVztNQUM3RDtNQUVBLElBQUlsQyxHQUFHLEdBQUdGLE9BQU8sQ0FBQ0UsR0FBRztNQUNyQixJQUFJRixPQUFPLENBQUMyQyxRQUFRLEVBQUU7UUFDbEIsSUFBSXpDLEdBQUcsQ0FBQytCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDdEIvQixHQUFHLElBQUksR0FBRztRQUNkLENBQUMsTUFBTTtVQUNIQSxHQUFHLElBQUksR0FBRztRQUNkOztRQUVBO1FBQ0E7UUFDQUEsR0FBRyxJQUFJLHFCQUFxQixHQUFHNkIsa0JBQWtCLENBQUMxQiwyQkFBa0IsQ0FBQ3dFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUNsRzNFLEdBQUcsSUFBSSx1QkFBdUIsR0FBRzZCLGtCQUFrQixDQUFDMUIsMkJBQWtCLENBQUN5RSw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7UUFFdEdDLEtBQUssQ0FBQzdFLEdBQUcsRUFBRTtVQUNQbUMsTUFBTSxFQUFFLEtBQUs7VUFDYjdCLE9BQU8sRUFBQWhELGFBQUEsQ0FBQUEsYUFBQSxLQUNBd0MsT0FBTyxDQUFDUSxPQUFPO1lBQ2xCLGVBQWUsRUFBRSxTQUFTLEdBQUc2RCxXQUFXO1lBQ3hDLFNBQVMsRUFBRUc7VUFBTztRQUcxQixDQUFDLENBQUMsQ0FDRzVCLElBQUksQ0FBQzFELFFBQVEsSUFBSTtVQUNkLElBQUksQ0FBQ0EsUUFBUSxDQUFDQyxFQUFFLEVBQUU7WUFDZCxPQUFPRCxRQUFRLENBQUNLLElBQUksQ0FBQyxDQUFDLENBQUNxRCxJQUFJLENBQUNvQyxTQUFTLElBQUk7Y0FDckMsTUFBTSxJQUFJN0MsS0FBSyxVQUFBL0IsTUFBQSxDQUFVbEIsUUFBUSxDQUFDRCxNQUFNLFFBQUFtQixNQUFBLENBQUs0RSxTQUFTLENBQUNDLE9BQU8sSUFBSS9GLFFBQVEsQ0FBQ2dHLFVBQVUsQ0FBRSxDQUFDO1lBQzVGLENBQUMsQ0FBQztVQUNOO1VBRUEsSUFBSUMsa0JBQWtCLEdBQUdqRyxRQUFRLENBQUNzQixPQUFPLENBQUM0RSxHQUFHLENBQUMscUJBQXFCLENBQUM7VUFDcEUsSUFBSUMsUUFBUSxHQUFHLGlCQUFpQjtVQUVoQyxJQUFJRixrQkFBa0IsSUFBSUEsa0JBQWtCLENBQUNHLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoRUQsUUFBUSxHQUFHRixrQkFBa0IsQ0FBQ3RCLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzBCLElBQUksQ0FBQyxDQUFDO1lBQzFERixRQUFRLEdBQUdBLFFBQVEsQ0FBQ25ELE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1VBQzVDO1VBRUEsT0FBT2hELFFBQVEsQ0FBQ3NHLElBQUksQ0FBQyxDQUFDLENBQUM1QyxJQUFJLENBQUM0QyxJQUFJLEtBQUs7WUFBQ0EsSUFBSTtZQUFFSDtVQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUNEekMsSUFBSSxDQUFDNkMsSUFBQSxJQUFzQjtVQUFBLElBQXJCO1lBQUNELElBQUk7WUFBRUg7VUFBUSxDQUFDLEdBQUFJLElBQUE7VUFDbkIsTUFBTXZGLEdBQUcsR0FBR3dGLEdBQUcsQ0FBQ0MsZUFBZSxDQUFDSCxJQUFJLENBQUM7VUFDckMsTUFBTUksQ0FBQyxHQUFHQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxHQUFHLENBQUM7VUFDckNGLENBQUMsQ0FBQ0csSUFBSSxHQUFHN0YsR0FBRztVQUNaMEYsQ0FBQyxDQUFDakQsUUFBUSxHQUFHMEMsUUFBUTtVQUNyQlEsUUFBUSxDQUFDN0MsSUFBSSxDQUFDZ0QsV0FBVyxDQUFDSixDQUFDLENBQUM7VUFDNUJBLENBQUMsQ0FBQ0ssS0FBSyxDQUFDLENBQUM7VUFDVEosUUFBUSxDQUFDN0MsSUFBSSxDQUFDa0QsV0FBVyxDQUFDTixDQUFDLENBQUM7VUFDNUJGLEdBQUcsQ0FBQ1MsZUFBZSxDQUFDakcsR0FBRyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNEMkMsS0FBSyxDQUFDdUQsS0FBSyxJQUFJQyxPQUFPLENBQUNELEtBQUssQ0FBQyxrQkFBa0IsRUFBRUEsS0FBSyxDQUFDLENBQUM7TUFDakUsQ0FBQyxNQUFNO1FBQ0gsSUFBSXhHLGNBQUssQ0FBQ0MsTUFBTSxDQUFDRyxPQUFPLENBQUNpRCxLQUFLLENBQUMsSUFBSWpELE9BQU8sQ0FBQ2lELEtBQUssS0FBSyxJQUFJLEVBQUU7VUFDdkQsSUFBQXFELGlDQUFZLEVBQ1IsSUFBSSxDQUFDQyxZQUFZLENBQUNyRyxHQUFHLEVBQUV3RSxXQUFXLEVBQUUxRSxPQUFPLENBQUN3QyxNQUFNLEVBQUV4QyxPQUFPLENBQUN5RCxjQUFjLENBQUMsQ0FBQ2IsSUFBSSxDQUFFMUQsUUFBUSxJQUFLO1lBQzNGRyxPQUFPLENBQUNILFFBQVEsQ0FBQztVQUNyQixDQUFDLENBQUMsQ0FBQzJELEtBQUssQ0FBRXBHLENBQUMsSUFBSztZQUNaNkMsTUFBTSxDQUFDN0MsQ0FBQyxDQUFDO1VBQ2IsQ0FBQyxDQUNMLENBQUM7UUFDTCxDQUFDLE1BQU07VUFDSCxJQUFJLENBQUM4SixZQUFZLENBQUNyRyxHQUFHLEVBQUV3RSxXQUFXLEVBQUUxRSxPQUFPLENBQUN3QyxNQUFNLEVBQUV4QyxPQUFPLENBQUN5RCxjQUFjLENBQUMsQ0FBQ2IsSUFBSSxDQUFFMUQsUUFBUSxJQUFLO1lBQzNGRyxPQUFPLENBQUNILFFBQVEsQ0FBQztVQUNyQixDQUFDLENBQUMsQ0FBQzJELEtBQUssQ0FBRXBHLENBQUMsSUFBSztZQUNaNkMsTUFBTSxDQUFDN0MsQ0FBQyxDQUFDO1VBQ2IsQ0FBQyxDQUFDO1FBQ047TUFDSjtJQUNKLENBQUMsQ0FBQztFQUNOO0VBRUE4SixZQUFZQSxDQUFDckcsR0FBRyxFQUFFd0UsV0FBVyxFQUFFbEMsTUFBTSxFQUFFaUIsY0FBYyxFQUFFO0lBQ25ELE9BQU8sSUFBSXJFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUNwQ3lGLEtBQUssQ0FBQ3lCLFNBQVMsQ0FBQ3RHLEdBQUcsQ0FBQyxFQUFFd0UsV0FBVyxDQUFDLENBQzdCOUIsSUFBSSxDQUFDM0QsTUFBTSxDQUFDLENBQ1oyRCxJQUFJLENBQUNyRCxJQUFJLENBQUMsQ0FDVnFELElBQUksQ0FBRTNCLElBQUksSUFBSztRQUNaNUIsT0FBTyxDQUFDLElBQUksQ0FBQ2tFLDZCQUE2QixDQUFDLElBQUksRUFBRXRDLElBQUksRUFBRXVCLE1BQU0sRUFBRWlCLGNBQWMsQ0FBQyxDQUFDO01BQ25GLENBQUMsQ0FBQyxDQUNEWixLQUFLLENBQUVwRyxDQUFDLElBQUs7UUFDVjRKLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDM0osQ0FBQyxDQUFDO1FBQ2hCLElBQUlBLENBQUMsQ0FBQ3dDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQ2lCLEdBQUcsQ0FBQ3VHLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtVQUM5Q3BHLDJCQUFrQixDQUFDcUcsS0FBSyxDQUFDLENBQUM7VUFDMUJyRywyQkFBa0IsQ0FBQ3NHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDekM7UUFFQXJILE1BQU0sQ0FBQzdDLENBQUMsQ0FBQztNQUNiLENBQUMsQ0FBQztJQUNWLENBQUMsQ0FBQztFQUNOO0VBRUE4Ryw2QkFBNkJBLENBQUNDLFNBQVMsRUFBRXZDLElBQUksRUFBRXVCLE1BQU0sRUFBRWlCLGNBQWMsRUFBRTtJQUNuRSxJQUFJdkUsUUFBUTtJQUVaLElBQUksT0FBTytCLElBQUksS0FBSyxRQUFRLElBQUlyQixjQUFLLENBQUNDLE1BQU0sQ0FBQ29CLElBQUksQ0FBQyxJQUFJQSxJQUFJLENBQUMyRixRQUFRLENBQUMsQ0FBQyxDQUNoRXJCLElBQUksQ0FBQyxDQUFDLENBQUM3SCxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3RCd0IsUUFBUSxHQUFHK0IsSUFBSTtJQUNuQixDQUFDLE1BQU07TUFDSCxJQUFJO1FBQ0EvQixRQUFRLEdBQUd5QyxJQUFJLENBQUNrRixLQUFLLENBQUM1RixJQUFJLENBQUM7TUFDL0IsQ0FBQyxDQUFDLE9BQU82RixPQUFPLEVBQUU7UUFDZDVILFFBQVEsR0FBRytCLElBQUk7TUFDbkI7SUFDSjtJQUVBLElBQUkvQixRQUFRLElBQUlBLFFBQVEsQ0FBQzZILFFBQVEsS0FBSyxTQUFTLEVBQUU7TUFDN0MsSUFBSS9GLEtBQUssR0FBRyxJQUFJZ0csY0FBSyxDQUFDM0csMkJBQWtCLEVBQUVtQyxNQUFNLEVBQUV0RCxRQUFRLENBQUM7TUFDM0QrSCxtQkFBWSxDQUFDQyxTQUFTLENBQUNDLGtCQUFTLENBQUNDLGVBQWUsRUFBRXBHLEtBQUssQ0FBQztNQUV4RCxJQUFJd0MsU0FBUyxLQUFLLElBQUksRUFBRTtRQUNwQnhDLEtBQUssR0FBRyxJQUFJZ0csY0FBSyxDQUFDeEQsU0FBUyxFQUFFaEIsTUFBTSxFQUFFdEQsUUFBUSxDQUFDO1FBQzlDK0gsbUJBQVksQ0FBQ0MsU0FBUyxDQUFDQyxrQkFBUyxDQUFDQyxlQUFlLEVBQUVwRyxLQUFLLENBQUM7TUFDNUQ7SUFDSixDQUFDLE1BQU0sSUFBSSxDQUFDcEIsY0FBSyxDQUFDQyxNQUFNLENBQUM0RCxjQUFjLENBQUMsRUFBRTtNQUN0QyxJQUFJd0IsT0FBTyxHQUFHO1FBQ1ZvQyxXQUFXLEVBQUUsU0FBUztRQUN0QnBDLE9BQU8sRUFBRTVFLDJCQUFrQixDQUFDaUgsZ0JBQWdCLENBQUM3RCxjQUFjLEVBQUV2RSxRQUFRO01BQ3pFLENBQUM7TUFFRCxJQUFJOEIsS0FBSyxHQUFHLElBQUlnRyxjQUFLLENBQUMzRywyQkFBa0IsRUFBRW1DLE1BQU0sRUFBRXlDLE9BQU8sQ0FBQztNQUMxRGdDLG1CQUFZLENBQUNDLFNBQVMsQ0FBQ0Msa0JBQVMsQ0FBQ0MsZUFBZSxFQUFFcEcsS0FBSyxDQUFDO01BRXhELElBQUl3QyxTQUFTLEtBQUssSUFBSSxFQUFFO1FBQ3BCeEMsS0FBSyxHQUFHLElBQUlnRyxjQUFLLENBQUN4RCxTQUFTLEVBQUVoQixNQUFNLEVBQUV5QyxPQUFPLENBQUM7UUFDN0NnQyxtQkFBWSxDQUFDQyxTQUFTLENBQUNDLGtCQUFTLENBQUNDLGVBQWUsRUFBRXBHLEtBQUssQ0FBQztNQUM1RDtJQUNKO0lBRUEsT0FBTzlCLFFBQVE7RUFDbkI7QUFDSjtBQUVBLE1BQU1xSSxRQUFRLEdBQUcsSUFBSTlILFdBQVcsQ0FBQyxDQUFDO0FBRTNCLE1BQU1pRSxTQUFTLEdBQUkxRCxPQUFPLElBQUs7RUFDbEMsT0FBT3VILFFBQVEsQ0FBQzdELFNBQVMsQ0FBQzFELE9BQU8sQ0FBQztBQUN0QyxDQUFDO0FBQUNuQixPQUFBLENBQUE2RSxTQUFBLEdBQUFBLFNBQUE7QUFFSyxNQUFNM0QsVUFBVSxHQUFJQyxPQUFPLElBQUs7RUFDbkMsT0FBT3VILFFBQVEsQ0FBQ3hILFVBQVUsQ0FBQ0MsT0FBTyxDQUFDO0FBQ3ZDLENBQUM7QUFBQ25CLE9BQUEsQ0FBQWtCLFVBQUEsR0FBQUEsVUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
419
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfUmVzdFV0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImxvY2F0aW9uIiwiZXhwb3J0cyIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJzdGF0dXMiLCJyZXNwb25zZSIsIm9rIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJqc29uIiwidGV4dCIsIlJlc3RTZXJ2aWNlIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwiaW52b2tlUmVzdCIsInJlcXVlc3QiLCJzZXJ2aWNlIiwidXJsIiwic3RhcnRzV2l0aCIsImNvbmNhdCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290IiwicmVxdWVzdEJvZHkiLCJoZWFkZXJzIiwicGFyYW1ldGVycyIsInF1ZXJ5U3RyaW5nIiwicGF0aFBhcmFtZXRlcnMiLCJyZXF1ZXN0Qm9keVBhcmFtRm91bmQiLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInJlc29sdmVQYXJhbWV0ZXJWYWx1ZSIsImV2ZW50IiwiZGF0YSIsInZhbGlkYXRvciIsIm51bGxhYmxlIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsIm5hbWUiLCJyZXF1aXJlZCIsImVycm9yVHlwZSIsImh0dHBQYXJhbWV0ZXJUeXBlIiwiaW5jbHVkZVBhcmFtZXRlclR5cGVzIiwidHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNvbHZlZFZhbHVlIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5zdGFuY2VUeXBlIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJFcnJvciIsImNvbnRlbnRUeXBlIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJmZXRjaFdpdGhDdXN0b21Db25maWciLCJ2aWV3SWQiLCJzZXJ2aWNlVHlwZSIsInNlY3VyZSIsImRvd25sb2FkIiwidGhlbiIsImNhdGNoIiwiYm9keSIsInRyYWNrIiwicGF0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwicmV0dXJuVmFsdWVCaW5kaW5nIiwidmFsdWVPYmplY3QiLCJwcm9wZXJ0eSIsInByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhIiwiY29tcG9uZW50Iiwic3VjY2Vzc01lc3NhZ2UiLCJpbnZva2VScGMiLCJycGNSZXF1ZXN0IiwiaWQiLCJzcGxpdCIsInNlcnZpY2VJZCIsInByb2NlZHVyZU5hbWUiLCJtb2R1bGUiLCJ0b0xvd2VyQ2FzZSIsInBhcmFtZXRlckNvbmZpZyIsImluZGV4IiwidmFsIiwiYWNjZXNzVG9rZW4iLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJpZFRva2VuIiwiRm9ybURhdGEiLCJmZXRjaENvbmZpZyIsImNvbmZpZyIsImFjY2VwdCIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvciIsImZldGNoIiwiZXJyb3JEYXRhIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJjb250ZW50RGlzcG9zaXRpb24iLCJnZXQiLCJmaWxlbmFtZSIsImluY2x1ZGVzIiwidHJpbSIsImJsb2IiLCJfcmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJlcnJvciIsImNvbnNvbGUiLCJ0cmFja1Byb21pc2UiLCJleGVjdXRlRmV0Y2giLCJlbmNvZGVVUkkiLCJlbmRzV2l0aCIsImNsZWFyIiwibmF2aWdhdGUiLCJ0b1N0cmluZyIsInBhcnNlIiwiaWdub3JlZCIsImRhdGFUeXBlIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJpbnN0YW5jZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvUmVzdFNlcnZpY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IHt0cmFja1Byb21pc2V9IGZyb20gJ3JlYWN0LXByb21pc2UtdHJhY2tlcic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IHtpbnN0YW5jZU9mfSBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtkb3dubG9hZCwgcG9zdERhdGEsIHNlbmRSZXF1ZXN0fSBmcm9tIFwiLi9SZXN0VXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbmNvbnN0IHN0YXR1cyA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgIH1cbn07XG5cbmNvbnN0IGpzb24gPSAocmVzcG9uc2UpID0+IHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufTtcblxuY2xhc3MgUmVzdFNlcnZpY2Uge1xuICAgIGlzUGFyYW1WYWx1ZU51bGwocGFyYW1WYWx1ZSkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbVZhbHVlLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUudmFsdWUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaW52b2tlUmVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBzZXJ2aWNlID0gcmVxdWVzdC5zZXJ2aWNlO1xuICAgICAgICBsZXQgdXJsID0gc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgP1xuICAgICAgICAgICAgc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UucGFyYW1ldGVycykpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHlQYXJhbUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2Ygc2VydmljZS5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcmFtZXRlci52YWxpZGF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHBhcmFtZXRlci52YWxpZGF0b3IubnVsbGFibGUgJiYgIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSwgcGFyYW1ldGVyLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkICYmIFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyYW1ldGVyLm5hbWUpKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgaHR0cFBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXIuaHR0cFBhcmFtZXRlclR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1ldGVyVHlwZSA9ICdRVUVSWV9QQVJBTUVURVInO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UuaW5jbHVkZVBhcmFtZXRlclR5cGVzKSAmJiBzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICh0eXBlb2YgcGFyYW1ldGVyVmFsdWUudmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdQQVRIX1ZBUklBQkxFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSkgOiBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpIDogcGFyYW1ldGVyVmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgYSBuYW1lIGFuZCB0aGUgVVJMIGNvbnRhaW5zIHtuYW1lfSwgcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScsIHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhQYXJhbWV0ZXJzICs9ICcvJyArIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyVmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdSRVFVRVNUX0JPRFknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHlQYXJhbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk9ubHkgb25lIHJlcXVlc3QgYm9keSBpcyBwZXJtaXR0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIHNsb3QgYXMgdGFrZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbnVsbC4gQSBzZWNvbmQgUkVRVUVTVF9CT0RZIHBhcmFtIGlzIGEgY29uZmlnIGJ1Z1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWl0aGVyIHdheSwgYW5kIHdlIHdhbnQgaXQgdG8gc3VyZmFjZSBsb3VkbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF0aFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9IHF1ZXJ5U3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBIVFRQIG1ldGhvZC4gSG9ub3Igc2VydmljZS5tZXRob2Qgd2hlbiBwcm92aWRlZCBzb1xuICAgICAgICAgICAgLy8gY2FsbGVycyBjYW4gaXNzdWUgREVMRVRFLCBQVVQsIFBBVENIIChub3QganVzdCBHRVQvUE9TVCkuXG4gICAgICAgICAgICAvLyBEZWZhdWx0OiBQT1NUIHdoZW4gYSBib2R5IHdhcyBib3VuZCwgR0VUIG90aGVyd2lzZSDigJQgcHJlc2VydmVzXG4gICAgICAgICAgICAvLyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgZm9yIGNhbGxlcnMgdGhhdCBvbWl0IHNlcnZpY2UubWV0aG9kLlxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gc2VydmljZS5tZXRob2RcbiAgICAgICAgICAgICAgICA/IHNlcnZpY2UubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IChyZXF1ZXN0Qm9keSAhPT0gbnVsbCA/ICdQT1NUJyA6ICdHRVQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvd25sb2FkIHBhdGggKFBERiAvIEV4Y2VsKSBpcyBHRVQtb25seSBhbmQgdXNlcyBhIHNlcGFyYXRlXG4gICAgICAgICAgICAvLyBmZXRjaCBzaGFwZSAoYmxvYiBoYW5kbGluZyk7IGJyYW5jaCBmaXJzdC5cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnICYmIChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVxdWVzdC5zZXJ2aWNlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNlY3VyZTogcmVxdWVzdC5zZWN1cmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaW5nbGUgZGlzcGF0Y2ggZm9yIEdFVCAvIFBPU1QgLyBQVVQgLyBQQVRDSCAvIERFTEVURSAvIGV0Yy5cbiAgICAgICAgICAgIC8vIEJvZHkgaXMgcGFzc2VkIHRocm91Z2g7IHRoZSBmZXRjaCBsYXllciBkcm9wcyBpdCBmb3IgdmVyYnMgdGhhdFxuICAgICAgICAgICAgLy8gZm9yYmlkIG9uZS4gREVMRVRFIHdpdGggYSBib2R5IGlzIHVuY29tbW9uIGJ1dCBwZXJtaXR0ZWQgYnlcbiAgICAgICAgICAgIC8vIEhUVFAg4oCUIHdlIGRvbid0IGJsb2NrIGl0IGhlcmUuXG4gICAgICAgICAgICAvLyBTZWN1cmUgYnkgZGVmYXVsdDogYXR0YWNoIHRoZSBzZXNzaW9uIHRva2VuIHdoZW5ldmVyIG9uZSBleGlzdHMuXG4gICAgICAgICAgICAvLyBObyBVUkwgc3BlY2lhbC1jYXNpbmcg4oCUIHByZS1hdXRoIHN1cmZhY2VzICh2aWV3L3NlY3VyaXR5LyogbG9naW4sXG4gICAgICAgICAgICAvLyByZWdpc3RlciwgcmVzZXQpIGNsZWFyIHNlc3Npb25TdG9yYWdlIG9uIG1vdW50LCBzbyBub3RoaW5nIGlzXG4gICAgICAgICAgICAvLyBhdHRhY2hlZCBvbiB0aG9zZSBzY3JlZW5zLiBgc2VjdXJlYCBoZXJlIG9ubHkgcHJldmVudHMgbGVha2luZyBhXG4gICAgICAgICAgICAvLyB0b2tlbiB0byBhIHBsYWluLWh0dHAgZW5kcG9pbnQ7IHRoZSBhdHRhY2htZW50IGl0c2VsZiBpc1xuICAgICAgICAgICAgLy8gcHJlc2VuY2UtYmFzZWQgaW4gZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnLCBzbyBhIHN0YWxlL2VtcHR5IHRva2VuIGlzXG4gICAgICAgICAgICAvLyBuZXZlciBzZW50LlxuICAgICAgICAgICAgdGhpcy5mZXRjaFdpdGhDdXN0b21Db25maWcoe1xuICAgICAgICAgICAgICAgIHZpZXdJZDogcmVxdWVzdC52aWV3SWQsXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXF1ZXN0LnNlcnZpY2UudHlwZSxcbiAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgc2VjdXJlOiAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgdHJhY2s6IHJlcXVlc3QudHJhY2sgIT09IGZhbHNlXG4gICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnByb3BlcnR5XSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnZva2VScGMocmVxdWVzdCkge1xuICAgICAgICBsZXQgcnBjUmVxdWVzdCA9IHt9O1xuICAgICAgICBycGNSZXF1ZXN0LmlkID0gcmVxdWVzdC52aWV3SWQ7XG5cbiAgICAgICAgbGV0IHNwbGl0ID0gcmVxdWVzdC5zZXJ2aWNlLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICBycGNSZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcnBjUmVxdWVzdC5tZXRob2QgPSByZXF1ZXN0LnNlcnZpY2UucHJvY2VkdXJlTmFtZTtcblxuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocmVxdWVzdC5zZXJ2aWNlLnBhcmFtZXRlcnMpICYmIHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBycGNSZXF1ZXN0LnBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSByZXF1ZXN0LnNlcnZpY2UucGFyYW1ldGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIubmFtZSA9IHBhcmFtZXRlckNvbmZpZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuaW5kZXggPSBwYXJhbWV0ZXJDb25maWcuaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSB2YWwudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICgocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcmFtZXRlci52YWxpZGF0b3IucmVxdWlyZWQgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkLCBwYXJhbWV0ZXIubmFtZSkpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyQ29uZmlnLmh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3BhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJwY1JlcXVlc3QucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICB2aWV3SWQ6IHJlcXVlc3Qudmlld0lkLFxuICAgICAgICAgICAgICAgIHVybDogbG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvJyArIG1vZHVsZSArICcvYXBpL3YxL3JwYy9pbnZva2UnLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXF1ZXN0LnNlcnZpY2UudHlwZSxcbiAgICAgICAgICAgICAgICBzZWN1cmU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgYm9keTogcnBjUmVxdWVzdCxcbiAgICAgICAgICAgICAgICB0cmFjazogcmVxdWVzdC50cmFjayAhPT0gZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmZXRjaFdpdGhDdXN0b21Db25maWcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJyk7XG4gICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpZFRva2VuJyk7XG5cbiAgICAgICAgbGV0IGRhdGEgPSByZXF1ZXN0LmJvZHkgPyAocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gcmVxdWVzdC5ib2R5IDogSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KSA6IG51bGw7XG4gICAgICAgIGxldCBmZXRjaENvbmZpZyA9IHJlcXVlc3QuY29uZmlnO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGZldGNoQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocmVxdWVzdC5zZWN1cmUpIHx8IHJlcXVlc3Quc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBVdGlscy5pc051bGwocmVxdWVzdC5tZXRob2QpID8gJ0dFVCcgOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHJlcXVlc3QuY29udGVudFR5cGUgPyByZXF1ZXN0LmNvbnRlbnRUeXBlIDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8vIFNlY3VyZSBieSBkZWZhdWx0LCBwcmVzZW5jZS1iYXNlZDogYXR0YWNoIGF1dGggT05MWSB3aGVuIGFcbiAgICAgICAgICAgICAgICAgICAgLy8gc2Vzc2lvbiBleGlzdHMuIFByZS1hdXRoIHNjcmVlbnMgKHZpZXcvc2VjdXJpdHkvKikgY2xlYXJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2Ugb24gbW91bnQsIHNvIG5vdGhpbmcgaXMgYXR0YWNoZWQgdGhlcmUg4oCUIGFuZFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZXZlciBlbWl0ICdCZWFyZXIgbnVsbCcgb3IgYSBzdGFsZSB0b2tlbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzc1Rva2VuKSBmZXRjaENvbmZpZy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkVG9rZW4pIGZldGNoQ29uZmlnLmhlYWRlcnNbJ2lkVG9rZW4nXSA9IGlkVG9rZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFV0aWxzLmlzTnVsbChyZXF1ZXN0Lm1ldGhvZCkgPyAnR0VUJyA6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlcXVlc3QuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogcmVxdWVzdC5jb250ZW50VHlwZSA/IHJlcXVlc3QuY29udGVudFR5cGUgOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6IHJlcXVlc3QuYWNjZXB0ID8gcmVxdWVzdC5hY2NlcHQgOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCdyZXN0JyA9PT0gcmVxdWVzdC5zZXJ2aWNlVHlwZSAmJiAhKHJlcXVlc3QuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHJlcXVlc3QuY29udGVudFR5cGUgPyByZXF1ZXN0LmNvbnRlbnRUeXBlIDogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmZXRjaENvbmZpZy5oZWFkZXJzWydDb250ZW50LVR5cGUnXTtcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQWNjZXB0J10gPSByZXF1ZXN0LmFjY2VwdCA/IHJlcXVlc3QuYWNjZXB0IDogJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcXVlc3QuY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHJlcXVlc3QuY29udGVudFR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB1cmwgPSByZXF1ZXN0LnVybDtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmRvd25sb2FkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCArPSAnPyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICcmJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL3VybCArPSAnYWNjZXNzX3Rva2VuPScgKyBhY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgICAgICAvL3VybCArPSAnJmlkVG9rZW49JyArIGlkVG9rZW47XG4gICAgICAgICAgICAgICAgdXJsICs9ICcmdGhlbWVQcmltYXJ5Q29sb3I9JyArIGVuY29kZVVSSUNvbXBvbmVudChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSk7XG4gICAgICAgICAgICAgICAgdXJsICs9ICcmdGhlbWVTZWNvbmRhcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yKCkpO1xuXG4gICAgICAgICAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZFRva2VuJzogaWRUb2tlblxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKS50aGVuKGVycm9yRGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgJHtyZXNwb25zZS5zdGF0dXN9OiAke2Vycm9yRGF0YS5tZXNzYWdlIHx8IHJlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50RGlzcG9zaXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtRGlzcG9zaXRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZW5hbWUgPSBcImRvd25sb2FkZWQtZmlsZVwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uICYmIGNvbnRlbnREaXNwb3NpdGlvbi5pbmNsdWRlcyhcImZpbGVuYW1lPVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gY29udGVudERpc3Bvc2l0aW9uLnNwbGl0KFwiZmlsZW5hbWU9XCIpWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1tcIiddL2csIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYmxvYigpLnRoZW4oYmxvYiA9PiAoe2Jsb2IsIGZpbGVuYW1lfSkpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe2Jsb2IsIGZpbGVuYW1lfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuaHJlZiA9IHVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gY29uc29sZS5lcnJvcihcIkRvd25sb2FkIGZhaWxlZDpcIiwgZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChyZXF1ZXN0LnRyYWNrKSB8fCByZXF1ZXN0LnRyYWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrUHJvbWlzZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBmZXRjaChlbmNvZGVVUkkodXJsKSwgZmV0Y2hDb25maWcpXG4gICAgICAgICAgICAgICAgLnRoZW4oc3RhdHVzKVxuICAgICAgICAgICAgICAgIC50aGVuKGpzb24pXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKG51bGwsIGRhdGEsIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXMgPT09IDQwMSAmJiAhdXJsLmVuZHNXaXRoKCcvbG9nb3V0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLm5hdmlnYXRlKCcvbG9naW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShjb21wb25lbnQsIGRhdGEsIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgfHwgVXRpbHMuaXNOdWxsKGRhdGEpIHx8IGRhdGEudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhVHlwZSA9PT0gJ21lc3NhZ2UnKSB7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQoYXBwbGljYXRpb25NYW5hZ2VyLCB2aWV3SWQsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoY29tcG9uZW50LCB2aWV3SWQsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghVXRpbHMuaXNOdWxsKHN1Y2Nlc3NNZXNzYWdlKSkge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU6ICdTVUNDRVNTJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBhcHBsaWNhdGlvbk1hbmFnZXIucG9wdWxhdGVUZW1wbGF0ZShzdWNjZXNzTWVzc2FnZSwgcmVzcG9uc2UpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQoYXBwbGljYXRpb25NYW5hZ2VyLCB2aWV3SWQsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxufVxuXG5jb25zdCBpbnN0YW5jZSA9IG5ldyBSZXN0U2VydmljZSgpO1xuXG5leHBvcnQgY29uc3QgaW52b2tlUnBjID0gKHJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UuaW52b2tlUnBjKHJlcXVlc3QpO1xufTtcblxuZXhwb3J0IGNvbnN0IGludm9rZVJlc3QgPSAocmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5pbnZva2VSZXN0KHJlcXVlc3QpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsb0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLG1CQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFB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
package/dist/RestUtils.js CHANGED
@@ -244,12 +244,15 @@ class RestUtils {
244
244
  fetchConfig = {
245
245
  method: _Utils.default.isNull(method) ? 'GET' : method,
246
246
  headers: {
247
- 'Content-Type': 'application/x-www-form-urlencoded',
248
- 'Authorization': 'Bearer ' + accessToken,
249
- 'idToken': idToken
247
+ 'Content-Type': 'application/x-www-form-urlencoded'
250
248
  },
251
249
  body: data
252
250
  };
251
+ // Secure by default, presence-based: attach auth ONLY when a
252
+ // session exists — never 'Bearer null' or a stale token. Pre-auth
253
+ // screens (view/security/*) clear sessionStorage on mount.
254
+ if (accessToken) fetchConfig.headers['Authorization'] = 'Bearer ' + accessToken;
255
+ if (idToken) fetchConfig.headers['idToken'] = idToken;
253
256
  } else {
254
257
  fetchConfig = {
255
258
  method: _Utils.default.isNull(method) ? 'GET' : method,
@@ -402,4 +405,4 @@ const invokeRest = function (serviceConfig, component, viewId, successCallback,
402
405
  instance.invokeRest(serviceConfig, component, viewId, successCallback, errorCallback, invalidParamCallback, returnValueBinding, successMessage, event);
403
406
  };
404
407
  exports.invokeRest = invokeRest;
405
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfSGVhZGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibG9jYXRpb24iLCJleHBvcnRzIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInN0YXR1cyIsInJlc3BvbnNlIiwib2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImpzb24iLCJ0ZXh0IiwiUmVzdFV0aWxzIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwidmFsdWUiLCJpbnZva2VSZXN0Iiwic2VydmljZSIsImNvbXBvbmVudCIsInZpZXdJZCIsInN1Y2Nlc3NDYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJpbnZhbGlkUGFyYW1DYWxsYmFjayIsInJldHVyblZhbHVlQmluZGluZyIsInN1Y2Nlc3NNZXNzYWdlIiwiZXZlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ1cmwiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJyZXF1ZXN0Qm9keSIsImhlYWRlcnMiLCJwYXJhbWV0ZXJzIiwicXVlcnlTdHJpbmciLCJwYXRoUGFyYW1ldGVycyIsInJlcXVlc3RCb2R5UGFyYW1Gb3VuZCIsInBhcmFtZXRlciIsInBhcmFtZXRlclZhbHVlIiwicmVzb2x2ZVBhcmFtZXRlclZhbHVlIiwiZGF0YSIsInZhbGlkYXRvciIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJudWxsYWJsZSIsIm5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJodHRwUGFyYW1ldGVyVHlwZSIsImluY2x1ZGVQYXJhbWV0ZXJUeXBlcyIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzb2x2ZWRWYWx1ZSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImluc3RhbmNlVHlwZSIsImluZGV4T2YiLCJyZXBsYWNlIiwiY29udGVudFR5cGUiLCJtZXRob2QiLCJFcnJvciIsImxvZyIsInBvc3REYXRhIiwicHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEiLCJwYXRoIiwiZ2V0UHJvcGVydHlDaGFpblBhdGgiLCJ2YWx1ZU9iamVjdCIsInByb3BlcnR5IiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiU0VSVklDRV9DQUxMX1NVQ0NFU1MiLCJTRVJWSUNFX0NBTExfRkFJTFVSRSIsImRvd25sb2FkIiwic2VuZFJlcXVlc3QiLCJpbnZva2VScGMiLCJycGNEZXRhaWxzIiwicmVxdWVzdCIsImlkIiwic3BsaXQiLCJzZXJ2aWNlSWQiLCJwcm9jZWR1cmVOYW1lIiwiY29uZmlnIiwibW9kdWxlIiwidG9Mb3dlckNhc2UiLCJpIiwicGFyYW1ldGVyQ29uZmlnIiwiaW5kZXgiLCJ2YWwiLCJwdXNoIiwiZG9GZXRjaCIsIndhcm4iLCJkb1Bvc3REYXRhIiwic2VjdXJlIiwiZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnIiwiYm9keSIsInRyYWNrIiwic2VydmljZVR5cGUiLCJhY2Nlc3NUb2tlbiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkVG9rZW4iLCJGb3JtRGF0YSIsImZldGNoQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yIiwib3BlbiIsImVuY29kZVVSSSIsInRyYWNrUHJvbWlzZSIsImV4ZWN1dGVGZXRjaCIsImZldGNoIiwidGhlbiIsImNhdGNoIiwiZW5kc1dpdGgiLCJjbGVhciIsIm5hdmlnYXRlIiwidG9TdHJpbmciLCJ0cmltIiwicGFyc2UiLCJpZ25vcmVkIiwiZGF0YVR5cGUiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsIk1FU1NBR0VfQVJSSVZFRCIsIm1lc3NhZ2UiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJldmVudFR5cGUiLCJpbnN0YW5jZSIsIlVJX0FTU0VUX1VSTF9QQVRURVJOIiwid3JhcERlY29kZUlmVWlBc3NldCIsIm9wTGFiZWwiLCJ0ZXN0IiwicmF3IiwiZGVjb2RlZCIsIm1heWJlRGVjb2RlV2lyZSIsInNlcnZpY2VDb25maWciXSwic291cmNlcyI6WyIuLi9zcmMvbGliL1Jlc3RVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQge3RyYWNrUHJvbWlzZX0gZnJvbSAncmVhY3QtcHJvbWlzZS10cmFja2VyJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQge2luc3RhbmNlT2Z9IGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgaGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvZGFzaGJvYXJkL2NvbXBvbmVudHMvSGVhZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBzdGF0dXMgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICB9XG59O1xuXG5jb25zdCBqc29uID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn07XG5cbmNsYXNzIFJlc3RVdGlscyB7XG4gICAgaXNQYXJhbVZhbHVlTnVsbChwYXJhbVZhbHVlKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtVmFsdWUuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBVdGlscy5pc051bGwocGFyYW1WYWx1ZS52YWx1ZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpbnZva2VSZXN0KHNlcnZpY2UsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHVybCA9IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpID8gc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZS5wYXJhbWV0ZXJzKSkge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgIGxldCByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHNlcnZpY2UucGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIudmFsaWRhdG9yKVxuICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChpbnZhbGlkUGFyYW1DYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lOVkFMSUQgUEFSQU1FVEVSIDogJywgcGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRQYXJhbUNhbGxiYWNrKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGh0dHBQYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyLmh0dHBQYXJhbWV0ZXJUeXBlO1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbWV0ZXJUeXBlID0gJ1FVRVJZX1BBUkFNRVRFUic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcykgJiYgc2VydmljZS5pbmNsdWRlUGFyYW1ldGVyVHlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZS50eXBlID0gJ01hcEVudGl0eUR0byc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gKHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUudmFsdWUgOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUEFUSF9WQVJJQUJMRScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZW5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgbmFtZSBhbmQgdGhlIFVSTCBjb250YWlucyB7bmFtZX0sIHJlcGxhY2UgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgneycgKyBwYXJhbWV0ZXIubmFtZSArICd9JywgcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhcmFtZXRlcnMgKz0gJy8nICsgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ0hFQURFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1twYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ1JFUVVFU1RfQk9EWScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5UGFyYW1Gb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignT25seSBvbmUgcmVxdWVzdCBib2R5IGlzIHBlcm1pdHRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudHlwZSA9ICdNYXBFbnRpdHlEdG8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdEJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50eXBlID0gcGFyYW1ldGVyVmFsdWUudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGhQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB1cmwgKz0gcXVlcnlTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29udGVudFR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIHNlcnZpY2UubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsIHx8IHNlcnZpY2UubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUE9TVElORyBSRVNUIFJFUVVFU1QgQk9EWSA6IFwiLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgICAgICBwb3N0RGF0YSh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCByZXNwb25zZSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9TVUNDRVNTLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGVycm9yQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICB9LCAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJykge1xuICAgICAgICAgICAgZG93bmxvYWQodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VuZFJlcXVlc3QodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIGRhdGEpO1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9GQUlMVVJFKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICFzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgcmVxdWVzdC5pZCA9IHZpZXdJZDtcblxuICAgICAgICBsZXQgc3BsaXQgPSBycGNEZXRhaWxzLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICByZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBycGNEZXRhaWxzLnByb2NlZHVyZU5hbWU7XG5cbiAgICAgICAgbGV0IGNvbmZpZyA9IHt9O1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IHt9O1xuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocnBjRGV0YWlscy5wYXJhbWV0ZXJzKSAmJiBycGNEZXRhaWxzLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJwY0RldGFpbHMucGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSBycGNEZXRhaWxzLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlci5uYW1lID0gcGFyYW1ldGVyQ29uZmlnLm5hbWU7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyLmluZGV4ID0gcGFyYW1ldGVyQ29uZmlnLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IHZhbC50eXBlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gJ1N0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXJDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXJDb25maWcubmFtZSkgPT09IGZhbHNlICYmIHRoaXMuaXNQYXJhbVZhbHVlTnVsbChwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGludmFsaWRQYXJhbUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignSU5WQUxJRCBQQVJBTUVURVIgOiAnLCBwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFBhcmFtQ2FsbGJhY2socGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb0ZldGNoKGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnLycgKyBtb2R1bGUgKyAnL2FwaS92MS9ycGMvaW52b2tlJyxcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZpZXdJZCkgJiYgIVV0aWxzLmlzTnVsbChjb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyB2aWV3IGlkIG9yIGNvbXBvbmVudCBzcGVjaWZpZWQgd2hpbGUgZXhlY3V0aW5nIFtcIiArIG1vZHVsZSArIFwiXSBycGMgOiBcIiwgcnBjRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlQmluZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmdldFByb3BlcnR5Q2hhaW5QYXRoKHJldHVyblZhbHVlQmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlld0lkKSAmJiAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSwgJ1BPU1QnLCBmYWxzZSwgcmVxdWVzdCwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJ1ZSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBjb25maWcpO1xuICAgIH1cblxuICAgIGRvUG9zdERhdGEodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCAnUE9TVCcsIGZhbHNlLCBkYXRhLCAncmVzdCcpO1xuICAgIH1cblxuICAgIGRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbWV0aG9kLCBkb3dubG9hZCwgYm9keSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJhY2ssIGNvbnRlbnRUeXBlID0gbnVsbCwgY29uZmlnID0gbnVsbCkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsXG4gICAgICAgICAgICBib2R5LCBudWxsLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgIGZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsIGJvZHksIHNlcnZpY2VUeXBlLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NUb2tlbicpO1xuICAgICAgICBjb25zdCBpZFRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpO1xuXG4gICAgICAgIGxldCBkYXRhID0gYm9keSA/IChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gYm9keSA6IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogbnVsbDtcbiAgICAgICAgbGV0IGZldGNoQ29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZmV0Y2hDb25maWcpKSB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3VyZSkgfHwgc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKG1ldGhvZCkgPyAnR0VUJyA6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZFRva2VuJzogaWRUb2tlblxuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmZXRjaENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBVdGlscy5pc051bGwobWV0aG9kKSA/ICdHRVQnIDogbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBkYXRhXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCdyZXN0JyA9PT0gc2VydmljZVR5cGUgJiYgIShib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmZXRjaENvbmZpZy5oZWFkZXJzWydDb250ZW50LVR5cGUnXTtcbiAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydBY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBjb250ZW50VHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb3dubG9hZCkge1xuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICcmJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXJsICs9ICdhY2Nlc3NfdG9rZW49JyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgdXJsICs9ICcmaWRUb2tlbj0nICsgaWRUb2tlbjtcbiAgICAgICAgICAgIHVybCArPSAnJnRoZW1lUHJpbWFyeUNvbG9yPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkpO1xuICAgICAgICAgICAgdXJsICs9ICcmdGhlbWVTZWNvbmRhcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yKCkpO1xuXG4gICAgICAgICAgICB3aW5kb3cub3BlbihlbmNvZGVVUkkodXJsKSwgJ19ibGFuaycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh0cmFjaykgfHwgdHJhY2sgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0cmFja1Byb21pc2UoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgZXJyb3JDYWxsYmFjaylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZmV0Y2goZW5jb2RlVVJJKHVybCksIGZldGNoQ29uZmlnKVxuICAgICAgICAgICAgLnRoZW4oc3RhdHVzKVxuICAgICAgICAgICAgLnRoZW4oanNvbilcbiAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShudWxsLCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRVJST1IgRkVUQ0hJTkcgRlJPTSBVUkwgW1wiICsgdXJsICsgXCJdXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgaWYoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXMgPT09IDQwMSAmJiAhdXJsLmVuZHNXaXRoKCcvbG9nb3V0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5uYXZpZ2F0ZSgnL2xvZ2luJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayhlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKGNvbXBvbmVudCwgZGF0YSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKSB7XG4gICAgICAgIGxldCByZXNwb25zZTtcblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSAmJiBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnIHx8IFV0aWxzLmlzTnVsbChkYXRhKSB8fCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWQpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YVR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIVV0aWxzLmlzTnVsbChzdWNjZXNzTWVzc2FnZSkpIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYXBwbGljYXRpb25NYW5hZ2VyLnBvcHVsYXRlVGVtcGxhdGUoc3VjY2Vzc01lc3NhZ2UsIHJlc3BvbnNlKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoY29tcG9uZW50LCB2aWV3SWQsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgZXZlbnRUeXBlLCByZXNwb25zZSkge1xuICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQoY29tcG9uZW50LCB2aWV3SWQsIHJlc3BvbnNlKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChldmVudFR5cGUsIGV2ZW50KTtcbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFJlc3RVdGlscygpO1xuLy8gQ0RVSSBVSS1hc3NldCBVUkxzICh2aWV3IC8gbWVudSAvIGRhc2hib2FyZCkgYXJlIHNlcnZlZCB3cmFwcGVkIGluIGFcbi8vIHtfY2R1aV96OiBcIjxiYXNlNjQoZ3ppcChqc29uKSk+XCJ9IGVudmVsb3BlIGJ5IG91aS1zZXJ2ZXInc1xuLy8gd2lyZUNvbXByZXNzaW9uIHV0aWwg4oCUIHNlZSBvdWktc2VydmVyL3NyYy93ZWIvdXRpbC93aXJlQ29tcHJlc3Npb24udHMuXG4vLyBEZWNvZGUgdHJhbnNwYXJlbnRseSBoZXJlIHNvIGV2ZXJ5IGxvYWRlciBkb3duc3RyZWFtIHNlZXMgdGhlIHJhd1xuLy8gQ0RVSSBKU09OIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc2VydmVyIGhhcyBjb21wcmVzc2lvbiBlbmFibGVkLlxuLy8gR2F0ZWQgb24gdGhlIC91aS9hcGkvdiovIHBhdGggc28gbm9uLVVJIGZldGNoZXMgYXJlIHVuYWZmZWN0ZWQuXG5jb25zdCBVSV9BU1NFVF9VUkxfUEFUVEVSTiA9IC9cXC91aVxcL2FwaVxcL3ZbMC05XStcXC8vO1xuXG4vLyBXcmFwcyBhIHN1Y2Nlc3MgY2FsbGJhY2sgd2l0aCB0aGUgd2lyZS1lbnZlbG9wZSBkZWNvZGVyIHdoZW4gdGhlIFVSTFxuLy8gbWF0Y2hlcyB0aGUgVUktYXNzZXQgcGF0dGVybi4gQm90aCBzZW5kUmVxdWVzdCAoR0VUIC8gZG9GZXRjaCBwYXRoKVxuLy8gYW5kIHBvc3REYXRhIChQT1NUIC8gZG9Qb3N0RGF0YSBwYXRoKSBuZWVkIHRoaXMg4oCUIG1lbnVzIGFuZFxuLy8gZGFzaGJvYXJkcyBhcmUgc29tZXRpbWVzIGxvYWRlZCB2aWEgUE9TVCB3aXRoIGNyaXRlcmlhIGJvZGllcywgc29cbi8vIHRoZXkgaGl0IG91aS1zZXJ2ZXIncyBjb21wcmVzc2lvbiB0b28uXG5jb25zdCB3cmFwRGVjb2RlSWZVaUFzc2V0ID0gKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBvcExhYmVsKSA9PiB7XG4gICAgaWYgKCF1cmwgfHwgIVVJX0FTU0VUX1VSTF9QQVRURVJOLnRlc3QodXJsKSB8fCAhc3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBzdWNjZXNzQ2FsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBhc3luYyAocmF3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkID0gYXdhaXQgVXRpbHMubWF5YmVEZWNvZGVXaXJlKHJhdyk7XG4gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZGVjb2RlZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFske29wTGFiZWx9XSBDRFVJIHdpcmUgZGVjb2RlIGZhaWxlZCBmb3JgLCB1cmwsIGUpO1xuICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHJhdyBzbyB0aGUgY2FsbGVyIHN0aWxsIGdldHMgKnNvbWV0aGluZyo7XG4gICAgICAgICAgICAvLyBtaXNzaW5nIF9jZHVpX3ogYW5kIGRlY29kZSBmYWlsdXJlcyBib3RoIGZsb3cgdGhyb3VnaFxuICAgICAgICAgICAgLy8gbWF5YmVEZWNvZGVXaXJlJ3Mgb3duIHBhc3MtdGhyb3VnaCBiZWhhdmlvdXIuXG4gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2socmF3KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgcG9zdERhdGEgPSAodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSkgPT4ge1xuICAgIGluc3RhbmNlLmRvUG9zdERhdGEodXJsLCB3cmFwRGVjb2RlSWZVaUFzc2V0KHVybCwgc3VjY2Vzc0NhbGxiYWNrLCAncG9zdERhdGEnKSwgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBkYXRhKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kUmVxdWVzdCA9ICh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCB0cmFjaykgPT4ge1xuICAgIGluc3RhbmNlLmRvRmV0Y2godXJsLCB3cmFwRGVjb2RlSWZVaUFzc2V0KHVybCwgc3VjY2Vzc0NhbGxiYWNrLCAnc2VuZFJlcXVlc3QnKSxcbiAgICAgICAgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCB0cmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgZG93bmxvYWQgPSAodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSkgPT4ge1xuICAgIGluc3RhbmNlLmRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgJ0dFVCcsIHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGludm9rZVJwYyA9IChycGNEZXRhaWxzLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQgPSBudWxsKSA9PiB7XG4gICAgaW5zdGFuY2UuaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW52b2tlUmVzdCA9IChzZXJ2aWNlQ29uZmlnLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQgPSBudWxsKSA9PiB7XG4gICAgaW5zdGFuY2UuaW52b2tlUmVzdChzZXJ2aWNlQ29uZmlnLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsb0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLG1CQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFBOEQsU0FBQUQsdUJBQUFTLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFdkQsTUFBTUcsUUFBUSxHQUFBQyxPQUFBLENBQUFELFFBQUEsR0FBR0UsTUFBTSxDQUFDRixRQUFRLENBQUNHLFFBQVEsR0FBRyxJQUFJLEdB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
408
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfSGVhZGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibG9jYXRpb24iLCJleHBvcnRzIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInN0YXR1cyIsInJlc3BvbnNlIiwib2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImpzb24iLCJ0ZXh0IiwiUmVzdFV0aWxzIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwidmFsdWUiLCJpbnZva2VSZXN0Iiwic2VydmljZSIsImNvbXBvbmVudCIsInZpZXdJZCIsInN1Y2Nlc3NDYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJpbnZhbGlkUGFyYW1DYWxsYmFjayIsInJldHVyblZhbHVlQmluZGluZyIsInN1Y2Nlc3NNZXNzYWdlIiwiZXZlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ1cmwiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJyZXF1ZXN0Qm9keSIsImhlYWRlcnMiLCJwYXJhbWV0ZXJzIiwicXVlcnlTdHJpbmciLCJwYXRoUGFyYW1ldGVycyIsInJlcXVlc3RCb2R5UGFyYW1Gb3VuZCIsInBhcmFtZXRlciIsInBhcmFtZXRlclZhbHVlIiwicmVzb2x2ZVBhcmFtZXRlclZhbHVlIiwiZGF0YSIsInZhbGlkYXRvciIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJudWxsYWJsZSIsIm5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJodHRwUGFyYW1ldGVyVHlwZSIsImluY2x1ZGVQYXJhbWV0ZXJUeXBlcyIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzb2x2ZWRWYWx1ZSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImluc3RhbmNlVHlwZSIsImluZGV4T2YiLCJyZXBsYWNlIiwiY29udGVudFR5cGUiLCJtZXRob2QiLCJFcnJvciIsImxvZyIsInBvc3REYXRhIiwicHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEiLCJwYXRoIiwiZ2V0UHJvcGVydHlDaGFpblBhdGgiLCJ2YWx1ZU9iamVjdCIsInByb3BlcnR5IiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiU0VSVklDRV9DQUxMX1NVQ0NFU1MiLCJTRVJWSUNFX0NBTExfRkFJTFVSRSIsImRvd25sb2FkIiwic2VuZFJlcXVlc3QiLCJpbnZva2VScGMiLCJycGNEZXRhaWxzIiwicmVxdWVzdCIsImlkIiwic3BsaXQiLCJzZXJ2aWNlSWQiLCJwcm9jZWR1cmVOYW1lIiwiY29uZmlnIiwibW9kdWxlIiwidG9Mb3dlckNhc2UiLCJpIiwicGFyYW1ldGVyQ29uZmlnIiwiaW5kZXgiLCJ2YWwiLCJwdXNoIiwiZG9GZXRjaCIsIndhcm4iLCJkb1Bvc3REYXRhIiwic2VjdXJlIiwiZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnIiwiYm9keSIsInRyYWNrIiwic2VydmljZVR5cGUiLCJhY2Nlc3NUb2tlbiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkVG9rZW4iLCJGb3JtRGF0YSIsImZldGNoQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yIiwib3BlbiIsImVuY29kZVVSSSIsInRyYWNrUHJvbWlzZSIsImV4ZWN1dGVGZXRjaCIsImZldGNoIiwidGhlbiIsImNhdGNoIiwiZW5kc1dpdGgiLCJjbGVhciIsIm5hdmlnYXRlIiwidG9TdHJpbmciLCJ0cmltIiwicGFyc2UiLCJpZ25vcmVkIiwiZGF0YVR5cGUiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsIk1FU1NBR0VfQVJSSVZFRCIsIm1lc3NhZ2UiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJldmVudFR5cGUiLCJpbnN0YW5jZSIsIlVJX0FTU0VUX1VSTF9QQVRURVJOIiwid3JhcERlY29kZUlmVWlBc3NldCIsIm9wTGFiZWwiLCJ0ZXN0IiwicmF3IiwiZGVjb2RlZCIsIm1heWJlRGVjb2RlV2lyZSIsInNlcnZpY2VDb25maWciXSwic291cmNlcyI6WyIuLi9zcmMvbGliL1Jlc3RVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQge3RyYWNrUHJvbWlzZX0gZnJvbSAncmVhY3QtcHJvbWlzZS10cmFja2VyJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQge2luc3RhbmNlT2Z9IGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgaGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvZGFzaGJvYXJkL2NvbXBvbmVudHMvSGVhZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBzdGF0dXMgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICB9XG59O1xuXG5jb25zdCBqc29uID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn07XG5cbmNsYXNzIFJlc3RVdGlscyB7XG4gICAgaXNQYXJhbVZhbHVlTnVsbChwYXJhbVZhbHVlKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtVmFsdWUuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBVdGlscy5pc051bGwocGFyYW1WYWx1ZS52YWx1ZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpbnZva2VSZXN0KHNlcnZpY2UsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHVybCA9IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpID8gc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZS5wYXJhbWV0ZXJzKSkge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgIGxldCByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHNlcnZpY2UucGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIudmFsaWRhdG9yKVxuICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChpbnZhbGlkUGFyYW1DYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lOVkFMSUQgUEFSQU1FVEVSIDogJywgcGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRQYXJhbUNhbGxiYWNrKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGh0dHBQYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyLmh0dHBQYXJhbWV0ZXJUeXBlO1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbWV0ZXJUeXBlID0gJ1FVRVJZX1BBUkFNRVRFUic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcykgJiYgc2VydmljZS5pbmNsdWRlUGFyYW1ldGVyVHlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZS50eXBlID0gJ01hcEVudGl0eUR0byc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gKHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUudmFsdWUgOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUEFUSF9WQVJJQUJMRScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZW5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgbmFtZSBhbmQgdGhlIFVSTCBjb250YWlucyB7bmFtZX0sIHJlcGxhY2UgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgneycgKyBwYXJhbWV0ZXIubmFtZSArICd9JywgcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhcmFtZXRlcnMgKz0gJy8nICsgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ0hFQURFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1twYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ1JFUVVFU1RfQk9EWScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5UGFyYW1Gb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignT25seSBvbmUgcmVxdWVzdCBib2R5IGlzIHBlcm1pdHRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudHlwZSA9ICdNYXBFbnRpdHlEdG8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdEJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50eXBlID0gcGFyYW1ldGVyVmFsdWUudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGhQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB1cmwgKz0gcXVlcnlTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29udGVudFR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIHNlcnZpY2UubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsIHx8IHNlcnZpY2UubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUE9TVElORyBSRVNUIFJFUVVFU1QgQk9EWSA6IFwiLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgICAgICBwb3N0RGF0YSh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCByZXNwb25zZSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9TVUNDRVNTLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGVycm9yQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICB9LCAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJykge1xuICAgICAgICAgICAgZG93bmxvYWQodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VuZFJlcXVlc3QodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIGRhdGEpO1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9GQUlMVVJFKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICFzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgcmVxdWVzdC5pZCA9IHZpZXdJZDtcblxuICAgICAgICBsZXQgc3BsaXQgPSBycGNEZXRhaWxzLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICByZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBycGNEZXRhaWxzLnByb2NlZHVyZU5hbWU7XG5cbiAgICAgICAgbGV0IGNvbmZpZyA9IHt9O1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IHt9O1xuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocnBjRGV0YWlscy5wYXJhbWV0ZXJzKSAmJiBycGNEZXRhaWxzLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJwY0RldGFpbHMucGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSBycGNEZXRhaWxzLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlci5uYW1lID0gcGFyYW1ldGVyQ29uZmlnLm5hbWU7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyLmluZGV4ID0gcGFyYW1ldGVyQ29uZmlnLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IHZhbC50eXBlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gJ1N0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXJDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXJDb25maWcubmFtZSkgPT09IGZhbHNlICYmIHRoaXMuaXNQYXJhbVZhbHVlTnVsbChwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGludmFsaWRQYXJhbUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignSU5WQUxJRCBQQVJBTUVURVIgOiAnLCBwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFBhcmFtQ2FsbGJhY2socGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb0ZldGNoKGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnLycgKyBtb2R1bGUgKyAnL2FwaS92MS9ycGMvaW52b2tlJyxcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZpZXdJZCkgJiYgIVV0aWxzLmlzTnVsbChjb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyB2aWV3IGlkIG9yIGNvbXBvbmVudCBzcGVjaWZpZWQgd2hpbGUgZXhlY3V0aW5nIFtcIiArIG1vZHVsZSArIFwiXSBycGMgOiBcIiwgcnBjRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlQmluZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmdldFByb3BlcnR5Q2hhaW5QYXRoKHJldHVyblZhbHVlQmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlld0lkKSAmJiAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSwgJ1BPU1QnLCBmYWxzZSwgcmVxdWVzdCwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJ1ZSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBjb25maWcpO1xuICAgIH1cblxuICAgIGRvUG9zdERhdGEodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCAnUE9TVCcsIGZhbHNlLCBkYXRhLCAncmVzdCcpO1xuICAgIH1cblxuICAgIGRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbWV0aG9kLCBkb3dubG9hZCwgYm9keSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJhY2ssIGNvbnRlbnRUeXBlID0gbnVsbCwgY29uZmlnID0gbnVsbCkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsXG4gICAgICAgICAgICBib2R5LCBudWxsLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgIGZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsIGJvZHksIHNlcnZpY2VUeXBlLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NUb2tlbicpO1xuICAgICAgICBjb25zdCBpZFRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpO1xuXG4gICAgICAgIGxldCBkYXRhID0gYm9keSA/IChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gYm9keSA6IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogbnVsbDtcbiAgICAgICAgbGV0IGZldGNoQ29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZmV0Y2hDb25maWcpKSB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3VyZSkgfHwgc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKG1ldGhvZCkgPyAnR0VUJyA6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIFNlY3VyZSBieSBkZWZhdWx0LCBwcmVzZW5jZS1iYXNlZDogYXR0YWNoIGF1dGggT05MWSB3aGVuIGFcbiAgICAgICAgICAgICAgICAvLyBzZXNzaW9uIGV4aXN0cyDigJQgbmV2ZXIgJ0JlYXJlciBudWxsJyBvciBhIHN0YWxlIHRva2VuLiBQcmUtYXV0aFxuICAgICAgICAgICAgICAgIC8vIHNjcmVlbnMgKHZpZXcvc2VjdXJpdHkvKikgY2xlYXIgc2Vzc2lvblN0b3JhZ2Ugb24gbW91bnQuXG4gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc1Rva2VuKSBmZXRjaENvbmZpZy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgICAgICBpZiAoaWRUb2tlbikgZmV0Y2hDb25maWcuaGVhZGVyc1snaWRUb2tlbiddID0gaWRUb2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKG1ldGhvZCkgPyAnR0VUJyA6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogZGF0YVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgncmVzdCcgPT09IHNlcnZpY2VUeXBlICYmICEoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG93bmxvYWQpIHtcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVybCArPSAnJic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVybCArPSAnYWNjZXNzX3Rva2VuPScgKyBhY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgIHVybCArPSAnJmlkVG9rZW49JyArIGlkVG9rZW47XG4gICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVByaW1hcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpKTtcbiAgICAgICAgICAgIHVybCArPSAnJnRoZW1lU2Vjb25kYXJ5Q29sb3I9JyArIGVuY29kZVVSSUNvbXBvbmVudChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvcigpKTtcblxuICAgICAgICAgICAgd2luZG93Lm9wZW4oZW5jb2RlVVJJKHVybCksICdfYmxhbmsnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwodHJhY2spIHx8IHRyYWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdHJhY2tQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGZldGNoKGVuY29kZVVSSSh1cmwpLCBmZXRjaENvbmZpZylcbiAgICAgICAgICAgIC50aGVuKHN0YXR1cylcbiAgICAgICAgICAgIC50aGVuKGpzb24pXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEobnVsbCwgZGF0YSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIEZFVENISU5HIEZST00gVVJMIFtcIiArIHVybCArIFwiXVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIGlmKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuc3RhdHVzID09PSA0MDEgJiYgIXVybC5lbmRzV2l0aCgnL2xvZ291dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIubmF2aWdhdGUoJy9sb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShjb21wb25lbnQsIGRhdGEsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkgJiYgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyB8fCBVdGlscy5pc051bGwoZGF0YSkgfHwgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGFUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoc3VjY2Vzc01lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFwcGxpY2F0aW9uTWFuYWdlci5wb3B1bGF0ZVRlbXBsYXRlKHN1Y2Nlc3NNZXNzYWdlLCByZXNwb25zZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhyZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIGV2ZW50VHlwZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoZXZlbnRUeXBlLCBldmVudCk7XG4gICAgfVxufVxuXG5jb25zdCBpbnN0YW5jZSA9IG5ldyBSZXN0VXRpbHMoKTtcbi8vIENEVUkgVUktYXNzZXQgVVJMcyAodmlldyAvIG1lbnUgLyBkYXNoYm9hcmQpIGFyZSBzZXJ2ZWQgd3JhcHBlZCBpbiBhXG4vLyB7X2NkdWlfejogXCI8YmFzZTY0KGd6aXAoanNvbikpPlwifSBlbnZlbG9wZSBieSBvdWktc2VydmVyJ3Ncbi8vIHdpcmVDb21wcmVzc2lvbiB1dGlsIOKAlCBzZWUgb3VpLXNlcnZlci9zcmMvd2ViL3V0aWwvd2lyZUNvbXByZXNzaW9uLnRzLlxuLy8gRGVjb2RlIHRyYW5zcGFyZW50bHkgaGVyZSBzbyBldmVyeSBsb2FkZXIgZG93bnN0cmVhbSBzZWVzIHRoZSByYXdcbi8vIENEVUkgSlNPTiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlcnZlciBoYXMgY29tcHJlc3Npb24gZW5hYmxlZC5cbi8vIEdhdGVkIG9uIHRoZSAvdWkvYXBpL3YqLyBwYXRoIHNvIG5vbi1VSSBmZXRjaGVzIGFyZSB1bmFmZmVjdGVkLlxuY29uc3QgVUlfQVNTRVRfVVJMX1BBVFRFUk4gPSAvXFwvdWlcXC9hcGlcXC92WzAtOV0rXFwvLztcblxuLy8gV3JhcHMgYSBzdWNjZXNzIGNhbGxiYWNrIHdpdGggdGhlIHdpcmUtZW52ZWxvcGUgZGVjb2RlciB3aGVuIHRoZSBVUkxcbi8vIG1hdGNoZXMgdGhlIFVJLWFzc2V0IHBhdHRlcm4uIEJvdGggc2VuZFJlcXVlc3QgKEdFVCAvIGRvRmV0Y2ggcGF0aClcbi8vIGFuZCBwb3N0RGF0YSAoUE9TVCAvIGRvUG9zdERhdGEgcGF0aCkgbmVlZCB0aGlzIOKAlCBtZW51cyBhbmRcbi8vIGRhc2hib2FyZHMgYXJlIHNvbWV0aW1lcyBsb2FkZWQgdmlhIFBPU1Qgd2l0aCBjcml0ZXJpYSBib2RpZXMsIHNvXG4vLyB0aGV5IGhpdCBvdWktc2VydmVyJ3MgY29tcHJlc3Npb24gdG9vLlxuY29uc3Qgd3JhcERlY29kZUlmVWlBc3NldCA9ICh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgb3BMYWJlbCkgPT4ge1xuICAgIGlmICghdXJsIHx8ICFVSV9BU1NFVF9VUkxfUEFUVEVSTi50ZXN0KHVybCkgfHwgIXN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gc3VjY2Vzc0NhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gYXN5bmMgKHJhdykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IFV0aWxzLm1heWJlRGVjb2RlV2lyZShyYXcpO1xuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGRlY29kZWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbJHtvcExhYmVsfV0gQ0RVSSB3aXJlIGRlY29kZSBmYWlsZWQgZm9yYCwgdXJsLCBlKTtcbiAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byByYXcgc28gdGhlIGNhbGxlciBzdGlsbCBnZXRzICpzb21ldGhpbmcqO1xuICAgICAgICAgICAgLy8gbWlzc2luZyBfY2R1aV96IGFuZCBkZWNvZGUgZmFpbHVyZXMgYm90aCBmbG93IHRocm91Z2hcbiAgICAgICAgICAgIC8vIG1heWJlRGVjb2RlV2lyZSdzIG93biBwYXNzLXRocm91Z2ggYmVoYXZpb3VyLlxuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJhdyk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3REYXRhID0gKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzZWN1cmUsIGRhdGEpID0+IHtcbiAgICBpbnN0YW5jZS5kb1Bvc3REYXRhKHVybCwgd3JhcERlY29kZUlmVWlBc3NldCh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgJ3Bvc3REYXRhJyksIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZFJlcXVlc3QgPSAodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgdHJhY2spID0+IHtcbiAgICBpbnN0YW5jZS5kb0ZldGNoKHVybCwgd3JhcERlY29kZUlmVWlBc3NldCh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgJ3NlbmRSZXF1ZXN0JyksXG4gICAgICAgIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgdHJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkID0gKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzZWN1cmUpID0+IHtcbiAgICBpbnN0YW5jZS5kb0ZldGNoKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzZWN1cmUsICdHRVQnLCB0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZva2VScGMgPSAocnBjRGV0YWlscywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50ID0gbnVsbCkgPT4ge1xuICAgIGluc3RhbmNlLmludm9rZVJwYyhycGNEZXRhaWxzLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGludm9rZVJlc3QgPSAoc2VydmljZUNvbmZpZywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50ID0gbnVsbCkgPT4ge1xuICAgIGluc3RhbmNlLmludm9rZVJlc3Qoc2VydmljZUNvbmZpZywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLG9CQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxtQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFB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