@cloudbase/oauth 2.22.1 → 2.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cjs/auth/apis.js +1 -1
  2. package/dist/cjs/captcha/captcha.js +1 -1
  3. package/dist/cjs/index.js +1 -1
  4. package/dist/cjs/oauth2client/oauth2client.js +1 -1
  5. package/dist/cjs/utils/index.js +1 -1
  6. package/dist/cjs/utils/urlSearchParams.js +1 -1
  7. package/package.json +4 -4
  8. package/src/auth/apis.ts +8 -0
  9. package/src/captcha/captcha.ts +1 -0
  10. package/src/index.ts +1 -0
  11. package/src/oauth2client/oauth2client.ts +1 -0
  12. package/src/utils/index.ts +1 -0
  13. package/src/utils/urlSearchParams.ts +2 -0
  14. package/tsconfig.json +3 -1
  15. package/dist/esm/auth/apis.d.ts +0 -123
  16. package/dist/esm/auth/consts.d.ts +0 -110
  17. package/dist/esm/auth/models.d.ts +0 -542
  18. package/dist/esm/captcha/captcha.d.ts +0 -40
  19. package/dist/esm/index.d.ts +0 -13
  20. package/dist/esm/oauth2client/consts.d.ts +0 -20
  21. package/dist/esm/oauth2client/interface.d.ts +0 -15
  22. package/dist/esm/oauth2client/models.d.ts +0 -60
  23. package/dist/esm/oauth2client/oauth2client.d.ts +0 -71
  24. package/dist/esm/utils/base64.d.ts +0 -4
  25. package/dist/esm/utils/encrypt.d.ts +0 -4
  26. package/dist/esm/utils/encryptlong/index.d.ts +0 -546
  27. package/dist/esm/utils/function/single-promise.d.ts +0 -6
  28. package/dist/esm/utils/index.d.ts +0 -2
  29. package/dist/esm/utils/mp.d.ts +0 -2
  30. package/dist/esm/utils/urlSearchParams.d.ts +0 -13
  31. package/dist/esm/utils/uuid.d.ts +0 -1
  32. /package/dist/{cjs → types}/auth/apis.d.ts +0 -0
  33. /package/dist/{cjs → types}/auth/consts.d.ts +0 -0
  34. /package/dist/{cjs → types}/auth/models.d.ts +0 -0
  35. /package/dist/{cjs → types}/captcha/captcha.d.ts +0 -0
  36. /package/dist/{cjs → types}/index.d.ts +0 -0
  37. /package/dist/{cjs → types}/oauth2client/consts.d.ts +0 -0
  38. /package/dist/{cjs → types}/oauth2client/interface.d.ts +0 -0
  39. /package/dist/{cjs → types}/oauth2client/models.d.ts +0 -0
  40. /package/dist/{cjs → types}/oauth2client/oauth2client.d.ts +0 -0
  41. /package/dist/{cjs → types}/utils/base64.d.ts +0 -0
  42. /package/dist/{cjs → types}/utils/encrypt.d.ts +0 -0
  43. /package/dist/{cjs → types}/utils/encryptlong/index.d.ts +0 -0
  44. /package/dist/{cjs → types}/utils/function/single-promise.d.ts +0 -0
  45. /package/dist/{cjs → types}/utils/index.d.ts +0 -0
  46. /package/dist/{cjs → types}/utils/mp.d.ts +0 -0
  47. /package/dist/{cjs → types}/utils/urlSearchParams.d.ts +0 -0
  48. /package/dist/{cjs → types}/utils/uuid.d.ts +0 -0
@@ -868,4 +868,4 @@ var OAuth2Client = exports.OAuth2Client = (function () {
868
868
  OAuth2Client.retryInterval = 1000;
869
869
  return OAuth2Client;
870
870
  }());
