@appium/base-driver 8.5.3 → 8.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/build/lib/basedriver/capabilities.d.ts.map +1 -1
  2. package/build/lib/basedriver/capabilities.js +1 -1
  3. package/build/lib/basedriver/commands/event.js +1 -1
  4. package/build/lib/basedriver/commands/find.d.ts.map +1 -1
  5. package/build/lib/basedriver/commands/find.js +1 -1
  6. package/build/lib/basedriver/commands/index.js +1 -1
  7. package/build/lib/basedriver/commands/log.d.ts.map +1 -1
  8. package/build/lib/basedriver/commands/log.js +1 -1
  9. package/build/lib/basedriver/commands/session.js +1 -1
  10. package/build/lib/basedriver/commands/settings.d.ts.map +1 -1
  11. package/build/lib/basedriver/commands/settings.js +1 -1
  12. package/build/lib/basedriver/commands/timeout.d.ts.map +1 -1
  13. package/build/lib/basedriver/commands/timeout.js +1 -1
  14. package/build/lib/basedriver/core.d.ts +120 -139
  15. package/build/lib/basedriver/core.d.ts.map +1 -1
  16. package/build/lib/basedriver/core.js +1 -49
  17. package/build/lib/basedriver/desired-caps.d.ts +5 -2
  18. package/build/lib/basedriver/desired-caps.d.ts.map +1 -1
  19. package/build/lib/basedriver/desired-caps.js +14 -18
  20. package/build/lib/basedriver/device-settings.d.ts +9 -9
  21. package/build/lib/basedriver/device-settings.d.ts.map +1 -1
  22. package/build/lib/basedriver/device-settings.js +4 -4
  23. package/build/lib/basedriver/driver.d.ts +43 -38
  24. package/build/lib/basedriver/driver.d.ts.map +1 -1
  25. package/build/lib/basedriver/driver.js +58 -11
  26. package/build/lib/basedriver/helpers.d.ts +8 -3
  27. package/build/lib/basedriver/helpers.d.ts.map +1 -1
  28. package/build/lib/basedriver/helpers.js +4 -6
  29. package/build/lib/basedriver/logger.d.ts +1 -1
  30. package/build/lib/basedriver/logger.d.ts.map +1 -1
  31. package/build/lib/basedriver/logger.js +1 -1
  32. package/build/lib/constants.js +1 -1
  33. package/build/lib/express/crash.d.ts.map +1 -1
  34. package/build/lib/express/crash.js +1 -1
  35. package/build/lib/express/express-logging.d.ts.map +1 -1
  36. package/build/lib/express/express-logging.js +1 -1
  37. package/build/lib/express/idempotency.js +1 -1
  38. package/build/lib/express/logger.d.ts +1 -1
  39. package/build/lib/express/logger.d.ts.map +1 -1
  40. package/build/lib/express/logger.js +1 -1
  41. package/build/lib/express/middleware.d.ts.map +1 -1
  42. package/build/lib/express/middleware.js +1 -1
  43. package/build/lib/express/server.d.ts +21 -0
  44. package/build/lib/express/server.d.ts.map +1 -1
  45. package/build/lib/express/server.js +4 -9
  46. package/build/lib/express/static.d.ts.map +1 -1
  47. package/build/lib/express/static.js +2 -2
  48. package/build/lib/express/websocket.d.ts +14 -11
  49. package/build/lib/express/websocket.d.ts.map +1 -1
  50. package/build/lib/express/websocket.js +2 -2
  51. package/build/lib/helpers/capabilities.d.ts.map +1 -1
  52. package/build/lib/helpers/capabilities.js +1 -1
  53. package/build/lib/index.d.ts +2 -1
  54. package/build/lib/index.js +7 -1
  55. package/build/lib/jsonwp-proxy/protocol-converter.d.ts.map +1 -1
  56. package/build/lib/jsonwp-proxy/protocol-converter.js +2 -2
  57. package/build/lib/jsonwp-proxy/proxy.d.ts +30 -5
  58. package/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -1
  59. package/build/lib/jsonwp-proxy/proxy.js +23 -4
  60. package/build/lib/jsonwp-status/status.d.ts.map +1 -1
  61. package/build/lib/jsonwp-status/status.js +2 -2
  62. package/build/lib/protocol/errors.d.ts +17 -8
  63. package/build/lib/protocol/errors.d.ts.map +1 -1
  64. package/build/lib/protocol/errors.js +9 -5
  65. package/build/lib/protocol/helpers.js +1 -1
  66. package/build/lib/protocol/index.js +1 -1
  67. package/build/lib/protocol/protocol.d.ts.map +1 -1
  68. package/build/lib/protocol/protocol.js +1 -1
  69. package/build/lib/protocol/routes.d.ts +17 -3
  70. package/build/lib/protocol/routes.d.ts.map +1 -1
  71. package/build/lib/protocol/routes.js +1 -1
  72. package/build/lib/protocol/validators.js +1 -1
  73. package/build/test/basedriver/driver-e2e-tests.js +1 -1
  74. package/build/test/basedriver/driver-tests.js +1 -1
  75. package/build/test/basedriver/index.js +1 -1
  76. package/build/test/e2e/basedriver/driver.e2e.spec.js +1 -1
  77. package/build/test/e2e/basedriver/helpers.e2e.spec.js +1 -1
  78. package/build/test/e2e/basedriver/websockets.e2e.spec.js +1 -1
  79. package/build/test/e2e/express/server.e2e.spec.js +1 -1
  80. package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +1 -1
  81. package/build/test/e2e/protocol/fake-driver.js +1 -1
  82. package/build/test/e2e/protocol/helpers.js +1 -1
  83. package/build/test/e2e/protocol/protocol.e2e.spec.js +13 -13
  84. package/build/test/helpers.js +1 -1
  85. package/build/test/unit/basedriver/capabilities.spec.js +12 -12
  86. package/build/test/unit/basedriver/capability.spec.js +15 -15
  87. package/build/test/unit/basedriver/commands/event.spec.js +1 -1
  88. package/build/test/unit/basedriver/commands/log.spec.js +1 -1
  89. package/build/test/unit/basedriver/device-settings.spec.js +1 -1
  90. package/build/test/unit/basedriver/driver.spec.js +1 -1
  91. package/build/test/unit/basedriver/helpers.spec.js +33 -33
  92. package/build/test/unit/basedriver/timeout.spec.js +1 -1
  93. package/build/test/unit/express/server.spec.js +1 -1
  94. package/build/test/unit/express/static.spec.js +2 -2
  95. package/build/test/unit/jsonwp-proxy/mock-request.js +1 -1
  96. package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +1 -1
  97. package/build/test/unit/jsonwp-proxy/proxy.spec.js +2 -2
  98. package/build/test/unit/jsonwp-proxy/url.spec.js +1 -1
  99. package/build/test/unit/jsonwp-status/status.spec.js +1 -1
  100. package/build/test/unit/protocol/errors.spec.js +1 -1
  101. package/build/test/unit/protocol/routes.spec.js +1 -1
  102. package/build/test/unit/protocol/validator.spec.js +1 -1
  103. package/build/tsconfig.tsbuildinfo +1 -1
  104. package/lib/basedriver/capabilities.js +95 -47
  105. package/lib/basedriver/commands/event.js +4 -4
  106. package/lib/basedriver/commands/find.js +12 -26
  107. package/lib/basedriver/commands/index.js +7 -7
  108. package/lib/basedriver/commands/log.js +5 -7
  109. package/lib/basedriver/commands/session.js +3 -3
  110. package/lib/basedriver/commands/settings.js +3 -5
  111. package/lib/basedriver/commands/timeout.js +18 -23
  112. package/lib/basedriver/core.js +150 -229
  113. package/lib/basedriver/desired-caps.js +30 -29
  114. package/lib/basedriver/device-settings.js +21 -20
  115. package/lib/basedriver/driver.js +131 -96
  116. package/lib/basedriver/helpers.js +124 -81
  117. package/lib/basedriver/logger.js +1 -1
  118. package/lib/constants.js +2 -6
  119. package/lib/express/crash.js +4 -6
  120. package/lib/express/express-logging.js +26 -24
  121. package/lib/express/idempotency.js +16 -16
  122. package/lib/express/logger.js +1 -1
  123. package/lib/express/middleware.js +49 -33
  124. package/lib/express/server.js +68 -44
  125. package/lib/express/static.js +11 -12
  126. package/lib/express/websocket.js +26 -16
  127. package/lib/helpers/capabilities.js +11 -16
  128. package/lib/index.js +50 -33
  129. package/lib/jsonwp-proxy/protocol-converter.js +85 -69
  130. package/lib/jsonwp-proxy/proxy.js +132 -53
  131. package/lib/jsonwp-status/status.js +36 -29
  132. package/lib/protocol/errors.js +469 -292
  133. package/lib/protocol/helpers.js +5 -8
  134. package/lib/protocol/index.js +22 -15
  135. package/lib/protocol/protocol.js +103 -55
  136. package/lib/protocol/routes.js +430 -273
  137. package/lib/protocol/validators.js +5 -5
  138. package/package.json +7 -6
  139. package/test/basedriver/driver-e2e-tests.js +92 -66
  140. package/test/basedriver/driver-tests.js +90 -33
  141. package/test/basedriver/index.js +1 -1
@@ -505,7 +505,7 @@ class UnableToSetCookieError extends ProtocolError {
505
505
  }
506
506
 
507
507
  constructor(err) {
508
- super(err || 'A request to set a cookie\'s value could not be satisfied.', UnableToSetCookieError.code(), UnableToSetCookieError.w3cStatus(), UnableToSetCookieError.error());
508
+ super(err || "A request to set a cookie's value could not be satisfied.", UnableToSetCookieError.code(), UnableToSetCookieError.w3cStatus(), UnableToSetCookieError.error());
509
509
  }
510
510
 
511
511
  }
@@ -892,7 +892,7 @@ exports.errors = errors;
892
892
  const jsonwpErrorCodeMap = {};
893
893
 
