@cloudbase/storage 2.24.0 → 2.24.1

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.
@@ -1,9 +1,13 @@
1
- import { CloudbaseStorage } from '../storage';
1
+ import { CloudbaseStorage, ICloudbaseContext } from '../storage';
2
2
  import { Camelize, FileBody, FileObject, FileObjectV2, FileOptions, TransformOptions } from './types';
3
3
  import { StorageError } from './errors';
4
4
  export declare class SupabaseFileAPILikeStorage extends CloudbaseStorage {
5
5
  private shouldThrowOnError;
6
6
  private bucketId;
7
+ private context;
8
+ constructor(context?: ICloudbaseContext);
9
+ get config(): any;
10
+ get request(): any;
7
11
  throwOnError(): this;
8
12
  from(bucket?: string): this;
9
13
  upload(path: string, fileBody: FileBody, fileOptions?: FileOptions): Promise<{
@@ -66,12 +66,29 @@ import { isStorageError, StorageError } from './errors';
66
66
  var ERRORS = constants.ERRORS;
67
67
  var SupabaseFileAPILikeStorage = (function (_super) {
68
68
  __extends(SupabaseFileAPILikeStorage, _super);
69
- function SupabaseFileAPILikeStorage() {
70
- var _this = _super !== null && _super.apply(this, arguments) || this;
69
+ function SupabaseFileAPILikeStorage(context) {
70
+ var _this = _super.call(this) || this;
71
71
  _this.shouldThrowOnError = false;
72
72
  _this.bucketId = '';
73
+ _this.context = context;
73
74
  return _this;
74
75
  }
76
+ Object.defineProperty(SupabaseFileAPILikeStorage.prototype, "config", {
77
+ get: function () {
78
+ var _a;
79
+ return (_a = this.context) === null || _a === void 0 ? void 0 : _a.config;
80
+ },
81
+ enumerable: false,
82
+ configurable: true
83
+ });
84
+ Object.defineProperty(SupabaseFileAPILikeStorage.prototype, "request", {
85
+ get: function () {
86
+ var _a;
87
+ return (_a = this.context) === null || _a === void 0 ? void 0 : _a.request;
88
+ },
89
+ enumerable: false,
90
+ configurable: true
91
+ });
75
92
  SupabaseFileAPILikeStorage.prototype.throwOnError = function () {
76
93
  this.shouldThrowOnError = true;
77
94
  return this;
@@ -683,4 +700,4 @@ var SupabaseFileAPILikeStorage = (function (_super) {
683
700
  return SupabaseFileAPILikeStorage;
684
701
  }(CloudbaseStorage));
685
702
  export { SupabaseFileAPILikeStorage };
686
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3VwYWJhc2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUc3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUUvQyxJQUFBLE1BQU0sR0FBSyxTQUFTLE9BQWQsQ0FBYztBQUU1QjtJQUFnRCw4Q0FBZ0I7SUFBaEU7UUFBQSxxRUFndEJDO1FBL3NCUyx3QkFBa0IsR0FBRyxLQUFLLENBQUE7UUFDMUIsY0FBUSxHQUFHLEVBQUUsQ0FBQTs7SUE4c0J2QixDQUFDO0lBNXNCQyxpREFBWSxHQUFaO1FBQ0UsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtRQUM5QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCx5Q0FBSSxHQUFKLFVBQUssTUFBZTtRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFDNUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUssMkNBQU0sR0FBWixVQUNFLElBQVksRUFDWixRQUFrQixFQUNsQixXQUF5Qjs7Ozs7O3dCQUluQixPQUFPLGNBQUssTUFBTSxFQUFFLElBQUksSUFBSyxXQUFXLENBQUUsQ0FBQTt3QkFDeEMsWUFBWSxHQUE0QixPQUFPLGFBQW5DLEVBQUUsV0FBVyxHQUFlLE9BQU8sWUFBdEIsRUFBRSxRQUFRLEdBQUssT0FBTyxTQUFaLENBQVk7Ozs7d0JBRS9DLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFB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SSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUVwQixPQUFPLEVBQUUsQ0FBQTtTQUNWO1FBSUQsSUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRzdCLElBQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFMUMsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFFbkIsT0FBTyxZQUFZLENBQUE7U0FDcEI7UUFHRCxPQUFPLFlBQVksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFDSCxpQ0FBQztBQUFELENBQUMsQUFodEJELENBQWdELGdCQUFnQixHQWd0Qi9EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc3RhbnRzIH0gZnJvbSAnQGNsb3VkYmFzZS91dGlsaXRpZXMnXG5cbmltcG9ydCB7IENsb3VkYmFzZVN0b3JhZ2UsIENPTVBPTkVOVF9OQU1FIH0gZnJvbSAnLi4vc3RvcmFnZSdcblxuaW1wb3J0IHsgQ2FtZWxpemUsIEZpbGVCb2R5LCBGaWxlT2JqZWN0LCBGaWxlT2JqZWN0VjIsIEZpbGVPcHRpb25zLCBUcmFuc2Zvcm1PcHRpb25zIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGlzU3RvcmFnZUVycm9yLCBTdG9yYWdlRXJyb3IgfSBmcm9tICcuL2Vycm9ycydcblxuY29uc3QgeyBFUlJPUlMgfSA9IGNvbnN0YW50c1xuXG5leHBvcnQgY2xhc3MgU3VwYWJhc2VGaWxlQVBJTGlrZVN0b3JhZ2UgZXh0ZW5kcyBDbG91ZGJhc2VTdG9yYWdlIHtcbiAgcHJpdmF0ZSBzaG91bGRUaHJvd09uRXJyb3IgPSBmYWxzZVxuICBwcml2YXRlIGJ1Y2tldElkID0gJydcblxuICB0aHJvd09uRXJyb3IoKTogdGhpcyB7XG4gICAgdGhpcy5zaG91bGRUaHJvd09uRXJyb3IgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGZyb20oYnVja2V0Pzogc3RyaW5nKSB7XG4gICAgdGhpcy5idWNrZXRJZCA9IGJ1Y2tldCB8fCAnJ1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBhc3luYyB1cGxvYWQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGZpbGVCb2R5OiBGaWxlQm9keSxcbiAgICBmaWxlT3B0aW9ucz86IEZpbGVPcHRpb25zLFxuICApOiBQcm9taXNlPFxuICAgIHsgZGF0YTogeyBpZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGZ1bGxQYXRoOiBzdHJpbmcgfTsgZXJyb3I6IG51bGwgfSB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9XG4gICAgPiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgdXBzZXJ0OiB0cnVlLCAuLi5maWxlT3B0aW9ucyB9XG4gICAgY29uc3QgeyBjYWNoZUNvbnRyb2wsIGNvbnRlbnRUeXBlLCBtZXRhZGF0YSB9ID0gb3B0aW9uc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbG91ZFBhdGggPSB0aGlzLl9nZXRDbG91ZFBhdGgocGF0aClcbiAgICAgIGNvbnN0IHVwbG9hZEZpbGVQYXJhbXM6IFBhcmFtZXRlcnM8Q2xvdWRiYXNlU3RvcmFnZVsndXBsb2FkRmlsZSddPlswXSA9IHtcbiAgICAgICAgY2xvdWRQYXRoLFxuICAgICAgICBmaWxlUGF0aDogZmlsZUJvZHkgYXMgYW55LFxuICAgICAgfVxuXG4gICAgICBpZiAoY2FjaGVDb250cm9sIHx8IGNvbnRlbnRUeXBlIHx8IG1ldGFkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBpZiAoY2FjaGVDb250cm9sKSB7XG4gICAgICAgICAgaGVhZGVyc1snY2FjaGUtY29udHJvbCddID0gY2FjaGVDb250cm9sXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBjb250ZW50VHlwZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgICAgaGVhZGVyc1sneC1jb3MtbWV0YWRhdGEtbWV0YWRhdGEnXSA9IHRoaXMudG9CYXNlNjQoSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpKVxuICAgICAgICB9XG5cbiAgICAgICAgdXBsb2FkRmlsZVBhcmFtcy5oZWFkZXJzID0gaGVhZGVyc1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnVwbG9hZEZpbGUodXBsb2FkRmlsZVBhcmFtcylcblxuICAgICAgLy8gSVVwbG9hZEZpbGVSZXMg5rKh5pyJIGNvZGUg5a2X5q6177yM5aaC5p6c5rKh5pyJIGZpbGVJRCDliJnooajnpLrlpLHotKVcbiAgICAgIGlmICghcmVzdWx0LmZpbGVJRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGNvZGU6IEVSUk9SUy5PUEVSQVRJT05fRkFJTCxcbiAgICAgICAgICBtc2c6IGBbJHtDT01QT05FTlRfTkFNRX0udXBkYXRlXSBubyBmaWxlSUQgcmV0dXJuZWRgLFxuICAgICAgICB9KSwpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBpZDogcmVzdWx0LmZpbGVJRCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIGZ1bGxQYXRoOiBwYXRoLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGxvYWRUb1NpZ25lZFVybChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgX3Rva2VuOiBzdHJpbmcsXG4gICAgZmlsZUJvZHk6IEZpbGVCb2R5LFxuICAgIGZpbGVPcHRpb25zPzogRmlsZU9wdGlvbnMsXG4gICk6IFByb21pc2U8XG4gICAgeyBkYXRhOiB7IGlkOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgZnVsbFBhdGg6IHN0cmluZyB9OyBlcnJvcjogbnVsbCB9IHwgeyBkYXRhOiBudWxsOyBlcnJvcjogU3RvcmFnZUVycm9yIH1cbiAgICA+IHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWQocGF0aCwgZmlsZUJvZHksIGZpbGVPcHRpb25zKVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2lnbmVkVXBsb2FkVXJsKHBhdGg6IHN0cmluZyk6IFByb21pc2U8XG4gIHwge1xuICAgIGRhdGE6IHtcbiAgICAgIHNpZ25lZFVybDogc3RyaW5nXG4gICAgICB0b2tlbjogc3RyaW5nXG4gICAgICBwYXRoOiBzdHJpbmdcbiAgICAgIC8vIENsb3VkQmFzZSDpop3lpJbnmoTlhYPmlbDmja7lrZfmrrVcbiAgICAgIGF1dGhvcml6YXRpb24/OiBzdHJpbmdcbiAgICAgIGlkPzogc3RyaW5nXG4gICAgICBjb3NGaWxlSWQ/OiBzdHJpbmdcbiAgICAgIGRvd25sb2FkVXJsPzogc3RyaW5nXG4gICAgfVxuICAgIGVycm9yOiBudWxsXG4gIH1cbiAgfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xvdWRQYXRoID0gdGhpcy5fZ2V0Q2xvdWRQYXRoKHBhdGgpXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogbWV0YWRhdGEgfSA9IGF3YWl0IHRoaXMuZ2V0VXBsb2FkTWV0YWRhdGEoeyBjbG91ZFBhdGggfSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHNpZ25lZFVybDogbWV0YWRhdGEudXJsLFxuICAgICAgICAgIHRva2VuOiBtZXRhZGF0YS50b2tlbixcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIC8vIOi/lOWbniBDbG91ZEJhc2Ug55qE6aKd5aSW5YWD5pWw5o2u77yM5L6bIHVwbG9hZFRvU2lnbmVkVXJsIOS9v+eUqFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IG1ldGFkYXRhLmF1dGhvcml6YXRpb24sXG4gICAgICAgICAgaWQ6IG1ldGFkYXRhLmZpbGVJZCxcbiAgICAgICAgICBjb3NGaWxlSWQ6IG1ldGFkYXRhLmNvc0ZpbGVJZCxcbiAgICAgICAgICBkb3dubG9hZFVybDogbWV0YWRhdGEuZG93bmxvYWRfdXJsLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IgPyBlcnJvciA6IG5ldyBTdG9yYWdlRXJyb3IoZXJyb3IubWVzc2FnZSksXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBmaWxlQm9keTogRmlsZUJvZHksXG4gICAgZmlsZU9wdGlvbnM/OiBGaWxlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxcbiAgICB7IGRhdGE6IHsgaWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBmdWxsUGF0aDogc3RyaW5nIH07IGVycm9yOiBudWxsIH0gfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfVxuICAgID4ge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZChwYXRoLCBmaWxlQm9keSwgeyAuLi5maWxlT3B0aW9ucywgdXBzZXJ0OiB0cnVlIH0pXG4gIH1cblxuICBhc3luYyBtb3ZlKFxuICAgIGZyb21QYXRoOiBzdHJpbmcsXG4gICAgdG9QYXRoOiBzdHJpbmcsXG4gICAgLy8gb3B0aW9ucz86IERlc3RpbmF0aW9uT3B0aW9ucyxcbiAgKTogUHJvbWlzZTx7IGRhdGE6IHsgbWVzc2FnZTogc3RyaW5nIH07IGVycm9yOiBudWxsIH0gfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvcHlGaWxlKHtcbiAgICAgICAgZmlsZUxpc3Q6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcmNQYXRoOiB0aGlzLl9nZXRDbG91ZFBhdGgoZnJvbVBhdGgpLFxuICAgICAgICAgICAgZHN0UGF0aDogdGhpcy5fZ2V0Q2xvdWRQYXRoKHRvUGF0aCksXG4gICAgICAgICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgICAgICAgICByZW1vdmVPcmlnaW5hbDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3VsdC5maWxlTGlzdFswXS5jb2RlICYmIHJlc3VsdC5maWxlTGlzdFswXS5jb2RlICE9PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VFcnJvcihyZXN1bHQuZmlsZUxpc3RbMF0ubWVzc2FnZSB8fCAnTW92ZSBmYWlsZWQnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7IG1lc3NhZ2U6IGBGaWxlIG1vdmVkIGZyb20gJHtmcm9tUGF0aH0gdG8gJHt0b1BhdGh9YCB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhc3luYyBjb3B5KFxuICAgIGZyb21QYXRoOiBzdHJpbmcsXG4gICAgdG9QYXRoOiBzdHJpbmcsXG4gICAgLy8gb3B0aW9ucz86IERlc3RpbmF0aW9uT3B0aW9ucyxcbiAgKTogUHJvbWlzZTx7IGRhdGE6IHsgcGF0aDogc3RyaW5nIH07IGVycm9yOiBudWxsIH0gfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvcHlGaWxlKHtcbiAgICAgICAgZmlsZUxpc3Q6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcmNQYXRoOiB0aGlzLl9nZXRDbG91ZFBhdGgoZnJvbVBhdGgpLFxuICAgICAgICAgICAgZHN0UGF0aDogdGhpcy5fZ2V0Q2xvdWRQYXRoKHRvUGF0aCksXG4gICAgICAgICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgICAgICAgICByZW1vdmVPcmlnaW5hbDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChyZXN1bHQuZmlsZUxpc3RbMF0uY29kZSAmJiByZXN1bHQuZmlsZUxpc3RbMF0uY29kZSAhPT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgIHRocm93IG5ldyBTdG9yYWdlRXJyb3IocmVzdWx0LmZpbGVMaXN0WzBdLm1lc3NhZ2UgfHwgJ0NvcHkgZmFpbGVkJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogeyBwYXRoOiB0aGlzLl9nZXRDbG91ZFBhdGgodG9QYXRoKSB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2lnbmVkVXJsKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBleHBpcmVzSW46IG51bWJlcixcbiAgICBvcHRpb25zPzoge1xuICAgICAgZG93bmxvYWQ/OiBzdHJpbmcgfCBib29sZWFuXG4gICAgICB0cmFuc2Zvcm0/OiBUcmFuc2Zvcm1PcHRpb25zXG4gICAgfSxcbiAgKTogUHJvbWlzZTx7IGRhdGE6IHsgc2lnbmVkVXJsOiBzdHJpbmcgfTsgZXJyb3I6IG51bGwgfSB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsb3VkUGF0aCA9IHRoaXMuX25vcm1hbGl6ZUNsb3VkSWQocGF0aClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0VGVtcEZpbGVVUkwoe1xuICAgICAgICBmaWxlTGlzdDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbGVJRDogY2xvdWRQYXRoLFxuICAgICAgICAgICAgbWF4QWdlOiBleHBpcmVzSW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElHZXRGaWxlVXJsSXRlbSDmnIkgY29kZSDlrZfmrrXkvYbmsqHmnIkgbWVzc2FnZSDlrZfmrrVcbiAgICAgIGlmIChyZXN1bHQuZmlsZUxpc3RbMF0uY29kZSAhPT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgIHRocm93IG5ldyBTdG9yYWdlRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgc2lnbmVkIFVSTDogWyR7cmVzdWx0LmZpbGVMaXN0WzBdLmNvZGV9XSAke3Jlc3VsdC5maWxlTGlzdFswXS5maWxlSUR9YClcbiAgICAgIH1cblxuICAgICAgbGV0IHNpZ25lZFVybCA9IHJlc3VsdC5maWxlTGlzdFswXS5kb3dubG9hZF91cmxcblxuICAgICAgLy8g5p6E5bu65p+l6K+i5Y+C5pWwXG4gICAgICBjb25zdCBxdWVyeVBhcmFtczogc3RyaW5nW10gPSBbXVxuXG4gICAgICAvLyDlpoLmnpzmnIkgZG93bmxvYWQg5Y+C5pWw77yM5re75Yqg5YiwIFVSTCDkuK1cbiAgICAgIGlmIChvcHRpb25zPy5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kb3dubG9hZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBkb3dubG9hZCDmmK/mlofku7blkI1cbiAgICAgICAgICBxdWVyeVBhcmFtcy5wdXNoKGBkb3dubG9hZD0ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLmRvd25sb2FkKX1gKVxuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZG93bmxvYWQgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyBkb3dubG9hZCDmmK8gdHJ1Ze+8jOS9v+eUqOWOn+aWh+S7tuWQjeaIlum7mOiupOWAvFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goJ2Rvd25sb2FkPXRydWUnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOWmguaenOacieWbvueJh+i9rOaNouWPguaVsO+8jOa3u+WKoOWIsCBVUkwg5LitXG4gICAgICBpZiAob3B0aW9ucz8udHJhbnNmb3JtKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVF1ZXJ5ID0gdGhpcy5fdHJhbnNmb3JtT3B0c1RvUXVlcnlTdHJpbmcob3B0aW9ucy50cmFuc2Zvcm0pXG4gICAgICAgIGlmICh0cmFuc2Zvcm1RdWVyeSkge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zLnB1c2godHJhbnNmb3JtUXVlcnkpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8g5ou85o6l5omA5pyJ5p+l6K+i5Y+C5pWwXG4gICAgICBpZiAocXVlcnlQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBzaWduZWRVcmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J1xuICAgICAgICBzaWduZWRVcmwgPSBgJHtzaWduZWRVcmx9JHtzZXBhcmF0b3J9JHtxdWVyeVBhcmFtcy5qb2luKCcmJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7IHNpZ25lZFVybCB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVTaWduZWRVcmxzKFxuICAgIHBhdGhzOiBzdHJpbmdbXSxcbiAgICBleHBpcmVzSW46IG51bWJlcixcbiAgICAvLyBvcHRpb25zPzoge1xuICAgIC8vICAgZG93bmxvYWQ/OiBzdHJpbmcgfCBib29sZWFuXG4gICAgLy8gfSxcbiAgKTogUHJvbWlzZTxcbiAgICB8IHsgZGF0YTogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IHNpZ25lZFVybDogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9PjsgZXJyb3I6IG51bGwgfVxuICAgIHwgeyBkYXRhOiBudWxsOyBlcnJvcjogU3RvcmFnZUVycm9yIH1cbiAgICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZUxpc3QgPSBwYXRocy5tYXAocCA9PiAoe1xuICAgICAgICBmaWxlSUQ6IHRoaXMuX25vcm1hbGl6ZUNsb3VkSWQocCksXG4gICAgICAgIG1heEFnZTogZXhwaXJlc0luLFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0VGVtcEZpbGVVUkwoeyBmaWxlTGlzdCB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiByZXN1bHQuZmlsZUxpc3QubWFwKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICAgICAgcGF0aDogcGF0aHNbaW5kZXhdLFxuICAgICAgICAgIHNpZ25lZFVybDogaXRlbS50ZW1wRmlsZVVSTCB8fCAnJyxcbiAgICAgICAgICBlcnJvcjogaXRlbS5jb2RlID09PSAnU1VDQ0VTUycgPyBudWxsIDogaXRlbS5tZXNzYWdlLFxuICAgICAgICB9KSksXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3JcbiAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHJhbnNmb3JtT3B0aW9ucyxcbiAgKTogUHJvbWlzZTx7XG4gICAgICBkYXRhOiBCbG9iXG4gICAgICBlcnJvcjogU3RvcmFnZUVycm9yIHwgbnVsbFxuICAgIH0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBzaWduZWRVcmxSZXN1bHQgPSBhd2FpdCB0aGlzLmNyZWF0ZVNpZ25lZFVybChwYXRoLCA2MDAsIHsgdHJhbnNmb3JtOiBvcHRpb25zIH0pXG4gICAgICAgICAgaWYgKHNpZ25lZFVybFJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgc2lnbmVkVXJsUmVzdWx0LmVycm9yXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRtcFVybCA9IGVuY29kZVVSSShzaWduZWRVcmxSZXN1bHQuZGF0YT8uc2lnbmVkVXJsKVxuXG4gICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCAodGhpcyBhcyBhbnkpLnJlcXVlc3QucmVxQ2xhc3MuZ2V0KHtcbiAgICAgICAgICAgIHVybDogdG1wVXJsLFxuICAgICAgICAgICAgaGVhZGVyczoge30sIC8vIOS4i+i9vei1hOa6kOivt+axguS4jee7j+i/h3NlcnZpY2XvvIxoZWFkZXLmuIXnqbpcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTdG9yYWdlRXJyb3IoJ0Rvd25sb2FkIGZhaWxlZDogbm8gZmlsZSBjb250ZW50JylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyDlsIYgQnVmZmVyIOi9rOaNouS4uiBVaW50OEFycmF5IOS7peWFvOWuuSBCbG9iXG4gICAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtkYXRhXSlcbiAgICAgICAgfSkoKSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkVGhyb3dPbkVycm9yKSB0aHJvdyBlcnJvclxuICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaWh+S7tuS/oeaBr1xuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZUlkIC0g55u45a+56Lev5b6E77yI5aaCICdpbWFnZXMvcGhvdG8uanBnJ++8ieaIliBDbG91ZEJhc2UgZmlsZUlE77yI5LulICdjbG91ZDovLycg5byA5aS077yJXG4gICAqIEByZXR1cm5zIOaWh+S7tuS/oeaBr+WvueixoVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIOS9v+eUqOebuOWvuei3r+W+hFxuICAgKiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGJ1Y2tldC5pbmZvKCdpbWFnZXMvcGhvdG8uanBnJylcbiAgICpcbiAgICogLy8g5L2/55SoIENsb3VkQmFzZSBmaWxlSURcbiAgICogY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBidWNrZXQuaW5mbygnY2xvdWQ6Ly9lbnYtaWQueHh4eC14eHh4L2ltYWdlcy9waG90by5qcGcnKVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGluZm8ocGF0aE9yRmlsZUlkOiBzdHJpbmcsKTogUHJvbWlzZTx7IGRhdGE6IENhbWVsaXplPEZpbGVPYmplY3RWMj47IGVycm9yOiBudWxsIH0gfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDliKTmlq3mmK8gZmlsZUlEIOi/mOaYr+ebuOWvuei3r+W+hFxuICAgICAgY29uc3QgaXNGaWxlSWQgPSBwYXRoT3JGaWxlSWQuc3RhcnRzV2l0aCgnY2xvdWQ6Ly8nKVxuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBpc0ZpbGVJZCA/IHRoaXMuX2V4dHJhY3RQYXRoRnJvbUZpbGVJZChwYXRoT3JGaWxlSWQpIDogcGF0aE9yRmlsZUlkXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGlzRmlsZUlkID8gdGhpcy5fZXh0cmFjdEJ1Y2tldEZyb21GaWxlSWQocGF0aE9yRmlsZUlkKSA6IHRoaXMuYnVja2V0SWRcblxuICAgICAgY29uc3QgZmlsZUluZm8gPSBhd2FpdCB0aGlzLmdldEZpbGVJbmZvKHtcbiAgICAgICAgZmlsZUxpc3Q6IFt0aGlzLl9ub3JtYWxpemVDbG91ZElkKHBhdGhPckZpbGVJZCldLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgaXRlbSA9IGZpbGVJbmZvLmZpbGVMaXN0WzBdXG5cbiAgICAgIGlmIChpdGVtLmNvZGUgIT09ICdTVUNDRVNTJykge1xuICAgICAgICB0aHJvdyBuZXcgU3RvcmFnZUVycm9yKGl0ZW0ubWVzc2FnZSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSAoaXRlbS5sYXN0TW9kaWZpZWQgPyBuZXcgRGF0ZShpdGVtLmxhc3RNb2RpZmllZCkgOiBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgaWQ6IGl0ZW0uZmlsZUlELFxuICAgICAgICAgIHZlcnNpb246ICcxJyxcbiAgICAgICAgICBuYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB1cGRhdGVkQXQ6IGxhc3RNb2RpZmllZCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IGxhc3RNb2RpZmllZCxcbiAgICAgICAgICBsYXN0QWNjZXNzZWRBdDogbm93LFxuICAgICAgICAgIHNpemU6IGl0ZW0uc2l6ZSxcbiAgICAgICAgICBjYWNoZUNvbnRyb2w6IGl0ZW0uY2FjaGVDb250cm9sLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBpdGVtLmNvbnRlbnRUeXBlLFxuICAgICAgICAgIGV0YWc6IGl0ZW0uZXRhZyxcbiAgICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgICAgbWV0YWRhdGE6IHt9LFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IgPyBlcnJvciA6IG5ldyBTdG9yYWdlRXJyb3IoZXJyb3IubWVzc2FnZSksXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhpc3RzKHBhdGhPckZpbGVJZDogc3RyaW5nKTogUHJvbWlzZTx7IGRhdGE6IGJvb2xlYW47IGVycm9yOiBudWxsIH0gfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDliKTmlq3mmK8gZmlsZUlEIOi/mOaYr+ebuOWvuei3r+W+hFxuICAgICAgY29uc3QgZmlsZUluZm8gPSBhd2FpdCB0aGlzLmdldEZpbGVJbmZvKHtcbiAgICAgICAgZmlsZUxpc3Q6IFt0aGlzLl9ub3JtYWxpemVDbG91ZElkKHBhdGhPckZpbGVJZCldLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgaXRlbSA9IGZpbGVJbmZvLmZpbGVMaXN0WzBdXG5cbiAgICAgIGlmIChpdGVtLmNvZGUgPT09ICdGSUxFX05PVF9GT1VORCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbS5jb2RlICE9PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VFcnJvcihpdGVtLm1lc3NhZ2UpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHRydWUsIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFB1YmxpY1VybChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGRvd25sb2FkPzogc3RyaW5nIHwgYm9vbGVhblxuICAgICAgdHJhbnNmb3JtPzogVHJhbnNmb3JtT3B0aW9uc1xuICAgIH0sXG4gICk6IFByb21pc2U8XG4gICAgfCB7XG4gICAgICBkYXRhOiB7IHB1YmxpY1VybDogc3RyaW5nIH1cbiAgICB9XG4gICAgfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfVxuICAgID4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY3JlYXRlU2lnbmVkVXJsKHBhdGgsIDYwMCwgb3B0aW9ucylcblxuICAgIGlmIChyZXMuZGF0YSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogeyBwdWJsaWNVcmw6IHJlcy5kYXRhLnNpZ25lZFVybCB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiByZXMuZXJyb3IgYXMgU3RvcmFnZUVycm9yIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZShwYXRoczogc3RyaW5nW10pOiBQcm9taXNlPHsgZGF0YTogRmlsZU9iamVjdFtdOyBlcnJvcjogbnVsbCB9IHwgeyBkYXRhOiBudWxsOyBlcnJvcjogU3RvcmFnZUVycm9yIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5YiG57uE6I635Y+W5paH5Lu25L+h5oGv77yM5q+P57uE5pyA5aSaMTDkuKpcbiAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IDEwXG4gICAgICBjb25zdCBwYXRoQ2h1bmtzOiBzdHJpbmdbXVtdID0gW11cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpICs9IGNodW5rU2l6ZSkge1xuICAgICAgICBwYXRoQ2h1bmtzLnB1c2gocGF0aHMuc2xpY2UoaSwgaSArIGNodW5rU2l6ZSkpXG4gICAgICB9XG5cbiAgICAgIC8vIOW5tuihjOiOt+WPluaJgOacieWIhue7hOeahOaWh+S7tuS/oeaBr1xuICAgICAgY29uc3QgZmlsZUluZm9SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocGF0aENodW5rcy5tYXAoY2h1bmsgPT4gUHJvbWlzZS5hbGwoY2h1bmsubWFwKHBhdGggPT4gdGhpcy5pbmZvKHBhdGgpKSkpLClcblxuICAgICAgLy8g5ZCI5bm25omA5pyJ5paH5Lu25L+h5oGv5bm25p6E5bu65pig5bCE6KGo77yIcGF0aCAtPiBmaWxlSW5mb++8iVxuICAgICAgY29uc3QgZmlsZUluZm9NYXAgPSBuZXcgTWFwPHN0cmluZywgQ2FtZWxpemU8RmlsZU9iamVjdFYyPj4oKVxuICAgICAgZmlsZUluZm9SZXN1bHRzLmZsYXQoKS5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQuZGF0YSkge1xuICAgICAgICAgIGZpbGVJbmZvTWFwLnNldChwYXRoc1tNYXRoLmZsb29yKGluZGV4IC8gY2h1bmtTaXplKSAqIGNodW5rU2l6ZSArIChpbmRleCAlIGNodW5rU2l6ZSldLCByZXN1bHQuZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8g5omn6KGM5Yig6Zmk5pON5L2cXG4gICAgICBjb25zdCBmaWxlTGlzdCA9IHBhdGhzLm1hcChwID0+IHRoaXMuX25vcm1hbGl6ZUNsb3VkSWQocCkpXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRlbGV0ZUZpbGUoeyBmaWxlTGlzdCB9KVxuXG4gICAgICAvLyBJRGVsZXRlRmlsZVJlcyDnmoQgZmlsZUxpc3Qg5pWw57uE5Lit5q+P5Liq6aG55pyJIGNvZGUg5a2X5q61XG4gICAgICBjb25zdCBmYWlsZWRGaWxlcyA9IHJlc3VsdC5maWxlTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmNvZGUgIT09ICdTVUNDRVNTJylcbiAgICAgIGlmIChmYWlsZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTdG9yYWdlRXJyb3IoYERlbGV0ZSBmYWlsZWQgZm9yICR7ZmFpbGVkRmlsZXMubGVuZ3RofSBmaWxlKHMpYClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG5cbiAgICAgIC8vIOS9v+eUqOiOt+WPluWIsOeahOaWh+S7tuS/oeaBr+aehOW7uui/lOWbnuaVsOaNrlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogcGF0aHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5mbyA9IGZpbGVJbmZvTWFwLmdldChwKVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGluZm8/Lm5hbWUsXG4gICAgICAgICAgICBpZDogaW5mbz8uaWQsXG4gICAgICAgICAgICBidWNrZXRfaWQ6IGluZm8/LmJ1Y2tldElkLFxuICAgICAgICAgICAgb3duZXI6IHVuZGVmaW5lZCwgLy8g5peg5rOV6K6h566Xb3duZXJcbiAgICAgICAgICAgIHVwZGF0ZWRfYXQ6IGluZm8/LnVwZGF0ZWRBdCB8fCBub3csXG4gICAgICAgICAgICBjcmVhdGVkX2F0OiBpbmZvPy5jcmVhdGVkQXQsXG4gICAgICAgICAgICBsYXN0X2FjY2Vzc2VkX2F0OiBpbmZvPy5sYXN0QWNjZXNzZWRBdCB8fCBub3csXG4gICAgICAgICAgICBtZXRhZGF0YTogaW5mbz8ubWV0YWRhdGEgfHwge30sXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRPRE86IOiOt+WPluihpeWFqCBCdWNrZXQg5L+h5oGvXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgICAgICAgaWQ6IGluZm8/LmJ1Y2tldElkLFxuICAgICAgICAgICAgICBuYW1lOiBpbmZvPy5idWNrZXRJZCxcbiAgICAgICAgICAgICAgb3duZXI6IHVuZGVmaW5lZCwgLy8g5peg5rOV6K6h566Xb3duZXJcbiAgICAgICAgICAgICAgcHVibGljOiBmYWxzZSwgLy8g5pyq55+lXG4gICAgICAgICAgICAgIGNyZWF0ZWRfYXQ6ICcnLCAvLyDmnKrnn6VcbiAgICAgICAgICAgICAgdXBkYXRlZF9hdDogbm93LCAvLyDmnKrnn6VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkVGhyb3dPbkVycm9yKSB0aHJvdyBlcnJvclxuICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbGlzdCgpIHtcbiAgICB0aHJvdyBuZXcgU3RvcmFnZUVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q2xvdWRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8g5riF55CG6Lev5b6E77ya56e76Zmk6aaW5bC+5pac5p2g77yM5ZCI5bm25aSa5Liq5pac5p2gXG4gICAgY29uc3QgY2xlYW5QYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvfFxcLyQvZywgJycpLnJlcGxhY2UoL1xcLysvZywgJy8nKVxuXG4gICAgLy8g5ZCm5YiZ6L+U5Zue5riF55CG5ZCO55qE55u45a+56Lev5b6EXG4gICAgcmV0dXJuIGNsZWFuUGF0aFxuICB9XG5cbiAgcHJpdmF0ZSBfbm9ybWFsaXplQ2xvdWRJZChwYXRoOiBzdHJpbmcpIHtcbiAgICAvLyDlpoLmnpzlt7Lnu4/mmK8gY2xvdWQ6Ly8g5qC85byP77yM55u05o6l6L+U5ZueXG4gICAgaWYgKC9eY2xvdWQ6XFwvXFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgICBjb25zdCBjbGVhblBhdGggPSB0aGlzLl9nZXRDbG91ZFBhdGgocGF0aClcblxuICAgIC8vIOWmguaenOiuvue9ruS6hiBidWNrZXRJZO+8jOaehOW7uuWujOaVtOeahCBjbG91ZDovLyDot6/lvoRcbiAgICBpZiAodGhpcy5idWNrZXRJZCkge1xuICAgICAgLy8g6I635Y+W546v5aKDIElEXG4gICAgICBjb25zdCBlbnZJZCA9IHRoaXMuY29uZmlnPy5lbnYgfHwgJydcbiAgICAgIGlmIChlbnZJZCkge1xuICAgICAgICByZXR1cm4gYGNsb3VkOi8vJHtlbnZJZH0uJHt0aGlzLmJ1Y2tldElkfS8ke2NsZWFuUGF0aH1gXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBTdG9yYWdlRXJyb3IoJ2J1Y2tldElkIGlzIG5vdCBzZXQnKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9CYXNlNjQoZGF0YTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgfVxuICAgIHJldHVybiBidG9hKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICog5bCGIFRyYW5zZm9ybU9wdGlvbnMg6L2s5o2i5Li66IW+6K6v5LqR5pWw5o2u5LiH6LGh55qEIGltYWdlTW9ncjIg5p+l6K+i5a2X56ym5LiyXG4gICAqXG4gICAqIOiFvuiur+S6keaVsOaNruS4h+ixoeS9v+eUqCBpbWFnZU1vZ3IyIOaOpeWPo+i/m+ihjOWbvueJh+WkhOeQhu+8jOaUr+aMgeS7peS4i+WPguaVsO+8mlxuICAgKiAtIC90aHVtYm5haWwvPFdpZHRoPng8SGVpZ2h0PiAtIOe8qeaUvlxuICAgKiAtIC9mb3JtYXQvPEZvcm1hdD4gLSDmoLzlvI/ovazmjaJcbiAgICogLSAvcXVhbGl0eS88UXVhbGl0eT4gLSDotKjph4/osIPmlbRcbiAgICogLSAvcnF1YWxpdHkvPFF1YWxpdHk+IC0g55u45a+56LSo6YePXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc2Zvcm0gLSBTdXBhYmFzZSBUcmFuc2Zvcm1PcHRpb25zXG4gICAqIEByZXR1cm5zIOiFvuiur+S6keaVsOaNruS4h+ixoeeahOafpeivouWtl+espuS4slxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIF90cmFuc2Zvcm1PcHRzVG9RdWVyeVN0cmluZyh7IHdpZHRoOiAzMDAsIGhlaWdodDogMjAwLCBxdWFsaXR5OiA4MCwgZm9ybWF0OiAnb3JpZ2luJyB9KVxuICAgKiAvLyDov5Tlm546ICdpbWFnZU1vZ3IyL3RodW1ibmFpbC8zMDB4MjAwL3F1YWxpdHkvODAnXG4gICAqIGBgYFxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtT3B0c1RvUXVlcnlTdHJpbmcodHJhbnNmb3JtOiBUcmFuc2Zvcm1PcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXM6IHN0cmluZ1tdID0gWydpbWFnZU1vZ3IyJ11cblxuICAgIC8vIOWkhOeQhue8qeaUvuWPguaVsFxuICAgIGlmICh0cmFuc2Zvcm0ud2lkdGggfHwgdHJhbnNmb3JtLmhlaWdodCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0cmFuc2Zvcm0ud2lkdGggfHwgJydcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRyYW5zZm9ybS5oZWlnaHQgfHwgJydcblxuICAgICAgLy8g5qC55o2uIHJlc2l6ZSDmqKHlvI/pgInmi6nkuI3lkIznmoTnvKnmlL7mlrnlvI9cbiAgICAgIGlmICh0cmFuc2Zvcm0ucmVzaXplID09PSAnZmlsbCcpIHtcbiAgICAgICAgLy8gZmlsbDog5by65Yi257yp5pS+5Yiw5oyH5a6a5bC65a+477yM5Y+v6IO95Y+Y5b2iXG4gICAgICAgIHBhcmFtcy5wdXNoKGB0aHVtYm5haWwvJHt3aWR0aH14JHtoZWlnaHR9IWApXG4gICAgICB9IGVsc2UgaWYgKHRyYW5zZm9ybS5yZXNpemUgPT09ICdjb250YWluJykge1xuICAgICAgICAvLyBjb250YWluOiDnrYnmr5TnvKnmlL7vvIzlrozmlbTmmL7npLrlnKjmjIflrprlsLrlr7jlhoVcbiAgICAgICAgcGFyYW1zLnB1c2goYHRodW1ibmFpbC8ke3dpZHRofXgke2hlaWdodH1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY292ZXIgKOm7mOiupCk6IOetieavlOe8qeaUvu+8jOWhq+WFheaMh+WumuWwuuWvuO+8jOWPr+iDveijgeWJqlxuICAgICAgICAvLyDkvb/nlKggL3RodW1ibmFpbC88V2lkdGg+eDxIZWlnaHQ+XiDooajnpLrloavlhYXmqKHlvI9cbiAgICAgICAgcGFyYW1zLnB1c2goYHRodW1ibmFpbC8ke3dpZHRofXgke2hlaWdodH1eYClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDlpITnkIbmoLzlvI/ovazmjaJcbiAgICAvLyBmb3JtYXQ6ICdvcmlnaW4nIOihqOekuuS/neaMgeWOn+agvOW8j++8jOS4jeS8oOatpOWPguaVsFxuICAgIGlmICh0cmFuc2Zvcm0uZm9ybWF0ICYmIHRyYW5zZm9ybS5mb3JtYXQgIT09ICdvcmlnaW4nKSB7XG4gICAgICBwYXJhbXMucHVzaChgZm9ybWF0LyR7dHJhbnNmb3JtLmZvcm1hdH1gKVxuICAgIH1cblxuICAgIC8vIOWkhOeQhui0qOmHj+WPguaVsFxuICAgIGlmICh0cmFuc2Zvcm0ucXVhbGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyDohb7orq/kupHmlbDmja7kuIfosaHnmoQgcXVhbGl0eSDlj4LmlbDojIPlm7TmmK8gMS0xMDBcbiAgICAgIGNvbnN0IHF1YWxpdHkgPSBNYXRoLm1heCgxLCBNYXRoLm1pbigxMDAsIHRyYW5zZm9ybS5xdWFsaXR5KSlcbiAgICAgIHBhcmFtcy5wdXNoKGBxdWFsaXR5LyR7cXVhbGl0eX1gKVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXMuam9pbignLycpXG4gIH1cblxuICAvKipcbiAgICog5LuOIENsb3VkQmFzZSBmaWxlSUQg5Lit5o+Q5Y+W5paH5Lu26Lev5b6EXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlSWQgLSBDbG91ZEJhc2UgZmlsZUlEICjmoLzlvI86IGNsb3VkOi8vZW52LWlkLmJ1Y2tldC9wYXRoL3RvL2ZpbGUuanBnKVxuICAgKiBAcmV0dXJucyDmj5Dlj5bnmoTmlofku7bot6/lvoRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBfZXh0cmFjdFBhdGhGcm9tRmlsZUlkKCdjbG91ZDovL3Rlc3QtZW52LnRlc3QtYnVja2V0L2ltYWdlcy9waG90by5qcGcnKVxuICAgKiAvLyDov5Tlm546ICdpbWFnZXMvcGhvdG8uanBnJ1xuICAgKlxuICAgKiBfZXh0cmFjdFBhdGhGcm9tRmlsZUlkKCdjbG91ZDovL3Rlc3QtZW52LnRlc3QtYnVja2V0L2ZpbGUudHh0JylcbiAgICogLy8g6L+U5ZueOiAnZmlsZS50eHQnXG4gICAqIGBgYFxuICAgKi9cbiAgcHJpdmF0ZSBfZXh0cmFjdFBhdGhGcm9tRmlsZUlkKGZpbGVJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBmaWxlSUQg5qC85byPOiBjbG91ZDovL2Vudi1pZC5idWNrZXQvcGF0aC90by9maWxlLmpwZ1xuICAgIC8vIOmcgOimgeaPkOWPluesrOS4gOS4qiAvIOWQjumdoueahOaJgOacieWGheWuue+8iOWMheaLrCBidWNrZXQg5ZKM6Lev5b6E77yJXG4gICAgLy8g54S25ZCO5YaN5o+Q5Y+WIGJ1Y2tldCDlkI7pnaLnmoTot6/lvoTpg6jliIZcblxuICAgIC8vIOenu+mZpCBjbG91ZDovLyDliY3nvIBcbiAgICBjb25zdCB3aXRob3V0UHJvdG9jb2wgPSBmaWxlSWQucmVwbGFjZSgvXmNsb3VkOlxcL1xcLy8sICcnKVxuXG4gICAgLy8g5YiG5Ymy5Li6IFtlbnYtaWQuYnVja2V0LCBwYXRoLCB0bywgZmlsZS5qcGddXG4gICAgY29uc3QgcGFydHMgPSB3aXRob3V0UHJvdG9jb2wuc3BsaXQoJy8nKVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIC8vIOWmguaenOaXoOazleino+aekO+8jOi/lOWbnuWujOaVtOeahCBmaWxlSURcbiAgICAgIHJldHVybiBmaWxlSWRcbiAgICB9XG5cbiAgICAvLyDnp7vpmaTnrKzkuIDpg6jliIbvvIhlbnYtaWQuYnVja2V077yJ77yM6L+U5Zue5Ymp5L2Z6Lev5b6EXG4gICAgcmV0dXJuIHBhcnRzLnNsaWNlKDEpLmpvaW4oJy8nKVxuICB9XG5cbiAgLyoqXG4gICAqIOS7jiBDbG91ZEJhc2UgZmlsZUlEIOS4reaPkOWPliBidWNrZXQg5ZCN56ewXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlSWQgLSBDbG91ZEJhc2UgZmlsZUlEICjmoLzlvI86IGNsb3VkOi8vZW52LWlkLmJ1Y2tldC9wYXRoL3RvL2ZpbGUuanBnKVxuICAgKiBAcmV0dXJucyDmj5Dlj5bnmoQgYnVja2V0IOWQjeensFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIF9leHRyYWN0QnVja2V0RnJvbUZpbGVJZCgnY2xvdWQ6Ly90ZXN0LWVudi50ZXN0LWJ1Y2tldC9pbWFnZXMvcGhvdG8uanBnJylcbiAgICogLy8g6L+U5ZueOiAndGVzdC1idWNrZXQnXG4gICAqXG4gICAqIF9leHRyYWN0QnVja2V0RnJvbUZpbGVJZCgnY2xvdWQ6Ly9wcm9kLWVudi5teS1idWNrZXQvZmlsZS50eHQnKVxuICAgKiAvLyDov5Tlm546ICdteS1idWNrZXQnXG4gICAqIGBgYFxuICAgKi9cbiAgcHJpdmF0ZSBfZXh0cmFjdEJ1Y2tldEZyb21GaWxlSWQoZmlsZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIGZpbGVJRCDmoLzlvI86IGNsb3VkOi8vZW52LWlkLmJ1Y2tldC9wYXRoL3RvL2ZpbGUuanBnXG4gICAgLy8g6ZyA6KaB5o+Q5Y+WIGVudi1pZC5idWNrZXQg5Lit55qEIGJ1Y2tldCDpg6jliIZcblxuICAgIC8vIOenu+mZpCBjbG91ZDovLyDliY3nvIBcbiAgICBjb25zdCB3aXRob3V0UHJvdG9jb2wgPSBmaWxlSWQucmVwbGFjZSgvXmNsb3VkOlxcL1xcLy8sICcnKVxuXG4gICAgLy8g5YiG5Ymy5Li6IFtlbnYtaWQuYnVja2V0LCBwYXRoLCB0bywgZmlsZS5qcGddXG4gICAgY29uc3QgcGFydHMgPSB3aXRob3V0UHJvdG9jb2wuc3BsaXQoJy8nKVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDEpIHtcbiAgICAgIC8vIOWmguaenOaXoOazleino+aekO+8jOi/lOWbnum7mOiupCBidWNrZXRcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIC8vIOesrOS4gOmDqOWIhuaYryBlbnYtaWQuYnVja2V077yM5o+Q5Y+WIGJ1Y2tldCDpg6jliIZcbiAgICAvLyDmoLzlvI86IGVudi1pZC5idWNrZXQg5oiWIGVudi1pZC5idWNrZXQtbmFtZVxuICAgIGNvbnN0IGVudkFuZEJ1Y2tldCA9IHBhcnRzWzBdXG5cbiAgICAvLyDmn6Xmib7nrKzkuIDkuKrngrnnmoTkvY3nva5cbiAgICBjb25zdCBkb3RJbmRleCA9IGVudkFuZEJ1Y2tldC5pbmRleE9mKCcuJylcblxuICAgIGlmIChkb3RJbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIOWmguaenOayoeacieeCue+8jOi/lOWbnuaVtOS4quWtl+espuS4slxuICAgICAgcmV0dXJuIGVudkFuZEJ1Y2tldFxuICAgIH1cblxuICAgIC8vIOi/lOWbnueCueWQjumdoueahOmDqOWIhu+8iGJ1Y2tldCDlkI3np7DvvIlcbiAgICByZXR1cm4gZW52QW5kQnVja2V0LnN1YnN0cmluZyhkb3RJbmRleCArIDEpXG4gIH1cbn1cbiJdfQ==
703
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3VwYWJhc2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBcUIsTUFBTSxZQUFZLENBQUE7QUFHaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFL0MsSUFBQSxNQUFNLEdBQUssU0FBUyxPQUFkLENBQWM7QUFFNUI7SUFBZ0QsOENBQWdCO0lBSzlELG9DQUFZLE9BQTJCO1FBQXZDLFlBQ0UsaUJBQU8sU0FFUjtRQVBPLHdCQUFrQixHQUFHLEtBQUssQ0FBQTtRQUMxQixjQUFRLEdBQUcsRUFBRSxDQUFBO1FBS25CLEtBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBOztJQUN4QixDQUFDO0lBRUQsc0JBQUksOENBQU07YUFBVjs7WUFFRSxPQUFPLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsTUFBTSxDQUFBO1FBQzdCLENBQUM7OztPQUFBO0lBRUQsc0JBQUksK0NBQU87YUFBWDs7WUFFRSxPQUFPLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsT0FBTyxDQUFBO1FBQzlCLENBQUM7OztPQUFBO0lBRUQsaURBQVksR0FBWjtRQUNFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUE7UUFDOUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQseUNBQUksR0FBSixVQUFLLE1BQWU7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFBO1FBQzVCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVLLDJDQUFNLEdBQVosVUFD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QUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQWlCTyw2REFBd0IsR0FBaEMsVUFBaUMsTUFBYztRQUs3QyxJQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUd6RCxJQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRXhDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFFcEIsT0FBTyxFQUFFLENBQUE7U0FDVjtRQUlELElBQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUc3QixJQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTFDLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBRW5CLE9BQU8sWUFBWSxDQUFBO1NBQ3BCO1FBR0QsT0FBTyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBQ0gsaUNBQUM7QUFBRCxDQUFDLEFBaHVCRCxDQUFnRCxnQkFBZ0IsR0FndUIvRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuXG5pbXBvcnQgeyBDbG91ZGJhc2VTdG9yYWdlLCBDT01QT05FTlRfTkFNRSwgSUNsb3VkYmFzZUNvbnRleHQgfSBmcm9tICcuLi9zdG9yYWdlJ1xuXG5pbXBvcnQgeyBDYW1lbGl6ZSwgRmlsZUJvZHksIEZpbGVPYmplY3QsIEZpbGVPYmplY3RWMiwgRmlsZU9wdGlvbnMsIFRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgaXNTdG9yYWdlRXJyb3IsIFN0b3JhZ2VFcnJvciB9IGZyb20gJy4vZXJyb3JzJ1xuXG5jb25zdCB7IEVSUk9SUyB9ID0gY29uc3RhbnRzXG5cbmV4cG9ydCBjbGFzcyBTdXBhYmFzZUZpbGVBUElMaWtlU3RvcmFnZSBleHRlbmRzIENsb3VkYmFzZVN0b3JhZ2Uge1xuICBwcml2YXRlIHNob3VsZFRocm93T25FcnJvciA9IGZhbHNlXG4gIHByaXZhdGUgYnVja2V0SWQgPSAnJ1xuICBwcml2YXRlIGNvbnRleHQ6IElDbG91ZGJhc2VDb250ZXh0XG5cbiAgY29uc3RydWN0b3IoY29udGV4dD86IElDbG91ZGJhc2VDb250ZXh0KSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIGdldCBjb25maWcoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0aGlzLmNvbnRleHQ/LmNvbmZpZ1xuICB9XG5cbiAgZ2V0IHJlcXVlc3QoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiB0aGlzLmNvbnRleHQ/LnJlcXVlc3RcbiAgfVxuXG4gIHRocm93T25FcnJvcigpOiB0aGlzIHtcbiAgICB0aGlzLnNob3VsZFRocm93T25FcnJvciA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZnJvbShidWNrZXQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmJ1Y2tldElkID0gYnVja2V0IHx8ICcnXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGFzeW5jIHVwbG9hZChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZmlsZUJvZHk6IEZpbGVCb2R5LFxuICAgIGZpbGVPcHRpb25zPzogRmlsZU9wdGlvbnMsXG4gICk6IFByb21pc2U8XG4gICAgeyBkYXRhOiB7IGlkOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgZnVsbFBhdGg6IHN0cmluZyB9OyBlcnJvcjogbnVsbCB9IHwgeyBkYXRhOiBudWxsOyBlcnJvcjogU3RvcmFnZUVycm9yIH1cbiAgICA+IHtcbiAgICBjb25zdCBvcHRpb25zID0geyB1cHNlcnQ6IHRydWUsIC4uLmZpbGVPcHRpb25zIH1cbiAgICBjb25zdCB7IGNhY2hlQ29udHJvbCwgY29udGVudFR5cGUsIG1ldGFkYXRhIH0gPSBvcHRpb25zXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsb3VkUGF0aCA9IHRoaXMuX2dldENsb3VkUGF0aChwYXRoKVxuICAgICAgY29uc3QgdXBsb2FkRmlsZVBhcmFtczogUGFyYW1ldGVyczxDbG91ZGJhc2VTdG9yYWdlWyd1cGxvYWRGaWxlJ10+WzBdID0ge1xuICAgICAgICBjbG91ZFBhdGgsXG4gICAgICAgIGZpbGVQYXRoOiBmaWxlQm9keSBhcyBhbnksXG4gICAgICB9XG5cbiAgICAgIGlmIChjYWNoZUNvbnRyb2wgfHwgY29udGVudFR5cGUgfHwgbWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9XG4gICAgICAgIGlmIChjYWNoZUNvbnRyb2wpIHtcbiAgICAgICAgICBoZWFkZXJzWydjYWNoZS1jb250cm9sJ10gPSBjYWNoZUNvbnRyb2xcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGNvbnRlbnRUeXBlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgICAgICBoZWFkZXJzWyd4LWNvcy1tZXRhZGF0YS1tZXRhZGF0YSddID0gdGhpcy50b0Jhc2U2NChKU09OLnN0cmluZ2lmeShtZXRhZGF0YSkpXG4gICAgICAgIH1cblxuICAgICAgICB1cGxvYWRGaWxlUGFyYW1zLmhlYWRlcnMgPSBoZWFkZXJzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZSh1cGxvYWRGaWxlUGFyYW1zKVxuXG4gICAgICAvLyBJVXBsb2FkRmlsZVJlcyDmsqHmnIkgY29kZSDlrZfmrrXvvIzlpoLmnpzmsqHmnIkgZmlsZUlEIOWImeihqOekuuWksei0pVxuICAgICAgaWYgKCFyZXN1bHQuZmlsZUlEKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgY29kZTogRVJST1JTLk9QRVJBVElPTl9GQUlMLFxuICAgICAgICAgIG1zZzogYFske0NPTVBPTkVOVF9OQU1FfS51cGRhdGVdIG5vIGZpbGVJRCByZXR1cm5lZGAsXG4gICAgICAgIH0pLClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGlkOiByZXN1bHQuZmlsZUlELFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgZnVsbFBhdGg6IHBhdGgsXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3JcbiAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZFRvU2lnbmVkVXJsKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBfdG9rZW46IHN0cmluZyxcbiAgICBmaWxlQm9keTogRmlsZUJvZHksXG4gICAgZmlsZU9wdGlvbnM/OiBGaWxlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxcbiAgICB7IGRhdGE6IHsgaWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBmdWxsUGF0aDogc3RyaW5nIH07IGVycm9yOiBudWxsIH0gfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfVxuICAgID4ge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZChwYXRoLCBmaWxlQm9keSwgZmlsZU9wdGlvbnMpXG4gIH1cblxuICBhc3luYyBjcmVhdGVTaWduZWRVcGxvYWRVcmwocGF0aDogc3RyaW5nKTogUHJvbWlzZTxcbiAgfCB7XG4gICAgZGF0YToge1xuICAgICAgc2lnbmVkVXJsOiBzdHJpbmdcbiAgICAgIHRva2VuOiBzdHJpbmdcbiAgICAgIHBhdGg6IHN0cmluZ1xuICAgICAgLy8gQ2xvdWRCYXNlIOmineWklueahOWFg+aVsOaNruWtl+autVxuICAgICAgYXV0aG9yaXphdGlvbj86IHN0cmluZ1xuICAgICAgaWQ/OiBzdHJpbmdcbiAgICAgIGNvc0ZpbGVJZD86IHN0cmluZ1xuICAgICAgZG93bmxvYWRVcmw/OiBzdHJpbmdcbiAgICB9XG4gICAgZXJyb3I6IG51bGxcbiAgfVxuICB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9XG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbG91ZFBhdGggPSB0aGlzLl9nZXRDbG91ZFBhdGgocGF0aClcblxuICAgICAgY29uc3QgeyBkYXRhOiBtZXRhZGF0YSB9ID0gYXdhaXQgdGhpcy5nZXRVcGxvYWRNZXRhZGF0YSh7IGNsb3VkUGF0aCB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc2lnbmVkVXJsOiBtZXRhZGF0YS51cmwsXG4gICAgICAgICAgdG9rZW46IG1ldGFkYXRhLnRva2VuLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgLy8g6L+U5ZueIENsb3VkQmFzZSDnmoTpop3lpJblhYPmlbDmja7vvIzkvpsgdXBsb2FkVG9TaWduZWRVcmwg5L2/55SoXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogbWV0YWRhdGEuYXV0aG9yaXphdGlvbixcbiAgICAgICAgICBpZDogbWV0YWRhdGEuZmlsZUlkLFxuICAgICAgICAgIGNvc0ZpbGVJZDogbWV0YWRhdGEuY29zRmlsZUlkLFxuICAgICAgICAgIGRvd25sb2FkVXJsOiBtZXRhZGF0YS5kb3dubG9hZF91cmwsXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3JcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvciA/IGVycm9yIDogbmV3IFN0b3JhZ2VFcnJvcihlcnJvci5tZXNzYWdlKSxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGZpbGVCb2R5OiBGaWxlQm9keSxcbiAgICBmaWxlT3B0aW9ucz86IEZpbGVPcHRpb25zLFxuICApOiBQcm9taXNlPFxuICAgIHsgZGF0YTogeyBpZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGZ1bGxQYXRoOiBzdHJpbmcgfTsgZXJyb3I6IG51bGwgfSB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9XG4gICAgPiB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkKHBhdGgsIGZpbGVCb2R5LCB7IC4uLmZpbGVPcHRpb25zLCB1cHNlcnQ6IHRydWUgfSlcbiAgfVxuXG4gIGFzeW5jIG1vdmUoXG4gICAgZnJvbVBhdGg6IHN0cmluZyxcbiAgICB0b1BhdGg6IHN0cmluZyxcbiAgICAvLyBvcHRpb25zPzogRGVzdGluYXRpb25PcHRpb25zLFxuICApOiBQcm9taXNlPHsgZGF0YTogeyBtZXNzYWdlOiBzdHJpbmcgfTsgZXJyb3I6IG51bGwgfSB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29weUZpbGUoe1xuICAgICAgICBmaWxlTGlzdDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNyY1BhdGg6IHRoaXMuX2dldENsb3VkUGF0aChmcm9tUGF0aCksXG4gICAgICAgICAgICBkc3RQYXRoOiB0aGlzLl9nZXRDbG91ZFBhdGgodG9QYXRoKSxcbiAgICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgICAgICAgIHJlbW92ZU9yaWdpbmFsOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzdWx0LmZpbGVMaXN0WzBdLmNvZGUgJiYgcmVzdWx0LmZpbGVMaXN0WzBdLmNvZGUgIT09ICdTVUNDRVNTJykge1xuICAgICAgICB0aHJvdyBuZXcgU3RvcmFnZUVycm9yKHJlc3VsdC5maWxlTGlzdFswXS5tZXNzYWdlIHx8ICdNb3ZlIGZhaWxlZCcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHsgbWVzc2FnZTogYEZpbGUgbW92ZWQgZnJvbSAke2Zyb21QYXRofSB0byAke3RvUGF0aH1gIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3JcbiAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvcHkoXG4gICAgZnJvbVBhdGg6IHN0cmluZyxcbiAgICB0b1BhdGg6IHN0cmluZyxcbiAgICAvLyBvcHRpb25zPzogRGVzdGluYXRpb25PcHRpb25zLFxuICApOiBQcm9taXNlPHsgZGF0YTogeyBwYXRoOiBzdHJpbmcgfTsgZXJyb3I6IG51bGwgfSB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29weUZpbGUoe1xuICAgICAgICBmaWxlTGlzdDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNyY1BhdGg6IHRoaXMuX2dldENsb3VkUGF0aChmcm9tUGF0aCksXG4gICAgICAgICAgICBkc3RQYXRoOiB0aGlzLl9nZXRDbG91ZFBhdGgodG9QYXRoKSxcbiAgICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgICAgICAgIHJlbW92ZU9yaWdpbmFsOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3VsdC5maWxlTGlzdFswXS5jb2RlICYmIHJlc3VsdC5maWxlTGlzdFswXS5jb2RlICE9PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VFcnJvcihyZXN1bHQuZmlsZUxpc3RbMF0ubWVzc2FnZSB8fCAnQ29weSBmYWlsZWQnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7IHBhdGg6IHRoaXMuX2dldENsb3VkUGF0aCh0b1BhdGgpIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3JcbiAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVTaWduZWRVcmwoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGV4cGlyZXNJbjogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBkb3dubG9hZD86IHN0cmluZyB8IGJvb2xlYW5cbiAgICAgIHRyYW5zZm9ybT86IFRyYW5zZm9ybU9wdGlvbnNcbiAgICB9LFxuICApOiBQcm9taXNlPHsgZGF0YTogeyBzaWduZWRVcmw6IHN0cmluZyB9OyBlcnJvcjogbnVsbCB9IHwgeyBkYXRhOiBudWxsOyBlcnJvcjogU3RvcmFnZUVycm9yIH0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xvdWRQYXRoID0gdGhpcy5fbm9ybWFsaXplQ2xvdWRJZChwYXRoKVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRUZW1wRmlsZVVSTCh7XG4gICAgICAgIGZpbGVMaXN0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlEOiBjbG91ZFBhdGgsXG4gICAgICAgICAgICBtYXhBZ2U6IGV4cGlyZXNJbixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSlcblxuICAgICAgLy8gSUdldEZpbGVVcmxJdGVtIOaciSBjb2RlIOWtl+auteS9huayoeaciSBtZXNzYWdlIOWtl+autVxuICAgICAgaWYgKHJlc3VsdC5maWxlTGlzdFswXS5jb2RlICE9PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBzaWduZWQgVVJMOiBbJHtyZXN1bHQuZmlsZUxpc3RbMF0uY29kZX1dICR7cmVzdWx0LmZpbGVMaXN0WzBdLmZpbGVJRH1gKVxuICAgICAgfVxuXG4gICAgICBsZXQgc2lnbmVkVXJsID0gcmVzdWx0LmZpbGVMaXN0WzBdLmRvd25sb2FkX3VybFxuXG4gICAgICAvLyDmnoTlu7rmn6Xor6Llj4LmlbBcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgIC8vIOWmguaenOaciSBkb3dubG9hZCDlj4LmlbDvvIzmt7vliqDliLAgVVJMIOS4rVxuICAgICAgaWYgKG9wdGlvbnM/LmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRvd25sb2FkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIC8vIGRvd25sb2FkIOaYr+aWh+S7tuWQjVxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goYGRvd25sb2FkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuZG93bmxvYWQpfWApXG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kb3dubG9hZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIC8vIGRvd25sb2FkIOaYryB0cnVl77yM5L2/55So5Y6f5paH5Lu25ZCN5oiW6buY6K6k5YC8XG4gICAgICAgICAgcXVlcnlQYXJhbXMucHVzaCgnZG93bmxvYWQ9dHJ1ZScpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8g5aaC5p6c5pyJ5Zu+54mH6L2s5o2i5Y+C5pWw77yM5re75Yqg5YiwIFVSTCDkuK1cbiAgICAgIGlmIChvcHRpb25zPy50cmFuc2Zvcm0pIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtUXVlcnkgPSB0aGlzLl90cmFuc2Zvcm1PcHRzVG9RdWVyeVN0cmluZyhvcHRpb25zLnRyYW5zZm9ybSlcbiAgICAgICAgaWYgKHRyYW5zZm9ybVF1ZXJ5KSB7XG4gICAgICAgICAgcXVlcnlQYXJhbXMucHVzaCh0cmFuc2Zvcm1RdWVyeSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDmi7zmjqXmiYDmnInmn6Xor6Llj4LmlbBcbiAgICAgIGlmIChxdWVyeVBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHNpZ25lZFVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nXG4gICAgICAgIHNpZ25lZFVybCA9IGAke3NpZ25lZFVybH0ke3NlcGFyYXRvcn0ke3F1ZXJ5UGFyYW1zLmpvaW4oJyYnKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHsgc2lnbmVkVXJsIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3JcbiAgICAgIGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNpZ25lZFVybHMoXG4gICAgcGF0aHM6IHN0cmluZ1tdLFxuICAgIGV4cGlyZXNJbjogbnVtYmVyLFxuICAgIC8vIG9wdGlvbnM/OiB7XG4gICAgLy8gICBkb3dubG9hZD86IHN0cmluZyB8IGJvb2xlYW5cbiAgICAvLyB9LFxuICApOiBQcm9taXNlPFxuICAgIHwgeyBkYXRhOiBBcnJheTx7IHBhdGg6IHN0cmluZzsgc2lnbmVkVXJsOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0+OyBlcnJvcjogbnVsbCB9XG4gICAgfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfVxuICAgID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlTGlzdCA9IHBhdGhzLm1hcChwID0+ICh7XG4gICAgICAgIGZpbGVJRDogdGhpcy5fbm9ybWFsaXplQ2xvdWRJZChwKSxcbiAgICAgICAgbWF4QWdlOiBleHBpcmVzSW4sXG4gICAgICB9KSlcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRUZW1wRmlsZVVSTCh7IGZpbGVMaXN0IH0pXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHJlc3VsdC5maWxlTGlzdC5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICBwYXRoOiBwYXRoc1tpbmRleF0sXG4gICAgICAgICAgc2lnbmVkVXJsOiBpdGVtLnRlbXBGaWxlVVJMIHx8ICcnLFxuICAgICAgICAgIGVycm9yOiBpdGVtLmNvZGUgPT09ICdTVUNDRVNTJyA/IG51bGwgOiBpdGVtLm1lc3NhZ2UsXG4gICAgICAgIH0pKSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkVGhyb3dPbkVycm9yKSB0aHJvdyBlcnJvclxuICAgICAgaWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG93bmxvYWQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUcmFuc2Zvcm1PcHRpb25zLFxuICApOiBQcm9taXNlPHtcbiAgICAgIGRhdGE6IEJsb2JcbiAgICAgIGVycm9yOiBTdG9yYWdlRXJyb3IgfCBudWxsXG4gICAgfT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNpZ25lZFVybFJlc3VsdCA9IGF3YWl0IHRoaXMuY3JlYXRlU2lnbmVkVXJsKHBhdGgsIDYwMCwgeyB0cmFuc2Zvcm06IG9wdGlvbnMgfSlcbiAgICAgICAgICBpZiAoc2lnbmVkVXJsUmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBzaWduZWRVcmxSZXN1bHQuZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdG1wVXJsID0gZW5jb2RlVVJJKHNpZ25lZFVybFJlc3VsdC5kYXRhPy5zaWduZWRVcmwpXG5cbiAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0ICh0aGlzIGFzIGFueSkucmVxdWVzdC5yZXFDbGFzcy5nZXQoe1xuICAgICAgICAgICAgdXJsOiB0bXBVcmwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7fSwgLy8g5LiL6L296LWE5rqQ6K+35rGC5LiN57uP6L+Hc2VydmljZe+8jGhlYWRlcua4heepulxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VFcnJvcignRG93bmxvYWQgZmFpbGVkOiBubyBmaWxlIGNvbnRlbnQnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIOWwhiBCdWZmZXIg6L2s5o2i5Li6IFVpbnQ4QXJyYXkg5Lul5YW85a65IEJsb2JcbiAgICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2RhdGFdKVxuICAgICAgICB9KSgpLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5paH5Lu25L+h5oGvXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlSWQgLSDnm7jlr7not6/lvoTvvIjlpoIgJ2ltYWdlcy9waG90by5qcGcn77yJ5oiWIENsb3VkQmFzZSBmaWxlSUTvvIjku6UgJ2Nsb3VkOi8vJyDlvIDlpLTvvIlcbiAgICogQHJldHVybnMg5paH5Lu25L+h5oGv5a+56LGhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8g5L2/55So55u45a+56Lev5b6EXG4gICAqIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYnVja2V0LmluZm8oJ2ltYWdlcy9waG90by5qcGcnKVxuICAgKlxuICAgKiAvLyDkvb/nlKggQ2xvdWRCYXNlIGZpbGVJRFxuICAgKiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGJ1Y2tldC5pbmZvKCdjbG91ZDovL2Vudi1pZC54eHh4LXh4eHgvaW1hZ2VzL3Bob3RvLmpwZycpXG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgaW5mbyhwYXRoT3JGaWxlSWQ6IHN0cmluZywpOiBQcm9taXNlPHsgZGF0YTogQ2FtZWxpemU8RmlsZU9iamVjdFYyPjsgZXJyb3I6IG51bGwgfSB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWIpOaWreaYryBmaWxlSUQg6L+Y5piv55u45a+56Lev5b6EXG4gICAgICBjb25zdCBpc0ZpbGVJZCA9IHBhdGhPckZpbGVJZC5zdGFydHNXaXRoKCdjbG91ZDovLycpXG4gICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGlzRmlsZUlkID8gdGhpcy5fZXh0cmFjdFBhdGhGcm9tRmlsZUlkKHBhdGhPckZpbGVJZCkgOiBwYXRoT3JGaWxlSWRcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaXNGaWxlSWQgPyB0aGlzLl9leHRyYWN0QnVja2V0RnJvbUZpbGVJZChwYXRoT3JGaWxlSWQpIDogdGhpcy5idWNrZXRJZFxuXG4gICAgICBjb25zdCBmaWxlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0RmlsZUluZm8oe1xuICAgICAgICBmaWxlTGlzdDogW3RoaXMuX25vcm1hbGl6ZUNsb3VkSWQocGF0aE9yRmlsZUlkKV0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBpdGVtID0gZmlsZUluZm8uZmlsZUxpc3RbMF1cblxuICAgICAgaWYgKGl0ZW0uY29kZSAhPT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgIHRocm93IG5ldyBTdG9yYWdlRXJyb3IoaXRlbS5tZXNzYWdlKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IChpdGVtLmxhc3RNb2RpZmllZCA/IG5ldyBEYXRlKGl0ZW0ubGFzdE1vZGlmaWVkKSA6IG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBpZDogaXRlbS5maWxlSUQsXG4gICAgICAgICAgdmVyc2lvbjogJzEnLFxuICAgICAgICAgIG5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbGFzdE1vZGlmaWVkLFxuICAgICAgICAgIGNyZWF0ZWRBdDogbGFzdE1vZGlmaWVkLFxuICAgICAgICAgIGxhc3RBY2Nlc3NlZEF0OiBub3csXG4gICAgICAgICAgc2l6ZTogaXRlbS5zaXplLFxuICAgICAgICAgIGNhY2hlQ29udHJvbDogaXRlbS5jYWNoZUNvbnRyb2wsXG4gICAgICAgICAgY29udGVudFR5cGU6IGl0ZW0uY29udGVudFR5cGUsXG4gICAgICAgICAgZXRhZzogaXRlbS5ldGFnLFxuICAgICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3JcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvciA/IGVycm9yIDogbmV3IFN0b3JhZ2VFcnJvcihlcnJvci5tZXNzYWdlKSxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBleGlzdHMocGF0aE9yRmlsZUlkOiBzdHJpbmcpOiBQcm9taXNlPHsgZGF0YTogYm9vbGVhbjsgZXJyb3I6IG51bGwgfSB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWIpOaWreaYryBmaWxlSUQg6L+Y5piv55u45a+56Lev5b6EXG4gICAgICBjb25zdCBmaWxlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0RmlsZUluZm8oe1xuICAgICAgICBmaWxlTGlzdDogW3RoaXMuX25vcm1hbGl6ZUNsb3VkSWQocGF0aE9yRmlsZUlkKV0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBpdGVtID0gZmlsZUluZm8uZmlsZUxpc3RbMF1cblxuICAgICAgaWYgKGl0ZW0uY29kZSA9PT0gJ0ZJTEVfTk9UX0ZPVU5EJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtLmNvZGUgIT09ICdTVUNDRVNTJykge1xuICAgICAgICB0aHJvdyBuZXcgU3RvcmFnZUVycm9yKGl0ZW0ubWVzc2FnZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgZGF0YTogdHJ1ZSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3JcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0UHVibGljVXJsKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgZG93bmxvYWQ/OiBzdHJpbmcgfCBib29sZWFuXG4gICAgICB0cmFuc2Zvcm0/OiBUcmFuc2Zvcm1PcHRpb25zXG4gICAgfSxcbiAgKTogUHJvbWlzZTxcbiAgICB8IHtcbiAgICAgIGRhdGE6IHsgcHVibGljVXJsOiBzdHJpbmcgfVxuICAgIH1cbiAgICB8IHsgZGF0YTogbnVsbDsgZXJyb3I6IFN0b3JhZ2VFcnJvciB9XG4gICAgPiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jcmVhdGVTaWduZWRVcmwocGF0aCwgNjAwLCBvcHRpb25zKVxuXG4gICAgaWYgKHJlcy5kYXRhKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7IHB1YmxpY1VybDogcmVzLmRhdGEuc2lnbmVkVXJsIH0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IHJlcy5lcnJvciBhcyBTdG9yYWdlRXJyb3IgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlKHBhdGhzOiBzdHJpbmdbXSk6IFByb21pc2U8eyBkYXRhOiBGaWxlT2JqZWN0W107IGVycm9yOiBudWxsIH0gfCB7IGRhdGE6IG51bGw7IGVycm9yOiBTdG9yYWdlRXJyb3IgfT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDliIbnu4Tojrflj5bmlofku7bkv6Hmga/vvIzmr4/nu4TmnIDlpJoxMOS4qlxuICAgICAgY29uc3QgY2h1bmtTaXplID0gMTBcbiAgICAgIGNvbnN0IHBhdGhDaHVua3M6IHN0cmluZ1tdW10gPSBbXVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgICAgIHBhdGhDaHVua3MucHVzaChwYXRocy5zbGljZShpLCBpICsgY2h1bmtTaXplKSlcbiAgICAgIH1cblxuICAgICAgLy8g5bm26KGM6I635Y+W5omA5pyJ5YiG57uE55qE5paH5Lu25L+h5oGvXG4gICAgICBjb25zdCBmaWxlSW5mb1Jlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChwYXRoQ2h1bmtzLm1hcChjaHVuayA9PiBQcm9taXNlLmFsbChjaHVuay5tYXAocGF0aCA9PiB0aGlzLmluZm8ocGF0aCkpKSksKVxuXG4gICAgICAvLyDlkIjlubbmiYDmnInmlofku7bkv6Hmga/lubbmnoTlu7rmmKDlsITooajvvIhwYXRoIC0+IGZpbGVJbmZv77yJXG4gICAgICBjb25zdCBmaWxlSW5mb01hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYW1lbGl6ZTxGaWxlT2JqZWN0VjI+PigpXG4gICAgICBmaWxlSW5mb1Jlc3VsdHMuZmxhdCgpLmZvckVhY2goKHJlc3VsdCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5kYXRhKSB7XG4gICAgICAgICAgZmlsZUluZm9NYXAuc2V0KHBhdGhzW01hdGguZmxvb3IoaW5kZXggLyBjaHVua1NpemUpICogY2h1bmtTaXplICsgKGluZGV4ICUgY2h1bmtTaXplKV0sIHJlc3VsdC5kYXRhKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyDmiafooYzliKDpmaTmk43kvZxcbiAgICAgIGNvbnN0IGZpbGVMaXN0ID0gcGF0aHMubWFwKHAgPT4gdGhpcy5fbm9ybWFsaXplQ2xvdWRJZChwKSlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGVsZXRlRmlsZSh7IGZpbGVMaXN0IH0pXG5cbiAgICAgIC8vIElEZWxldGVGaWxlUmVzIOeahCBmaWxlTGlzdCDmlbDnu4TkuK3mr4/kuKrpobnmnIkgY29kZSDlrZfmrrVcbiAgICAgIGNvbnN0IGZhaWxlZEZpbGVzID0gcmVzdWx0LmZpbGVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0uY29kZSAhPT0gJ1NVQ0NFU1MnKVxuICAgICAgaWYgKGZhaWxlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VFcnJvcihgRGVsZXRlIGZhaWxlZCBmb3IgJHtmYWlsZWRGaWxlcy5sZW5ndGh9IGZpbGUocylgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcblxuICAgICAgLy8g5L2/55So6I635Y+W5Yiw55qE5paH5Lu25L+h5oGv5p6E5bu66L+U5Zue5pWw5o2uXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBwYXRocy5tYXAoKHApID0+IHtcbiAgICAgICAgICBjb25zdCBpbmZvID0gZmlsZUluZm9NYXAuZ2V0KHApXG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogaW5mbz8ubmFtZSxcbiAgICAgICAgICAgIGlkOiBpbmZvPy5pZCxcbiAgICAgICAgICAgIGJ1Y2tldF9pZDogaW5mbz8uYnVja2V0SWQsXG4gICAgICAgICAgICBvd25lcjogdW5kZWZpbmVkLCAvLyDml6Dms5XorqHnrpdvd25lclxuICAgICAgICAgICAgdXBkYXRlZF9hdDogaW5mbz8udXBkYXRlZEF0IHx8IG5vdyxcbiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IGluZm8/LmNyZWF0ZWRBdCxcbiAgICAgICAgICAgIGxhc3RfYWNjZXNzZWRfYXQ6IGluZm8/Lmxhc3RBY2Nlc3NlZEF0IHx8IG5vdyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBpbmZvPy5tZXRhZGF0YSB8fCB7fSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVE9ETzog6I635Y+W6KGl5YWoIEJ1Y2tldCDkv6Hmga9cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYnVja2V0czoge1xuICAgICAgICAgICAgICBpZDogaW5mbz8uYnVja2V0SWQsXG4gICAgICAgICAgICAgIG5hbWU6IGluZm8/LmJ1Y2tldElkLFxuICAgICAgICAgICAgICBvd25lcjogdW5kZWZpbmVkLCAvLyDml6Dms5XorqHnrpdvd25lclxuICAgICAgICAgICAgICBwdWJsaWM6IGZhbHNlLCAvLyDmnKrnn6VcbiAgICAgICAgICAgICAgY3JlYXRlZF9hdDogJycsIC8vIOacquefpVxuICAgICAgICAgICAgICB1cGRhdGVkX2F0OiBub3csIC8vIOacquefpVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yXG4gICAgICBpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0KCkge1xuICAgIHRocm93IG5ldyBTdG9yYWdlRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBwcml2YXRlIF9nZXRDbG91ZFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyDmuIXnkIbot6/lvoTvvJrnp7vpmaTpppblsL7mlpzmnaDvvIzlkIjlubblpJrkuKrmlpzmnaBcbiAgICBjb25zdCBjbGVhblBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCAnJykucmVwbGFjZSgvXFwvKy9nLCAnLycpXG5cbiAgICAvLyDlkKbliJnov5Tlm57muIXnkIblkI7nmoTnm7jlr7not6/lvoRcbiAgICByZXR1cm4gY2xlYW5QYXRoXG4gIH1cblxuICBwcml2YXRlIF9ub3JtYWxpemVDbG91ZElkKHBhdGg6IHN0cmluZykge1xuICAgIC8vIOWmguaenOW3sue7j+aYryBjbG91ZDovLyDmoLzlvI/vvIznm7TmjqXov5Tlm55cbiAgICBpZiAoL15jbG91ZDpcXC9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICAgIGNvbnN0IGNsZWFuUGF0aCA9IHRoaXMuX2dldENsb3VkUGF0aChwYXRoKVxuXG4gICAgLy8g5aaC5p6c6K6+572u5LqGIGJ1Y2tldElk77yM5p6E5bu65a6M5pW055qEIGNsb3VkOi8vIOi3r+W+hFxuICAgIGlmICh0aGlzLmJ1Y2tldElkKSB7XG4gICAgICAvLyDojrflj5bnjq/looMgSURcbiAgICAgIGNvbnN0IGVudklkID0gdGhpcy5jb25maWc/LmVudiB8fCAnJ1xuICAgICAgaWYgKGVudklkKSB7XG4gICAgICAgIHJldHVybiBgY2xvdWQ6Ly8ke2VudklkfS4ke3RoaXMuYnVja2V0SWR9LyR7Y2xlYW5QYXRofWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VFcnJvcignYnVja2V0SWQgaXMgbm90IHNldCcpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b0Jhc2U2NChkYXRhOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKS50b1N0cmluZygnYmFzZTY0JylcbiAgICB9XG4gICAgcmV0dXJuIGJ0b2EoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiDlsIYgVHJhbnNmb3JtT3B0aW9ucyDovazmjaLkuLrohb7orq/kupHmlbDmja7kuIfosaHnmoQgaW1hZ2VNb2dyMiDmn6Xor6LlrZfnrKbkuLJcbiAgICpcbiAgICog6IW+6K6v5LqR5pWw5o2u5LiH6LGh5L2/55SoIGltYWdlTW9ncjIg5o6l5Y+j6L+b6KGM5Zu+54mH5aSE55CG77yM5pSv5oyB5Lul5LiL5Y+C5pWw77yaXG4gICAqIC0gL3RodW1ibmFpbC88V2lkdGg+eDxIZWlnaHQ+IC0g57yp5pS+XG4gICAqIC0gL2Zvcm1hdC88Rm9ybWF0PiAtIOagvOW8j+i9rOaNolxuICAgKiAtIC9xdWFsaXR5LzxRdWFsaXR5PiAtIOi0qOmHj+iwg+aVtFxuICAgKiAtIC9ycXVhbGl0eS88UXVhbGl0eT4gLSDnm7jlr7notKjph49cbiAgICpcbiAgICogQHBhcmFtIHRyYW5zZm9ybSAtIFN1cGFiYXNlIFRyYW5zZm9ybU9wdGlvbnNcbiAgICogQHJldHVybnMg6IW+6K6v5LqR5pWw5o2u5LiH6LGh55qE5p+l6K+i5a2X56ym5LiyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogX3RyYW5zZm9ybU9wdHNUb1F1ZXJ5U3RyaW5nKHsgd2lkdGg6IDMwMCwgaGVpZ2h0OiAyMDAsIHF1YWxpdHk6IDgwLCBmb3JtYXQ6ICdvcmlnaW4nIH0pXG4gICAqIC8vIOi/lOWbnjogJ2ltYWdlTW9ncjIvdGh1bWJuYWlsLzMwMHgyMDAvcXVhbGl0eS84MCdcbiAgICogYGBgXG4gICAqL1xuICBwcml2YXRlIF90cmFuc2Zvcm1PcHRzVG9RdWVyeVN0cmluZyh0cmFuc2Zvcm06IFRyYW5zZm9ybU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcmFtczogc3RyaW5nW10gPSBbJ2ltYWdlTW9ncjInXVxuXG4gICAgLy8g5aSE55CG57yp5pS+5Y+C5pWwXG4gICAgaWYgKHRyYW5zZm9ybS53aWR0aCB8fCB0cmFuc2Zvcm0uaGVpZ2h0KSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHRyYW5zZm9ybS53aWR0aCB8fCAnJ1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdHJhbnNmb3JtLmhlaWdodCB8fCAnJ1xuXG4gICAgICAvLyDmoLnmja4gcmVzaXplIOaooeW8j+mAieaLqeS4jeWQjOeahOe8qeaUvuaWueW8j1xuICAgICAgaWYgKHRyYW5zZm9ybS5yZXNpemUgPT09ICdmaWxsJykge1xuICAgICAgICAvLyBmaWxsOiDlvLrliLbnvKnmlL7liLDmjIflrprlsLrlr7jvvIzlj6/og73lj5jlvaJcbiAgICAgICAgcGFyYW1zLnB1c2goYHRodW1ibmFpbC8ke3dpZHRofXgke2hlaWdodH0hYClcbiAgICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtLnJlc2l6ZSA9PT0gJ2NvbnRhaW4nKSB7XG4gICAgICAgIC8vIGNvbnRhaW46IOetieavlOe8qeaUvu+8jOWujOaVtOaYvuekuuWcqOaMh+WumuWwuuWvuOWGhVxuICAgICAgICBwYXJhbXMucHVzaChgdGh1bWJuYWlsLyR7d2lkdGh9eCR7aGVpZ2h0fWApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb3ZlciAo6buY6K6kKTog562J5q+U57yp5pS+77yM5aGr5YWF5oyH5a6a5bC65a+477yM5Y+v6IO96KOB5YmqXG4gICAgICAgIC8vIOS9v+eUqCAvdGh1bWJuYWlsLzxXaWR0aD54PEhlaWdodD5eIOihqOekuuWhq+WFheaooeW8j1xuICAgICAgICBwYXJhbXMucHVzaChgdGh1bWJuYWlsLyR7d2lkdGh9eCR7aGVpZ2h0fV5gKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOWkhOeQhuagvOW8j+i9rOaNolxuICAgIC8vIGZvcm1hdDogJ29yaWdpbicg6KGo56S65L+d5oyB5Y6f5qC85byP77yM5LiN5Lyg5q2k5Y+C5pWwXG4gICAgaWYgKHRyYW5zZm9ybS5mb3JtYXQgJiYgdHJhbnNmb3JtLmZvcm1hdCAhPT0gJ29yaWdpbicpIHtcbiAgICAgIHBhcmFtcy5wdXNoKGBmb3JtYXQvJHt0cmFuc2Zvcm0uZm9ybWF0fWApXG4gICAgfVxuXG4gICAgLy8g5aSE55CG6LSo6YeP5Y+C5pWwXG4gICAgaWYgKHRyYW5zZm9ybS5xdWFsaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIOiFvuiur+S6keaVsOaNruS4h+ixoeeahCBxdWFsaXR5IOWPguaVsOiMg+WbtOaYryAxLTEwMFxuICAgICAgY29uc3QgcXVhbGl0eSA9IE1hdGgubWF4KDEsIE1hdGgubWluKDEwMCwgdHJhbnNmb3JtLnF1YWxpdHkpKVxuICAgICAgcGFyYW1zLnB1c2goYHF1YWxpdHkvJHtxdWFsaXR5fWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcy5qb2luKCcvJylcbiAgfVxuXG4gIC8qKlxuICAgKiDku44gQ2xvdWRCYXNlIGZpbGVJRCDkuK3mj5Dlj5bmlofku7bot6/lvoRcbiAgICpcbiAgICogQHBhcmFtIGZpbGVJZCAtIENsb3VkQmFzZSBmaWxlSUQgKOagvOW8jzogY2xvdWQ6Ly9lbnYtaWQuYnVja2V0L3BhdGgvdG8vZmlsZS5qcGcpXG4gICAqIEByZXR1cm5zIOaPkOWPlueahOaWh+S7tui3r+W+hFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIF9leHRyYWN0UGF0aEZyb21GaWxlSWQoJ2Nsb3VkOi8vdGVzdC1lbnYudGVzdC1idWNrZXQvaW1hZ2VzL3Bob3RvLmpwZycpXG4gICAqIC8vIOi/lOWbnjogJ2ltYWdlcy9waG90by5qcGcnXG4gICAqXG4gICAqIF9leHRyYWN0UGF0aEZyb21GaWxlSWQoJ2Nsb3VkOi8vdGVzdC1lbnYudGVzdC1idWNrZXQvZmlsZS50eHQnKVxuICAgKiAvLyDov5Tlm546ICdmaWxlLnR4dCdcbiAgICogYGBgXG4gICAqL1xuICBwcml2YXRlIF9leHRyYWN0UGF0aEZyb21GaWxlSWQoZmlsZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIGZpbGVJRCDmoLzlvI86IGNsb3VkOi8vZW52LWlkLmJ1Y2tldC9wYXRoL3RvL2ZpbGUuanBnXG4gICAgLy8g6ZyA6KaB5o+Q5Y+W56ys5LiA5LiqIC8g5ZCO6Z2i55qE5omA5pyJ5YaF5a6577yI5YyF5ousIGJ1Y2tldCDlkozot6/lvoTvvIlcbiAgICAvLyDnhLblkI7lho3mj5Dlj5YgYnVja2V0IOWQjumdoueahOi3r+W+hOmDqOWIhlxuXG4gICAgLy8g56e76ZmkIGNsb3VkOi8vIOWJjee8gFxuICAgIGNvbnN0IHdpdGhvdXRQcm90b2NvbCA9IGZpbGVJZC5yZXBsYWNlKC9eY2xvdWQ6XFwvXFwvLywgJycpXG5cbiAgICAvLyDliIblibLkuLogW2Vudi1pZC5idWNrZXQsIHBhdGgsIHRvLCBmaWxlLmpwZ11cbiAgICBjb25zdCBwYXJ0cyA9IHdpdGhvdXRQcm90b2NvbC5zcGxpdCgnLycpXG5cbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMikge1xuICAgICAgLy8g5aaC5p6c5peg5rOV6Kej5p6Q77yM6L+U5Zue5a6M5pW055qEIGZpbGVJRFxuICAgICAgcmV0dXJuIGZpbGVJZFxuICAgIH1cblxuICAgIC8vIOenu+mZpOesrOS4gOmDqOWIhu+8iGVudi1pZC5idWNrZXTvvInvvIzov5Tlm57liankvZnot6/lvoRcbiAgICByZXR1cm4gcGFydHMuc2xpY2UoMSkuam9pbignLycpXG4gIH1cblxuICAvKipcbiAgICog5LuOIENsb3VkQmFzZSBmaWxlSUQg5Lit5o+Q5Y+WIGJ1Y2tldCDlkI3np7BcbiAgICpcbiAgICogQHBhcmFtIGZpbGVJZCAtIENsb3VkQmFzZSBmaWxlSUQgKOagvOW8jzogY2xvdWQ6Ly9lbnYtaWQuYnVja2V0L3BhdGgvdG8vZmlsZS5qcGcpXG4gICAqIEByZXR1cm5zIOaPkOWPlueahCBidWNrZXQg5ZCN56ewXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogX2V4dHJhY3RCdWNrZXRGcm9tRmlsZUlkKCdjbG91ZDovL3Rlc3QtZW52LnRlc3QtYnVja2V0L2ltYWdlcy9waG90by5qcGcnKVxuICAgKiAvLyDov5Tlm546ICd0ZXN0LWJ1Y2tldCdcbiAgICpcbiAgICogX2V4dHJhY3RCdWNrZXRGcm9tRmlsZUlkKCdjbG91ZDovL3Byb2QtZW52Lm15LWJ1Y2tldC9maWxlLnR4dCcpXG4gICAqIC8vIOi/lOWbnjogJ215LWJ1Y2tldCdcbiAgICogYGBgXG4gICAqL1xuICBwcml2YXRlIF9leHRyYWN0QnVja2V0RnJvbUZpbGVJZChmaWxlSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gZmlsZUlEIOagvOW8jzogY2xvdWQ6Ly9lbnYtaWQuYnVja2V0L3BhdGgvdG8vZmlsZS5qcGdcbiAgICAvLyDpnIDopoHmj5Dlj5YgZW52LWlkLmJ1Y2tldCDkuK3nmoQgYnVja2V0IOmDqOWIhlxuXG4gICAgLy8g56e76ZmkIGNsb3VkOi8vIOWJjee8gFxuICAgIGNvbnN0IHdpdGhvdXRQcm90b2NvbCA9IGZpbGVJZC5yZXBsYWNlKC9eY2xvdWQ6XFwvXFwvLywgJycpXG5cbiAgICAvLyDliIblibLkuLogW2Vudi1pZC5idWNrZXQsIHBhdGgsIHRvLCBmaWxlLmpwZ11cbiAgICBjb25zdCBwYXJ0cyA9IHdpdGhvdXRQcm90b2NvbC5zcGxpdCgnLycpXG5cbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMSkge1xuICAgICAgLy8g5aaC5p6c5peg5rOV6Kej5p6Q77yM6L+U5Zue6buY6K6kIGJ1Y2tldFxuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8g56ys5LiA6YOo5YiG5pivIGVudi1pZC5idWNrZXTvvIzmj5Dlj5YgYnVja2V0IOmDqOWIhlxuICAgIC8vIOagvOW8jzogZW52LWlkLmJ1Y2tldCDmiJYgZW52LWlkLmJ1Y2tldC1uYW1lXG4gICAgY29uc3QgZW52QW5kQnVja2V0ID0gcGFydHNbMF1cblxuICAgIC8vIOafpeaJvuesrOS4gOS4queCueeahOS9jee9rlxuICAgIGNvbnN0IGRvdEluZGV4ID0gZW52QW5kQnVja2V0LmluZGV4T2YoJy4nKVxuXG4gICAgaWYgKGRvdEluZGV4ID09PSAtMSkge1xuICAgICAgLy8g5aaC5p6c5rKh5pyJ54K577yM6L+U5Zue5pW05Liq5a2X56ym5LiyXG4gICAgICByZXR1cm4gZW52QW5kQnVja2V0XG4gICAgfVxuXG4gICAgLy8g6L+U5Zue54K55ZCO6Z2i55qE6YOo5YiG77yIYnVja2V0IOWQjeensO+8iVxuICAgIHJldHVybiBlbnZBbmRCdWNrZXQuc3Vic3RyaW5nKGRvdEluZGV4ICsgMSlcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/storage",
3
- "version": "2.24.0",
3
+ "version": "2.24.1",
4
4
  "description": "cloudbase js sdk storage module",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -27,8 +27,8 @@
27
27
  "author": "",
28
28
  "license": "Apache-2.0",
29
29
  "dependencies": {
30
- "@cloudbase/types": "2.24.0",
31
- "@cloudbase/utilities": "2.24.0"
30
+ "@cloudbase/types": "2.24.1",
31
+ "@cloudbase/utilities": "2.24.1"
32
32
  },
33
- "gitHead": "7dac230344ecae3eec15358b2f85d782fde51839"
33
+ "gitHead": "a47390cc332844875a3fc02646810d78dc05d027"
34
34
  }
package/src/index.ts CHANGED
@@ -5,24 +5,18 @@ import { SupabaseFileAPILikeStorage } from './supabase'
5
5
 
6
6
  declare const cloudbase: ICloudbase
7
7
 
8
+ const storage = new CloudbaseStorage()
8
9
  const component: ICloudbaseComponent = {
9
10
  name: COMPONENT_NAME,
10
- entity() {
11
- const context: ICloudbaseContext = {
12
- config: this.config,
13
- request: this.request,
14
- }
15
- const storage = new CloudbaseStorage(context)
16
- return {
17
- uploadFile: storage.uploadFile.bind(storage),
18
- deleteFile: storage.deleteFile.bind(storage),
19
- getTempFileURL: storage.getTempFileURL.bind(storage),
20
- downloadFile: storage.downloadFile.bind(storage),
21
- getUploadMetadata: storage.getUploadMetadata.bind(storage),
22
- copyFile: storage.copyFile.bind(storage),
23
- getFileInfo: storage.getFileInfo.bind(storage),
24
- isGateWay: storage.isGateWay.bind(storage),
25
- }
11
+ entity: {
12
+ uploadFile: storage.uploadFile,
13
+ deleteFile: storage.deleteFile,
14
+ getTempFileURL: storage.getTempFileURL,
15
+ downloadFile: storage.downloadFile,
16
+ getUploadMetadata: storage.getUploadMetadata,
17
+ copyFile: storage.copyFile,
18
+ getFileInfo: storage.getFileInfo,
19
+ isGateWay: storage.isGateWay,
26
20
  },
27
21
  }
28
22
 
package/src/storage.ts CHANGED
@@ -174,21 +174,6 @@ export interface ICloudbaseContext {
174
174
  }
175
175
 
176
176
  export class CloudbaseStorage {
177
- private context?: ICloudbaseContext
178
- constructor(context?: ICloudbaseContext) {
179
- this.context = context
180
- }
181
-
182
- get config() {
183
- // @ts-ignore
184
- return this.context?.config
185
- }
186
-
187
- get request() {
188
- // @ts-ignore
189
- return this.context?.request
190
- }
191
-
192
177
  public isGateWay() {
193
178
  // @ts-ignore
194
179
  const { config } = this
@@ -1,6 +1,6 @@
1
1
  import { constants } from '@cloudbase/utilities'
2
2
 
3
- import { CloudbaseStorage, COMPONENT_NAME } from '../storage'
3
+ import { CloudbaseStorage, COMPONENT_NAME, ICloudbaseContext } from '../storage'
4
4
 
5
5
  import { Camelize, FileBody, FileObject, FileObjectV2, FileOptions, TransformOptions } from './types'
6
6
  import { isStorageError, StorageError } from './errors'
@@ -10,6 +10,22 @@ const { ERRORS } = constants
10
10
  export class SupabaseFileAPILikeStorage extends CloudbaseStorage {
11
11
  private shouldThrowOnError = false
12
12
  private bucketId = ''
13
+ private context: ICloudbaseContext
14
+
15
+ constructor(context?: ICloudbaseContext) {
16
+ super()
17
+ this.context = context
18
+ }
19
+
20
+ get config() {
21
+ // @ts-ignore
22
+ return this.context?.config
23
+ }
24
+
25
+ get request() {
26
+ // @ts-ignore
27
+ return this.context?.request
28
+ }
13
29
 
14
30
  throwOnError(): this {
15
31
  this.shouldThrowOnError = true