871
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBb0M7QUFDcEMseUNBQW9FO0FBYXBFLHNDQUFzQztBQUN0Qyx3Q0FBNEM7QUFFNUMsbUVBQWdFO0FBQ2hFLDBDQUF3QztBQUN4QyxrQ0FBa0M7QUFHbEMsa0RBQWdEO0FBRWhELElBQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFBO0FBQzFDLElBQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFBO0FBQ3hDLElBQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFBO0FBV2hDLElBQU0sY0FBYyxHQUFvQixVQUFtQixHQUFXLEVBQUUsT0FBd0I7Ozs7OztvQkFDakcsTUFBTSxHQUFhLElBQUksQ0FBQTtvQkFDdkIsYUFBYSxHQUF5QixJQUFJLENBQUE7Ozs7b0JBR3RDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7d0JBQ3ZCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO3FCQUMzQjtvQkFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDNUQsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDcEQ7b0JBQ2dDLFdBQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBQTs7b0JBQXhELGNBQWMsR0FBYSxTQUE2QjtvQkFDekMsV0FBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUE7O29CQUExQyxZQUFZ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QjtJQU1PLDJDQUFvQixHQUE1QixVQUFnQyxHQUFZO1FBQzFDLElBQU0sT0FBTyxHQUFrQjtZQUM3QixLQUFLLEVBQUUsa0JBQVMsQ0FBQyxlQUFlO1lBQ2hDLGlCQUFpQixFQUFFLEdBQUc7U0FDdkIsQ0FBQTtRQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBbGRjLHlCQUFZLEdBQUcsQ0FBQyxBQUFKLENBQUk7SUFDaEIscUJBQVEsR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNaLHFCQUFRLEdBQUcsQ0FBQyxBQUFKLENBQUk7SUFDWiwwQkFBYSxHQUFHLElBQUksQUFBUCxDQUFPO0lBZ2RyQyxtQkFBQztDQUFBLEFBcGRELElBb2RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXJyb3JUeXBlIH0gZnJvbSAnLi9jb25zdHMnXG5pbXBvcnQgeyBBcGlVcmxzLCBBcGlVcmxzVjIsIEFVVEhfQVBJX1BSRUZJWCB9IGZyb20gJy4uL2F1dGgvY29uc3RzJ1xuXG5pbXBvcnQgeyBBdXRoQ2xpZW50LCBTaW1wbGVTdG9yYWdlIH0gZnJvbSAnLi9pbnRlcmZhY2UnXG5cbmltcG9ydCB7XG4gIENyZWRlbnRpYWxzLFxuICBSZXNwb25zZUVycm9yLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgUmVxdWVzdEZ1bmN0aW9uLFxuICBPQXV0aDJDbGllbnRPcHRpb25zLFxuICBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMsXG59IGZyb20gJy4vbW9kZWxzJ1xuXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tICcuLi91dGlscy91dWlkJ1xuaW1wb3J0IHsgZ2V0UGF0aE5hbWUgfSBmcm9tICcuLi91dGlscy9pbmRleCdcblxuaW1wb3J0IHsgU2luZ2xlUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9uL3NpbmdsZS1wcm9taXNlJ1xuaW1wb3J0IHsgd2VCdG9hIH0gZnJvbSAnLi4vdXRpbHMvYmFzZTY0J1xuaW1wb3J0IHsgaXNNcCB9IGZyb20gJy4uL3V0aWxzL21wJ1xuaW1wb3J0IHsgQXV0aE9wdGlvbnMgfSBmcm9tICcuLi9hdXRoL2FwaXMnXG5pbXBvcnQgeyBJQ2xvdWRiYXNlQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcydcbmltcG9ydCB7IGxhbmdFdmVudCB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuXG5jb25zdCBSZXF1ZXN0SWRIZWFkZXJOYW1lID0gJ3gtcmVxdWVzdC1pZCdcbmNvbnN0IERldmljZUlkSGVhZGVyTmFtZSA9ICd4LWRldmljZS1pZCdcbmNvbnN0IERldmljZUlkU2VjdGlvbk5hbWUgPSAnZGV2aWNlX2lkJ1xuXG5kZWNsYXJlIGNvbnN0IHd4OiBhbnlcblxuZXhwb3J0IGludGVyZmFjZSBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zIHtcbiAgZXJyb3I/OiBFcnJvclR5cGVcbiAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsXG4gIGVycm9yX3VyaT86IHN0cmluZyB8IG51bGxcbiAgZGV0YWlscz86IGFueSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiA8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICB0cnkge1xuICAgIC8vIE9iamVjdHMgbXVzdCBiZSBjb3BpZWQgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgZGF0YSBzdWNoIGFzIGJvZHkuXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKVxuICAgIGlmICghY29weU9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBjb3B5T3B0aW9ucy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICBpZiAoY29weU9wdGlvbnMuYm9keSAmJiB0eXBlb2YgY29weU9wdGlvbnMuYm9keSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvcHlPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShjb3B5T3B0aW9ucy5ib2R5KVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVJlc3VsdDogUmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGNvcHlPcHRpb25zKVxuICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlUmVzdWx0Lmpzb24oKVxuICAgIGlmIChqc29uUmVzcG9uc2U/LmVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ganNvblJlc3BvbnNlIGFzIFJlc3BvbnNlRXJyb3JcbiAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGpzb25SZXNwb25zZSBhcyBUXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICB9XG4gIH1cbiAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0b1Jlc3BvbnNlRXJyb3IgPSAoZXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBFcnJvciwgb3B0aW9ucz86IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMpOiBSZXNwb25zZUVycm9yID0+IHtcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3JcbiAgY29uc3QgZm9ybWF0T3B0aW9uczogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IGZvcm1hdE9wdGlvbnMuZXJyb3IgfHwgRXJyb3JUeXBlLkxPQ0FMLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGZvcm1hdE9wdGlvbnMuZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IubWVzc2FnZSxcbiAgICAgIGVycm9yX3VyaTogZm9ybWF0T3B0aW9ucy5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZXJyb3Iuc3RhY2ssXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZvcm1hdEVycm9yOiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zID0gZXJyb3IgfHwge31cbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IGZvcm1hdE9wdGlvbnMuZXJyb3IgfHwgZm9ybWF0RXJyb3IuZXJyb3IgfHwgRXJyb3JUeXBlLkxPQ0FMLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGZvcm1hdE9wdGlvbnMuZXJyb3JfZGVzY3JpcHRpb24gfHwgZm9ybWF0RXJyb3IuZXJyb3JfZGVzY3JpcHRpb24sXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpIHx8IGZvcm1hdEVycm9yLmVycm9yX3VyaSxcbiAgICAgIGRldGFpbHM6IGZvcm1hdE9wdGlvbnMuZGV0YWlscyB8fCBmb3JtYXRFcnJvci5kZXRhaWxzLFxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzcG9uc2VFcnJvclxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHJlcXVlc3QgaWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJlcXVlc3RJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gdXVpZHY0KClcbn1cblxuLyoqXG4gKiBEZWZhdWx0IFN0b3JhZ2UuXG4gKi9cbmNsYXNzIERlZmF1bHRTdG9yYWdlIGltcGxlbWVudHMgU2ltcGxlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiDnvJPlrZhrZXnnu5/kuIDkvb/nlKjlkI7nvIDljLrliIZcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vudjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Iob3B0cz86IHsgZW52OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX2VudiA9IG9wdHM/LmVudiB8fCAnJ1xuICB9XG4gIC8qKlxuICAgKiBHZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIGFzeW5jIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogU2V0IGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqL1xuICBhc3luYyBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gLCB2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBnZXRJdGVtU3luYyhrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgcmVtb3ZlSXRlbVN5bmMoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogU2V0IGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIHNldEl0ZW1TeW5jKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gLCB2YWx1ZSlcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0b3JhZ2UgPSBuZXcgRGVmYXVsdFN0b3JhZ2UoKVxuXG5pbnRlcmZhY2UgTG9jYWxDcmVkZW50aWFsc09wdGlvbnMge1xuICB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBjbGllbnRJZDogc3RyaW5nXG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBjcmVkZW50aWFscyBpcyBleHBpcmVkLlxuICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ3JlZGVudGlhbHNFeHBpcmVkKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICBsZXQgaXNFeHBpcmVkID0gdHJ1ZVxuICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQgJiYgY3JlZGVudGlhbHM/LmFjY2Vzc190b2tlbikge1xuICAgIGlzRXhwaXJlZCA9IGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQgPCBuZXcgRGF0ZSgpXG4gIH1cbiAgcmV0dXJuIGlzRXhwaXJlZFxufVxuXG4vKipcbiAqIExvY2FsIGNyZWRlbnRpYWxzLlxuICogTG9jYWwgY3JlZGVudGlhbHMsIHdpdGggbWVtb3J5IGNhY2hlIGFuZCBzdG9yYWdlIGNhY2hlLlxuICogSWYgdGhlIG1lbW9yeSBjYWNoZSBleHBpcmVzLCB0aGUgc3RvcmFnZSBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IGxvYWRlZC5cbiAqL1xuY2xhc3MgTG9jYWxDcmVkZW50aWFscyB7XG4gIHByaXZhdGUgdG9rZW5TZWN0aW9uTmFtZTogc3RyaW5nXG5cbiAgcHJpdmF0ZSBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG5cbiAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nXG5cbiAgcHJpdmF0ZSBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCBudWxsID0gbnVsbFxuICAvLyDmnaXoh6phY2Nlc3NLZXnnmoTouqvku73vvIzkuI3mjIHkuYXljJZcbiAgcHJpdmF0ZSBhY2Nlc3NLZXlDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCBudWxsID0gbnVsbFxuXG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG51bGxcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtMb2NhbENyZWRlbnRpYWxzT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTG9jYWxDcmVkZW50aWFsc09wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuU2VjdGlvbk5hbWUgPSBvcHRpb25zLnRva2VuU2VjdGlvbk5hbWVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2VcbiAgICB0aGlzLmNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZFxuICAgIHRoaXMuc2luZ2xlUHJvbWlzZSA9IG5ldyBTaW5nbGVQcm9taXNlKHsgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQgfSlcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCBudWxsXG4gIH1cblxuICBwdWJsaWMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBudWxsXG4gICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtU3luYyh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgaWYgKHRva2VuU3RyICE9PSB1bmRlZmluZWQgJiYgdG9rZW5TdHIgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgY3JlZGVudGlhbHMgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfaW4pIHtcbiAgICAgIGlmICghY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAoY3JlZGVudGlhbHMuZXhwaXJlc19pbiAtIDMwKSAqIDEwMDApXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lLCB0b2tlblN0cilcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNldCBjcmVkZW50aWFscyBmcm9tIGFjY2Vzc0tleVxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIHNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLmFjY2Vzc0tleUNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdnZXRDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZCh0aGlzLmNyZWRlbnRpYWxzKSkge1xuICAgICAgICBjb25zdCB7IGNyZWRlbnRpYWxzLCBpc0FjY2Vzc0tleUNyZWRlbnRpYWxzIH0gPSBhd2FpdCB0aGlzLmdldFN0b3JhZ2VDcmVkZW50aWFscygpXG4gICAgICAgIGlmIChpc0FjY2Vzc0tleUNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0b3JhZ2UgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFN0b3JhZ2VDcmVkZW50aWFscygpOiBQcm9taXNlPHsgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgbnVsbDsgaXNBY2Nlc3NLZXlDcmVkZW50aWFsczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19nZXRTdG9yYWdlQ3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgbGV0IGlzQWNjZXNzS2V5Q3JlZGVudGlhbHMgPSBmYWxzZVxuICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIGlmICghIXRva2VuU3RyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSB0aGlzLmFjY2Vzc0tleUNyZWRlbnRpYWxzIHx8IG51bGxcbiAgICAgICAgaXNBY2Nlc3NLZXlDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGNyZWRlbnRpYWxzLCBpc0FjY2Vzc0tleUNyZWRlbnRpYWxzIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogT0F1dGgyQ2xpZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBPQXV0aDJDbGllbnQgaW1wbGVtZW50cyBBdXRoQ2xpZW50IHtcbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdFJldHJ5ID0gMlxuICBwcml2YXRlIHN0YXRpYyBtaW5SZXRyeSA9IDBcbiAgcHJpdmF0ZSBzdGF0aWMgbWF4UmV0cnkgPSA1XG4gIHByaXZhdGUgc3RhdGljIHJldHJ5SW50ZXJ2YWwgPSAxMDAwXG5cbiAgcHJpdmF0ZSBhcGlPcmlnaW46IHN0cmluZ1xuICBwcml2YXRlIGFwaVBhdGg6IHN0cmluZ1xuICBwcml2YXRlIGNsaWVudElkOiBzdHJpbmdcbiAgcHJpdmF0ZSBpMThuOiBJQ2xvdWRiYXNlQ29uZmlnWydpMThuJ11cbiAgcHJpdmF0ZSByZXRyeTogbnVtYmVyXG4gIHByaXZhdGUgY2xpZW50U2VjcmV0Pzogc3RyaW5nXG4gIHByaXZhdGUgYmFzZVJlcXVlc3Q6IDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFQ+XG4gIHByaXZhdGUgbG9jYWxDcmVkZW50aWFsczogTG9jYWxDcmVkZW50aWFsc1xuICBwcml2YXRlIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcbiAgcHJpdmF0ZSBkZXZpY2VJRD86IHN0cmluZ1xuICBwcml2YXRlIHRva2VuSW5VUkw/OiBib29sZWFuXG4gIHByaXZhdGUgcmVmcmVzaFRva2VuRnVuYzogKHJlZnJlc2hUb2tlbj86IHN0cmluZywgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscykgPT4gUHJvbWlzZTxDcmVkZW50aWFscz5cbiAgcHJpdmF0ZSBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICBwcml2YXRlIHNpbmdsZVByb21pc2U6IFNpbmdsZVByb21pc2UgPSBudWxsXG4gIHByaXZhdGUgYW5vbnltb3VzU2lnbkluRnVuYzogKENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzIHwgdm9pZD5cbiAgcHJpdmF0ZSB3eENsb3VkOiBhbnlcbiAgcHJpdmF0ZSB1c2VXeENsb3VkOiBib29sZWFuXG4gIHByaXZhdGUgYmFzaWNBdXRoOiBzdHJpbmdcbiAgcHJpdmF0ZSBvbkNyZWRlbnRpYWxzRXJyb3I6IEF1dGhPcHRpb25zWydvbkNyZWRlbnRpYWxzRXJyb3InXSB8IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge09BdXRoMkNsaWVudE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9BdXRoMkNsaWVudE9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMuY2xpZW50U2VjcmV0KSB7XG4gICAgICBvcHRpb25zLmNsaWVudFNlY3JldCA9ICcnXG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmNsaWVudElkICYmIG9wdGlvbnMuZW52KSB7XG4gICAgICBvcHRpb25zLmNsaWVudElkID0gb3B0aW9ucy5lbnZcbiAgICB9XG5cbiAgICB0aGlzLmFwaU9yaWdpbiA9IG9wdGlvbnMuYXBpT3JpZ2luXG4gICAgdGhpcy5hcGlQYXRoID0gb3B0aW9ucy5hcGlQYXRoIHx8IEFVVEhfQVBJX1BSRUZJWFxuICAgIHRoaXMuY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkXG4gICAgdGhpcy5pMThuID0gb3B0aW9ucy5pMThuXG4gICAgdGhpcy5zaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoeyBjbGllbnRJZDogdGhpcy5jbGllbnRJZCB9KVxuICAgIHRoaXMucmV0cnkgPSB0aGlzLmZvcm1hdFJldHJ5KG9wdGlvbnMucmV0cnksIE9BdXRoMkNsaWVudC5kZWZhdWx0UmV0cnkpXG4gICAgaWYgKG9wdGlvbnMuYmFzZVJlcXVlc3QpIHtcbiAgICAgIHRoaXMuYmFzZVJlcXVlc3QgPSBvcHRpb25zLmJhc2VSZXF1ZXN0XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZVJlcXVlc3QgPSBkZWZhdWx0UmVxdWVzdFxuICAgIH1cbiAgICB0aGlzLnRva2VuSW5VUkwgPSBvcHRpb25zLnRva2VuSW5VUkxcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5zdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlXG4gICAgdGhpcy5sb2NhbENyZWRlbnRpYWxzID0gbmV3IExvY2FsQ3JlZGVudGlhbHMoe1xuICAgICAgdG9rZW5TZWN0aW9uTmFtZTogYGNyZWRlbnRpYWxzXyR7b3B0aW9ucy5jbGllbnRJZH1gLFxuICAgICAgc3RvcmFnZTogdGhpcy5zdG9yYWdlLFxuICAgICAgY2xpZW50SWQ6IG9wdGlvbnMuY2xpZW50SWQsXG4gICAgfSlcblxuICAgIHRoaXMuY2xpZW50U2VjcmV0ID0gb3B0aW9ucy5jbGllbnRTZWNyZXRcbiAgICBpZiAob3B0aW9ucy5jbGllbnRJZCkge1xuICAgICAgdGhpcy5iYXNpY0F1dGggPSBgQmFzaWMgJHt3ZUJ0b2EoYCR7b3B0aW9ucy5jbGllbnRJZH06JHt0aGlzLmNsaWVudFNlY3JldH1gKX1gXG4gICAgfVxuICAgIHRoaXMud3hDbG91ZCA9IG9wdGlvbnMud3hDbG91ZFxuICAgIHRyeSB7XG4gICAgICBpZiAoaXNNcCgpKSB7XG4gICAgICAgIHRoaXMudXNlV3hDbG91ZCA9IG9wdGlvbnMudXNlV3hDbG91ZFxuICAgICAgICBpZiAodGhpcy53eENsb3VkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5lbnYpIHtcbiAgICAgICAgICB3eC5jbG91ZC5pbml0KHsgZW52OiBvcHRpb25zLmVudiB9KVxuICAgICAgICAgIHRoaXMud3hDbG91ZCA9IHd4LmNsb3VkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy9cbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoVG9rZW5GdW5jID0gb3B0aW9ucy5yZWZyZXNoVG9rZW5GdW5jIHx8IHRoaXMuZGVmYXVsdFJlZnJlc2hUb2tlbkZ1bmNcbiAgICB0aGlzLmFub255bW91c1NpZ25JbkZ1bmMgPSBvcHRpb25zLmFub255bW91c1NpZ25JbkZ1bmNcbiAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvciA9IG9wdGlvbnMub25DcmVkZW50aWFsc0Vycm9yXG5cbiAgICBsYW5nRXZlbnQuYnVzLm9uKGxhbmdFdmVudC5MQU5HX0NIQU5HRV9FVkVOVCwgKHBhcmFtcykgPT4ge1xuICAgICAgdGhpcy5pMThuID0gcGFyYW1zLmRhdGE/LmkxOG4gfHwgdGhpcy5pMThuXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRDcmVkZW50aWFscyBQcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBmZXRjaCBhcGkgcmVxdWVzdCBpbXBsZW1lbnRhdGlvbiB3aXRoIGF1dGggY3JlZGVudGlhbHNcbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHB1YmxpYyBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgY3JlZGVudGlhbHMgZnJvbSBhY2Nlc3NLZXlcbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICovXG4gIHB1YmxpYyBzZXRBY2Nlc3NLZXlDcmVkZW50aWFscyhjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRBY2Nlc3NLZXlDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRBY2Nlc3NUb2tlbiByZXR1cm4gYSB2YWxpZGF0ZSBhY2Nlc3MgdG9rZW5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBY2Nlc3NUb2tlbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmIChjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbilcbiAgICB9XG4gICAgY29uc3QgcmVzcEVycjogUmVzcG9uc2VFcnJvciA9IHsgZXJyb3I6IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQgfVxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwRXJyKVxuICB9XG5cbiAgLyoqXG4gICAqIHJlcXVlc3QgaHR0cCBsaWtlIHNpbXBsZSBmZXRjaCBhcGksIGV4cDpyZXF1ZXN0KCcvdjEvdXNlci9tZScsIHt3aXRoQ3JlZGVudGlhbHM6dHJ1ZX0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogQXV0aENsaWVudFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG4gICAgY29uc3QgcmV0cnk6IG51bWJlciA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgdGhpcy5yZXRyeSlcbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7IC4uLm9wdGlvbnMuaGVhZGVycywgW3RoaXMuaTE4bj8uTEFOR19IRUFERVJfS0VZXTogdGhpcy5pMThuPy5sYW5nIH1cbiAgICBpZiAodGhpcy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdID0gZ2VuZXJhdGVSZXF1ZXN0SWQoKVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdKSB7XG4gICAgICBjb25zdCBkZXZpY2VJZCA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlSWQoKVxuICAgICAgb3B0aW9ucy5oZWFkZXJzW0RldmljZUlkSGVhZGVyTmFtZV0gPSBkZXZpY2VJZFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aEJhc2ljQXV0aCAmJiB0aGlzLmJhc2ljQXV0aCkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSB0aGlzLmJhc2ljQXV0aFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2VuSW5VUkwpIHtcbiAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgIHVybCArPSAnPydcbiAgICAgICAgICB9XG4gICAgICAgICAgdXJsICs9IGBhY2Nlc3NfdG9rZW49JHtjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW59YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7Y3JlZGVudGlhbHMudG9rZW5fdHlwZX0gJHtjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW59YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNsaWVudElkICYmIHVybC5pbmRleE9mKCdjbGllbnRfaWQnKSA8IDApIHtcbiAgICAgICAgdXJsICs9IHVybC5pbmRleE9mKCc/JykgPCAwID8gJz8nIDogJyYnXG4gICAgICAgIHVybCArPSBgY2xpZW50X2lkPSR7dGhpcy5jbGllbnRJZH1gXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICB1cmwgPSBgJHt0aGlzLmFwaU9yaWdpbn0ke3RoaXMuYXBpUGF0aH0ke3VybH1gXG4gICAgfVxuICAgIGxldCByZXNwb25zZTogVCB8IG51bGwgPSBudWxsXG4gICAgY29uc3QgbWF4UmVxdWVzdFRpbWVzOiBudW1iZXIgPSByZXRyeSArIDFcbiAgICBmb3IgKGxldCByZXF1ZXN0VGltZSA9IDA7IHJlcXVlc3RUaW1lIDwgbWF4UmVxdWVzdFRpbWVzOyByZXF1ZXN0VGltZSsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VXeENsb3VkIHx8IHRoaXMudXNlV3hDbG91ZCkge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy53eENsb3VkQ2FsbEZ1bmN0aW9uPFQ+KHVybCwgb3B0aW9ucylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuYmFzZVJlcXVlc3Q8VD4odXJsLCBvcHRpb25zKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGNhdGNoIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgIGlmIChvcHRpb25zLndpdGhDcmVkZW50aWFscyAmJiByZXNwb25zZUVycm9yICYmIHJlc3BvbnNlRXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdFRpbWUgPT09IHJldHJ5IHx8ICFyZXNwb25zZUVycm9yIHx8IHJlc3BvbnNlRXJyb3IuZXJyb3IgIT09ICd1bnJlYWNoYWJsZScpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2VFcnJvcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zbGVlcChPQXV0aDJDbGllbnQucmV0cnlJbnRlcnZhbClcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgd3hDbG91ZENhbGxGdW5jdGlvbjxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IHJlc3VsdDogVCB8IG51bGwgPSBudWxsXG4gICAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBsZXQgdXNlckFnZW50ID0gJydcbiAgICAgIHRyeSB7XG4gICAgICAgIHVzZXJBZ2VudCA9IGF3YWl0IHd4LmdldFJlbmRlcmVyVXNlckFnZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgY29uc3QgeyByZXN1bHQ6IHJlc3BvbnNlUmVzdWx0IH0gPSBhd2FpdCB0aGlzLnd4Q2xvdWQuY2FsbEZ1bmN0aW9uKHtcbiAgICAgICAgbmFtZTogJ2h0dHBPdmVyQ2FsbEZ1bmN0aW9uJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIG9yaWdpbjogJ2h0dHBzOi8vc2VydmljZXdlY2hhdC5jb20nLFxuICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiB1c2VyQWdlbnQsXG4gICAgICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBvcHRpb25zLmJvZHksXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzcG9uc2VSZXN1bHQ/LmJvZHk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgcmVzcG9uc2VFcnJvciA9IHJlc3BvbnNlUmVzdWx0Py5ib2R5IGFzIFJlc3BvbnNlRXJyb3JcbiAgICAgICAgcmVzcG9uc2VFcnJvci5lcnJvcl91cmkgPSBnZXRQYXRoTmFtZSh1cmwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSByZXNwb25zZVJlc3VsdD8uYm9keSBhcyBUXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5SRUFDSEFCTEUsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBlcnJvcl91cmk6IGdldFBhdGhOYW1lKHVybCksXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBtc2cgPSAnY3JlZGVudGlhbHMgbm90IGZvdW5kJ1xuICAgICAgdGhpcy5vbkNyZWRlbnRpYWxzRXJyb3I/Lih7IG1zZyB9KVxuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgIH1cbiAgICBpZiAoaXNDcmVkZW50aWFsc0V4cGlyZWQoY3JlZGVudGlhbHMpKSB7XG4gICAgICBpZiAoY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGNyZWRlbnRpYWxzLnNjb3BlID09PSAnYW5vbnltb3VzJykge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c0xvZ2luKGNyZWRlbnRpYWxzKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnOiBlcnJvci5lcnJvcl9kZXNjcmlwdGlvbiB9KVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjcmVkZW50aWFscy5zY29wZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c0xvZ2luKGNyZWRlbnRpYWxzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbXNnID0gJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnXG4gICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCDlup/lvIPmjqXlj6PvvIzli7/nlKguIOWmgumcgOiOt+WPluWHreivgeS/oeaBr+ivt+S9v+eUqCBnZXRDcmVkZW50aWFscyDmlrnms5VcbiAgICovXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFsc1N5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHNBc3luYygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgbXNnID0gJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCdcbiAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKG1zZylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLnNjb3BlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R3JvdXBzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdjcmVkZW50aWFscyBub3QgZm91bmQnXG4gICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihtc2cpXG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFscy5ncm91cHNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGV4cGlyZWQgdG9rZW4uXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19yZWZyZXNoVG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8ICFjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9ICdubyByZWZyZXNoIHRva2VuIGZvdW5kIGluIGNyZWRlbnRpYWxzJ1xuICAgICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKG1zZylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuRnVuYyhjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuLCBjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKVxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLklOVkFMSURfR1JBTlQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICBjb25zdCBtc2cgPSBlcnJvci5lcnJvcl9kZXNjcmlwdGlvblxuICAgICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihtc2cpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNyZWRlbnRpYWxzRXJyb3I/Lih7IG1zZzogZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24gfSlcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFub255bW91c0xvZ2luKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscykge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdfYW5vbnltb3VzTG9naW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5hbm9ueW1vdXNTaWduSW5GdW5jKSB7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbkZ1bmMoY3JlZGVudGlhbHMpXG4gICAgICAgIGNyZWRlbnRpYWxzID0gYyB8fCAoYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuYW5vbnltb3VzU2lnbkluKGNyZWRlbnRpYWxzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHJldHJ5IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmV0cnlcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1JldHJ5KHJldHJ5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgICBpZiAodHlwZW9mIHJldHJ5ICE9PSAnbnVtYmVyJyB8fCByZXRyeSA8IE9BdXRoMkNsaWVudC5taW5SZXRyeSB8fCByZXRyeSA+IE9BdXRoMkNsaWVudC5tYXhSZXRyeSkge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICd3cm9uZyBvcHRpb25zIHBhcmFtOiByZXRyeScsXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gICAgfVxuICAgIHJldHVybiByZXRyeVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsZVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFJldHJ5KHJldHJ5OiBudW1iZXIsIGRlZmF1bHRWYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgcmV0cnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbGVcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tSZXRyeShyZXRyeSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTbGVlcC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0sIG1zKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogYW5vbnltb3VzIHNpZ25JblxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYW5vbnltb3VzU2lnbkluKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2Fub255bW91cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgY3JlZGVudGlhbHMuc2NvcGUgIT09ICdhbm9ueW1vdXMnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdubyBhbm9ueW1vdXMgaW4gY3JlZGVudGlhbHMnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9TSUdOX0lOX0FOT05ZTU9VU0xZX1VSTCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIHdpdGhCYXNpY0F1dGg6IHRydWUsXG4gICAgICAgICAgYm9keToge30sXG4gICAgICAgIH0pXG4gICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhuZXdDcmVkZW50aWFscylcbiAgICAgICAgcmV0dXJuIG5ld0NyZWRlbnRpYWxzXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5JTlZBTElEX0dSQU5UKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCByZWZyZXNoIHRva2VuIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZWZhdWx0UmVmcmVzaFRva2VuRnVuYyhyZWZyZXNoVG9rZW4/OiBzdHJpbmcsIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgaWYgKHJlZnJlc2hUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHJlZnJlc2hUb2tlbiA9PT0gJycpIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdyZWZyZXNoIHRva2VuIG5vdCBmb3VuZCdcbiAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKG1zZylcbiAgICB9XG5cbiAgICBsZXQgdXJsOiBzdHJpbmcgPSBBcGlVcmxzLkFVVEhfVE9LRU5fVVJMXG5cbiAgICBpZiAoY3JlZGVudGlhbHM/LnZlcnNpb24gPT09ICd2MicpIHtcbiAgICAgIHVybCA9IEFwaVVybHNWMi5BVVRIX1RPS0VOX1VSTFxuICAgIH1cblxuICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50U2VjcmV0LFxuICAgICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiB7IC4uLm5ld0NyZWRlbnRpYWxzLCB2ZXJzaW9uOiBjcmVkZW50aWFscz8udmVyc2lvbiB8fCAndjEnIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGV2aWNlSWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGV2aWNlSWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5kZXZpY2VJRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGV2aWNlSURcbiAgICB9XG4gICAgbGV0IGRldmljZUlkOiBzdHJpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShEZXZpY2VJZFNlY3Rpb25OYW1lKVxuICAgIGlmICghKHR5cGVvZiBkZXZpY2VJZCA9PT0gJ3N0cmluZycgJiYgZGV2aWNlSWQubGVuZ3RoID49IDE2ICYmIGRldmljZUlkLmxlbmd0aCA8PSA0OCkpIHtcbiAgICAgIGRldmljZUlkID0gdXVpZHY0KClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXRJdGVtKERldmljZUlkU2VjdGlvbk5hbWUsIGRldmljZUlkKVxuICAgIH1cbiAgICB0aGlzLmRldmljZUlEID0gZGV2aWNlSWRcbiAgICByZXR1cm4gZGV2aWNlSWRcbiAgfVxuICAvKipcbiAgICogR2VuZXJhdGUgdW5BdXRoZW50aWNhdGVkIGVycm9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXJyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VD59XG4gICAqL1xuICBwcml2YXRlIHVuQXV0aGVudGljYXRlZEVycm9yPFQ+KGVycj86IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BFcnI6IFJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnIsXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwRXJyKVxuICB9XG59XG4iXX0=
871
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBb0M7QUFDcEMseUNBQW9FO0FBYXBFLHNDQUFzQztBQUN0Qyx3Q0FBNEM7QUFFNUMsbUVBQWdFO0FBQ2hFLDBDQUF3QztBQUN4QyxrQ0FBa0M7QUFHbEMsa0RBQWdEO0FBRWhELElBQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFBO0FBQzFDLElBQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFBO0FBQ3hDLElBQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFBO0FBV2hDLElBQU0sY0FBYyxHQUFvQixVQUFtQixHQUFXLEVBQUUsT0FBd0I7Ozs7OztvQkFDakcsTUFBTSxHQUFhLElBQUksQ0FBQTtvQkFDdkIsYUFBYSxHQUF5QixJQUFJLENBQUE7Ozs7b0JBR3RDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7d0JBQ3ZCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO3FCQUMzQjtvQkFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDNUQsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDcEQ7b0JBQ2dDLFdBQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBQTs7b0JBQXhELGNBQWMsR0FBYSxTQUE2QjtvQkFDekMsV0FBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUE7O29CQUExQyxZQUFZ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QjtJQU1PLDJDQUFvQixHQUE1QixVQUFnQyxHQUFZO1FBQzFDLElBQU0sT0FBTyxHQUFrQjtZQUM3QixLQUFLLEVBQUUsa0JBQVMsQ0FBQyxlQUFlO1lBQ2hDLGlCQUFpQixFQUFFLEdBQUc7U0FDdkIsQ0FBQTtRQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBbGRjLHlCQUFZLEdBQUcsQ0FBQyxBQUFKLENBQUk7SUFDaEIscUJBQVEsR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNaLHFCQUFRLEdBQUcsQ0FBQyxBQUFKLENBQUk7SUFDWiwwQkFBYSxHQUFHLElBQUksQUFBUCxDQUFPO0lBZ2RyQyxtQkFBQztDQUFBLEFBcGRELElBb2RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXJyb3JUeXBlIH0gZnJvbSAnLi9jb25zdHMnXG5pbXBvcnQgeyBBcGlVcmxzLCBBcGlVcmxzVjIsIEFVVEhfQVBJX1BSRUZJWCB9IGZyb20gJy4uL2F1dGgvY29uc3RzJ1xuXG5pbXBvcnQgeyBBdXRoQ2xpZW50LCBTaW1wbGVTdG9yYWdlIH0gZnJvbSAnLi9pbnRlcmZhY2UnXG5cbmltcG9ydCB7XG4gIENyZWRlbnRpYWxzLFxuICBSZXNwb25zZUVycm9yLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgUmVxdWVzdEZ1bmN0aW9uLFxuICBPQXV0aDJDbGllbnRPcHRpb25zLFxuICBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMsXG59IGZyb20gJy4vbW9kZWxzJ1xuXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tICcuLi91dGlscy91dWlkJ1xuaW1wb3J0IHsgZ2V0UGF0aE5hbWUgfSBmcm9tICcuLi91dGlscy9pbmRleCdcblxuaW1wb3J0IHsgU2luZ2xlUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9uL3NpbmdsZS1wcm9taXNlJ1xuaW1wb3J0IHsgd2VCdG9hIH0gZnJvbSAnLi4vdXRpbHMvYmFzZTY0J1xuaW1wb3J0IHsgaXNNcCB9IGZyb20gJy4uL3V0aWxzL21wJ1xuaW1wb3J0IHsgQXV0aE9wdGlvbnMgfSBmcm9tICcuLi9hdXRoL2FwaXMnXG5pbXBvcnQgeyBJQ2xvdWRiYXNlQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcydcbmltcG9ydCB7IGxhbmdFdmVudCB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuXG5jb25zdCBSZXF1ZXN0SWRIZWFkZXJOYW1lID0gJ3gtcmVxdWVzdC1pZCdcbmNvbnN0IERldmljZUlkSGVhZGVyTmFtZSA9ICd4LWRldmljZS1pZCdcbmNvbnN0IERldmljZUlkU2VjdGlvbk5hbWUgPSAnZGV2aWNlX2lkJ1xuXG5kZWNsYXJlIGNvbnN0IHd4OiBhbnlcblxuZXhwb3J0IGludGVyZmFjZSBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zIHtcbiAgZXJyb3I/OiBFcnJvclR5cGVcbiAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsXG4gIGVycm9yX3VyaT86IHN0cmluZyB8IG51bGxcbiAgZGV0YWlscz86IGFueSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiA8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICB0cnkge1xuICAgIC8vIE9iamVjdHMgbXVzdCBiZSBjb3BpZWQgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgZGF0YSBzdWNoIGFzIGJvZHkuXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKVxuICAgIGlmICghY29weU9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBjb3B5T3B0aW9ucy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICBpZiAoY29weU9wdGlvbnMuYm9keSAmJiB0eXBlb2YgY29weU9wdGlvbnMuYm9keSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvcHlPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShjb3B5T3B0aW9ucy5ib2R5KVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVJlc3VsdDogUmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGNvcHlPcHRpb25zKVxuICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlUmVzdWx0Lmpzb24oKVxuICAgIGlmIChqc29uUmVzcG9uc2U/LmVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ganNvblJlc3BvbnNlIGFzIFJlc3BvbnNlRXJyb3JcbiAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGpzb25SZXNwb25zZSBhcyBUXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICB9XG4gIH1cbiAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0b1Jlc3BvbnNlRXJyb3IgPSAoZXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBFcnJvciwgb3B0aW9ucz86IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMpOiBSZXNwb25zZUVycm9yID0+IHtcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3JcbiAgY29uc3QgZm9ybWF0T3B0aW9uczogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IGZvcm1hdE9wdGlvbnMuZXJyb3IgfHwgRXJyb3JUeXBlLkxPQ0FMLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGZvcm1hdE9wdGlvbnMuZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IubWVzc2FnZSxcbiAgICAgIGVycm9yX3VyaTogZm9ybWF0T3B0aW9ucy5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZXJyb3Iuc3RhY2ssXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZvcm1hdEVycm9yOiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zID0gZXJyb3IgfHwge31cbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IGZvcm1hdE9wdGlvbnMuZXJyb3IgfHwgZm9ybWF0RXJyb3IuZXJyb3IgfHwgRXJyb3JUeXBlLkxPQ0FMLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGZvcm1hdE9wdGlvbnMuZXJyb3JfZGVzY3JpcHRpb24gfHwgZm9ybWF0RXJyb3IuZXJyb3JfZGVzY3JpcHRpb24sXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpIHx8IGZvcm1hdEVycm9yLmVycm9yX3VyaSxcbiAgICAgIGRldGFpbHM6IGZvcm1hdE9wdGlvbnMuZGV0YWlscyB8fCBmb3JtYXRFcnJvci5kZXRhaWxzLFxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzcG9uc2VFcnJvclxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHJlcXVlc3QgaWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJlcXVlc3RJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gdXVpZHY0KClcbn1cblxuLyoqXG4gKiBEZWZhdWx0IFN0b3JhZ2UuXG4gKi9cbmNsYXNzIERlZmF1bHRTdG9yYWdlIGltcGxlbWVudHMgU2ltcGxlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiDnvJPlrZhrZXnnu5/kuIDkvb/nlKjlkI7nvIDljLrliIZcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBfZW52OiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihvcHRzPzogeyBlbnY6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5fZW52ID0gb3B0cz8uZW52IHx8ICcnXG4gIH1cbiAgLyoqXG4gICAqIEdldCBpdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBhc3luYyBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIGFzeW5jIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWAsIHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpdGVtIHN5bmMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIGdldEl0ZW1TeW5jKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICByZW1vdmVJdGVtU3luYyhrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgc2V0SXRlbVN5bmMoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWAsIHZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U3RvcmFnZSA9IG5ldyBEZWZhdWx0U3RvcmFnZSgpXG5cbmludGVyZmFjZSBMb2NhbENyZWRlbnRpYWxzT3B0aW9ucyB7XG4gIHRva2VuU2VjdGlvbk5hbWU6IHN0cmluZ1xuICBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG4gIGNsaWVudElkOiBzdHJpbmdcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGNyZWRlbnRpYWxzIGlzIGV4cGlyZWQuXG4gKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDcmVkZW50aWFsc0V4cGlyZWQoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogYm9vbGVhbiB7XG4gIGxldCBpc0V4cGlyZWQgPSB0cnVlXG4gIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCAmJiBjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgaXNFeHBpcmVkID0gY3JlZGVudGlhbHMuZXhwaXJlc19hdCA8IG5ldyBEYXRlKClcbiAgfVxuICByZXR1cm4gaXNFeHBpcmVkXG59XG5cbi8qKlxuICogTG9jYWwgY3JlZGVudGlhbHMuXG4gKiBMb2NhbCBjcmVkZW50aWFscywgd2l0aCBtZW1vcnkgY2FjaGUgYW5kIHN0b3JhZ2UgY2FjaGUuXG4gKiBJZiB0aGUgbWVtb3J5IGNhY2hlIGV4cGlyZXMsIHRoZSBzdG9yYWdlIGNhY2hlIGlzIGF1dG9tYXRpY2FsbHkgbG9hZGVkLlxuICovXG5jbGFzcyBMb2NhbENyZWRlbnRpYWxzIHtcbiAgcHJpdmF0ZSB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcblxuICBwcml2YXRlIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcblxuICBwcml2YXRlIGNsaWVudElkOiBzdHJpbmdcblxuICBwcml2YXRlIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IG51bGwgPSBudWxsXG4gIC8vIOadpeiHqmFjY2Vzc0tleeeahOi6q+S7ve+8jOS4jeaMgeS5heWMllxuICBwcml2YXRlIGFjY2Vzc0tleUNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IG51bGwgPSBudWxsXG5cbiAgcHJpdmF0ZSBzaW5nbGVQcm9taXNlOiBTaW5nbGVQcm9taXNlID0gbnVsbFxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0xvY2FsQ3JlZGVudGlhbHNPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMb2NhbENyZWRlbnRpYWxzT3B0aW9ucykge1xuICAgIHRoaXMudG9rZW5TZWN0aW9uTmFtZSA9IG9wdGlvbnMudG9rZW5TZWN0aW9uTmFtZVxuICAgIHRoaXMuc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZVxuICAgIHRoaXMuY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkXG4gICAgdGhpcy5zaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoeyBjbGllbnRJZDogdGhpcy5jbGllbnRJZCB9KVxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IG51bGxcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdG9yYWdlQ3JlZGVudGlhbHNTeW5jKCk6IENyZWRlbnRpYWxzIHwgbnVsbCB7XG4gICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IG51bGxcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gdGhpcy5zdG9yYWdlLmdldEl0ZW1TeW5jKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoY3JlZGVudGlhbHMuZXhwaXJlc19hdClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19pbikge1xuICAgICAgaWYgKCFjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIChjcmVkZW50aWFscy5leHBpcmVzX2luIC0gMzApICogMTAwMClcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUsIHRva2VuU3RyKVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0IGNyZWRlbnRpYWxzIGZyb20gYWNjZXNzS2V5XG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqL1xuICBwdWJsaWMgc2V0QWNjZXNzS2V5Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscykge1xuICAgIHRoaXMuYWNjZXNzS2V5Q3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ2dldENyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGlzQ3JlZGVudGlhbHNFeHBpcmVkKHRoaXMuY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIGNvbnN0IHsgY3JlZGVudGlhbHMsIGlzQWNjZXNzS2V5Q3JlZGVudGlhbHMgfSA9IGF3YWl0IHRoaXMuZ2V0U3RvcmFnZUNyZWRlbnRpYWxzKClcbiAgICAgICAgaWYgKGlzQWNjZXNzS2V5Q3JlZGVudGlhbHMpIHtcbiAgICAgICAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHNcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RvcmFnZSBjcmVkZW50aWFscy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzKCk6IFByb21pc2U8eyBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCBudWxsOyBpc0FjY2Vzc0tleUNyZWRlbnRpYWxzOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2dldFN0b3JhZ2VDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBudWxsXG4gICAgICBsZXQgaXNBY2Nlc3NLZXlDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgaWYgKCEhdG9rZW5TdHIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjcmVkZW50aWFscyA9IEpTT04ucGFyc2UodG9rZW5TdHIpXG4gICAgICAgICAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoY3JlZGVudGlhbHMuZXhwaXJlc19hdClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgICAgIGNyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVkZW50aWFscyA9IHRoaXMuYWNjZXNzS2V5Q3JlZGVudGlhbHMgfHwgbnVsbFxuICAgICAgICBpc0FjY2Vzc0tleUNyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY3JlZGVudGlhbHMsIGlzQWNjZXNzS2V5Q3JlZGVudGlhbHMgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBPQXV0aDJDbGllbnRcbiAqL1xuZXhwb3J0IGNsYXNzIE9BdXRoMkNsaWVudCBpbXBsZW1lbnRzIEF1dGhDbGllbnQge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmV0cnkgPSAyXG4gIHByaXZhdGUgc3RhdGljIG1pblJldHJ5ID0gMFxuICBwcml2YXRlIHN0YXRpYyBtYXhSZXRyeSA9IDVcbiAgcHJpdmF0ZSBzdGF0aWMgcmV0cnlJbnRlcnZhbCA9IDEwMDBcblxuICBwcml2YXRlIGFwaU9yaWdpbjogc3RyaW5nXG4gIHByaXZhdGUgYXBpUGF0aDogc3RyaW5nXG4gIHByaXZhdGUgY2xpZW50SWQ6IHN0cmluZ1xuICBwcml2YXRlIGkxOG46IElDbG91ZGJhc2VDb25maWdbJ2kxOG4nXVxuICBwcml2YXRlIHJldHJ5OiBudW1iZXJcbiAgcHJpdmF0ZSBjbGllbnRTZWNyZXQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiYXNlUmVxdWVzdDogPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VD5cbiAgcHJpdmF0ZSBsb2NhbENyZWRlbnRpYWxzOiBMb2NhbENyZWRlbnRpYWxzXG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBwcml2YXRlIGRldmljZUlEPzogc3RyaW5nXG4gIHByaXZhdGUgdG9rZW5JblVSTD86IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5GdW5jOiAocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzPlxuICBwcml2YXRlIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG51bGxcbiAgcHJpdmF0ZSBhbm9ueW1vdXNTaWduSW5GdW5jOiAoQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHMgfCB2b2lkPlxuICBwcml2YXRlIHd4Q2xvdWQ6IGFueVxuICBwcml2YXRlIHVzZVd4Q2xvdWQ6IGJvb2xlYW5cbiAgcHJpdmF0ZSBiYXNpY0F1dGg6IHN0cmluZ1xuICBwcml2YXRlIG9uQ3JlZGVudGlhbHNFcnJvcjogQXV0aE9wdGlvbnNbJ29uQ3JlZGVudGlhbHNFcnJvciddIHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7T0F1dGgyQ2xpZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT0F1dGgyQ2xpZW50T3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5jbGllbnRTZWNyZXQpIHtcbiAgICAgIG9wdGlvbnMuY2xpZW50U2VjcmV0ID0gJydcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuY2xpZW50SWQgJiYgb3B0aW9ucy5lbnYpIHtcbiAgICAgIG9wdGlvbnMuY2xpZW50SWQgPSBvcHRpb25zLmVudlxuICAgIH1cblxuICAgIHRoaXMuYXBpT3JpZ2luID0gb3B0aW9ucy5hcGlPcmlnaW5cbiAgICB0aGlzLmFwaVBhdGggPSBvcHRpb25zLmFwaVBhdGggfHwgQVVUSF9BUElfUFJFRklYXG4gICAgdGhpcy5jbGllbnRJZCA9IG9wdGlvbnMuY2xpZW50SWRcbiAgICB0aGlzLmkxOG4gPSBvcHRpb25zLmkxOG5cbiAgICB0aGlzLnNpbmdsZVByb21pc2UgPSBuZXcgU2luZ2xlUHJvbWlzZSh7IGNsaWVudElkOiB0aGlzLmNsaWVudElkIH0pXG4gICAgdGhpcy5yZXRyeSA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgT0F1dGgyQ2xpZW50LmRlZmF1bHRSZXRyeSlcbiAgICBpZiAob3B0aW9ucy5iYXNlUmVxdWVzdCkge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IG9wdGlvbnMuYmFzZVJlcXVlc3RcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IGRlZmF1bHRSZXF1ZXN0XG4gICAgfVxuICAgIHRoaXMudG9rZW5JblVSTCA9IG9wdGlvbnMudG9rZW5JblVSTFxuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVyc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2UgfHwgZGVmYXVsdFN0b3JhZ2VcbiAgICB0aGlzLmxvY2FsQ3JlZGVudGlhbHMgPSBuZXcgTG9jYWxDcmVkZW50aWFscyh7XG4gICAgICB0b2tlblNlY3Rpb25OYW1lOiBgY3JlZGVudGlhbHNfJHtvcHRpb25zLmNsaWVudElkfWAsXG4gICAgICBzdG9yYWdlOiB0aGlzLnN0b3JhZ2UsXG4gICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZCxcbiAgICB9KVxuXG4gICAgdGhpcy5jbGllbnRTZWNyZXQgPSBvcHRpb25zLmNsaWVudFNlY3JldFxuICAgIGlmIChvcHRpb25zLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmJhc2ljQXV0aCA9IGBCYXNpYyAke3dlQnRvYShgJHtvcHRpb25zLmNsaWVudElkfToke3RoaXMuY2xpZW50U2VjcmV0fWApfWBcbiAgICB9XG4gICAgdGhpcy53eENsb3VkID0gb3B0aW9ucy53eENsb3VkXG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc01wKCkpIHtcbiAgICAgICAgdGhpcy51c2VXeENsb3VkID0gb3B0aW9ucy51c2VXeENsb3VkXG4gICAgICAgIGlmICh0aGlzLnd4Q2xvdWQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmVudikge1xuICAgICAgICAgIHd4LmNsb3VkLmluaXQoeyBlbnY6IG9wdGlvbnMuZW52IH0pXG4gICAgICAgICAgdGhpcy53eENsb3VkID0gd3guY2xvdWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvL1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hUb2tlbkZ1bmMgPSBvcHRpb25zLnJlZnJlc2hUb2tlbkZ1bmMgfHwgdGhpcy5kZWZhdWx0UmVmcmVzaFRva2VuRnVuY1xuICAgIHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYyA9IG9wdGlvbnMuYW5vbnltb3VzU2lnbkluRnVuY1xuICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yID0gb3B0aW9ucy5vbkNyZWRlbnRpYWxzRXJyb3JcblxuICAgIGxhbmdFdmVudC5idXMub24obGFuZ0V2ZW50LkxBTkdfQ0hBTkdFX0VWRU5ULCAocGFyYW1zKSA9PiB7XG4gICAgICB0aGlzLmkxOG4gPSBwYXJhbXMuZGF0YT8uaTE4biB8fCB0aGlzLmkxOG5cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHVibGljIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIHNldCBjcmVkZW50aWFscyBmcm9tIGFjY2Vzc0tleVxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIHNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIGdldEFjY2Vzc1Rva2VuIHJldHVybiBhIHZhbGlkYXRlIGFjY2VzcyB0b2tlblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKGNyZWRlbnRpYWxzPy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMuYWNjZXNzX3Rva2VuKVxuICAgIH1cbiAgICBjb25zdCByZXNwRXJyOiBSZXNwb25zZUVycm9yID0geyBlcnJvcjogRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BFcnIpXG4gIH1cblxuICAvKipcbiAgICogcmVxdWVzdCBodHRwIGxpa2Ugc2ltcGxlIGZldGNoIGFwaSwgZXhwOnJlcXVlc3QoJy92MS91c2VyL21lJywge3dpdGhDcmVkZW50aWFsczp0cnVlfSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0F1dGhDbGllbnRSZXF1ZXN0T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cbiAgICBjb25zdCByZXRyeTogbnVtYmVyID0gdGhpcy5mb3JtYXRSZXRyeShvcHRpb25zLnJldHJ5LCB0aGlzLnJldHJ5KVxuICAgIG9wdGlvbnMuaGVhZGVycyA9IHsgLi4ub3B0aW9ucy5oZWFkZXJzLCBbdGhpcy5pMThuPy5MQU5HX0hFQURFUl9LRVldOiB0aGlzLmkxOG4/LmxhbmcgfVxuICAgIGlmICh0aGlzLmhlYWRlcnMpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnNbUmVxdWVzdElkSGVhZGVyTmFtZV0gPSBnZW5lcmF0ZVJlcXVlc3RJZCgpXG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzW0RldmljZUlkSGVhZGVyTmFtZV0pIHtcbiAgICAgIGNvbnN0IGRldmljZUlkID0gYXdhaXQgdGhpcy5nZXREZXZpY2VJZCgpXG4gICAgICBvcHRpb25zLmhlYWRlcnNbRGV2aWNlSWRIZWFkZXJOYW1lXSA9IGRldmljZUlkXG4gICAgfVxuICAgIGlmIChvcHRpb25zPy53aXRoQmFzaWNBdXRoICYmIHRoaXMuYmFzaWNBdXRoKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IHRoaXMuYmFzaWNBdXRoXG4gICAgfVxuICAgIGlmIChvcHRpb25zPy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5JblVSTCkge1xuICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xuICAgICAgICAgICAgdXJsICs9ICc/J1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cmwgKz0gYGFjY2Vzc190b2tlbj0ke2NyZWRlbnRpYWxzLmFjY2Vzc190b2tlbn1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHtjcmVkZW50aWFscy50b2tlbl90eXBlfSAke2NyZWRlbnRpYWxzLmFjY2Vzc190b2tlbn1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY2xpZW50SWQgJiYgdXJsLmluZGV4T2YoJ2NsaWVudF9pZCcpIDwgMCkge1xuICAgICAgICB1cmwgKz0gdXJsLmluZGV4T2YoJz8nKSA8IDAgPyAnPycgOiAnJidcbiAgICAgICAgdXJsICs9IGBjbGllbnRfaWQ9JHt0aGlzLmNsaWVudElkfWBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHVybCA9IGAke3RoaXMuYXBpT3JpZ2lufSR7dGhpcy5hcGlQYXRofSR7dXJsfWBcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlOiBUIHwgbnVsbCA9IG51bGxcbiAgICBjb25zdCBtYXhSZXF1ZXN0VGltZXM6IG51bWJlciA9IHJldHJ5ICsgMVxuICAgIGZvciAobGV0IHJlcXVlc3RUaW1lID0gMDsgcmVxdWVzdFRpbWUgPCBtYXhSZXF1ZXN0VGltZXM7IHJlcXVlc3RUaW1lKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZVd4Q2xvdWQgfHwgdGhpcy51c2VXeENsb3VkKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnd4Q2xvdWRDYWxsRnVuY3Rpb248VD4odXJsLCBvcHRpb25zKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iYXNlUmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH0gY2F0Y2ggKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMud2l0aENyZWRlbnRpYWxzICYmIHJlc3BvbnNlRXJyb3IgJiYgcmVzcG9uc2VFcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2VFcnJvcilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXF1ZXN0VGltZSA9PT0gcmV0cnkgfHwgIXJlc3BvbnNlRXJyb3IgfHwgcmVzcG9uc2VFcnJvci5lcnJvciAhPT0gJ3VucmVhY2hhYmxlJykge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNsZWVwKE9BdXRoMkNsaWVudC5yZXRyeUludGVydmFsKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB3eENsb3VkQ2FsbEZ1bmN0aW9uPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIGxldCB1c2VyQWdlbnQgPSAnJ1xuICAgICAgdHJ5IHtcbiAgICAgICAgdXNlckFnZW50ID0gYXdhaXQgd3guZ2V0UmVuZGVyZXJVc2VyQWdlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICBjb25zdCB7IHJlc3VsdDogcmVzcG9uc2VSZXN1bHQgfSA9IGF3YWl0IHRoaXMud3hDbG91ZC5jYWxsRnVuY3Rpb24oe1xuICAgICAgICBuYW1lOiAnaHR0cE92ZXJDYWxsRnVuY3Rpb24nLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgb3JpZ2luOiAnaHR0cHM6Ly9zZXJ2aWNld2VjaGF0LmNvbScsXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6IHVzZXJBZ2VudCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChyZXNwb25zZVJlc3VsdD8uYm9keT8uZXJyb3JfY29kZSkge1xuICAgICAgICByZXNwb25zZUVycm9yID0gcmVzcG9uc2VSZXN1bHQ/LmJvZHkgYXMgUmVzcG9uc2VFcnJvclxuICAgICAgICByZXNwb25zZUVycm9yLmVycm9yX3VyaSA9IGdldFBhdGhOYW1lKHVybClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlUmVzdWx0Py5ib2R5IGFzIFRcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIGVycm9yX3VyaTogZ2V0UGF0aE5hbWUodXJsKSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdjcmVkZW50aWFscyBub3QgZm91bmQnXG4gICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihtc2cpXG4gICAgfVxuICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFscykpIHtcbiAgICAgIGlmIChjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihjcmVkZW50aWFscylcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoY3JlZGVudGlhbHMuc2NvcGUgPT09ICdhbm9ueW1vdXMnKSB7XG4gICAgICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuYW5vbnltb3VzTG9naW4oY3JlZGVudGlhbHMpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2c6IGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uIH0pXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNyZWRlbnRpYWxzLnNjb3BlID09PSAnYW5vbnltb3VzJykge1xuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuYW5vbnltb3VzTG9naW4oY3JlZGVudGlhbHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtc2cgPSAnbm8gcmVmcmVzaCB0b2tlbiBmb3VuZCBpbiBjcmVkZW50aWFscydcbiAgICAgICAgdGhpcy5vbkNyZWRlbnRpYWxzRXJyb3I/Lih7IG1zZyB9KVxuICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihtc2cpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIOW6n+W8g+aOpeWPo++8jOWLv+eUqC4g5aaC6ZyA6I635Y+W5Yet6K+B5L+h5oGv6K+35L2/55SoIGdldENyZWRlbnRpYWxzIOaWueazlVxuICAgKi9cbiAgcHVibGljIGdldENyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRTdG9yYWdlQ3JlZGVudGlhbHNTeW5jKClcbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFsc0FzeW5jKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjb3BlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBtc2cgPSAnY3JlZGVudGlhbHMgbm90IGZvdW5kJ1xuICAgICAgdGhpcy5vbkNyZWRlbnRpYWxzRXJyb3I/Lih7IG1zZyB9KVxuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHMuc2NvcGVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgbXNnID0gJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCdcbiAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKG1zZylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLmdyb3Vwc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggZXhwaXJlZCB0b2tlbi5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX3JlZnJlc2hUb2tlbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgIWNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgY29uc3QgbXNnID0gJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnXG4gICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5GdW5jKGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4sIGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uXG4gICAgICAgICAgdGhpcy5vbkNyZWRlbnRpYWxzRXJyb3I/Lih7IG1zZyB9KVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKG1zZylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnOiBlcnJvci5lcnJvcl9kZXNjcmlwdGlvbiB9KVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYW5vbnltb3VzTG9naW4oY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19hbm9ueW1vdXNMb2dpbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmFub255bW91c1NpZ25JbkZ1bmMpIHtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYyhjcmVkZW50aWFscylcbiAgICAgICAgY3JlZGVudGlhbHMgPSBjIHx8IChhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5hbm9ueW1vdXNTaWduSW4oY3JlZGVudGlhbHMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgcmV0cnkgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZXRyeVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBwcml2YXRlIGNoZWNrUmV0cnkocmV0cnk6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICAgIGlmICh0eXBlb2YgcmV0cnkgIT09ICdudW1iZXInIHx8IHJldHJ5IDwgT0F1dGgyQ2xpZW50Lm1pblJldHJ5IHx8IHJldHJ5ID4gT0F1dGgyQ2xpZW50Lm1heFJldHJ5KSB7XG4gICAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ3dyb25nIG9wdGlvbnMgcGFyYW06IHJldHJ5JyxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIHJldHJ5XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHJldHJ5IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmV0cnlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWxlXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgZm9ybWF0UmV0cnkocmV0cnk6IG51bWJlciwgZGVmYXVsdFZhbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiByZXRyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jaGVja1JldHJ5KHJldHJ5KVxuICB9XG5cbiAgLyoqXG4gICAqIFNsZWVwLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSwgbXMpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBhbm9ueW1vdXMgc2lnbkluXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhbm9ueW1vdXNTaWduSW4oY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdfYW5vbnltb3VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5zY29wZSAhPT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ25vIGFub255bW91cyBpbiBjcmVkZW50aWFscycpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlcXVlc3QoQXBpVXJscy5BVVRIX1NJR05fSU5fQU5PTllNT1VTTFlfVVJMLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgd2l0aEJhc2ljQXV0aDogdHJ1ZSxcbiAgICAgICAgICBib2R5OiB7fSxcbiAgICAgICAgfSlcbiAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKVxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLklOVkFMSURfR1JBTlQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihlcnJvci5lcnJvcl9kZXNjcmlwdGlvbilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJlZnJlc2ggdG9rZW4gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlZmF1bHRSZWZyZXNoVG9rZW5GdW5jKHJlZnJlc2hUb2tlbj86IHN0cmluZywgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBpZiAocmVmcmVzaFRva2VuID09PSB1bmRlZmluZWQgfHwgcmVmcmVzaFRva2VuID09PSAnJykge1xuICAgICAgY29uc3QgbXNnID0gJ3JlZnJlc2ggdG9rZW4gbm90IGZvdW5kJ1xuICAgICAgdGhpcy5vbkNyZWRlbnRpYWxzRXJyb3I/Lih7IG1zZyB9KVxuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgIH1cblxuICAgIGxldCB1cmw6IHN0cmluZyA9IEFwaVVybHMuQVVUSF9UT0tFTl9VUkxcblxuICAgIGlmIChjcmVkZW50aWFscz8udmVyc2lvbiA9PT0gJ3YyJykge1xuICAgICAgdXJsID0gQXBpVXJsc1YyLkFVVEhfVE9LRU5fVVJMXG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIGNsaWVudF9pZDogdGhpcy5jbGllbnRJZCxcbiAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5jbGllbnRTZWNyZXQsXG4gICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHsgLi4ubmV3Q3JlZGVudGlhbHMsIHZlcnNpb246IGNyZWRlbnRpYWxzPy52ZXJzaW9uIHx8ICd2MScgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZXZpY2VJZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLmRldmljZUlEKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXZpY2VJRFxuICAgIH1cbiAgICBsZXQgZGV2aWNlSWQ6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKERldmljZUlkU2VjdGlvbk5hbWUpXG4gICAgaWYgKCEodHlwZW9mIGRldmljZUlkID09PSAnc3RyaW5nJyAmJiBkZXZpY2VJZC5sZW5ndGggPj0gMTYgJiYgZGV2aWNlSWQubGVuZ3RoIDw9IDQ4KSkge1xuICAgICAgZGV2aWNlSWQgPSB1dWlkdjQoKVxuICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0oRGV2aWNlSWRTZWN0aW9uTmFtZSwgZGV2aWNlSWQpXG4gICAgfVxuICAgIHRoaXMuZGV2aWNlSUQgPSBkZXZpY2VJZFxuICAgIHJldHVybiBkZXZpY2VJZFxuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB1bkF1dGhlbnRpY2F0ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJcbiAgICogQHJldHVybiB7UHJvbWlzZTxUPn1cbiAgICovXG4gIHByaXZhdGUgdW5BdXRoZW50aWNhdGVkRXJyb3I8VD4oZXJyPzogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcEVycjogUmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVELFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycixcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BFcnIpXG4gIH1cbn1cbiJdfQ==
@@ -53,4 +53,4 @@ var getPathName = function (url) {
53
53
  return '';
54
54
  };