894
894
  for (let ErrorClass of _lodash.default.values(errors)) {
895
- if (ErrorClass.code) {
895
+ if ('code' in ErrorClass) {
896
896
  jsonwpErrorCodeMap[ErrorClass.code()] = ErrorClass;
897
897
  }
898
898
  }
@@ -900,7 +900,7 @@ for (let ErrorClass of _lodash.default.values(errors)) {
900
900
  const w3cErrorCodeMap = {};
901
901
 
902
902
  for (let ErrorClass of _lodash.default.values(errors)) {
903
- if (ErrorClass.error) {
903
+ if ('error' in ErrorClass) {
904
904
  w3cErrorCodeMap[ErrorClass.error()] = ErrorClass;
905
905
  }
906
906
  }
@@ -955,11 +955,15 @@ function errorFromW3CJsonCode(code, message, stacktrace = null) {
955
955
  return resultError;
956
956
  }
957
957
 
958
+ function isProtocolError(err) {
959
+ return 'w3cStatus' in err;
960
+ }
961
+
958
962
  function getResponseForW3CError(err) {
959
963
  let httpStatus;
960
964
  let w3cErrorString;
961
965
 
962
- if (!err.w3cStatus) {
966
+ if (!isProtocolError(err)) {
963
967
  err = _support.util.hasValue(err.status) ? errorFromMJSONWPStatusCode(err.status, err.value) : new errors.UnknownError(err.message);
964
968
  }
965
969
 
@@ -1011,4 +1015,4 @@ function getResponseForJsonwpError(err) {
1011
1015
 
1012
1016
  return [httpStatus, httpResBody];
1013
1017
  }
1014
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtanNvbndwTG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidzNjTG9nIiwiVzNDX1VOS05PV05fRVJST1IiLCJQcm90b2NvbEVycm9yIiwiRVM2RXJyb3IiLCJjb25zdHJ1Y3RvciIsIm1zZyIsImpzb253cENvZGUiLCJ3M2NTdGF0dXMiLCJlcnJvciIsIkhUVFBTdGF0dXNDb2RlcyIsIkJBRF9SRVFVRVNUIiwiX3N0YWNrdHJhY2UiLCJzdGFja3RyYWNlIiwic3RhY2siLCJ2YWx1ZSIsIk5vU3VjaERyaXZlckVycm9yIiwiY29kZSIsIk5PVF9GT1VORCIsImVyciIsIk5vU3VjaEVsZW1lbnRFcnJvciIsIk5vU3VjaEZyYW1lRXJyb3IiLCJVbmtub3duQ29tbWFuZEVycm9yIiwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IiLCJFbGVtZW50Tm90VmlzaWJsZUVycm9yIiwiSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIiwiVW5rbm93bkVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiZXJyb3JPck1lc3NhZ2UiLCJvcmlnTWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsIm1lc3NhZ2UiLCJVbmtub3duTWV0aG9kRXJyb3IiLCJNRVRIT0RfTk9UX0FMTE9XRUQiLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIiwiRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIiwiRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciIsIkVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciIsIkluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciIsIkphdmFTY3JpcHRFcnJvciIsIlhQYXRoTG9va3VwRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJSRVFVRVNUX1RJTUVPVVQiLCJOb1N1Y2hXaW5kb3dFcnJvciIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiSW52YWxpZENvb2tpZURvbWFpbkVycm9yIiwiTm9TdWNoQ29va2llRXJyb3IiLCJVbmFibGVUb1NldENvb2tpZUVycm9yIiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwiTm9BbGVydE9wZW5FcnJvciIsIk5vU3VjaEFsZXJ0RXJyb3IiLCJTY3JpcHRUaW1lb3V0RXJyb3IiLCJJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IiLCJJbnZhbGlkQ29vcmRpbmF0ZXNFcnJvciIsIklNRU5vdEF2YWlsYWJsZUVycm9yIiwiSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yIiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiZGV0YWlscyIsIk1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yIiwiTm9TdWNoQ29udGV4dEVycm9yIiwiSW52YWxpZENvbnRleHRFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiVW5hYmxlVG9DYXB0dXJlU2NyZWVuIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwicmVxdWlyZWRQYXJhbXMiLCJhY3R1YWxQYXJhbXMiLCJlcnJNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIlByb3h5UmVxdWVzdEVycm9yIiwicmVzcG9uc2VFcnJvciIsImh0dHBTdGF0dXMiLCJyZXNwb25zZUVycm9yT2JqIiwidXRpbCIsInNhZmVKc29uUGFyc2UiLCJpc1BsYWluT2JqZWN0IiwiaXNFbXB0eSIsImhhcyIsInczYyIsImpzb253cCIsImdldEFjdHVhbEVycm9yIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSIsImlzTnVtYmVyIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJlcnJvcnMiLCJqc29ud3BFcnJvckNvZGVNYXAiLCJFcnJvckNsYXNzIiwidmFsdWVzIiwidzNjRXJyb3JDb2RlTWFwIiwiaXNVbmtub3duRXJyb3IiLCJuYW1lIiwiZmluZCIsImVxdWFsTmFtZXMiLCJpc0Vycm9yVHlwZSIsInR5cGUiLCJkZWJ1ZyIsInRvTG93ZXJDYXNlIiwicmVzdWx0RXJyb3IiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwidzNjRXJyb3JTdHJpbmciLCJodHRwUmVzQm9keSIsImdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IiLCJOT1RfSU1QTEVNRU5URUQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFUzZFcnJvciBmcm9tICdlczYtZXJyb3InO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBTdGF0dXNDb2RlcyBhcyBIVFRQU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5cbmNvbnN0IG1qc29ud3BMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdNSlNPTldQJyk7XG5jb25zdCB3M2NMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdXM0MnKTtcblxuY29uc3QgVzNDX1VOS05PV05fRVJST1IgPSAndW5rbm93biBlcnJvcic7XG5cbi8vIGJhc2UgZXJyb3IgY2xhc3MgZm9yIGFsbCBvZiBvdXIgZXJyb3JzXG5leHBvcnQgY2xhc3MgUHJvdG9jb2xFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1zZywganNvbndwQ29kZSwgdzNjU3RhdHVzLCBlcnJvcikge1xuICAgIHN1cGVyKG1zZyk7XG4gICAgdGhpcy5qc29ud3BDb2RlID0ganNvbndwQ29kZTtcbiAgICB0aGlzLmVycm9yID0gZXJyb3IgfHwgVzNDX1VOS05PV05fRVJST1I7XG4gICAgaWYgKHRoaXMuanNvbndwQ29kZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5qc29ud3BDb2RlID0gMTM7XG4gICAgfVxuICAgIHRoaXMudzNjU3RhdHVzID0gdzNjU3RhdHVzIHx8IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgICB0aGlzLl9zdGFja3RyYWNlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBzdGFja3RyYWNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2t0cmFjZSB8fCB0aGlzLnN0YWNrO1xuICB9XG5cbiAgc2V0IHN0YWNrdHJhY2UgKHZhbHVlKSB7XG4gICAgdGhpcy5fc3RhY2t0cmFjZSA9IHZhbHVlO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2Jsb2IvMTc2YjRhOWUzMDgyYWMxOTI2ZjJhNDM2ZWIzNDY3NjBjMzdhNTk5OC9qYXZhL2NsaWVudC9zcmMvb3JnL29wZW5xYS9zZWxlbml1bS9yZW1vdGUvRXJyb3JDb2Rlcy5qYXZhI0wyMTVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TZWxlbml1bUhRL3NlbGVuaXVtL2lzc3Vlcy81NTYyI2lzc3VlY29tbWVudC0zNzAzNzk0NzBcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNkZm4tZXJyb3ItY29kZVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRHJpdmVyRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2O1xuICB9XG4gIC8vIFczQyBFcnJvciBpcyBjYWxsZWQgSW52YWxpZFNlc3Npb25JRFxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBzZXNzaW9uIGlkJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNlc3Npb24gaXMgZWl0aGVyIHRlcm1pbmF0ZWQgb3Igbm90IHN0YXJ0ZWQnLCBOb1N1Y2hEcml2ZXJFcnJvci5jb2RlKCksXG4gICAgICAgICAgTm9TdWNoRHJpdmVyRXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaERyaXZlckVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hFbGVtZW50RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGVsZW1lbnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQgb24gdGhlIHBhZ2UgdXNpbmcgdGhlIGdpdmVuICcgK1xuICAgICAgICAgICdzZWFyY2ggcGFyYW1ldGVycy4nLCBOb1N1Y2hFbGVtZW50RXJyb3IuY29kZSgpLCBOb1N1Y2hFbGVtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgTm9TdWNoRWxlbWVudEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hGcmFtZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gODtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBmcmFtZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHN3aXRjaCB0byBhIGZyYW1lIGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgYmVjYXVzZSAnICtcbiAgICAgICAgICAndGhlIGZyYW1lIGNvdWxkIG5vdCBiZSBmb3VuZC4nLCBOb1N1Y2hGcmFtZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBOb1N1Y2hGcmFtZUVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hGcmFtZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duQ29tbWFuZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gOTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5rbm93biBjb21tYW5kJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCwgb3IgYSByZXF1ZXN0IHdhcyAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgdXNpbmcgYW4gSFRUUCBtZXRob2QgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBtYXBwZWQgJyArXG4gICAgICAgICAgJ3Jlc291cmNlLicsIFVua25vd25Db21tYW5kRXJyb3IuY29kZSgpLCBVbmtub3duQ29tbWFuZEVycm9yLnczY1N0YXR1cygpLCBVbmtub3duQ29tbWFuZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZWxlbWVudCBjb21tYW5kIGZhaWxlZCBiZWNhdXNlIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQgaXMgbm8gJyArXG4gICAgICAgICAgJ2xvbmdlciBhdHRhY2hlZCB0byB0aGUgRE9NLicsIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvci53M2NTdGF0dXMoKSwgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxMTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCB2aXNpYmxlJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzICcgK1xuICAgICAgICAgICdub3QgdmlzaWJsZSBvbiB0aGUgcGFnZS4nLCBFbGVtZW50Tm90VmlzaWJsZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBFbGVtZW50Tm90VmlzaWJsZUVycm9yLnczY1N0YXR1cygpLCBFbGVtZW50Tm90VmlzaWJsZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxMjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGVsZW1lbnQgc3RhdGUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgJyArXG4gICAgICAgICAgJ2luIGFuIGludmFsaWQgc3RhdGUgKGUuZy4gYXR0ZW1wdGluZyB0byBjbGljayBhIGRpc2FibGVkIGVsZW1lbnQpLicsXG4gICAgICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLmNvZGUoKSwgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93bkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTM7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gVzNDX1VOS05PV05fRVJST1I7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycm9yT3JNZXNzYWdlKSB7XG4gICAgY29uc3Qgb3JpZ01lc3NhZ2UgPSBfLmlzU3RyaW5nKChlcnJvck9yTWVzc2FnZSB8fCB7fSkubWVzc2FnZSlcbiAgICAgID8gZXJyb3JPck1lc3NhZ2UubWVzc2FnZVxuICAgICAgOiBlcnJvck9yTWVzc2FnZTtcbiAgICBjb25zdCBtZXNzYWdlID0gJ0FuIHVua25vd24gc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4nICtcbiAgICAgIChvcmlnTWVzc2FnZSA/IGAgT3JpZ2luYWwgZXJyb3I6ICR7b3JpZ01lc3NhZ2V9YCA6ICcnKTtcbiAgICBzdXBlcihtZXNzYWdlLCBVbmtub3duRXJyb3IuY29kZSgpLCBVbmtub3duRXJyb3IudzNjU3RhdHVzKCksIFVua25vd25FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93bk1ldGhvZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNDA1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTUVUSE9EX05PVF9BTExPV0VEO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmtub3duIG1ldGhvZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIHJlcXVlc3RlZCBjb21tYW5kIG1hdGNoZWQgYSBrbm93biBVUkwgYnV0IGRpZCBub3QgbWF0Y2ggYW4gbWV0aG9kIGZvciB0aGF0IFVSTCcsXG4gICAgICAgICAgVW5rbm93bk1ldGhvZEVycm9yLmNvZGUoKSwgVW5rbm93bk1ldGhvZEVycm9yLnczY1N0YXR1cygpLCBVbmtub3duTWV0aG9kRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA0MDU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSBzZXJ2ZXItc2lkZSBlcnJvciBvY2N1cnJlZC4gQ29tbWFuZCBjYW5ub3QgYmUgc3VwcG9ydGVkLicsXG4gICAgICAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvci5jb2RlKCksIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTU7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IHNlbGVjdGFibGUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBzZWxlY3QgYW4gZWxlbWVudCB0aGF0IGNhbm5vdCBiZSBzZWxlY3RlZC4nLFxuICAgICAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2NDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBjbGljayBpbnRlcmNlcHRlZCc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgRWxlbWVudCBDbGljayBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCByZWNlaXZpbmcgJyArXG4gICAgICAgICAgJ3RoZSBldmVudHMgaXMgb2JzY3VyaW5nIHRoZSBlbGVtZW50IHRoYXQgd2FzIHJlcXVlc3RlZCBjbGlja2VkJyxcbiAgICAgICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLmNvZGUoKSwgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBub3QgaW50ZXJhY3RhYmxlJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgbm90IHBvaW50ZXItIG9yIGtleWJvYXJkIGludGVyYWN0YWJsZScsXG4gICAgICAgICAgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLmNvZGUoKSwgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnNlY3VyZSBjZXJ0aWZpY2F0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTmF2aWdhdGlvbiBjYXVzZWQgdGhlIHVzZXIgYWdlbnQgdG8gaGl0IGEgY2VydGlmaWNhdGUgd2FybmluZywgd2hpY2ggaXMgdXN1YWxseSB0aGUgcmVzdWx0IG9mIGFuIGV4cGlyZWQgb3IgaW52YWxpZCBUTFMgY2VydGlmaWNhdGUnLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmNvZGUoKSwgbnVsbCwgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKYXZhU2NyaXB0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnamF2YXNjcmlwdCBlcnJvcic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nIHVzZXIgc3VwcGxpZWQgSmF2YVNjcmlwdC4nLFxuICAgICAgICAgIEphdmFTY3JpcHRFcnJvci5jb2RlKCksIEphdmFTY3JpcHRFcnJvci53M2NTdGF0dXMoKSwgSmF2YVNjcmlwdEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBYUGF0aExvb2t1cEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBzZWxlY3Rvcic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VhcmNoaW5nIGZvciBhbiBlbGVtZW50IGJ5IFhQYXRoLicsXG4gICAgICAgICAgWFBhdGhMb29rdXBFcnJvci5jb2RlKCksIFhQYXRoTG9va3VwRXJyb3IudzNjU3RhdHVzKCksIFhQYXRoTG9va3VwRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDIxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuUkVRVUVTVF9USU1FT1VUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd0aW1lb3V0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZSBiZWZvcmUgaXRzIHRpbWVvdXQgZXhwaXJlZC4nLFxuICAgICAgICAgIFRpbWVvdXRFcnJvci5jb2RlKCksIFRpbWVvdXRFcnJvci53M2NTdGF0dXMoKSwgVGltZW91dEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hXaW5kb3dFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDIzO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIHdpbmRvdyc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCB3aW5kb3cgY291bGQgbm90IGJlIHNhdGlzZmllZCAnICtcbiAgICAgICAgICAnYmVjYXVzZSB0aGUgd2luZG93IGNvdWxkIG5vdCBiZSBmb3VuZC4nLCBOb1N1Y2hXaW5kb3dFcnJvci5jb2RlKCksXG4gICAgICAgICAgTm9TdWNoV2luZG93RXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaFdpbmRvd0Vycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYxO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGFyZSBlaXRoZXIgaW52YWxpZCBvciBtYWxmb3JtZWQnLFxuICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLmNvZGUoKSwgSW52YWxpZEFyZ3VtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRDb29raWVEb21haW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI0O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb2tpZSBkb21haW4nO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gaWxsZWdhbCBhdHRlbXB0IHdhcyBtYWRlIHRvIHNldCBhIGNvb2tpZSB1bmRlciBhIGRpZmZlcmVudCAnICtcbiAgICAgICAgICAnZG9tYWluIHRoYW4gdGhlIGN1cnJlbnQgcGFnZS4nLCBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IuY29kZSgpLFxuICAgICAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci53M2NTdGF0dXMoKSwgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hDb29raWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGNvb2tpZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTm8gY29va2llIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIG5hbWUgd2FzIGZvdW5kIGFtb25nc3QgdGhlIGFzc29jaWF0ZWQgY29va2llcyBvZiB0aGUgY3VycmVudCBicm93c2luZyBjb250ZXh04oCZcyBhY3RpdmUgZG9jdW1lbnQnLFxuICAgICAgICAgIE5vU3VjaENvb2tpZUVycm9yLmNvZGUoKSwgTm9TdWNoQ29va2llRXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaENvb2tpZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFibGVUb1NldENvb2tpZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3VuYWJsZSB0byBzZXQgY29va2llJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHJlcXVlc3QgdG8gc2V0IGEgY29va2llXFwncyB2YWx1ZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkLicsXG4gICAgICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvci5jb2RlKCksIFVuYWJsZVRvU2V0Q29va2llRXJyb3IudzNjU3RhdHVzKCksIFVuYWJsZVRvU2V0Q29va2llRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI2O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmV4cGVjdGVkIGFsZXJ0IG9wZW4nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gICAgICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmNvZGUoKSwgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLCBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vQWxlcnRPcGVuRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBhbGVydCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBvcGVyYXRlIG9uIGEgbW9kYWwgZGlhbG9nIHdoZW4gb25lICcgK1xuICAgICAgICAgICd3YXMgbm90IG9wZW4uJywgTm9BbGVydE9wZW5FcnJvci5jb2RlKCksIE5vQWxlcnRPcGVuRXJyb3IudzNjU3RhdHVzKCksIE5vQWxlcnRPcGVuRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaEFsZXJ0RXJyb3IgZXh0ZW5kcyBOb0FsZXJ0T3BlbkVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBTY3JpcHRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyODtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLlJFUVVFU1RfVElNRU9VVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc2NyaXB0IHRpbWVvdXQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2NyaXB0IGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgICAgICAgICBTY3JpcHRUaW1lb3V0RXJyb3IuY29kZSgpLCBTY3JpcHRUaW1lb3V0RXJyb3IudzNjU3RhdHVzKCksIFNjcmlwdFRpbWVvdXRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBjb29yZGluYXRlcyc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIGNvb3JkaW5hdGVzIHByb3ZpZGVkIHRvIGFuIGludGVyYWN0aW9ucyBvcGVyYXRpb24gYXJlIGludmFsaWQuJyxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IuY29kZSgpLCBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQ29vcmRpbmF0ZXNFcnJvciBleHRlbmRzIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvciB7fVxuXG5leHBvcnQgY2xhc3MgSU1FTm90QXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQgb3BlcmF0aW9uJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdJTUUgd2FzIG5vdCBhdmFpbGFibGUuJywgSU1FTm90QXZhaWxhYmxlRXJyb3IuY29kZSgpLFxuICAgICAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLnczY1N0YXR1cygpLCBJTUVOb3RBdmFpbGFibGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzE7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gSU1FIGVuZ2luZSBjb3VsZCBub3QgYmUgc3RhcnRlZC4nLFxuICAgICAgICAgIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvci5jb2RlKCksIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRTZWxlY3RvckVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBzZWxlY3Rvcic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQXJndW1lbnQgd2FzIGFuIGludmFsaWQgc2VsZWN0b3IgKGUuZy4gWFBhdGgvQ1NTKS4nLFxuICAgICAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmNvZGUoKSwgSW52YWxpZFNlbGVjdG9yRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSW52YWxpZFNlbGVjdG9yRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc2Vzc2lvbiBub3QgY3JlYXRlZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGRldGFpbHMpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLic7XG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCBEZXRhaWxzOiAke2RldGFpbHN9YDtcbiAgICB9XG5cbiAgICBzdXBlcihtZXNzYWdlLCBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmNvZGUoKSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci53M2NTdGF0dXMoKSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzNDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbW92ZSB0YXJnZXQgb3V0IG9mIGJvdW5kcyc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGFyZ2V0IHByb3ZpZGVkIGZvciBhIG1vdmUgYWN0aW9uIGlzIG91dCBvZiBib3VuZHMuJyxcbiAgICAgICAgICBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvci5jb2RlKCksIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLnczY1N0YXR1cygpLCBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoQ29udGV4dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzU7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTm8gc3VjaCBjb250ZXh0IGZvdW5kLicsIE5vU3VjaENvbnRleHRFcnJvci5jb2RlKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQ29udGV4dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzY7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhhdCBjb21tYW5kIGNvdWxkIG5vdCBiZSBleGVjdXRlZCBpbiB0aGUgY3VycmVudCBjb250ZXh0LicsXG4gICAgICAgICAgSW52YWxpZENvbnRleHRFcnJvci5jb2RlKCkpO1xuICB9XG59XG5cbi8vIFRoZXNlIGFyZSBhbGlhc2VzIGZvciBVbmtub3duTWV0aG9kRXJyb3JcbmV4cG9ydCBjbGFzcyBOb3RZZXRJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgVW5rbm93bk1ldGhvZEVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBVbmtub3duTWV0aG9kRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdNZXRob2QgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbiBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmFibGUgdG8gY2FwdHVyZSBzY3JlZW4nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2NyZWVuIGNhcHR1cmUgd2FzIG1hZGUgaW1wb3NzaWJsZScsXG4gICAgICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmNvZGUoKSwgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLnczY1N0YXR1cygpLCBVbmFibGVUb0NhcHR1cmVTY3JlZW4uZXJyb3IoKSk7XG4gIH1cbn1cblxuXG4vLyBFcXVpdmFsZW50IHRvIFczQyBJbnZhbGlkQXJndW1lbnRFcnJvclxuZXhwb3J0IGNsYXNzIEJhZFBhcmFtZXRlcnNFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgYXJndW1lbnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChyZXF1aXJlZFBhcmFtcywgYWN0dWFsUGFyYW1zLCBlcnJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKCFlcnJNZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gYFBhcmFtZXRlcnMgd2VyZSBpbmNvcnJlY3QuIFdlIHdhbnRlZCBgICtcbiAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShyZXF1aXJlZFBhcmFtcyl9IGFuZCB5b3UgYCArXG4gICAgICAgICAgYHNlbnQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWxQYXJhbXMpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBgUGFyYW1ldGVycyB3ZXJlIGluY29ycmVjdC4gWW91IHNlbnQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWxQYXJhbXMpfSwgJHtlcnJNZXNzYWdlfWA7XG4gICAgfVxuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMudzNjU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG59XG5cbi8qKlxuICogUHJveHlSZXF1ZXN0RXJyb3IgaXMgYSBjdXN0b20gZXJyb3IgYW5kIHdpbGwgYmUgdGhyb3duIHVwIG9uIHVuc3VjY2Vzc2Z1bCBwcm94eSByZXF1ZXN0IGFuZFxuICogd2lsbCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm94eSBmYWlsdXJlLlxuICogSW4gY2FzZSBvZiBQcm94eVJlcXVlc3RFcnJvciBzaG91bGQgZmV0Y2ggdGhlIGFjdHVhbCBlcnJvciBieSBjYWxsaW5nIGBnZXRBY3R1YWxFcnJvcigpYFxuICogZm9yIHByb3h5IGZhaWx1cmUgdG8gZ2VuZXJhdGUgdGhlIGNsaWVudCByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb3h5UmVxdWVzdEVycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZXJyLCByZXNwb25zZUVycm9yLCBodHRwU3RhdHVzKSB7XG4gICAgbGV0IHJlc3BvbnNlRXJyb3JPYmogPSB1dGlsLnNhZmVKc29uUGFyc2UocmVzcG9uc2VFcnJvcik7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3JPYmogPSB7fTtcbiAgICB9XG4gICAgbGV0IG9yaWdNZXNzYWdlID0gXy5pc1N0cmluZyhyZXNwb25zZUVycm9yKSA/IHJlc3BvbnNlRXJyb3IgOiAnJztcbiAgICBpZiAoIV8uaXNFbXB0eShyZXNwb25zZUVycm9yT2JqKSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvck9iai52YWx1ZSkpIHtcbiAgICAgICAgb3JpZ01lc3NhZ2UgPSByZXNwb25zZUVycm9yT2JqLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QocmVzcG9uc2VFcnJvck9iai52YWx1ZSkgJiYgXy5pc1N0cmluZyhyZXNwb25zZUVycm9yT2JqLnZhbHVlLm1lc3NhZ2UpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlcihfLmlzRW1wdHkoZXJyKSA/IGBQcm94eSByZXF1ZXN0IHVuc3VjY2Vzc2Z1bC4gJHtvcmlnTWVzc2FnZX1gIDogZXJyKTtcblxuICAgIHRoaXMudzNjU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuXG4gICAgLy8gSWYgdGhlIHJlc3BvbnNlIGVycm9yIGlzIGFuIG9iamVjdCBhbmQgdmFsdWUgaXMgYW4gb2JqZWN0LCBpdCdzIGEgVzNDIGVycm9yIChmb3IgSlNPTldQIHZhbHVlIGlzIGEgc3RyaW5nKVxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QocmVzcG9uc2VFcnJvck9iai52YWx1ZSkgJiYgXy5oYXMocmVzcG9uc2VFcnJvck9iai52YWx1ZSwgJ2Vycm9yJykpIHtcbiAgICAgIHRoaXMudzNjID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIHRoaXMudzNjU3RhdHVzID0gaHR0cFN0YXR1cyB8fCBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuanNvbndwID0gcmVzcG9uc2VFcnJvck9iajtcbiAgICB9XG4gIH1cblxuICBnZXRBY3R1YWxFcnJvciAoKSB7XG4gICAgLy8gSWYgaXQncyBNSlNPTldQIGVycm9yLCByZXR1cm5zIGFjdHVhbCBlcnJvciBjYXVzZSBmb3IgcmVxdWVzdCBmYWlsdXJlIGJhc2VkIG9uIGBqc29ud3Auc3RhdHVzYFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy5zdGF0dXMpICYmIHV0aWwuaGFzVmFsdWUodGhpcy5qc29ud3A/LnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKHRoaXMuanNvbndwLnN0YXR1cywgdGhpcy5qc29ud3AudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLnczYykgJiYgXy5pc051bWJlcih0aGlzLnczY1N0YXR1cykgJiYgdGhpcy53M2NTdGF0dXMgPj0gMzAwKSB7XG4gICAgICByZXR1cm4gZXJyb3JGcm9tVzNDSnNvbkNvZGUodGhpcy53M2MuZXJyb3IsIHRoaXMudzNjLm1lc3NhZ2UgfHwgdGhpcy5tZXNzYWdlLCB0aGlzLnczYy5zdGFja3RyYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVbmtub3duRXJyb3IodGhpcy5tZXNzYWdlKTtcbiAgfVxufVxuLy8gbWFwIG9mIGVycm9yIGNsYXNzIG5hbWUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGVycm9ycyA9IHtOb3RZZXRJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgQmFkUGFyYW1ldGVyc0Vycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaERyaXZlckVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEVsZW1lbnRFcnJvcixcbiAgICAgICAgICAgICAgICBVbmtub3duQ29tbWFuZEVycm9yLFxuICAgICAgICAgICAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLFxuICAgICAgICAgICAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLFxuICAgICAgICAgICAgICAgIFVua25vd25FcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLFxuICAgICAgICAgICAgICAgIEphdmFTY3JpcHRFcnJvcixcbiAgICAgICAgICAgICAgICBYUGF0aExvb2t1cEVycm9yLFxuICAgICAgICAgICAgICAgIFRpbWVvdXRFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hXaW5kb3dFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hDb29raWVFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZENvb3JkaW5hdGVzRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IsXG4gICAgICAgICAgICAgICAgTm9BbGVydE9wZW5FcnJvcixcbiAgICAgICAgICAgICAgICBTY3JpcHRUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLFxuICAgICAgICAgICAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvcixcbiAgICAgICAgICAgICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLFxuICAgICAgICAgICAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEFsZXJ0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoQ29udGV4dEVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRDb250ZXh0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoRnJhbWVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmFibGVUb0NhcHR1cmVTY3JlZW4sXG4gICAgICAgICAgICAgICAgVW5rbm93bk1ldGhvZEVycm9yLFxuICAgICAgICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsXG4gICAgICAgICAgICAgICAgUHJveHlSZXF1ZXN0RXJyb3J9O1xuXG4vLyBtYXAgb2YgZXJyb3IgY29kZSB0byBlcnJvciBjbGFzc1xuY29uc3QganNvbndwRXJyb3JDb2RlTWFwID0ge307XG5mb3IgKGxldCBFcnJvckNsYXNzIG9mIF8udmFsdWVzKGVycm9ycykpIHtcbiAgaWYgKEVycm9yQ2xhc3MuY29kZSkge1xuICAgIGpzb253cEVycm9yQ29kZU1hcFtFcnJvckNsYXNzLmNvZGUoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmNvbnN0IHczY0Vycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmIChFcnJvckNsYXNzLmVycm9yKSB7XG4gICAgdzNjRXJyb3JDb2RlTWFwW0Vycm9yQ2xhc3MuZXJyb3IoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5rbm93bkVycm9yIChlcnIpIHtcbiAgcmV0dXJuICFlcnIuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgIV8udmFsdWVzKGVycm9ycykuZmluZChmdW5jdGlvbiBlcXVhbE5hbWVzIChlcnJvcikge1xuICAgICAgICAgICByZXR1cm4gZXJyb3IubmFtZSA9PT0gZXJyLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNFcnJvclR5cGUgKGVyciwgdHlwZSkge1xuICAvLyBgbmFtZWAgcHJvcGVydHkgaXMgdGhlIGNvbnN0cnVjdG9yIG5hbWVcbiAgaWYgKHR5cGUubmFtZSA9PT0gUHJvdG9jb2xFcnJvci5uYW1lKSB7XG4gICAgLy8gYGpzb253cENvZGVgIGlzIGAwYCBvbiBzdWNjZXNzXG4gICAgcmV0dXJuICEhZXJyLmpzb253cENvZGU7XG4gIH0gZWxzZSBpZiAodHlwZS5uYW1lID09PSBQcm94eVJlcXVlc3RFcnJvci5uYW1lKSB7XG4gICAgLy8gYHN0YXR1c2AgaXMgYDBgIG9uIHN1Y2Nlc3NcbiAgICBpZiAoZXJyLmpzb253cCkge1xuICAgICAgcmV0dXJuICEhZXJyLmpzb253cC5zdGF0dXM7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChlcnIudzNjKSkge1xuICAgICAgcmV0dXJuIF8uaXNOdW1iZXIoZXJyLnczY1N0YXR1cykgJiYgZXJyLnczY1N0YXR1cyA+PSAzMDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBlcnIuY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGFuIGVycm9yIGRlcml2ZWQgZnJvbSBNSlNPTldQIHN0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IGNvZGUgSlNPTldQIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IHZhbHVlIFRoZSBlcnJvciBtZXNzYWdlLCBvciBhbiBvYmplY3Qgd2l0aCBhIGBtZXNzYWdlYCBwcm9wZXJ0eVxuICogQHJldHVybiB7UHJvdG9jb2xFcnJvcn0gVGhlIGVycm9yIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHByb3ZpZGVkIEpTT05XUCBzdGF0dXMgY29kZVxuICovXG5mdW5jdGlvbiBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSAoY29kZSwgdmFsdWUgPSAnJykge1xuICAvLyBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgcHVsbCBtZXNzYWdlIGZyb20gaXQsIG90aGVyd2lzZSB1c2UgdGhlIHBsYWluXG4gIC8vIHZhbHVlLCBvciBkZWZhdWx0IHRvIGFuIGVtcHR5IHN0cmluZywgaWYgbnVsbFxuICBjb25zdCBtZXNzYWdlID0gKHZhbHVlIHx8IHt9KS5tZXNzYWdlIHx8IHZhbHVlIHx8ICcnO1xuICBpZiAoY29kZSAhPT0gVW5rbm93bkVycm9yLmNvZGUoKSAmJiBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0pIHtcbiAgICBtanNvbndwTG9nLmRlYnVnKGBNYXRjaGVkIEpTT05XUCBlcnJvciBjb2RlICR7Y29kZX0gdG8gJHtqc29ud3BFcnJvckNvZGVNYXBbY29kZV0ubmFtZX1gKTtcbiAgICByZXR1cm4gbmV3IGpzb253cEVycm9yQ29kZU1hcFtjb2RlXShtZXNzYWdlKTtcbiAgfVxuICBtanNvbndwTG9nLmRlYnVnKGBNYXRjaGVkIEpTT05XUCBlcnJvciBjb2RlICR7Y29kZX0gdG8gVW5rbm93bkVycm9yYCk7XG4gIHJldHVybiBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGFuIGVycm9yIGRlcml2ZWQgZnJvbSBXM0MgSlNPTiBDb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSBXM0MgZXJyb3Igc3RyaW5nIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jaGFuZGxpbmctZXJyb3JzIGBKU09OIEVycm9yIENvZGVgIGNvbHVtbilcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIHRoZSBlcnJvciBtZXNzYWdlXG4gKiBAcGFyYW0gez9zdHJpbmd9IHN0YWNrdHJhY2UgYW4gb3B0aW9uYWwgZXJyb3Igc3RhY2t0cmFjZVxuICogQHJldHVybiB7UHJvdG9jb2xFcnJvcn0gIFRoZSBlcnJvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVzNDIGVycm9yIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlcnJvckZyb21XM0NKc29uQ29kZSAoY29kZSwgbWVzc2FnZSwgc3RhY2t0cmFjZSA9IG51bGwpIHtcbiAgaWYgKGNvZGUgJiYgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICB3M2NMb2cuZGVidWcoYE1hdGNoZWQgVzNDIGVycm9yIGNvZGUgJyR7Y29kZX0nIHRvICR7dzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0ubmFtZX1gKTtcbiAgICBjb25zdCByZXN1bHRFcnJvciA9IG5ldyB3M2NFcnJvckNvZGVNYXBbY29kZS50b0xvd2VyQ2FzZSgpXShtZXNzYWdlKTtcbiAgICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgICByZXR1cm4gcmVzdWx0RXJyb3I7XG4gIH1cbiAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byBVbmtub3duRXJyb3JgKTtcbiAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xuICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgcmV0dXJuIHJlc3VsdEVycm9yO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gQXBwaXVtIGVycm9yIHRvIHByb3BlciBXM0MgSFRUUCByZXNwb25zZVxuICogQHBhcmFtIHtQcm90b2NvbEVycm9yfSBlcnIgVGhlIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZFxuICovXG5mdW5jdGlvbiBnZXRSZXNwb25zZUZvclczQ0Vycm9yIChlcnIpIHtcbiAgbGV0IGh0dHBTdGF0dXM7XG5cbiAgLy8gVzNDIGRlZmluZWQgZXJyb3IgbWVzc2FnZSAoaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jZGZuLWVycm9yLWNvZGUpXG4gIGxldCB3M2NFcnJvclN0cmluZztcblxuICBpZiAoIWVyci53M2NTdGF0dXMpIHtcbiAgICBlcnIgPSB1dGlsLmhhc1ZhbHVlKGVyci5zdGF0dXMpXG4gICAgICAvLyBJZiBpdCdzIGEgSlNPTldQIGVycm9yLCBmaW5kIGNvcnJlc3BvbmRpbmcgZXJyb3JcbiAgICAgID8gZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUoZXJyLnN0YXR1cywgZXJyLnZhbHVlKVxuICAgICAgOiBuZXcgZXJyb3JzLlVua25vd25FcnJvcihlcnIubWVzc2FnZSk7XG4gIH1cblxuICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKSkge1xuICAgIC8vIHJlc3BvbmQgd2l0aCBhIDQwMCBpZiB3ZSBoYXZlIGJhZCBwYXJhbWV0ZXJzXG4gICAgdzNjTG9nLmRlYnVnKGBCYWQgcGFyYW1ldGVyczogJHtlcnJ9YCk7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBCYWRQYXJhbWV0ZXJzRXJyb3IuZXJyb3IoKTtcbiAgfSBlbHNlIHtcbiAgICB3M2NFcnJvclN0cmluZyA9IGVyci5lcnJvcjtcbiAgfVxuXG4gIGh0dHBTdGF0dXMgPSBlcnIudzNjU3RhdHVzO1xuXG4gIGlmICghdzNjRXJyb3JTdHJpbmcpIHtcbiAgICB3M2NFcnJvclN0cmluZyA9IFVua25vd25FcnJvci5lcnJvcigpO1xuICB9XG5cbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHZhbHVlOiB7XG4gICAgICBlcnJvcjogdzNjRXJyb3JTdHJpbmcsXG4gICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgIHN0YWNrdHJhY2U6IGVyci5zdGFja3RyYWNlIHx8IGVyci5zdGFjayxcbiAgICB9XG4gIH07XG4gIHJldHVybiBbaHR0cFN0YXR1cywgaHR0cFJlc0JvZHldO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gQXBwaXVtIGVycm9yIHRvIGEgcHJvcGVyIEpTT05XUCByZXNwb25zZVxuICogQHBhcmFtIHtQcm90b2NvbEVycm9yfSBlcnIgVGhlIGVycm9yIHRvIGJlIGNvbnZlcnRlZFxuICovXG5mdW5jdGlvbiBnZXRSZXNwb25zZUZvckpzb253cEVycm9yIChlcnIpIHtcbiAgaWYgKGlzVW5rbm93bkVycm9yKGVycikpIHtcbiAgICBlcnIgPSBuZXcgZXJyb3JzLlVua25vd25FcnJvcihlcnIpO1xuICB9XG4gIC8vIE1KU09OV1AgZXJyb3JzIGFyZSB1c3VhbGx5IDUwMCBzdGF0dXMgY29kZSBzbyBzZXQgaXQgdG8gdGhhdCBieSBkZWZhdWx0XG4gIGxldCBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHN0YXR1czogZXJyLmpzb253cENvZGUsXG4gICAgdmFsdWU6IHtcbiAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlXG4gICAgfVxuICB9O1xuXG4gIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNDAwIGlmIHdlIGhhdmUgYmFkIHBhcmFtZXRlcnNcbiAgICBtanNvbndwTG9nLmRlYnVnKGBCYWQgcGFyYW1ldGVyczogJHtlcnJ9YCk7XG4gICAgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgICBodHRwUmVzQm9keSA9IGVyci5tZXNzYWdlO1xuICB9IGVsc2UgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IpIHx8XG4gICAgICAgICAgICAgaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA1MDEgaWYgdGhlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWRcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9JTVBMRU1FTlRFRDtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyIGZvciB0aGUgc2Vzc2lvblxuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG5cblxuICByZXR1cm4gW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XTtcbn1cblxuZXhwb3J0IHtcbiAgZXJyb3JzLCBpc0Vycm9yVHlwZSwgaXNVbmtub3duRXJyb3IsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZSxcbiAgZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciwgZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvcixcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsU0FBakIsQ0FBbkI7O0FBQ0EsTUFBTUMsTUFBTSxHQUFHRixnQkFBT0MsU0FBUCxDQUFpQixLQUFqQixDQUFmOztBQUVBLE1BQU1FLGlCQUFpQixHQUFHLGVBQTFCOztBQUdPLE1BQU1DLGFBQU4sU0FBNEJDLGlCQUE1QixDQUFxQztFQUMxQ0MsV0FBVyxDQUFFQyxHQUFGLEVBQU9DLFVBQVAsRUFBbUJDLFNBQW5CLEVBQThCQyxLQUE5QixFQUFxQztJQUM5QyxNQUFNSCxHQUFOO0lBQ0EsS0FBS0MsVUFBTCxHQUFrQkEsVUFBbEI7SUFDQSxLQUFLRSxLQUFMLEdBQWFBLEtBQUssSUFBSVAsaUJBQXRCOztJQUNBLElBQUksS0FBS0ssVUFBTCxL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
1018
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtanNvbndwTG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidzNjTG9nIiwiVzNDX1VOS05PV05fRVJST1IiLCJQcm90b2NvbEVycm9yIiwiRVM2RXJyb3IiLCJjb25zdHJ1Y3RvciIsIm1zZyIsImpzb253cENvZGUiLCJ3M2NTdGF0dXMiLCJlcnJvciIsIkhUVFBTdGF0dXNDb2RlcyIsIkJBRF9SRVFVRVNUIiwiX3N0YWNrdHJhY2UiLCJzdGFja3RyYWNlIiwic3RhY2siLCJ2YWx1ZSIsIk5vU3VjaERyaXZlckVycm9yIiwiY29kZSIsIk5PVF9GT1VORCIsImVyciIsIk5vU3VjaEVsZW1lbnRFcnJvciIsIk5vU3VjaEZyYW1lRXJyb3IiLCJVbmtub3duQ29tbWFuZEVycm9yIiwiU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IiLCJFbGVtZW50Tm90VmlzaWJsZUVycm9yIiwiSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIiwiVW5rbm93bkVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiZXJyb3JPck1lc3NhZ2UiLCJvcmlnTWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsIm1lc3NhZ2UiLCJVbmtub3duTWV0aG9kRXJyb3IiLCJNRVRIT0RfTk9UX0FMTE9XRUQiLCJVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIiwiRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIiwiRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciIsIkVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciIsIkluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciIsIkphdmFTY3JpcHRFcnJvciIsIlhQYXRoTG9va3VwRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJSRVFVRVNUX1RJTUVPVVQiLCJOb1N1Y2hXaW5kb3dFcnJvciIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiSW52YWxpZENvb2tpZURvbWFpbkVycm9yIiwiTm9TdWNoQ29va2llRXJyb3IiLCJVbmFibGVUb1NldENvb2tpZUVycm9yIiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwiTm9BbGVydE9wZW5FcnJvciIsIk5vU3VjaEFsZXJ0RXJyb3IiLCJTY3JpcHRUaW1lb3V0RXJyb3IiLCJJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IiLCJJbnZhbGlkQ29vcmRpbmF0ZXNFcnJvciIsIklNRU5vdEF2YWlsYWJsZUVycm9yIiwiSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yIiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiZGV0YWlscyIsIk1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yIiwiTm9TdWNoQ29udGV4dEVycm9yIiwiSW52YWxpZENvbnRleHRFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiVW5hYmxlVG9DYXB0dXJlU2NyZWVuIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwicmVxdWlyZWRQYXJhbXMiLCJhY3R1YWxQYXJhbXMiLCJlcnJNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsIlByb3h5UmVxdWVzdEVycm9yIiwicmVzcG9uc2VFcnJvciIsImh0dHBTdGF0dXMiLCJyZXNwb25zZUVycm9yT2JqIiwidXRpbCIsInNhZmVKc29uUGFyc2UiLCJpc1BsYWluT2JqZWN0IiwiaXNFbXB0eSIsImhhcyIsInczYyIsImpzb253cCIsImdldEFjdHVhbEVycm9yIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSIsImlzTnVtYmVyIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJlcnJvcnMiLCJqc29ud3BFcnJvckNvZGVNYXAiLCJFcnJvckNsYXNzIiwidmFsdWVzIiwidzNjRXJyb3JDb2RlTWFwIiwiaXNVbmtub3duRXJyb3IiLCJuYW1lIiwiZmluZCIsImVxdWFsTmFtZXMiLCJpc0Vycm9yVHlwZSIsInR5cGUiLCJkZWJ1ZyIsInRvTG93ZXJDYXNlIiwicmVzdWx0RXJyb3IiLCJpc1Byb3RvY29sRXJyb3IiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwidzNjRXJyb3JTdHJpbmciLCJodHRwUmVzQm9keSIsImdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IiLCJOT1RfSU1QTEVNRU5URUQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFUzZFcnJvciBmcm9tICdlczYtZXJyb3InO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7dXRpbCwgbG9nZ2VyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHtTdGF0dXNDb2RlcyBhcyBIVFRQU3RhdHVzQ29kZXN9IGZyb20gJ2h0dHAtc3RhdHVzLWNvZGVzJztcblxuY29uc3QgbWpzb253cExvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ01KU09OV1AnKTtcbmNvbnN0IHczY0xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1czQycpO1xuXG5jb25zdCBXM0NfVU5LTk9XTl9FUlJPUiA9ICd1bmtub3duIGVycm9yJztcblxuLy8gYmFzZSBlcnJvciBjbGFzcyBmb3IgYWxsIG9mIG91ciBlcnJvcnNcbmV4cG9ydCBjbGFzcyBQcm90b2NvbEVycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2csIGpzb253cENvZGUsIHczY1N0YXR1cywgZXJyb3IpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuanNvbndwQ29kZSA9IGpzb253cENvZGU7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yIHx8IFczQ19VTktOT1dOX0VSUk9SO1xuICAgIGlmICh0aGlzLmpzb253cENvZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuanNvbndwQ29kZSA9IDEzO1xuICAgIH1cbiAgICB0aGlzLnczY1N0YXR1cyA9IHczY1N0YXR1cyB8fCBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgdGhpcy5fc3RhY2t0cmFjZSA9IG51bGw7XG4gIH1cblxuICBnZXQgc3RhY2t0cmFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2t0cmFjZSB8fCB0aGlzLnN0YWNrO1xuICB9XG5cbiAgc2V0IHN0YWNrdHJhY2UodmFsdWUpIHtcbiAgICB0aGlzLl9zdGFja3RyYWNlID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vYmxvYi8xNzZiNGE5ZTMwODJhYzE5MjZmMmE0MzZlYjM0Njc2MGMzN2E1OTk4L2phdmEvY2xpZW50L3NyYy9vcmcvb3BlbnFhL3NlbGVuaXVtL3JlbW90ZS9FcnJvckNvZGVzLmphdmEjTDIxNVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vaXNzdWVzLzU1NjIjaXNzdWVjb21tZW50LTM3MDM3OTQ3MFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1lcnJvci1jb2RlXG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hEcml2ZXJFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gNjtcbiAgfVxuICAvLyBXM0MgRXJyb3IgaXMgY2FsbGVkIEludmFsaWRTZXNzaW9uSURcbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlc3Npb24gaWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNlc3Npb24gaXMgZWl0aGVyIHRlcm1pbmF0ZWQgb3Igbm90IHN0YXJ0ZWQnLFxuICAgICAgTm9TdWNoRHJpdmVyRXJyb3IuY29kZSgpLFxuICAgICAgTm9TdWNoRHJpdmVyRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBOb1N1Y2hEcml2ZXJFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRWxlbWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBlbGVtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnQW4gZWxlbWVudCBjb3VsZCBub3QgYmUgbG9jYXRlZCBvbiB0aGUgcGFnZSB1c2luZyB0aGUgZ2l2ZW4gJyArICdzZWFyY2ggcGFyYW1ldGVycy4nLFxuICAgICAgTm9TdWNoRWxlbWVudEVycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRnJhbWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gODtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGZyYW1lJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdBIHJlcXVlc3QgdG8gc3dpdGNoIHRvIGEgZnJhbWUgY291bGQgbm90IGJlIHNhdGlzZmllZCBiZWNhdXNlICcgK1xuICAgICAgICAgICd0aGUgZnJhbWUgY291bGQgbm90IGJlIGZvdW5kLicsXG4gICAgICBOb1N1Y2hGcmFtZUVycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaEZyYW1lRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBOb1N1Y2hGcmFtZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duQ29tbWFuZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAndW5rbm93biBjb21tYW5kJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQsIG9yIGEgcmVxdWVzdCB3YXMgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkIHVzaW5nIGFuIEhUVFAgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFwcGVkICcgK1xuICAgICAgICAgICdyZXNvdXJjZS4nLFxuICAgICAgVW5rbm93bkNvbW1hbmRFcnJvci5jb2RlKCksXG4gICAgICBVbmtub3duQ29tbWFuZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5rbm93bkNvbW1hbmRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdBbiBlbGVtZW50IGNvbW1hbmQgZmFpbGVkIGJlY2F1c2UgdGhlIHJlZmVyZW5jZWQgZWxlbWVudCBpcyBubyAnICtcbiAgICAgICAgICAnbG9uZ2VyIGF0dGFjaGVkIHRvIHRoZSBET00uJyxcbiAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmNvZGUoKSxcbiAgICAgIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDExO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCB2aXNpYmxlJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQW4gZWxlbWVudCBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyAnICtcbiAgICAgICAgICAnbm90IHZpc2libGUgb24gdGhlIHBhZ2UuJyxcbiAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuY29kZSgpLFxuICAgICAgRWxlbWVudE5vdFZpc2libGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRFbGVtZW50U3RhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMTI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgZWxlbWVudCBzdGF0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgJyArXG4gICAgICAgICAgJ2luIGFuIGludmFsaWQgc3RhdGUgKGUuZy4gYXR0ZW1wdGluZyB0byBjbGljayBhIGRpc2FibGVkIGVsZW1lbnQpLicsXG4gICAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IuY29kZSgpLFxuICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDEzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiBXM0NfVU5LTk9XTl9FUlJPUjtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnJvck9yTWVzc2FnZSkge1xuICAgIGNvbnN0IG9yaWdNZXNzYWdlID0gXy5pc1N0cmluZygoZXJyb3JPck1lc3NhZ2UgfHwge30pLm1lc3NhZ2UpXG4gICAgICA/IGVycm9yT3JNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIDogZXJyb3JPck1lc3NhZ2U7XG4gICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAnQW4gdW5rbm93biBzZXJ2ZXItc2lkZSBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBjb21tYW5kLicgK1xuICAgICAgKG9yaWdNZXNzYWdlID8gYCBPcmlnaW5hbCBlcnJvcjogJHtvcmlnTWVzc2FnZX1gIDogJycpO1xuICAgIHN1cGVyKG1lc3NhZ2UsIFVua25vd25FcnJvci5jb2RlKCksIFVua25vd25FcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duTWV0aG9kRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDQwNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTUVUSE9EX05PVF9BTExPV0VEO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gbWV0aG9kJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGhlIHJlcXVlc3RlZCBjb21tYW5kIG1hdGNoZWQgYSBrbm93biBVUkwgYnV0IGRpZCBub3QgbWF0Y2ggYW4gbWV0aG9kIGZvciB0aGF0IFVSTCcsXG4gICAgICBVbmtub3duTWV0aG9kRXJyb3IuY29kZSgpLFxuICAgICAgVW5rbm93bk1ldGhvZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5rbm93bk1ldGhvZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA0MDU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNlcnZlci1zaWRlIGVycm9yIG9jY3VycmVkLiBDb21tYW5kIGNhbm5vdCBiZSBzdXBwb3J0ZWQuJyxcbiAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuY29kZSgpLFxuICAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMTU7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBub3Qgc2VsZWN0YWJsZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHNlbGVjdCBhbiBlbGVtZW50IHRoYXQgY2Fubm90IGJlIHNlbGVjdGVkLicsXG4gICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuY29kZSgpLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2NDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ1RoZSBFbGVtZW50IENsaWNrIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IHJlY2VpdmluZyAnICtcbiAgICAgICAgICAndGhlIGV2ZW50cyBpcyBvYnNjdXJpbmcgdGhlIGVsZW1lbnQgdGhhdCB3YXMgcmVxdWVzdGVkIGNsaWNrZWQnLFxuICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5jb2RlKCksXG4gICAgICBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCBpbnRlcmFjdGFibGUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQSBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBub3QgcG9pbnRlci0gb3Iga2V5Ym9hcmQgaW50ZXJhY3RhYmxlJyxcbiAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5jb2RlKCksXG4gICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnNlY3VyZSBjZXJ0aWZpY2F0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ05hdmlnYXRpb24gY2F1c2VkIHRoZSB1c2VyIGFnZW50IHRvIGhpdCBhIGNlcnRpZmljYXRlIHdhcm5pbmcsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIHJlc3VsdCBvZiBhbiBleHBpcmVkIG9yIGludmFsaWQgVExTIGNlcnRpZmljYXRlJyxcbiAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksXG4gICAgICBudWxsLFxuICAgICAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBKYXZhU2NyaXB0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDE3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnamF2YXNjcmlwdCBlcnJvcic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB1c2VyIHN1cHBsaWVkIEphdmFTY3JpcHQuJyxcbiAgICAgIEphdmFTY3JpcHRFcnJvci5jb2RlKCksXG4gICAgICBKYXZhU2NyaXB0RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBKYXZhU2NyaXB0RXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFhQYXRoTG9va3VwRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDE5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIHNlbGVjdG9yJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VhcmNoaW5nIGZvciBhbiBlbGVtZW50IGJ5IFhQYXRoLicsXG4gICAgICBYUGF0aExvb2t1cEVycm9yLmNvZGUoKSxcbiAgICAgIFhQYXRoTG9va3VwRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBYUGF0aExvb2t1cEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDIxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAndGltZW91dCc7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0FuIG9wZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICBUaW1lb3V0RXJyb3IuY29kZSgpLFxuICAgICAgVGltZW91dEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVGltZW91dEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hXaW5kb3dFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMjM7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCB3aW5kb3cnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHxcbiAgICAgICAgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgd2luZG93IGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgJyArXG4gICAgICAgICAgJ2JlY2F1c2UgdGhlIHdpbmRvdyBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgIE5vU3VjaFdpbmRvd0Vycm9yLmNvZGUoKSxcbiAgICAgIE5vU3VjaFdpbmRvd0Vycm9yLnczY1N0YXR1cygpLFxuICAgICAgTm9TdWNoV2luZG93RXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MTtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ1RoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGFyZSBlaXRoZXIgaW52YWxpZCBvciBtYWxmb3JtZWQnLFxuICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IuY29kZSgpLFxuICAgICAgSW52YWxpZEFyZ3VtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBJbnZhbGlkQXJndW1lbnRFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZENvb2tpZURvbWFpbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb2tpZSBkb21haW4nO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fFxuICAgICAgICAnQW4gaWxsZWdhbCBhdHRlbXB0IHdhcyBtYWRlIHRvIHNldCBhIGNvb2tpZSB1bmRlciBhIGRpZmZlcmVudCAnICtcbiAgICAgICAgICAnZG9tYWluIHRoYW4gdGhlIGN1cnJlbnQgcGFnZS4nLFxuICAgICAgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmNvZGUoKSxcbiAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoQ29va2llRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBjb29raWUnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8XG4gICAgICAgICdObyBjb29raWUgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggbmFtZSB3YXMgZm91bmQgYW1vbmdzdCB0aGUgYXNzb2NpYXRlZCBjb29raWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHTigJlzIGFjdGl2ZSBkb2N1bWVudCcsXG4gICAgICBOb1N1Y2hDb29raWVFcnJvci5jb2RlKCksXG4gICAgICBOb1N1Y2hDb29raWVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vU3VjaENvb2tpZUVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFibGVUb1NldENvb2tpZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuYWJsZSB0byBzZXQgY29va2llJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCBcIkEgcmVxdWVzdCB0byBzZXQgYSBjb29raWUncyB2YWx1ZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkLlwiLFxuICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvci5jb2RlKCksXG4gICAgICBVbmFibGVUb1NldENvb2tpZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5hYmxlVG9TZXRDb29raWVFcnJvci5lcnJvcigpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuZXhwZWN0ZWQgYWxlcnQgb3Blbic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gICAgICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IuY29kZSgpLFxuICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLFxuICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb0FsZXJ0T3BlbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAyNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggYWxlcnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZXJhdGUgb24gYSBtb2RhbCBkaWFsb2cgd2hlbiBvbmUgJyArICd3YXMgbm90IG9wZW4uJyxcbiAgICAgIE5vQWxlcnRPcGVuRXJyb3IuY29kZSgpLFxuICAgICAgTm9BbGVydE9wZW5FcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIE5vQWxlcnRPcGVuRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaEFsZXJ0RXJyb3IgZXh0ZW5kcyBOb0FsZXJ0T3BlbkVycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBTY3JpcHRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDI4O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yKCkge1xuICAgIHJldHVybiAnc2NyaXB0IHRpbWVvdXQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBIHNjcmlwdCBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICBTY3JpcHRUaW1lb3V0RXJyb3IuY29kZSgpLFxuICAgICAgU2NyaXB0VGltZW91dEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgU2NyaXB0VGltZW91dEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDI5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb3JkaW5hdGVzJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGhlIGNvb3JkaW5hdGVzIHByb3ZpZGVkIHRvIGFuIGludGVyYWN0aW9ucyBvcGVyYXRpb24gYXJlIGludmFsaWQuJyxcbiAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci5jb2RlKCksXG4gICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRDb29yZGluYXRlc0Vycm9yIGV4dGVuZHMgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIHt9XG5cbmV4cG9ydCBjbGFzcyBJTUVOb3RBdmFpbGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzA7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdJTUUgd2FzIG5vdCBhdmFpbGFibGUuJyxcbiAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLmNvZGUoKSxcbiAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSU1FTm90QXZhaWxhYmxlRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzE7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBbiBJTUUgZW5naW5lIGNvdWxkIG5vdCBiZSBzdGFydGVkLicsXG4gICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IuY29kZSgpLFxuICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkU2VsZWN0b3JFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdBcmd1bWVudCB3YXMgYW4gaW52YWxpZCBzZWxlY3RvciAoZS5nLiBYUGF0aC9DU1MpLicsXG4gICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci5jb2RlKCksXG4gICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTm90Q3JlYXRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiAzMztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3Nlc3Npb24gbm90IGNyZWF0ZWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGRldGFpbHMpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLic7XG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCBEZXRhaWxzOiAke2RldGFpbHN9YDtcbiAgICB9XG5cbiAgICBzdXBlcihcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmNvZGUoKSxcbiAgICAgIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzQ7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cygpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdtb3ZlIHRhcmdldCBvdXQgb2YgYm91bmRzJztcbiAgfVxuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihcbiAgICAgIGVyciB8fCAnVGFyZ2V0IHByb3ZpZGVkIGZvciBhIG1vdmUgYWN0aW9uIGlzIG91dCBvZiBib3VuZHMuJyxcbiAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLmNvZGUoKSxcbiAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLnczY1N0YXR1cygpLFxuICAgICAgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IuZXJyb3IoKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSgpIHtcbiAgICByZXR1cm4gMzU7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdObyBzdWNoIGNvbnRleHQgZm91bmQuJywgTm9TdWNoQ29udGV4dEVycm9yLmNvZGUoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRDb250ZXh0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUoKSB7XG4gICAgcmV0dXJuIDM2O1xuICB9XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKFxuICAgICAgZXJyIHx8ICdUaGF0IGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIGluIHRoZSBjdXJyZW50IGNvbnRleHQuJyxcbiAgICAgIEludmFsaWRDb250ZXh0RXJyb3IuY29kZSgpXG4gICAgKTtcbiAgfVxufVxuXG4vLyBUaGVzZSBhcmUgYWxpYXNlcyBmb3IgVW5rbm93bk1ldGhvZEVycm9yXG5leHBvcnQgY2xhc3MgTm90WWV0SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIFVua25vd25NZXRob2RFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBVbmtub3duTWV0aG9kRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ01ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hYmxlVG9DYXB0dXJlU2NyZWVuIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlKCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvcigpIHtcbiAgICByZXR1cm4gJ3VuYWJsZSB0byBjYXB0dXJlIHNjcmVlbic7XG4gIH1cbiAgY29uc3RydWN0b3IoZXJyKSB7XG4gICAgc3VwZXIoXG4gICAgICBlcnIgfHwgJ0Egc2NyZWVuIGNhcHR1cmUgd2FzIG1hZGUgaW1wb3NzaWJsZScsXG4gICAgICBVbmFibGVUb0NhcHR1cmVTY3JlZW4uY29kZSgpLFxuICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLnczY1N0YXR1cygpLFxuICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmVycm9yKClcbiAgICApO1xuICB9XG59XG5cbi8vIEVxdWl2YWxlbnQgdG8gVzNDIEludmFsaWRBcmd1bWVudEVycm9yXG5leHBvcnQgY2xhc3MgQmFkUGFyYW1ldGVyc0Vycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBzdGF0aWMgZXJyb3IoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvcihyZXF1aXJlZFBhcmFtcywgYWN0dWFsUGFyYW1zLCBlcnJNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgaWYgKCFlcnJNZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgYFBhcmFtZXRlcnMgd2VyZSBpbmNvcnJlY3QuIFdlIHdhbnRlZCBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkocmVxdWlyZWRQYXJhbXMpfSBhbmQgeW91IGAgK1xuICAgICAgICBgc2VudCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbFBhcmFtcyl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBQYXJhbWV0ZXJzIHdlcmUgaW5jb3JyZWN0LiBZb3Ugc2VudCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhY3R1YWxQYXJhbXNcbiAgICAgICl9LCAke2Vyck1lc3NhZ2V9YDtcbiAgICB9XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy53M2NTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94eVJlcXVlc3RFcnJvciBpcyBhIGN1c3RvbSBlcnJvciBhbmQgd2lsbCBiZSB0aHJvd24gdXAgb24gdW5zdWNjZXNzZnVsIHByb3h5IHJlcXVlc3QgYW5kXG4gKiB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3h5IGZhaWx1cmUuXG4gKiBJbiBjYXNlIG9mIFByb3h5UmVxdWVzdEVycm9yIHNob3VsZCBmZXRjaCB0aGUgYWN0dWFsIGVycm9yIGJ5IGNhbGxpbmcgYGdldEFjdHVhbEVycm9yKClgXG4gKiBmb3IgcHJveHkgZmFpbHVyZSB0byBnZW5lcmF0ZSB0aGUgY2xpZW50IHJlc3BvbnNlLlxuICovXG5leHBvcnQgY2xhc3MgUHJveHlSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFUzZFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGVyciwgcmVzcG9uc2VFcnJvciwgaHR0cFN0YXR1cykge1xuICAgIGxldCByZXNwb25zZUVycm9yT2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKHJlc3BvbnNlRXJyb3IpO1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmopKSB7XG4gICAgICByZXNwb25zZUVycm9yT2JqID0ge307XG4gICAgfVxuICAgIGxldCBvcmlnTWVzc2FnZSA9IF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvcikgPyByZXNwb25zZUVycm9yIDogJyc7XG4gICAgaWYgKCFfLmlzRW1wdHkocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIF8uaXNQbGFpbk9iamVjdChyZXNwb25zZUVycm9yT2JqLnZhbHVlKSAmJlxuICAgICAgICBfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZSlcbiAgICAgICkge1xuICAgICAgICBvcmlnTWVzc2FnZSA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIoXy5pc0VtcHR5KGVycikgPyBgUHJveHkgcmVxdWVzdCB1bnN1Y2Nlc3NmdWwuICR7b3JpZ01lc3NhZ2V9YCA6IGVycik7XG5cbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcblxuICAgIC8vIElmIHRoZSByZXNwb25zZSBlcnJvciBpcyBhbiBvYmplY3QgYW5kIHZhbHVlIGlzIGFuIG9iamVjdCwgaXQncyBhIFczQyBlcnJvciAoZm9yIEpTT05XUCB2YWx1ZSBpcyBhIHN0cmluZylcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaGFzKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUsICdlcnJvcicpKSB7XG4gICAgICB0aGlzLnczYyA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWU7XG4gICAgICB0aGlzLnczY1N0YXR1cyA9IGh0dHBTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpzb253cCA9IHJlc3BvbnNlRXJyb3JPYmo7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0dWFsRXJyb3IoKSB7XG4gICAgLy8gSWYgaXQncyBNSlNPTldQIGVycm9yLCByZXR1cm5zIGFjdHVhbCBlcnJvciBjYXVzZSBmb3IgcmVxdWVzdCBmYWlsdXJlIGJhc2VkIG9uIGBqc29ud3Auc3RhdHVzYFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy5zdGF0dXMpICYmIHV0aWwuaGFzVmFsdWUodGhpcy5qc29ud3A/LnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKHRoaXMuanNvbndwLnN0YXR1cywgdGhpcy5qc29ud3AudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLnczYykgJiYgXy5pc051bWJlcih0aGlzLnczY1N0YXR1cykgJiYgdGhpcy53M2NTdGF0dXMgPj0gMzAwKSB7XG4gICAgICByZXR1cm4gZXJyb3JGcm9tVzNDSnNvbkNvZGUoXG4gICAgICAgIHRoaXMudzNjLmVycm9yLFxuICAgICAgICB0aGlzLnczYy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSxcbiAgICAgICAgdGhpcy53M2Muc3RhY2t0cmFjZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBVbmtub3duRXJyb3IodGhpcy5tZXNzYWdlKTtcbiAgfVxufVxuLy8gbWFwIG9mIGVycm9yIGNsYXNzIG5hbWUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGVycm9ycyA9IHtcbiAgTm90WWV0SW1wbGVtZW50ZWRFcnJvcixcbiAgTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgQmFkUGFyYW1ldGVyc0Vycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm9TdWNoRHJpdmVyRXJyb3IsXG4gIE5vU3VjaEVsZW1lbnRFcnJvcixcbiAgVW5rbm93bkNvbW1hbmRFcnJvcixcbiAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IsXG4gIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IsXG4gIEludmFsaWRFbGVtZW50U3RhdGVFcnJvcixcbiAgVW5rbm93bkVycm9yLFxuICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IsXG4gIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IsXG4gIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvcixcbiAgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLFxuICBKYXZhU2NyaXB0RXJyb3IsXG4gIFhQYXRoTG9va3VwRXJyb3IsXG4gIFRpbWVvdXRFcnJvcixcbiAgTm9TdWNoV2luZG93RXJyb3IsXG4gIE5vU3VjaENvb2tpZUVycm9yLFxuICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IsXG4gIEludmFsaWRDb29yZGluYXRlc0Vycm9yLFxuICBVbmFibGVUb1NldENvb2tpZUVycm9yLFxuICBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IsXG4gIE5vQWxlcnRPcGVuRXJyb3IsXG4gIFNjcmlwdFRpbWVvdXRFcnJvcixcbiAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLFxuICBJTUVOb3RBdmFpbGFibGVFcnJvcixcbiAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLFxuICBJbnZhbGlkU2VsZWN0b3JFcnJvcixcbiAgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcixcbiAgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IsXG4gIE5vU3VjaEFsZXJ0RXJyb3IsXG4gIE5vU3VjaENvbnRleHRFcnJvcixcbiAgSW52YWxpZENvbnRleHRFcnJvcixcbiAgTm9TdWNoRnJhbWVFcnJvcixcbiAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLFxuICBVbmtub3duTWV0aG9kRXJyb3IsXG4gIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsXG4gIFByb3h5UmVxdWVzdEVycm9yLFxufTtcblxuLy8gbWFwIG9mIGVycm9yIGNvZGUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGpzb253cEVycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmICgnY29kZScgaW4gRXJyb3JDbGFzcykge1xuICAgIGpzb253cEVycm9yQ29kZU1hcFtFcnJvckNsYXNzLmNvZGUoKV0gPSBFcnJvckNsYXNzO1xuICB9XG59XG5cbmNvbnN0IHczY0Vycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmICgnZXJyb3InIGluIEVycm9yQ2xhc3MpIHtcbiAgICB3M2NFcnJvckNvZGVNYXBbRXJyb3JDbGFzcy5lcnJvcigpXSA9IEVycm9yQ2xhc3M7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmtub3duRXJyb3IoZXJyKSB7XG4gIHJldHVybiAoXG4gICAgIWVyci5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgIV8udmFsdWVzKGVycm9ycykuZmluZChmdW5jdGlvbiBlcXVhbE5hbWVzKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IubmFtZSA9PT0gZXJyLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFcnJvclR5cGUoZXJyLCB0eXBlKSB7XG4gIC8vIGBuYW1lYCBwcm9wZXJ0eSBpcyB0aGUgY29uc3RydWN0b3IgbmFtZVxuICBpZiAodHlwZS5uYW1lID09PSBQcm90b2NvbEVycm9yLm5hbWUpIHtcbiAgICAvLyBganNvbndwQ29kZWAgaXMgYDBgIG9uIHN1Y2Nlc3NcbiAgICByZXR1cm4gISFlcnIuanNvbndwQ29kZTtcbiAgfSBlbHNlIGlmICh0eXBlLm5hbWUgPT09IFByb3h5UmVxdWVzdEVycm9yLm5hbWUpIHtcbiAgICAvLyBgc3RhdHVzYCBpcyBgMGAgb24gc3VjY2Vzc1xuICAgIGlmIChlcnIuanNvbndwKSB7XG4gICAgICByZXR1cm4gISFlcnIuanNvbndwLnN0YXR1cztcbiAgICB9XG5cbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGVyci53M2MpKSB7XG4gICAgICByZXR1cm4gXy5pc051bWJlcihlcnIudzNjU3RhdHVzKSAmJiBlcnIudzNjU3RhdHVzID49IDMwMDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGVyci5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgYW4gZXJyb3IgZGVyaXZlZCBmcm9tIE1KU09OV1Agc3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZSBKU09OV1Agc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0gdmFsdWUgVGhlIGVycm9yIG1lc3NhZ2UsIG9yIGFuIG9iamVjdCB3aXRoIGEgYG1lc3NhZ2VgIHByb3BlcnR5XG4gKiBAcmV0dXJuIHtQcm90b2NvbEVycm9yfSBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggcHJvdmlkZWQgSlNPTldQIHN0YXR1cyBjb2RlXG4gKi9cbmZ1bmN0aW9uIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGNvZGUsIHZhbHVlID0gJycpIHtcbiAgLy8gaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIHB1bGwgbWVzc2FnZSBmcm9tIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBwbGFpblxuICAvLyB2YWx1ZSwgb3IgZGVmYXVsdCB0byBhbiBlbXB0eSBzdHJpbmcsIGlmIG51bGxcbiAgY29uc3QgbWVzc2FnZSA9ICh2YWx1ZSB8fCB7fSkubWVzc2FnZSB8fCB2YWx1ZSB8fCAnJztcbiAgaWYgKGNvZGUgIT09IFVua25vd25FcnJvci5jb2RlKCkgJiYganNvbndwRXJyb3JDb2RlTWFwW2NvZGVdKSB7XG4gICAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvICR7anNvbndwRXJyb3JDb2RlTWFwW2NvZGVdLm5hbWV9YCk7XG4gICAgcmV0dXJuIG5ldyBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0obWVzc2FnZSk7XG4gIH1cbiAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvIFVua25vd25FcnJvcmApO1xuICByZXR1cm4gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gVzNDIEpTT04gQ29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVzNDIGVycm9yIHN0cmluZyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2hhbmRsaW5nLWVycm9ycyBgSlNPTiBFcnJvciBDb2RlYCBjb2x1bW4pXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHs/c3RyaW5nfSBzdGFja3RyYWNlIGFuIG9wdGlvbmFsIGVycm9yIHN0YWNrdHJhY2VcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9ICBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFczQyBlcnJvciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tVzNDSnNvbkNvZGUoY29kZSwgbWVzc2FnZSwgc3RhY2t0cmFjZSA9IG51bGwpIHtcbiAgaWYgKGNvZGUgJiYgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0pIHtcbiAgICB3M2NMb2cuZGVidWcoYE1hdGNoZWQgVzNDIGVycm9yIGNvZGUgJyR7Y29kZX0nIHRvICR7dzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0ubmFtZX1gKTtcbiAgICBjb25zdCByZXN1bHRFcnJvciA9IG5ldyB3M2NFcnJvckNvZGVNYXBbY29kZS50b0xvd2VyQ2FzZSgpXShtZXNzYWdlKTtcbiAgICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgICByZXR1cm4gcmVzdWx0RXJyb3I7XG4gIH1cbiAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byBVbmtub3duRXJyb3JgKTtcbiAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgVW5rbm93bkVycm9yKG1lc3NhZ2UpO1xuICByZXN1bHRFcnJvci5zdGFja3RyYWNlID0gc3RhY2t0cmFjZTtcbiAgcmV0dXJuIHJlc3VsdEVycm9yO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2FueX0gZXJyXG4gKiBAcmV0dXJucyB7ZXJyIGlzIFByb3RvY29sRXJyb3J9XG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG9jb2xFcnJvcihlcnIpIHtcbiAgcmV0dXJuICd3M2NTdGF0dXMnIGluIGVycjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBwcm9wZXIgVzNDIEhUVFAgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcnxNSlNPTldQRXJyb3J9IGVyciBUaGUgZXJyb3IgdGhhdCBuZWVkcyB0byBiZSB0cmFuc2xhdGVkXG4gKi9cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IoZXJyKSB7XG4gIGxldCBodHRwU3RhdHVzO1xuXG4gIC8vIFczQyBkZWZpbmVkIGVycm9yIG1lc3NhZ2UgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1lcnJvci1jb2RlKVxuICBsZXQgdzNjRXJyb3JTdHJpbmc7XG5cbiAgaWYgKCFpc1Byb3RvY29sRXJyb3IoZXJyKSkge1xuICAgIGVyciA9IHV0aWwuaGFzVmFsdWUoZXJyLnN0YXR1cylcbiAgICAgID8gLy8gSWYgaXQncyBhIEpTT05XUCBlcnJvciwgZmluZCBjb3JyZXNwb25kaW5nIGVycm9yXG4gICAgICAgIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGVyci5zdGF0dXMsIGVyci52YWx1ZSlcbiAgICAgIDogbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIHczY0xvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIHczY0Vycm9yU3RyaW5nID0gQmFkUGFyYW1ldGVyc0Vycm9yLmVycm9yKCk7XG4gIH0gZWxzZSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBlcnIuZXJyb3I7XG4gIH1cblxuICBodHRwU3RhdHVzID0gZXJyLnczY1N0YXR1cztcblxuICBpZiAoIXczY0Vycm9yU3RyaW5nKSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBVbmtub3duRXJyb3IuZXJyb3IoKTtcbiAgfVxuXG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgZXJyb3I6IHczY0Vycm9yU3RyaW5nLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2ssXG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBBcHBpdW0gZXJyb3IgdG8gYSBwcm9wZXIgSlNPTldQIHJlc3BvbnNlXG4gKiBAcGFyYW0ge1Byb3RvY29sRXJyb3J9IGVyciBUaGUgZXJyb3IgdG8gYmUgY29udmVydGVkXG4gKi9cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IoZXJyKSB7XG4gIGlmIChpc1Vua25vd25FcnJvcihlcnIpKSB7XG4gICAgZXJyID0gbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyKTtcbiAgfVxuICAvLyBNSlNPTldQIGVycm9ycyBhcmUgdXN1YWxseSA1MDAgc3RhdHVzIGNvZGUgc28gc2V0IGl0IHRvIHRoYXQgYnkgZGVmYXVsdFxuICBsZXQgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG5cbiAgLyoqIEB0eXBlIHtIdHRwUmVzdWx0Qm9keX0gKi9cbiAgbGV0IGh0dHBSZXNCb2R5ID0ge1xuICAgIHN0YXR1czogZXJyLmpzb253cENvZGUsXG4gICAgdmFsdWU6IHtcbiAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIG1qc29ud3BMb2cuZGVidWcoYEJhZCBwYXJhbWV0ZXJzOiAke2Vycn1gKTtcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIGh0dHBSZXNCb2R5ID0gZXJyLm1lc3NhZ2U7XG4gIH0gZWxzZSBpZiAoXG4gICAgaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm90WWV0SW1wbGVtZW50ZWRFcnJvcikgfHxcbiAgICBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKVxuICApIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA1MDEgaWYgdGhlIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWRcbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9JTVBMRU1FTlRFRDtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyIGZvciB0aGUgc2Vzc2lvblxuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG5cbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbmV4cG9ydCB7XG4gIGVycm9ycyxcbiAgaXNFcnJvclR5cGUsXG4gIGlzVW5rbm93bkVycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSxcbiAgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG4gIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsXG4gIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHsgc3RyaW5nIHwge3ZhbHVlOiBIdHRwUmVzdWx0Qm9keVZhbHVlLCBzdGF0dXM/OiBudW1iZXIgfSB9IEh0dHBSZXN1bHRCb2R5XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBIdHRwUmVzdWx0Qm9keVZhbHVlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2VdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xFcnJvcn0gW2Vycm9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzdGFja3RyYWNlXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTUpTT05XUEVycm9yXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RhdHVzXG4gKiBAcHJvcGVydHkge3N0cmluZ3xvYmplY3R9IHZhbHVlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0YsZUFBQSxDQUFPQyxTQUFQLENBQWlCLEtBQWpCLENBQWY7O0FBRUEsTUFBTUUsaUJBQWlCLEdBQUcsZUFBMUI7O0FBR08sTUFBTUMsYUFBTixTQUE0QkMsaUJBQTVCLENBQXFDO0VBQzFDQyxXQUFXLENBQUNDLEdBQUQsRUFBTUMsVUFBTixFQUFrQkMsU0FBbEIsRUFBNkJDLEtBQTdCLEVBQW9DO0lBQzdDLE1BQU1ILEdBQU47SUFDQSxLQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtJQUNBLEtBQUtFLEtBQUwsR0FBYUEsS0FBSyxJQUFJUCxpQkFBdEI7O0lBQ0EsSUFBSSxLQUFLSyxVQUFMLEtBQW9CLElBQXhCLEVBQThCO01BQzVCLEtBQUtBLFVBQUwsR0FBa0IsRUFBbEI7SUFDRDs7SUFDRCxLQUFLQyxTQUFMLEdBQWlCQSxTQUFTLElBQUlFLDRCQUFBLENBQWdCQyxX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
@@ -39,4 +39,4 @@ function formatResponseValue(resValue) {
39
39
  function formatStatus(responseBody) {
40
40
  return _lodash.default.isPlainObject(responseBody) ? _lodash.default.omit(responseBody, ['status']) : responseBody;
41
41
  }
42
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRSZXNwb25zZVZhbHVlIiwicmVzVmFsdWUiLCJfIiwiaXNVbmRlZmluZWQiLCJNSlNPTldQX0VMRU1FTlRfS0VZIiwiVzNDX0VMRU1FTlRfS0VZIiwiZm9ybWF0U3RhdHVzIiwicmVzcG9uc2VCb2R5IiwiaXNQbGFpbk9iamVjdCIsIm9taXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZHVwbGljYXRlS2V5cyB9IGZyb20gJy4uL2Jhc2Vkcml2ZXIvaGVscGVycyc7XG5pbXBvcnQgeyBNSlNPTldQX0VMRU1FTlRfS0VZLCBXM0NfRUxFTUVOVF9LRVkgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFByZXByb2Nlc3NlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIGZvciBBUEkgcmVzcG9uc2VzLFxuICogc28gdGhleSBoYXZlIGtleXMgZm9yIGJvdGggVzNDIGFuZCBKU09OV1AgcHJvdG9jb2xzLlxuICogVGhlIGFyZ3VtZW50IHZhbHVlIGlzIE5PVCBtdXRhdGVkXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSByZXNWYWx1ZSBUaGUgYWN0dWFsIHJlc3BvbnNlIHZhbHVlXG4gKiBAcmV0dXJucyB7P09iamVjdH0gRWl0aGVyIG1vZGlmaWVkIHZhbHVlIG9yIHRoZSBzYW1lIG9uZSBpZlxuICogbm90aGluZyBoYXMgYmVlbiBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBmb3JtYXRSZXNwb25zZVZhbHVlIChyZXNWYWx1ZSkge1xuICBpZiAoXy5pc1VuZGVmaW5lZChyZXNWYWx1ZSkpIHtcbiAgICAvLyBjb252ZXJ0IHVuZGVmaW5lZCB0byBudWxsXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gSWYgdGhlIE1KU09OV1AgZWxlbWVudCBrZXkgZm9ybWF0IChFTEVNRU5UKSB3YXMgcHJvdmlkZWQsIGFkZCBhIGR1cGxpY2F0ZSBrZXkgKGVsZW1lbnQtNjA2Ni0xMWU0LWE1MmUtNGY3MzU0NjZjZWNmKVxuICAvLyBJZiB0aGUgVzNDIGVsZW1lbnQga2V5IGZvcm1hdCAoZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YpIHdhcyBwcm92aWRlZCwgYWRkIGEgZHVwbGljYXRlIGtleSAoRUxFTUVOVClcbiAgcmV0dXJuIGR1cGxpY2F0ZUtleXMocmVzVmFsdWUsIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSk7XG59XG5cbi8qKlxuICogUHJvcGVybHkgZm9ybWF0cyB0aGUgc3RhdHVzIGZvciBBUEkgcmVzcG9uc2VzLFxuICogc28gdGhleSBhcmUgY29ycmVjdCBmb3IgdGhlIFczQyBwcm90b2NvbC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2VCb2R5XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZml4ZWQgcmVzcG9uc2UgYm9keVxuICovXG5mdW5jdGlvbiBmb3JtYXRTdGF0dXMgKHJlc3BvbnNlQm9keSkge1xuICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlQm9keSkgPyBfLm9taXQocmVzcG9uc2VCb2R5LCBbJ3N0YXR1cyddKSA6IHJlc3BvbnNlQm9keTtcbn1cblxuXG5leHBvcnQge1xuICBNSlNPTldQX0VMRU1FTlRfS0VZLCBXM0NfRUxFTUVOVF9LRVksIGZvcm1hdFJlc3BvbnNlVmFsdWUsIGZvcm1hdFN0YXR1c1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBV0EsU0FBU0EsbUJBQVQsQ0FBOEJDLFFBQTlCLEVBQXdDO0VBQ3RDLElBQUlDLGdCQUFFQyxXQUFGLENBQWNGLFFBQWQsQ0FBSixFQUE2QjtJQUUzQixPQUFPLElBQVA7RUFDRDs7RUFHRCxPQUFPLDRCQUFjQSxRQUFkLEVBQXdCRyw4QkFBeEIsRUFBNkNDLDBCQUE3QyxDQUFQO0FBQ0Q7O0FBU0QsU0FBU0MsWUFBVCxDQUF1QkMsWUFBdkIsRUFBcUM7RUFDbkMsT0FBT0wsZ0JBQUVNLGFBQUYsQ0FBZ0JELFlBQWhCLElBQWdDTCxnQkFBRU8sSUFBRixDQUFPRixZQUFQLEVBQXFCLENBQUMsUUFBRCxDQUFyQixDQUFoQyxHQUFtRUEsWUFBMUU7QUFDRCJ9
42
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRSZXNwb25zZVZhbHVlIiwicmVzVmFsdWUiLCJfIiwiaXNVbmRlZmluZWQiLCJkdXBsaWNhdGVLZXlzIiwiTUpTT05XUF9FTEVNRU5UX0tFWSIsIlczQ19FTEVNRU5UX0tFWSIsImZvcm1hdFN0YXR1cyIsInJlc3BvbnNlQm9keSIsImlzUGxhaW5PYmplY3QiLCJvbWl0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Byb3RvY29sL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7ZHVwbGljYXRlS2V5c30gZnJvbSAnLi4vYmFzZWRyaXZlci9oZWxwZXJzJztcbmltcG9ydCB7TUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIFByZXByb2Nlc3NlcyB0aGUgcmVzdWx0aW5nIHZhbHVlIGZvciBBUEkgcmVzcG9uc2VzLFxuICogc28gdGhleSBoYXZlIGtleXMgZm9yIGJvdGggVzNDIGFuZCBKU09OV1AgcHJvdG9jb2xzLlxuICogVGhlIGFyZ3VtZW50IHZhbHVlIGlzIE5PVCBtdXRhdGVkXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSByZXNWYWx1ZSBUaGUgYWN0dWFsIHJlc3BvbnNlIHZhbHVlXG4gKiBAcmV0dXJucyB7P09iamVjdH0gRWl0aGVyIG1vZGlmaWVkIHZhbHVlIG9yIHRoZSBzYW1lIG9uZSBpZlxuICogbm90aGluZyBoYXMgYmVlbiBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBmb3JtYXRSZXNwb25zZVZhbHVlKHJlc1ZhbHVlKSB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHJlc1ZhbHVlKSkge1xuICAgIC8vIGNvbnZlcnQgdW5kZWZpbmVkIHRvIG51bGxcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBJZiB0aGUgTUpTT05XUCBlbGVtZW50IGtleSBmb3JtYXQgKEVMRU1FTlQpIHdhcyBwcm92aWRlZCwgYWRkIGEgZHVwbGljYXRlIGtleSAoZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YpXG4gIC8vIElmIHRoZSBXM0MgZWxlbWVudCBrZXkgZm9ybWF0IChlbGVtZW50LTYwNjYtMTFlNC1hNTJlLTRmNzM1NDY2Y2VjZikgd2FzIHByb3ZpZGVkLCBhZGQgYSBkdXBsaWNhdGUga2V5IChFTEVNRU5UKVxuICByZXR1cm4gZHVwbGljYXRlS2V5cyhyZXNWYWx1ZSwgTUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZKTtcbn1cblxuLyoqXG4gKiBQcm9wZXJseSBmb3JtYXRzIHRoZSBzdGF0dXMgZm9yIEFQSSByZXNwb25zZXMsXG4gKiBzbyB0aGV5IGFyZSBjb3JyZWN0IGZvciB0aGUgVzNDIHByb3RvY29sLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZUJvZHlcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmaXhlZCByZXNwb25zZSBib2R5XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFN0YXR1cyhyZXNwb25zZUJvZHkpIHtcbiAgcmV0dXJuIF8uaXNQbGFpbk9iamVjdChyZXNwb25zZUJvZHkpID8gXy5vbWl0KHJlc3BvbnNlQm9keSwgWydzdGF0dXMnXSkgOiByZXNwb25zZUJvZHk7XG59XG5cbmV4cG9ydCB7TUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZLCBmb3JtYXRSZXNwb25zZVZhbHVlLCBmb3JtYXRTdGF0dXN9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFXQSxTQUFTQSxtQkFBVCxDQUE2QkMsUUFBN0IsRUFBdUM7RUFDckMsSUFBSUMsZUFBQSxDQUFFQyxXQUFGLENBQWNGLFFBQWQsQ0FBSixFQUE2QjtJQUUzQixPQUFPLElBQVA7RUFDRDs7RUFHRCxPQUFPLElBQUFHLHNCQUFBLEVBQWNILFFBQWQsRUFBd0JJLDhCQUF4QixFQUE2Q0MsMEJBQTdDLENBQVA7QUFDRDs7QUFTRCxTQUFTQyxZQUFULENBQXNCQyxZQUF0QixFQUFvQztFQUNsQyxPQUFPTixlQUFBLENBQUVPLGFBQUYsQ0FBZ0JELFlBQWhCLElBQWdDTixlQUFBLENBQUVRLElBQUYsQ0FBT0YsWUFBUCxFQUFxQixDQUFDLFFBQUQsQ0FBckIsQ0FBaEMsR0FBbUVBLFlBQTFFO0FBQ0QifQ==
@@ -95,4 +95,4 @@ var _protocol = require("./protocol");
95
95
  var _routes = require("./routes");
96
96
 
97
97
  var _errors = require("./errors");
98
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Byb3RvY29sL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCB7XG4gIGlzU2Vzc2lvbkNvbW1hbmQsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgZGV0ZXJtaW5lUHJvdG9jb2wsXG4gIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsIEdFVF9TVEFUVVNfQ09NTUFORFxufSBmcm9tICcuL3Byb3RvY29sJztcbmltcG9ydCB7XG4gIE5PX1NFU1NJT05fSURfQ09NTUFORFMsIEFMTF9DT01NQU5EUywgTUVUSE9EX01BUCxcbiAgcm91dGVUb0NvbW1hbmROYW1lXG59IGZyb20gJy4vcm91dGVzJztcbmltcG9ydCB7XG4gIGVycm9ycywgaXNFcnJvclR5cGUsIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICcuL2Vycm9ycyc7XG5cbmV4cG9ydCB7XG4gIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgZXJyb3JzLCBpc0Vycm9yVHlwZSxcbiAgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUsIGVycm9yRnJvbVczQ0pzb25Db2RlLCBBTExfQ09NTUFORFMsIE1FVEhPRF9NQVAsXG4gIHJvdXRlVG9Db21tYW5kTmFtZSwgTk9fU0VTU0lPTl9JRF9DT01NQU5EUywgaXNTZXNzaW9uQ29tbWFuZCwgZGV0ZXJtaW5lUHJvdG9jb2wsXG4gIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsIEdFVF9TVEFUVVNfQ09NTUFORFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFJQTs7QUFJQSJ9
98
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Byb3RvY29sL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGlzU2Vzc2lvbkNvbW1hbmQsXG4gIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbixcbiAgZGV0ZXJtaW5lUHJvdG9jb2wsXG4gIENSRUFURV9TRVNTSU9OX0NPTU1BTkQsXG4gIERFTEVURV9TRVNTSU9OX0NPTU1BTkQsXG4gIEdFVF9TVEFUVVNfQ09NTUFORCxcbn0gZnJvbSAnLi9wcm90b2NvbCc7XG5pbXBvcnQge05PX1NFU1NJT05fSURfQ09NTUFORFMsIEFMTF9DT01NQU5EUywgTUVUSE9EX01BUCwgcm91dGVUb0NvbW1hbmROYW1lfSBmcm9tICcuL3JvdXRlcyc7XG5pbXBvcnQge2Vycm9ycywgaXNFcnJvclR5cGUsIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZX0gZnJvbSAnLi9lcnJvcnMnO1xuXG5leHBvcnQge1xuICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sXG4gIGVycm9ycyxcbiAgaXNFcnJvclR5cGUsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLFxuICBlcnJvckZyb21XM0NKc29uQ29kZSxcbiAgQUxMX0NPTU1BTkRTLFxuICBNRVRIT0RfTUFQLFxuICByb3V0ZVRvQ29tbWFuZE5hbWUsXG4gIE5PX1NFU1NJT05fSURfQ09NTUFORFMsXG4gIGlzU2Vzc2lvbkNvbW1hbmQsXG4gIGRldGVybWluZVByb3RvY29sLFxuICBDUkVBVEVfU0VTU0lPTl9DT01NQU5ELFxuICBERUxFVEVfU0VTU0lPTl9DT01NQU5ELFxuICBHRVRfU1RBVFVTX0NPTU1BTkQsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQVFBOztBQUNBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../lib/protocol/protocol.js"],"names":[],"mappings":"AA2MA;;;WAyBC;AA/LD,wDAEC;AAuXD,qFAmBC;AA/ZD,kEAEC;AAND,qDAA+C;AAC/C,qDAA+C;AAC/C,6CAAuC"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../lib/protocol/protocol.js"],"names":[],"mappings":"AAsNA;;;WAgCC;AA/MD,wDAEC;AAiaD,qFAmBC;AAzcD,kEAEC;AAND,qDAA+C;AAC/C,qDAA+C;AAC/C,6CAAuC"}
@@ -391,4 +391,4 @@ async function doJwpProxy(driver, req, res) {
391
391
  }
392
392
  }
393
393
  }
394
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDUkVBVEVfU0VTU0lPTl9DT01NQU5EIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsIkdFVF9TVEFUVVNfQ09NTUFORCIsImRldGVybWluZVByb3RvY29sIiwiY3JlYXRlU2Vzc2lvbkFyZ3MiLCJfIiwic29tZSIsImlzVzNjQ2FwcyIsIlBST1RPQ09MUyIsIlczQyIsIk1KU09OV1AiLCJleHRyYWN0UHJvdG9jb2wiLCJkcml2ZXIiLCJzZXNzaW9uSWQiLCJkc3REcml2ZXIiLCJpc0Z1bmN0aW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsInByb3RvY29sIiwiaXNTZXNzaW9uQ29tbWFuZCIsImNvbW1hbmQiLCJpbmNsdWRlcyIsIk5PX1NFU1NJT05fSURfQ09NTUFORFMiLCJnZXRMb2dnZXIiLCJsb2ciLCJpbmZvIiwibG9nUHJlZml4IiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIiwic3Vic3RyaW5nIiwibG9nZ2VyIiwid3JhcFBhcmFtcyIsInBhcmFtU2V0cyIsImpzb25PYmoiLCJyZXMiLCJpc0FycmF5IiwiaXNPYmplY3QiLCJ3cmFwIiwidW53cmFwUGFyYW1zIiwidW53cmFwIiwiY2hlY2tQYXJhbXMiLCJyZXF1aXJlZFBhcmFtcyIsIm9wdGlvbmFsUGFyYW1zIiwicmVjZWl2ZWRQYXJhbXMiLCJrZXlzIiwicmVxdWlyZWQiLCJmaXJzdCIsIm9wdGlvbmFsIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiZXJyb3JzIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwibGVuZ3RoIiwiaW5kZXhPZiIsInB1c2giLCJwYXJhbXMiLCJkaWZmZXJlbmNlIiwibWFrZUFyZ3MiLCJyZXF1ZXN0UGFyYW1zIiwicGF5bG9hZFBhcmFtcyIsInVybFBhcmFtcyIsInJldmVyc2UiLCJ3aXRob3V0IiwiYXJncyIsImZsYXR0ZW4iLCJtYXAiLCJwIiwiY29uY2F0IiwidSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlc3Npb25FeGlzdHMiLCJFcnJvciIsImV4ZWN1dGVDb21tYW5kIiwiZXhlY3V0ZSIsImFkZFJvdXRlcyIsImFwcCIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJleHRyYU1ldGhvZE1hcCIsImFsbE1ldGhvZHMiLCJNRVRIT0RfTUFQIiwicGF0aCIsIm1ldGhvZHMiLCJ0b1BhaXJzIiwibWV0aG9kIiwic3BlYyIsImJ1aWxkSGFuZGxlciIsImlzU2Vzc0NtZCIsImFzeW5jSGFuZGxlciIsInJlcSIsImJvZHkiLCJodHRwUmVzQm9keSIsImh0dHBTdGF0dXMiLCJuZXdTZXNzaW9uSWQiLCJjdXJyZW50UHJvdG9jb2wiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImRpZFBsdWdpbk92ZXJyaWRlUHJveHkiLCJuZXZlclByb3h5IiwiZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSIsInBsdWdpbnNUb0hhbmRsZUNtZCIsImRvSndwUHJveHkiLCJkZWJ1ZyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJkcml2ZXJSZXMiLCJ2YWxpZGF0b3JzIiwidHJ1bmNhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiTUFYX0xPR19CT0RZX0xFTkdUSCIsInJlcUZvclByb3h5IiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImVycm9yIiwidmFsdWUiLCJjYXBhYmlsaXRpZXMiLCJ1dGlsIiwiaGFzVmFsdWUiLCJzdGF0dXMiLCJpc05hTiIsInBhcnNlSW50Iiwic3RhY2t0cmFjZSIsImVyciIsImFjdHVhbEVyciIsImVyck1zZyIsInN0YWNrIiwiUHJveHlSZXF1ZXN0RXJyb3IiLCJnZXRBY3R1YWxFcnJvciIsImlzU3RyaW5nIiwic2VuZCIsImpzb24iLCJ0b0xvd2VyQ2FzZSIsIkIiLCJyZXNvbHZlIiwiZG9uZSIsInByb3h5QWN0aXZlIiwicHJveHlSb3V0ZUlzQXZvaWRlZCIsIm9yaWdpbmFsVXJsIiwiY2FuUHJveHkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcHJvdG9jb2wvcHJvdG9jb2wuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIGxvZ2dlciwgbm9kZSB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyB2YWxpZGF0b3JzIH0gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7XG4gIGVycm9ycywgaXNFcnJvclR5cGUsIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLCBlcnJvckZyb21XM0NKc29uQ29kZSxcbn0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgTUVUSE9EX01BUCwgTk9fU0VTU0lPTl9JRF9DT01NQU5EUyB9IGZyb20gJy4vcm91dGVzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGZvcm1hdFJlc3BvbnNlVmFsdWUsIGZvcm1hdFN0YXR1cyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBNQVhfTE9HX0JPRFlfTEVOR1RILCBQUk9UT0NPTFMsIERFRkFVTFRfQkFTRV9QQVRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzVzNjQ2FwcyB9IGZyb20gJy4uL2hlbHBlcnMvY2FwYWJpbGl0aWVzJztcblxuXG5jb25zdCBDUkVBVEVfU0VTU0lPTl9DT01NQU5EID0gJ2NyZWF0ZVNlc3Npb24nO1xuY29uc3QgREVMRVRFX1NFU1NJT05fQ09NTUFORCA9ICdkZWxldGVTZXNzaW9uJztcbmNvbnN0IEdFVF9TVEFUVVNfQ09NTUFORCA9ICdnZXRTdGF0dXMnO1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVQcm90b2NvbCAoY3JlYXRlU2Vzc2lvbkFyZ3MpIHtcbiAgcmV0dXJuIF8uc29tZShjcmVhdGVTZXNzaW9uQXJncywgaXNXM2NDYXBzKSA/IFBST1RPQ09MUy5XM0MgOiBQUk9UT0NPTFMuTUpTT05XUDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFByb3RvY29sIChkcml2ZXIsIHNlc3Npb25JZCA9IG51bGwpIHtcbiAgY29uc3QgZHN0RHJpdmVyID0gXy5pc0Z1bmN0aW9uKGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uKVxuICAgID8gZHJpdmVyLmRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKVxuICAgIDogZHJpdmVyO1xuICBpZiAoZHN0RHJpdmVyID09PSBkcml2ZXIpIHtcbiAgICAvLyBTaG9ydGNpcmN1aXQgaWYgdGhlIGRyaXZlciBpbnN0YW5jZSBpcyBub3QgYW4gdW1icmVsbGEgZHJpdmVyXG4gICAgLy8gb3IgaXQgaXMgRmFrZSBkcml2ZXIgaW5zdGFuY2UsIHdoZXJlIGBkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbmBcbiAgICAvLyBhbHdheXMgcmV0dXJucyBzZWxmIGluc3RhbmNlXG4gICAgcmV0dXJuIGRyaXZlci5wcm90b2NvbDtcbiAgfVxuXG4gIC8vIEV4dHJhY3QgdGhlIHByb3RvY29sIGZvciB0aGUgY3VycmVudCBzZXNzaW9uIGlmIHRoZSBnaXZlbiBkcml2ZXIgaXMgdGhlIHVtYnJlbGxhIG9uZVxuICByZXR1cm4gZHN0RHJpdmVyPy5wcm90b2NvbCA/PyBQUk9UT0NPTFMuVzNDO1xufVxuXG5mdW5jdGlvbiBpc1Nlc3Npb25Db21tYW5kIChjb21tYW5kKSB7XG4gIHJldHVybiAhXy5pbmNsdWRlcyhOT19TRVNTSU9OX0lEX0NPTU1BTkRTLCBjb21tYW5kKTtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nZ2VyIChkcml2ZXIsIHNlc3Npb25JZCA9IG51bGwpIHtcbiAgY29uc3QgZHN0RHJpdmVyID0gc2Vzc2lvbklkICYmIF8uaXNGdW5jdGlvbihkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbilcbiAgICA/IChkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbihzZXNzaW9uSWQpID8/IGRyaXZlcilcbiAgICA6IGRyaXZlcjtcbiAgaWYgKF8uaXNGdW5jdGlvbihkc3REcml2ZXIubG9nPy5pbmZvKSkge1xuICAgIHJldHVybiBkc3REcml2ZXIubG9nO1xuICB9XG5cbiAgbGV0IGxvZ1ByZWZpeCA9IGRzdERyaXZlci5jb25zdHJ1Y3RvclxuICAgID8gYCR7ZHN0RHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZChkc3REcml2ZXIpLnN1YnN0cmluZygwLCA4KX1gXG4gICAgOiAnQXBwaXVtRHJpdmVyJztcbiAgaWYgKHNlc3Npb25JZCkge1xuICAgIGxvZ1ByZWZpeCArPSBgICgke3Nlc3Npb25JZC5zdWJzdHJpbmcoMCwgOCl9KWA7XG4gIH1cbiAgcmV0dXJuIGxvZ2dlci5nZXRMb2dnZXIobG9nUHJlZml4KTtcbn1cblxuZnVuY3Rpb24gd3JhcFBhcmFtcyAocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHBlcmZvcm1Ub3VjaCB3aGljaCB0YWtlIGEgc2luZ2xlIHBhcmFtZXRlciAocHJpbWl0aXZlIHR5cGUgb3IgYXJyYXkpLlxuICAgKiBTb21lIGRyaXZlcnMgY2hvb3NlIHRvIHBhc3MgdGhpcyBwYXJhbWV0ZXIgYXMgYSB2YWx1ZSAoZWcuIFthY3Rpb24xLCBhY3Rpb24yLi4uXSkgd2hpbGUgb3RoZXJzIHRvXG4gICAqIHdyYXAgaXQgd2l0aGluIGFuIG9iamVjdChlZycge2dlc3R1cmU6ICBbYWN0aW9uMSwgYWN0aW9uMi4uLl19KSwgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byB2YWxpZGF0ZS5cbiAgICogVGhlIHdyYXAgb3B0aW9uIGluIHRoZSBzcGVjIGVuZm9yY2Ugd3JhcHBpbmcgYmVmb3JlIHZhbGlkYXRpb24sIHNvIHRoYXQgYWxsIHBhcmFtcyBhcmUgd3JhcHBlZCBhdFxuICAgKiB0aGUgdGltZSB0aGV5IGFyZSB2YWxpZGF0ZWQgYW5kIGxhdGVyIHBhc3NlZCB0byB0aGUgY29tbWFuZHMuXG4gICAqL1xuICBsZXQgcmVzID0ganNvbk9iajtcbiAgaWYgKF8uaXNBcnJheShqc29uT2JqKSB8fCAhXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIHJlcyA9IHt9O1xuICAgIHJlc1twYXJhbVNldHMud3JhcF0gPSBqc29uT2JqO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHVud3JhcFBhcmFtcyAocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHNldE5ldHdvcmtDb25uZWN0aW9uIHdoaWNoIHNlbmQgcGFyYW1ldGVycyB3cmFwcGVkIGluc2lkZSBhIGtleSBzdWNoIGFzXG4gICAqIFwicGFyYW1ldGVyc1wiLiBUaGlzIGZ1bmN0aW9uIHVud3JhcHMgdGhlbSAoZWcuIHtcInBhcmFtZXRlcnNcIjoge1widHlwZVwiOiAxfX0gYmVjb21lcyB7XCJ0eXBlXCI6IDF9KS5cbiAgICovXG4gIGxldCByZXMgPSBqc29uT2JqO1xuICBpZiAoXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIC8vIHNvbWUgY2xpZW50cywgbGlrZSBydWJ5LCBkb24ndCB3cmFwXG4gICAgaWYgKGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF0pIHtcbiAgICAgIHJlcyA9IGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyYW1zIChwYXJhbVNldHMsIGpzb25PYmosIHByb3RvY29sKSB7XG4gIGxldCByZXF1aXJlZFBhcmFtcyA9IFtdO1xuICBsZXQgb3B0aW9uYWxQYXJhbXMgPSBbXTtcbiAgbGV0IHJlY2VpdmVkUGFyYW1zID0gXy5rZXlzKGpzb25PYmopO1xuXG4gIGlmIChwYXJhbVNldHMpIHtcbiAgICBpZiAocGFyYW1TZXRzLnJlcXVpcmVkKSB7XG4gICAgICAvLyB3ZSBtaWdodCBoYXZlIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMsXG4gICAgICAvLyBvciBhbiBhcnJheSBvZiBhcnJheXMgb2YgcGFyYW1ldGVycywgc28gc3RhbmRhcmRpemVcbiAgICAgIGlmICghXy5pc0FycmF5KF8uZmlyc3QocGFyYW1TZXRzLnJlcXVpcmVkKSkpIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBbcGFyYW1TZXRzLnJlcXVpcmVkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW1zID0gcGFyYW1TZXRzLnJlcXVpcmVkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBqdXN0IGFuIGFycmF5XG4gICAgaWYgKHBhcmFtU2V0cy5vcHRpb25hbCkge1xuICAgICAgb3B0aW9uYWxQYXJhbXMgPSBwYXJhbVNldHMub3B0aW9uYWw7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgYXMgdGhlICd2YWxpZGF0ZScga2V5LCBpdCB3aWxsIGhlcmUgYmUgY2FsbGVkIHdpdGhcbiAgICAvLyBqc29uT2JqIGFzIHRoZSBwYXJhbS4gSWYgaXQgcmV0dXJucyBzb21ldGhpbmcgZmFsc3ksIHZlcmlmaWNhdGlvbiB3aWxsIGJlXG4gICAgLy8gY29uc2lkZXJlZCB0byBoYXZlIHBhc3NlZC4gSWYgaXQgcmV0dXJucyBzb21ldGhpbmcgZWxzZSwgdGhhdCB3aWxsIGJlIHRoZVxuICAgIC8vIGFyZ3VtZW50IHRvIGFuIGVycm9yIHdoaWNoIGlzIHRocm93biB0byB0aGUgdXNlclxuICAgIGlmIChwYXJhbVNldHMudmFsaWRhdGUpIHtcbiAgICAgIGxldCBtZXNzYWdlID0gcGFyYW1TZXRzLnZhbGlkYXRlKGpzb25PYmosIHByb3RvY29sKTtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKG1lc3NhZ2UsIGpzb25PYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHdlIGhhdmUgbm8gcmVxdWlyZWQgcGFyYW1ldGVycywgYWxsIGlzIHdlbGxcbiAgaWYgKHJlcXVpcmVkUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHNvbWUgY2xpZW50cyBwYXNzIGluIHRoZSBzZXNzaW9uIGlkIGluIHRoZSBwYXJhbXNcbiAgaWYgKG9wdGlvbmFsUGFyYW1zLmluZGV4T2YoJ3Nlc3Npb25JZCcpID09PSAtMSkge1xuICAgIG9wdGlvbmFsUGFyYW1zLnB1c2goJ3Nlc3Npb25JZCcpO1xuICB9XG5cbiAgLy8gc29tZSBjbGllbnRzIHBhc3MgaW4gYW4gZWxlbWVudCBpZCBpbiB0aGUgcGFyYW1zXG4gIGlmIChvcHRpb25hbFBhcmFtcy5pbmRleE9mKCdpZCcpID09PSAtMSkge1xuICAgIG9wdGlvbmFsUGFyYW1zLnB1c2goJ2lkJyk7XG4gIH1cblxuICAvLyBnbyB0aHJvdWdoIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFuZCBjaGVjayBhZ2FpbnN0IG91ciBhcmd1bWVudHNcbiAgZm9yIChsZXQgcGFyYW1zIG9mIHJlcXVpcmVkUGFyYW1zKSB7XG4gICAgaWYgKF8uZGlmZmVyZW5jZShyZWNlaXZlZFBhcmFtcywgcGFyYW1zLCBvcHRpb25hbFBhcmFtcykubGVuZ3RoID09PSAwICYmXG4gICAgICAgIF8uZGlmZmVyZW5jZShwYXJhbXMsIHJlY2VpdmVkUGFyYW1zKS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIHdlIGhhdmUgYSBzZXQgb2YgcGFyYW1ldGVycyB0aGF0IGlzIGNvcnJlY3RcbiAgICAgIC8vIHNvIHNob3J0LWNpcmN1aXRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IocGFyYW1TZXRzLCByZWNlaXZlZFBhcmFtcyk7XG59XG5cbi8qXG4gKiBUaGlzIG1ldGhvZCB0YWtlcyAzIHBpZWNlcyBvZiBkYXRhOiByZXF1ZXN0IHBhcmFtZXRlcnMgKCdyZXF1ZXN0UGFyYW1zJyksXG4gKiBhIHJlcXVlc3QgSlNPTiBib2R5ICgnanNvbk9iaicpLCBhbmQgJ3BheWxvYWRQYXJhbXMnLCB3aGljaCBpcyB0aGUgc2VjdGlvblxuICogZnJvbSB0aGUgcm91dGUgZGVmaW5pdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGVuZHBvaW50IHdoaWNoIGhhcyBpbnN0cnVjdGlvbnNcbiAqIG9uIGhhbmRsaW5nIHBhcmFtZXRlcnMuIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGxcbiAqIGJlIGFwcGxpZWQgdG8gYSBjb21tYW5kLlxuICovXG5mdW5jdGlvbiBtYWtlQXJncyAocmVxdWVzdFBhcmFtcywganNvbk9iaiwgcGF5bG9hZFBhcmFtcywgcHJvdG9jb2wpIHtcbiAgLy8gV2Ugd2FudCB0byBwYXNzIHRoZSBcInVybFwiIHBhcmFtZXRlcnMgdG8gdGhlIGNvbW1hbmRzIGluIHJldmVyc2Ugb3JkZXJcbiAgLy8gc2luY2UgdGhlIGNvbW1hbmQgd2lsbCBzb21ldGltZXMgd2FudCB0byBpZ25vcmUsIHNheSwgdGhlIHNlc3Npb25JZC5cbiAgLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBwdXR0aW5nIHNlc3Npb25JZCBsYXN0LCB3aGljaCBtZWFucyBpbiBKUyB3ZSBjYW5cbiAgLy8gb21pdCBpdCBmcm9tIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaWYgd2UncmUgbm90IGdvaW5nIHRvIHVzZSBpdC5cbiAgbGV0IHVybFBhcmFtcyA9IF8ua2V5cyhyZXF1ZXN0UGFyYW1zKS5yZXZlcnNlKCk7XG5cbiAgLy8gSW4gdGhlIHNpbXBsZSBjYXNlLCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBhcmUgYSBiYXNpYyBhcnJheSBpblxuICAvLyBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkLCBzbyBzdGFydCB0aGVyZS4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZVxuICAvLyBtdWx0aXBsZSBvcHRpb25hbCBzZXRzIG9mIHJlcXVpcmVkIHBhcmFtcywgdGhvdWdoLCBzbyBoYW5kbGUgdGhhdCBjYXNlXG4gIC8vIHRvby5cbiAgbGV0IHJlcXVpcmVkUGFyYW1zID0gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZDtcbiAgaWYgKF8uaXNBcnJheShfLmZpcnN0KHBheWxvYWRQYXJhbXMucmVxdWlyZWQpKSkge1xuICAgIC8vIElmIHRoZXJlIGFyZSBvcHRpb25hbCBzZXRzIG9mIHJlcXVpcmVkIHBhcmFtcywgdGhlbiB3ZSB3aWxsIGhhdmUgYW5cbiAgICAvLyBhcnJheSBvZiBhcnJheXMgaW4gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZCwgc28gbG9vcCB0aHJvdWdoIGVhY2ggc2V0IGFuZFxuICAgIC8vIHBpY2sgdGhlIG9uZSB0aGF0IG1hdGNoZXMgd2hpY2ggSlNPTiBwYXJhbXMgd2VyZSBhY3R1YWxseSBzZW50LiBXZSd2ZVxuICAgIC8vIGFscmVhZHkgYmVlbiB0aHJvdWdoIHZhbGlkYXRpb24gc28gd2UncmUgZ3VhcmFudGVlZCB0byBmaW5kIGEgbWF0Y2guXG4gICAgbGV0IGtleXMgPSBfLmtleXMoanNvbk9iaik7XG4gICAgZm9yIChsZXQgcGFyYW1zIG9mIHBheWxvYWRQYXJhbXMucmVxdWlyZWQpIHtcbiAgICAgIGlmIChfLndpdGhvdXQocGFyYW1zLCAuLi5rZXlzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyB3ZSBjb25zdHJ1Y3Qgb3VyIGxpc3Qgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kXG4gIGxldCBhcmdzO1xuICBpZiAoXy5pc0Z1bmN0aW9uKHBheWxvYWRQYXJhbXMubWFrZUFyZ3MpKSB7XG4gICAgLy8gSW4gdGhlIHJvdXRlIHNwZWMsIGEgcGFydGljdWxhciByb3V0ZSBtaWdodCBkZWZpbmUgYSAnbWFrZUFyZ3MnIGZ1bmN0aW9uXG4gICAgLy8gaWYgaXQgd2FudHMgZnVsbCBjb250cm9sIG92ZXIgaG93IHRvIHR1cm4gSlNPTiBwYXJhbWV0ZXJzIGludG8gY29tbWFuZFxuICAgIC8vIGFyZ3VtZW50cy4gU28gd2UgcGFzcyBpdCB0aGUgSlNPTiBwYXJhbWV0ZXJzIGFuZCBpdCByZXR1cm5zIGFuIGFycmF5XG4gICAgLy8gd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBoYW5kbGluZyBjb21tYW5kLiBGb3IgZXhhbXBsZSBpZiBpdCByZXR1cm5zXG4gICAgLy8gWzEsIDIsIDNdLCB3ZSB3aWxsIGNhbGwgYGNvbW1hbmQoMSwgMiwgMywgLi4uKWAgKHVybCBwYXJhbXMgYXJlIHNlcGFyYXRlXG4gICAgLy8gZnJvbSBKU09OIHBhcmFtcyBhbmQgZ2V0IGNvbmNhdGVuYXRlZCBiZWxvdykuXG4gICAgYXJncyA9IHBheWxvYWRQYXJhbXMubWFrZUFyZ3MoanNvbk9iaiwgcHJvdG9jb2wpO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSwgY29sbGVjdCBhbGwgdGhlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBwYXJhbXMgYW5kIGZsYXR0ZW4gdGhlbVxuICAgIC8vIGludG8gYW4gYXJndW1lbnQgYXJyYXlcbiAgICBhcmdzID0gXy5mbGF0dGVuKHJlcXVpcmVkUGFyYW1zKS5tYXAoKHApID0+IGpzb25PYmpbcF0pO1xuICAgIGlmIChwYXlsb2FkUGFyYW1zLm9wdGlvbmFsKSB7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoXy5mbGF0dGVuKHBheWxvYWRQYXJhbXMub3B0aW9uYWwpLm1hcCgocCkgPT4ganNvbk9ialtwXSkpO1xuICAgIH1cbiAgfVxuICAvLyBGaW5hbGx5LCBnZXQgb3VyIHVybCBwYXJhbXMgKHNlc3Npb24gaWQsIGVsZW1lbnQgaWQsIGV0Yy4uLikgb24gdGhlIGVuZCBvZlxuICAvLyB0aGUgbGlzdFxuICBhcmdzID0gYXJncy5jb25jYXQodXJsUGFyYW1zLm1hcCgodSkgPT4gcmVxdWVzdFBhcmFtc1t1XSkpO1xuICByZXR1cm4gYXJncztcbn1cblxuZnVuY3Rpb24gcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIChkcml2ZXIpIHtcbiAgaWYgKCFkcml2ZXIuc2Vzc2lvbkV4aXN0cykge1xuICAgIHRocm93IG5ldyBFcnJvcignRHJpdmVycyBtdXN0IGltcGxlbWVudCBgc2Vzc2lvbkV4aXN0c2AgcHJvcGVydHknKTtcbiAgfVxuXG4gIGlmICghKGRyaXZlci5leGVjdXRlQ29tbWFuZCB8fCBkcml2ZXIuZXhlY3V0ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RyaXZlcnMgbXVzdCBpbXBsZW1lbnQgYGV4ZWN1dGVDb21tYW5kYCBvciBgZXhlY3V0ZWAgbWV0aG9kJyk7XG4gIH1cblxuICAvLyByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCB3aWxsIGFkZCBhbGwgdGhlIHJvdXRlcyB0byB0aGUgZHJpdmVyLiBIZXJlIGV4dHJhTWV0aG9kcyBtaWdodCBiZVxuICAvLyBwYXNzZWQgaW4gYXMgZGVmaW5lZCBieSBBcHBpdW0gcGx1Z2lucywgc28gd2UgbmVlZCB0byBhZGQgdGhvc2UgdG8gdGhlIGRlZmF1bHQgbGlzdFxuICByZXR1cm4gZnVuY3Rpb24gYWRkUm91dGVzIChhcHAsIHtiYXNlUGF0aCA9IERFRkFVTFRfQkFTRV9QQVRILCBleHRyYU1ldGhvZE1hcCA9IHt9fSkge1xuICAgIC8vIHN0b3JlIGJhc2VQYXRoIG9uIHRoZSBkcml2ZXIgaW5zdGFuY2Ugc28gaXQgY2FuIHVzZSBpdCBpZiBuZWNlc3NhcnlcbiAgICAvLyBmb3IgZXhhbXBsZSBpbiBkZXRlcm1pbmluZyBwcm94eSBhdm9pZGFuY2VcbiAgICBkcml2ZXIuYmFzZVBhdGggPSBiYXNlUGF0aDtcblxuICAgIGNvbnN0IGFsbE1ldGhvZHMgPSB7Li4uTUVUSE9EX01BUCwgLi4uZXh0cmFNZXRob2RNYXB9O1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgbWV0aG9kc10gb2YgXy50b1BhaXJzKGFsbE1ldGhvZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFttZXRob2QsIHNwZWNdIG9mIF8udG9QYWlycyhtZXRob2RzKSkge1xuICAgICAgICAvLyBzZXQgdXAgdGhlIGV4cHJlc3Mgcm91dGUgaGFuZGxlclxuICAgICAgICBidWlsZEhhbmRsZXIoYXBwLCBtZXRob2QsIGAke2Jhc2VQYXRofSR7cGF0aH1gLCBzcGVjLCBkcml2ZXIsIGlzU2Vzc2lvbkNvbW1hbmQoc3BlYy5jb21tYW5kKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEhhbmRsZXIgKGFwcCwgbWV0aG9kLCBwYXRoLCBzcGVjLCBkcml2ZXIsIGlzU2Vzc0NtZCkge1xuICBsZXQgYXN5bmNIYW5kbGVyID0gYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgbGV0IGpzb25PYmogPSByZXEuYm9keTtcbiAgICBsZXQgaHR0cFJlc0JvZHkgPSB7fTtcbiAgICBsZXQgaHR0cFN0YXR1cyA9IDIwMDtcbiAgICBsZXQgbmV3U2Vzc2lvbklkO1xuICAgIGxldCBjdXJyZW50UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gaWYgdGhpcyBpcyBhIHNlc3Npb24gY29tbWFuZCBidXQgd2UgZG9uJ3QgaGF2ZSBhIHNlc3Npb24sXG4gICAgICAvLyBlcnJvciBvdXQgZWFybHkgKGVzcGVjaWFsbHkgYmVmb3JlIHByb3h5aW5nKVxuICAgICAgaWYgKGlzU2Vzc0NtZCAmJiAhZHJpdmVyLnNlc3Npb25FeGlzdHMocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIGRyaXZlciBpcyBjdXJyZW50bHkgcHJveHlpbmcgY29tbWFuZHMgdG8gYW5vdGhlciBKU09OV1Agc2VydmVyLCBieXBhc3MgYWxsIG91clxuICAgICAgLy8gY2hlY2tzIGFuZCBhc3N1bWUgdGhlIHVwc3RyZWFtIHNlcnZlciBrbm93cyB3aGF0IGl0J3MgZG9pbmcuIEJ1dCBrZWVwIHRoaXMgaW4gdGhlXG4gICAgICAvLyB0cnkvY2F0Y2ggYmxvY2sgc28gaWYgcHJveHlpbmcgaXRzZWxmIGZhaWxzLCB3ZSBnaXZlIGEgbWVzc2FnZSB0byB0aGUgY2xpZW50LiBPZiBjb3Vyc2Ugd2VcbiAgICAgIC8vIG9ubHkgd2FudCB0byBkbyB0aGVzZSB3aGVuIHdlIGhhdmUgYSBzZXNzaW9uIGNvbW1hbmQ7IHRoZSBBcHBpdW0gZHJpdmVyIG11c3QgYmVcbiAgICAgIC8vIHJlc3BvbnNpYmxlIGZvciBzdGFydC9zdG9wIHNlc3Npb24sIGV0Yy4uLiBXZSBhbHNvIGFsbG93IHRoZSBjb21tYW5kIHNwZWMgdG8gZGVjbGFyZSB0aGF0XG4gICAgICAvLyB0aGlzIGNvbW1hbmQgc2hvdWxkIG5ldmVyIGJlIHByb3hpZWQgKHdoaWNoIGlzIHVzZWZ1bCBmb3IgcGx1Z2luIGRldmVsb3BlcnMgd2hvIGFkZFxuICAgICAgLy8gY29tbWFuZHMgYW5kIGdlbmVyYWxseSB3b3VsZCBub3Qgd2FudCB0aGF0IGNvbW1hbmQgdG8gYmUgcHJveGllZCBpbnN0ZWFkIG9mIGhhbmRsZWQgYnkgdGhlXG4gICAgICAvLyBwbHVnaW4pXG4gICAgICBsZXQgZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSA9IGZhbHNlO1xuICAgICAgaWYgKGlzU2Vzc0NtZCAmJiAhc3BlYy5uZXZlclByb3h5ICYmIGRyaXZlclNob3VsZERvSndwUHJveHkoZHJpdmVyLCByZXEsIHNwZWMuY29tbWFuZCkpIHtcbiAgICAgICAgaWYgKCFkcml2ZXIucGx1Z2luc1RvSGFuZGxlQ21kIHx8XG4gICAgICAgICAgICBkcml2ZXIucGx1Z2luc1RvSGFuZGxlQ21kKHNwZWMuY29tbWFuZCwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGF3YWl0IGRvSndwUHJveHkoZHJpdmVyLCByZXEsIHJlcyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5kZWJ1ZyhgV291bGQgaGF2ZSBwcm94aWVkIGAgK1xuICAgICAgICAgIGBjb21tYW5kIGRpcmVjdGx5LCBidXQgYSBwbHVnaW4gZXhpc3RzIHdoaWNoIG1pZ2h0IHJlcXVpcmUgaXRzIHZhbHVlLCBzbyB3aWxsIGxldCBgICtcbiAgICAgICAgICBgaXRzIHZhbHVlIGJlIGNvbGxlY3RlZCBpbnRlcm5hbGx5IGFuZCBtYWRlIHBhcnQgb2YgcGx1Z2luIGNoYWluYCk7XG4gICAgICAgIGRpZFBsdWdpbk92ZXJyaWRlUHJveHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiBhIGNvbW1hbmQgaXMgbm90IGluIG91ciBtZXRob2QgbWFwLCBpdCdzIGJlY2F1c2Ugd2VcbiAgICAgIC8vIGhhdmUgbm8gcGxhbnMgdG8gZXZlciBpbXBsZW1lbnQgaXRcbiAgICAgIGlmICghc3BlYy5jb21tYW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyB3cmFwIHBhcmFtcyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChzcGVjLnBheWxvYWRQYXJhbXMgJiYgc3BlYy5wYXlsb2FkUGFyYW1zLndyYXApIHtcbiAgICAgICAganNvbk9iaiA9IHdyYXBQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqKTtcbiAgICAgIH1cblxuICAgICAgLy8gdW53cmFwIHBhcmFtcyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChzcGVjLnBheWxvYWRQYXJhbXMgJiYgc3BlYy5wYXlsb2FkUGFyYW1zLnVud3JhcCkge1xuICAgICAgICBqc29uT2JqID0gdW53cmFwUGFyYW1zKHNwZWMucGF5bG9hZFBhcmFtcywganNvbk9iaik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IENSRUFURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGRldGVybWluZSBwcm90b2NvbCBieSBzZXNzaW9uIGNyZWF0aW9uIGFyZ3MsIHNvIHdlIGNhbiB0aHJvdyBhXG4gICAgICAgIC8vIHByb3Blcmx5IGZvcm1hdHRlZCBlcnJvciBpZiBhcmd1bWVudHMgdmFsaWRhdGlvbiBmYWlsc1xuICAgICAgICBjdXJyZW50UHJvdG9jb2wgPSBkZXRlcm1pbmVQcm90b2NvbChtYWtlQXJncyhyZXEucGFyYW1zLCBqc29uT2JqLCBzcGVjLnBheWxvYWRQYXJhbXMgfHwge30pKTtcbiAgICAgIH1cblxuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGpzb24gcGF5bG9hZCBjb25mb3JtcyB0byB0aGUgc3BlY1xuICAgICAgY2hlY2tQYXJhbXMoc3BlYy5wYXlsb2FkUGFyYW1zLCBqc29uT2JqLCBjdXJyZW50UHJvdG9jb2wpO1xuXG4gICAgICAvLyB0dXJuIHRoZSBjb21tYW5kIGFuZCBqc29uIHBheWxvYWQgaW50byBhbiBhcmd1bWVudCBsaXN0IGZvclxuICAgICAgLy8gdGhlIGRyaXZlciBtZXRob2RzXG4gICAgICBsZXQgYXJncyA9IG1ha2VBcmdzKHJlcS5wYXJhbXMsIGpzb25PYmosIHNwZWMucGF5bG9hZFBhcmFtcyB8fCB7fSwgY3VycmVudFByb3RvY29sKTtcbiAgICAgIGxldCBkcml2ZXJSZXM7XG4gICAgICAvLyB2YWxpZGF0ZSBjb21tYW5kIGFyZ3MgYWNjb3JkaW5nIHRvIE1KU09OV1BcbiAgICAgIGlmICh2YWxpZGF0b3JzW3NwZWMuY29tbWFuZF0pIHtcbiAgICAgICAgdmFsaWRhdG9yc1tzcGVjLmNvbW1hbmRdKC4uLmFyZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBydW4gdGhlIGRyaXZlciBjb21tYW5kIHdyYXBwZWQgaW5zaWRlIHRoZSBhcmd1bWVudCB2YWxpZGF0b3JzXG4gICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkuZGVidWcoYENhbGxpbmcgYCArXG4gICAgICAgIGAke2RyaXZlci5jb25zdHJ1Y3Rvci5uYW1lfS4ke3NwZWMuY29tbWFuZH0oKSB3aXRoIGFyZ3M6IGAgK1xuICAgICAgICBfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGFyZ3MpLCB7bGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RIfSkpO1xuXG4gICAgICBpZiAoZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSkge1xuICAgICAgICAvLyBUT0RPIGZvciBub3cgd2UgYWRkIHRoaXMgaW5mb3JtYXRpb24gb24gdGhlIGFyZ3MgbGlzdCwgYnV0IHRoYXQncyBtaXhpbmcgcHVycG9zZXMgaGVyZS5cbiAgICAgICAgLy8gV2UgcmVhbGx5IHNob3VsZCBhZGQgYW5vdGhlciAnb3B0aW9ucycgcGFyYW1ldGVyIHRvICdleGVjdXRlQ29tbWFuZCcsIGJ1dCB0aGlzIHdvdWxkIGJlXG4gICAgICAgIC8vIGEgYnJlYWtpbmcgY2hhbmdlIGZvciBhbGwgZHJpdmVycyBzbyB3b3VsZCBuZWVkIHRvIGJlIGhhbmRsZWQgY2FyZWZ1bGx5LlxuICAgICAgICBhcmdzLnB1c2goe3JlcUZvclByb3h5OiByZXF9KTtcbiAgICAgIH1cblxuICAgICAgZHJpdmVyUmVzID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVDb21tYW5kKHNwZWMuY29tbWFuZCwgLi4uYXJncyk7XG5cbiAgICAgIC8vIEdldCB0aGUgcHJvdG9jb2wgYWZ0ZXIgZXhlY3V0ZUNvbW1hbmRcbiAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKSB8fCBjdXJyZW50UHJvdG9jb2w7XG5cbiAgICAgIC8vIElmIGBleGVjdXRlQ29tbWFuZGAgd2FzIG92ZXJyaWRkZW4gYW5kIHRoZSBtZXRob2QgcmV0dXJucyBhbiBvYmplY3RcbiAgICAgIC8vIHdpdGggYSBwcm90b2NvbCBhbmQgdmFsdWUvZXJyb3IgcHJvcGVydHksIHJlLWFzc2lnbiB0aGUgcHJvdG9jb2xcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZHJpdmVyUmVzKSAmJiBfLmhhcyhkcml2ZXJSZXMsICdwcm90b2NvbCcpKSB7XG4gICAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGRyaXZlclJlcy5wcm90b2NvbCB8fCBjdXJyZW50UHJvdG9jb2w7XG4gICAgICAgIGlmIChkcml2ZXJSZXMuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBkcml2ZXJSZXMuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZHJpdmVyUmVzID0gZHJpdmVyUmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyB1bnBhY2sgY3JlYXRlU2Vzc2lvbiByZXNwb25zZVxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICBuZXdTZXNzaW9uSWQgPSBkcml2ZXJSZXNbMF07XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIG5ld1Nlc3Npb25JZClcbiAgICAgICAgICAuZGVidWcoYENhY2hlZCB0aGUgcHJvdG9jb2wgdmFsdWUgJyR7Y3VycmVudFByb3RvY29sfScgZm9yIHRoZSBuZXcgc2Vzc2lvbiAke25ld1Nlc3Npb25JZH1gKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgICAgICBkcml2ZXJSZXMgPSBkcml2ZXJSZXNbMV07XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgICAgZHJpdmVyUmVzID0ge1xuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiBkcml2ZXJSZXNbMV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkcml2ZXJSZXMgPSBmb3JtYXRSZXNwb25zZVZhbHVlKGRyaXZlclJlcyk7XG5cbiAgICAgIC8vIGRlbGV0ZSBzaG91bGQgbm90IHJldHVybiBhbnl0aGluZyBldmVuIGlmIHN1Y2Nlc3NmdWxcbiAgICAgIGlmIChzcGVjLmNvbW1hbmQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpXG4gICAgICAgICAgLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZTogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGRyaXZlclJlcyksIHtsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEh9KX1gKTtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmRlYnVnKCdCdXQgZGVsZXRpbmcgc2Vzc2lvbiwgc28gbm90IHJldHVybmluZycpO1xuICAgICAgICBkcml2ZXJSZXMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgc3RhdHVzIGlzIG5vdCAwLCAgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGZvciBzdGF0dXMgY29kZS5cbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKGRyaXZlclJlcykpIHtcbiAgICAgICAgaWYgKHV0aWwuaGFzVmFsdWUoZHJpdmVyUmVzLnN0YXR1cykgJiYgIWlzTmFOKGRyaXZlclJlcy5zdGF0dXMpICYmIHBhcnNlSW50KGRyaXZlclJlcy5zdGF0dXMsIDEwKSAhPT0gMCkge1xuICAgICAgICAgIHRocm93IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGRyaXZlclJlcy5zdGF0dXMsIGRyaXZlclJlcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGRyaXZlclJlcy52YWx1ZSkgJiYgZHJpdmVyUmVzLnZhbHVlLmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JGcm9tVzNDSnNvbkNvZGUoZHJpdmVyUmVzLnZhbHVlLmVycm9yLCBkcml2ZXJSZXMudmFsdWUubWVzc2FnZSwgZHJpdmVyUmVzLnZhbHVlLnN0YWNrdHJhY2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGh0dHBSZXNCb2R5LnZhbHVlID0gZHJpdmVyUmVzO1xuICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbmV3U2Vzc2lvbklkKS5kZWJ1ZyhgUmVzcG9uZGluZyBgICtcbiAgICAgICAgYHRvIGNsaWVudCB3aXRoIGRyaXZlci4ke3NwZWMuY29tbWFuZH0oKSByZXN1bHQ6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShkcml2ZXJSZXMpLCB7bGVuZ3RoOiBNQVhfTE9HX0JPRFlfTEVOR1RIfSl9YCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBpZiBhbnl0aGluZyBnb2VzIHdyb25nLCBmaWd1cmUgb3V0IHdoYXQgb3VyIHJlc3BvbnNlIHNob3VsZCBiZVxuICAgICAgLy8gYmFzZWQgb24gdGhlIHR5cGUgb2YgZXJyb3IgdGhhdCB3ZSBlbmNvdW50ZXJlZFxuICAgICAgbGV0IGFjdHVhbEVyciA9IGVycjtcblxuICAgICAgY3VycmVudFByb3RvY29sID0gY3VycmVudFByb3RvY29sIHx8IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZCk7XG5cbiAgICAgIGxldCBlcnJNc2cgPSBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2s7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoZXJyTXNnLCBlcnIubWVzc2FnZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIG1lc3NhZ2UgaGFzIG1vcmUgaW5mb3JtYXRpb24sIGFkZCBpdC4gYnV0IG9mdGVuIHRoZSBtZXNzYWdlXG4gICAgICAgIC8vIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdGFjayB0cmFjZVxuICAgICAgICBlcnJNc2cgPSBgJHtlcnIubWVzc2FnZX0ke2Vyck1zZyA/ICgnXFxuJyArIGVyck1zZykgOiAnJ31gO1xuICAgICAgfVxuICAgICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgICBhY3R1YWxFcnIgPSBlcnIuZ2V0QWN0dWFsRXJyb3IoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG5ld1Nlc3Npb25JZClcbiAgICAgICAgICAuZGVidWcoYEVuY291bnRlcmVkIGludGVybmFsIGVycm9yIHJ1bm5pbmcgY29tbWFuZDogJHtlcnJNc2d9YCk7XG4gICAgICB9XG5cbiAgICAgIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV0gPSBnZXRSZXNwb25zZUZvclczQ0Vycm9yKGFjdHVhbEVycik7XG4gICAgfVxuXG4gICAgLy8gZGVjb2RlIHRoZSByZXNwb25zZSwgd2hpY2ggaXMgZWl0aGVyIGEgc3RyaW5nIG9yIGpzb25cbiAgICBpZiAoXy5pc1N0cmluZyhodHRwUmVzQm9keSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cykuc2VuZChodHRwUmVzQm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdTZXNzaW9uSWQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQykge1xuICAgICAgICAgIGh0dHBSZXNCb2R5LnZhbHVlLnNlc3Npb25JZCA9IG5ld1Nlc3Npb25JZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBodHRwUmVzQm9keS5zZXNzaW9uSWQgPSBuZXdTZXNzaW9uSWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGh0dHBSZXNCb2R5LnNlc3Npb25JZCA9IHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICAvLyBEb24ndCBpbmNsdWRlIHNlc3Npb25JZCBpbiBXM0MgcmVzcG9uc2VzXG4gICAgICBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgIGRlbGV0ZSBodHRwUmVzQm9keS5zZXNzaW9uSWQ7XG4gICAgICB9XG5cbiAgICAgIGh0dHBSZXNCb2R5ID0gZm9ybWF0U3RhdHVzKGh0dHBSZXNCb2R5KTtcbiAgICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cykuanNvbihodHRwUmVzQm9keSk7XG4gICAgfVxuICB9O1xuICAvLyBhZGQgdGhlIG1ldGhvZCB0byB0aGUgYXBwXG4gIGFwcFttZXRob2QudG9Mb3dlckNhc2UoKV0ocGF0aCwgKHJlcSwgcmVzKSA9PiB7XG4gICAgQi5yZXNvbHZlKGFzeW5jSGFuZGxlcihyZXEsIHJlcykpLmRvbmUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRyaXZlclNob3VsZERvSndwUHJveHkgKGRyaXZlciwgcmVxLCBjb21tYW5kKSB7XG4gIC8vIGRyaXZlcnMgbmVlZCB0byBleHBsaWNpdGx5IHNheSB3aGVuIHRoZSBwcm94eSBpcyBhY3RpdmVcbiAgaWYgKCFkcml2ZXIucHJveHlBY3RpdmUocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gd2Ugc2hvdWxkIG5ldmVyIHByb3h5IGRlbGV0ZVNlc3Npb24gYmVjYXVzZSB3ZSBuZWVkIHRvIGdpdmUgdGhlIGNvbnRhaW5pbmdcbiAgLy8gZHJpdmVyIGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIGl0c2VsZiB1cFxuICBpZiAoY29tbWFuZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHZhbGlkYXRlIGF2b2lkYW5jZSBzY2hlbWEsIGFuZCBzYXkgd2Ugc2hvdWxkbid0IHByb3h5IGlmIGFueXRoaW5nIGluIHRoZVxuICAvLyBhdm9pZCBsaXN0IG1hdGNoZXMgb3VyIHJlcVxuICBpZiAoZHJpdmVyLnByb3h5Um91dGVJc0F2b2lkZWQocmVxLnBhcmFtcy5zZXNzaW9uSWQsIHJlcS5tZXRob2QsIHJlcS5vcmlnaW5hbFVybCwgcmVxLmJvZHkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRvSndwUHJveHkgKGRyaXZlciwgcmVxLCByZXMpIHtcbiAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpXG4gICAgLmluZm8oJ0RyaXZlciBwcm94eSBhY3RpdmUsIHBhc3NpbmcgcmVxdWVzdCBvbiB2aWEgSFRUUCBwcm94eScpO1xuXG4gIC8vIGNoZWNrIHRoYXQgdGhlIGlubmVyIGRyaXZlciBoYXMgYSBwcm94eSBmdW5jdGlvblxuICBpZiAoIWRyaXZlci5jYW5Qcm94eShyZXEucGFyYW1zLnNlc3Npb25JZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBwcm94eSB0byBhIHNlcnZlciBidXQgdGhlIGRyaXZlciBpcyB1bmFibGUgdG8gcHJveHknKTtcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IGRyaXZlci5leGVjdXRlQ29tbWFuZCgncHJveHlSZXFSZXMnLCByZXEsIHJlcywgcmVxLnBhcmFtcy5zZXNzaW9uSWQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuUHJveHlSZXF1ZXN0RXJyb3IpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHByb3h5LiBQcm94eSBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuXG5leHBvcnQge1xuICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIGlzU2Vzc2lvbkNvbW1hbmQsXG4gIGRyaXZlclNob3VsZERvSndwUHJveHksIGRldGVybWluZVByb3RvY29sLCBDUkVBVEVfU0VTU0lPTl9DT01NQU5ELFxuICBERUxFVEVfU0VTU0lPTl9DT01NQU5ELCBHRVRfU1RBVFVTX0NPTU1BTkQsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxzQkFBc0IsR0FBRyxlQUEvQjs7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxlQUEvQjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxXQUEzQjs7O0FBRUEsU0FBU0MsaUJBQVQsQ0FBNEJDLGlCQUE1QixFQUErQztFQUM3QyxPQUFPQyxnQkFBRUMsSUFBRixDQUFPRixpQkFBUCxFQUEwQkcsdUJBQTFCLElBQXVDQyxx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
394
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDUkVBVEVfU0VTU0lPTl9DT01NQU5EIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsIkdFVF9TVEFUVVNfQ09NTUFORCIsImRldGVybWluZVByb3RvY29sIiwiY3JlYXRlU2Vzc2lvbkFyZ3MiLCJfIiwic29tZSIsImlzVzNjQ2FwcyIsIlBST1RPQ09MUyIsIlczQyIsIk1KU09OV1AiLCJleHRyYWN0UHJvdG9jb2wiLCJkcml2ZXIiLCJzZXNzaW9uSWQiLCJkc3REcml2ZXIiLCJpc0Z1bmN0aW9uIiwiZHJpdmVyRm9yU2Vzc2lvbiIsInByb3RvY29sIiwiaXNTZXNzaW9uQ29tbWFuZCIsImNvbW1hbmQiLCJpbmNsdWRlcyIsIk5PX1NFU1NJT05fSURfQ09NTUFORFMiLCJnZXRMb2dnZXIiLCJsb2ciLCJpbmZvIiwibG9nUHJlZml4IiwiY29uc3RydWN0b3IiLCJuYW1lIiwibm9kZSIsImdldE9iamVjdElkIiwic3Vic3RyaW5nIiwibG9nZ2VyIiwid3JhcFBhcmFtcyIsInBhcmFtU2V0cyIsImpzb25PYmoiLCJyZXMiLCJpc0FycmF5IiwiaXNPYmplY3QiLCJ3cmFwIiwidW53cmFwUGFyYW1zIiwidW53cmFwIiwiY2hlY2tQYXJhbXMiLCJyZXF1aXJlZFBhcmFtcyIsIm9wdGlvbmFsUGFyYW1zIiwicmVjZWl2ZWRQYXJhbXMiLCJrZXlzIiwicmVxdWlyZWQiLCJmaXJzdCIsIm9wdGlvbmFsIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiZXJyb3JzIiwiQmFkUGFyYW1ldGVyc0Vycm9yIiwibGVuZ3RoIiwiaW5kZXhPZiIsInB1c2giLCJwYXJhbXMiLCJkaWZmZXJlbmNlIiwibWFrZUFyZ3MiLCJyZXF1ZXN0UGFyYW1zIiwicGF5bG9hZFBhcmFtcyIsInVybFBhcmFtcyIsInJldmVyc2UiLCJ3aXRob3V0IiwiYXJncyIsImZsYXR0ZW4iLCJtYXAiLCJwIiwiY29uY2F0IiwidSIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlc3Npb25FeGlzdHMiLCJFcnJvciIsImV4ZWN1dGVDb21tYW5kIiwiZXhlY3V0ZSIsImFkZFJvdXRlcyIsImFwcCIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJleHRyYU1ldGhvZE1hcCIsImFsbE1ldGhvZHMiLCJNRVRIT0RfTUFQIiwicGF0aCIsIm1ldGhvZHMiLCJ0b1BhaXJzIiwibWV0aG9kIiwic3BlYyIsImJ1aWxkSGFuZGxlciIsImlzU2Vzc0NtZCIsImFzeW5jSGFuZGxlciIsInJlcSIsImJvZHkiLCJodHRwUmVzQm9keSIsImh0dHBTdGF0dXMiLCJuZXdTZXNzaW9uSWQiLCJjdXJyZW50UHJvdG9jb2wiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImRpZFBsdWdpbk92ZXJyaWRlUHJveHkiLCJuZXZlclByb3h5IiwiZHJpdmVyU2hvdWxkRG9Kd3BQcm94eSIsInBsdWdpbnNUb0hhbmRsZUNtZCIsImRvSndwUHJveHkiLCJkZWJ1ZyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJkcml2ZXJSZXMiLCJ2YWxpZGF0b3JzIiwidHJ1bmNhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiTUFYX0xPR19CT0RZX0xFTkdUSCIsInJlcUZvclByb3h5IiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImVycm9yIiwidmFsdWUiLCJjYXBhYmlsaXRpZXMiLCJmb3JtYXRSZXNwb25zZVZhbHVlIiwidXRpbCIsImhhc1ZhbHVlIiwic3RhdHVzIiwiaXNOYU4iLCJwYXJzZUludCIsImVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwiZXJyIiwiYWN0dWFsRXJyIiwiZXJyTXNnIiwic3RhY2siLCJpc0Vycm9yVHlwZSIsIlByb3h5UmVxdWVzdEVycm9yIiwiZ2V0QWN0dWFsRXJyb3IiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwiaXNTdHJpbmciLCJzZW5kIiwiZm9ybWF0U3RhdHVzIiwianNvbiIsInRvTG93ZXJDYXNlIiwiQiIsInJlc29sdmUiLCJkb25lIiwicHJveHlBY3RpdmUiLCJwcm94eVJvdXRlSXNBdm9pZGVkIiwib3JpZ2luYWxVcmwiLCJjYW5Qcm94eSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9wcm90b2NvbC9wcm90b2NvbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHt1dGlsLCBsb2dnZXIsIG5vZGV9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge3ZhbGlkYXRvcnN9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQge1xuICBlcnJvcnMsXG4gIGlzRXJyb3JUeXBlLFxuICBnZXRSZXNwb25zZUZvclczQ0Vycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSxcbiAgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG59IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7TUVUSE9EX01BUCwgTk9fU0VTU0lPTl9JRF9DT01NQU5EU30gZnJvbSAnLi9yb3V0ZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtmb3JtYXRSZXNwb25zZVZhbHVlLCBmb3JtYXRTdGF0dXN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge01BWF9MT0dfQk9EWV9MRU5HVEgsIFBST1RPQ09MUywgREVGQVVMVF9CQVNFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2lzVzNjQ2Fwc30gZnJvbSAnLi4vaGVscGVycy9jYXBhYmlsaXRpZXMnO1xuXG5jb25zdCBDUkVBVEVfU0VTU0lPTl9DT01NQU5EID0gJ2NyZWF0ZVNlc3Npb24nO1xuY29uc3QgREVMRVRFX1NFU1NJT05fQ09NTUFORCA9ICdkZWxldGVTZXNzaW9uJztcbmNvbnN0IEdFVF9TVEFUVVNfQ09NTUFORCA9ICdnZXRTdGF0dXMnO1xuXG5mdW5jdGlvbiBkZXRlcm1pbmVQcm90b2NvbChjcmVhdGVTZXNzaW9uQXJncykge1xuICByZXR1cm4gXy5zb21lKGNyZWF0ZVNlc3Npb25BcmdzLCBpc1czY0NhcHMpID8gUFJPVE9DT0xTLlczQyA6IFBST1RPQ09MUy5NSlNPTldQO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIGNvbnN0IGRzdERyaXZlciA9IF8uaXNGdW5jdGlvbihkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbilcbiAgICA/IGRyaXZlci5kcml2ZXJGb3JTZXNzaW9uKHNlc3Npb25JZClcbiAgICA6IGRyaXZlcjtcbiAgaWYgKGRzdERyaXZlciA9PT0gZHJpdmVyKSB7XG4gICAgLy8gU2hvcnRjaXJjdWl0IGlmIHRoZSBkcml2ZXIgaW5zdGFuY2UgaXMgbm90IGFuIHVtYnJlbGxhIGRyaXZlclxuICAgIC8vIG9yIGl0IGlzIEZha2UgZHJpdmVyIGluc3RhbmNlLCB3aGVyZSBgZHJpdmVyLmRyaXZlckZvclNlc3Npb25gXG4gICAgLy8gYWx3YXlzIHJldHVybnMgc2VsZiBpbnN0YW5jZVxuICAgIHJldHVybiBkcml2ZXIucHJvdG9jb2w7XG4gIH1cblxuICAvLyBFeHRyYWN0IHRoZSBwcm90b2NvbCBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZiB0aGUgZ2l2ZW4gZHJpdmVyIGlzIHRoZSB1bWJyZWxsYSBvbmVcbiAgcmV0dXJuIGRzdERyaXZlcj8ucHJvdG9jb2wgPz8gUFJPVE9DT0xTLlczQztcbn1cblxuZnVuY3Rpb24gaXNTZXNzaW9uQ29tbWFuZChjb21tYW5kKSB7XG4gIHJldHVybiAhXy5pbmNsdWRlcyhOT19TRVNTSU9OX0lEX0NPTU1BTkRTLCBjb21tYW5kKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlcm5hbERyaXZlcn0gZHJpdmVyXG4gKiBAcGFyYW0ge3N0cmluZz99IFtzZXNzaW9uSWRdXG4gKiBAcmV0dXJucyB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtTG9nZ2VyfVxuICovXG5mdW5jdGlvbiBnZXRMb2dnZXIoZHJpdmVyLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIGNvbnN0IGRzdERyaXZlciA9XG4gICAgc2Vzc2lvbklkICYmIF8uaXNGdW5jdGlvbihkcml2ZXIuZHJpdmVyRm9yU2Vzc2lvbilcbiAgICAgID8gZHJpdmVyLmRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKSA/PyBkcml2ZXJcbiAgICAgIDogZHJpdmVyO1xuICBpZiAoXy5pc0Z1bmN0aW9uKGRzdERyaXZlci5sb2c/LmluZm8pKSB7XG4gICAgcmV0dXJuIGRzdERyaXZlci5sb2c7XG4gIH1cblxuICBsZXQgbG9nUHJlZml4ID0gZHN0RHJpdmVyLmNvbnN0cnVjdG9yXG4gICAgPyBgJHtkc3REcml2ZXIuY29uc3RydWN0b3IubmFtZX1AJHtub2RlLmdldE9iamVjdElkKGRzdERyaXZlcikuc3Vic3RyaW5nKDAsIDgpfWBcbiAgICA6ICdBcHBpdW1Ecml2ZXInO1xuICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgbG9nUHJlZml4ICs9IGAgKCR7c2Vzc2lvbklkLnN1YnN0cmluZygwLCA4KX0pYDtcbiAgfVxuICByZXR1cm4gbG9nZ2VyLmdldExvZ2dlcihsb2dQcmVmaXgpO1xufVxuXG5mdW5jdGlvbiB3cmFwUGFyYW1zKHBhcmFtU2V0cywganNvbk9iaikge1xuICAvKiBUaGVyZSBhcmUgY29tbWFuZHMgbGlrZSBwZXJmb3JtVG91Y2ggd2hpY2ggdGFrZSBhIHNpbmdsZSBwYXJhbWV0ZXIgKHByaW1pdGl2ZSB0eXBlIG9yIGFycmF5KS5cbiAgICogU29tZSBkcml2ZXJzIGNob29zZSB0byBwYXNzIHRoaXMgcGFyYW1ldGVyIGFzIGEgdmFsdWUgKGVnLiBbYWN0aW9uMSwgYWN0aW9uMi4uLl0pIHdoaWxlIG90aGVycyB0b1xuICAgKiB3cmFwIGl0IHdpdGhpbiBhbiBvYmplY3QoZWcnIHtnZXN0dXJlOiAgW2FjdGlvbjEsIGFjdGlvbjIuLi5dfSksIHdoaWNoIG1ha2VzIGl0IGhhcmQgdG8gdmFsaWRhdGUuXG4gICAqIFRoZSB3cmFwIG9wdGlvbiBpbiB0aGUgc3BlYyBlbmZvcmNlIHdyYXBwaW5nIGJlZm9yZSB2YWxpZGF0aW9uLCBzbyB0aGF0IGFsbCBwYXJhbXMgYXJlIHdyYXBwZWQgYXRcbiAgICogdGhlIHRpbWUgdGhleSBhcmUgdmFsaWRhdGVkIGFuZCBsYXRlciBwYXNzZWQgdG8gdGhlIGNvbW1hbmRzLlxuICAgKi9cbiAgbGV0IHJlcyA9IGpzb25PYmo7XG4gIGlmIChfLmlzQXJyYXkoanNvbk9iaikgfHwgIV8uaXNPYmplY3QoanNvbk9iaikpIHtcbiAgICByZXMgPSB7fTtcbiAgICByZXNbcGFyYW1TZXRzLndyYXBdID0ganNvbk9iajtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiB1bndyYXBQYXJhbXMocGFyYW1TZXRzLCBqc29uT2JqKSB7XG4gIC8qIFRoZXJlIGFyZSBjb21tYW5kcyBsaWtlIHNldE5ldHdvcmtDb25uZWN0aW9uIHdoaWNoIHNlbmQgcGFyYW1ldGVycyB3cmFwcGVkIGluc2lkZSBhIGtleSBzdWNoIGFzXG4gICAqIFwicGFyYW1ldGVyc1wiLiBUaGlzIGZ1bmN0aW9uIHVud3JhcHMgdGhlbSAoZWcuIHtcInBhcmFtZXRlcnNcIjoge1widHlwZVwiOiAxfX0gYmVjb21lcyB7XCJ0eXBlXCI6IDF9KS5cbiAgICovXG4gIGxldCByZXMgPSBqc29uT2JqO1xuICBpZiAoXy5pc09iamVjdChqc29uT2JqKSkge1xuICAgIC8vIHNvbWUgY2xpZW50cywgbGlrZSBydWJ5LCBkb24ndCB3cmFwXG4gICAgaWYgKGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF0pIHtcbiAgICAgIHJlcyA9IGpzb25PYmpbcGFyYW1TZXRzLnVud3JhcF07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyYW1zKHBhcmFtU2V0cywganNvbk9iaiwgcHJvdG9jb2wpIHtcbiAgbGV0IHJlcXVpcmVkUGFyYW1zID0gW107XG4gIGxldCBvcHRpb25hbFBhcmFtcyA9IFtdO1xuICBsZXQgcmVjZWl2ZWRQYXJhbXMgPSBfLmtleXMoanNvbk9iaik7XG5cbiAgaWYgKHBhcmFtU2V0cykge1xuICAgIGlmIChwYXJhbVNldHMucmVxdWlyZWQpIHtcbiAgICAgIC8vIHdlIG1pZ2h0IGhhdmUgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyxcbiAgICAgIC8vIG9yIGFuIGFycmF5IG9mIGFycmF5cyBvZiBwYXJhbWV0ZXJzLCBzbyBzdGFuZGFyZGl6ZVxuICAgICAgaWYgKCFfLmlzQXJyYXkoXy5maXJzdChwYXJhbVNldHMucmVxdWlyZWQpKSkge1xuICAgICAgICByZXF1aXJlZFBhcmFtcyA9IFtwYXJhbVNldHMucmVxdWlyZWRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWlyZWRQYXJhbXMgPSBwYXJhbVNldHMucmVxdWlyZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGp1c3QgYW4gYXJyYXlcbiAgICBpZiAocGFyYW1TZXRzLm9wdGlvbmFsKSB7XG4gICAgICBvcHRpb25hbFBhcmFtcyA9IHBhcmFtU2V0cy5vcHRpb25hbDtcbiAgICB9XG5cbiAgICAvLyBJZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCBhcyB0aGUgJ3ZhbGlkYXRlJyBrZXksIGl0IHdpbGwgaGVyZSBiZSBjYWxsZWQgd2l0aFxuICAgIC8vIGpzb25PYmogYXMgdGhlIHBhcmFtLiBJZiBpdCByZXR1cm5zIHNvbWV0aGluZyBmYWxzeSwgdmVyaWZpY2F0aW9uIHdpbGwgYmVcbiAgICAvLyBjb25zaWRlcmVkIHRvIGhhdmUgcGFzc2VkLiBJZiBpdCByZXR1cm5zIHNvbWV0aGluZyBlbHNlLCB0aGF0IHdpbGwgYmUgdGhlXG4gICAgLy8gYXJndW1lbnQgdG8gYW4gZXJyb3Igd2hpY2ggaXMgdGhyb3duIHRvIHRoZSB1c2VyXG4gICAgaWYgKHBhcmFtU2V0cy52YWxpZGF0ZSkge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBwYXJhbVNldHMudmFsaWRhdGUoanNvbk9iaiwgcHJvdG9jb2wpO1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5CYWRQYXJhbWV0ZXJzRXJyb3IobWVzc2FnZSwganNvbk9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgd2UgaGF2ZSBubyByZXF1aXJlZCBwYXJhbWV0ZXJzLCBhbGwgaXMgd2VsbFxuICBpZiAocmVxdWlyZWRQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc29tZSBjbGllbnRzIHBhc3MgaW4gdGhlIHNlc3Npb24gaWQgaW4gdGhlIHBhcmFtc1xuICBpZiAob3B0aW9uYWxQYXJhbXMuaW5kZXhPZignc2Vzc2lvbklkJykgPT09IC0xKSB7XG4gICAgb3B0aW9uYWxQYXJhbXMucHVzaCgnc2Vzc2lvbklkJyk7XG4gIH1cblxuICAvLyBzb21lIGNsaWVudHMgcGFzcyBpbiBhbiBlbGVtZW50IGlkIGluIHRoZSBwYXJhbXNcbiAgaWYgKG9wdGlvbmFsUGFyYW1zLmluZGV4T2YoJ2lkJykgPT09IC0xKSB7XG4gICAgb3B0aW9uYWxQYXJhbXMucHVzaCgnaWQnKTtcbiAgfVxuXG4gIC8vIGdvIHRocm91Z2ggdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgYW5kIGNoZWNrIGFnYWluc3Qgb3VyIGFyZ3VtZW50c1xuICBmb3IgKGxldCBwYXJhbXMgb2YgcmVxdWlyZWRQYXJhbXMpIHtcbiAgICBpZiAoXG4gICAgICBfLmRpZmZlcmVuY2UocmVjZWl2ZWRQYXJhbXMsIHBhcmFtcywgb3B0aW9uYWxQYXJhbXMpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgXy5kaWZmZXJlbmNlKHBhcmFtcywgcmVjZWl2ZWRQYXJhbXMpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgLy8gd2UgaGF2ZSBhIHNldCBvZiBwYXJhbWV0ZXJzIHRoYXQgaXMgY29ycmVjdFxuICAgICAgLy8gc28gc2hvcnQtY2lyY3VpdFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcihwYXJhbVNldHMsIHJlY2VpdmVkUGFyYW1zKTtcbn1cblxuLypcbiAqIFRoaXMgbWV0aG9kIHRha2VzIDMgcGllY2VzIG9mIGRhdGE6IHJlcXVlc3QgcGFyYW1ldGVycyAoJ3JlcXVlc3RQYXJhbXMnKSxcbiAqIGEgcmVxdWVzdCBKU09OIGJvZHkgKCdqc29uT2JqJyksIGFuZCAncGF5bG9hZFBhcmFtcycsIHdoaWNoIGlzIHRoZSBzZWN0aW9uXG4gKiBmcm9tIHRoZSByb3V0ZSBkZWZpbml0aW9uIGZvciBhIHBhcnRpY3VsYXIgZW5kcG9pbnQgd2hpY2ggaGFzIGluc3RydWN0aW9uc1xuICogb24gaGFuZGxpbmcgcGFyYW1ldGVycy4gVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBhcmd1bWVudHMgd2hpY2ggd2lsbFxuICogYmUgYXBwbGllZCB0byBhIGNvbW1hbmQuXG4gKi9cbmZ1bmN0aW9uIG1ha2VBcmdzKHJlcXVlc3RQYXJhbXMsIGpzb25PYmosIHBheWxvYWRQYXJhbXMsIHByb3RvY29sKSB7XG4gIC8vIFdlIHdhbnQgdG8gcGFzcyB0aGUgXCJ1cmxcIiBwYXJhbWV0ZXJzIHRvIHRoZSBjb21tYW5kcyBpbiByZXZlcnNlIG9yZGVyXG4gIC8vIHNpbmNlIHRoZSBjb21tYW5kIHdpbGwgc29tZXRpbWVzIHdhbnQgdG8gaWdub3JlLCBzYXksIHRoZSBzZXNzaW9uSWQuXG4gIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgcHV0dGluZyBzZXNzaW9uSWQgbGFzdCwgd2hpY2ggbWVhbnMgaW4gSlMgd2UgY2FuXG4gIC8vIG9taXQgaXQgZnJvbSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIGlmIHdlJ3JlIG5vdCBnb2luZyB0byB1c2UgaXQuXG4gIGxldCB1cmxQYXJhbXMgPSBfLmtleXMocmVxdWVzdFBhcmFtcykucmV2ZXJzZSgpO1xuXG4gIC8vIEluIHRoZSBzaW1wbGUgY2FzZSwgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGEgYmFzaWMgYXJyYXkgaW5cbiAgLy8gcGF5bG9hZFBhcmFtcy5yZXF1aXJlZCwgc28gc3RhcnQgdGhlcmUuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVyZSBhcmVcbiAgLy8gbXVsdGlwbGUgb3B0aW9uYWwgc2V0cyBvZiByZXF1aXJlZCBwYXJhbXMsIHRob3VnaCwgc28gaGFuZGxlIHRoYXQgY2FzZVxuICAvLyB0b28uXG4gIGxldCByZXF1aXJlZFBhcmFtcyA9IHBheWxvYWRQYXJhbXMucmVxdWlyZWQ7XG4gIGlmIChfLmlzQXJyYXkoXy5maXJzdChwYXlsb2FkUGFyYW1zLnJlcXVpcmVkKSkpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgb3B0aW9uYWwgc2V0cyBvZiByZXF1aXJlZCBwYXJhbXMsIHRoZW4gd2Ugd2lsbCBoYXZlIGFuXG4gICAgLy8gYXJyYXkgb2YgYXJyYXlzIGluIHBheWxvYWRQYXJhbXMucmVxdWlyZWQsIHNvIGxvb3AgdGhyb3VnaCBlYWNoIHNldCBhbmRcbiAgICAvLyBwaWNrIHRoZSBvbmUgdGhhdCBtYXRjaGVzIHdoaWNoIEpTT04gcGFyYW1zIHdlcmUgYWN0dWFsbHkgc2VudC4gV2UndmVcbiAgICAvLyBhbHJlYWR5IGJlZW4gdGhyb3VnaCB2YWxpZGF0aW9uIHNvIHdlJ3JlIGd1YXJhbnRlZWQgdG8gZmluZCBhIG1hdGNoLlxuICAgIGxldCBrZXlzID0gXy5rZXlzKGpzb25PYmopO1xuICAgIGZvciAobGV0IHBhcmFtcyBvZiBwYXlsb2FkUGFyYW1zLnJlcXVpcmVkKSB7XG4gICAgICBpZiAoXy53aXRob3V0KHBhcmFtcywgLi4ua2V5cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW1zID0gcGFyYW1zO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBOb3cgd2UgY29uc3RydWN0IG91ciBsaXN0IG9mIGFyZ3VtZW50cyB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29tbWFuZFxuICBsZXQgYXJncztcbiAgaWYgKF8uaXNGdW5jdGlvbihwYXlsb2FkUGFyYW1zLm1ha2VBcmdzKSkge1xuICAgIC8vIEluIHRoZSByb3V0ZSBzcGVjLCBhIHBhcnRpY3VsYXIgcm91dGUgbWlnaHQgZGVmaW5lIGEgJ21ha2VBcmdzJyBmdW5jdGlvblxuICAgIC8vIGlmIGl0IHdhbnRzIGZ1bGwgY29udHJvbCBvdmVyIGhvdyB0byB0dXJuIEpTT04gcGFyYW1ldGVycyBpbnRvIGNvbW1hbmRcbiAgICAvLyBhcmd1bWVudHMuIFNvIHdlIHBhc3MgaXQgdGhlIEpTT04gcGFyYW1ldGVycyBhbmQgaXQgcmV0dXJucyBhbiBhcnJheVxuICAgIC8vIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgaGFuZGxpbmcgY29tbWFuZC4gRm9yIGV4YW1wbGUgaWYgaXQgcmV0dXJuc1xuICAgIC8vIFsxLCAyLCAzXSwgd2Ugd2lsbCBjYWxsIGBjb21tYW5kKDEsIDIsIDMsIC4uLilgICh1cmwgcGFyYW1zIGFyZSBzZXBhcmF0ZVxuICAgIC8vIGZyb20gSlNPTiBwYXJhbXMgYW5kIGdldCBjb25jYXRlbmF0ZWQgYmVsb3cpLlxuICAgIGFyZ3MgPSBwYXlsb2FkUGFyYW1zLm1ha2VBcmdzKGpzb25PYmosIHByb3RvY29sKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIGNvbGxlY3QgYWxsIHRoZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgcGFyYW1zIGFuZCBmbGF0dGVuIHRoZW1cbiAgICAvLyBpbnRvIGFuIGFyZ3VtZW50IGFycmF5XG4gICAgYXJncyA9IF8uZmxhdHRlbihyZXF1aXJlZFBhcmFtcykubWFwKChwKSA9PiBqc29uT2JqW3BdKTtcbiAgICBpZiAocGF5bG9hZFBhcmFtcy5vcHRpb25hbCkge1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KF8uZmxhdHRlbihwYXlsb2FkUGFyYW1zLm9wdGlvbmFsKS5tYXAoKHApID0+IGpzb25PYmpbcF0pKTtcbiAgICB9XG4gIH1cbiAgLy8gRmluYWxseSwgZ2V0IG91ciB1cmwgcGFyYW1zIChzZXNzaW9uIGlkLCBlbGVtZW50IGlkLCBldGMuLi4pIG9uIHRoZSBlbmQgb2ZcbiAgLy8gdGhlIGxpc3RcbiAgYXJncyA9IGFyZ3MuY29uY2F0KHVybFBhcmFtcy5tYXAoKHUpID0+IHJlcXVlc3RQYXJhbXNbdV0pKTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmZ1bmN0aW9uIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbihkcml2ZXIpIHtcbiAgaWYgKCFkcml2ZXIuc2Vzc2lvbkV4aXN0cykge1xuICAgIHRocm93IG5ldyBFcnJvcignRHJpdmVycyBtdXN0IGltcGxlbWVudCBgc2Vzc2lvbkV4aXN0c2AgcHJvcGVydHknKTtcbiAgfVxuXG4gIGlmICghKGRyaXZlci5leGVjdXRlQ29tbWFuZCB8fCBkcml2ZXIuZXhlY3V0ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RyaXZlcnMgbXVzdCBpbXBsZW1lbnQgYGV4ZWN1dGVDb21tYW5kYCBvciBgZXhlY3V0ZWAgbWV0aG9kJyk7XG4gIH1cblxuICAvLyByZXR1cm4gYSBmdW5jdGlvbiB3aGljaCB3aWxsIGFkZCBhbGwgdGhlIHJvdXRlcyB0byB0aGUgZHJpdmVyLiBIZXJlIGV4dHJhTWV0aG9kcyBtaWdodCBiZVxuICAvLyBwYXNzZWQgaW4gYXMgZGVmaW5lZCBieSBBcHBpdW0gcGx1Z2lucywgc28gd2UgbmVlZCB0byBhZGQgdGhvc2UgdG8gdGhlIGRlZmF1bHQgbGlzdFxuICByZXR1cm4gZnVuY3Rpb24gYWRkUm91dGVzKGFwcCwge2Jhc2VQYXRoID0gREVGQVVMVF9CQVNFX1BBVEgsIGV4dHJhTWV0aG9kTWFwID0ge319KSB7XG4gICAgLy8gc3RvcmUgYmFzZVBhdGggb24gdGhlIGRyaXZlciBpbnN0YW5jZSBzbyBpdCBjYW4gdXNlIGl0IGlmIG5lY2Vzc2FyeVxuICAgIC8vIGZvciBleGFtcGxlIGluIGRldGVybWluaW5nIHByb3h5IGF2b2lkYW5jZVxuICAgIGRyaXZlci5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuXG4gICAgY29uc3QgYWxsTWV0aG9kcyA9IHsuLi5NRVRIT0RfTUFQLCAuLi5leHRyYU1ldGhvZE1hcH07XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBtZXRob2RzXSBvZiBfLnRvUGFpcnMoYWxsTWV0aG9kcykpIHtcbiAgICAgIGZvciAoY29uc3QgW21ldGhvZCwgc3BlY10gb2YgXy50b1BhaXJzKG1ldGhvZHMpKSB7XG4gICAgICAgIC8vIHNldCB1cCB0aGUgZXhwcmVzcyByb3V0ZSBoYW5kbGVyXG4gICAgICAgIGJ1aWxkSGFuZGxlcihcbiAgICAgICAgICBhcHAsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGAke2Jhc2VQYXRofSR7cGF0aH1gLFxuICAgICAgICAgIHNwZWMsXG4gICAgICAgICAgZHJpdmVyLFxuICAgICAgICAgIGlzU2Vzc2lvbkNvbW1hbmQoc3BlYy5jb21tYW5kKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRIYW5kbGVyKGFwcCwgbWV0aG9kLCBwYXRoLCBzcGVjLCBkcml2ZXIsIGlzU2Vzc0NtZCkge1xuICBsZXQgYXN5bmNIYW5kbGVyID0gYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgbGV0IGpzb25PYmogPSByZXEuYm9keTtcbiAgICBsZXQgaHR0cFJlc0JvZHkgPSB7fTtcbiAgICBsZXQgaHR0cFN0YXR1cyA9IDIwMDtcbiAgICBsZXQgbmV3U2Vzc2lvbklkO1xuICAgIGxldCBjdXJyZW50UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gaWYgdGhpcyBpcyBhIHNlc3Npb24gY29tbWFuZCBidXQgd2UgZG9uJ3QgaGF2ZSBhIHNlc3Npb24sXG4gICAgICAvLyBlcnJvciBvdXQgZWFybHkgKGVzcGVjaWFsbHkgYmVmb3JlIHByb3h5aW5nKVxuICAgICAgaWYgKGlzU2Vzc0NtZCAmJiAhZHJpdmVyLnNlc3Npb25FeGlzdHMocmVxLnBhcmFtcy5zZXNzaW9uSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIGRyaXZlciBpcyBjdXJyZW50bHkgcHJveHlpbmcgY29tbWFuZHMgdG8gYW5vdGhlciBKU09OV1Agc2VydmVyLCBieXBhc3MgYWxsIG91clxuICAgICAgLy8gY2hlY2tzIGFuZCBhc3N1bWUgdGhlIHVwc3RyZWFtIHNlcnZlciBrbm93cyB3aGF0IGl0J3MgZG9pbmcuIEJ1dCBrZWVwIHRoaXMgaW4gdGhlXG4gICAgICAvLyB0cnkvY2F0Y2ggYmxvY2sgc28gaWYgcHJveHlpbmcgaXRzZWxmIGZhaWxzLCB3ZSBnaXZlIGEgbWVzc2FnZSB0byB0aGUgY2xpZW50LiBPZiBjb3Vyc2Ugd2VcbiAgICAgIC8vIG9ubHkgd2FudCB0byBkbyB0aGVzZSB3aGVuIHdlIGhhdmUgYSBzZXNzaW9uIGNvbW1hbmQ7IHRoZSBBcHBpdW0gZHJpdmVyIG11c3QgYmVcbiAgICAgIC8vIHJlc3BvbnNpYmxlIGZvciBzdGFydC9zdG9wIHNlc3Npb24sIGV0Yy4uLiBXZSBhbHNvIGFsbG93IHRoZSBjb21tYW5kIHNwZWMgdG8gZGVjbGFyZSB0aGF0XG4gICAgICAvLyB0aGlzIGNvbW1hbmQgc2hvdWxkIG5ldmVyIGJlIHByb3hpZWQgKHdoaWNoIGlzIHVzZWZ1bCBmb3IgcGx1Z2luIGRldmVsb3BlcnMgd2hvIGFkZFxuICAgICAgLy8gY29tbWFuZHMgYW5kIGdlbmVyYWxseSB3b3VsZCBub3Qgd2FudCB0aGF0IGNvbW1hbmQgdG8gYmUgcHJveGllZCBpbnN0ZWFkIG9mIGhhbmRsZWQgYnkgdGhlXG4gICAgICAvLyBwbHVnaW4pXG4gICAgICBsZXQgZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSA9IGZhbHNlO1xuICAgICAgaWYgKGlzU2Vzc0NtZCAmJiAhc3BlYy5uZXZlclByb3h5ICYmIGRyaXZlclNob3VsZERvSndwUHJveHkoZHJpdmVyLCByZXEsIHNwZWMuY29tbWFuZCkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFkcml2ZXIucGx1Z2luc1RvSGFuZGxlQ21kIHx8XG4gICAgICAgICAgZHJpdmVyLnBsdWdpbnNUb0hhbmRsZUNtZChzcGVjLmNvbW1hbmQsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgZG9Kd3BQcm94eShkcml2ZXIsIHJlcSwgcmVzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQpLmRlYnVnKFxuICAgICAgICAgIGBXb3VsZCBoYXZlIHByb3hpZWQgYCArXG4gICAgICAgICAgICBgY29tbWFuZCBkaXJlY3RseSwgYnV0IGEgcGx1Z2luIGV4aXN0cyB3aGljaCBtaWdodCByZXF1aXJlIGl0cyB2YWx1ZSwgc28gd2lsbCBsZXQgYCArXG4gICAgICAgICAgICBgaXRzIHZhbHVlIGJlIGNvbGxlY3RlZCBpbnRlcm5hbGx5IGFuZCBtYWRlIHBhcnQgb2YgcGx1Z2luIGNoYWluYFxuICAgICAgICApO1xuICAgICAgICBkaWRQbHVnaW5PdmVycmlkZVByb3h5ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgYSBjb21tYW5kIGlzIG5vdCBpbiBvdXIgbWV0aG9kIG1hcCwgaXQncyBiZWNhdXNlIHdlXG4gICAgICAvLyBoYXZlIG5vIHBsYW5zIHRvIGV2ZXIgaW1wbGVtZW50IGl0XG4gICAgICBpZiAoIXNwZWMuY29tbWFuZCkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gd3JhcCBwYXJhbXMgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAoc3BlYy5wYXlsb2FkUGFyYW1zICYmIHNwZWMucGF5bG9hZFBhcmFtcy53cmFwKSB7XG4gICAgICAgIGpzb25PYmogPSB3cmFwUGFyYW1zKHNwZWMucGF5bG9hZFBhcmFtcywganNvbk9iaik7XG4gICAgICB9XG5cbiAgICAgIC8vIHVud3JhcCBwYXJhbXMgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAoc3BlYy5wYXlsb2FkUGFyYW1zICYmIHNwZWMucGF5bG9hZFBhcmFtcy51bndyYXApIHtcbiAgICAgICAganNvbk9iaiA9IHVud3JhcFBhcmFtcyhzcGVjLnBheWxvYWRQYXJhbXMsIGpzb25PYmopO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3BlYy5jb21tYW5kID09PSBDUkVBVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAgIC8vIHRyeSB0byBkZXRlcm1pbmUgcHJvdG9jb2wgYnkgc2Vzc2lvbiBjcmVhdGlvbiBhcmdzLCBzbyB3ZSBjYW4gdGhyb3cgYVxuICAgICAgICAvLyBwcm9wZXJseSBmb3JtYXR0ZWQgZXJyb3IgaWYgYXJndW1lbnRzIHZhbGlkYXRpb24gZmFpbHNcbiAgICAgICAgY3VycmVudFByb3RvY29sID0gZGV0ZXJtaW5lUHJvdG9jb2woXG4gICAgICAgICAgbWFrZUFyZ3MocmVxLnBhcmFtcywganNvbk9iaiwgc3BlYy5wYXlsb2FkUGFyYW1zIHx8IHt9KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUganNvbiBwYXlsb2FkIGNvbmZvcm1zIHRvIHRoZSBzcGVjXG4gICAgICBjaGVja1BhcmFtcyhzcGVjLnBheWxvYWRQYXJhbXMsIGpzb25PYmosIGN1cnJlbnRQcm90b2NvbCk7XG5cbiAgICAgIC8vIHR1cm4gdGhlIGNvbW1hbmQgYW5kIGpzb24gcGF5bG9hZCBpbnRvIGFuIGFyZ3VtZW50IGxpc3QgZm9yXG4gICAgICAvLyB0aGUgZHJpdmVyIG1ldGhvZHNcbiAgICAgIGxldCBhcmdzID0gbWFrZUFyZ3MocmVxLnBhcmFtcywganNvbk9iaiwgc3BlYy5wYXlsb2FkUGFyYW1zIHx8IHt9LCBjdXJyZW50UHJvdG9jb2wpO1xuICAgICAgbGV0IGRyaXZlclJlcztcbiAgICAgIC8vIHZhbGlkYXRlIGNvbW1hbmQgYXJncyBhY2NvcmRpbmcgdG8gTUpTT05XUFxuICAgICAgaWYgKHZhbGlkYXRvcnNbc3BlYy5jb21tYW5kXSkge1xuICAgICAgICB2YWxpZGF0b3JzW3NwZWMuY29tbWFuZF0oLi4uYXJncyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJ1biB0aGUgZHJpdmVyIGNvbW1hbmQgd3JhcHBlZCBpbnNpZGUgdGhlIGFyZ3VtZW50IHZhbGlkYXRvcnNcbiAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5kZWJ1ZyhcbiAgICAgICAgYENhbGxpbmcgYCArXG4gICAgICAgICAgYCR7ZHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9LiR7c3BlYy5jb21tYW5kfSgpIHdpdGggYXJnczogYCArXG4gICAgICAgICAgXy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShhcmdzKSwge2xlbmd0aDogTUFYX0xPR19CT0RZX0xFTkdUSH0pXG4gICAgICApO1xuXG4gICAgICBpZiAoZGlkUGx1Z2luT3ZlcnJpZGVQcm94eSkge1xuICAgICAgICAvLyBUT0RPIGZvciBub3cgd2UgYWRkIHRoaXMgaW5mb3JtYXRpb24gb24gdGhlIGFyZ3MgbGlzdCwgYnV0IHRoYXQncyBtaXhpbmcgcHVycG9zZXMgaGVyZS5cbiAgICAgICAgLy8gV2UgcmVhbGx5IHNob3VsZCBhZGQgYW5vdGhlciAnb3B0aW9ucycgcGFyYW1ldGVyIHRvICdleGVjdXRlQ29tbWFuZCcsIGJ1dCB0aGlzIHdvdWxkIGJlXG4gICAgICAgIC8vIGEgYnJlYWtpbmcgY2hhbmdlIGZvciBhbGwgZHJpdmVycyBzbyB3b3VsZCBuZWVkIHRvIGJlIGhhbmRsZWQgY2FyZWZ1bGx5LlxuICAgICAgICBhcmdzLnB1c2goe3JlcUZvclByb3h5OiByZXF9KTtcbiAgICAgIH1cblxuICAgICAgZHJpdmVyUmVzID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVDb21tYW5kKHNwZWMuY29tbWFuZCwgLi4uYXJncyk7XG5cbiAgICAgIC8vIEdldCB0aGUgcHJvdG9jb2wgYWZ0ZXIgZXhlY3V0ZUNvbW1hbmRcbiAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGV4dHJhY3RQcm90b2NvbChkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKSB8fCBjdXJyZW50UHJvdG9jb2w7XG5cbiAgICAgIC8vIElmIGBleGVjdXRlQ29tbWFuZGAgd2FzIG92ZXJyaWRkZW4gYW5kIHRoZSBtZXRob2QgcmV0dXJucyBhbiBvYmplY3RcbiAgICAgIC8vIHdpdGggYSBwcm90b2NvbCBhbmQgdmFsdWUvZXJyb3IgcHJvcGVydHksIHJlLWFzc2lnbiB0aGUgcHJvdG9jb2xcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZHJpdmVyUmVzKSAmJiBfLmhhcyhkcml2ZXJSZXMsICdwcm90b2NvbCcpKSB7XG4gICAgICAgIGN1cnJlbnRQcm90b2NvbCA9IGRyaXZlclJlcy5wcm90b2NvbCB8fCBjdXJyZW50UHJvdG9jb2w7XG4gICAgICAgIGlmIChkcml2ZXJSZXMuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBkcml2ZXJSZXMuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZHJpdmVyUmVzID0gZHJpdmVyUmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyB1bnBhY2sgY3JlYXRlU2Vzc2lvbiByZXNwb25zZVxuICAgICAgaWYgKHNwZWMuY29tbWFuZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgICBuZXdTZXNzaW9uSWQgPSBkcml2ZXJSZXNbMF07XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIG5ld1Nlc3Npb25JZCkuZGVidWcoXG4gICAgICAgICAgYENhY2hlZCB0aGUgcHJvdG9jb2wgdmFsdWUgJyR7Y3VycmVudFByb3RvY29sfScgZm9yIHRoZSBuZXcgc2Vzc2lvbiAke25ld1Nlc3Npb25JZH1gXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjdXJyZW50UHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQKSB7XG4gICAgICAgICAgZHJpdmVyUmVzID0gZHJpdmVyUmVzWzFdO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQykge1xuICAgICAgICAgIGRyaXZlclJlcyA9IHtcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogZHJpdmVyUmVzWzFdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZHJpdmVyUmVzID0gZm9ybWF0UmVzcG9uc2VWYWx1ZShkcml2ZXJSZXMpO1xuXG4gICAgICAvLyBkZWxldGUgc2hvdWxkIG5vdCByZXR1cm4gYW55dGhpbmcgZXZlbiBpZiBzdWNjZXNzZnVsXG4gICAgICBpZiAoc3BlYy5jb21tYW5kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAgIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5kZWJ1ZyhcbiAgICAgICAgICBgUmVjZWl2ZWQgcmVzcG9uc2U6ICR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShkcml2ZXJSZXMpLCB7XG4gICAgICAgICAgICBsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEgsXG4gICAgICAgICAgfSl9YFxuICAgICAgICApO1xuICAgICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCkuZGVidWcoJ0J1dCBkZWxldGluZyBzZXNzaW9uLCBzbyBub3QgcmV0dXJuaW5nJyk7XG4gICAgICAgIGRyaXZlclJlcyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBzdGF0dXMgaXMgbm90IDAsICB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgZm9yIHN0YXR1cyBjb2RlLlxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUoZHJpdmVyUmVzKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdXRpbC5oYXNWYWx1ZShkcml2ZXJSZXMuc3RhdHVzKSAmJlxuICAgICAgICAgICFpc05hTihkcml2ZXJSZXMuc3RhdHVzKSAmJlxuICAgICAgICAgIHBhcnNlSW50KGRyaXZlclJlcy5zdGF0dXMsIDEwKSAhPT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZShkcml2ZXJSZXMuc3RhdHVzLCBkcml2ZXJSZXMudmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChkcml2ZXJSZXMudmFsdWUpICYmIGRyaXZlclJlcy52YWx1ZS5lcnJvcikge1xuICAgICAgICAgIHRocm93IGVycm9yRnJvbVczQ0pzb25Db2RlKFxuICAgICAgICAgICAgZHJpdmVyUmVzLnZhbHVlLmVycm9yLFxuICAgICAgICAgICAgZHJpdmVyUmVzLnZhbHVlLm1lc3NhZ2UsXG4gICAgICAgICAgICBkcml2ZXJSZXMudmFsdWUuc3RhY2t0cmFjZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaHR0cFJlc0JvZHkudmFsdWUgPSBkcml2ZXJSZXM7XG4gICAgICBnZXRMb2dnZXIoZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCB8fCBuZXdTZXNzaW9uSWQpLmRlYnVnKFxuICAgICAgICBgUmVzcG9uZGluZyBgICtcbiAgICAgICAgICBgdG8gY2xpZW50IHdpdGggZHJpdmVyLiR7c3BlYy5jb21tYW5kfSgpIHJlc3VsdDogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KGRyaXZlclJlcyksIHtcbiAgICAgICAgICAgIGxlbmd0aDogTUFYX0xPR19CT0RZX0xFTkdUSCxcbiAgICAgICAgICB9KX1gXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gaWYgYW55dGhpbmcgZ29lcyB3cm9uZywgZmlndXJlIG91dCB3aGF0IG91ciByZXNwb25zZSBzaG91bGQgYmVcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGVycm9yIHRoYXQgd2UgZW5jb3VudGVyZWRcbiAgICAgIGxldCBhY3R1YWxFcnIgPSBlcnI7XG5cbiAgICAgIGN1cnJlbnRQcm90b2NvbCA9XG4gICAgICAgIGN1cnJlbnRQcm90b2NvbCB8fCBleHRyYWN0UHJvdG9jb2woZHJpdmVyLCByZXEucGFyYW1zLnNlc3Npb25JZCB8fCBuZXdTZXNzaW9uSWQpO1xuXG4gICAgICBsZXQgZXJyTXNnID0gZXJyLnN0YWNrdHJhY2UgfHwgZXJyLnN0YWNrO1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKGVyck1zZywgZXJyLm1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIGlmIHRoZSBtZXNzYWdlIGhhcyBtb3JlIGluZm9ybWF0aW9uLCBhZGQgaXQuIGJ1dCBvZnRlbiB0aGUgbWVzc2FnZVxuICAgICAgICAvLyBpcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgc3RhY2sgdHJhY2VcbiAgICAgICAgZXJyTXNnID0gYCR7ZXJyLm1lc3NhZ2V9JHtlcnJNc2cgPyAnXFxuJyArIGVyck1zZyA6ICcnfWA7XG4gICAgICB9XG4gICAgICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuUHJveHlSZXF1ZXN0RXJyb3IpKSB7XG4gICAgICAgIGFjdHVhbEVyciA9IGVyci5nZXRBY3R1YWxFcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGRyaXZlciwgcmVxLnBhcmFtcy5zZXNzaW9uSWQgfHwgbmV3U2Vzc2lvbklkKS5kZWJ1ZyhcbiAgICAgICAgICBgRW5jb3VudGVyZWQgaW50ZXJuYWwgZXJyb3IgcnVubmluZyBjb21tYW5kOiAke2Vyck1zZ31gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV0gPSBnZXRSZXNwb25zZUZvclczQ0Vycm9yKGFjdHVhbEVycik7XG4gICAgfVxuXG4gICAgLy8gZGVjb2RlIHRoZSByZXNwb25zZSwgd2hpY2ggaXMgZWl0aGVyIGEgc3RyaW5nIG9yIGpzb25cbiAgICBpZiAoXy5pc1N0cmluZyhodHRwUmVzQm9keSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cykuc2VuZChodHRwUmVzQm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdTZXNzaW9uSWQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQykge1xuICAgICAgICAgIGh0dHBSZXNCb2R5LnZhbHVlLnNlc3Npb25JZCA9IG5ld1Nlc3Npb25JZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBodHRwUmVzQm9keS5zZXNzaW9uSWQgPSBuZXdTZXNzaW9uSWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGh0dHBSZXNCb2R5LnNlc3Npb25JZCA9IHJlcS5wYXJhbXMuc2Vzc2lvbklkIHx8IG51bGw7XG4gICAgICB9XG4gICAgICAvLyBEb24ndCBpbmNsdWRlIHNlc3Npb25JZCBpbiBXM0MgcmVzcG9uc2VzXG4gICAgICBpZiAoY3VycmVudFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDKSB7XG4gICAgICAgIGRlbGV0ZSBodHRwUmVzQm9keS5zZXNzaW9uSWQ7XG4gICAgICB9XG5cbiAgICAgIGh0dHBSZXNCb2R5ID0gZm9ybWF0U3RhdHVzKGh0dHBSZXNCb2R5KTtcbiAgICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cykuanNvbihodHRwUmVzQm9keSk7XG4gICAgfVxuICB9O1xuICAvLyBhZGQgdGhlIG1ldGhvZCB0byB0aGUgYXBwXG4gIGFwcFttZXRob2QudG9Mb3dlckNhc2UoKV0ocGF0aCwgKHJlcSwgcmVzKSA9PiB7XG4gICAgQi5yZXNvbHZlKGFzeW5jSGFuZGxlcihyZXEsIHJlcykpLmRvbmUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRyaXZlclNob3VsZERvSndwUHJveHkoZHJpdmVyLCByZXEsIGNvbW1hbmQpIHtcbiAgLy8gZHJpdmVycyBuZWVkIHRvIGV4cGxpY2l0bHkgc2F5IHdoZW4gdGhlIHByb3h5IGlzIGFjdGl2ZVxuICBpZiAoIWRyaXZlci5wcm94eUFjdGl2ZShyZXEucGFyYW1zLnNlc3Npb25JZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyB3ZSBzaG91bGQgbmV2ZXIgcHJveHkgZGVsZXRlU2Vzc2lvbiBiZWNhdXNlIHdlIG5lZWQgdG8gZ2l2ZSB0aGUgY29udGFpbmluZ1xuICAvLyBkcml2ZXIgYW4gb3Bwb3J0dW5pdHkgdG8gY2xlYW4gaXRzZWxmIHVwXG4gIGlmIChjb21tYW5kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gdmFsaWRhdGUgYXZvaWRhbmNlIHNjaGVtYSwgYW5kIHNheSB3ZSBzaG91bGRuJ3QgcHJveHkgaWYgYW55dGhpbmcgaW4gdGhlXG4gIC8vIGF2b2lkIGxpc3QgbWF0Y2hlcyBvdXIgcmVxXG4gIGlmIChkcml2ZXIucHJveHlSb3V0ZUlzQXZvaWRlZChyZXEucGFyYW1zLnNlc3Npb25JZCwgcmVxLm1ldGhvZCwgcmVxLm9yaWdpbmFsVXJsLCByZXEuYm9keSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZG9Kd3BQcm94eShkcml2ZXIsIHJlcSwgcmVzKSB7XG4gIGdldExvZ2dlcihkcml2ZXIsIHJlcS5wYXJhbXMuc2Vzc2lvbklkKS5pbmZvKFxuICAgICdEcml2ZXIgcHJveHkgYWN0aXZlLCBwYXNzaW5nIHJlcXVlc3Qgb24gdmlhIEhUVFAgcHJveHknXG4gICk7XG5cbiAgLy8gY2hlY2sgdGhhdCB0aGUgaW5uZXIgZHJpdmVyIGhhcyBhIHByb3h5IGZ1bmN0aW9uXG4gIGlmICghZHJpdmVyLmNhblByb3h5KHJlcS5wYXJhbXMuc2Vzc2lvbklkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHByb3h5IHRvIGEgc2VydmVyIGJ1dCB0aGUgZHJpdmVyIGlzIHVuYWJsZSB0byBwcm94eScpO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgZHJpdmVyLmV4ZWN1dGVDb21tYW5kKCdwcm94eVJlcVJlcycsIHJlcSwgcmVzLCByZXEucGFyYW1zLnNlc3Npb25JZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcHJveHkuIFByb3h5IGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1xuICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sXG4gIGlzU2Vzc2lvbkNvbW1hbmQsXG4gIGRyaXZlclNob3VsZERvSndwUHJveHksXG4gIGRldGVybWluZVByb3RvY29sLFxuICBDUkVBVEVfU0VTU0lPTl9DT01NQU5ELFxuICBERUxFVEVfU0VTU0lPTl9DT01NQU5ELFxuICBHRVRfU1RBVFVTX0NPTU1BTkQsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxzQkFBc0IsR0FBRyxlQUEvQjs7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxlQUEvQjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxXQUEzQjs7O0FBRUEsU0FBU0MsaUJBQVQsQ0FBMkJDLGlCQUEzQixFQUE4QztFQUM1QyxPQUFPQyxlQUFBLENBQUVDLElBQUYsQ0FBT0YsaUJBQVAsRUFBMEJHLHVCQUExQixJQUF1Q0Msb0JBQUEsQ0FBVUMsR0FBakQsR0FBdURELG9CQUFBLENBQVVFLE9BQXhFO0FBQ0Q7O0FBRUQsU0FBU0MsZUFBVCxDQUF5QkMsTUFBekIsRUFBaUNDLFNBQVMsR0FBRyxJQUE3QyxFQUFtRDtFQUFBOztFQUNqRCxNQUFNQyxTQUFTLEdBQUdULGVBQUEsQ0FBRVUsVUFBRixDQUFhSCxNQUFNLENBQUNJLGdCQUFwQixJQUNkSixNQUFNLENBQUNJLGdCQUFQLENBQXdCSCxTQUF4QixDQURjLEdBRWRE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