55
55
  exports.getPathName = getPathName;
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUU8sSUFBTSxTQUFTLEdBQUcsVUFBQyxLQUFVO0lBQ2xDLElBQU0sS0FBSyxHQUFHLFVBQUMsV0FBZ0I7UUFDN0IsS0FBSyxJQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUU7WUFFdkIsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBQSxpQkFBUyxFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO2FBQ3pDO1NBQ0Y7UUFDRCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDLENBQUE7SUFFRCxJQUFNLElBQUksR0FBTSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTlILElBQ0U7UUFDRSxXQUFXO1FBQ1gsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixZQUFZO1FBQ1osYUFBYTtRQUNiLFlBQVk7UUFDWixhQUFhO1FBQ2IsY0FBYztRQUNkLGNBQWM7UUFDZCxlQUFlO1FBQ2YsZ0JBQWdCO0tBQ2pCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUNoQjtRQUNBLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO0tBQ3JCO0lBRUQsUUFBUSxJQUFJLEVBQUU7UUFDWixLQUFLLFFBQVE7WUFDWCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNELEtBQUssT0FBTztZQUNWLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2xCLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDbEMsS0FBSyxRQUFRO1lBQ1gsT0FBTyxJQUFJLE1BQU0sQ0FDZixLQUFLLENBQUMsTUFBTSxFQUNaLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQ3JCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQzdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQzVCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQ3pCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDL0IsQ0FBQTtRQUNIO1lBQ0UsT0FBTyxLQUFLLENBQUE7S0FDZjtBQUNILENBQUMsQ0FBQTtBQWxEWSxRQUFBLFNBQVMsYUFrRHJCO0FBRU0sSUFBTSxXQUFXLEdBQUcsVUFBQyxHQUFXO0lBRXJDLElBQU0sS0FBSyxHQUFHLHNDQUFzQyxDQUFBO0lBQ3BELElBQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFOUIsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7S0FDdEI7SUFFRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUMsQ0FBQTtBQVZZLFFBQUEsV0FBVyxlQVV2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5rex5ou36LSdXG4gKiBAcGFyYW0geyp9IHZhbHVlIOmcgOimgeaLt+i0neeahOWAvFxuICogQHJldHVybnMgeyp9IOa3seaLt+i0neWQjueahOWAvFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogeyBjOiAyIH0gfTtcbiAqIGNvbnN0IG5ld09iaiA9IGRlZXBDbG9uZShvYmopO1xuICovXG5leHBvcnQgY29uc3QgZGVlcENsb25lID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgY29uc3QgY2xvbmUgPSAoY29waWVkVmFsdWU6IGFueSkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb3BpZWRWYWx1ZVtrZXldID0gZGVlcENsb25lKHZhbHVlW2tleV0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3BpZWRWYWx1ZVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICAgIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyAnTnVsbE9yVW5kZWZpbmVkJyA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpXG5cbiAgaWYgKFxuICAgIFtcbiAgICAgICdJbnQ4QXJyYXknLFxuICAgICAgJ1VpbnQ4QXJyYXknLFxuICAgICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JyxcbiAgICAgICdJbnQxNkFycmF5JyxcbiAgICAgICdVaW50MTZBcnJheScsXG4gICAgICAnSW50MzJBcnJheScsXG4gICAgICAnVWludDMyQXJyYXknLFxuICAgICAgJ0Zsb2F0MzJBcnJheScsXG4gICAgICAnRmxvYXQ2NEFycmF5JyxcbiAgICAgICdCaWdJbnQ2NEFycmF5JyxcbiAgICAgICdCaWdVaW50NjRBcnJheScsXG4gICAgXS5pbmNsdWRlcyh0eXBlKVxuICApIHtcbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoKVxuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgIHJldHVybiBjbG9uZShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkpKVxuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHJldHVybiBjbG9uZShbXSlcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZS52YWx1ZU9mKCkpXG4gICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgICB2YWx1ZS5zb3VyY2UsXG4gICAgICAgICh2YWx1ZS5nbG9iYWwgPyAnZycgOiAnJylcbiAgICAgICAgICArICh2YWx1ZS5pZ25vcmVDYXNlID8gJ2knIDogJycpXG4gICAgICAgICAgKyAodmFsdWUubXVsdGlsaW5lID8gJ20nIDogJycpXG4gICAgICAgICAgKyAodmFsdWUuc3RpY2t5ID8gJ3knIDogJycpXG4gICAgICAgICAgKyAodmFsdWUudW5pY29kZSA/ICd1JyA6ICcnKSxcbiAgICAgIClcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBhdGhOYW1lID0gKHVybDogc3RyaW5nKSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICBjb25zdCByZWdleCA9IC9eKD86aHR0cChzKT86XFwvXFwvW15cXC9dKyk/KFxcL1teXFw/I10qKS9cbiAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpXG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzJdIHx8ICcnXG4gIH1cblxuICByZXR1cm4gJydcbn1cbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUU8sSUFBTSxTQUFTLEdBQUcsVUFBQyxLQUFVO0lBQ2xDLElBQU0sS0FBSyxHQUFHLFVBQUMsV0FBZ0I7UUFFN0IsS0FBSyxJQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUU7WUFFdkIsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBQSxpQkFBUyxFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO2FBQ3pDO1NBQ0Y7UUFDRCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDLENBQUE7SUFFRCxJQUFNLElBQUksR0FBTSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTlILElBQ0U7UUFDRSxXQUFXO1FBQ1gsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixZQUFZO1FBQ1osYUFBYTtRQUNiLFlBQVk7UUFDWixhQUFhO1FBQ2IsY0FBYztRQUNkLGNBQWM7UUFDZCxlQUFlO1FBQ2YsZ0JBQWdCO0tBQ2pCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUNoQjtRQUNBLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO0tBQ3JCO0lBRUQsUUFBUSxJQUFJLEVBQUU7UUFDWixLQUFLLFFBQVE7WUFDWCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNELEtBQUssT0FBTztZQUNWLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2xCLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDbEMsS0FBSyxRQUFRO1lBQ1gsT0FBTyxJQUFJLE1BQU0sQ0FDZixLQUFLLENBQUMsTUFBTSxFQUNaLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQ3JCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQzdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQzVCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQ3pCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDL0IsQ0FBQTtRQUNIO1lBQ0UsT0FBTyxLQUFLLENBQUE7S0FDZjtBQUNILENBQUMsQ0FBQTtBQW5EWSxRQUFBLFNBQVMsYUFtRHJCO0FBRU0sSUFBTSxXQUFXLEdBQUcsVUFBQyxHQUFXO0lBRXJDLElBQU0sS0FBSyxHQUFHLHNDQUFzQyxDQUFBO0lBQ3BELElBQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFOUIsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7S0FDdEI7SUFFRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUMsQ0FBQTtBQVZZLFFBQUEsV0FBVyxlQVV2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5rex5ou36LSdXG4gKiBAcGFyYW0geyp9IHZhbHVlIOmcgOimgeaLt+i0neeahOWAvFxuICogQHJldHVybnMgeyp9IOa3seaLt+i0neWQjueahOWAvFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogeyBjOiAyIH0gfTtcbiAqIGNvbnN0IG5ld09iaiA9IGRlZXBDbG9uZShvYmopO1xuICovXG5leHBvcnQgY29uc3QgZGVlcENsb25lID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgY29uc3QgY2xvbmUgPSAoY29waWVkVmFsdWU6IGFueSkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb3BpZWRWYWx1ZVtrZXldID0gZGVlcENsb25lKHZhbHVlW2tleV0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3BpZWRWYWx1ZVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICAgIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyAnTnVsbE9yVW5kZWZpbmVkJyA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpXG5cbiAgaWYgKFxuICAgIFtcbiAgICAgICdJbnQ4QXJyYXknLFxuICAgICAgJ1VpbnQ4QXJyYXknLFxuICAgICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JyxcbiAgICAgICdJbnQxNkFycmF5JyxcbiAgICAgICdVaW50MTZBcnJheScsXG4gICAgICAnSW50MzJBcnJheScsXG4gICAgICAnVWludDMyQXJyYXknLFxuICAgICAgJ0Zsb2F0MzJBcnJheScsXG4gICAgICAnRmxvYXQ2NEFycmF5JyxcbiAgICAgICdCaWdJbnQ2NEFycmF5JyxcbiAgICAgICdCaWdVaW50NjRBcnJheScsXG4gICAgXS5pbmNsdWRlcyh0eXBlKVxuICApIHtcbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoKVxuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgIHJldHVybiBjbG9uZShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkpKVxuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHJldHVybiBjbG9uZShbXSlcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZS52YWx1ZU9mKCkpXG4gICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgICB2YWx1ZS5zb3VyY2UsXG4gICAgICAgICh2YWx1ZS5nbG9iYWwgPyAnZycgOiAnJylcbiAgICAgICAgICArICh2YWx1ZS5pZ25vcmVDYXNlID8gJ2knIDogJycpXG4gICAgICAgICAgKyAodmFsdWUubXVsdGlsaW5lID8gJ20nIDogJycpXG4gICAgICAgICAgKyAodmFsdWUuc3RpY2t5ID8gJ3knIDogJycpXG4gICAgICAgICAgKyAodmFsdWUudW5pY29kZSA/ICd1JyA6ICcnKSxcbiAgICAgIClcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBhdGhOYW1lID0gKHVybDogc3RyaW5nKSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICBjb25zdCByZWdleCA9IC9eKD86aHR0cChzKT86XFwvXFwvW15cXC9dKyk/KFxcL1teXFw/I10qKS9cbiAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpXG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzJdIHx8ICcnXG4gIH1cblxuICByZXR1cm4gJydcbn1cbiJdfQ==
@@ -63,4 +63,4 @@ var MyURLSearchParams = (function () {
63
63
  return MyURLSearchParams;
64
64
  }());
65
65
  exports.default = MyURLSearchParams;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsU2VhcmNoUGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3VybFNlYXJjaFBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBO0lBR0UsMkJBQVksSUFBSTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDakI7YUFBTSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDM0MsS0FBSyxJQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3RCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7aUJBQzVCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFHRCxpQ0FBSyxHQUFMLFVBQU0sR0FBRztRQUFULGlCQU1DO1FBTEMsSUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztZQUNiLElBQUEsS0FBZSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUF0RCxHQUFHLFFBQUEsRUFBRSxLQUFLLFFBQTRDLENBQUE7WUFDN0QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBR0Qsa0NBQU0sR0FBTixVQUFPLEdBQUcsRUFBRSxLQUFLO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQ3BEO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDM0I7SUFDSCxDQUFDO0lBR0QsK0JBQUcsR0FBSCxVQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN0RCxDQUFDO0lBR0Qsa0NBQU0sR0FBTixVQUFPLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQy9CLENBQUM7SUFHRCxrQ0FBTSxHQUFOLFVBQU8sR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBR0QsK0JBQUcsR0FBSCxVQUFJLEdBQUc7UUFDTCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFHRCwrQkFBRyxHQUFILFVBQUksR0FBRyxFQUFFLEtBQUs7UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUdELG9DQUFRLEdBQVI7UUFDRSxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7Z0NBQ0wsR0FBRztZQUNaLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQUssTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRCxPQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO29CQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGNBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUUsQ0FBQyxDQUFBO2dCQUN2RSxDQUFDLENBQUMsQ0FBQTthQUNIOzs7UUFMSCxLQUFLLElBQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFsQixHQUFHO1NBTWI7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUNILHdCQUFDO0FBQUQsQ0FBQyxBQXZFRCxJQXVFQztBQUVELGtCQUFlLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDlhbzlrrnlsI/nqIvluo9cbiAqL1xuY2xhc3MgTXlVUkxTZWFyY2hQYXJhbXMge1xuICBwYXJhbXM6IHt9XG5cbiAgY29uc3RydWN0b3IoaW5pdCkge1xuICAgIHRoaXMucGFyYW1zID0ge31cbiAgICBpZiAodHlwZW9mIGluaXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnBhcnNlKGluaXQpXG4gICAgfSBlbHNlIGlmIChpbml0ICYmIHR5cGVvZiBpbml0ID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGluaXQsIGtleSkpIHtcbiAgICAgICAgICB0aGlzLmFwcGVuZChrZXksIGluaXRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOino+aekOafpeivouWtl+espuS4slxuICBwYXJzZShzdHIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzdHIuc3BsaXQoJyYnKVxuICAgIHBhcmFtcy5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFyYW0uc3BsaXQoJz0nKS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KVxuICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICB9KVxuICB9XG5cbiAgLy8g5re75Yqg5Y+C5pWwXG4gIGFwcGVuZChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMucGFyYW1zW2tleV0pIHtcbiAgICAgIHRoaXMucGFyYW1zW2tleV0gPSB0aGlzLnBhcmFtc1trZXldLmNvbmNhdChbdmFsdWVdKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmFtc1trZXldID0gW3ZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIC8vIOiOt+WPluWPguaVsOWAvO+8iOWNleS4quWAvO+8iVxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zW2tleV0gPyB0aGlzLnBhcmFtc1trZXldWzBdIDogbnVsbFxuICB9XG5cbiAgLy8g6I635Y+W5Y+C5pWw5YC877yI5omA5pyJ5YC877yJXG4gIGdldEFsbChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXNba2V5XSB8fCBbXVxuICB9XG5cbiAgLy8g5Yig6Zmk5Y+C5pWwXG4gIGRlbGV0ZShrZXkpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJhbXNba2V5XVxuICB9XG5cbiAgLy8g5qOA5p+l5Y+C5pWw5piv5ZCm5a2Y5ZyoXG4gIGhhcyhrZXkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLCBrZXkpXG4gIH1cblxuICAvLyDorr7nva7lj4LmlbDlgLxcbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICB0aGlzLnBhcmFtc1trZXldID0gW3ZhbHVlXVxuICB9XG5cbiAgLy8g6L+U5Zue5p+l6K+i5a2X56ym5LiyXG4gIHRvU3RyaW5nKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gW11cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBhcmFtcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnBhcmFtcywga2V5KSkge1xuICAgICAgICB0aGlzLnBhcmFtc1trZXldLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaXRlbXMucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcy5qb2luKCcmJylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNeVVSTFNlYXJjaFBhcmFtc1xuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsU2VhcmNoUGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3VybFNlYXJjaFBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBO0lBR0UsMkJBQVksSUFBSTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDakI7YUFBTSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFFM0MsS0FBSyxJQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3RCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7aUJBQzVCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFHRCxpQ0FBSyxHQUFMLFVBQU0sR0FBRztRQUFULGlCQU1DO1FBTEMsSUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztZQUNiLElBQUEsS0FBZSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUF0RCxHQUFHLFFBQUEsRUFBRSxLQUFLLFFBQTRDLENBQUE7WUFDN0QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBR0Qsa0NBQU0sR0FBTixVQUFPLEdBQUcsRUFBRSxLQUFLO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQ3BEO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDM0I7SUFDSCxDQUFDO0lBR0QsK0JBQUcsR0FBSCxVQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN0RCxDQUFDO0lBR0Qsa0NBQU0sR0FBTixVQUFPLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQy9CLENBQUM7SUFHRCxrQ0FBTSxHQUFOLFVBQU8sR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBR0QsK0JBQUcsR0FBSCxVQUFJLEdBQUc7UUFDTCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFHRCwrQkFBRyxHQUFILFVBQUksR0FBRyxFQUFFLEtBQUs7UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUdELG9DQUFRLEdBQVI7UUFDRSxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7Z0NBRUwsR0FBRztZQUNaLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQUssTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRCxPQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO29CQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGNBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUUsQ0FBQyxDQUFBO2dCQUN2RSxDQUFDLENBQUMsQ0FBQTthQUNIOzs7UUFMSCxLQUFLLElBQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFsQixHQUFHO1NBTWI7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUNILHdCQUFDO0FBQUQsQ0FBQyxBQXpFRCxJQXlFQztBQUVELGtCQUFlLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDlhbzlrrnlsI/nqIvluo9cbiAqL1xuY2xhc3MgTXlVUkxTZWFyY2hQYXJhbXMge1xuICBwYXJhbXM6IHt9XG5cbiAgY29uc3RydWN0b3IoaW5pdCkge1xuICAgIHRoaXMucGFyYW1zID0ge31cbiAgICBpZiAodHlwZW9mIGluaXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnBhcnNlKGluaXQpXG4gICAgfSBlbHNlIGlmIChpbml0ICYmIHR5cGVvZiBpbml0ID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbml0KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5pdCwga2V5KSkge1xuICAgICAgICAgIHRoaXMuYXBwZW5kKGtleSwgaW5pdFtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g6Kej5p6Q5p+l6K+i5a2X56ym5LiyXG4gIHBhcnNlKHN0cikge1xuICAgIGNvbnN0IHBhcmFtcyA9IHN0ci5zcGxpdCgnJicpXG4gICAgcGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJhbS5zcGxpdCgnPScpLm1hcChkZWNvZGVVUklDb21wb25lbnQpXG4gICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgIH0pXG4gIH1cblxuICAvLyDmt7vliqDlj4LmlbBcbiAgYXBwZW5kKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5wYXJhbXNba2V5XSkge1xuICAgICAgdGhpcy5wYXJhbXNba2V5XSA9IHRoaXMucGFyYW1zW2tleV0uY29uY2F0KFt2YWx1ZV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyYW1zW2tleV0gPSBbdmFsdWVdXG4gICAgfVxuICB9XG5cbiAgLy8g6I635Y+W5Y+C5pWw5YC877yI5Y2V5Liq5YC877yJXG4gIGdldChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXNba2V5XSA/IHRoaXMucGFyYW1zW2tleV1bMF0gOiBudWxsXG4gIH1cblxuICAvLyDojrflj5blj4LmlbDlgLzvvIjmiYDmnInlgLzvvIlcbiAgZ2V0QWxsKGtleSkge1xuICAgIHJldHVybiB0aGlzLnBhcmFtc1trZXldIHx8IFtdXG4gIH1cblxuICAvLyDliKDpmaTlj4LmlbBcbiAgZGVsZXRlKGtleSkge1xuICAgIGRlbGV0ZSB0aGlzLnBhcmFtc1trZXldXG4gIH1cblxuICAvLyDmo4Dmn6Xlj4LmlbDmmK/lkKblrZjlnKhcbiAgaGFzKGtleSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsIGtleSlcbiAgfVxuXG4gIC8vIOiuvue9ruWPguaVsOWAvFxuICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMucGFyYW1zW2tleV0gPSBbdmFsdWVdXG4gIH1cblxuICAvLyDov5Tlm57mn6Xor6LlrZfnrKbkuLJcbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3QgaXRlbXMgPSBbXVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGFyYW1zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLCBrZXkpKSB7XG4gICAgICAgIHRoaXMucGFyYW1zW2tleV0uZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zLmpvaW4oJyYnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE15VVJMU2VhcmNoUGFyYW1zXG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/oauth",
3
- "version": "2.22.1",
3
+ "version": "2.22.2",
4
4
  "description": "cloudbase javascript sdk auth componets",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -19,16 +19,16 @@
19
19
  "precommit": "npm run lint"
20
20
  },
21
21
  "dependencies": {
22
- "@cloudbase/utilities": "2.22.1"
22
+ "@cloudbase/utilities": "2.22.2"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@babel/preset-env": "^7.25.3",
26
- "@cloudbase/types": "2.22.1",
26
+ "@cloudbase/types": "2.22.2",
27
27
  "@types/node": "^22.5.4",
28
28
  "terser-webpack-plugin": "^3.0.2",
29
29
  "ts-loader": "^9.5.1",
30
30
  "webpack-bundle-analyzer": "^4.9.1"
31
31
  },
32
32
  "license": "Apache-2.0",
33
- "gitHead": "46ebb16422f02fb8cef279ad16d590ad6115abe1"
33
+ "gitHead": "7e8ca8a2f3834924a14320c383e671cada829d19"
34
34
  }
package/src/auth/apis.ts CHANGED
@@ -367,6 +367,7 @@ export class Auth {
367
367
  * @return {Promise<GenProviderRedirectUriResponse>} A Promise<GenProviderRedirectUriResponse> object.
368
368
  */
369
369
  public async genProviderRedirectUri(params: GenProviderRedirectUriRequest): Promise<GenProviderRedirectUriResponse> {
370
+ // eslint-disable-next-line @typescript-eslint/naming-convention
370
371
  const { provider_redirect_uri: redirect_uri, other_params: otherParams = {}, ...restParams } = params
371
372
  if (redirect_uri && !restParams.redirect_uri) {
372
373
  restParams.redirect_uri = redirect_uri
@@ -918,6 +919,7 @@ export class Auth {
918
919
  }
919
920
 
920
921
  let publicKey = ''
922
+ // eslint-disable-next-line @typescript-eslint/naming-convention
921
923
  let public_key_thumbprint = ''
922
924
 
923
925
  try {
@@ -1014,6 +1016,7 @@ export class Auth {
1014
1016
  */
1015
1017
  public async modifyPassword(params: ModifyUserBasicInfoRequest): Promise<void> {
1016
1018
  let publicKey = ''
1019
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1017
1020
  let public_key_thumbprint = ''
1018
1021
 
1019
1022
  const encryptUtils = getEncryptUtils(true, this.config.adapter)
@@ -1034,7 +1037,9 @@ export class Auth {
1034
1037
  throw error
1035
1038
  }
1036
1039
 
1040
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1037
1041
  const encrypt_password = params.password ? encryptUtils.getEncryptInfo({ publicKey, payload: params.password }) : ''
1042
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1038
1043
  const encrypt_new_password = encryptUtils.getEncryptInfo({ publicKey, payload: params.new_password })
1039
1044
  return this.config.request(ApiUrls.USER_BASIC_EDIT_URL, {
1040
1045
  method: 'POST',
@@ -1055,6 +1060,7 @@ export class Auth {
1055
1060
  */
1056
1061
  public async modifyPasswordWithoutLogin(params: ModifyPasswordWithoutLoginRequest): Promise<void> {
1057
1062
  let publicKey = ''
1063
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1058
1064
  let public_key_thumbprint = ''
1059
1065
 
1060
1066
  const encryptUtils = getEncryptUtils(true, this.config.adapter)
@@ -1075,7 +1081,9 @@ export class Auth {
1075
1081
  throw error
1076
1082
  }
1077
1083
 
1084
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1078
1085
  const encrypt_password = params.password ? encryptUtils.getEncryptInfo({ publicKey, payload: params.password }) : ''
1086
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1079
1087
  const encrypt_new_password = encryptUtils.getEncryptInfo({ publicKey, payload: params.new_password })
1080
1088
  return this.config.request(ApiUrlsV2.AUTH_RESET_PASSWORD, {
1081
1089
  method: 'POST',
@@ -175,6 +175,7 @@ export class Captcha {
175
175
  expires_in?: number
176
176
  }
177
177
  if (!this.isMatch() && !isInMpWebView()) {
178
+ // eslint-disable-next-line @typescript-eslint/naming-convention
178
179
  const redirect_uri = `${window.location.origin + window.location.pathname}?__captcha=on`
179
180
  captchaTokenResp = await this.config.request<GetCaptchaResponse>(ApiUrls.GET_CAPTCHA_URL, {
180
181
  method: 'POST',
package/src/index.ts CHANGED
@@ -13,6 +13,7 @@ export class CloudbaseOAuth {
13
13
  public authApi: Auth
14
14
 
15
15
  constructor(authOptions: AuthOptions) {
16
+ // eslint-disable-next-line max-len
16
17
  const { apiOrigin, apiPath = AUTH_API_PREFIX, clientId, env, storage, request, baseRequest, anonymousSignInFunc, wxCloud, adapter, onCredentialsError, headers, i18n, useWxCloud } = authOptions
17
18
  this.oauth2client = new OAuth2Client({
18
19
  apiOrigin,
@@ -106,6 +106,7 @@ class DefaultStorage implements SimpleStorage {
106
106
  /**
107
107
  * 缓存key统一使用后缀区分
108
108
  */
109
+ // eslint-disable-next-line @typescript-eslint/naming-convention
109
110
  private readonly _env: string
110
111
 
111
112
  constructor(opts?: { env: string }) {
@@ -8,6 +8,7 @@
8
8
  */
9
9
  export const deepClone = (value: any) => {
10
10
  const clone = (copiedValue: any) => {
11
+ // eslint-disable-next-line no-restricted-syntax
11
12
  for (const key in value) {
12
13
  // eslint-disable-next-line no-prototype-builtins
13
14
  if (value.hasOwnProperty(key)) {
@@ -9,6 +9,7 @@ class MyURLSearchParams {
9
9
  if (typeof init === 'string') {
10
10
  this.parse(init)
11
11
  } else if (init && typeof init === 'object') {
12
+ // eslint-disable-next-line no-restricted-syntax
12
13
  for (const key in init) {
13
14
  if (Object.prototype.hasOwnProperty.call(init, key)) {
14
15
  this.append(key, init[key])
@@ -63,6 +64,7 @@ class MyURLSearchParams {
63
64
  // 返回查询字符串
64
65
  toString() {
65
66
  const items = []
67
+ // eslint-disable-next-line no-restricted-syntax
66
68
  for (const key in this.params) {
67
69
  if (Object.prototype.hasOwnProperty.call(this.params, key)) {
68
70
  this.params[key].forEach((value) => {
package/tsconfig.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "extends": "../../tsconfig.base.json",
3
3
  "compilerOptions": {
4
+ "module": "node16",
4
5
  "outDir": "dist/cjs",
5
6
  "rootDir": "src",
6
7
  "noImplicitAny": false,
7
8
  "typeRoots": ["node_modules/@types"],
8
- "types": ["node"]
9
+ "types": ["node"],
10
+ "declarationDir": "dist/types",
9
11
  },
10
12
  "include": ["src/**/*.ts", "package.json"],
11
13
  "exclude": ["node_modules", "dist"]
@@ -1,123 +0,0 @@
1
- import { GetVerificationRequest, GetVerificationResponse, UserProfile, UserInfo, SignInRequest, SignUpRequest, VerifyRequest, VerifyResponse, GenProviderRedirectUriRequest, GenProviderRedirectUriResponse, GrantProviderTokenRequest, GrantProviderTokenResponse, PatchProviderTokenRequest, PatchProviderTokenResponse, SignInWithProviderRequest, SignInCustomRequest, BindWithProviderRequest, TransByProviderRequest, GrantTokenRequest, UnbindProviderRequest, CheckPasswordRequest, SetPasswordRequest, ChangeBoundProviderRequest, ChangeBoundProviderResponse, UpdatePasswordRequest, SudoResponse, SudoRequest, GetCustomSignTicketFn, QueryUserProfileRequest, QueryUserProfileResponse, ResetPasswordRequest, DeviceAuthorizeRequest, DeviceAuthorizeResponse, CheckUsernameRequest, CheckIfUserExistRequest, CheckIfUserExistResponse, WithSudoRequest, PublicKey, EncryptParams, ProviderSubType, GetMiniProgramQrCodeRequest, GetMiniProgramQrCodeStatusRequest, GetMiniProgramQrCodeResponse, GetMiniProgramQrCodeStatusResponse, ModifyUserBasicInfoRequest, EditContactRequest, AuthorizeInfoRequest, AuthorizeInfoResponse, AuthorizeDeviceRequest, AuthorizeRequest, AuthorizeResponse, GetUserBehaviorLog, GetUserBehaviorLogRes, RevokeDeviceRequest, SignoutReponse, ProvidersResponse, SignoutRequest, ModifyPasswordWithoutLoginRequest } from './models';
2
- import { SimpleStorage, RequestFunction } from '../oauth2client/interface';
3
- import { OAuth2Client } from '../oauth2client/oauth2client';
4
- import { Credentials } from '../oauth2client/models';
5
- import { CaptchaOptions } from '../captcha/captcha';
6
- import { SDKAdapterInterface } from '@cloudbase/adapter-interface';
7
- import { ICloudbaseConfig } from '@cloudbase/types';
8
- export interface AuthOptions {
9
- apiOrigin: string;
10
- apiPath?: string;
11
- clientId: string;
12
- clientSecret?: string;
13
- credentialsClient?: OAuth2Client;
14
- request?: RequestFunction;
15
- baseRequest?: RequestFunction;
16
- storage?: SimpleStorage;
17
- anonymousSignInFunc?: (Credentials: any) => Promise<Credentials | void>;
18
- captchaOptions?: Partial<CaptchaOptions>;
19
- env?: string;
20
- wxCloud?: any;
21
- adapter?: SDKAdapterInterface;
22
- onCredentialsError?: (data: {
23
- msg: string;
24
- eventType?: 'credentials_error';
25
- }) => void;
26
- headers?: {
27
- [key: string]: string;
28
- };
29
- i18n?: ICloudbaseConfig['i18n'];
30
- useWxCloud?: boolean;
31
- }
32
- export declare class Auth {
33
- private static parseParamsToSearch;
34
- private config;
35
- private getCustomSignTicketFn?;
36
- constructor(opts: AuthOptions);
37
- getParamsByVersion(params: any, key: string): {
38
- params: any;
39
- url: any;
40
- };
41
- signIn(params: SignInRequest): Promise<Credentials>;
42
- signInAnonymously(data?: {
43
- provider_token?: string;
44
- }, useWxCloud?: boolean): Promise<Credentials>;
45
- signUp(params: SignUpRequest): Promise<Credentials>;
46
- signOut(params?: SignoutRequest): Promise<SignoutReponse>;
47
- revokeAllDevices(): Promise<void>;
48
- revokeDevice(params: RevokeDeviceRequest): Promise<void>;
49
- getVerification(params: GetVerificationRequest, options?: {
50
- withCaptcha: boolean;
51
- }): Promise<GetVerificationResponse>;
52
- verify(params: VerifyRequest): Promise<VerifyResponse>;
53
- genProviderRedirectUri(params: GenProviderRedirectUriRequest): Promise<GenProviderRedirectUriResponse>;
54
- grantProviderToken(params: GrantProviderTokenRequest, useWxCloud?: boolean): Promise<GrantProviderTokenResponse>;
55
- patchProviderToken(params: PatchProviderTokenRequest): Promise<PatchProviderTokenResponse>;
56
- signInWithProvider(params: SignInWithProviderRequest, useWxCloud?: boolean): Promise<Credentials>;
57
- signInCustom(params: SignInCustomRequest): Promise<Credentials>;
58
- signInWithWechat(params?: any): Promise<Credentials>;
59
- bindWithProvider(params: BindWithProviderRequest): Promise<void>;
60
- getUserProfile(params: {
61
- version?: string;
62
- }): Promise<UserProfile>;
63
- getUserInfo(params?: {
64
- version?: string;
65
- query?: string;
66
- }): Promise<UserInfo>;
67
- getWedaUserInfo(): Promise<any>;
68
- deleteMe(params: WithSudoRequest): Promise<UserProfile>;
69
- hasLoginState(): Promise<boolean>;
70
- hasLoginStateSync(): Credentials | null;
71
- getLoginState(): Promise<Credentials | null>;
72
- transByProvider(params: TransByProviderRequest): Promise<Credentials>;
73
- grantToken(params: GrantTokenRequest): Promise<Credentials>;
74
- getProviders(): Promise<ProvidersResponse>;
75
- unbindProvider(params: UnbindProviderRequest): Promise<void>;
76
- checkPassword(params: CheckPasswordRequest): Promise<void>;
77
- editContact(params: EditContactRequest): Promise<void>;
78
- setPassword(params: SetPasswordRequest): Promise<void>;
79
- updatePasswordByOld(params: UpdatePasswordRequest): Promise<void>;
80
- sudo(params: SudoRequest): Promise<SudoResponse>;
81
- sendVerificationCodeToCurrentUser(params: GetVerificationRequest): Promise<GetVerificationResponse>;
82
- changeBoundProvider(params: ChangeBoundProviderRequest): Promise<ChangeBoundProviderResponse>;
83
- setUserProfile(params: UserProfile): Promise<UserProfile>;
84
- updateUserBasicInfo(params: ModifyUserBasicInfoRequest): Promise<void>;
85
- queryUserProfile(params: QueryUserProfileRequest): Promise<QueryUserProfileResponse>;
86
- setCustomSignFunc(getTickFn: GetCustomSignTicketFn): void;
87
- signInWithCustomTicket(): Promise<Credentials>;
88
- resetPassword(params: ResetPasswordRequest): Promise<void>;
89
- authorize(params: AuthorizeRequest): Promise<AuthorizeResponse>;
90
- authorizeDevice(params: AuthorizeDeviceRequest): Promise<void>;
91
- deviceAuthorize(params: DeviceAuthorizeRequest): Promise<DeviceAuthorizeResponse>;
92
- authorizeInfo(params: AuthorizeInfoRequest): Promise<AuthorizeInfoResponse>;
93
- checkUsername(params: CheckUsernameRequest): Promise<void>;
94
- checkIfUserExist(params: CheckIfUserExistRequest): Promise<CheckIfUserExistResponse>;
95
- loginScope(): Promise<string>;
96
- loginGroups(): Promise<string[]>;
97
- refreshTokenForce(params: {
98
- version?: string;
99
- }): Promise<Credentials>;
100
- getCredentials(): Promise<Credentials>;
101
- getPublicKey(): Promise<PublicKey>;
102
- getEncryptParams(params: Record<any, any>): Promise<EncryptParams>;
103
- getProviderSubType(): Promise<ProviderSubType>;
104
- verifyCaptchaData({ token, key }: {
105
- token: string;
106
- key: string;
107
- }): Promise<{
108
- captcha_token: string;
109
- expires_in: number;
110
- }>;
111
- createCaptchaData({ state, redirect_uri }: {
112
- state: any;
113
- redirect_uri?: any;
114
- }): Promise<{
115
- token: string;
116
- data: string;
117
- }>;
118
- getMiniProgramCode(params: GetMiniProgramQrCodeRequest): Promise<GetMiniProgramQrCodeResponse>;
119
- getMiniProgramQrCodeStatus(params: GetMiniProgramQrCodeStatusRequest): Promise<GetMiniProgramQrCodeStatusResponse>;
120
- getUserBehaviorLog(params: GetUserBehaviorLog): Promise<GetUserBehaviorLogRes>;
121
- modifyPassword(params: ModifyUserBasicInfoRequest): Promise<void>;
122
- modifyPasswordWithoutLogin(params: ModifyPasswordWithoutLoginRequest): Promise<void>;
123
- }