appium 2.0.0-beta.40 → 2.0.0-beta.43
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.
- package/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +14 -15
- package/build/lib/cli/args.d.ts +2 -5
- package/build/lib/cli/args.d.ts.map +1 -1
- package/build/lib/cli/args.js +2 -2
- package/build/lib/cli/driver-command.d.ts +2 -1
- package/build/lib/cli/driver-command.d.ts.map +1 -1
- package/build/lib/cli/driver-command.js +5 -3
- package/build/lib/cli/extension-command.d.ts +5 -1
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +4 -3
- package/build/lib/cli/extension.d.ts +8 -4
- package/build/lib/cli/extension.d.ts.map +1 -1
- package/build/lib/cli/extension.js +2 -1
- package/build/lib/cli/parser.d.ts +5 -1
- package/build/lib/cli/parser.d.ts.map +1 -1
- package/build/lib/cli/parser.js +19 -6
- package/build/lib/cli/plugin-command.d.ts +2 -1
- package/build/lib/cli/plugin-command.d.ts.map +1 -1
- package/build/lib/cli/plugin-command.js +5 -3
- package/build/lib/config-file.d.ts.map +1 -1
- package/build/lib/config-file.js +8 -6
- package/build/lib/config.d.ts +10 -2
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +30 -32
- package/build/lib/extension/extension-config.d.ts.map +1 -1
- package/build/lib/extension/extension-config.js +3 -3
- package/build/lib/extension/index.js +6 -5
- package/build/lib/extension/package-changed.js +2 -4
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +25 -31
- package/build/lib/schema/arg-spec.d.ts +5 -5
- package/build/lib/schema/arg-spec.d.ts.map +1 -1
- package/build/lib/schema/arg-spec.js +2 -2
- package/build/lib/schema/cli-args.js +5 -7
- package/build/lib/schema/schema.d.ts +3 -3
- package/build/lib/schema/schema.d.ts.map +1 -1
- package/build/lib/schema/schema.js +2 -4
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/cli.d.ts +16 -5
- package/build/types/cli.d.ts.map +1 -1
- package/lib/appium.js +8 -5
- package/lib/cli/args.js +3 -5
- package/lib/cli/driver-command.js +2 -2
- package/lib/cli/extension-command.js +3 -2
- package/lib/cli/extension.js +16 -4
- package/lib/cli/parser.js +27 -5
- package/lib/cli/plugin-command.js +2 -2
- package/lib/config-file.js +4 -2
- package/lib/config.js +40 -26
- package/lib/extension/extension-config.js +4 -6
- package/lib/main.js +21 -14
- package/lib/schema/arg-spec.js +1 -1
- package/lib/schema/schema.js +1 -1
- package/package.json +27 -17
- package/scripts/autoinstall-extensions.js +11 -3
- package/test.d.ts +7 -0
- package/test.js +13 -0
- package/types/cli.ts +23 -19
|
@@ -136,14 +136,14 @@ class ExtensionConfig {
|
|
|
136
136
|
} = this.getValidationResultSummaries(errorMap, warningMap);
|
|
137
137
|
|
|
138
138
|
if (!_lodash.default.isEmpty(errorSummaries)) {
|
|
139
|
-
_logger.default.error(`Appium encountered ${_support.util.pluralize('error',
|
|
139
|
+
_logger.default.error(`Appium encountered ${_support.util.pluralize('error', errorMap.size, true)} while validating ${this.configKey} found in manifest ${this.manifestPath}`);
|
|
140
140
|
|
|
141
141
|
for (const summary of errorSummaries) {
|
|
142
142
|
_logger.default.error(summary);
|
|
143
143
|
}
|
|
144
144
|
} else {
|
|
145
145
|
if (!_lodash.default.isEmpty(warningSummaries)) {
|
|
146
|
-
_logger.default.warn(`Appium encountered ${_support.util.pluralize('warning',
|
|
146
|
+
_logger.default.warn(`Appium encountered ${_support.util.pluralize('warning', warningMap.size, true)} while validating ${this.configKey} found in manifest ${this.manifestPath}`);
|
|
147
147
|
|
|
148
148
|
for (const summary of warningSummaries) {
|
|
149
149
|
_logger.default.warn(summary);
|
|
@@ -433,4 +433,4 @@ class ExtensionConfig {
|
|
|
433
433
|
}
|
|
434
434
|
|
|
435
435
|
exports.ExtensionConfig = ExtensionConfig;
|
|
436
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlNUQUxMX1RZUEVfTlBNIiwiSU5TVEFMTF9UWVBFX0xPQ0FMIiwiSU5TVEFMTF9UWVBFX0dJVEhVQiIsIklOU1RBTExfVFlQRV9HSVQiLCJJTlNUQUxMX1RZUEVTIiwiU2V0IiwiRXh0ZW5zaW9uQ29uZmlnIiwiZXh0ZW5zaW9uVHlwZSIsImNvbmZpZ0tleSIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJsb2ciLCJtYW5pZmVzdCIsIl9saXN0RGF0YUNhY2hlIiwiY29uc3RydWN0b3IiLCJnZXRFeHRlbnNpb25EYXRhIiwibWFuaWZlc3RQYXRoIiwiYXBwaXVtSG9tZSIsImdldFByb2JsZW1zIiwiZXh0TmFtZSIsImV4dE1hbmlmZXN0IiwiZ2V0R2VuZXJpY0NvbmZpZ1Byb2JsZW1zIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJnZXRTY2hlbWFQcm9ibGVtcyIsImdldFdhcm5pbmdzIiwiZ2VuZXJpY0NvbmZpZ1dhcm5pbmdzIiwiY29uZmlnV2FybmluZ3MiLCJCIiwiYWxsIiwiZ2V0R2VuZXJpY0NvbmZpZ1dhcm5pbmdzIiwiZ2V0Q29uZmlnV2FybmluZ3MiLCJnZXRWYWxpZGF0aW9uUmVzdWx0U3VtbWFyaWVzIiwiZXJyb3JNYXAiLCJNYXAiLCJ3YXJuaW5nTWFwIiwiZXJyb3JTdW1tYXJpZXMiLCJwcm9ibGVtcyIsImVudHJpZXMiLCJfIiwiaXNFbXB0eSIsInB1c2giLCJ1dGlsIiwicGx1cmFsaXplIiwibGVuZ3RoIiwicHJvYmxlbSIsImVyciIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2YWwiLCJ3YXJuaW5nU3VtbWFyaWVzIiwid2FybmluZ3MiLCJleHRUeXBlVGV4dCIsImNhcGl0YWxpemUiLCJwcm9ibGVtRW51bWVyYXRpb25UZXh0Iiwid2FybmluZyIsIl92YWxpZGF0ZSIsImV4dHMiLCJ0b1BhaXJzIiwiZXJyb3JzIiwic2V0IiwiZXJyb3IiLCJzdW1tYXJ5Iiwid2FybiIsImdldExpc3REYXRhIiwiQ29tbWFuZENsYXNzIiwiY29tbWFuZENsYXNzZXMiLCJjbWQiLCJjb25maWciLCJqc29uIiwibGlzdERhdGEiLCJsaXN0Iiwic2hvd0luc3RhbGxlZCIsInNob3dVcGRhdGVzIiwiYXBwaXVtVmVyc2lvbiIsImluc3RhbGxTcGVjIiwiaW5zdGFsbFR5cGUiLCJwa2dOYW1lIiwiaW52YWxpZEZpZWxkcyIsImlzU3RyaW5nIiwiaGFzIiwiaW52YWxpZEZpZWxkc0VudW1lcmF0aW9uVGV4dCIsImludmFsaWRGaWVsZHNUZXh0IiwibWFwIiwiZmllbGQiLCJqb2luIiwiY3JlYXRlUGVlcldhcm5pbmciLCJyZWFzb24iLCJBUFBJVU1fVkVSIiwic2F0aXNmaWVzIiwiZXh0TGlzdERhdGEiLCJpbnN0YWxsZWQiLCJ1cGRhdGVWZXJzaW9uIiwidXBUb0RhdGUiLCJzY2hlbWEiLCJhcmdTY2hlbWFQYXRoIiwiZXh0RGF0YUhhc1NjaGVtYSIsImlzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb24iLCJyZWFkRXh0ZW5zaW9uU2NoZW1hIiwibWVzc2FnZSIsIkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMiLCJpc1BsYWluT2JqZWN0IiwidmVyc2lvbiIsIm1haW5DbGFzcyIsImFkZEV4dGVuc2lvbiIsIndyaXRlIiwidXBkYXRlRXh0ZW5zaW9uIiwicmVtb3ZlRXh0ZW5zaW9uIiwicHJpbnQiLCJhY3RpdmVOYW1lcyIsImluZm8iLCJleHRlbnNpb25EZXNjIiwiRXJyb3IiLCJnZXRJbnN0YWxsUGF0aCIsInBhdGgiLCJyZXF1aXJlIiwicmVxUGF0aCIsInJlcVJlc29sdmVkIiwicmVzb2x2ZSIsIlJlZmVyZW5jZUVycm9yIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9SRUxPQURfRVhURU5TSU9OUyIsImNhY2hlIiwiZGVidWciLCJNYWluQ2xhc3MiLCJpc0luc3RhbGxlZCIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsIl9yZWFkRXh0ZW5zaW9uU2NoZW1hIiwiZXh0VHlwZSIsIlR5cGVFcnJvciIsIm1vZHVsZU9iamVjdCIsInNjaGVtYVBhdGgiLCJyZXNvbHZlRnJvbSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicmVnaXN0ZXJTY2hlbWEiLCJpc09iamVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgcmVzb2x2ZUZyb20gZnJvbSAncmVzb2x2ZS1mcm9tJztcbmltcG9ydCB7c2F0aXNmaWVzfSBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHt1dGlsfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHtjb21tYW5kQ2xhc3Nlc30gZnJvbSAnLi4vY2xpL2V4dGVuc2lvbic7XG5pbXBvcnQge0FQUElVTV9WRVJ9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQge1xuICBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLFxuICBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uLFxuICByZWdpc3RlclNjaGVtYSxcbn0gZnJvbSAnLi4vc2NoZW1hL3NjaGVtYSc7XG5cbmNvbnN0IElOU1RBTExfVFlQRV9OUE0gPSAnbnBtJztcbmNvbnN0IElOU1RBTExfVFlQRV9MT0NBTCA9ICdsb2NhbCc7XG5jb25zdCBJTlNUQUxMX1RZUEVfR0lUSFVCID0gJ2dpdGh1Yic7XG5jb25zdCBJTlNUQUxMX1RZUEVfR0lUID0gJ2dpdCc7XG5cbi8qKiBAdHlwZSB7U2V0PEluc3RhbGxUeXBlPn0gKi9cbmNvbnN0IElOU1RBTExfVFlQRVMgPSBuZXcgU2V0KFtcbiAgSU5TVEFMTF9UWVBFX0dJVCxcbiAgSU5TVEFMTF9UWVBFX0dJVEhVQixcbiAgSU5TVEFMTF9UWVBFX0xPQ0FMLFxuICBJTlNUQUxMX1RZUEVfTlBNLFxuXSk7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhYnN0cmFjdC4gSXQgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG4gKlxuICogU3ViY2xhc3NlcyBzaG91bGQgcHJvdmlkZSB0aGUgZ2VuZXJpYyBwYXJhbWV0ZXIgdG8gaW1wbGVtZW50LlxuICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHRlbnNpb25Db25maWcge1xuICAvKiogQHR5cGUge0V4dFR5cGV9ICovXG4gIGV4dGVuc2lvblR5cGU7XG5cbiAgLyoqIEB0eXBlIHtgJHtFeHRUeXBlfXNgfSAqL1xuICBjb25maWdLZXk7XG5cbiAgLyoqIEB0eXBlIHtFeHRSZWNvcmQ8RXh0VHlwZT59ICovXG4gIGluc3RhbGxlZEV4dGVuc2lvbnM7XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1Mb2dnZXJ9ICovXG4gIGxvZztcblxuICAvKiogQHR5cGUge01hbmlmZXN0fSAqL1xuICBtYW5pZmVzdDtcblxuICAvKipcbiAgICogQHR5cGUge0V4dGVuc2lvbkxpc3REYXRhfVxuICAgKi9cbiAgX2xpc3REYXRhQ2FjaGU7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHBhcmFtIHtFeHRUeXBlfSBleHRlbnNpb25UeXBlIC0gVHlwZSBvZiBleHRlbnNpb25cbiAgICogQHBhcmFtIHtNYW5pZmVzdH0gbWFuaWZlc3QgLSBgTWFuaWZlc3RgIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihleHRlbnNpb25UeXBlLCBtYW5pZmVzdCkge1xuICAgIHRoaXMuZXh0ZW5zaW9uVHlwZSA9IGV4dGVuc2lvblR5cGU7XG4gICAgdGhpcy5jb25maWdLZXkgPSBgJHtleHRlbnNpb25UeXBlfXNgO1xuICAgIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyA9IG1hbmlmZXN0LmdldEV4dGVuc2lvbkRhdGEoZXh0ZW5zaW9uVHlwZSk7XG4gICAgdGhpcy5tYW5pZmVzdCA9IG1hbmlmZXN0O1xuICB9XG5cbiAgZ2V0IG1hbmlmZXN0UGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYW5pZmVzdC5tYW5pZmVzdFBhdGg7XG4gIH1cblxuICBnZXQgYXBwaXVtSG9tZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tYW5pZmVzdC5hcHBpdW1Ib21lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGVycm9ycyBmb3IgYSBnaXZlbiBleHRlbnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPn0gZXh0TmFtZVxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PEV4dFR5cGU+fSBleHRNYW5pZmVzdFxuICAgKiBAcmV0dXJucyB7RXh0TWFuaWZlc3RQcm9ibGVtW119XG4gICAqL1xuICBnZXRQcm9ibGVtcyhleHROYW1lLCBleHRNYW5pZmVzdCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLmdldEdlbmVyaWNDb25maWdQcm9ibGVtcyhleHRNYW5pZmVzdCwgZXh0TmFtZSksXG4gICAgICAuLi50aGlzLmdldENvbmZpZ1Byb2JsZW1zKGV4dE1hbmlmZXN0LCBleHROYW1lKSxcbiAgICAgIC4uLnRoaXMuZ2V0U2NoZW1hUHJvYmxlbXMoZXh0TWFuaWZlc3QsIGV4dE5hbWUpLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2Ygd2FybmluZ3MgZm9yIGEgZ2l2ZW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0V4dE5hbWU8RXh0VHlwZT59IGV4dE5hbWVcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3RcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMgZ2V0V2FybmluZ3MoZXh0TmFtZSwgZXh0TWFuaWZlc3QpIHtcbiAgICBjb25zdCBbZ2VuZXJpY0NvbmZpZ1dhcm5pbmdzLCBjb25maWdXYXJuaW5nc10gPSBhd2FpdCBCLmFsbChbXG4gICAgICB0aGlzLmdldEdlbmVyaWNDb25maWdXYXJuaW5ncyhleHRNYW5pZmVzdCwgZXh0TmFtZSksXG4gICAgICB0aGlzLmdldENvbmZpZ1dhcm5pbmdzKGV4dE1hbmlmZXN0LCBleHROYW1lKSxcbiAgICBdKTtcblxuICAgIHJldHVybiBbLi4uZ2VuZXJpY0NvbmZpZ1dhcm5pbmdzLCAuLi5jb25maWdXYXJuaW5nc107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9uLXR5cGUtc3BlY2lmaWMgaXNzdWVzLiBUbyBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3RcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyxyZXF1aXJlLWF3YWl0XG4gIGFzeW5jIGdldENvbmZpZ1dhcm5pbmdzKGV4dE1hbmlmZXN0LCBleHROYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TWFwPEV4dE5hbWU8RXh0VHlwZT4sRXh0TWFuaWZlc3RQcm9ibGVtW10+fSBbZXJyb3JNYXBdXG4gICAqIEBwYXJhbSB7TWFwPEV4dE5hbWU8RXh0VHlwZT4sc3RyaW5nW10+fSBbd2FybmluZ01hcF1cbiAgICovXG4gIGdldFZhbGlkYXRpb25SZXN1bHRTdW1tYXJpZXMoZXJyb3JNYXAgPSBuZXcgTWFwKCksIHdhcm5pbmdNYXAgPSBuZXcgTWFwKCkpIHtcbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBjb21wdXRlZCBzdHJpbmdzXG4gICAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgICAqL1xuICAgIGNvbnN0IGVycm9yU3VtbWFyaWVzID0gW107XG4gICAgZm9yIChjb25zdCBbZXh0TmFtZSwgcHJvYmxlbXNdIG9mIGVycm9yTWFwLmVudHJpZXMoKSkge1xuICAgICAgaWYgKF8uaXNFbXB0eShwcm9ibGVtcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyByZW1vdmUgdGhpcyBleHRlbnNpb24gZnJvbSB0aGUgbGlzdCBzaW5jZSBpdCdzIG5vdCB2YWxpZFxuICAgICAgZXJyb3JTdW1tYXJpZXMucHVzaChcbiAgICAgICAgYCR7dGhpcy5leHRlbnNpb25UeXBlfSBcIiR7ZXh0TmFtZX1cIiBoYWQgJHt1dGlsLnBsdXJhbGl6ZShcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHByb2JsZW1zLmxlbmd0aFxuICAgICAgICApfSBhbmQgd2lsbCBub3QgYmUgYXZhaWxhYmxlOmBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHByb2JsZW0gb2YgcHJvYmxlbXMpIHtcbiAgICAgICAgZXJyb3JTdW1tYXJpZXMucHVzaChcbiAgICAgICAgICBgICAtICR7cHJvYmxlbS5lcnJ9IChBY3R1YWwgdmFsdWU6IGAgKyBgJHtKU09OLnN0cmluZ2lmeShwcm9ibGVtLnZhbCl9KWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICBjb25zdCB3YXJuaW5nU3VtbWFyaWVzID0gW107XG4gICAgZm9yIChjb25zdCBbZXh0TmFtZSwgd2FybmluZ3NdIG9mIHdhcm5pbmdNYXAuZW50cmllcygpKSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KHdhcm5pbmdzKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4dFR5cGVUZXh0ID0gXy5jYXBpdGFsaXplKHRoaXMuZXh0ZW5zaW9uVHlwZSk7XG4gICAgICBjb25zdCBwcm9ibGVtRW51bWVyYXRpb25UZXh0ID0gdXRpbC5wbHVyYWxpemUoJ3BvdGVudGlhbCBwcm9ibGVtJywgd2FybmluZ3MubGVuZ3RoLCB0cnVlKTtcbiAgICAgIHdhcm5pbmdTdW1tYXJpZXMucHVzaChgJHtleHRUeXBlVGV4dH0gXCIke2V4dE5hbWV9XCIgaGFzICR7cHJvYmxlbUVudW1lcmF0aW9uVGV4dH06IGApO1xuICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgICAgIHdhcm5pbmdTdW1tYXJpZXMucHVzaChgICAtICR7d2FybmluZ31gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge2Vycm9yU3VtbWFyaWVzLCB3YXJuaW5nU3VtbWFyaWVzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZXh0ZW5zaW9ucyBmb3IgcHJvYmxlbXMuICBUbyBiZSBjYWxsZWQgYnkgc3ViY2xhc3NlcycgYHZhbGlkYXRlYCBtZXRob2QuXG4gICAqXG4gICAqIEVycm9ycyBhbmQgd2FybmluZ3Mgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGV4dHNgLlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBwYXJhbSB7RXh0UmVjb3JkPEV4dFR5cGU+fSBleHRzIC0gTG9va3VwIG9mIGV4dGVuc2lvbiBuYW1lcyB0byB7QGxpbmtjb2RlIEV4dE1hbmlmZXN0fSBvYmplY3RzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEV4dFJlY29yZDxFeHRUeXBlPj59IFRoZSBzYW1lIGxvb2t1cCwgYnV0IHBpY2tpbmcgb25seSBlcnJvci1mcmVlIGV4dGVuc2lvbnNcbiAgICovXG4gIGFzeW5jIF92YWxpZGF0ZShleHRzKSB7XG4gICAgLyoqXG4gICAgICogTG9va3VwIG9mIGV4dGVuc2lvbiBuYW1lcyB0byB7QGxpbmtjb2RlIEV4dE1hbmlmZXN0UHJvYmxlbSBFeHRNYW5pZmVzdFByb2JsZW1zfVxuICAgICAqIEB0eXBlIHtNYXA8RXh0TmFtZTxFeHRUeXBlPixFeHRNYW5pZmVzdFByb2JsZW1bXT59XG4gICAgICovXG4gICAgY29uc3QgZXJyb3JNYXAgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogTG9va3VwIG9mIGV4dGVuc2lvbiBuYW1lcyB0byB3YXJuaW5ncy5cbiAgICAgKiBAdHlwZSB7TWFwPEV4dE5hbWU8RXh0VHlwZT4sc3RyaW5nW10+fVxuICAgICAqL1xuICAgIGNvbnN0IHdhcm5pbmdNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBleHRNYW5pZmVzdF0gb2YgXy50b1BhaXJzKGV4dHMpKSB7XG4gICAgICBjb25zdCBbZXJyb3JzLCB3YXJuaW5nc10gPSBhd2FpdCBCLmFsbChbXG4gICAgICAgIHRoaXMuZ2V0UHJvYmxlbXMoZXh0TmFtZSwgZXh0TWFuaWZlc3QpLFxuICAgICAgICB0aGlzLmdldFdhcm5pbmdzKGV4dE5hbWUsIGV4dE1hbmlmZXN0KSxcbiAgICAgIF0pO1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIGV4dHNbZXh0TmFtZV07XG4gICAgICB9XG4gICAgICBlcnJvck1hcC5zZXQoZXh0TmFtZSwgZXJyb3JzKTtcbiAgICAgIHdhcm5pbmdNYXAuc2V0KGV4dE5hbWUsIHdhcm5pbmdzKTtcbiAgICB9XG5cbiAgICBjb25zdCB7ZXJyb3JTdW1tYXJpZXMsIHdhcm5pbmdTdW1tYXJpZXN9ID0gdGhpcy5nZXRWYWxpZGF0aW9uUmVzdWx0U3VtbWFyaWVzKFxuICAgICAgZXJyb3JNYXAsXG4gICAgICB3YXJuaW5nTWFwXG4gICAgKTtcblxuICAgIGlmICghXy5pc0VtcHR5KGVycm9yU3VtbWFyaWVzKSkge1xuICAgICAgbG9nLmVycm9yKFxuICAgICAgICBgQXBwaXVtIGVuY291bnRlcmVkICR7dXRpbC5wbHVyYWxpemUoXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvclN1bW1hcmllcy5sZW5ndGgsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApfSB3aGlsZSB2YWxpZGF0aW5nICR7dGhpcy5jb25maWdLZXl9IGZvdW5kIGluIG1hbmlmZXN0ICR7dGhpcy5tYW5pZmVzdFBhdGh9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3Qgc3VtbWFyeSBvZiBlcnJvclN1bW1hcmllcykge1xuICAgICAgICBsb2cuZXJyb3Ioc3VtbWFyeSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG9ubHkgZGlzcGxheSB3YXJuaW5ncyBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzIVxuXG4gICAgICBpZiAoIV8uaXNFbXB0eSh3YXJuaW5nU3VtbWFyaWVzKSkge1xuICAgICAgICBsb2cud2FybihcbiAgICAgICAgICBgQXBwaXVtIGVuY291bnRlcmVkICR7dXRpbC5wbHVyYWxpemUoXG4gICAgICAgICAgICAnd2FybmluZycsXG4gICAgICAgICAgICB3YXJuaW5nU3VtbWFyaWVzLmxlbmd0aCxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgICApfSB3aGlsZSB2YWxpZGF0aW5nICR7dGhpcy5jb25maWdLZXl9IGZvdW5kIGluIG1hbmlmZXN0ICR7dGhpcy5tYW5pZmVzdFBhdGh9YFxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHN1bW1hcnkgb2Ygd2FybmluZ1N1bW1hcmllcykge1xuICAgICAgICAgIGxvZy53YXJuKHN1bW1hcnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBsaXN0aW5nIGRhdGEgZm9yIGV4dGVuc2lvbnMgdmlhIGNvbW1hbmQgY2xhc3MuXG4gICAqIENhY2hlcyB0aGUgcmVzdWx0IGluIHtAbGlua2NvZGUgRXh0ZW5zaW9uQ29uZmlnLl9saXN0RGF0YUNhY2hlfVxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEV4dGVuc2lvbkxpc3REYXRhPn1cbiAgICovXG4gIGFzeW5jIGdldExpc3REYXRhKCkge1xuICAgIGlmICh0aGlzLl9saXN0RGF0YUNhY2hlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdERhdGFDYWNoZTtcbiAgICB9XG4gICAgY29uc3QgQ29tbWFuZENsYXNzID0gLyoqIEB0eXBlIHtFeHRDb21tYW5kPEV4dFR5cGU+fSAqLyAoY29tbWFuZENsYXNzZXNbdGhpcy5leHRlbnNpb25UeXBlXSk7XG4gICAgY29uc3QgY21kID0gbmV3IENvbW1hbmRDbGFzcyh7Y29uZmlnOiB0aGlzLCBqc29uOiB0cnVlfSk7XG4gICAgY29uc3QgbGlzdERhdGEgPSBhd2FpdCBjbWQubGlzdCh7c2hvd0luc3RhbGxlZDogdHJ1ZSwgc2hvd1VwZGF0ZXM6IHRydWV9KTtcbiAgICB0aGlzLl9saXN0RGF0YUNhY2hlID0gbGlzdERhdGE7XG4gICAgcmV0dXJuIGxpc3REYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHdhcm5pbmdzIGZvciBhIHBhcnRpY3VsYXIgZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBCeSBkZWZpbml0aW9uLCBhIG5vbi1lbXB0eSBsaXN0IG9mIHdhcm5pbmdzIGRvZXMgX25vdF8gaW1wbHkgdGhlIGV4dGVuc2lvbiBjYW5ub3QgYmUgbG9hZGVkLFxuICAgKiBidXQgaXQgbWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkIG9yIG90aGVyd2lzZSB0aHJvdyBhbiBleGNlcHRpb24gYXQgcnVudGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3RcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGdldEdlbmVyaWNDb25maWdXYXJuaW5ncyhleHRNYW5pZmVzdCwgZXh0TmFtZSkge1xuICAgIGNvbnN0IHthcHBpdW1WZXJzaW9uLCBpbnN0YWxsU3BlYywgaW5zdGFsbFR5cGUsIHBrZ05hbWV9ID0gZXh0TWFuaWZlc3Q7XG4gICAgY29uc3Qgd2FybmluZ3MgPSBbXTtcblxuICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBbXTtcbiAgICBpZiAoIV8uaXNTdHJpbmcoaW5zdGFsbFNwZWMpKSB7XG4gICAgICBpbnZhbGlkRmllbGRzLnB1c2goJ2luc3RhbGxTcGVjJyk7XG4gICAgfVxuXG4gICAgaWYgKCFJTlNUQUxMX1RZUEVTLmhhcyhpbnN0YWxsVHlwZSkpIHtcbiAgICAgIGludmFsaWRGaWVsZHMucHVzaCgnaW5zdGFsbFR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHRUeXBlVGV4dCA9IF8uY2FwaXRhbGl6ZSh0aGlzLmV4dGVuc2lvblR5cGUpO1xuXG4gICAgaWYgKGludmFsaWRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkRmllbGRzRW51bWVyYXRpb25UZXh0ID0gdXRpbC5wbHVyYWxpemUoXG4gICAgICAgICdpbnZhbGlkIG9yIG1pc3NpbmcgZmllbGQnLFxuICAgICAgICBpbnZhbGlkRmllbGRzLmxlbmd0aCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGludmFsaWRGaWVsZHNUZXh0ID0gaW52YWxpZEZpZWxkcy5tYXAoKGZpZWxkKSA9PiBgXCIke2ZpZWxkfVwiYCkuam9pbignLCAnKTtcblxuICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgYCR7ZXh0VHlwZVRleHR9IFwiJHtleHROYW1lfVwiIChwYWNrYWdlIFxcYCR7cGtnTmFtZX1cXGApIGhhcyAke2ludmFsaWRGaWVsZHNFbnVtZXJhdGlvblRleHR9ICgke2ludmFsaWRGaWVsZHNUZXh0fSkgaW4gXFxgZXh0ZW5zaW9ucy55YW1sXFxgOyB0aGlzIG1heSBjYXVzZSB1cGdyYWRlcyBkb25lIHZpYSB0aGUgXFxgYXBwaXVtXFxgIENMSSB0b29sIHRvIGZhaWwuIFBsZWFzZSByZWluc3RhbGwgd2l0aCBcXGBhcHBpdW0gJHt0aGlzLmV4dGVuc2lvblR5cGV9IHVuaW5zdGFsbCAke2V4dE5hbWV9XFxgIGFuZCBcXGBhcHBpdW0gJHt0aGlzLmV4dGVuc2lvblR5cGV9IGluc3RhbGwgJHtleHROYW1lfVxcYCB0byBhdHRlbXB0IGEgZml4LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscHMgY29uY2F0ZW5hdGUgd2FybmluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHBlZXIgZGVwZW5kZW5jaWVzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgICAqIEByZXR1cm5zIHN0cmluZ1xuICAgICAqL1xuICAgIGNvbnN0IGNyZWF0ZVBlZXJXYXJuaW5nID0gKHJlYXNvbikgPT5cbiAgICAgIGAke2V4dFR5cGVUZXh0fSBcIiR7ZXh0TmFtZX1cIiAocGFja2FnZSBcXGAke3BrZ05hbWV9XFxgKSBtYXkgYmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBBcHBpdW0gKHYke0FQUElVTV9WRVJ9KSBkdWUgdG8gJHtyZWFzb259YDtcblxuICAgIGlmIChfLmlzU3RyaW5nKGFwcGl1bVZlcnNpb24pICYmICFzYXRpc2ZpZXMoQVBQSVVNX1ZFUiwgYXBwaXVtVmVyc2lvbikpIHtcbiAgICAgIGNvbnN0IGxpc3REYXRhID0gYXdhaXQgdGhpcy5nZXRMaXN0RGF0YSgpO1xuICAgICAgY29uc3QgZXh0TGlzdERhdGEgPSAvKiogQHR5cGUge0luc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhfSAqLyAobGlzdERhdGFbZXh0TmFtZV0pO1xuICAgICAgaWYgKGV4dExpc3REYXRhPy5pbnN0YWxsZWQpIHtcbiAgICAgICAgY29uc3Qge3VwZGF0ZVZlcnNpb24sIHVwVG9EYXRlfSA9IGV4dExpc3REYXRhO1xuICAgICAgICBpZiAoIXVwVG9EYXRlKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICAgIGNyZWF0ZVBlZXJXYXJuaW5nKFxuICAgICAgICAgICAgICBgaXRzIHBlZXIgZGVwZW5kZW5jeSBvbiBvbGRlciBBcHBpdW0gdiR7YXBwaXVtVmVyc2lvbn0uIFBsZWFzZSB1cGdyYWRlIFxcYCR7cGtnTmFtZX1cXGAgdG8gdiR7dXBkYXRlVmVyc2lvbn0gb3IgbmV3ZXIuYFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICAgIGNyZWF0ZVBlZXJXYXJuaW5nKFxuICAgICAgICAgICAgICBgaXRzIHBlZXIgZGVwZW5kZW5jeSBvbiBvbGRlciBBcHBpdW0gdiR7YXBwaXVtVmVyc2lvbn0uIFBsZWFzZSBhc2sgdGhlIGRldmVsb3BlciBvZiBcXGAke3BrZ05hbWV9XFxgIHRvIHVwZGF0ZSB0aGUgcGVlciBkZXBlbmRlbmN5IG9uIEFwcGl1bSB0byB2JHtBUFBJVU1fVkVSfS5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIV8uaXNTdHJpbmcoYXBwaXVtVmVyc2lvbikpIHtcbiAgICAgIGNvbnN0IGxpc3REYXRhID0gYXdhaXQgdGhpcy5nZXRMaXN0RGF0YSgpO1xuICAgICAgY29uc3QgZXh0TGlzdERhdGEgPSAvKiogQHR5cGUge0luc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhfSAqLyAobGlzdERhdGFbZXh0TmFtZV0pO1xuICAgICAgaWYgKCFleHRMaXN0RGF0YT8udXBUb0RhdGUgJiYgZXh0TGlzdERhdGE/LnVwZGF0ZVZlcnNpb24pIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICBjcmVhdGVQZWVyV2FybmluZyhcbiAgICAgICAgICAgIGBhbiBpbnZhbGlkIG9yIG1pc3NpbmcgcGVlciBkZXBlbmRlbmN5IG9uIEFwcGl1bS4gQSBuZXdlciB2ZXJzaW9uIG9mIFxcYCR7cGtnTmFtZX1cXGAgaXMgYXZhaWxhYmxlOyBwbGVhc2UgYXR0ZW1wdCB0byB1cGdyYWRlIFwiJHtleHROYW1lfVwiIHRvIHYke2V4dExpc3REYXRhLnVwZGF0ZVZlcnNpb259IG9yIG5ld2VyLmBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgIGNyZWF0ZVBlZXJXYXJuaW5nKFxuICAgICAgICAgICAgYGFuIGludmFsaWQgb3IgbWlzc2luZyBwZWVyIGRlcGVuZGVuY3kgb24gQXBwaXVtLiBQbGVhc2UgYXNrIHRoZSBkZXZlbG9wZXIgb2YgXFxgJHtwa2dOYW1lfVxcYCB0byBhZGQgYSBwZWVyIGRlcGVuZGVuY3kgb24gXFxgXmFwcGl1bUAke0FQUElVTV9WRVJ9XFxgLmBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3YXJuaW5ncztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBsaXN0IG9mIHVucmVjb3ZlcmFibGUgZXJyb3JzIChpZiBhbnkpIGZvciB0aGUgZ2l2ZW4gZXh0ZW5zaW9uIF9pZl8gaXQgaGFzIGEgYHNjaGVtYWAgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dE1hbmlmZXN0IC0gRXh0ZW5zaW9uIGRhdGEgKGZyb20gbWFuaWZlc3QpXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPn0gZXh0TmFtZSAtIEV4dGVuc2lvbiBuYW1lIChmcm9tIG1hbmlmZXN0KVxuICAgKiBAcmV0dXJucyB7RXh0TWFuaWZlc3RQcm9ibGVtW119XG4gICAqL1xuICBnZXRTY2hlbWFQcm9ibGVtcyhleHRNYW5pZmVzdCwgZXh0TmFtZSkge1xuICAgIC8qKiBAdHlwZSB7RXh0TWFuaWZlc3RQcm9ibGVtW119ICovXG4gICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICBjb25zdCB7c2NoZW1hOiBhcmdTY2hlbWFQYXRofSA9IGV4dE1hbmlmZXN0O1xuICAgIGlmIChFeHRlbnNpb25Db25maWcuZXh0RGF0YUhhc1NjaGVtYShleHRNYW5pZmVzdCkpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGFyZ1NjaGVtYVBhdGgpKSB7XG4gICAgICAgIGlmIChpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uKGFyZ1NjaGVtYVBhdGgpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVhZEV4dGVuc2lvblNjaGVtYShleHROYW1lLCBleHRNYW5pZmVzdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgZXJyOiBgVW5hYmxlIHRvIHJlZ2lzdGVyIHNjaGVtYSBhdCBwYXRoICR7YXJnU2NoZW1hUGF0aH07ICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgdmFsOiBhcmdTY2hlbWFQYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgICAgZXJyOiBgU2NoZW1hIGZpbGUgaGFzIHVuc3VwcG9ydGVkIGV4dGVuc2lvbi4gQWxsb3dlZDogJHtbXG4gICAgICAgICAgICAgIC4uLkFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMsXG4gICAgICAgICAgICBdLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgIHZhbDogYXJnU2NoZW1hUGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoYXJnU2NoZW1hUGF0aCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnJlYWRFeHRlbnNpb25TY2hlbWEoZXh0TmFtZSwgZXh0TWFuaWZlc3QpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGVycjogYFVuYWJsZSB0byByZWdpc3RlciBlbWJlZGRlZCBzY2hlbWE7ICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIHZhbDogYXJnU2NoZW1hUGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICAgZXJyOiAnSW5jb3JyZWN0bHkgZm9ybWF0dGVkIHNjaGVtYSBmaWVsZDsgbXVzdCBiZSBhIHBhdGggdG8gYSBzY2hlbWEgZmlsZSBvciBhIHNjaGVtYSBvYmplY3QuJyxcbiAgICAgICAgICB2YWw6IGFyZ1NjaGVtYVBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvYmxlbXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbGlzdCBvZiBnZW5lcmljIHVucmVjb3ZlcmFibGUgZXJyb3JzIGZvciB0aGUgZ2l2ZW4gZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dE1hbmlmZXN0IC0gRXh0ZW5zaW9uIGRhdGEgKGZyb20gbWFuaWZlc3QpXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPn0gZXh0TmFtZSAtIEV4dGVuc2lvbiBuYW1lIChmcm9tIG1hbmlmZXN0KVxuICAgKiBAcmV0dXJucyB7RXh0TWFuaWZlc3RQcm9ibGVtW119XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZ2V0R2VuZXJpY0NvbmZpZ1Byb2JsZW1zKGV4dE1hbmlmZXN0LCBleHROYW1lKSB7XG4gICAgY29uc3Qge3ZlcnNpb24sIHBrZ05hbWUsIG1haW5DbGFzc30gPSBleHRNYW5pZmVzdDtcbiAgICBjb25zdCBwcm9ibGVtcyA9IFtdO1xuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHZlcnNpb24pKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiBgSW52YWxpZCBvciBtaXNzaW5nIFxcYHZlcnNpb25cXGAgZmllbGQgaW4gbXkgXFxgcGFja2FnZS5qc29uXFxgIGFuZC9vciBcXGBleHRlbnNpb25zLnlhbWxcXGAgKG11c3QgYmUgYSBzdHJpbmcpYCxcbiAgICAgICAgdmFsOiB2ZXJzaW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHBrZ05hbWUpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiBgSW52YWxpZCBvciBtaXNzaW5nIFxcYG5hbWVcXGAgZmllbGQgaW4gbXkgXFxgcGFja2FnZS5qc29uXFxgIGFuZC9vciBcXGBleHRlbnNpb25zLnlhbWxcXGAgKG11c3QgYmUgYSBzdHJpbmcpYCxcbiAgICAgICAgdmFsOiBwa2dOYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKG1haW5DbGFzcykpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6IGBJbnZhbGlkIG9yIG1pc3NpbmcgXFxgYXBwaXVtLm1haW5DbGFzc1xcYCBmaWVsZCBpbiBteSBcXGBwYWNrYWdlLmpzb25cXGAgYW5kL29yIFxcYG1haW5DbGFzc1xcYCBmaWVsZCBpbiBcXGBleHRlbnNpb25zLnlhbWxcXGAgKG11c3QgYmUgYSBzdHJpbmcpYCxcbiAgICAgICAgdmFsOiBtYWluQ2xhc3MsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvYmxlbXM7XG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPn0gZXh0TmFtZVxuICAgKiBAcmV0dXJucyB7RXh0TWFuaWZlc3RQcm9ibGVtW119XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZ2V0Q29uZmlnUHJvYmxlbXMoZXh0TWFuaWZlc3QsIGV4dE5hbWUpIHtcbiAgICAvLyBzaG91ZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiBzcGVjaWFsIHZhbGlkYXRpb24gaXMgbmVjZXNzYXJ5IGZvciB0aGlzIGV4dGVuc2lvbiB0eXBlXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uQ29uZmlnTXV0YXRpb25PcHRzfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBhZGRFeHRlbnNpb24oZXh0TmFtZSwgZXh0TWFuaWZlc3QsIHt3cml0ZSA9IHRydWV9ID0ge30pIHtcbiAgICB0aGlzLm1hbmlmZXN0LmFkZEV4dGVuc2lvbih0aGlzLmV4dGVuc2lvblR5cGUsIGV4dE5hbWUsIGV4dE1hbmlmZXN0KTtcbiAgICBpZiAod3JpdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubWFuaWZlc3Qud3JpdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT58aW1wb3J0KCcuLi9jbGkvZXh0ZW5zaW9uLWNvbW1hbmQnKS5FeHRlbnNpb25GaWVsZHM8RXh0VHlwZT59IGV4dE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uQ29uZmlnTXV0YXRpb25PcHRzfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB1cGRhdGVFeHRlbnNpb24oZXh0TmFtZSwgZXh0TWFuaWZlc3QsIHt3cml0ZSA9IHRydWV9ID0ge30pIHtcbiAgICB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV0gPSB7XG4gICAgICAuLi50aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV0sXG4gICAgICAuLi5leHRNYW5pZmVzdCxcbiAgICB9O1xuICAgIGlmICh3cml0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5tYW5pZmVzdC53cml0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXh0ZW5zaW9uIGZyb20gdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIGV4dGVuc2lvbnMsIGFuZCBvcHRpb25hbGx5IGF2b2lkIGEgd3JpdGUgdG8gdGhlIG1hbmlmZXN0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPn0gZXh0TmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvbkNvbmZpZ011dGF0aW9uT3B0c30gW29wdHNdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlRXh0ZW5zaW9uKGV4dE5hbWUsIHt3cml0ZSA9IHRydWV9ID0ge30pIHtcbiAgICBkZWxldGUgdGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zW2V4dE5hbWVdO1xuICAgIGlmICh3cml0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5tYW5pZmVzdC53cml0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dE5hbWU8RXh0VHlwZT5bXX0gW2FjdGl2ZU5hbWVzXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBwcmludChhY3RpdmVOYW1lcykge1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBObyAke3RoaXMuY29uZmlnS2V5fSBoYXZlIGJlZW4gaW5zdGFsbGVkIGluICR7dGhpcy5hcHBpdW1Ib21lfS4gVXNlIHRoZSBcImFwcGl1bSAke3RoaXMuZXh0ZW5zaW9uVHlwZX1cIiBgICtcbiAgICAgICAgICAnY29tbWFuZCB0byBpbnN0YWxsIHRoZSBvbmUocykgeW91IHdhbnQgdG8gdXNlLidcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYEF2YWlsYWJsZSAke3RoaXMuY29uZmlnS2V5fTpgKTtcbiAgICBmb3IgKGNvbnN0IFtleHROYW1lLCBleHRNYW5pZmVzdF0gb2YgLyoqIEB0eXBlIHtbc3RyaW5nLCBFeHRNYW5pZmVzdDxFeHRUeXBlPl1bXX0gKi8gKFxuICAgICAgXy50b1BhaXJzKHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICApKSB7XG4gICAgICBsb2cuaW5mbyhgICAtICR7dGhpcy5leHRlbnNpb25EZXNjKGV4dE5hbWUsIGV4dE1hbmlmZXN0KX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBleHRlbnNpb24uIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQuXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPn0gZXh0TmFtZSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dE1hbmlmZXN0IC0gRXh0ZW5zaW9uIGRhdGFcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQGFic3RyYWN0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZXh0ZW5zaW9uRGVzYyhleHROYW1lLCBleHRNYW5pZmVzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBtdXN0IGJlIGltcGxlbWVudGVkIGluIGEgc3ViY2xhc3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0SW5zdGFsbFBhdGgoZXh0TmFtZSkge1xuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5hcHBpdW1Ib21lLCAnbm9kZV9tb2R1bGVzJywgdGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zW2V4dE5hbWVdLnBrZ05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGV4dGVuc2lvbiBhbmQgcmV0dXJucyBpdHMgbWFpbiBjbGFzcyAoY29uc3RydWN0b3IpXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPn0gZXh0TmFtZVxuICAgKiBAcmV0dXJucyB7RXh0Q2xhc3M8RXh0VHlwZT59XG4gICAqL1xuICByZXF1aXJlKGV4dE5hbWUpIHtcbiAgICBjb25zdCB7bWFpbkNsYXNzfSA9IHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXTtcbiAgICBjb25zdCByZXFQYXRoID0gdGhpcy5nZXRJbnN0YWxsUGF0aChleHROYW1lKTtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgcmVxUmVzb2x2ZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlcVJlc29sdmVkID0gcmVxdWlyZS5yZXNvbHZlKHJlcVBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGBDb3VsZCBub3QgZmluZCBhICR7dGhpcy5leHRlbnNpb25UeXBlfSBpbnN0YWxsZWQgYXQgJHtyZXFQYXRofWApO1xuICAgIH1cbiAgICAvLyBub3RlOiB0aGlzIHdpbGwgb25seSByZWxvYWQgdGhlIGVudHJ5IHBvaW50XG4gICAgaWYgKHByb2Nlc3MuZW52LkFQUElVTV9SRUxPQURfRVhURU5TSU9OUyAmJiByZXF1aXJlLmNhY2hlW3JlcVJlc29sdmVkXSkge1xuICAgICAgbG9nLmRlYnVnKGBSZW1vdmluZyAke3JlcVJlc29sdmVkfSBmcm9tIHJlcXVpcmUgY2FjaGVgKTtcbiAgICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW3JlcVJlc29sdmVkXTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBSZXF1aXJpbmcgJHt0aGlzLmV4dGVuc2lvblR5cGV9IGF0ICR7cmVxUGF0aH1gKTtcbiAgICBjb25zdCBNYWluQ2xhc3MgPSByZXF1aXJlKHJlcVBhdGgpW21haW5DbGFzc107XG4gICAgaWYgKCFNYWluQ2xhc3MpIHtcbiAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIGEgY2xhc3MgbmFtZWQgXCIke21haW5DbGFzc31cIiBleHBvcnRlZCBieSAke3RoaXMuZXh0ZW5zaW9uVHlwZX0gXCIke2V4dE5hbWV9XCJgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gTWFpbkNsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNJbnN0YWxsZWQoZXh0TmFtZSkge1xuICAgIHJldHVybiBfLmluY2x1ZGVzKE9iamVjdC5rZXlzKHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyksIGV4dE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG1ldGhvZHMgb2Ygc3ViY2xhc3MuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZVxuICAgKiBAcGFyYW0ge0V4dFR5cGV9IGV4dFR5cGVcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWUgKHVuaXF1ZSB0byBpdHMgdHlwZSlcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdFdpdGhTY2hlbWE8RXh0VHlwZT59IGV4dE1hbmlmZXN0IC0gRXh0ZW5zaW9uIGNvbmZpZ1xuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdhanYnKS5TY2hlbWFPYmplY3R8dW5kZWZpbmVkfVxuICAgKi9cbiAgc3RhdGljIF9yZWFkRXh0ZW5zaW9uU2NoZW1hKGFwcGl1bUhvbWUsIGV4dFR5cGUsIGV4dE5hbWUsIGV4dE1hbmlmZXN0KSB7XG4gICAgY29uc3Qge3BrZ05hbWUsIHNjaGVtYTogYXJnU2NoZW1hUGF0aH0gPSBleHRNYW5pZmVzdDtcbiAgICBpZiAoIWFyZ1NjaGVtYVBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBObyBcXGBzY2hlbWFcXGAgcHJvcGVydHkgZm91bmQgaW4gY29uZmlnIGZvciAke2V4dFR5cGV9ICR7cGtnTmFtZX0gLS0gd2h5IGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkP2BcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBtb2R1bGVPYmplY3Q7XG4gICAgaWYgKF8uaXNTdHJpbmcoYXJnU2NoZW1hUGF0aCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYVBhdGggPSByZXNvbHZlRnJvbShhcHBpdW1Ib21lLCBwYXRoLmpvaW4ocGtnTmFtZSwgYXJnU2NoZW1hUGF0aCkpO1xuICAgICAgbW9kdWxlT2JqZWN0ID0gcmVxdWlyZShzY2hlbWFQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kdWxlT2JqZWN0ID0gYXJnU2NoZW1hUGF0aDtcbiAgICB9XG4gICAgLy8gdGhpcyBzdWNrcy4gZGVmYXVsdCBleHBvcnRzIHNob3VsZCBiZSBkZXN0cm95ZWRcbiAgICBjb25zdCBzY2hlbWEgPSBtb2R1bGVPYmplY3QuX19lc01vZHVsZSA/IG1vZHVsZU9iamVjdC5kZWZhdWx0IDogbW9kdWxlT2JqZWN0O1xuICAgIHJlZ2lzdGVyU2NoZW1hKGV4dFR5cGUsIGV4dE5hbWUsIHNjaGVtYSk7XG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIHNwZWNpZmljIHtAbGluayBFeHRNYW5pZmVzdH0gb2JqZWN0IGhhcyBhIGBzY2hlbWFgIHByb3AuXG4gICAqIFRoZSB7QGxpbmsgRXh0TWFuaWZlc3R9IG9iamVjdCBiZWNvbWVzIGEge0BsaW5rIEV4dE1hbmlmZXN0V2l0aFNjaGVtYX0gb2JqZWN0LlxuICAgKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3RcbiAgICogQHJldHVybnMge2V4dE1hbmlmZXN0IGlzIEV4dE1hbmlmZXN0V2l0aFNjaGVtYTxFeHRUeXBlPn1cbiAgICovXG4gIHN0YXRpYyBleHREYXRhSGFzU2NoZW1hKGV4dE1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIF8uaXNTdHJpbmcoZXh0TWFuaWZlc3Q/LnNjaGVtYSkgfHwgXy5pc09iamVjdChleHRNYW5pZmVzdD8uc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBhbiBleHRlbnNpb24gcHJvdmlkZXMgYSBzY2hlbWEsIHRoaXMgd2lsbCBsb2FkIHRoZSBzY2hlbWEgYW5kIGF0dGVtcHQgdG9cbiAgICogcmVnaXN0ZXIgaXQgd2l0aCB0aGUgc2NoZW1hIHJlZ2lzdHJhci5cbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lIC0gTmFtZSBvZiBleHRlbnNpb25cbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdFdpdGhTY2hlbWE8RXh0VHlwZT59IGV4dE1hbmlmZXN0IC0gRXh0ZW5zaW9uIGRhdGFcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0fHVuZGVmaW5lZH1cbiAgICovXG4gIHJlYWRFeHRlbnNpb25TY2hlbWEoZXh0TmFtZSwgZXh0TWFuaWZlc3QpIHtcbiAgICByZXR1cm4gRXh0ZW5zaW9uQ29uZmlnLl9yZWFkRXh0ZW5zaW9uU2NoZW1hKFxuICAgICAgdGhpcy5hcHBpdW1Ib21lLFxuICAgICAgdGhpcy5leHRlbnNpb25UeXBlLFxuICAgICAgZXh0TmFtZSxcbiAgICAgIGV4dE1hbmlmZXN0XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQge0lOU1RBTExfVFlQRV9OUE0sIElOU1RBTExfVFlQRV9HSVQsIElOU1RBTExfVFlQRV9MT0NBTCwgSU5TVEFMTF9UWVBFX0dJVEhVQiwgSU5TVEFMTF9UWVBFU307XG5cbi8qKlxuICogQW4gaXNzdWUgd2l0aCB0aGUge0BsaW5rY29kZSBFeHRNYW5pZmVzdH0gZm9yIGEgcGFydGljdWxhciBleHRlbnNpb24uXG4gKlxuICogVGhlIGV4aXN0YW5jZSBvZiBzdWNoIGFuIG9iamVjdCBpbXBsaWVzIHRoYXQgdGhlIGV4dGVuc2lvbiBjYW5ub3QgYmUgbG9hZGVkLlxuICogQHR5cGVkZWYgRXh0TWFuaWZlc3RQcm9ibGVtXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXJyIC0gRXJyb3IgbWVzc2FnZVxuICogQHByb3BlcnR5IHthbnl9IHZhbCAtIEFzc29jaWF0ZWQgdmFsdWVcbiAqL1xuXG4vKipcbiAqIEFuIG9wdGlvbmFsIGxvZ2dpbmcgZnVuY3Rpb24gcHJvdmlkZWQgdG8gYW4ge0BsaW5rIEV4dGVuc2lvbkNvbmZpZ30gc3ViY2xhc3MuXG4gKiBAY2FsbGJhY2sgRXh0ZW5zaW9uTG9nRm5cbiAqIEBwYXJhbSB7Li4uYW55fSBhcmdzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL21hbmlmZXN0JykuTWFuaWZlc3R9IE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0TWFuaWZlc3Q8VD59IEV4dE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0TWFuaWZlc3RXaXRoU2NoZW1hPFQ+fSBFeHRNYW5pZmVzdFdpdGhTY2hlbWFcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHROYW1lPFQ+fSBFeHROYW1lXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0Q2xhc3M8VD59IEV4dENsYXNzXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0UmVjb3JkPFQ+fSBFeHRSZWNvcmRcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9jbGkvZXh0ZW5zaW9uJykuRXh0Q29tbWFuZDxUPn0gRXh0Q29tbWFuZFxuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdmFyaW91cyBtZXRob2RzIGluIHtAbGluayBFeHRlbnNpb25Db25maWd9XG4gKiBAdHlwZWRlZiBFeHRlbnNpb25Db25maWdNdXRhdGlvbk9wdHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3dyaXRlPXRydWVdIFdoZXRoZXIgb3Igbm90IHRvIHdyaXRlIHRoZSBtYW5pZmVzdCB0byBkaXNrIGFmdGVyIGEgbXV0YXRpb24gb3BlcmF0aW9uXG4gKi9cblxuLyoqXG4gKiBBIHZhbGlkIGluc3RhbGwgdHlwZVxuICogQHR5cGVkZWYge3R5cGVvZiBJTlNUQUxMX1RZUEVfTlBNIHwgdHlwZW9mIElOU1RBTExfVFlQRV9HSVQgfCB0eXBlb2YgSU5TVEFMTF9UWVBFX0xPQ0FMIHwgdHlwZW9mIElOU1RBTExfVFlQRV9HSVRIVUJ9IEluc3RhbGxUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9jbGkvZXh0ZW5zaW9uLWNvbW1hbmQnKS5FeHRlbnNpb25MaXN0RGF0YX0gRXh0ZW5zaW9uTGlzdERhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2NsaS9leHRlbnNpb24tY29tbWFuZCcpLkluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhfSBJbnN0YWxsZWRFeHRlbnNpb25MaXN0RGF0YVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTUEsTUFBTUEsZ0JBQWdCLEdBQUcsS0FBekI7O0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsT0FBM0I7O0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUcsUUFBNUI7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsS0FBekI7O0FBR0EsTUFBTUMsYUFBYSxHQUFHLElBQUlDLEdBQUosQ0FBUSxDQUM1QkYsZ0JBRDRCLEVBRTVCRCxtQkFGNEIsRUFHNUJELGtCQUg0QixFQUk1QkQsZ0JBSjRCLENBQVIsQ0FBdEI7OztBQWFPLE1BQU1NLGVBQU4sQ0FBc0I7RUFFM0JDLGFBQWE7RUFHYkMsU0FBUztFQUdUQyxtQkFBbUI7RUFHbkJDLEdBQUc7RUFHSEMsUUFBUTtFQUtSQyxjQUFjOztFQU9kQyxXQUFXLENBQUNOLGFBQUQsRUFBZ0JJLFFBQWhCLEVBQTBCO0lBQ25DLEtBQUtKLGFBQUwsR0FBcUJBLGFBQXJCO0lBQ0EsS0FBS0MsU0FBTCxHQUFrQixHQUFFRCxhQUFjLEdBQWxDO0lBQ0EsS0FBS0UsbUJBQUwsR0FBMkJFLFFBQVEsQ0FBQ0csZ0JBQVQsQ0FBMEJQLGFBQTFCLENBQTNCO0lBQ0EsS0FBS0ksUUFBTCxHQUFnQkEsUUFBaEI7RUFDRDs7RUFFZSxJQUFaSSxZQUFZLEdBQUc7SUFDakIsT0FBTyxLQUFLSixRQUFMLENBQWNJLFlBQXJCO0VBQ0Q7O0VBRWEsSUFBVkMsVUFBVSxHQUFHO0lBQ2YsT0FBTyxLQUFLTCxRQUFMLENBQWNLLFVBQXJCO0VBQ0Q7O0VBU0RDLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxXQUFWLEVBQXVCO0lBQ2hDLE9BQU8sQ0FDTCxHQUFHLEtBQUtDLHdCQUFMLENBQThCRCxXQUE5QixFQUEyQ0QsT0FBM0MsQ0FERSxFQUVMLEdBQUcsS0FBS0csaUJBQUwsQ0FBdUJGLFdBQXZCLEVBQW9DRCxPQUFwQyxDQUZFLEVBR0wsR0FBRyxLQUFLSSxpQkFBTCxDQUF1QkgsV0FBdkIsRUFBb0NELE9BQXBDLENBSEUsQ0FBUDtFQUtEOztFQVNnQixNQUFYSyxXQUFXLENBQUNMLE9BQUQsRUFBVUMsV0FBVixFQUF1QjtJQUN0QyxNQUFNLENBQUNLLHFCQUFELEVBQXdCQyxjQUF4QixJQUEwQyxNQUFNQyxpQkFBQSxDQUFFQyxHQUFGLENBQU0sQ0FDMUQsS0FBS0Msd0JBQUwsQ0FBOEJULFdBQTlCLEVBQTJDRCxPQUEzQyxDQUQwRCxFQUUxRCxLQUFLVyxpQkFBTCxDQUF1QlYsV0FBdkIsRUFBb0NELE9BQXBDLENBRjBELENBQU4sQ0FBdEQ7SUFLQSxPQUFPLENBQUMsR0FBR00scUJBQUosRUFBMkIsR0FBR0MsY0FBOUIsQ0FBUDtFQUNEOztFQVVzQixNQUFqQkksaUJBQWlCLENBQUNWLFdBQUQsRUFBY0QsT0FBZCxFQUF1QjtJQUM1QyxPQUFPLEVBQVA7RUFDRDs7RUFPRFksNEJBQTRCLENBQUNDLFFBQVEsR0FBRyxJQUFJQyxHQUFKLEVBQVosRUFBdUJDLFVBQVUsR0FBRyxJQUFJRCxHQUFKLEVBQXBDLEVBQStDO0lBS3pFLE1BQU1FLGNBQWMsR0FBRyxFQUF2Qjs7SUFDQSxLQUFLLE1BQU0sQ0FBQ2hCLE9BQUQsRUFBVWlCLFFBQVYsQ0FBWCxJQUFrQ0osUUFBUSxDQUFDSyxPQUFULEVBQWxDLEVBQXNEO01BQ3BELElBQUlDLGVBQUEsQ0FBRUMsT0FBRixDQUFVSCxRQUFWLENBQUosRUFBeUI7UUFDdkI7TUFDRDs7TUFFREQsY0FBYyxDQUFDSyxJQUFmLENBQ0csR0FBRSxLQUFLaEMsYUFBYyxLQUFJVyxPQUFRLFNBQVFzQixhQUFBLENBQUtDLFNBQUwsQ0FDeEMsT0FEd0MsRUFFeENOLFFBQVEsQ0FBQ08sTUFGK0IsQ0FHeEMsNkJBSko7O01BTUEsS0FBSyxNQUFNQyxPQUFYLElBQXNCUixRQUF0QixFQUFnQztRQUM5QkQsY0FBYyxDQUFDSyxJQUFmLENBQ0csT0FBTUksT0FBTyxDQUFDQyxHQUFJLGtCQUFuQixHQUF3QyxHQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUgsT0FBTyxDQUFDSSxHQUF2QixDQUE0QixHQUR4RTtNQUdEO0lBQ0Y7O0lBRUQsTUFBTUMsZ0JBQWdCLEdBQUcsRUFBekI7O0lBQ0EsS0FBSyxNQUFNLENBQUM5QixPQUFELEVBQVUrQixRQUFWLENBQVgsSUFBa0NoQixVQUFVLENBQUNHLE9BQVgsRUFBbEMsRUFBd0Q7TUFDdEQsSUFBSUMsZUFBQSxDQUFFQyxPQUFGLENBQVVXLFFBQVYsQ0FBSixFQUF5QjtRQUN2QjtNQUNEOztNQUNELE1BQU1DLFdBQVcsR0FBR2IsZUFBQSxDQUFFYyxVQUFGLENBQWEsS0FBSzVDLGFBQWxCLENBQXBCOztNQUNBLE1BQU02QyxzQkFBc0IsR0FBR1osYUFBQSxDQUFLQyxTQUFMLENBQWUsbUJBQWYsRUFBb0NRLFFBQVEsQ0FBQ1AsTUFBN0MsRUFBcUQsSUFBckQsQ0FBL0I7O01BQ0FNLGdCQUFnQixDQUFDVCxJQUFqQixDQUF1QixHQUFFVyxXQUFZLEtBQUloQyxPQUFRLFNBQVFrQyxzQkFBdUIsSUFBaEY7O01BQ0EsS0FBSyxNQUFNQyxPQUFYLElBQXNCSixRQUF0QixFQUFnQztRQUM5QkQsZ0JBQWdCLENBQUNULElBQWpCLENBQXVCLE9BQU1jLE9BQVEsRUFBckM7TUFDRDtJQUNGOztJQUVELE9BQU87TUFBQ25CLGNBQUQ7TUFBaUJjO0lBQWpCLENBQVA7RUFDRDs7RUFhYyxNQUFUTSxTQUFTLENBQUNDLElBQUQsRUFBTztJQUtwQixNQUFNeEIsUUFBUSxHQUFHLElBQUlDLEdBQUosRUFBakI7SUFLQSxNQUFNQyxVQUFVLEdBQUcsSUFBSUQsR0FBSixFQUFuQjs7SUFFQSxLQUFLLE1BQU0sQ0FBQ2QsT0FBRCxFQUFVQyxXQUFWLENBQVgsSUFBcUNrQixlQUFBLENBQUVtQixPQUFGLENBQVVELElBQVYsQ0FBckMsRUFBc0Q7TUFDcEQsTUFBTSxDQUFDRSxNQUFELEVBQVNSLFFBQVQsSUFBcUIsTUFBTXZCLGlCQUFBLENBQUVDLEdBQUYsQ0FBTSxDQUNyQyxLQUFLVixXQUFMLENBQWlCQyxPQUFqQixFQUEwQkMsV0FBMUIsQ0FEcUMsRUFFckMsS0FBS0ksV0FBTCxDQUFpQkwsT0FBakIsRUFBMEJDLFdBQTFCLENBRnFDLENBQU4sQ0FBakM7O01BSUEsSUFBSXNDLE1BQU0sQ0FBQ2YsTUFBWCxFQUFtQjtRQUNqQixPQUFPYSxJQUFJLENBQUNyQyxPQUFELENBQVg7TUFDRDs7TUFDRGEsUUFBUSxDQUFDMkIsR0FBVCxDQUFheEMsT0FBYixFQUFzQnVDLE1BQXRCO01BQ0F4QixVQUFVLENBQUN5QixHQUFYLENBQWV4QyxPQUFmLEVBQXdCK0IsUUFBeEI7SUFDRDs7SUFFRCxNQUFNO01BQUNmLGNBQUQ7TUFBaUJjO0lBQWpCLElBQXFDLEtBQUtsQiw0QkFBTCxDQUN6Q0MsUUFEeUMsRUFFekNFLFVBRnlDLENBQTNDOztJQUtBLElBQUksQ0FBQ0ksZUFBQSxDQUFFQyxPQUFGLENBQVVKLGNBQVYsQ0FBTCxFQUFnQztNQUM5QnhCLGVBQUEsQ0FBSWlELEtBQUosQ0FDRyxzQkFBcUJuQixhQUFBLENBQUtDLFNBQUwsQ0FDcEIsT0FEb0IsRUFFcEJQLGNBQWMsQ0FBQ1EsTUFGSyxFQUdwQixJQUhvQixDQUlwQixxQkFBb0IsS0FBS2xDLFNBQVUsc0JBQXFCLEtBQUtPLFlBQWEsRUFMOUU7O01BT0EsS0FBSyxNQUFNNkMsT0FBWCxJQUFzQjFCLGNBQXRCLEVBQXNDO1FBQ3BDeEIsZUFBQSxDQUFJaUQsS0FBSixDQUFVQyxPQUFWO01BQ0Q7SUFDRixDQVhELE1BV087TUFHTCxJQUFJLENBQUN2QixlQUFBLENBQUVDLE9BQUYsQ0FBVVUsZ0JBQVYsQ0FBTCxFQUFrQztRQUNoQ3RDLGVBQUEsQ0FBSW1ELElBQUosQ0FDRyxzQkFBcUJyQixhQUFBLENBQUtDLFNBQUwsQ0FDcEIsU0FEb0IsRUFFcEJPLGdCQUFnQixDQUFDTixNQUZHLEVBR3BCLElBSG9CLENBSXBCLHFCQUFvQixLQUFLbEMsU0FBVSxzQkFBcUIsS0FBS08sWUFBYSxFQUw5RTs7UUFPQSxLQUFLLE1BQU02QyxPQUFYLElBQXNCWixnQkFBdEIsRUFBd0M7VUFDdEN0QyxlQUFBLENBQUltRCxJQUFKLENBQVNELE9BQVQ7UUFDRDtNQUNGO0lBQ0Y7O0lBQ0QsT0FBT0wsSUFBUDtFQUNEOztFQVFnQixNQUFYTyxXQUFXLEdBQUc7SUFDbEIsSUFBSSxLQUFLbEQsY0FBVCxFQUF5QjtNQUN2QixPQUFPLEtBQUtBLGNBQVo7SUFDRDs7SUFDRCxNQUFNbUQsWUFBWSxHQUF1Q0MseUJBQUEsQ0FBZSxLQUFLekQsYUFBcEIsQ0FBekQ7SUFDQSxNQUFNMEQsR0FBRyxHQUFHLElBQUlGLFlBQUosQ0FBaUI7TUFBQ0csTUFBTSxFQUFFLElBQVQ7TUFBZUMsSUFBSSxFQUFFO0lBQXJCLENBQWpCLENBQVo7SUFDQSxNQUFNQyxRQUFRLEdBQUcsTUFBTUgsR0FBRyxDQUFDSSxJQUFKLENBQVM7TUFBQ0MsYUFBYSxFQUFFLElBQWhCO01BQXNCQyxXQUFXLEVBQUU7SUFBbkMsQ0FBVCxDQUF2QjtJQUNBLEtBQUszRCxjQUFMLEdBQXNCd0QsUUFBdEI7SUFDQSxPQUFPQSxRQUFQO0VBQ0Q7O0VBWTZCLE1BQXhCeEMsd0JBQXdCLENBQUNULFdBQUQsRUFBY0QsT0FBZCxFQUF1QjtJQUNuRCxNQUFNO01BQUNzRCxhQUFEO01BQWdCQyxXQUFoQjtNQUE2QkMsV0FBN0I7TUFBMENDO0lBQTFDLElBQXFEeEQsV0FBM0Q7SUFDQSxNQUFNOEIsUUFBUSxHQUFHLEVBQWpCO0lBRUEsTUFBTTJCLGFBQWEsR0FBRyxFQUF0Qjs7SUFDQSxJQUFJLENBQUN2QyxlQUFBLENBQUV3QyxRQUFGLENBQVdKLFdBQVgsQ0FBTCxFQUE4QjtNQUM1QkcsYUFBYSxDQUFDckMsSUFBZCxDQUFtQixhQUFuQjtJQUNEOztJQUVELElBQUksQ0FBQ25DLGFBQWEsQ0FBQzBFLEdBQWQsQ0FBa0JKLFdBQWxCLENBQUwsRUFBcUM7TUFDbkNFLGFBQWEsQ0FBQ3JDLElBQWQsQ0FBbUIsYUFBbkI7SUFDRDs7SUFFRCxNQUFNVyxXQUFXLEdBQUdiLGVBQUEsQ0FBRWMsVUFBRixDQUFhLEtBQUs1QyxhQUFsQixDQUFwQjs7SUFFQSxJQUFJcUUsYUFBYSxDQUFDbEMsTUFBbEIsRUFBMEI7TUFDeEIsTUFBTXFDLDRCQUE0QixHQUFHdkMsYUFBQSxDQUFLQyxTQUFMLENBQ25DLDBCQURtQyxFQUVuQ21DLGFBQWEsQ0FBQ2xDLE1BRnFCLEVBR25DLElBSG1DLENBQXJDOztNQUtBLE1BQU1zQyxpQkFBaUIsR0FBR0osYUFBYSxDQUFDSyxHQUFkLENBQW1CQyxLQUFELElBQVksSUFBR0EsS0FBTSxHQUF2QyxFQUEyQ0MsSUFBM0MsQ0FBZ0QsSUFBaEQsQ0FBMUI7TUFFQWxDLFFBQVEsQ0FBQ1YsSUFBVCxDQUNHLEdBQUVXLFdBQVksS0FBSWhDLE9BQVEsZ0JBQWV5RCxPQUFRLFdBQVVJLDRCQUE2QixLQUFJQyxpQkFBa0IsOEhBQTZILEtBQUt6RSxhQUFjLGNBQWFXLE9BQVEsbUJBQWtCLEtBQUtYLGFBQWMsWUFBV1csT0FBUSxzQkFEOVU7SUFHRDs7SUFPRCxNQUFNa0UsaUJBQWlCLEdBQUlDLE1BQUQsSUFDdkIsR0FBRW5DLFdBQVksS0FBSWhDLE9BQVEsZ0JBQWV5RCxPQUFRLGdFQUErRFcsa0JBQVcsWUFBV0QsTUFBTyxFQURoSjs7SUFHQSxJQUFJaEQsZUFBQSxDQUFFd0MsUUFBRixDQUFXTCxhQUFYLEtBQTZCLENBQUMsSUFBQWUsaUJBQUEsRUFBVUQsa0JBQVYsRUFBc0JkLGFBQXRCLENBQWxDLEVBQXdFO01BQ3RFLE1BQU1KLFFBQVEsR0FBRyxNQUFNLEtBQUtOLFdBQUwsRUFBdkI7TUFDQSxNQUFNMEIsV0FBVyxHQUE4Q3BCLFFBQVEsQ0FBQ2xELE9BQUQsQ0FBdkU7O01BQ0EsSUFBSXNFLFdBQUosYUFBSUEsV0FBSixlQUFJQSxXQUFXLENBQUVDLFNBQWpCLEVBQTRCO1FBQzFCLE1BQU07VUFBQ0MsYUFBRDtVQUFnQkM7UUFBaEIsSUFBNEJILFdBQWxDOztRQUNBLElBQUksQ0FBQ0csUUFBTCxFQUFlO1VBQ2IxQyxRQUFRLENBQUNWLElBQVQsQ0FDRTZDLGlCQUFpQixDQUNkLHdDQUF1Q1osYUFBYyxzQkFBcUJHLE9BQVEsVUFBU2UsYUFBYyxZQUQzRixDQURuQjtRQUtELENBTkQsTUFNTztVQUNMekMsUUFBUSxDQUFDVixJQUFULENBQ0U2QyxpQkFBaUIsQ0FDZCx3Q0FBdUNaLGFBQWMsbUNBQWtDRyxPQUFRLGtEQUFpRFcsa0JBQVcsR0FEN0ksQ0FEbkI7UUFLRDtNQUNGO0lBQ0YsQ0FuQkQsTUFtQk8sSUFBSSxDQUFDakQsZUFBQSxDQUFFd0MsUUFBRixDQUFXTCxhQUFYLENBQUwsRUFBZ0M7TUFDckMsTUFBTUosUUFBUSxHQUFHLE1BQU0sS0FBS04sV0FBTCxFQUF2QjtNQUNBLE1BQU0wQixXQUFXLEdBQThDcEIsUUFBUSxDQUFDbEQsT0FBRCxDQUF2RTs7TUFDQSxJQUFJLEVBQUNzRSxXQUFELGFBQUNBLFdBQUQsZUFBQ0EsV0FBVyxDQUFFRyxRQUFkLEtBQTBCSCxXQUExQixhQUEwQkEsV0FBMUIsZUFBMEJBLFdBQVcsQ0FBRUUsYUFBM0MsRUFBMEQ7UUFDeER6QyxRQUFRLENBQUNWLElBQVQsQ0FDRTZDLGlCQUFpQixDQUNkLHlFQUF3RVQsT0FBUSwrQ0FBOEN6RCxPQUFRLFNBQVFzRSxXQUFXLENBQUNFLGFBQWMsWUFEMUosQ0FEbkI7TUFLRCxDQU5ELE1BTU87UUFDTHpDLFFBQVEsQ0FBQ1YsSUFBVCxDQUNFNkMsaUJBQWlCLENBQ2Qsa0ZBQWlGVCxPQUFRLDRDQUEyQ1csa0JBQVcsS0FEakksQ0FEbkI7TUFLRDtJQUNGOztJQUNELE9BQU9yQyxRQUFQO0VBQ0Q7O0VBUUQzQixpQkFBaUIsQ0FBQ0gsV0FBRCxFQUFjRCxPQUFkLEVBQXVCO0lBRXRDLE1BQU1pQixRQUFRLEdBQUcsRUFBakI7SUFDQSxNQUFNO01BQUN5RCxNQUFNLEVBQUVDO0lBQVQsSUFBMEIxRSxXQUFoQzs7SUFDQSxJQUFJYixlQUFlLENBQUN3RixnQkFBaEIsQ0FBaUMzRSxXQUFqQyxDQUFKLEVBQW1EO01BQ2pELElBQUlrQixlQUFBLENBQUV3QyxRQUFGLENBQVdnQixhQUFYLENBQUosRUFBK0I7UUFDN0IsSUFBSSxJQUFBRSxvQ0FBQSxFQUE2QkYsYUFBN0IsQ0FBSixFQUFpRDtVQUMvQyxJQUFJO1lBQ0YsS0FBS0csbUJBQUwsQ0FBeUI5RSxPQUF6QixFQUFrQ0MsV0FBbEM7VUFDRCxDQUZELENBRUUsT0FBT3lCLEdBQVAsRUFBWTtZQUNaVCxRQUFRLENBQUNJLElBQVQsQ0FBYztjQUNaSyxHQUFHLEVBQUcscUNBQW9DaUQsYUFBYyxLQUFJakQsR0FBRyxDQUFDcUQsT0FBUSxFQUQ1RDtjQUVabEQsR0FBRyxFQUFFOEM7WUFGTyxDQUFkO1VBSUQ7UUFDRixDQVRELE1BU087VUFDTDFELFFBQVEsQ0FBQ0ksSUFBVCxDQUFjO1lBQ1pLLEdBQUcsRUFBRyxtREFBa0QsQ0FDdEQsR0FBR3NELGlDQURtRCxFQUV0RGYsSUFGc0QsQ0FFakQsSUFGaUQsQ0FFM0MsRUFIRDtZQUlacEMsR0FBRyxFQUFFOEM7VUFKTyxDQUFkO1FBTUQ7TUFDRixDQWxCRCxNQWtCTyxJQUFJeEQsZUFBQSxDQUFFOEQsYUFBRixDQUFnQk4sYUFBaEIsQ0FBSixFQUFvQztRQUN6QyxJQUFJO1VBQ0YsS0FBS0csbUJBQUwsQ0FBeUI5RSxPQUF6QixFQUFrQ0MsV0FBbEM7UUFDRCxDQUZELENBRUUsT0FBT3lCLEdBQVAsRUFBWTtVQUNaVCxRQUFRLENBQUNJLElBQVQsQ0FBYztZQUNaSyxHQUFHLEVBQUcsdUNBQXNDQSxHQUFHLENBQUNxRCxPQUFRLEVBRDVDO1lBRVpsRCxHQUFHLEVBQUU4QztVQUZPLENBQWQ7UUFJRDtNQUNGLENBVE0sTUFTQTtRQUNMMUQsUUFBUSxDQUFDSSxJQUFULENBQWM7VUFDWkssR0FBRyxFQUFFLHlGQURPO1VBRVpHLEdBQUcsRUFBRThDO1FBRk8sQ0FBZDtNQUlEO0lBQ0Y7O0lBQ0QsT0FBTzFELFFBQVA7RUFDRDs7RUFTRGYsd0JBQXdCLENBQUNELFdBQUQsRUFBY0QsT0FBZCxFQUF1QjtJQUM3QyxNQUFNO01BQUNrRixPQUFEO01BQVV6QixPQUFWO01BQW1CMEI7SUFBbkIsSUFBZ0NsRixXQUF0QztJQUNBLE1BQU1nQixRQUFRLEdBQUcsRUFBakI7O0lBRUEsSUFBSSxDQUFDRSxlQUFBLENBQUV3QyxRQUFGLENBQVd1QixPQUFYLENBQUwsRUFBMEI7TUFDeEJqRSxRQUFRLENBQUNJLElBQVQsQ0FBYztRQUNaSyxHQUFHLEVBQUcsMkdBRE07UUFFWkcsR0FBRyxFQUFFcUQ7TUFGTyxDQUFkO0lBSUQ7O0lBRUQsSUFBSSxDQUFDL0QsZUFBQSxDQUFFd0MsUUFBRixDQUFXRixPQUFYLENBQUwsRUFBMEI7TUFDeEJ4QyxRQUFRLENBQUNJLElBQVQsQ0FBYztRQUNaSyxHQUFHLEVBQUcsd0dBRE07UUFFWkcsR0FBRyxFQUFFNEI7TUFGTyxDQUFkO0lBSUQ7O0lBRUQsSUFBSSxDQUFDdEMsZUFBQSxDQUFFd0MsUUFBRixDQUFXd0IsU0FBWCxDQUFMLEVBQTRCO01BQzFCbEUsUUFBUSxDQUFDSSxJQUFULENBQWM7UUFDWkssR0FBRyxFQUFHLDJJQURNO1FBRVpHLEdBQUcsRUFBRXNEO01BRk8sQ0FBZDtJQUlEOztJQUVELE9BQU9sRSxRQUFQO0VBQ0Q7O0VBU0RkLGlCQUFpQixDQUFDRixXQUFELEVBQWNELE9BQWQsRUFBdUI7SUFFdEMsT0FBTyxFQUFQO0VBQ0Q7O0VBUWlCLE1BQVpvRixZQUFZLENBQUNwRixPQUFELEVBQVVDLFdBQVYsRUFBdUI7SUFBQ29GLEtBQUssR0FBRztFQUFULElBQWlCLEVBQXhDLEVBQTRDO0lBQzVELEtBQUs1RixRQUFMLENBQWMyRixZQUFkLENBQTJCLEtBQUsvRixhQUFoQyxFQUErQ1csT0FBL0MsRUFBd0RDLFdBQXhEOztJQUNBLElBQUlvRixLQUFKLEVBQVc7TUFDVCxNQUFNLEtBQUs1RixRQUFMLENBQWM0RixLQUFkLEVBQU47SUFDRDtFQUNGOztFQVFvQixNQUFmQyxlQUFlLENBQUN0RixPQUFELEVBQVVDLFdBQVYsRUFBdUI7SUFBQ29GLEtBQUssR0FBRztFQUFULElBQWlCLEVBQXhDLEVBQTRDO0lBQy9ELEtBQUs5RixtQkFBTCxDQUF5QlMsT0FBekIsSUFBb0MsRUFDbEMsR0FBRyxLQUFLVCxtQkFBTCxDQUF5QlMsT0FBekIsQ0FEK0I7TUFFbEMsR0FBR0M7SUFGK0IsQ0FBcEM7O0lBSUEsSUFBSW9GLEtBQUosRUFBVztNQUNULE1BQU0sS0FBSzVGLFFBQUwsQ0FBYzRGLEtBQWQsRUFBTjtJQUNEO0VBQ0Y7O0VBU29CLE1BQWZFLGVBQWUsQ0FBQ3ZGLE9BQUQsRUFBVTtJQUFDcUYsS0FBSyxHQUFHO0VBQVQsSUFBaUIsRUFBM0IsRUFBK0I7SUFDbEQsT0FBTyxLQUFLOUYsbUJBQUwsQ0FBeUJTLE9BQXpCLENBQVA7O0lBQ0EsSUFBSXFGLEtBQUosRUFBVztNQUNULE1BQU0sS0FBSzVGLFFBQUwsQ0FBYzRGLEtBQWQsRUFBTjtJQUNEO0VBQ0Y7O0VBT0RHLEtBQUssQ0FBQ0MsV0FBRCxFQUFjO0lBQ2pCLElBQUl0RSxlQUFBLENBQUVDLE9BQUYsQ0FBVSxLQUFLN0IsbUJBQWYsQ0FBSixFQUF5QztNQUN2Q0MsZUFBQSxDQUFJa0csSUFBSixDQUNHLE1BQUssS0FBS3BHLFNBQVUsMkJBQTBCLEtBQUtRLFVBQVcscUJBQW9CLEtBQUtULGFBQWMsSUFBdEcsR0FDRSxnREFGSjs7TUFJQTtJQUNEOztJQUVERyxlQUFBLENBQUlrRyxJQUFKLENBQVUsYUFBWSxLQUFLcEcsU0FBVSxHQUFyQzs7SUFDQSxLQUFLLE1BQU0sQ0FBQ1UsT0FBRCxFQUFVQyxXQUFWLENBQVgsSUFDRWtCLGVBQUEsQ0FBRW1CLE9BQUYsQ0FBVSxLQUFLL0MsbUJBQWYsQ0FERixFQUVHO01BQ0RDLGVBQUEsQ0FBSWtHLElBQUosQ0FBVSxPQUFNLEtBQUtDLGFBQUwsQ0FBbUIzRixPQUFuQixFQUE0QkMsV0FBNUIsQ0FBeUMsRUFBekQ7SUFDRDtFQUNGOztFQVVEMEYsYUFBYSxDQUFDM0YsT0FBRCxFQUFVQyxXQUFWLEVBQXVCO0lBQ2xDLE1BQU0sSUFBSTJGLEtBQUosQ0FBVSx3Q0FBVixDQUFOO0VBQ0Q7O0VBTURDLGNBQWMsQ0FBQzdGLE9BQUQsRUFBVTtJQUN0QixPQUFPOEYsYUFBQSxDQUFLN0IsSUFBTCxDQUFVLEtBQUtuRSxVQUFmLEVBQTJCLGNBQTNCLEVBQTJDLEtBQUtQLG1CQUFMLENBQXlCUyxPQUF6QixFQUFrQ3lELE9BQTdFLENBQVA7RUFDRDs7RUFPRHNDLE9BQU8sQ0FBQy9GLE9BQUQsRUFBVTtJQUNmLE1BQU07TUFBQ21GO0lBQUQsSUFBYyxLQUFLNUYsbUJBQUwsQ0FBeUJTLE9BQXpCLENBQXBCO0lBQ0EsTUFBTWdHLE9BQU8sR0FBRyxLQUFLSCxjQUFMLENBQW9CN0YsT0FBcEIsQ0FBaEI7SUFFQSxJQUFJaUcsV0FBSjs7SUFDQSxJQUFJO01BQ0ZBLFdBQVcsR0FBR0YsT0FBTyxDQUFDRyxPQUFSLENBQWdCRixPQUFoQixDQUFkO0lBQ0QsQ0FGRCxDQUVFLE9BQU90RSxHQUFQLEVBQVk7TUFDWixNQUFNLElBQUl5RSxjQUFKLENBQW9CLG9CQUFtQixLQUFLOUcsYUFBYyxpQkFBZ0IyRyxPQUFRLEVBQWxGLENBQU47SUFDRDs7SUFFRCxJQUFJSSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsd0JBQVosSUFBd0NQLE9BQU8sQ0FBQ1EsS0FBUixDQUFjTixXQUFkLENBQTVDLEVBQXdFO01BQ3RFekcsZUFBQSxDQUFJZ0gsS0FBSixDQUFXLFlBQVdQLFdBQVkscUJBQWxDOztNQUNBLE9BQU9GLE9BQU8sQ0FBQ1EsS0FBUixDQUFjTixXQUFkLENBQVA7SUFDRDs7SUFDRHpHLGVBQUEsQ0FBSWdILEtBQUosQ0FBVyxhQUFZLEtBQUtuSCxhQUFjLE9BQU0yRyxPQUFRLEVBQXhEOztJQUNBLE1BQU1TLFNBQVMsR0FBR1YsT0FBTyxDQUFDQyxPQUFELENBQVAsQ0FBaUJiLFNBQWpCLENBQWxCOztJQUNBLElBQUksQ0FBQ3NCLFNBQUwsRUFBZ0I7TUFDZCxNQUFNLElBQUlOLGNBQUosQ0FDSCxpQ0FBZ0NoQixTQUFVLGlCQUFnQixLQUFLOUYsYUFBYyxLQUFJVyxPQUFRLEdBRHRGLENBQU47SUFHRDs7SUFDRCxPQUFPeUcsU0FBUDtFQUNEOztFQU1EQyxXQUFXLENBQUMxRyxPQUFELEVBQVU7SUFDbkIsT0FBT21CLGVBQUEsQ0FBRXdGLFFBQUYsQ0FBV0MsTUFBTSxDQUFDQyxJQUFQLENBQVksS0FBS3RILG1CQUFqQixDQUFYLEVBQWtEUyxPQUFsRCxDQUFQO0VBQ0Q7O0VBWTBCLE9BQXBCOEcsb0JBQW9CLENBQUNoSCxVQUFELEVBQWFpSCxPQUFiLEVBQXNCL0csT0FBdEIsRUFBK0JDLFdBQS9CLEVBQTRDO0lBQ3JFLE1BQU07TUFBQ3dELE9BQUQ7TUFBVWlCLE1BQU0sRUFBRUM7SUFBbEIsSUFBbUMxRSxXQUF6Qzs7SUFDQSxJQUFJLENBQUMwRSxhQUFMLEVBQW9CO01BQ2xCLE1BQU0sSUFBSXFDLFNBQUosQ0FDSCw4Q0FBNkNELE9BQVEsSUFBR3RELE9BQVEsd0NBRDdELENBQU47SUFHRDs7SUFDRCxJQUFJd0QsWUFBSjs7SUFDQSxJQUFJOUYsZUFBQSxDQUFFd0MsUUFBRixDQUFXZ0IsYUFBWCxDQUFKLEVBQStCO01BQzdCLE1BQU11QyxVQUFVLEdBQUcsSUFBQUMsb0JBQUEsRUFBWXJILFVBQVosRUFBd0JnRyxhQUFBLENBQUs3QixJQUFMLENBQVVSLE9BQVYsRUFBbUJrQixhQUFuQixDQUF4QixDQUFuQjtNQUNBc0MsWUFBWSxHQUFHbEIsT0FBTyxDQUFDbUIsVUFBRCxDQUF0QjtJQUNELENBSEQsTUFHTztNQUNMRCxZQUFZLEdBQUd0QyxhQUFmO0lBQ0Q7O0lBRUQsTUFBTUQsTUFBTSxHQUFHdUMsWUFBWSxDQUFDRyxVQUFiLEdBQTBCSCxZQUFZLENBQUNJLE9BQXZDLEdBQWlESixZQUFoRTtJQUNBLElBQUFLLHNCQUFBLEVBQWVQLE9BQWYsRUFBd0IvRyxPQUF4QixFQUFpQzBFLE1BQWpDO0lBQ0EsT0FBT0EsTUFBUDtFQUNEOztFQVNzQixPQUFoQkUsZ0JBQWdCLENBQUMzRSxXQUFELEVBQWM7SUFDbkMsT0FBT2tCLGVBQUEsQ0FBRXdDLFFBQUYsQ0FBVzFELFdBQVgsYUFBV0EsV0FBWCx1QkFBV0EsV0FBVyxDQUFFeUUsTUFBeEIsS0FBbUN2RCxlQUFBLENBQUVvRyxRQUFGLENBQVd0SCxXQUFYLGFBQVdBLFdBQVgsdUJBQVdBLFdBQVcsQ0FBRXlFLE1BQXhCLENBQTFDO0VBQ0Q7O0VBU0RJLG1CQUFtQixDQUFDOUUsT0FBRCxFQUFVQyxXQUFWLEVBQXVCO0lBQ3hDLE9BQU9iLGVBQWUsQ0FBQzBILG9CQUFoQixDQUNMLEtBQUtoSCxVQURBLEVBRUwsS0FBS1QsYUFGQSxFQUdMVyxPQUhLLEVBSUxDLFdBSkssQ0FBUDtFQU1EOztBQTlqQjBCIn0=
|
|
436
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlNUQUxMX1RZUEVfTlBNIiwiSU5TVEFMTF9UWVBFX0xPQ0FMIiwiSU5TVEFMTF9UWVBFX0dJVEhVQiIsIklOU1RBTExfVFlQRV9HSVQiLCJJTlNUQUxMX1RZUEVTIiwiU2V0IiwiRXh0ZW5zaW9uQ29uZmlnIiwiZXh0ZW5zaW9uVHlwZSIsImNvbmZpZ0tleSIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJsb2ciLCJtYW5pZmVzdCIsIl9saXN0RGF0YUNhY2hlIiwiY29uc3RydWN0b3IiLCJnZXRFeHRlbnNpb25EYXRhIiwibWFuaWZlc3RQYXRoIiwiYXBwaXVtSG9tZSIsImdldFByb2JsZW1zIiwiZXh0TmFtZSIsImV4dE1hbmlmZXN0IiwiZ2V0R2VuZXJpY0NvbmZpZ1Byb2JsZW1zIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJnZXRTY2hlbWFQcm9ibGVtcyIsImdldFdhcm5pbmdzIiwiZ2VuZXJpY0NvbmZpZ1dhcm5pbmdzIiwiY29uZmlnV2FybmluZ3MiLCJCIiwiYWxsIiwiZ2V0R2VuZXJpY0NvbmZpZ1dhcm5pbmdzIiwiZ2V0Q29uZmlnV2FybmluZ3MiLCJnZXRWYWxpZGF0aW9uUmVzdWx0U3VtbWFyaWVzIiwiZXJyb3JNYXAiLCJNYXAiLCJ3YXJuaW5nTWFwIiwiZXJyb3JTdW1tYXJpZXMiLCJwcm9ibGVtcyIsImVudHJpZXMiLCJfIiwiaXNFbXB0eSIsInB1c2giLCJ1dGlsIiwicGx1cmFsaXplIiwibGVuZ3RoIiwicHJvYmxlbSIsImVyciIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2YWwiLCJ3YXJuaW5nU3VtbWFyaWVzIiwid2FybmluZ3MiLCJleHRUeXBlVGV4dCIsImNhcGl0YWxpemUiLCJwcm9ibGVtRW51bWVyYXRpb25UZXh0Iiwid2FybmluZyIsIl92YWxpZGF0ZSIsImV4dHMiLCJ0b1BhaXJzIiwiZXJyb3JzIiwic2V0IiwiZXJyb3IiLCJzaXplIiwic3VtbWFyeSIsIndhcm4iLCJnZXRMaXN0RGF0YSIsIkNvbW1hbmRDbGFzcyIsImNvbW1hbmRDbGFzc2VzIiwiY21kIiwiY29uZmlnIiwianNvbiIsImxpc3REYXRhIiwibGlzdCIsInNob3dJbnN0YWxsZWQiLCJzaG93VXBkYXRlcyIsImFwcGl1bVZlcnNpb24iLCJpbnN0YWxsU3BlYyIsImluc3RhbGxUeXBlIiwicGtnTmFtZSIsImludmFsaWRGaWVsZHMiLCJpc1N0cmluZyIsImhhcyIsImludmFsaWRGaWVsZHNFbnVtZXJhdGlvblRleHQiLCJpbnZhbGlkRmllbGRzVGV4dCIsIm1hcCIsImZpZWxkIiwiam9pbiIsImNyZWF0ZVBlZXJXYXJuaW5nIiwicmVhc29uIiwiQVBQSVVNX1ZFUiIsInNhdGlzZmllcyIsImV4dExpc3REYXRhIiwiaW5zdGFsbGVkIiwidXBkYXRlVmVyc2lvbiIsInVwVG9EYXRlIiwic2NoZW1hIiwiYXJnU2NoZW1hUGF0aCIsImV4dERhdGFIYXNTY2hlbWEiLCJpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIiwicmVhZEV4dGVuc2lvblNjaGVtYSIsIm1lc3NhZ2UiLCJBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TIiwiaXNQbGFpbk9iamVjdCIsInZlcnNpb24iLCJtYWluQ2xhc3MiLCJhZGRFeHRlbnNpb24iLCJ3cml0ZSIsInVwZGF0ZUV4dGVuc2lvbiIsInJlbW92ZUV4dGVuc2lvbiIsInByaW50IiwiYWN0aXZlTmFtZXMiLCJpbmZvIiwiZXh0ZW5zaW9uRGVzYyIsIkVycm9yIiwiZ2V0SW5zdGFsbFBhdGgiLCJwYXRoIiwicmVxdWlyZSIsInJlcVBhdGgiLCJyZXFSZXNvbHZlZCIsInJlc29sdmUiLCJSZWZlcmVuY2VFcnJvciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fUkVMT0FEX0VYVEVOU0lPTlMiLCJjYWNoZSIsImRlYnVnIiwiTWFpbkNsYXNzIiwiaXNJbnN0YWxsZWQiLCJpbmNsdWRlcyIsIk9iamVjdCIsImtleXMiLCJfcmVhZEV4dGVuc2lvblNjaGVtYSIsImV4dFR5cGUiLCJUeXBlRXJyb3IiLCJtb2R1bGVPYmplY3QiLCJzY2hlbWFQYXRoIiwicmVzb2x2ZUZyb20iLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInJlZ2lzdGVyU2NoZW1hIiwiaXNPYmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL2V4dGVuc2lvbi1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJlc29sdmVGcm9tIGZyb20gJ3Jlc29sdmUtZnJvbSc7XG5pbXBvcnQge3NhdGlzZmllc30gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7dXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7Y29tbWFuZENsYXNzZXN9IGZyb20gJy4uL2NsaS9leHRlbnNpb24nO1xuaW1wb3J0IHtBUFBJVU1fVkVSfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyxcbiAgaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbixcbiAgcmVnaXN0ZXJTY2hlbWEsXG59IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEnO1xuXG5jb25zdCBJTlNUQUxMX1RZUEVfTlBNID0gJ25wbSc7XG5jb25zdCBJTlNUQUxMX1RZUEVfTE9DQUwgPSAnbG9jYWwnO1xuY29uc3QgSU5TVEFMTF9UWVBFX0dJVEhVQiA9ICdnaXRodWInO1xuY29uc3QgSU5TVEFMTF9UWVBFX0dJVCA9ICdnaXQnO1xuXG4vKiogQHR5cGUge1NldDxJbnN0YWxsVHlwZT59ICovXG5jb25zdCBJTlNUQUxMX1RZUEVTID0gbmV3IFNldChbXG4gIElOU1RBTExfVFlQRV9HSVQsXG4gIElOU1RBTExfVFlQRV9HSVRIVUIsXG4gIElOU1RBTExfVFlQRV9MT0NBTCxcbiAgSU5TVEFMTF9UWVBFX05QTSxcbl0pO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgYWJzdHJhY3QuIEl0IHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LlxuICpcbiAqIFN1YmNsYXNzZXMgc2hvdWxkIHByb3ZpZGUgdGhlIGdlbmVyaWMgcGFyYW1ldGVyIHRvIGltcGxlbWVudC5cbiAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICovXG5leHBvcnQgY2xhc3MgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqIEB0eXBlIHtFeHRUeXBlfSAqL1xuICBleHRlbnNpb25UeXBlO1xuXG4gIC8qKiBAdHlwZSB7YCR7RXh0VHlwZX1zYH0gKi9cbiAgY29uZmlnS2V5O1xuXG4gIC8qKiBAdHlwZSB7RXh0UmVjb3JkPEV4dFR5cGU+fSAqL1xuICBpbnN0YWxsZWRFeHRlbnNpb25zO1xuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtTG9nZ2VyfSAqL1xuICBsb2c7XG5cbiAgLyoqIEB0eXBlIHtNYW5pZmVzdH0gKi9cbiAgbWFuaWZlc3Q7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtFeHRlbnNpb25MaXN0RGF0YX1cbiAgICovXG4gIF9saXN0RGF0YUNhY2hlO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBwYXJhbSB7RXh0VHlwZX0gZXh0ZW5zaW9uVHlwZSAtIFR5cGUgb2YgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0IC0gYE1hbmlmZXN0YCBpbnN0YW5jZVxuICAgKi9cbiAgY29uc3RydWN0b3IoZXh0ZW5zaW9uVHlwZSwgbWFuaWZlc3QpIHtcbiAgICB0aGlzLmV4dGVuc2lvblR5cGUgPSBleHRlbnNpb25UeXBlO1xuICAgIHRoaXMuY29uZmlnS2V5ID0gYCR7ZXh0ZW5zaW9uVHlwZX1zYDtcbiAgICB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMgPSBtYW5pZmVzdC5nZXRFeHRlbnNpb25EYXRhKGV4dGVuc2lvblR5cGUpO1xuICAgIHRoaXMubWFuaWZlc3QgPSBtYW5pZmVzdDtcbiAgfVxuXG4gIGdldCBtYW5pZmVzdFBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFuaWZlc3QubWFuaWZlc3RQYXRoO1xuICB9XG5cbiAgZ2V0IGFwcGl1bUhvbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFuaWZlc3QuYXBwaXVtSG9tZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBlcnJvcnMgZm9yIGEgZ2l2ZW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0V4dE5hbWU8RXh0VHlwZT59IGV4dE5hbWVcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3RcbiAgICogQHJldHVybnMge0V4dE1hbmlmZXN0UHJvYmxlbVtdfVxuICAgKi9cbiAgZ2V0UHJvYmxlbXMoZXh0TmFtZSwgZXh0TWFuaWZlc3QpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5nZXRHZW5lcmljQ29uZmlnUHJvYmxlbXMoZXh0TWFuaWZlc3QsIGV4dE5hbWUpLFxuICAgICAgLi4udGhpcy5nZXRDb25maWdQcm9ibGVtcyhleHRNYW5pZmVzdCwgZXh0TmFtZSksXG4gICAgICAuLi50aGlzLmdldFNjaGVtYVByb2JsZW1zKGV4dE1hbmlmZXN0LCBleHROYW1lKSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHdhcm5pbmdzIGZvciBhIGdpdmVuIGV4dGVuc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dE1hbmlmZXN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIGdldFdhcm5pbmdzKGV4dE5hbWUsIGV4dE1hbmlmZXN0KSB7XG4gICAgY29uc3QgW2dlbmVyaWNDb25maWdXYXJuaW5ncywgY29uZmlnV2FybmluZ3NdID0gYXdhaXQgQi5hbGwoW1xuICAgICAgdGhpcy5nZXRHZW5lcmljQ29uZmlnV2FybmluZ3MoZXh0TWFuaWZlc3QsIGV4dE5hbWUpLFxuICAgICAgdGhpcy5nZXRDb25maWdXYXJuaW5ncyhleHRNYW5pZmVzdCwgZXh0TmFtZSksXG4gICAgXSk7XG5cbiAgICByZXR1cm4gWy4uLmdlbmVyaWNDb25maWdXYXJuaW5ncywgLi4uY29uZmlnV2FybmluZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGV4dGVuc2lvbi10eXBlLXNwZWNpZmljIGlzc3Vlcy4gVG8gYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPn0gZXh0TmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMscmVxdWlyZS1hd2FpdFxuICBhc3luYyBnZXRDb25maWdXYXJuaW5ncyhleHRNYW5pZmVzdCwgZXh0TmFtZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge01hcDxFeHROYW1lPEV4dFR5cGU+LEV4dE1hbmlmZXN0UHJvYmxlbVtdPn0gW2Vycm9yTWFwXVxuICAgKiBAcGFyYW0ge01hcDxFeHROYW1lPEV4dFR5cGU+LHN0cmluZ1tdPn0gW3dhcm5pbmdNYXBdXG4gICAqL1xuICBnZXRWYWxpZGF0aW9uUmVzdWx0U3VtbWFyaWVzKGVycm9yTWFwID0gbmV3IE1hcCgpLCB3YXJuaW5nTWFwID0gbmV3IE1hcCgpKSB7XG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgY29tcHV0ZWQgc3RyaW5nc1xuICAgICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBjb25zdCBlcnJvclN1bW1hcmllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgW2V4dE5hbWUsIHByb2JsZW1zXSBvZiBlcnJvck1hcC5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChfLmlzRW1wdHkocHJvYmxlbXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gcmVtb3ZlIHRoaXMgZXh0ZW5zaW9uIGZyb20gdGhlIGxpc3Qgc2luY2UgaXQncyBub3QgdmFsaWRcbiAgICAgIGVycm9yU3VtbWFyaWVzLnB1c2goXG4gICAgICAgIGAke3RoaXMuZXh0ZW5zaW9uVHlwZX0gXCIke2V4dE5hbWV9XCIgaGFkICR7dXRpbC5wbHVyYWxpemUoXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBwcm9ibGVtcy5sZW5ndGhcbiAgICAgICAgKX0gYW5kIHdpbGwgbm90IGJlIGF2YWlsYWJsZTpgXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBwcm9ibGVtIG9mIHByb2JsZW1zKSB7XG4gICAgICAgIGVycm9yU3VtbWFyaWVzLnB1c2goXG4gICAgICAgICAgYCAgLSAke3Byb2JsZW0uZXJyfSAoQWN0dWFsIHZhbHVlOiBgICsgYCR7SlNPTi5zdHJpbmdpZnkocHJvYmxlbS52YWwpfSlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgY29uc3Qgd2FybmluZ1N1bW1hcmllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgW2V4dE5hbWUsIHdhcm5pbmdzXSBvZiB3YXJuaW5nTWFwLmVudHJpZXMoKSkge1xuICAgICAgaWYgKF8uaXNFbXB0eSh3YXJuaW5ncykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBleHRUeXBlVGV4dCA9IF8uY2FwaXRhbGl6ZSh0aGlzLmV4dGVuc2lvblR5cGUpO1xuICAgICAgY29uc3QgcHJvYmxlbUVudW1lcmF0aW9uVGV4dCA9IHV0aWwucGx1cmFsaXplKCdwb3RlbnRpYWwgcHJvYmxlbScsIHdhcm5pbmdzLmxlbmd0aCwgdHJ1ZSk7XG4gICAgICB3YXJuaW5nU3VtbWFyaWVzLnB1c2goYCR7ZXh0VHlwZVRleHR9IFwiJHtleHROYW1lfVwiIGhhcyAke3Byb2JsZW1FbnVtZXJhdGlvblRleHR9OiBgKTtcbiAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiB3YXJuaW5ncykge1xuICAgICAgICB3YXJuaW5nU3VtbWFyaWVzLnB1c2goYCAgLSAke3dhcm5pbmd9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtlcnJvclN1bW1hcmllcywgd2FybmluZ1N1bW1hcmllc307XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGV4dGVuc2lvbnMgZm9yIHByb2JsZW1zLiAgVG8gYmUgY2FsbGVkIGJ5IHN1YmNsYXNzZXMnIGB2YWxpZGF0ZWAgbWV0aG9kLlxuICAgKlxuICAgKiBFcnJvcnMgYW5kIHdhcm5pbmdzIHdpbGwgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBleHRzYC5cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKiBAcGFyYW0ge0V4dFJlY29yZDxFeHRUeXBlPn0gZXh0cyAtIExvb2t1cCBvZiBleHRlbnNpb24gbmFtZXMgdG8ge0BsaW5rY29kZSBFeHRNYW5pZmVzdH0gb2JqZWN0c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxFeHRSZWNvcmQ8RXh0VHlwZT4+fSBUaGUgc2FtZSBsb29rdXAsIGJ1dCBwaWNraW5nIG9ubHkgZXJyb3ItZnJlZSBleHRlbnNpb25zXG4gICAqL1xuICBhc3luYyBfdmFsaWRhdGUoZXh0cykge1xuICAgIC8qKlxuICAgICAqIExvb2t1cCBvZiBleHRlbnNpb24gbmFtZXMgdG8ge0BsaW5rY29kZSBFeHRNYW5pZmVzdFByb2JsZW0gRXh0TWFuaWZlc3RQcm9ibGVtc31cbiAgICAgKiBAdHlwZSB7TWFwPEV4dE5hbWU8RXh0VHlwZT4sRXh0TWFuaWZlc3RQcm9ibGVtW10+fVxuICAgICAqL1xuICAgIGNvbnN0IGVycm9yTWFwID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIExvb2t1cCBvZiBleHRlbnNpb24gbmFtZXMgdG8gd2FybmluZ3MuXG4gICAgICogQHR5cGUge01hcDxFeHROYW1lPEV4dFR5cGU+LHN0cmluZ1tdPn1cbiAgICAgKi9cbiAgICBjb25zdCB3YXJuaW5nTWFwID0gbmV3IE1hcCgpO1xuXG4gICAgZm9yIChjb25zdCBbZXh0TmFtZSwgZXh0TWFuaWZlc3RdIG9mIF8udG9QYWlycyhleHRzKSkge1xuICAgICAgY29uc3QgW2Vycm9ycywgd2FybmluZ3NdID0gYXdhaXQgQi5hbGwoW1xuICAgICAgICB0aGlzLmdldFByb2JsZW1zKGV4dE5hbWUsIGV4dE1hbmlmZXN0KSxcbiAgICAgICAgdGhpcy5nZXRXYXJuaW5ncyhleHROYW1lLCBleHRNYW5pZmVzdCksXG4gICAgICBdKTtcbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGRlbGV0ZSBleHRzW2V4dE5hbWVdO1xuICAgICAgfVxuICAgICAgZXJyb3JNYXAuc2V0KGV4dE5hbWUsIGVycm9ycyk7XG4gICAgICB3YXJuaW5nTWFwLnNldChleHROYW1lLCB3YXJuaW5ncyk7XG4gICAgfVxuXG4gICAgY29uc3Qge2Vycm9yU3VtbWFyaWVzLCB3YXJuaW5nU3VtbWFyaWVzfSA9IHRoaXMuZ2V0VmFsaWRhdGlvblJlc3VsdFN1bW1hcmllcyhcbiAgICAgIGVycm9yTWFwLFxuICAgICAgd2FybmluZ01hcFxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShlcnJvclN1bW1hcmllcykpIHtcbiAgICAgIGxvZy5lcnJvcihcbiAgICAgICAgYEFwcGl1bSBlbmNvdW50ZXJlZCAke3V0aWwucGx1cmFsaXplKCdlcnJvcicsIGVycm9yTWFwLnNpemUsIHRydWUpfSB3aGlsZSB2YWxpZGF0aW5nICR7XG4gICAgICAgICAgdGhpcy5jb25maWdLZXlcbiAgICAgICAgfSBmb3VuZCBpbiBtYW5pZmVzdCAke3RoaXMubWFuaWZlc3RQYXRofWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHN1bW1hcnkgb2YgZXJyb3JTdW1tYXJpZXMpIHtcbiAgICAgICAgbG9nLmVycm9yKHN1bW1hcnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBvbmx5IGRpc3BsYXkgd2FybmluZ3MgaWYgdGhlcmUgYXJlIG5vIGVycm9ycyFcblxuICAgICAgaWYgKCFfLmlzRW1wdHkod2FybmluZ1N1bW1hcmllcykpIHtcbiAgICAgICAgbG9nLndhcm4oXG4gICAgICAgICAgYEFwcGl1bSBlbmNvdW50ZXJlZCAke3V0aWwucGx1cmFsaXplKFxuICAgICAgICAgICAgJ3dhcm5pbmcnLFxuICAgICAgICAgICAgd2FybmluZ01hcC5zaXplLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICl9IHdoaWxlIHZhbGlkYXRpbmcgJHt0aGlzLmNvbmZpZ0tleX0gZm91bmQgaW4gbWFuaWZlc3QgJHt0aGlzLm1hbmlmZXN0UGF0aH1gXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3Qgc3VtbWFyeSBvZiB3YXJuaW5nU3VtbWFyaWVzKSB7XG4gICAgICAgICAgbG9nLndhcm4oc3VtbWFyeSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4dHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGxpc3RpbmcgZGF0YSBmb3IgZXh0ZW5zaW9ucyB2aWEgY29tbWFuZCBjbGFzcy5cbiAgICogQ2FjaGVzIHRoZSByZXN1bHQgaW4ge0BsaW5rY29kZSBFeHRlbnNpb25Db25maWcuX2xpc3REYXRhQ2FjaGV9XG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHJldHVybnMge1Byb21pc2U8RXh0ZW5zaW9uTGlzdERhdGE+fVxuICAgKi9cbiAgYXN5bmMgZ2V0TGlzdERhdGEoKSB7XG4gICAgaWYgKHRoaXMuX2xpc3REYXRhQ2FjaGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RGF0YUNhY2hlO1xuICAgIH1cbiAgICBjb25zdCBDb21tYW5kQ2xhc3MgPSAvKiogQHR5cGUge0V4dENvbW1hbmQ8RXh0VHlwZT59ICovIChjb21tYW5kQ2xhc3Nlc1t0aGlzLmV4dGVuc2lvblR5cGVdKTtcbiAgICBjb25zdCBjbWQgPSBuZXcgQ29tbWFuZENsYXNzKHtjb25maWc6IHRoaXMsIGpzb246IHRydWV9KTtcbiAgICBjb25zdCBsaXN0RGF0YSA9IGF3YWl0IGNtZC5saXN0KHtzaG93SW5zdGFsbGVkOiB0cnVlLCBzaG93VXBkYXRlczogdHJ1ZX0pO1xuICAgIHRoaXMuX2xpc3REYXRhQ2FjaGUgPSBsaXN0RGF0YTtcbiAgICByZXR1cm4gbGlzdERhdGE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2Ygd2FybmluZ3MgZm9yIGEgcGFydGljdWxhciBleHRlbnNpb24uXG4gICAqXG4gICAqIEJ5IGRlZmluaXRpb24sIGEgbm9uLWVtcHR5IGxpc3Qgb2Ygd2FybmluZ3MgZG9lcyBfbm90XyBpbXBseSB0aGUgZXh0ZW5zaW9uIGNhbm5vdCBiZSBsb2FkZWQsXG4gICAqIGJ1dCBpdCBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQgb3Igb3RoZXJ3aXNlIHRocm93IGFuIGV4Y2VwdGlvbiBhdCBydW50aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PEV4dFR5cGU+fSBleHRNYW5pZmVzdFxuICAgKiBAcGFyYW0ge0V4dE5hbWU8RXh0VHlwZT59IGV4dE5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMgZ2V0R2VuZXJpY0NvbmZpZ1dhcm5pbmdzKGV4dE1hbmlmZXN0LCBleHROYW1lKSB7XG4gICAgY29uc3Qge2FwcGl1bVZlcnNpb24sIGluc3RhbGxTcGVjLCBpbnN0YWxsVHlwZSwgcGtnTmFtZX0gPSBleHRNYW5pZmVzdDtcbiAgICBjb25zdCB3YXJuaW5ncyA9IFtdO1xuXG4gICAgY29uc3QgaW52YWxpZEZpZWxkcyA9IFtdO1xuICAgIGlmICghXy5pc1N0cmluZyhpbnN0YWxsU3BlYykpIHtcbiAgICAgIGludmFsaWRGaWVsZHMucHVzaCgnaW5zdGFsbFNwZWMnKTtcbiAgICB9XG5cbiAgICBpZiAoIUlOU1RBTExfVFlQRVMuaGFzKGluc3RhbGxUeXBlKSkge1xuICAgICAgaW52YWxpZEZpZWxkcy5wdXNoKCdpbnN0YWxsVHlwZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dFR5cGVUZXh0ID0gXy5jYXBpdGFsaXplKHRoaXMuZXh0ZW5zaW9uVHlwZSk7XG5cbiAgICBpZiAoaW52YWxpZEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRGaWVsZHNFbnVtZXJhdGlvblRleHQgPSB1dGlsLnBsdXJhbGl6ZShcbiAgICAgICAgJ2ludmFsaWQgb3IgbWlzc2luZyBmaWVsZCcsXG4gICAgICAgIGludmFsaWRGaWVsZHMubGVuZ3RoLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgY29uc3QgaW52YWxpZEZpZWxkc1RleHQgPSBpbnZhbGlkRmllbGRzLm1hcCgoZmllbGQpID0+IGBcIiR7ZmllbGR9XCJgKS5qb2luKCcsICcpO1xuXG4gICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICBgJHtleHRUeXBlVGV4dH0gXCIke2V4dE5hbWV9XCIgKHBhY2thZ2UgXFxgJHtwa2dOYW1lfVxcYCkgaGFzICR7aW52YWxpZEZpZWxkc0VudW1lcmF0aW9uVGV4dH0gKCR7aW52YWxpZEZpZWxkc1RleHR9KSBpbiBcXGBleHRlbnNpb25zLnlhbWxcXGA7IHRoaXMgbWF5IGNhdXNlIHVwZ3JhZGVzIGRvbmUgdmlhIHRoZSBcXGBhcHBpdW1cXGAgQ0xJIHRvb2wgdG8gZmFpbC4gUGxlYXNlIHJlaW5zdGFsbCB3aXRoIFxcYGFwcGl1bSAke3RoaXMuZXh0ZW5zaW9uVHlwZX0gdW5pbnN0YWxsICR7ZXh0TmFtZX1cXGAgYW5kIFxcYGFwcGl1bSAke3RoaXMuZXh0ZW5zaW9uVHlwZX0gaW5zdGFsbCAke2V4dE5hbWV9XFxgIHRvIGF0dGVtcHQgYSBmaXguYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwcyBjb25jYXRlbmF0ZSB3YXJuaW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcGVlciBkZXBlbmRlbmNpZXNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAgICogQHJldHVybnMgc3RyaW5nXG4gICAgICovXG4gICAgY29uc3QgY3JlYXRlUGVlcldhcm5pbmcgPSAocmVhc29uKSA9PlxuICAgICAgYCR7ZXh0VHlwZVRleHR9IFwiJHtleHROYW1lfVwiIChwYWNrYWdlIFxcYCR7cGtnTmFtZX1cXGApIG1heSBiZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIEFwcGl1bSAodiR7QVBQSVVNX1ZFUn0pIGR1ZSB0byAke3JlYXNvbn1gO1xuXG4gICAgaWYgKF8uaXNTdHJpbmcoYXBwaXVtVmVyc2lvbikgJiYgIXNhdGlzZmllcyhBUFBJVU1fVkVSLCBhcHBpdW1WZXJzaW9uKSkge1xuICAgICAgY29uc3QgbGlzdERhdGEgPSBhd2FpdCB0aGlzLmdldExpc3REYXRhKCk7XG4gICAgICBjb25zdCBleHRMaXN0RGF0YSA9IC8qKiBAdHlwZSB7SW5zdGFsbGVkRXh0ZW5zaW9uTGlzdERhdGF9ICovIChsaXN0RGF0YVtleHROYW1lXSk7XG4gICAgICBpZiAoZXh0TGlzdERhdGE/Lmluc3RhbGxlZCkge1xuICAgICAgICBjb25zdCB7dXBkYXRlVmVyc2lvbiwgdXBUb0RhdGV9ID0gZXh0TGlzdERhdGE7XG4gICAgICAgIGlmICghdXBUb0RhdGUpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgICAgY3JlYXRlUGVlcldhcm5pbmcoXG4gICAgICAgICAgICAgIGBpdHMgcGVlciBkZXBlbmRlbmN5IG9uIG9sZGVyIEFwcGl1bSB2JHthcHBpdW1WZXJzaW9ufS4gUGxlYXNlIHVwZ3JhZGUgXFxgJHtwa2dOYW1lfVxcYCB0byB2JHt1cGRhdGVWZXJzaW9ufSBvciBuZXdlci5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgICAgY3JlYXRlUGVlcldhcm5pbmcoXG4gICAgICAgICAgICAgIGBpdHMgcGVlciBkZXBlbmRlbmN5IG9uIG9sZGVyIEFwcGl1bSB2JHthcHBpdW1WZXJzaW9ufS4gUGxlYXNlIGFzayB0aGUgZGV2ZWxvcGVyIG9mIFxcYCR7cGtnTmFtZX1cXGAgdG8gdXBkYXRlIHRoZSBwZWVyIGRlcGVuZGVuY3kgb24gQXBwaXVtIHRvIHYke0FQUElVTV9WRVJ9LmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghXy5pc1N0cmluZyhhcHBpdW1WZXJzaW9uKSkge1xuICAgICAgY29uc3QgbGlzdERhdGEgPSBhd2FpdCB0aGlzLmdldExpc3REYXRhKCk7XG4gICAgICBjb25zdCBleHRMaXN0RGF0YSA9IC8qKiBAdHlwZSB7SW5zdGFsbGVkRXh0ZW5zaW9uTGlzdERhdGF9ICovIChsaXN0RGF0YVtleHROYW1lXSk7XG4gICAgICBpZiAoIWV4dExpc3REYXRhPy51cFRvRGF0ZSAmJiBleHRMaXN0RGF0YT8udXBkYXRlVmVyc2lvbikge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgIGNyZWF0ZVBlZXJXYXJuaW5nKFxuICAgICAgICAgICAgYGFuIGludmFsaWQgb3IgbWlzc2luZyBwZWVyIGRlcGVuZGVuY3kgb24gQXBwaXVtLiBBIG5ld2VyIHZlcnNpb24gb2YgXFxgJHtwa2dOYW1lfVxcYCBpcyBhdmFpbGFibGU7IHBsZWFzZSBhdHRlbXB0IHRvIHVwZ3JhZGUgXCIke2V4dE5hbWV9XCIgdG8gdiR7ZXh0TGlzdERhdGEudXBkYXRlVmVyc2lvbn0gb3IgbmV3ZXIuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICAgICAgY3JlYXRlUGVlcldhcm5pbmcoXG4gICAgICAgICAgICBgYW4gaW52YWxpZCBvciBtaXNzaW5nIHBlZXIgZGVwZW5kZW5jeSBvbiBBcHBpdW0uIFBsZWFzZSBhc2sgdGhlIGRldmVsb3BlciBvZiBcXGAke3BrZ05hbWV9XFxgIHRvIGFkZCBhIHBlZXIgZGVwZW5kZW5jeSBvbiBcXGBeYXBwaXVtQCR7QVBQSVVNX1ZFUn1cXGAuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdhcm5pbmdzO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGxpc3Qgb2YgdW5yZWNvdmVyYWJsZSBlcnJvcnMgKGlmIGFueSkgZm9yIHRoZSBnaXZlbiBleHRlbnNpb24gX2lmXyBpdCBoYXMgYSBgc2NoZW1hYCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3QgLSBFeHRlbnNpb24gZGF0YSAoZnJvbSBtYW5pZmVzdClcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWUgKGZyb20gbWFuaWZlc3QpXG4gICAqIEByZXR1cm5zIHtFeHRNYW5pZmVzdFByb2JsZW1bXX1cbiAgICovXG4gIGdldFNjaGVtYVByb2JsZW1zKGV4dE1hbmlmZXN0LCBleHROYW1lKSB7XG4gICAgLyoqIEB0eXBlIHtFeHRNYW5pZmVzdFByb2JsZW1bXX0gKi9cbiAgICBjb25zdCBwcm9ibGVtcyA9IFtdO1xuICAgIGNvbnN0IHtzY2hlbWE6IGFyZ1NjaGVtYVBhdGh9ID0gZXh0TWFuaWZlc3Q7XG4gICAgaWYgKEV4dGVuc2lvbkNvbmZpZy5leHREYXRhSGFzU2NoZW1hKGV4dE1hbmlmZXN0KSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoYXJnU2NoZW1hUGF0aCkpIHtcbiAgICAgICAgaWYgKGlzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb24oYXJnU2NoZW1hUGF0aCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5yZWFkRXh0ZW5zaW9uU2NoZW1hKGV4dE5hbWUsIGV4dE1hbmlmZXN0KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgICAgICBlcnI6IGBVbmFibGUgdG8gcmVnaXN0ZXIgc2NoZW1hIGF0IHBhdGggJHthcmdTY2hlbWFQYXRofTsgJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICAgICB2YWw6IGFyZ1NjaGVtYVBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgICAgICBlcnI6IGBTY2hlbWEgZmlsZSBoYXMgdW5zdXBwb3J0ZWQgZXh0ZW5zaW9uLiBBbGxvd2VkOiAke1tcbiAgICAgICAgICAgICAgLi4uQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyxcbiAgICAgICAgICAgIF0uam9pbignLCAnKX1gLFxuICAgICAgICAgICAgdmFsOiBhcmdTY2hlbWFQYXRoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChhcmdTY2hlbWFQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMucmVhZEV4dGVuc2lvblNjaGVtYShleHROYW1lLCBleHRNYW5pZmVzdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgICAgZXJyOiBgVW5hYmxlIHRvIHJlZ2lzdGVyIGVtYmVkZGVkIHNjaGVtYTsgJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICAgdmFsOiBhcmdTY2hlbWFQYXRoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgICBlcnI6ICdJbmNvcnJlY3RseSBmb3JtYXR0ZWQgc2NoZW1hIGZpZWxkOyBtdXN0IGJlIGEgcGF0aCB0byBhIHNjaGVtYSBmaWxlIG9yIGEgc2NoZW1hIG9iamVjdC4nLFxuICAgICAgICAgIHZhbDogYXJnU2NoZW1hUGF0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9ibGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBsaXN0IG9mIGdlbmVyaWMgdW5yZWNvdmVyYWJsZSBlcnJvcnMgZm9yIHRoZSBnaXZlbiBleHRlbnNpb25cbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3QgLSBFeHRlbnNpb24gZGF0YSAoZnJvbSBtYW5pZmVzdClcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWUgKGZyb20gbWFuaWZlc3QpXG4gICAqIEByZXR1cm5zIHtFeHRNYW5pZmVzdFByb2JsZW1bXX1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBnZXRHZW5lcmljQ29uZmlnUHJvYmxlbXMoZXh0TWFuaWZlc3QsIGV4dE5hbWUpIHtcbiAgICBjb25zdCB7dmVyc2lvbiwgcGtnTmFtZSwgbWFpbkNsYXNzfSA9IGV4dE1hbmlmZXN0O1xuICAgIGNvbnN0IHByb2JsZW1zID0gW107XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcodmVyc2lvbikpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6IGBJbnZhbGlkIG9yIG1pc3NpbmcgXFxgdmVyc2lvblxcYCBmaWVsZCBpbiBteSBcXGBwYWNrYWdlLmpzb25cXGAgYW5kL29yIFxcYGV4dGVuc2lvbnMueWFtbFxcYCAobXVzdCBiZSBhIHN0cmluZylgLFxuICAgICAgICB2YWw6IHZlcnNpb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcocGtnTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6IGBJbnZhbGlkIG9yIG1pc3NpbmcgXFxgbmFtZVxcYCBmaWVsZCBpbiBteSBcXGBwYWNrYWdlLmpzb25cXGAgYW5kL29yIFxcYGV4dGVuc2lvbnMueWFtbFxcYCAobXVzdCBiZSBhIHN0cmluZylgLFxuICAgICAgICB2YWw6IHBrZ05hbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcobWFpbkNsYXNzKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogYEludmFsaWQgb3IgbWlzc2luZyBcXGBhcHBpdW0ubWFpbkNsYXNzXFxgIGZpZWxkIGluIG15IFxcYHBhY2thZ2UuanNvblxcYCBhbmQvb3IgXFxgbWFpbkNsYXNzXFxgIGZpZWxkIGluIFxcYGV4dGVuc2lvbnMueWFtbFxcYCAobXVzdCBiZSBhIHN0cmluZylgLFxuICAgICAgICB2YWw6IG1haW5DbGFzcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9ibGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3RcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtFeHRNYW5pZmVzdFByb2JsZW1bXX1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBnZXRDb25maWdQcm9ibGVtcyhleHRNYW5pZmVzdCwgZXh0TmFtZSkge1xuICAgIC8vIHNob3VkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHNwZWNpYWwgdmFsaWRhdGlvbiBpcyBuZWNlc3NhcnkgZm9yIHRoaXMgZXh0ZW5zaW9uIHR5cGVcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3RcbiAgICogQHBhcmFtIHtFeHRlbnNpb25Db25maWdNdXRhdGlvbk9wdHN9IFtvcHRzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGFkZEV4dGVuc2lvbihleHROYW1lLCBleHRNYW5pZmVzdCwge3dyaXRlID0gdHJ1ZX0gPSB7fSkge1xuICAgIHRoaXMubWFuaWZlc3QuYWRkRXh0ZW5zaW9uKHRoaXMuZXh0ZW5zaW9uVHlwZSwgZXh0TmFtZSwgZXh0TWFuaWZlc3QpO1xuICAgIGlmICh3cml0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5tYW5pZmVzdC53cml0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dE5hbWU8RXh0VHlwZT59IGV4dE5hbWVcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPnxpbXBvcnQoJy4uL2NsaS9leHRlbnNpb24tY29tbWFuZCcpLkV4dGVuc2lvbkZpZWxkczxFeHRUeXBlPn0gZXh0TWFuaWZlc3RcbiAgICogQHBhcmFtIHtFeHRlbnNpb25Db25maWdNdXRhdGlvbk9wdHN9IFtvcHRzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUV4dGVuc2lvbihleHROYW1lLCBleHRNYW5pZmVzdCwge3dyaXRlID0gdHJ1ZX0gPSB7fSkge1xuICAgIHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXSA9IHtcbiAgICAgIC4uLnRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9uc1tleHROYW1lXSxcbiAgICAgIC4uLmV4dE1hbmlmZXN0LFxuICAgIH07XG4gICAgaWYgKHdyaXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLm1hbmlmZXN0LndyaXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBleHRlbnNpb24gZnJvbSB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgZXh0ZW5zaW9ucywgYW5kIG9wdGlvbmFsbHkgYXZvaWQgYSB3cml0ZSB0byB0aGUgbWFuaWZlc3QgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uQ29uZmlnTXV0YXRpb25PcHRzfSBbb3B0c11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyByZW1vdmVFeHRlbnNpb24oZXh0TmFtZSwge3dyaXRlID0gdHJ1ZX0gPSB7fSkge1xuICAgIGRlbGV0ZSB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV07XG4gICAgaWYgKHdyaXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLm1hbmlmZXN0LndyaXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0TmFtZTxFeHRUeXBlPltdfSBbYWN0aXZlTmFtZXNdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHByaW50KGFjdGl2ZU5hbWVzKSB7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMpKSB7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYE5vICR7dGhpcy5jb25maWdLZXl9IGhhdmUgYmVlbiBpbnN0YWxsZWQgaW4gJHt0aGlzLmFwcGl1bUhvbWV9LiBVc2UgdGhlIFwiYXBwaXVtICR7dGhpcy5leHRlbnNpb25UeXBlfVwiIGAgK1xuICAgICAgICAgICdjb21tYW5kIHRvIGluc3RhbGwgdGhlIG9uZShzKSB5b3Ugd2FudCB0byB1c2UuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgQXZhaWxhYmxlICR7dGhpcy5jb25maWdLZXl9OmApO1xuICAgIGZvciAoY29uc3QgW2V4dE5hbWUsIGV4dE1hbmlmZXN0XSBvZiAvKiogQHR5cGUge1tzdHJpbmcsIEV4dE1hbmlmZXN0PEV4dFR5cGU+XVtdfSAqLyAoXG4gICAgICBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKVxuICAgICkpIHtcbiAgICAgIGxvZy5pbmZvKGAgIC0gJHt0aGlzLmV4dGVuc2lvbkRlc2MoZXh0TmFtZSwgZXh0TWFuaWZlc3QpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGV4dGVuc2lvbi4gU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudC5cbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHBhcmFtIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gZXh0TWFuaWZlc3QgLSBFeHRlbnNpb24gZGF0YVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBleHRlbnNpb25EZXNjKGV4dE5hbWUsIGV4dE1hbmlmZXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBzdWJjbGFzcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRJbnN0YWxsUGF0aChleHROYW1lKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbih0aGlzLmFwcGl1bUhvbWUsICdub2RlX21vZHVsZXMnLCB0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnNbZXh0TmFtZV0ucGtnTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgZXh0ZW5zaW9uIGFuZCByZXR1cm5zIGl0cyBtYWluIGNsYXNzIChjb25zdHJ1Y3RvcilcbiAgICogQHBhcmFtIHtFeHROYW1lPEV4dFR5cGU+fSBleHROYW1lXG4gICAqIEByZXR1cm5zIHtFeHRDbGFzczxFeHRUeXBlPn1cbiAgICovXG4gIHJlcXVpcmUoZXh0TmFtZSkge1xuICAgIGNvbnN0IHttYWluQ2xhc3N9ID0gdGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zW2V4dE5hbWVdO1xuICAgIGNvbnN0IHJlcVBhdGggPSB0aGlzLmdldEluc3RhbGxQYXRoKGV4dE5hbWUpO1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICAgIGxldCByZXFSZXNvbHZlZDtcbiAgICB0cnkge1xuICAgICAgcmVxUmVzb2x2ZWQgPSByZXF1aXJlLnJlc29sdmUocmVxUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgJHt0aGlzLmV4dGVuc2lvblR5cGV9IGluc3RhbGxlZCBhdCAke3JlcVBhdGh9YCk7XG4gICAgfVxuICAgIC8vIG5vdGU6IHRoaXMgd2lsbCBvbmx5IHJlbG9hZCB0aGUgZW50cnkgcG9pbnRcbiAgICBpZiAocHJvY2Vzcy5lbnYuQVBQSVVNX1JFTE9BRF9FWFRFTlNJT05TICYmIHJlcXVpcmUuY2FjaGVbcmVxUmVzb2x2ZWRdKSB7XG4gICAgICBsb2cuZGVidWcoYFJlbW92aW5nICR7cmVxUmVzb2x2ZWR9IGZyb20gcmVxdWlyZSBjYWNoZWApO1xuICAgICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbcmVxUmVzb2x2ZWRdO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFJlcXVpcmluZyAke3RoaXMuZXh0ZW5zaW9uVHlwZX0gYXQgJHtyZXFQYXRofWApO1xuICAgIGNvbnN0IE1haW5DbGFzcyA9IHJlcXVpcmUocmVxUGF0aClbbWFpbkNsYXNzXTtcbiAgICBpZiAoIU1haW5DbGFzcykge1xuICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgYSBjbGFzcyBuYW1lZCBcIiR7bWFpbkNsYXNzfVwiIGV4cG9ydGVkIGJ5ICR7dGhpcy5leHRlbnNpb25UeXBlfSBcIiR7ZXh0TmFtZX1cImBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBNYWluQ2xhc3M7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0luc3RhbGxlZChleHROYW1lKSB7XG4gICAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSwgZXh0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IGNvcnJlc3BvbmRpbmcgaW5zdGFuY2UgbWV0aG9kcyBvZiBzdWJjbGFzcy5cbiAgICogQHByaXZhdGVcbiAgICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gICAqIEBwYXJhbSB7RXh0VHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dE5hbWU8RXh0VHlwZT59IGV4dE5hbWUgLSBFeHRlbnNpb24gbmFtZSAodW5pcXVlIHRvIGl0cyB0eXBlKVxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0V2l0aFNjaGVtYTxFeHRUeXBlPn0gZXh0TWFuaWZlc3QgLSBFeHRlbnNpb24gY29uZmlnXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlNjaGVtYU9iamVjdHx1bmRlZmluZWR9XG4gICAqL1xuICBzdGF0aWMgX3JlYWRFeHRlbnNpb25TY2hlbWEoYXBwaXVtSG9tZSwgZXh0VHlwZSwgZXh0TmFtZSwgZXh0TWFuaWZlc3QpIHtcbiAgICBjb25zdCB7cGtnTmFtZSwgc2NoZW1hOiBhcmdTY2hlbWFQYXRofSA9IGV4dE1hbmlmZXN0O1xuICAgIGlmICghYXJnU2NoZW1hUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYE5vIFxcYHNjaGVtYVxcYCBwcm9wZXJ0eSBmb3VuZCBpbiBjb25maWcgZm9yICR7ZXh0VHlwZX0gJHtwa2dOYW1lfSAtLSB3aHkgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQ/YFxuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IG1vZHVsZU9iamVjdDtcbiAgICBpZiAoXy5pc1N0cmluZyhhcmdTY2hlbWFQYXRoKSkge1xuICAgICAgY29uc3Qgc2NoZW1hUGF0aCA9IHJlc29sdmVGcm9tKGFwcGl1bUhvbWUsIHBhdGguam9pbihwa2dOYW1lLCBhcmdTY2hlbWFQYXRoKSk7XG4gICAgICBtb2R1bGVPYmplY3QgPSByZXF1aXJlKHNjaGVtYVBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb2R1bGVPYmplY3QgPSBhcmdTY2hlbWFQYXRoO1xuICAgIH1cbiAgICAvLyB0aGlzIHN1Y2tzLiBkZWZhdWx0IGV4cG9ydHMgc2hvdWxkIGJlIGRlc3Ryb3llZFxuICAgIGNvbnN0IHNjaGVtYSA9IG1vZHVsZU9iamVjdC5fX2VzTW9kdWxlID8gbW9kdWxlT2JqZWN0LmRlZmF1bHQgOiBtb2R1bGVPYmplY3Q7XG4gICAgcmVnaXN0ZXJTY2hlbWEoZXh0VHlwZSwgZXh0TmFtZSwgc2NoZW1hKTtcbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc3BlY2lmaWMge0BsaW5rIEV4dE1hbmlmZXN0fSBvYmplY3QgaGFzIGEgYHNjaGVtYWAgcHJvcC5cbiAgICogVGhlIHtAbGluayBFeHRNYW5pZmVzdH0gb2JqZWN0IGJlY29tZXMgYSB7QGxpbmsgRXh0TWFuaWZlc3RXaXRoU2NoZW1hfSBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PEV4dFR5cGU+fSBleHRNYW5pZmVzdFxuICAgKiBAcmV0dXJucyB7ZXh0TWFuaWZlc3QgaXMgRXh0TWFuaWZlc3RXaXRoU2NoZW1hPEV4dFR5cGU+fVxuICAgKi9cbiAgc3RhdGljIGV4dERhdGFIYXNTY2hlbWEoZXh0TWFuaWZlc3QpIHtcbiAgICByZXR1cm4gXy5pc1N0cmluZyhleHRNYW5pZmVzdD8uc2NoZW1hKSB8fCBfLmlzT2JqZWN0KGV4dE1hbmlmZXN0Py5zY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGFuIGV4dGVuc2lvbiBwcm92aWRlcyBhIHNjaGVtYSwgdGhpcyB3aWxsIGxvYWQgdGhlIHNjaGVtYSBhbmQgYXR0ZW1wdCB0b1xuICAgKiByZWdpc3RlciBpdCB3aXRoIHRoZSBzY2hlbWEgcmVnaXN0cmFyLlxuICAgKiBAcGFyYW0ge0V4dE5hbWU8RXh0VHlwZT59IGV4dE5hbWUgLSBOYW1lIG9mIGV4dGVuc2lvblxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0V2l0aFNjaGVtYTxFeHRUeXBlPn0gZXh0TWFuaWZlc3QgLSBFeHRlbnNpb24gZGF0YVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdhanYnKS5TY2hlbWFPYmplY3R8dW5kZWZpbmVkfVxuICAgKi9cbiAgcmVhZEV4dGVuc2lvblNjaGVtYShleHROYW1lLCBleHRNYW5pZmVzdCkge1xuICAgIHJldHVybiBFeHRlbnNpb25Db25maWcuX3JlYWRFeHRlbnNpb25TY2hlbWEoXG4gICAgICB0aGlzLmFwcGl1bUhvbWUsXG4gICAgICB0aGlzLmV4dGVuc2lvblR5cGUsXG4gICAgICBleHROYW1lLFxuICAgICAgZXh0TWFuaWZlc3RcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCB7SU5TVEFMTF9UWVBFX05QTSwgSU5TVEFMTF9UWVBFX0dJVCwgSU5TVEFMTF9UWVBFX0xPQ0FMLCBJTlNUQUxMX1RZUEVfR0lUSFVCLCBJTlNUQUxMX1RZUEVTfTtcblxuLyoqXG4gKiBBbiBpc3N1ZSB3aXRoIHRoZSB7QGxpbmtjb2RlIEV4dE1hbmlmZXN0fSBmb3IgYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbi5cbiAqXG4gKiBUaGUgZXhpc3RhbmNlIG9mIHN1Y2ggYW4gb2JqZWN0IGltcGxpZXMgdGhhdCB0aGUgZXh0ZW5zaW9uIGNhbm5vdCBiZSBsb2FkZWQuXG4gKiBAdHlwZWRlZiBFeHRNYW5pZmVzdFByb2JsZW1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlcnIgLSBFcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge2FueX0gdmFsIC0gQXNzb2NpYXRlZCB2YWx1ZVxuICovXG5cbi8qKlxuICogQW4gb3B0aW9uYWwgbG9nZ2luZyBmdW5jdGlvbiBwcm92aWRlZCB0byBhbiB7QGxpbmsgRXh0ZW5zaW9uQ29uZmlnfSBzdWJjbGFzcy5cbiAqIEBjYWxsYmFjayBFeHRlbnNpb25Mb2dGblxuICogQHBhcmFtIHsuLi5hbnl9IGFyZ3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbWFuaWZlc3QnKS5NYW5pZmVzdH0gTWFuaWZlc3RcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRNYW5pZmVzdDxUPn0gRXh0TWFuaWZlc3RcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRNYW5pZmVzdFdpdGhTY2hlbWE8VD59IEV4dE1hbmlmZXN0V2l0aFNjaGVtYVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE5hbWU8VD59IEV4dE5hbWVcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRDbGFzczxUPn0gRXh0Q2xhc3NcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRSZWNvcmQ8VD59IEV4dFJlY29yZFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2NsaS9leHRlbnNpb24nKS5FeHRDb21tYW5kPFQ+fSBFeHRDb21tYW5kXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB2YXJpb3VzIG1ldGhvZHMgaW4ge0BsaW5rIEV4dGVuc2lvbkNvbmZpZ31cbiAqIEB0eXBlZGVmIEV4dGVuc2lvbkNvbmZpZ011dGF0aW9uT3B0c1xuICogQHByb3BlcnR5IHtib29sZWFufSBbd3JpdGU9dHJ1ZV0gV2hldGhlciBvciBub3QgdG8gd3JpdGUgdGhlIG1hbmlmZXN0IHRvIGRpc2sgYWZ0ZXIgYSBtdXRhdGlvbiBvcGVyYXRpb25cbiAqL1xuXG4vKipcbiAqIEEgdmFsaWQgaW5zdGFsbCB0eXBlXG4gKiBAdHlwZWRlZiB7dHlwZW9mIElOU1RBTExfVFlQRV9OUE0gfCB0eXBlb2YgSU5TVEFMTF9UWVBFX0dJVCB8IHR5cGVvZiBJTlNUQUxMX1RZUEVfTE9DQUwgfCB0eXBlb2YgSU5TVEFMTF9UWVBFX0dJVEhVQn0gSW5zdGFsbFR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2NsaS9leHRlbnNpb24tY29tbWFuZCcpLkV4dGVuc2lvbkxpc3REYXRhfSBFeHRlbnNpb25MaXN0RGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vY2xpL2V4dGVuc2lvbi1jb21tYW5kJykuSW5zdGFsbGVkRXh0ZW5zaW9uTGlzdERhdGF9IEluc3RhbGxlZEV4dGVuc2lvbkxpc3REYXRhXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFNQSxNQUFNQSxnQkFBZ0IsR0FBRyxLQUF6Qjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxPQUEzQjs7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxRQUE1Qjs7QUFDQSxNQUFN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
|
|
@@ -26,13 +26,14 @@ var _pluginConfig = require("./plugin-config");
|
|
|
26
26
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
27
27
|
|
|
28
28
|
async function loadExtensions(appiumHome) {
|
|
29
|
-
var _DriverConfig$getInst, _PluginConfig$getInst;
|
|
30
|
-
|
|
31
29
|
const manifest = _manifest.Manifest.getInstance(appiumHome);
|
|
32
30
|
|
|
33
31
|
await manifest.read();
|
|
34
|
-
|
|
35
|
-
const
|
|
32
|
+
|
|
33
|
+
const driverConfig = _driverConfig.DriverConfig.getInstance(manifest) ?? _driverConfig.DriverConfig.create(manifest);
|
|
34
|
+
|
|
35
|
+
const pluginConfig = _pluginConfig.PluginConfig.getInstance(manifest) ?? _pluginConfig.PluginConfig.create(manifest);
|
|
36
|
+
|
|
36
37
|
await _bluebird.default.all([driverConfig.validate(), pluginConfig.validate()]);
|
|
37
38
|
return {
|
|
38
39
|
driverConfig,
|
|
@@ -71,4 +72,4 @@ function getActiveDrivers(driverConfig, useDrivers = []) {
|
|
|
71
72
|
}
|
|
72
73
|
})));
|
|
73
74
|
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2FkRXh0ZW5zaW9ucyIsImFwcGl1bUhvbWUiLCJtYW5pZmVzdCIsIk1hbmlmZXN0IiwiZ2V0SW5zdGFuY2UiLCJyZWFkIiwiZHJpdmVyQ29uZmlnIiwiRHJpdmVyQ29uZmlnIiwiY3JlYXRlIiwicGx1Z2luQ29uZmlnIiwiUGx1Z2luQ29uZmlnIiwiQiIsImFsbCIsInZhbGlkYXRlIiwiZ2V0QWN0aXZlUGx1Z2lucyIsInVzZVBsdWdpbnMiLCJNYXAiLCJfIiwiY29tcGFjdCIsIk9iamVjdCIsImtleXMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiZmlsdGVyIiwicGx1Z2luTmFtZSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiVVNFX0FMTF9QTFVHSU5TIiwibWFwIiwibG9nIiwiaW5mbyIsIlBsdWdpbkNsYXNzIiwicmVxdWlyZSIsImVyciIsImVycm9yIiwibWVzc2FnZSIsImRlYnVnIiwic3RhY2siLCJnZXRBY3RpdmVEcml2ZXJzIiwidXNlRHJpdmVycyIsImRyaXZlck5hbWUiLCJEcml2ZXJDbGFzcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7VVNFX0FMTF9QTFVHSU5TfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtEcml2ZXJDb25maWd9IGZyb20gJy4vZHJpdmVyLWNvbmZpZyc7XG5pbXBvcnQge01hbmlmZXN0fSBmcm9tICcuL21hbmlmZXN0JztcbmltcG9ydCB7UGx1Z2luQ29uZmlnfSBmcm9tICcuL3BsdWdpbi1jb25maWcnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG4vKipcbiAqIExvYWRzIGV4dGVuc2lvbnMgYW5kIGNyZWF0ZXMgYEV4dGVuc2lvbkNvbmZpZ2AgaW5zdGFuY2VzLlxuICpcbiAqIC0gUmVhZHMgdGhlIG1hbmlmZXN0IGZpbGUsIGNyZWF0aW5nIGlmIG5lY2Vzc2FyeVxuICogLSBVc2luZyB0aGUgcGFyc2VkIGV4dGVuc2lvbiBkYXRhLCBjcmVhdGVzL2dldHMgdGhlIGBFeHRlbnNpb25Db25maWdgIHN1YmNsYXNzIGluc3RhbmNlc1xuICogLSBSZXR1cm5zIHRoZXNlIGluc3RhbmNlc1xuICpcbiAqIElmIGBhcHBpdW1Ib21lYCBpcyBuZWVkZWQsIHVzZSBgcmVzb2x2ZUFwcGl1bUhvbWVgIGZyb20gdGhlIGBlbnZgIG1vZHVsZSBpbiBgQGFwcGl1bS9zdXBwb3J0YC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxFeHRlbnNpb25Db25maWdzPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRFeHRlbnNpb25zKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgbWFuaWZlc3QgPSBNYW5pZmVzdC5nZXRJbnN0YW5jZShhcHBpdW1Ib21lKTtcbiAgYXdhaXQgbWFuaWZlc3QucmVhZCgpO1xuICBjb25zdCBkcml2ZXJDb25maWcgPSBEcml2ZXJDb25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpID8/IERyaXZlckNvbmZpZy5jcmVhdGUobWFuaWZlc3QpO1xuICBjb25zdCBwbHVnaW5Db25maWcgPSBQbHVnaW5Db25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpID8/IFBsdWdpbkNvbmZpZy5jcmVhdGUobWFuaWZlc3QpO1xuXG4gIGF3YWl0IEIuYWxsKFtkcml2ZXJDb25maWcudmFsaWRhdGUoKSwgcGx1Z2luQ29uZmlnLnZhbGlkYXRlKCldKTtcbiAgcmV0dXJuIHtkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ307XG59XG5cbi8qKlxuICogRmluZCBhbnkgcGx1Z2luIG5hbWUgd2hpY2ggaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgd2hpY2ggaGFzIGJlZW4gcmVxdWVzdGVkIGZvciBhY3RpdmF0aW9uIGJ5XG4gKiB1c2luZyB0aGUgLS11c2UtcGx1Z2lucyBmbGFnLCBhbmQgdHVybiBlYWNoIG9uZSBpbnRvIGl0cyBjbGFzcywgc28gd2UgY2FuIHNlbmQgdGhlbSBhcyBvYmplY3RzXG4gKiB0byB0aGUgc2VydmVyIGluaXQuIFdlIGFsc28gd2FudCB0byBzZW5kL2Fzc2lnbiB0aGVtIHRvIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIHVzZSB0aGVtXG4gKiB0byB3cmFwIGNvbW1hbmQgZXhlY3V0aW9uXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vcGx1Z2luLWNvbmZpZycpLlBsdWdpbkNvbmZpZ30gcGx1Z2luQ29uZmlnIC0gYSBwbHVnaW4gZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gdXNlUGx1Z2luc1xuICogQHJldHVybnMge1BsdWdpbk5hbWVNYXB9IE1hcHBpbmcgb2YgUGx1Z2luQ2xhc3MgdG8gbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlUGx1Z2lucyhwbHVnaW5Db25maWcsIHVzZVBsdWdpbnMgPSBbXSkge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBfLmNvbXBhY3QoXG4gICAgICBPYmplY3Qua2V5cyhwbHVnaW5Db25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocGx1Z2luTmFtZSkgPT5cbiAgICAgICAgICAgIF8uaW5jbHVkZXModXNlUGx1Z2lucywgcGx1Z2luTmFtZSkgfHxcbiAgICAgICAgICAgICh1c2VQbHVnaW5zLmxlbmd0aCA9PT0gMSAmJiB1c2VQbHVnaW5zWzBdID09PSBVU0VfQUxMX1BMVUdJTlMpXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgocGx1Z2luTmFtZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBsb2FkIHBsdWdpbiAke3BsdWdpbk5hbWV9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBQbHVnaW5DbGFzcyA9IHBsdWdpbkNvbmZpZy5yZXF1aXJlKHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtQbHVnaW5DbGFzcywgcGx1Z2luTmFtZV07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBwbHVnaW4gJyR7cGx1Z2luTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBwbHVnaW4gd2FzOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgYW55IGRyaXZlciBuYW1lIHdoaWNoIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHR1cm4gZWFjaCBvbmUgaW50byBpdHMgY2xhc3MsIHNvIHdlIGNhbiBzZW5kXG4gKiB0aGVtIGFzIG9iamVjdHMgdG8gdGhlIHNlcnZlciBpbml0IGluIGNhc2UgdGhleSBuZWVkIHRvIGFkZCBtZXRob2RzL3JvdXRlcyBvciB1cGRhdGUgdGhlIHNlcnZlci5cbiAqIElmIHRoZSAtLWRyaXZlcnMgZmxhZyB3YXMgZ2l2ZW4sIHRoaXMgbWV0aG9kIG9ubHkgbG9hZHMgdGhlIGdpdmVuIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vZHJpdmVyLWNvbmZpZycpLkRyaXZlckNvbmZpZ30gZHJpdmVyQ29uZmlnIC0gYSBkcml2ZXIgZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gW3VzZURyaXZlcnNdIC0gb3B0aW9uYWwgbGlzdCBvZiBkcml2ZXJzIHRvIGxvYWRcbiAqIEByZXR1cm5zIHtEcml2ZXJOYW1lTWFwfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRHJpdmVycyhkcml2ZXJDb25maWcsIHVzZURyaXZlcnMgPSBbXSkge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBfLmNvbXBhY3QoXG4gICAgICBPYmplY3Qua2V5cyhkcml2ZXJDb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgICAgLmZpbHRlcigoZHJpdmVyTmFtZSkgPT4gXy5pbmNsdWRlcyh1c2VEcml2ZXJzLCBkcml2ZXJOYW1lKSB8fCB1c2VEcml2ZXJzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgLm1hcCgoZHJpdmVyTmFtZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBsb2FkIGRyaXZlciAke2RyaXZlck5hbWV9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBEcml2ZXJDbGFzcyA9IGRyaXZlckNvbmZpZy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtEcml2ZXJDbGFzcywgZHJpdmVyTmFtZV07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBkcml2ZXIgJyR7ZHJpdmVyTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBkcml2ZXIgd2FzOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEEgbWFwcGluZyBvZiB7QGxpbmtjb2RlIFBsdWdpbkNsYXNzfSBjbGFzc2VzIHRvIHRoZWlyIG5hbWVzLlxuICogQHR5cGVkZWYge01hcDxQbHVnaW5DbGFzcyxzdHJpbmc+
|
|
75
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2FkRXh0ZW5zaW9ucyIsImFwcGl1bUhvbWUiLCJtYW5pZmVzdCIsIk1hbmlmZXN0IiwiZ2V0SW5zdGFuY2UiLCJyZWFkIiwiZHJpdmVyQ29uZmlnIiwiRHJpdmVyQ29uZmlnIiwiY3JlYXRlIiwicGx1Z2luQ29uZmlnIiwiUGx1Z2luQ29uZmlnIiwiQiIsImFsbCIsInZhbGlkYXRlIiwiZ2V0QWN0aXZlUGx1Z2lucyIsInVzZVBsdWdpbnMiLCJNYXAiLCJfIiwiY29tcGFjdCIsIk9iamVjdCIsImtleXMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiZmlsdGVyIiwicGx1Z2luTmFtZSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiVVNFX0FMTF9QTFVHSU5TIiwibWFwIiwibG9nIiwiaW5mbyIsIlBsdWdpbkNsYXNzIiwicmVxdWlyZSIsImVyciIsImVycm9yIiwibWVzc2FnZSIsImRlYnVnIiwic3RhY2siLCJnZXRBY3RpdmVEcml2ZXJzIiwidXNlRHJpdmVycyIsImRyaXZlck5hbWUiLCJEcml2ZXJDbGFzcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7VVNFX0FMTF9QTFVHSU5TfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtEcml2ZXJDb25maWd9IGZyb20gJy4vZHJpdmVyLWNvbmZpZyc7XG5pbXBvcnQge01hbmlmZXN0fSBmcm9tICcuL21hbmlmZXN0JztcbmltcG9ydCB7UGx1Z2luQ29uZmlnfSBmcm9tICcuL3BsdWdpbi1jb25maWcnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG4vKipcbiAqIExvYWRzIGV4dGVuc2lvbnMgYW5kIGNyZWF0ZXMgYEV4dGVuc2lvbkNvbmZpZ2AgaW5zdGFuY2VzLlxuICpcbiAqIC0gUmVhZHMgdGhlIG1hbmlmZXN0IGZpbGUsIGNyZWF0aW5nIGlmIG5lY2Vzc2FyeVxuICogLSBVc2luZyB0aGUgcGFyc2VkIGV4dGVuc2lvbiBkYXRhLCBjcmVhdGVzL2dldHMgdGhlIGBFeHRlbnNpb25Db25maWdgIHN1YmNsYXNzIGluc3RhbmNlc1xuICogLSBSZXR1cm5zIHRoZXNlIGluc3RhbmNlc1xuICpcbiAqIElmIGBhcHBpdW1Ib21lYCBpcyBuZWVkZWQsIHVzZSBgcmVzb2x2ZUFwcGl1bUhvbWVgIGZyb20gdGhlIGBlbnZgIG1vZHVsZSBpbiBgQGFwcGl1bS9zdXBwb3J0YC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxFeHRlbnNpb25Db25maWdzPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRFeHRlbnNpb25zKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgbWFuaWZlc3QgPSBNYW5pZmVzdC5nZXRJbnN0YW5jZShhcHBpdW1Ib21lKTtcbiAgYXdhaXQgbWFuaWZlc3QucmVhZCgpO1xuICBjb25zdCBkcml2ZXJDb25maWcgPSBEcml2ZXJDb25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpID8/IERyaXZlckNvbmZpZy5jcmVhdGUobWFuaWZlc3QpO1xuICBjb25zdCBwbHVnaW5Db25maWcgPSBQbHVnaW5Db25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpID8/IFBsdWdpbkNvbmZpZy5jcmVhdGUobWFuaWZlc3QpO1xuXG4gIGF3YWl0IEIuYWxsKFtkcml2ZXJDb25maWcudmFsaWRhdGUoKSwgcGx1Z2luQ29uZmlnLnZhbGlkYXRlKCldKTtcbiAgcmV0dXJuIHtkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ307XG59XG5cbi8qKlxuICogRmluZCBhbnkgcGx1Z2luIG5hbWUgd2hpY2ggaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgd2hpY2ggaGFzIGJlZW4gcmVxdWVzdGVkIGZvciBhY3RpdmF0aW9uIGJ5XG4gKiB1c2luZyB0aGUgLS11c2UtcGx1Z2lucyBmbGFnLCBhbmQgdHVybiBlYWNoIG9uZSBpbnRvIGl0cyBjbGFzcywgc28gd2UgY2FuIHNlbmQgdGhlbSBhcyBvYmplY3RzXG4gKiB0byB0aGUgc2VydmVyIGluaXQuIFdlIGFsc28gd2FudCB0byBzZW5kL2Fzc2lnbiB0aGVtIHRvIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIHVzZSB0aGVtXG4gKiB0byB3cmFwIGNvbW1hbmQgZXhlY3V0aW9uXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vcGx1Z2luLWNvbmZpZycpLlBsdWdpbkNvbmZpZ30gcGx1Z2luQ29uZmlnIC0gYSBwbHVnaW4gZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gdXNlUGx1Z2luc1xuICogQHJldHVybnMge1BsdWdpbk5hbWVNYXB9IE1hcHBpbmcgb2YgUGx1Z2luQ2xhc3MgdG8gbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlUGx1Z2lucyhwbHVnaW5Db25maWcsIHVzZVBsdWdpbnMgPSBbXSkge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBfLmNvbXBhY3QoXG4gICAgICBPYmplY3Qua2V5cyhwbHVnaW5Db25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocGx1Z2luTmFtZSkgPT5cbiAgICAgICAgICAgIF8uaW5jbHVkZXModXNlUGx1Z2lucywgcGx1Z2luTmFtZSkgfHxcbiAgICAgICAgICAgICh1c2VQbHVnaW5zLmxlbmd0aCA9PT0gMSAmJiB1c2VQbHVnaW5zWzBdID09PSBVU0VfQUxMX1BMVUdJTlMpXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgocGx1Z2luTmFtZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBsb2FkIHBsdWdpbiAke3BsdWdpbk5hbWV9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBQbHVnaW5DbGFzcyA9IHBsdWdpbkNvbmZpZy5yZXF1aXJlKHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtQbHVnaW5DbGFzcywgcGx1Z2luTmFtZV07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBwbHVnaW4gJyR7cGx1Z2luTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBwbHVnaW4gd2FzOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgYW55IGRyaXZlciBuYW1lIHdoaWNoIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHR1cm4gZWFjaCBvbmUgaW50byBpdHMgY2xhc3MsIHNvIHdlIGNhbiBzZW5kXG4gKiB0aGVtIGFzIG9iamVjdHMgdG8gdGhlIHNlcnZlciBpbml0IGluIGNhc2UgdGhleSBuZWVkIHRvIGFkZCBtZXRob2RzL3JvdXRlcyBvciB1cGRhdGUgdGhlIHNlcnZlci5cbiAqIElmIHRoZSAtLWRyaXZlcnMgZmxhZyB3YXMgZ2l2ZW4sIHRoaXMgbWV0aG9kIG9ubHkgbG9hZHMgdGhlIGdpdmVuIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vZHJpdmVyLWNvbmZpZycpLkRyaXZlckNvbmZpZ30gZHJpdmVyQ29uZmlnIC0gYSBkcml2ZXIgZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gW3VzZURyaXZlcnNdIC0gb3B0aW9uYWwgbGlzdCBvZiBkcml2ZXJzIHRvIGxvYWRcbiAqIEByZXR1cm5zIHtEcml2ZXJOYW1lTWFwfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRHJpdmVycyhkcml2ZXJDb25maWcsIHVzZURyaXZlcnMgPSBbXSkge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBfLmNvbXBhY3QoXG4gICAgICBPYmplY3Qua2V5cyhkcml2ZXJDb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgICAgLmZpbHRlcigoZHJpdmVyTmFtZSkgPT4gXy5pbmNsdWRlcyh1c2VEcml2ZXJzLCBkcml2ZXJOYW1lKSB8fCB1c2VEcml2ZXJzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgLm1hcCgoZHJpdmVyTmFtZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBsb2FkIGRyaXZlciAke2RyaXZlck5hbWV9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBEcml2ZXJDbGFzcyA9IGRyaXZlckNvbmZpZy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtEcml2ZXJDbGFzcywgZHJpdmVyTmFtZV07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBkcml2ZXIgJyR7ZHJpdmVyTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBkcml2ZXIgd2FzOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEEgbWFwcGluZyBvZiB7QGxpbmtjb2RlIFBsdWdpbkNsYXNzfSBjbGFzc2VzIHRvIHRoZWlyIG5hbWVzLlxuICogQHR5cGVkZWYge01hcDxQbHVnaW5DbGFzcyxzdHJpbmc+fSBQbHVnaW5OYW1lTWFwXG4gKi9cblxuLyoqXG4gKiBBIG1hcHBpbmcgb2Yge0BsaW5rY29kZSBEcml2ZXJDbGFzc30gY2xhc3NlcyB0byB0aGVpciBuYW1lcy5cbiAqIEB0eXBlZGVmIHtNYXA8RHJpdmVyQ2xhc3Msc3RyaW5nPn0gRHJpdmVyTmFtZU1hcFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRXh0ZW5zaW9uQ29uZmlnc1xuICogQHByb3BlcnR5IHtpbXBvcnQoJy4vZHJpdmVyLWNvbmZpZycpLkRyaXZlckNvbmZpZ30gZHJpdmVyQ29uZmlnXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi9wbHVnaW4tY29uZmlnJykuUGx1Z2luQ29uZmlnfSBwbHVnaW5Db25maWdcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBYU8sZUFBZUEsY0FBZixDQUE4QkMsVUFBOUIsRUFBMEM7RUFDL0MsTUFBTUMsUUFBUSxHQUFHQyxrQkFBQSxDQUFTQyxXQUFULENBQXFCSCxVQUFyQixDQUFqQjs7RUFDQSxNQUFNQyxRQUFRLENBQUNHLElBQVQsRUFBTjs7RUFDQSxNQUFNQyxZQUFZLEdBQUdDLDBCQUFBLENBQWFILFdBQWIsQ0FBeUJGLFFBQXpCLEtBQXNDSywwQkFBQSxDQUFhQyxNQUFiLENBQW9CTixRQUFwQixDQUEzRDs7RUFDQSxNQUFNTyxZQUFZLEdBQUdDLDBCQUFBLENBQWFOLFdBQWIsQ0FBeUJGLFFBQXpCLEtBQXNDUSwwQkFBQSxDQUFhRixNQUFiLENBQW9CTixRQUFwQixDQUEzRDs7RUFFQSxNQUFNUyxpQkFBQSxDQUFFQyxHQUFGLENBQU0sQ0FBQ04sWUFBWSxDQUFDTyxRQUFiLEVBQUQsRUFBMEJKLFlBQVksQ0FBQ0ksUUFBYixFQUExQixDQUFOLENBQU47RUFDQSxPQUFPO0lBQUNQLFlBQUQ7SUFBZUc7RUFBZixDQUFQO0FBQ0Q7O0FBWU0sU0FBU0ssZ0JBQVQsQ0FBMEJMLFlBQTFCLEVBQXdDTSxVQUFVLEdBQUcsRUFBckQsRUFBeUQ7RUFDOUQsT0FBTyxJQUFJQyxHQUFKLENBQ0xDLGVBQUEsQ0FBRUMsT0FBRixDQUNFQyxNQUFNLENBQUNDLElBQVAsQ0FBWVgsWUFBWSxDQUFDWSxtQkFBekIsRUFDR0MsTUFESCxDQUVLQyxVQUFELElBQ0VOLGVBQUEsQ0FBRU8sUUFBRixDQUFXVCxVQUFYLEVBQXVCUSxVQUF2QixLQUNDUixVQUFVLENBQUNVLE1BQVgsS0FBc0IsQ0FBdEIsSUFBMkJWLFVBQVUsQ0FBQyxDQUFELENBQVYsS0FBa0JXLDBCQUpwRCxFQU1HQyxHQU5ILENBTVFKLFVBQUQsSUFBZ0I7SUFDbkIsSUFBSTtNQUNGSyxlQUFBLENBQUlDLElBQUosQ0FBVSw2QkFBNEJOLFVBQVcsS0FBakQ7O01BQ0EsTUFBTU8sV0FBVyxHQUFHckIsWUFBWSxDQUFDc0IsT0FBYixDQUFxQlIsVUFBckIsQ0FBcEI7O01BQ0EsT0FBTyxDQUFDTyxXQUFELEVBQWNQLFVBQWQsQ0FBUDtJQUNELENBSkQsQ0FJRSxPQUFPUyxHQUFQLEVBQVk7TUFDWkosZUFBQSxDQUFJSyxLQUFKLENBQ0csMEJBQXlCVixVQUFXLHdDQUFyQyxHQUNHLDhCQUE2QlMsR0FBRyxDQUFDRSxPQUFRLEVBRjlDOztNQUlBTixlQUFBLENBQUlPLEtBQUosQ0FBVUgsR0FBRyxDQUFDSSxLQUFkO0lBQ0Q7RUFDRixDQWxCSCxDQURGLENBREssQ0FBUDtBQXVCRDs7QUFXTSxTQUFTQyxnQkFBVCxDQUEwQi9CLFlBQTFCLEVBQXdDZ0MsVUFBVSxHQUFHLEVBQXJELEVBQXlEO0VBQzlELE9BQU8sSUFBSXRCLEdBQUosQ0FDTEMsZUFBQSxDQUFFQyxPQUFGLENBQ0VDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZZCxZQUFZLENBQUNlLG1CQUF6QixFQUNHQyxNQURILENBQ1dpQixVQUFELElBQWdCdEIsZUFBQSxDQUFFTyxRQUFGLENBQVdjLFVBQVgsRUFBdUJDLFVBQXZCLEtBQXNDRCxVQUFVLENBQUNiLE1BQVgsS0FBc0IsQ0FEdEYsRUFFR0UsR0FGSCxDQUVRWSxVQUFELElBQWdCO0lBQ25CLElBQUk7TUFDRlgsZUFBQSxDQUFJQyxJQUFKLENBQVUsNkJBQTRCVSxVQUFXLEtBQWpEOztNQUNBLE1BQU1DLFdBQVcsR0FBR2xDLFlBQVksQ0FBQ3lCLE9BQWIsQ0FBcUJRLFVBQXJCLENBQXBCOztNQUNBLE9BQU8sQ0FBQ0MsV0FBRCxFQUFjRCxVQUFkLENBQVA7SUFDRCxDQUpELENBSUUsT0FBT1AsR0FBUCxFQUFZO01BQ1pKLGVBQUEsQ0FBSUssS0FBSixDQUNHLDBCQUF5Qk0sVUFBVyx3Q0FBckMsR0FDRyw4QkFBNkJQLEdBQUcsQ0FBQ0UsT0FBUSxFQUY5Qzs7TUFJQU4sZUFBQSxDQUFJTyxLQUFKLENBQVVILEdBQUcsQ0FBQ0ksS0FBZDtJQUNEO0VBQ0YsQ0FkSCxDQURGLENBREssQ0FBUDtBQW1CRCJ9
|
|
@@ -53,11 +53,9 @@ async function packageDidChange(appiumHome) {
|
|
|
53
53
|
|
|
54
54
|
if (isChanged) {
|
|
55
55
|
try {
|
|
56
|
-
var _oldHash;
|
|
57
|
-
|
|
58
56
|
writeHash();
|
|
59
57
|
|
|
60
|
-
_logger.default.debug(`Updated hash of ${appiumHome}/package.json from: ${
|
|
58
|
+
_logger.default.debug(`Updated hash of ${appiumHome}/package.json from: ${oldHash ?? '(none)'} to: ${hash}`);
|
|
61
59
|
} catch (err) {
|
|
62
60
|
throw new Error(`Appium could not write hash file: ${hashFilenameDir}. Original error: ${err.message}`);
|
|
63
61
|
}
|
|
@@ -65,4 +63,4 @@ async function packageDidChange(appiumHome) {
|
|
|
65
63
|
|
|
66
64
|
return isChanged;
|
|
67
65
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYWNrYWdlRGlkQ2hhbmdlIiwiYXBwaXVtSG9tZSIsImhhc2hGaWxlbmFtZSIsInBhdGgiLCJqb2luIiwiUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgiLCJpc0NoYW5nZWQiLCJ3cml0ZUhhc2giLCJoYXNoIiwib2xkSGFzaCIsImhhc2hGaWxlbmFtZURpciIsImRpcm5hbWUiLCJsb2ciLCJkZWJ1ZyIsImZzIiwibWtkaXJwIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwiaXNQYWNrYWdlQ2hhbmdlZCIsImN3ZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vcGFja2FnZS1jaGFuZ2VkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnN9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2lzUGFja2FnZUNoYW5nZWR9IGZyb20gJ3BhY2thZ2UtY2hhbmdlZCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7UEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBleHRlbnNpb25zIGhhdmUgY2hhbmdlZCwgYW5kIHVwZGF0ZXMgYSBoYXNoIHRoZSBgcGFja2FnZS5qc29uYCBpbiBgYXBwaXVtSG9tZWAgaWYgc28uXG4gKlxuICogSWYgdGhleSBoYXZlLCB3ZSBuZWVkIHRvIHN5bmMgdGhlbSB3aXRoIHRoZSBgZXh0ZW5zaW9ucy55YW1sYCBtYW5pZmVzdC5cbiAqXG4gKiBfV2FybmluZzogdGhpcyBtYWtlcyBhIGJsb2NraW5nIGNhbGwgdG8gYHdyaXRlRmlsZVN5bmNgLl9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gYHRydWVgIGlmIGBwYWNrYWdlLmpzb25gIGBhcHBpdW1Ib21lYCBjaGFuZ2VkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWNrYWdlRGlkQ2hhbmdlKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgaGFzaEZpbGVuYW1lID0gcGF0aC5qb2luKGFwcGl1bUhvbWUsIFBLR19IQVNIRklMRV9SRUxBVElWRV9QQVRIKTtcblxuICAvLyBYWFg6IHRoZSB0eXBlcyBpbiBgcGFja2FnZS1jaGFuZ2VkYCBzZWVtIHRvIGJlIHdyb25nLlxuXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGlzQ2hhbmdlZDtcbiAgLyoqIEB0eXBlIHsoKSA9PiB2b2lkfSAqL1xuICBsZXQgd3JpdGVIYXNoO1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgbGV0IGhhc2g7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi9cbiAgbGV0IG9sZEhhc2g7XG5cbiAgLy8gZmlyc3QgbWtkaXJwIHRoZSB0YXJnZXQgZGlyLlxuICBjb25zdCBoYXNoRmlsZW5hbWVEaXIgPSBwYXRoLmRpcm5hbWUoaGFzaEZpbGVuYW1lKTtcbiAgbG9nLmRlYnVnKGBDcmVhdGluZyBoYXNoIGZpbGUgZGlyZWN0b3J5OiAke2hhc2hGaWxlbmFtZURpcn1gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5ta2RpcnAoaGFzaEZpbGVuYW1lRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEFwcGl1bSBjb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgKHtpc0NoYW5nZWQsIHdyaXRlSGFzaCwgb2xkSGFzaCwgaGFzaH0gPSBhd2FpdCBpc1BhY2thZ2VDaGFuZ2VkKHtcbiAgICAgIGN3ZDogYXBwaXVtSG9tZSxcbiAgICAgIGhhc2hGaWxlbmFtZTogUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgsXG4gICAgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0cnkge1xuICAgICAgd3JpdGVIYXNoKCk7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBVcGRhdGVkIGhhc2ggb2YgJHthcHBpdW1Ib21lfS9wYWNrYWdlLmpzb24gZnJvbTogJHtvbGRIYXNoID8/
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYWNrYWdlRGlkQ2hhbmdlIiwiYXBwaXVtSG9tZSIsImhhc2hGaWxlbmFtZSIsInBhdGgiLCJqb2luIiwiUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgiLCJpc0NoYW5nZWQiLCJ3cml0ZUhhc2giLCJoYXNoIiwib2xkSGFzaCIsImhhc2hGaWxlbmFtZURpciIsImRpcm5hbWUiLCJsb2ciLCJkZWJ1ZyIsImZzIiwibWtkaXJwIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwiaXNQYWNrYWdlQ2hhbmdlZCIsImN3ZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vcGFja2FnZS1jaGFuZ2VkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnN9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2lzUGFja2FnZUNoYW5nZWR9IGZyb20gJ3BhY2thZ2UtY2hhbmdlZCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7UEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBleHRlbnNpb25zIGhhdmUgY2hhbmdlZCwgYW5kIHVwZGF0ZXMgYSBoYXNoIHRoZSBgcGFja2FnZS5qc29uYCBpbiBgYXBwaXVtSG9tZWAgaWYgc28uXG4gKlxuICogSWYgdGhleSBoYXZlLCB3ZSBuZWVkIHRvIHN5bmMgdGhlbSB3aXRoIHRoZSBgZXh0ZW5zaW9ucy55YW1sYCBtYW5pZmVzdC5cbiAqXG4gKiBfV2FybmluZzogdGhpcyBtYWtlcyBhIGJsb2NraW5nIGNhbGwgdG8gYHdyaXRlRmlsZVN5bmNgLl9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gYHRydWVgIGlmIGBwYWNrYWdlLmpzb25gIGBhcHBpdW1Ib21lYCBjaGFuZ2VkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWNrYWdlRGlkQ2hhbmdlKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgaGFzaEZpbGVuYW1lID0gcGF0aC5qb2luKGFwcGl1bUhvbWUsIFBLR19IQVNIRklMRV9SRUxBVElWRV9QQVRIKTtcblxuICAvLyBYWFg6IHRoZSB0eXBlcyBpbiBgcGFja2FnZS1jaGFuZ2VkYCBzZWVtIHRvIGJlIHdyb25nLlxuXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGlzQ2hhbmdlZDtcbiAgLyoqIEB0eXBlIHsoKSA9PiB2b2lkfSAqL1xuICBsZXQgd3JpdGVIYXNoO1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgbGV0IGhhc2g7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi9cbiAgbGV0IG9sZEhhc2g7XG5cbiAgLy8gZmlyc3QgbWtkaXJwIHRoZSB0YXJnZXQgZGlyLlxuICBjb25zdCBoYXNoRmlsZW5hbWVEaXIgPSBwYXRoLmRpcm5hbWUoaGFzaEZpbGVuYW1lKTtcbiAgbG9nLmRlYnVnKGBDcmVhdGluZyBoYXNoIGZpbGUgZGlyZWN0b3J5OiAke2hhc2hGaWxlbmFtZURpcn1gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5ta2RpcnAoaGFzaEZpbGVuYW1lRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEFwcGl1bSBjb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgKHtpc0NoYW5nZWQsIHdyaXRlSGFzaCwgb2xkSGFzaCwgaGFzaH0gPSBhd2FpdCBpc1BhY2thZ2VDaGFuZ2VkKHtcbiAgICAgIGN3ZDogYXBwaXVtSG9tZSxcbiAgICAgIGhhc2hGaWxlbmFtZTogUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgsXG4gICAgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0cnkge1xuICAgICAgd3JpdGVIYXNoKCk7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBVcGRhdGVkIGhhc2ggb2YgJHthcHBpdW1Ib21lfS9wYWNrYWdlLmpzb24gZnJvbTogJHtvbGRIYXNoID8/ICcobm9uZSknfSB0bzogJHtoYXNofWBcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcHBpdW0gY291bGQgbm90IHdyaXRlIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NoYW5nZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBV08sZUFBZUEsZ0JBQWYsQ0FBZ0NDLFVBQWhDLEVBQTRDO0VBQ2pELE1BQU1DLFlBQVksR0FBR0MsYUFBQSxDQUFLQyxJQUFMLENBQVVILFVBQVYsRUFBc0JJLHFDQUF0QixDQUFyQjs7RUFLQSxJQUFJQyxTQUFKO0VBRUEsSUFBSUMsU0FBSjtFQUVBLElBQUlDLElBQUo7RUFFQSxJQUFJQyxPQUFKOztFQUdBLE1BQU1DLGVBQWUsR0FBR1AsYUFBQSxDQUFLUSxPQUFMLENBQWFULFlBQWIsQ0FBeEI7O0VBQ0FVLGVBQUEsQ0FBSUMsS0FBSixDQUFXLGlDQUFnQ0gsZUFBZ0IsRUFBM0Q7O0VBQ0EsSUFBSTtJQUNGLE1BQU1JLFdBQUEsQ0FBR0MsTUFBSCxDQUFVTCxlQUFWLENBQU47RUFDRCxDQUZELENBRUUsT0FBT00sR0FBUCxFQUFZO0lBQ1osTUFBTSxJQUFJQyxLQUFKLENBQ0gsd0RBQXVEUCxlQUFnQixxQkFBb0JNLEdBQUcsQ0FBQ0UsT0FBUSxFQURwRyxDQUFOO0VBR0Q7O0VBRUQsSUFBSTtJQUNGLENBQUM7TUFBQ1osU0FBRDtNQUFZQyxTQUFaO01BQXVCRSxPQUF2QjtNQUFnQ0Q7SUFBaEMsSUFBd0MsTUFBTSxJQUFBVyxnQ0FBQSxFQUFpQjtNQUM5REMsR0FBRyxFQUFFbkIsVUFEeUQ7TUFFOURDLFlBQVksRUFBRUc7SUFGZ0QsQ0FBakIsQ0FBL0M7RUFJRCxDQUxELENBS0UsTUFBTTtJQUNOLE9BQU8sSUFBUDtFQUNEOztFQUVELElBQUlDLFNBQUosRUFBZTtJQUNiLElBQUk7TUFDRkMsU0FBUzs7TUFDVEssZUFBQSxDQUFJQyxLQUFKLENBQ0csbUJBQWtCWixVQUFXLHVCQUFzQlEsT0FBTyxJQUFJLFFBQVMsUUFBT0QsSUFBSyxFQUR0RjtJQUdELENBTEQsQ0FLRSxPQUFPUSxHQUFQLEVBQVk7TUFDWixNQUFNLElBQUlDLEtBQUosQ0FDSCxxQ0FBb0NQLGVBQWdCLHFCQUFvQk0sR0FBRyxDQUFDRSxPQUFRLEVBRGpGLENBQU47SUFHRDtFQUNGOztFQUVELE9BQU9aLFNBQVA7QUFDRCJ9
|
package/build/lib/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../lib/main.js"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../lib/main.js"],"names":[],"mappings":";;yBAyYa,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;0BAClC,OAAO,eAAe,EAAE,WAAW;0BACnC,OAAO,eAAe,EAAE,WAAW;mCACnC,OAAO,cAAc,EAAE,oBAAoB;4BAC3C,OAAO,aAAa,EAAE,aAAa;4BACnC,OAAO,aAAa,EAAE,aAAa;;;;mCAKlC,EAAE;;;;;kBAKF,OAAO,UAAU,EAAE,YAAY;;;;gBAC/B,OAAO,cAAc,EAAE,UAAU;;+BAIlC,cAAc,GAAG,OAAO,aAAa,EAAE,gBAAgB;oEAKvD,OAAO,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;0EAK9B,OAAO,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;AAnJjD;;;;;;GAMG;AACH,mGAFa,QAAQ,OAAO,eAAe,EAAE,YAAY,GAAC,SAAS,CAAC,CAgGnE;AA/ND;;;;;;;;;;;;;;;GAeG;AACH,mGAPa,QAAQ,gBAAgB,GAAG,oBAAoB,CAAC,CA+G5D"}
|
package/build/lib/main.js
CHANGED
|
@@ -76,6 +76,7 @@ exports.resolveAppiumHome = resolveAppiumHome;
|
|
|
76
76
|
async function preflightChecks(args, throwInsteadOfExit = false) {
|
|
77
77
|
try {
|
|
78
78
|
(0, _config.checkNodeOk)();
|
|
79
|
+
await (0, _config.checkNpmOk)();
|
|
79
80
|
|
|
80
81
|
if (args.longStacktrace) {
|
|
81
82
|
require('longjohn').async_trace_limit = -1;
|
|
@@ -147,13 +148,9 @@ function getServerUpdaters(driverClasses, pluginClasses) {
|
|
|
147
148
|
}
|
|
148
149
|
|
|
149
150
|
function getExtraMethodMap(driverClasses, pluginClasses) {
|
|
150
|
-
return [...driverClasses.keys(), ...pluginClasses.keys()].reduce((map, klass) => {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return { ...map,
|
|
154
|
-
...((_klass$newMethodMap = klass.newMethodMap) !== null && _klass$newMethodMap !== void 0 ? _klass$newMethodMap : {})
|
|
155
|
-
};
|
|
156
|
-
}, {});
|
|
151
|
+
return [...driverClasses.keys(), ...pluginClasses.keys()].reduce((map, klass) => ({ ...map,
|
|
152
|
+
...(klass.newMethodMap ?? {})
|
|
153
|
+
}), {});
|
|
157
154
|
}
|
|
158
155
|
|
|
159
156
|
function areServerCommandArgs(args) {
|
|
@@ -161,9 +158,7 @@ function areServerCommandArgs(args) {
|
|
|
161
158
|
}
|
|
162
159
|
|
|
163
160
|
async function init(args) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const appiumHome = (_args$appiumHome = args === null || args === void 0 ? void 0 : args.appiumHome) !== null && _args$appiumHome !== void 0 ? _args$appiumHome : await resolveAppiumHome();
|
|
161
|
+
const appiumHome = (args === null || args === void 0 ? void 0 : args.appiumHome) ?? (await resolveAppiumHome());
|
|
167
162
|
const {
|
|
168
163
|
driverConfig,
|
|
169
164
|
pluginConfig
|
|
@@ -173,15 +168,13 @@ async function init(args) {
|
|
|
173
168
|
let preConfigArgs;
|
|
174
169
|
|
|
175
170
|
if (args) {
|
|
176
|
-
var _args$subcommand;
|
|
177
|
-
|
|
178
171
|
if (args.throwInsteadOfExit) {
|
|
179
172
|
throwInsteadOfExit = true;
|
|
180
173
|
delete args.throwInsteadOfExit;
|
|
181
174
|
}
|
|
182
175
|
|
|
183
176
|
preConfigArgs = { ...args,
|
|
184
|
-
subcommand:
|
|
177
|
+
subcommand: args.subcommand ?? _constants.SERVER_SUBCOMMAND
|
|
185
178
|
};
|
|
186
179
|
} else {
|
|
187
180
|
preConfigArgs = parser.parseArgs();
|
|
@@ -190,24 +183,10 @@ async function init(args) {
|
|
|
190
183
|
const configResult = await (0, _configFile.readConfigFile)(preConfigArgs.configFile);
|
|
191
184
|
|
|
192
185
|
if (!_lodash.default.isEmpty(configResult.errors)) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
throw new Error(`Errors in config file ${configResult.filepath}:\n ${(_configResult$reason = configResult.reason) !== null && _configResult$reason !== void 0 ? _configResult$reason : configResult.errors}`);
|
|
186
|
+
throw new Error(`Errors in config file ${configResult.filepath}:\n ${configResult.reason ?? configResult.errors}`);
|
|
196
187
|
}
|
|
197
188
|
|
|
198
|
-
if (
|
|
199
|
-
if (preConfigArgs.subcommand === _constants.DRIVER_TYPE) {
|
|
200
|
-
await (0, _extension.runExtensionCommand)(preConfigArgs, driverConfig);
|
|
201
|
-
return {};
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (preConfigArgs.subcommand === _constants.PLUGIN_TYPE) {
|
|
205
|
-
await (0, _extension.runExtensionCommand)(preConfigArgs, pluginConfig);
|
|
206
|
-
return {};
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
return {};
|
|
210
|
-
} else {
|
|
189
|
+
if (areServerCommandArgs(preConfigArgs)) {
|
|
211
190
|
var _configResult$config;
|
|
212
191
|
|
|
213
192
|
const defaults = (0, _schema.getDefaultsForSchema)(false);
|
|
@@ -247,6 +226,20 @@ async function init(args) {
|
|
|
247
226
|
driverConfig,
|
|
248
227
|
pluginConfig
|
|
249
228
|
};
|
|
229
|
+
} else {
|
|
230
|
+
const extensionCommandArgs = preConfigArgs;
|
|
231
|
+
|
|
232
|
+
if (preConfigArgs.subcommand === _constants.DRIVER_TYPE) {
|
|
233
|
+
await (0, _extension.runExtensionCommand)(extensionCommandArgs, driverConfig);
|
|
234
|
+
return {};
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (preConfigArgs.subcommand === _constants.PLUGIN_TYPE) {
|
|
238
|
+
await (0, _extension.runExtensionCommand)(extensionCommandArgs, pluginConfig);
|
|
239
|
+
return {};
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return {};
|
|
250
243
|
}
|
|
251
244
|
}
|
|
252
245
|
|
|
@@ -276,7 +269,8 @@ async function main(args) {
|
|
|
276
269
|
allowCors: parsedArgs.allowCors,
|
|
277
270
|
basePath: parsedArgs.basePath,
|
|
278
271
|
serverUpdaters,
|
|
279
|
-
extraMethodMap
|
|
272
|
+
extraMethodMap,
|
|
273
|
+
cliArgs: parsedArgs
|
|
280
274
|
};
|
|
281
275
|
|
|
282
276
|
if (parsedArgs.keepAliveTimeout) {
|
|
@@ -338,4 +332,4 @@ async function main(args) {
|
|
|
338
332
|
if (require.main === module) {
|
|
339
333
|
(0, _asyncbox.asyncify)(main);
|
|
340
334
|
}
|
|
341
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvbHZlQXBwaXVtSG9tZSIsImVudiIsInByZWZsaWdodENoZWNrcyIsImFyZ3MiLCJ0aHJvd0luc3RlYWRPZkV4aXQiLCJjaGVja05vZGVPayIsImxvbmdTdGFja3RyYWNlIiwicmVxdWlyZSIsImFzeW5jX3RyYWNlX2xpbWl0Iiwic2hvd0J1aWxkSW5mbyIsInByb2Nlc3MiLCJleGl0Iiwid2Fybk5vZGVEZXByZWNhdGlvbnMiLCJ2YWxpZGF0ZSIsInRtcERpciIsInZhbGlkYXRlVG1wRGlyIiwiZXJyIiwibG9nZ2VyIiwiZXJyb3IiLCJtZXNzYWdlIiwicmVkIiwibG9nTm9uRGVmYXVsdEFyZ3NXYXJuaW5nIiwiaW5mbyIsImluc3BlY3QiLCJsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyIsImNhcHMiLCJsb2dTdGFydHVwSW5mbyIsIndlbGNvbWUiLCJBUFBJVU1fVkVSIiwiYXBwaXVtUmV2IiwiZ2V0R2l0UmV2Iiwic2hvd0FyZ3MiLCJnZXROb25EZWZhdWx0U2VydmVyQXJncyIsIl8iLCJzaXplIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJsb2dTZXJ2ZXJQb3J0IiwiYWRkcmVzcyIsInBvcnQiLCJsb2dNZXNzYWdlIiwiZ2V0U2VydmVyVXBkYXRlcnMiLCJkcml2ZXJDbGFzc2VzIiwicGx1Z2luQ2xhc3NlcyIsImNvbXBhY3QiLCJtYXAiLCJrZXlzIiwiZ2V0RXh0cmFNZXRob2RNYXAiLCJyZWR1Y2UiLCJrbGFzcyIsIm5ld01ldGhvZE1hcCIsImFyZVNlcnZlckNvbW1hbmRBcmdzIiwic3ViY29tbWFuZCIsIlNFUlZFUl9TVUJDT01NQU5EIiwiaW5pdCIsImFwcGl1bUhvbWUiLCJkcml2ZXJDb25maWciLCJwbHVnaW5Db25maWciLCJsb2FkRXh0ZW5zaW9ucyIsInBhcnNlciIsImdldFBhcnNlciIsInByZUNvbmZpZ0FyZ3MiLCJwYXJzZUFyZ3MiLCJjb25maWdSZXN1bHQiLCJyZWFkQ29uZmlnRmlsZSIsImNvbmZpZ0ZpbGUiLCJlcnJvcnMiLCJFcnJvciIsImZpbGVwYXRoIiwicmVhc29uIiwiRFJJVkVSX1RZUEUiLCJydW5FeHRlbnNpb25Db21tYW5kIiwiUExVR0lOX1RZUEUiLCJkZWZhdWx0cyIsImdldERlZmF1bHRzRm9yU2NoZW1hIiwic2VydmVyQXJncyIsImRlZmF1bHRzRGVlcCIsImNvbmZpZyIsInNlcnZlciIsInNob3dDb25maWciLCJsb2dzaW5rSW5pdCIsImxvZ0ZpbHRlcnMiLCJpc3N1ZXMiLCJydWxlcyIsImxvZ0ZhY3RvcnkiLCJsb2FkU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc2luZ1J1bGVzIiwiSlNPTiIsInN0cmluZ2lmeSIsIndhcm4iLCJ1dGlsIiwicGx1cmFsaXplIiwibGVuZ3RoIiwiYXBwaXVtRHJpdmVyIiwiQXBwaXVtRHJpdmVyIiwicGFyc2VkQXJncyIsIm1haW4iLCJnZXRBY3RpdmVQbHVnaW5zIiwidXNlUGx1Z2lucyIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsIm1ha2VSb3V0ZXIiLCJnZXRBY3RpdmVEcml2ZXJzIiwidXNlRHJpdmVycyIsInNlcnZlclVwZGF0ZXJzIiwiZXh0cmFNZXRob2RNYXAiLCJzZXJ2ZXJPcHRzIiwiaG9zdG5hbWUiLCJhbGxvd0NvcnMiLCJiYXNlUGF0aCIsImtlZXBBbGl2ZVRpbWVvdXQiLCJiYXNlU2VydmVyIiwiZGVidWciLCJzdGFjayIsIm5vZGVjb25maWciLCJyZWdpc3Rlck5vZGUiLCJjbG9zZSIsInNpZ25hbCIsIm9uY2UiLCJvblNpZ25hbCIsImRlbGV0ZUFsbFNlc3Npb25zIiwiZm9yY2UiLCJlIiwicHJpbnQiLCJ2YWx1ZXMiLCJtb2R1bGUiLCJhc3luY2lmeSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9tYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHtpbml0IGFzIGxvZ3NpbmtJbml0fSBmcm9tICcuL2xvZ3NpbmsnOyAvLyB0aGlzIGltcG9ydCBuZWVkcyB0byBjb21lIGZpcnN0IHNpbmNlIGl0IHNldHMgdXAgZ2xvYmFsIG5wbWxvZ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7IC8vIGxvZ2dlciBuZWVkcyB0byByZW1haW4gc2Vjb25kXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQge3JvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiBhcyBtYWtlUm91dGVyLCBzZXJ2ZXIgYXMgYmFzZVNlcnZlcn0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQge2xvZ2dlciBhcyBsb2dGYWN0b3J5LCB1dGlsLCBlbnZ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2FzeW5jaWZ5fSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtBcHBpdW1Ecml2ZXJ9IGZyb20gJy4vYXBwaXVtJztcbmltcG9ydCB7cnVuRXh0ZW5zaW9uQ29tbWFuZH0gZnJvbSAnLi9jbGkvZXh0ZW5zaW9uJztcbmltcG9ydCB7Z2V0UGFyc2VyfSBmcm9tICcuL2NsaS9wYXJzZXInO1xuaW1wb3J0IHtcbiAgQVBQSVVNX1ZFUixcbiAgY2hlY2tOb2RlT2ssXG4gIGdldEdpdFJldixcbiAgZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MsXG4gIHNob3dDb25maWcsXG4gIHNob3dCdWlsZEluZm8sXG4gIHZhbGlkYXRlVG1wRGlyLFxuICB3YXJuTm9kZURlcHJlY2F0aW9ucyxcbn0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtyZWFkQ29uZmlnRmlsZX0gZnJvbSAnLi9jb25maWctZmlsZSc7XG5pbXBvcnQge2xvYWRFeHRlbnNpb25zLCBnZXRBY3RpdmVQbHVnaW5zLCBnZXRBY3RpdmVEcml2ZXJzfSBmcm9tICcuL2V4dGVuc2lvbic7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSwgU0VSVkVSX1NVQkNPTU1BTkR9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCByZWdpc3Rlck5vZGUgZnJvbSAnLi9ncmlkLXJlZ2lzdGVyJztcbmltcG9ydCB7Z2V0RGVmYXVsdHNGb3JTY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuaW1wb3J0IHtpbnNwZWN0fSBmcm9tICcuL3V0aWxzJztcblxuY29uc3Qge3Jlc29sdmVBcHBpdW1Ib21lfSA9IGVudjtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtQYXJzZWRBcmdzfSBhcmdzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd0luc3RlYWRPZkV4aXRdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodENoZWNrcyhhcmdzLCB0aHJvd0luc3RlYWRPZkV4aXQgPSBmYWxzZSkge1xuICB0cnkge1xuICAgIGNoZWNrTm9kZU9rKCk7XG4gICAgaWYgKGFyZ3MubG9uZ1N0YWNrdHJhY2UpIHtcbiAgICAgIHJlcXVpcmUoJ2xvbmdqb2huJykuYXN5bmNfdHJhY2VfbGltaXQgPSAtMTtcbiAgICB9XG4gICAgaWYgKGFyZ3Muc2hvd0J1aWxkSW5mbykge1xuICAgICAgYXdhaXQgc2hvd0J1aWxkSW5mbygpO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cbiAgICB3YXJuTm9kZURlcHJlY2F0aW9ucygpO1xuXG4gICAgdmFsaWRhdGUoYXJncyk7XG5cbiAgICBpZiAoYXJncy50bXBEaXIpIHtcbiAgICAgIGF3YWl0IHZhbGlkYXRlVG1wRGlyKGFyZ3MudG1wRGlyKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZS5yZWQpO1xuICAgIGlmICh0aHJvd0luc3RlYWRPZkV4aXQpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FyZ3N9IGFyZ3NcbiAqL1xuZnVuY3Rpb24gbG9nTm9uRGVmYXVsdEFyZ3NXYXJuaW5nKGFyZ3MpIHtcbiAgbG9nZ2VyLmluZm8oJ05vbi1kZWZhdWx0IHNlcnZlciBhcmdzOicpO1xuICBpbnNwZWN0KGFyZ3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJnc1snZGVmYXVsdENhcGFiaWxpdGllcyddfSBjYXBzXG4gKi9cbmZ1bmN0aW9uIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nKGNhcHMpIHtcbiAgbG9nZ2VyLmluZm8oXG4gICAgJ0RlZmF1bHQgY2FwYWJpbGl0aWVzLCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIGVhY2ggcmVxdWVzdCAnICtcbiAgICAgICd1bmxlc3Mgb3ZlcnJpZGRlbiBieSBkZXNpcmVkIGNhcGFiaWxpdGllczonXG4gICk7XG4gIGluc3BlY3QoY2Fwcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtQYXJzZWRBcmdzfSBhcmdzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvZ1N0YXJ0dXBJbmZvKGFyZ3MpIHtcbiAgbGV0IHdlbGNvbWUgPSBgV2VsY29tZSB0byBBcHBpdW0gdiR7QVBQSVVNX1ZFUn1gO1xuICBsZXQgYXBwaXVtUmV2ID0gYXdhaXQgZ2V0R2l0UmV2KCk7XG4gIGlmIChhcHBpdW1SZXYpIHtcbiAgICB3ZWxjb21lICs9IGAgKFJFViAke2FwcGl1bVJldn0pYDtcbiAgfVxuICBsb2dnZXIuaW5mbyh3ZWxjb21lKTtcblxuICBsZXQgc2hvd0FyZ3MgPSBnZXROb25EZWZhdWx0U2VydmVyQXJncyhhcmdzKTtcbiAgaWYgKF8uc2l6ZShzaG93QXJncykpIHtcbiAgICBsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmcoc2hvd0FyZ3MpO1xuICB9XG4gIGlmICghXy5pc0VtcHR5KGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyhhcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICB9XG4gIC8vIFRPRE86IGJyaW5nIGJhY2sgbG9nbGV2ZWwgcmVwb3J0aW5nIGJlbG93IG9uY2UgbG9nZ2VyIGlzIGZsdXNoZWQgb3V0XG4gIC8vIGxvZ2dlci5pbmZvKCdDb25zb2xlIExvZ0xldmVsOiAnICsgbG9nZ2VyLnRyYW5zcG9ydHMuY29uc29sZS5sZXZlbCk7XG4gIC8vIGlmIChsb2dnZXIudHJhbnNwb3J0cy5maWxlKSB7XG4gIC8vICAgbG9nZ2VyLmluZm8oJ0ZpbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5maWxlLmxldmVsKTtcbiAgLy8gfVxufVxuXG4vKipcbiAqIExvZ3MgdGhlIGFkZHJlc3MgYW5kIHBvcnQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gQWRkcmVzc1xuICogQHBhcmFtIHtudW1iZXJ9IHBvcnQgLSBQb3J0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gbG9nU2VydmVyUG9ydChhZGRyZXNzLCBwb3J0KSB7XG4gIGxldCBsb2dNZXNzYWdlID0gYEFwcGl1bSBSRVNUIGh0dHAgaW50ZXJmYWNlIGxpc3RlbmVyIHN0YXJ0ZWQgb24gYCArIGAke2FkZHJlc3N9OiR7cG9ydH1gO1xuICBsb2dnZXIuaW5mbyhsb2dNZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGlzdCBvZiBgdXBkYXRlU2VydmVyYCBmdW5jdGlvbnMgZnJvbSBhbGwgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHtEcml2ZXJOYW1lTWFwfSBkcml2ZXJDbGFzc2VzXG4gKiBAcGFyYW0ge1BsdWdpbk5hbWVNYXB9IHBsdWdpbkNsYXNzZXNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5VcGRhdGVTZXJ2ZXJDYWxsYmFja1tdfVxuICovXG5mdW5jdGlvbiBnZXRTZXJ2ZXJVcGRhdGVycyhkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKSB7XG4gIHJldHVybiBfLmNvbXBhY3QoXy5tYXAoWy4uLmRyaXZlckNsYXNzZXMua2V5cygpLCAuLi5wbHVnaW5DbGFzc2VzLmtleXMoKV0sICd1cGRhdGVTZXJ2ZXInKSk7XG59XG5cbi8qKlxuICogTWFrZXMgYSBiaWcgYE1ldGhvZE1hcGAgZnJvbSBhbGwgdGhlIGxpdHRsZSBgTWV0aG9kTWFwYHMgaW4gdGhlIGV4dGVuc2lvbnNcbiAqIEBwYXJhbSB7RHJpdmVyTmFtZU1hcH0gZHJpdmVyQ2xhc3Nlc1xuICogQHBhcmFtIHtQbHVnaW5OYW1lTWFwfSBwbHVnaW5DbGFzc2VzXG4gKiBAcmV0dXJucyB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTWV0aG9kTWFwfVxuICovXG5mdW5jdGlvbiBnZXRFeHRyYU1ldGhvZE1hcChkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKSB7XG4gIHJldHVybiBbLi4uZHJpdmVyQ2xhc3Nlcy5rZXlzKCksIC4uLnBsdWdpbkNsYXNzZXMua2V5cygpXS5yZWR1Y2UoXG4gICAgKG1hcCwga2xhc3MpID0+ICh7XG4gICAgICAuLi5tYXAsXG4gICAgICAuLi4oa2xhc3MubmV3TWV0aG9kTWFwID8/IHt9KSxcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG4vKipcbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEBwYXJhbSB7QXJnczxUPn0gYXJnc1xuICogQHJldHVybnMge2FyZ3MgaXMgQXJnczxXaXRoU2VydmVyU3ViY29tbWFuZD59XG4gKi9cbmZ1bmN0aW9uIGFyZVNlcnZlckNvbW1hbmRBcmdzKGFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3Muc3ViY29tbWFuZCA9PT0gU0VSVkVSX1NVQkNPTU1BTkQ7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgQXBwaXVtLCBidXQgZG9lcyBub3Qgc3RhcnQgdGhlIHNlcnZlci5cbiAqXG4gKiBVc2UgdGhpcyB0byBnZXQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2NoZW1hLlxuICpcbiAqIElmIGBhcmdzYCBjb250YWlucyBhIG5vbi1lbXB0eSBgc3ViY29tbWFuZGAgd2hpY2ggaXMgbm90IGBzZXJ2ZXJgLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAdGVtcGxhdGUgW1Q9V2l0aFNlcnZlclN1YmNvbW1hbmRdXG4gKiBAcGFyYW0ge0FyZ3M8VD59IFthcmdzXSAtIFBhcnRpYWwgYXJncyAocHJvZ2FtbWF0aWMgdXNhZ2Ugb25seSlcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlcnZlckluaXRSZXN1bHQgfCBFeHRDb21tYW5kSW5pdFJlc3VsdD59XG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtpbml0LCBnZXRTY2hlbWF9IGZyb20gJ2FwcGl1bSc7XG4gKiBjb25zdCBvcHRpb25zID0ge307IC8vIGNvbmZpZyBvYmplY3RcbiAqIGF3YWl0IGluaXQob3B0aW9ucyk7XG4gKiBjb25zdCBzY2hlbWEgPSBnZXRTY2hlbWEoKTsgLy8gZW50aXJlIGNvbmZpZyBzY2hlbWEgaW5jbHVkaW5nIHBsdWdpbnMgYW5kIGRyaXZlcnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdChhcmdzKSB7XG4gIGNvbnN0IGFwcGl1bUhvbWUgPSBhcmdzPy5hcHBpdW1Ib21lID8/IChhd2FpdCByZXNvbHZlQXBwaXVtSG9tZSgpKTtcblxuICBjb25zdCB7ZHJpdmVyQ29uZmlnLCBwbHVnaW5Db25maWd9ID0gYXdhaXQgbG9hZEV4dGVuc2lvbnMoYXBwaXVtSG9tZSk7XG5cbiAgY29uc3QgcGFyc2VyID0gZ2V0UGFyc2VyKCk7XG4gIGxldCB0aHJvd0luc3RlYWRPZkV4aXQgPSBmYWxzZTtcbiAgLyoqIEB0eXBlIHtBcmdzPFQ+fSAqL1xuICBsZXQgcHJlQ29uZmlnQXJncztcblxuICBpZiAoYXJncykge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBjb250YWluaW5nIHBhY2thZ2UgaW5zdGVhZCBvZiBydW5uaW5nIGFzIGEgQ0xJIHByb2Nlc3MsXG4gICAgLy8gdGhhdCBwYWNrYWdlIG1pZ2h0IG5vdCBhcHByZWNpYXRlIHVzIGNhbGxpbmcgJ3Byb2Nlc3MuZXhpdCcgd2lsbHktXG4gICAgLy8gbmlsbHksIHNvIGdpdmUgaXQgdGhlIG9wdGlvbiB0byBoYXZlIHVzIHRocm93IGluc3RlYWQgb2YgZXhpdFxuICAgIGlmIChhcmdzLnRocm93SW5zdGVhZE9mRXhpdCkge1xuICAgICAgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gdHJ1ZTtcbiAgICAgIC8vIGJ1dCByZW1vdmUgaXQgc2luY2UgaXQncyBub3QgYSByZWFsIHNlcnZlciBhcmcgcGVyIHNlXG4gICAgICBkZWxldGUgYXJncy50aHJvd0luc3RlYWRPZkV4aXQ7XG4gICAgfVxuICAgIHByZUNvbmZpZ0FyZ3MgPSB7Li4uYXJncywgc3ViY29tbWFuZDogYXJncy5zdWJjb21tYW5kID8/IFNFUlZFUl9TVUJDT01NQU5EfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UgcGFyc2UgZnJvbSBDTElcbiAgICBwcmVDb25maWdBcmdzID0gLyoqIEB0eXBlIHtBcmdzPFQ+fSAqLyAocGFyc2VyLnBhcnNlQXJncygpKTtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IGF3YWl0IHJlYWRDb25maWdGaWxlKHByZUNvbmZpZ0FyZ3MuY29uZmlnRmlsZSk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoY29uZmlnUmVzdWx0LmVycm9ycykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXJyb3JzIGluIGNvbmZpZyBmaWxlICR7Y29uZmlnUmVzdWx0LmZpbGVwYXRofTpcXG4gJHtcbiAgICAgICAgY29uZmlnUmVzdWx0LnJlYXNvbiA/PyBjb25maWdSZXN1bHQuZXJyb3JzXG4gICAgICB9YFxuICAgICk7XG4gIH1cblxuICAvLyBtZXJnZSBjb25maWcgYW5kIGFwcGx5IGRlZmF1bHRzLlxuICAvLyB0aGUgb3JkZXIgb2YgcHJlY2VuZGVjZSBpczpcbiAgLy8gMS4gY29tbWFuZCBsaW5lIGFyZ3NcbiAgLy8gMi4gY29uZmlnIGZpbGVcbiAgLy8gMy4gZGVmYXVsdHMgZnJvbSBjb25maWcgZmlsZS5cbiAgaWYgKCFhcmVTZXJ2ZXJDb21tYW5kQXJncyhwcmVDb25maWdBcmdzKSkge1xuICAgIC8vIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhlICdkcml2ZXInIENMSSwgZG9uJ3QgcnVuIHRoZSBub3JtYWwgc2VydmVyLFxuICAgIC8vIGJ1dCBpbnN0ZWFkIHBhc3MgY29udHJvbCB0byB0aGUgZHJpdmVyIENMSVxuICAgIGlmIChwcmVDb25maWdBcmdzLnN1YmNvbW1hbmQgPT09IERSSVZFUl9UWVBFKSB7XG4gICAgICBhd2FpdCBydW5FeHRlbnNpb25Db21tYW5kKHByZUNvbmZpZ0FyZ3MsIGRyaXZlckNvbmZpZyk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChwcmVDb25maWdBcmdzLnN1YmNvbW1hbmQgPT09IFBMVUdJTl9UWVBFKSB7XG4gICAgICBhd2FpdCBydW5FeHRlbnNpb25Db21tYW5kKHByZUNvbmZpZ0FyZ3MsIHBsdWdpbkNvbmZpZyk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHt9OyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSBnZXREZWZhdWx0c0ZvclNjaGVtYShmYWxzZSk7XG5cbiAgICAvKiogQHR5cGUge1BhcnNlZEFyZ3N9ICovXG4gICAgY29uc3Qgc2VydmVyQXJncyA9IF8uZGVmYXVsdHNEZWVwKHByZUNvbmZpZ0FyZ3MsIGNvbmZpZ1Jlc3VsdC5jb25maWc/LnNlcnZlciwgZGVmYXVsdHMpO1xuXG4gICAgaWYgKHByZUNvbmZpZ0FyZ3Muc2hvd0NvbmZpZykge1xuICAgICAgc2hvd0NvbmZpZyhnZXROb25EZWZhdWx0U2VydmVyQXJncyhwcmVDb25maWdBcmdzKSwgY29uZmlnUmVzdWx0LCBkZWZhdWx0cywgc2VydmVyQXJncyk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgYXdhaXQgbG9nc2lua0luaXQoc2VydmVyQXJncyk7XG5cbiAgICBpZiAoc2VydmVyQXJncy5sb2dGaWx0ZXJzKSB7XG4gICAgICBjb25zdCB7aXNzdWVzLCBydWxlc30gPSBhd2FpdCBsb2dGYWN0b3J5LmxvYWRTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzaW5nUnVsZXMoXG4gICAgICAgIHNlcnZlckFyZ3MubG9nRmlsdGVyc1xuICAgICAgKTtcbiAgICAgIGlmICghXy5pc0VtcHR5KGlzc3VlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgbG9nIGZpbHRlcmluZyBydWxlcyBjb25maWcgJyR7c2VydmVyQXJncy5sb2dGaWx0ZXJzfScgaGFzIGlzc3VlczogYCArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShpc3N1ZXMsIG51bGwsIDIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc0VtcHR5KHJ1bGVzKSkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgRm91bmQgbm8gbG9nIGZpbHRlcmluZyBydWxlcyBpbiAnJHtzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnN9Jy4gSXMgdGhhdCBleHBlY3RlZD9gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICBgTG9hZGVkICR7dXRpbC5wbHVyYWxpemUoJ2ZpbHRlcmluZyBydWxlJywgcnVsZXMubGVuZ3RoLCB0cnVlKX0gZnJvbSAnJHtcbiAgICAgICAgICAgIHNlcnZlckFyZ3MubG9nRmlsdGVyc1xuICAgICAgICAgIH0nYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFwcGl1bURyaXZlciA9IG5ldyBBcHBpdW1Ecml2ZXIoc2VydmVyQXJncyk7XG4gICAgLy8gc2V0IHRoZSBjb25maWcgb24gdGhlIHVtYnJlbGxhIGRyaXZlciBzbyBpdCBjYW4gbWF0Y2ggZHJpdmVycyB0byBjYXBzXG4gICAgYXBwaXVtRHJpdmVyLmRyaXZlckNvbmZpZyA9IGRyaXZlckNvbmZpZztcbiAgICBhd2FpdCBwcmVmbGlnaHRDaGVja3Moc2VydmVyQXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0KTtcblxuICAgIHJldHVybiAvKiogQHR5cGUge1NlcnZlckluaXRSZXN1bHR9ICovICh7XG4gICAgICBhcHBpdW1Ecml2ZXIsXG4gICAgICBwYXJzZWRBcmdzOiBzZXJ2ZXJBcmdzLFxuICAgICAgZHJpdmVyQ29uZmlnLFxuICAgICAgcGx1Z2luQ29uZmlnLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgQXBwaXVtJ3MgY29uZmlnLiAgU3RhcnRzIHNlcnZlciBpZiBhcHByb3ByaWF0ZSBhbmQgcmVzb2x2ZXMgdGhlXG4gKiBzZXJ2ZXIgaW5zdGFuY2UgaWYgc287IG90aGVyd2lzZSByZXNvbHZlcyB3LyBgdW5kZWZpbmVkYC5cbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEBwYXJhbSB7QXJnczxUPn0gW2FyZ3NdIC0gQXJndW1lbnRzIGZyb20gQ0xJIG9yIG90aGVyd2lzZVxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtU2VydmVyfHVuZGVmaW5lZD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1haW4oYXJncykge1xuICBjb25zdCB7YXBwaXVtRHJpdmVyLCBwYXJzZWRBcmdzLCBwbHVnaW5Db25maWcsIGRyaXZlckNvbmZpZ30gPSAvKiogQHR5cGUge1NlcnZlckluaXRSZXN1bHR9ICovIChcbiAgICBhd2FpdCBpbml0KGFyZ3MpXG4gICk7XG5cbiAgaWYgKCFhcHBpdW1Ecml2ZXIgfHwgIXBhcnNlZEFyZ3MgfHwgIXBsdWdpbkNvbmZpZyB8fCAhZHJpdmVyQ29uZmlnKSB7XG4gICAgLy8gaWYgdGhpcyBicmFuY2ggaXMgdGFrZW4sIHdlJ3ZlIHJ1biBhIGRpZmZlcmVudCBzdWJjb21tYW5kLCBzbyB0aGVyZSdzIG5vdGhpbmdcbiAgICAvLyBsZWZ0IHRvIGRvIGhlcmUuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGx1Z2luQ2xhc3NlcyA9IGdldEFjdGl2ZVBsdWdpbnMocGx1Z2luQ29uZmlnLCBwYXJzZWRBcmdzLnVzZVBsdWdpbnMpO1xuICAvLyBzZXQgdGhlIGFjdGl2ZSBwbHVnaW5zIG9uIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIHVzZSB0aGVtIGZvciBjb21tYW5kc1xuICBhcHBpdW1Ecml2ZXIucGx1Z2luQ2xhc3NlcyA9IHBsdWdpbkNsYXNzZXM7XG5cbiAgYXdhaXQgbG9nU3RhcnR1cEluZm8ocGFyc2VkQXJncyk7XG4gIGxldCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gPSBtYWtlUm91dGVyKGFwcGl1bURyaXZlcik7XG5cbiAgY29uc3QgZHJpdmVyQ2xhc3NlcyA9IGdldEFjdGl2ZURyaXZlcnMoZHJpdmVyQ29uZmlnLCBwYXJzZWRBcmdzLnVzZURyaXZlcnMpO1xuICBjb25zdCBzZXJ2ZXJVcGRhdGVycyA9IGdldFNlcnZlclVwZGF0ZXJzKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpO1xuICBjb25zdCBleHRyYU1ldGhvZE1hcCA9IGdldEV4dHJhTWV0aG9kTWFwKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpO1xuXG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICAgIHBvcnQ6IHBhcnNlZEFyZ3MucG9ydCxcbiAgICBob3N0bmFtZTogcGFyc2VkQXJncy5hZGRyZXNzLFxuICAgIGFsbG93Q29yczogcGFyc2VkQXJncy5hbGxvd0NvcnMsXG4gICAgYmFzZVBhdGg6IHBhcnNlZEFyZ3MuYmFzZVBhdGgsXG4gICAgc2VydmVyVXBkYXRlcnMsXG4gICAgZXh0cmFNZXRob2RNYXAsXG4gIH07XG4gIGlmIChwYXJzZWRBcmdzLmtlZXBBbGl2ZVRpbWVvdXQpIHtcbiAgICBzZXJ2ZXJPcHRzLmtlZXBBbGl2ZVRpbWVvdXQgPSBwYXJzZWRBcmdzLmtlZXBBbGl2ZVRpbWVvdXQgKiAxMDAwO1xuICB9XG4gIGxldCBzZXJ2ZXI7XG4gIHRyeSB7XG4gICAgc2VydmVyID0gYXdhaXQgYmFzZVNlcnZlcihzZXJ2ZXJPcHRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKFxuICAgICAgYENvdWxkIG5vdCBjb25maWd1cmUgQXBwaXVtIHNlcnZlci4gSXQncyBwb3NzaWJsZSB0aGF0IGEgZHJpdmVyIG9yIHBsdWdpbiB0cmllZCBgICtcbiAgICAgICAgYHRvIHVwZGF0ZSB0aGUgc2VydmVyIGFuZCBmYWlsZWQuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWBcbiAgICApO1xuICAgIGxvZ2dlci5kZWJ1ZyhlcnIuc3RhY2spO1xuICAgIHJldHVybiBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBpZiAocGFyc2VkQXJncy5hbGxvd0NvcnMpIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgICdZb3UgaGF2ZSBlbmFibGVkIENPUlMgcmVxdWVzdHMgZnJvbSBhbnkgaG9zdC4gQmUgY2FyZWZ1bCBub3QgJyArXG4gICAgICAgICd0byB2aXNpdCBzaXRlcyB3aGljaCBjb3VsZCBtYWxpY2lvdXNseSB0cnkgdG8gc3RhcnQgQXBwaXVtICcgK1xuICAgICAgICAnc2Vzc2lvbnMgb24geW91ciBtYWNoaW5lJ1xuICAgICk7XG4gIH1cbiAgYXBwaXVtRHJpdmVyLnNlcnZlciA9IHNlcnZlcjtcbiAgdHJ5IHtcbiAgICAvLyBjb25maWd1cmUgYXMgbm9kZSBvbiBncmlkLCBpZiBuZWNlc3NhcnlcbiAgICAvLyBmYWxzeSB2YWx1ZXMgc2hvdWxkIG5vdCBjYXVzZSB0aGlzIHRvIHJ1blxuICAgIGlmIChwYXJzZWRBcmdzLm5vZGVjb25maWcpIHtcbiAgICAgIGF3YWl0IHJlZ2lzdGVyTm9kZShcbiAgICAgICAgcGFyc2VkQXJncy5ub2RlY29uZmlnLFxuICAgICAgICBwYXJzZWRBcmdzLmFkZHJlc3MsXG4gICAgICAgIHBhcnNlZEFyZ3MucG9ydCxcbiAgICAgICAgcGFyc2VkQXJncy5iYXNlUGF0aFxuICAgICAgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFsnU0lHSU5UJywgJ1NJR1RFUk0nXSkge1xuICAgIHByb2Nlc3Mub25jZShzaWduYWwsIGFzeW5jIGZ1bmN0aW9uIG9uU2lnbmFsKCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFJlY2VpdmVkICR7c2lnbmFsfSAtIHNodXR0aW5nIGRvd25gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFwcGl1bURyaXZlci5kZWxldGVBbGxTZXNzaW9ucyh7XG4gICAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgICAgcmVhc29uOiBgVGhlIHByb2Nlc3MgaGFzIHJlY2VpdmVkICR7c2lnbmFsfSBzaWduYWxgLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oZSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvZ1NlcnZlclBvcnQocGFyc2VkQXJncy5hZGRyZXNzLCBwYXJzZWRBcmdzLnBvcnQpO1xuICBkcml2ZXJDb25maWcucHJpbnQoKTtcbiAgcGx1Z2luQ29uZmlnLnByaW50KFsuLi5wbHVnaW5DbGFzc2VzLnZhbHVlcygpXSk7XG5cbiAgcmV0dXJuIHNlcnZlcjtcbn1cblxuLy8gTk9URTogdGhpcyBpcyBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0IGZvciBhbnkgc2NyaXB0cyByZWZlcmVuY2luZyBgbWFpbi5qc2AgZGlyZWN0bHlcbi8vIChtb3JlIHNwZWNpZmljYWxseSwgYGJ1aWxkL2xpYi9tYWluLmpzYClcbi8vIHRoZSBleGVjdXRhYmxlIGlzIG5vdyBgLi4vaW5kZXguanNgLCBzbyB0aGF0IG1vZHVsZSB3aWxsIHR5cGljYWxseSBiZSBgcmVxdWlyZS5tYWluYC5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShtYWluKTtcbn1cblxuLy8gZXZlcnl0aGluZyBiZWxvdyBoZXJlIGlzIGludGVuZGVkIHRvIGJlIGEgcHVibGljIEFQSS5cbmV4cG9ydCB7cmVhZENvbmZpZ0ZpbGV9IGZyb20gJy4vY29uZmlnLWZpbGUnO1xuZXhwb3J0IHtmaW5hbGl6ZVNjaGVtYSwgZ2V0U2NoZW1hLCB2YWxpZGF0ZX0gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcbmV4cG9ydCB7bWFpbiwgaW5pdCwgcmVzb2x2ZUFwcGl1bUhvbWV9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuV2l0aFNlcnZlclN1YmNvbW1hbmR9IFdpdGhTZXJ2ZXJTdWJjb21tYW5kXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2V4dGVuc2lvbicpLkRyaXZlck5hbWVNYXB9IERyaXZlck5hbWVNYXBcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vZXh0ZW5zaW9uJykuUGx1Z2luTmFtZU1hcH0gUGx1Z2luTmFtZU1hcFxuICovXG5cbi8qKlxuICogTGl0ZXJhbGx5IGFuIGVtcHR5IG9iamVjdFxuICogQHR5cGVkZWYgeyB7fSB9IEV4dENvbW1hbmRJbml0UmVzdWx0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZXJ2ZXJJbml0RGF0YVxuICogQHByb3BlcnR5IHtpbXBvcnQoJy4vYXBwaXVtJykuQXBwaXVtRHJpdmVyfSBhcHBpdW1Ecml2ZXIgLSBUaGUgQXBwaXVtIGRyaXZlclxuICogQHByb3BlcnR5IHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLlBhcnNlZEFyZ3N9IHBhcnNlZEFyZ3MgLSBUaGUgcGFyc2VkIGFyZ3VtZW50c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1NlcnZlckluaXREYXRhICYgaW1wb3J0KCcuL2V4dGVuc2lvbicpLkV4dGVuc2lvbkNvbmZpZ3N9IFNlcnZlckluaXRSZXN1bHRcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkFyZ3M8VD59IEFyZ3NcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLlBhcnNlZEFyZ3M8VD59IFBhcnNlZEFyZ3NcbiAqL1xuIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFVQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNO0VBQUNBO0FBQUQsSUFBc0JDLFlBQTVCOzs7QUFPQSxlQUFlQyxlQUFmLENBQStCQyxJQUEvQixFQUFxQ0Msa0JBQWtCLEdBQUcsS0FBMUQsRUFBaUU7RUFDL0QsSUFBSTtJQUNGLElBQUFDLG1CQUFBOztJQUNBLElBQUlGLElBQUksQ0FBQ0csY0FBVCxFQUF5QjtNQUN2QkMsT0FBTyxDQUFDLFVBQUQsQ0FBUCxDQUFvQkMsaUJBQXBCLEdBQXdDLENBQUMsQ0FBekM7SUFDRDs7SUFDRCxJQUFJTCxJQUFJLENBQUNNLGFBQVQsRUFBd0I7TUFDdEIsTUFBTSxJQUFBQSxxQkFBQSxHQUFOO01BQ0FDLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENBQWI7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
|
|
335
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvbHZlQXBwaXVtSG9tZSIsImVudiIsInByZWZsaWdodENoZWNrcyIsImFyZ3MiLCJ0aHJvd0luc3RlYWRPZkV4aXQiLCJjaGVja05vZGVPayIsImNoZWNrTnBtT2siLCJsb25nU3RhY2t0cmFjZSIsInJlcXVpcmUiLCJhc3luY190cmFjZV9saW1pdCIsInNob3dCdWlsZEluZm8iLCJwcm9jZXNzIiwiZXhpdCIsIndhcm5Ob2RlRGVwcmVjYXRpb25zIiwidmFsaWRhdGUiLCJ0bXBEaXIiLCJ2YWxpZGF0ZVRtcERpciIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsInJlZCIsImxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyIsImluZm8iLCJpbnNwZWN0IiwibG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmciLCJjYXBzIiwibG9nU3RhcnR1cEluZm8iLCJ3ZWxjb21lIiwiQVBQSVVNX1ZFUiIsImFwcGl1bVJldiIsImdldEdpdFJldiIsInNob3dBcmdzIiwiZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MiLCJfIiwic2l6ZSIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwibG9nU2VydmVyUG9ydCIsImFkZHJlc3MiLCJwb3J0IiwibG9nTWVzc2FnZSIsImdldFNlcnZlclVwZGF0ZXJzIiwiZHJpdmVyQ2xhc3NlcyIsInBsdWdpbkNsYXNzZXMiLCJjb21wYWN0IiwibWFwIiwia2V5cyIsImdldEV4dHJhTWV0aG9kTWFwIiwicmVkdWNlIiwia2xhc3MiLCJuZXdNZXRob2RNYXAiLCJhcmVTZXJ2ZXJDb21tYW5kQXJncyIsInN1YmNvbW1hbmQiLCJTRVJWRVJfU1VCQ09NTUFORCIsImluaXQiLCJhcHBpdW1Ib21lIiwiZHJpdmVyQ29uZmlnIiwicGx1Z2luQ29uZmlnIiwibG9hZEV4dGVuc2lvbnMiLCJwYXJzZXIiLCJnZXRQYXJzZXIiLCJwcmVDb25maWdBcmdzIiwicGFyc2VBcmdzIiwiY29uZmlnUmVzdWx0IiwicmVhZENvbmZpZ0ZpbGUiLCJjb25maWdGaWxlIiwiZXJyb3JzIiwiRXJyb3IiLCJmaWxlcGF0aCIsInJlYXNvbiIsImRlZmF1bHRzIiwiZ2V0RGVmYXVsdHNGb3JTY2hlbWEiLCJzZXJ2ZXJBcmdzIiwiZGVmYXVsdHNEZWVwIiwiY29uZmlnIiwic2VydmVyIiwic2hvd0NvbmZpZyIsImxvZ3NpbmtJbml0IiwibG9nRmlsdGVycyIsImlzc3VlcyIsInJ1bGVzIiwibG9nRmFjdG9yeSIsImxvYWRTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzaW5nUnVsZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwid2FybiIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJhcHBpdW1Ecml2ZXIiLCJBcHBpdW1Ecml2ZXIiLCJwYXJzZWRBcmdzIiwiZXh0ZW5zaW9uQ29tbWFuZEFyZ3MiLCJEUklWRVJfVFlQRSIsInJ1bkV4dGVuc2lvbkNvbW1hbmQiLCJQTFVHSU5fVFlQRSIsIm1haW4iLCJnZXRBY3RpdmVQbHVnaW5zIiwidXNlUGx1Z2lucyIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsIm1ha2VSb3V0ZXIiLCJnZXRBY3RpdmVEcml2ZXJzIiwidXNlRHJpdmVycyIsInNlcnZlclVwZGF0ZXJzIiwiZXh0cmFNZXRob2RNYXAiLCJzZXJ2ZXJPcHRzIiwiaG9zdG5hbWUiLCJhbGxvd0NvcnMiLCJiYXNlUGF0aCIsImNsaUFyZ3MiLCJrZWVwQWxpdmVUaW1lb3V0IiwiYmFzZVNlcnZlciIsImRlYnVnIiwic3RhY2siLCJub2RlY29uZmlnIiwicmVnaXN0ZXJOb2RlIiwiY2xvc2UiLCJzaWduYWwiLCJvbmNlIiwib25TaWduYWwiLCJkZWxldGVBbGxTZXNzaW9ucyIsImZvcmNlIiwiZSIsInByaW50IiwidmFsdWVzIiwibW9kdWxlIiwiYXN5bmNpZnkiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbWFpbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7aW5pdCBhcyBsb2dzaW5rSW5pdH0gZnJvbSAnLi9sb2dzaW5rJzsgLy8gdGhpcyBpbXBvcnQgbmVlZHMgdG8gY29tZSBmaXJzdCBzaW5jZSBpdCBzZXRzIHVwIGdsb2JhbCBucG1sb2dcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInOyAvLyBsb2dnZXIgbmVlZHMgdG8gcmVtYWluIHNlY29uZFxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHtyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gYXMgbWFrZVJvdXRlciwgc2VydmVyIGFzIGJhc2VTZXJ2ZXJ9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtsb2dnZXIgYXMgbG9nRmFjdG9yeSwgdXRpbCwgZW52fSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHthc3luY2lmeX0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7QXBwaXVtRHJpdmVyfSBmcm9tICcuL2FwcGl1bSc7XG5pbXBvcnQge3J1bkV4dGVuc2lvbkNvbW1hbmR9IGZyb20gJy4vY2xpL2V4dGVuc2lvbic7XG5pbXBvcnQge2dldFBhcnNlcn0gZnJvbSAnLi9jbGkvcGFyc2VyJztcbmltcG9ydCB7XG4gIEFQUElVTV9WRVIsXG4gIGNoZWNrTm9kZU9rLFxuICBnZXRHaXRSZXYsXG4gIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzLFxuICBzaG93Q29uZmlnLFxuICBzaG93QnVpbGRJbmZvLFxuICB2YWxpZGF0ZVRtcERpcixcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsXG4gIGNoZWNrTnBtT2ssXG59IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7cmVhZENvbmZpZ0ZpbGV9IGZyb20gJy4vY29uZmlnLWZpbGUnO1xuaW1wb3J0IHtsb2FkRXh0ZW5zaW9ucywgZ2V0QWN0aXZlUGx1Z2lucywgZ2V0QWN0aXZlRHJpdmVyc30gZnJvbSAnLi9leHRlbnNpb24nO1xuaW1wb3J0IHtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUsIFNFUlZFUl9TVUJDT01NQU5EfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgcmVnaXN0ZXJOb2RlIGZyb20gJy4vZ3JpZC1yZWdpc3Rlcic7XG5pbXBvcnQge2dldERlZmF1bHRzRm9yU2NoZW1hLCB2YWxpZGF0ZX0gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcbmltcG9ydCB7aW5zcGVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IHtyZXNvbHZlQXBwaXVtSG9tZX0gPSBlbnY7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7UGFyc2VkQXJnc30gYXJnc1xuICogQHBhcmFtIHtib29sZWFufSBbdGhyb3dJbnN0ZWFkT2ZFeGl0XVxuICovXG5hc3luYyBmdW5jdGlvbiBwcmVmbGlnaHRDaGVja3MoYXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gZmFsc2UpIHtcbiAgdHJ5IHtcbiAgICBjaGVja05vZGVPaygpO1xuICAgIGF3YWl0IGNoZWNrTnBtT2soKTtcbiAgICBpZiAoYXJncy5sb25nU3RhY2t0cmFjZSkge1xuICAgICAgcmVxdWlyZSgnbG9uZ2pvaG4nKS5hc3luY190cmFjZV9saW1pdCA9IC0xO1xuICAgIH1cbiAgICBpZiAoYXJncy5zaG93QnVpbGRJbmZvKSB7XG4gICAgICBhd2FpdCBzaG93QnVpbGRJbmZvKCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICAgIHdhcm5Ob2RlRGVwcmVjYXRpb25zKCk7XG5cbiAgICB2YWxpZGF0ZShhcmdzKTtcblxuICAgIGlmIChhcmdzLnRtcERpcikge1xuICAgICAgYXdhaXQgdmFsaWRhdGVUbXBEaXIoYXJncy50bXBEaXIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLnJlZCk7XG4gICAgaWYgKHRocm93SW5zdGVhZE9mRXhpdCkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJnc30gYXJnc1xuICovXG5mdW5jdGlvbiBsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmcoYXJncykge1xuICBsb2dnZXIuaW5mbygnTm9uLWRlZmF1bHQgc2VydmVyIGFyZ3M6Jyk7XG4gIGluc3BlY3QoYXJncyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcmdzWydkZWZhdWx0Q2FwYWJpbGl0aWVzJ119IGNhcHNcbiAqL1xuZnVuY3Rpb24gbG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmcoY2Fwcykge1xuICBsb2dnZXIuaW5mbyhcbiAgICAnRGVmYXVsdCBjYXBhYmlsaXRpZXMsIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gZWFjaCByZXF1ZXN0ICcgK1xuICAgICAgJ3VubGVzcyBvdmVycmlkZGVuIGJ5IGRlc2lyZWQgY2FwYWJpbGl0aWVzOidcbiAgKTtcbiAgaW5zcGVjdChjYXBzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BhcnNlZEFyZ3N9IGFyZ3NcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9nU3RhcnR1cEluZm8oYXJncykge1xuICBsZXQgd2VsY29tZSA9IGBXZWxjb21lIHRvIEFwcGl1bSB2JHtBUFBJVU1fVkVSfWA7XG4gIGxldCBhcHBpdW1SZXYgPSBhd2FpdCBnZXRHaXRSZXYoKTtcbiAgaWYgKGFwcGl1bVJldikge1xuICAgIHdlbGNvbWUgKz0gYCAoUkVWICR7YXBwaXVtUmV2fSlgO1xuICB9XG4gIGxvZ2dlci5pbmZvKHdlbGNvbWUpO1xuXG4gIGxldCBzaG93QXJncyA9IGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKGFyZ3MpO1xuICBpZiAoXy5zaXplKHNob3dBcmdzKSkge1xuICAgIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyhzaG93QXJncyk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nKGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gIH1cbiAgLy8gVE9ETzogYnJpbmcgYmFjayBsb2dsZXZlbCByZXBvcnRpbmcgYmVsb3cgb25jZSBsb2dnZXIgaXMgZmx1c2hlZCBvdXRcbiAgLy8gbG9nZ2VyLmluZm8oJ0NvbnNvbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5jb25zb2xlLmxldmVsKTtcbiAgLy8gaWYgKGxvZ2dlci50cmFuc3BvcnRzLmZpbGUpIHtcbiAgLy8gICBsb2dnZXIuaW5mbygnRmlsZSBMb2dMZXZlbDogJyArIGxvZ2dlci50cmFuc3BvcnRzLmZpbGUubGV2ZWwpO1xuICAvLyB9XG59XG5cbi8qKlxuICogTG9ncyB0aGUgYWRkcmVzcyBhbmQgcG9ydCB0aGUgc2VydmVyIGlzIGxpc3RlbmluZyBvblxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBBZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gcG9ydCAtIFBvcnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBsb2dTZXJ2ZXJQb3J0KGFkZHJlc3MsIHBvcnQpIHtcbiAgbGV0IGxvZ01lc3NhZ2UgPSBgQXBwaXVtIFJFU1QgaHR0cCBpbnRlcmZhY2UgbGlzdGVuZXIgc3RhcnRlZCBvbiBgICsgYCR7YWRkcmVzc306JHtwb3J0fWA7XG4gIGxvZ2dlci5pbmZvKGxvZ01lc3NhZ2UpO1xufVxuXG4vKipcbiAqIEdldHMgYSBsaXN0IG9mIGB1cGRhdGVTZXJ2ZXJgIGZ1bmN0aW9ucyBmcm9tIGFsbCBleHRlbnNpb25zXG4gKiBAcGFyYW0ge0RyaXZlck5hbWVNYXB9IGRyaXZlckNsYXNzZXNcbiAqIEBwYXJhbSB7UGx1Z2luTmFtZU1hcH0gcGx1Z2luQ2xhc3Nlc1xuICogQHJldHVybnMge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlVwZGF0ZVNlcnZlckNhbGxiYWNrW119XG4gKi9cbmZ1bmN0aW9uIGdldFNlcnZlclVwZGF0ZXJzKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpIHtcbiAgcmV0dXJuIF8uY29tcGFjdChfLm1hcChbLi4uZHJpdmVyQ2xhc3Nlcy5rZXlzKCksIC4uLnBsdWdpbkNsYXNzZXMua2V5cygpXSwgJ3VwZGF0ZVNlcnZlcicpKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhIGJpZyBgTWV0aG9kTWFwYCBmcm9tIGFsbCB0aGUgbGl0dGxlIGBNZXRob2RNYXBgcyBpbiB0aGUgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHtEcml2ZXJOYW1lTWFwfSBkcml2ZXJDbGFzc2VzXG4gKiBAcGFyYW0ge1BsdWdpbk5hbWVNYXB9IHBsdWdpbkNsYXNzZXNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5NZXRob2RNYXB9XG4gKi9cbmZ1bmN0aW9uIGdldEV4dHJhTWV0aG9kTWFwKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpIHtcbiAgcmV0dXJuIFsuLi5kcml2ZXJDbGFzc2VzLmtleXMoKSwgLi4ucGx1Z2luQ2xhc3Nlcy5rZXlzKCldLnJlZHVjZShcbiAgICAobWFwLCBrbGFzcykgPT4gKHtcbiAgICAgIC4uLm1hcCxcbiAgICAgIC4uLihrbGFzcy5uZXdNZXRob2RNYXAgPz8ge30pLFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHBhcmFtIHtBcmdzPFQ+fSBhcmdzXG4gKiBAcmV0dXJucyB7YXJncyBpcyBBcmdzPFdpdGhTZXJ2ZXJTdWJjb21tYW5kPn1cbiAqL1xuZnVuY3Rpb24gYXJlU2VydmVyQ29tbWFuZEFyZ3MoYXJncykge1xuICByZXR1cm4gYXJncy5zdWJjb21tYW5kID09PSBTRVJWRVJfU1VCQ09NTUFORDtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBBcHBpdW0sIGJ1dCBkb2VzIG5vdCBzdGFydCB0aGUgc2VydmVyLlxuICpcbiAqIFVzZSB0aGlzIHRvIGdldCBhdCB0aGUgY29uZmlndXJhdGlvbiBzY2hlbWEuXG4gKlxuICogSWYgYGFyZ3NgIGNvbnRhaW5zIGEgbm9uLWVtcHR5IGBzdWJjb21tYW5kYCB3aGljaCBpcyBub3QgYHNlcnZlcmAsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuICpcbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEBwYXJhbSB7QXJnczxUPn0gW2FyZ3NdIC0gUGFydGlhbCBhcmdzIChwcm9nYW1tYXRpYyB1c2FnZSBvbmx5KVxuICogQHJldHVybnMge1Byb21pc2U8U2VydmVySW5pdFJlc3VsdCB8IEV4dENvbW1hbmRJbml0UmVzdWx0Pn1cbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQge2luaXQsIGdldFNjaGVtYX0gZnJvbSAnYXBwaXVtJztcbiAqIGNvbnN0IG9wdGlvbnMgPSB7fTsgLy8gY29uZmlnIG9iamVjdFxuICogYXdhaXQgaW5pdChvcHRpb25zKTtcbiAqIGNvbnN0IHNjaGVtYSA9IGdldFNjaGVtYSgpOyAvLyBlbnRpcmUgY29uZmlnIHNjaGVtYSBpbmNsdWRpbmcgcGx1Z2lucyBhbmQgZHJpdmVyc1xuICovXG5hc3luYyBmdW5jdGlvbiBpbml0KGFyZ3MpIHtcbiAgY29uc3QgYXBwaXVtSG9tZSA9IGFyZ3M/LmFwcGl1bUhvbWUgPz8gKGF3YWl0IHJlc29sdmVBcHBpdW1Ib21lKCkpO1xuXG4gIGNvbnN0IHtkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ30gPSBhd2FpdCBsb2FkRXh0ZW5zaW9ucyhhcHBpdW1Ib21lKTtcblxuICBjb25zdCBwYXJzZXIgPSBnZXRQYXJzZXIoKTtcbiAgbGV0IHRocm93SW5zdGVhZE9mRXhpdCA9IGZhbHNlO1xuICAvKiogQHR5cGUge0FyZ3M8VD59ICovXG4gIGxldCBwcmVDb25maWdBcmdzO1xuXG4gIGlmIChhcmdzKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnRhaW5pbmcgcGFja2FnZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgYXMgYSBDTEkgcHJvY2VzcyxcbiAgICAvLyB0aGF0IHBhY2thZ2UgbWlnaHQgbm90IGFwcHJlY2lhdGUgdXMgY2FsbGluZyAncHJvY2Vzcy5leGl0JyB3aWxseS1cbiAgICAvLyBuaWxseSwgc28gZ2l2ZSBpdCB0aGUgb3B0aW9uIHRvIGhhdmUgdXMgdGhyb3cgaW5zdGVhZCBvZiBleGl0XG4gICAgaWYgKGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvd0luc3RlYWRPZkV4aXQgPSB0cnVlO1xuICAgICAgLy8gYnV0IHJlbW92ZSBpdCBzaW5jZSBpdCdzIG5vdCBhIHJlYWwgc2VydmVyIGFyZyBwZXIgc2VcbiAgICAgIGRlbGV0ZSBhcmdzLnRocm93SW5zdGVhZE9mRXhpdDtcbiAgICB9XG4gICAgcHJlQ29uZmlnQXJncyA9IHsuLi5hcmdzLCBzdWJjb21tYW5kOiBhcmdzLnN1YmNvbW1hbmQgPz8gU0VSVkVSX1NVQkNPTU1BTkR9O1xuICB9IGVsc2Uge1xuICAgIC8vIG90aGVyd2lzZSBwYXJzZSBmcm9tIENMSVxuICAgIHByZUNvbmZpZ0FyZ3MgPSAvKiogQHR5cGUge0FyZ3M8VD59ICovIChwYXJzZXIucGFyc2VBcmdzKCkpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnUmVzdWx0ID0gYXdhaXQgcmVhZENvbmZpZ0ZpbGUocHJlQ29uZmlnQXJncy5jb25maWdGaWxlKTtcblxuICBpZiAoIV8uaXNFbXB0eShjb25maWdSZXN1bHQuZXJyb3JzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFcnJvcnMgaW4gY29uZmlnIGZpbGUgJHtjb25maWdSZXN1bHQuZmlsZXBhdGh9OlxcbiAke1xuICAgICAgICBjb25maWdSZXN1bHQucmVhc29uID8/IGNvbmZpZ1Jlc3VsdC5lcnJvcnNcbiAgICAgIH1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIG1lcmdlIGNvbmZpZyBhbmQgYXBwbHkgZGVmYXVsdHMuXG4gIC8vIHRoZSBvcmRlciBvZiBwcmVjZW5kZWNlIGlzOlxuICAvLyAxLiBjb21tYW5kIGxpbmUgYXJnc1xuICAvLyAyLiBjb25maWcgZmlsZVxuICAvLyAzLiBkZWZhdWx0cyBmcm9tIGNvbmZpZyBmaWxlLlxuICBpZiAoYXJlU2VydmVyQ29tbWFuZEFyZ3MocHJlQ29uZmlnQXJncykpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IGdldERlZmF1bHRzRm9yU2NoZW1hKGZhbHNlKTtcblxuICAgIC8qKiBAdHlwZSB7UGFyc2VkQXJnc30gKi9cbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gXy5kZWZhdWx0c0RlZXAocHJlQ29uZmlnQXJncywgY29uZmlnUmVzdWx0LmNvbmZpZz8uc2VydmVyLCBkZWZhdWx0cyk7XG5cbiAgICBpZiAocHJlQ29uZmlnQXJncy5zaG93Q29uZmlnKSB7XG4gICAgICBzaG93Q29uZmlnKGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKHByZUNvbmZpZ0FyZ3MpLCBjb25maWdSZXN1bHQsIGRlZmF1bHRzLCBzZXJ2ZXJBcmdzKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBhd2FpdCBsb2dzaW5rSW5pdChzZXJ2ZXJBcmdzKTtcblxuICAgIGlmIChzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnMpIHtcbiAgICAgIGNvbnN0IHtpc3N1ZXMsIHJ1bGVzfSA9IGF3YWl0IGxvZ0ZhY3RvcnkubG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyhcbiAgICAgICAgc2VydmVyQXJncy5sb2dGaWx0ZXJzXG4gICAgICApO1xuICAgICAgaWYgKCFfLmlzRW1wdHkoaXNzdWVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRoZSBsb2cgZmlsdGVyaW5nIHJ1bGVzIGNvbmZpZyAnJHtzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnN9JyBoYXMgaXNzdWVzOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGlzc3VlcywgbnVsbCwgMilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzRW1wdHkocnVsZXMpKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIGBGb3VuZCBubyBsb2cgZmlsdGVyaW5nIHJ1bGVzIGluICcke3NlcnZlckFyZ3MubG9nRmlsdGVyc30nLiBJcyB0aGF0IGV4cGVjdGVkP2BcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBMb2FkZWQgJHt1dGlsLnBsdXJhbGl6ZSgnZmlsdGVyaW5nIHJ1bGUnLCBydWxlcy5sZW5ndGgsIHRydWUpfSBmcm9tICcke1xuICAgICAgICAgICAgc2VydmVyQXJncy5sb2dGaWx0ZXJzXG4gICAgICAgICAgfSdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwaXVtRHJpdmVyID0gbmV3IEFwcGl1bURyaXZlcihzZXJ2ZXJBcmdzKTtcbiAgICAvLyBzZXQgdGhlIGNvbmZpZyBvbiB0aGUgdW1icmVsbGEgZHJpdmVyIHNvIGl0IGNhbiBtYXRjaCBkcml2ZXJzIHRvIGNhcHNcbiAgICBhcHBpdW1Ecml2ZXIuZHJpdmVyQ29uZmlnID0gZHJpdmVyQ29uZmlnO1xuICAgIGF3YWl0IHByZWZsaWdodENoZWNrcyhzZXJ2ZXJBcmdzLCB0aHJvd0luc3RlYWRPZkV4aXQpO1xuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2VydmVySW5pdFJlc3VsdH0gKi8gKHtcbiAgICAgIGFwcGl1bURyaXZlcixcbiAgICAgIHBhcnNlZEFyZ3M6IHNlcnZlckFyZ3MsXG4gICAgICBkcml2ZXJDb25maWcsXG4gICAgICBwbHVnaW5Db25maWcsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29tbWFuZEFyZ3MgPSAvKiogQHR5cGUge0FyZ3M8aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5XaXRoRXh0U3ViY29tbWFuZD59ICovIChcbiAgICAgIHByZUNvbmZpZ0FyZ3NcbiAgICApO1xuICAgIC8vIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhlICdkcml2ZXInIENMSSwgZG9uJ3QgcnVuIHRoZSBub3JtYWwgc2VydmVyLFxuICAgIC8vIGJ1dCBpbnN0ZWFkIHBhc3MgY29udHJvbCB0byB0aGUgZHJpdmVyIENMSVxuICAgIGlmIChwcmVDb25maWdBcmdzLnN1YmNvbW1hbmQgPT09IERSSVZFUl9UWVBFKSB7XG4gICAgICBhd2FpdCBydW5FeHRlbnNpb25Db21tYW5kKGV4dGVuc2lvbkNvbW1hbmRBcmdzLCBkcml2ZXJDb25maWcpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAocHJlQ29uZmlnQXJncy5zdWJjb21tYW5kID09PSBQTFVHSU5fVFlQRSkge1xuICAgICAgYXdhaXQgcnVuRXh0ZW5zaW9uQ29tbWFuZChleHRlbnNpb25Db21tYW5kQXJncywgcGx1Z2luQ29uZmlnKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4ge307IC8vIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgfVxufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIEFwcGl1bSdzIGNvbmZpZy4gIFN0YXJ0cyBzZXJ2ZXIgaWYgYXBwcm9wcmlhdGUgYW5kIHJlc29sdmVzIHRoZVxuICogc2VydmVyIGluc3RhbmNlIGlmIHNvOyBvdGhlcndpc2UgcmVzb2x2ZXMgdy8gYHVuZGVmaW5lZGAuXG4gKiBAdGVtcGxhdGUgW1Q9V2l0aFNlcnZlclN1YmNvbW1hbmRdXG4gKiBAcGFyYW0ge0FyZ3M8VD59IFthcmdzXSAtIEFyZ3VtZW50cyBmcm9tIENMSSBvciBvdGhlcndpc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bVNlcnZlcnx1bmRlZmluZWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBtYWluKGFyZ3MpIHtcbiAgY29uc3Qge2FwcGl1bURyaXZlciwgcGFyc2VkQXJncywgcGx1Z2luQ29uZmlnLCBkcml2ZXJDb25maWd9ID0gLyoqIEB0eXBlIHtTZXJ2ZXJJbml0UmVzdWx0fSAqLyAoXG4gICAgYXdhaXQgaW5pdChhcmdzKVxuICApO1xuXG4gIGlmICghYXBwaXVtRHJpdmVyIHx8ICFwYXJzZWRBcmdzIHx8ICFwbHVnaW5Db25maWcgfHwgIWRyaXZlckNvbmZpZykge1xuICAgIC8vIGlmIHRoaXMgYnJhbmNoIGlzIHRha2VuLCB3ZSd2ZSBydW4gYSBkaWZmZXJlbnQgc3ViY29tbWFuZCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgLy8gbGVmdCB0byBkbyBoZXJlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbkNsYXNzZXMgPSBnZXRBY3RpdmVQbHVnaW5zKHBsdWdpbkNvbmZpZywgcGFyc2VkQXJncy51c2VQbHVnaW5zKTtcbiAgLy8gc2V0IHRoZSBhY3RpdmUgcGx1Z2lucyBvbiB0aGUgdW1icmVsbGEgZHJpdmVyIHNvIGl0IGNhbiB1c2UgdGhlbSBmb3IgY29tbWFuZHNcbiAgYXBwaXVtRHJpdmVyLnBsdWdpbkNsYXNzZXMgPSBwbHVnaW5DbGFzc2VzO1xuXG4gIGF3YWl0IGxvZ1N0YXJ0dXBJbmZvKHBhcnNlZEFyZ3MpO1xuICBsZXQgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uID0gbWFrZVJvdXRlcihhcHBpdW1Ecml2ZXIpO1xuXG4gIGNvbnN0IGRyaXZlckNsYXNzZXMgPSBnZXRBY3RpdmVEcml2ZXJzKGRyaXZlckNvbmZpZywgcGFyc2VkQXJncy51c2VEcml2ZXJzKTtcbiAgY29uc3Qgc2VydmVyVXBkYXRlcnMgPSBnZXRTZXJ2ZXJVcGRhdGVycyhkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKTtcbiAgY29uc3QgZXh0cmFNZXRob2RNYXAgPSBnZXRFeHRyYU1ldGhvZE1hcChkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKTtcblxuICAvKiogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS9iYXNlLWRyaXZlcicpLlNlcnZlck9wdHN9ICovXG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICAgIHBvcnQ6IHBhcnNlZEFyZ3MucG9ydCxcbiAgICBob3N0bmFtZTogcGFyc2VkQXJncy5hZGRyZXNzLFxuICAgIGFsbG93Q29yczogcGFyc2VkQXJncy5hbGxvd0NvcnMsXG4gICAgYmFzZVBhdGg6IHBhcnNlZEFyZ3MuYmFzZVBhdGgsXG4gICAgc2VydmVyVXBkYXRlcnMsXG4gICAgZXh0cmFNZXRob2RNYXAsXG4gICAgY2xpQXJnczogcGFyc2VkQXJncyxcbiAgfTtcbiAgaWYgKHBhcnNlZEFyZ3Mua2VlcEFsaXZlVGltZW91dCkge1xuICAgIHNlcnZlck9wdHMua2VlcEFsaXZlVGltZW91dCA9IHBhcnNlZEFyZ3Mua2VlcEFsaXZlVGltZW91dCAqIDEwMDA7XG4gIH1cbiAgbGV0IHNlcnZlcjtcbiAgdHJ5IHtcbiAgICBzZXJ2ZXIgPSBhd2FpdCBiYXNlU2VydmVyKHNlcnZlck9wdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoXG4gICAgICBgQ291bGQgbm90IGNvbmZpZ3VyZSBBcHBpdW0gc2VydmVyLiBJdCdzIHBvc3NpYmxlIHRoYXQgYSBkcml2ZXIgb3IgcGx1Z2luIHRyaWVkIGAgK1xuICAgICAgICBgdG8gdXBkYXRlIHRoZSBzZXJ2ZXIgYW5kIGZhaWxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICk7XG4gICAgbG9nZ2VyLmRlYnVnKGVyci5zdGFjayk7XG4gICAgcmV0dXJuIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGlmIChwYXJzZWRBcmdzLmFsbG93Q29ycykge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgJ1lvdSBoYXZlIGVuYWJsZWQgQ09SUyByZXF1ZXN0cyBmcm9tIGFueSBob3N0LiBCZSBjYXJlZnVsIG5vdCAnICtcbiAgICAgICAgJ3RvIHZpc2l0IHNpdGVzIHdoaWNoIGNvdWxkIG1hbGljaW91c2x5IHRyeSB0byBzdGFydCBBcHBpdW0gJyArXG4gICAgICAgICdzZXNzaW9ucyBvbiB5b3VyIG1hY2hpbmUnXG4gICAgKTtcbiAgfVxuICBhcHBpdW1Ecml2ZXIuc2VydmVyID0gc2VydmVyO1xuICB0cnkge1xuICAgIC8vIGNvbmZpZ3VyZSBhcyBub2RlIG9uIGdyaWQsIGlmIG5lY2Vzc2FyeVxuICAgIC8vIGZhbHN5IHZhbHVlcyBzaG91bGQgbm90IGNhdXNlIHRoaXMgdG8gcnVuXG4gICAgaWYgKHBhcnNlZEFyZ3Mubm9kZWNvbmZpZykge1xuICAgICAgYXdhaXQgcmVnaXN0ZXJOb2RlKFxuICAgICAgICBwYXJzZWRBcmdzLm5vZGVjb25maWcsXG4gICAgICAgIHBhcnNlZEFyZ3MuYWRkcmVzcyxcbiAgICAgICAgcGFyc2VkQXJncy5wb3J0LFxuICAgICAgICBwYXJzZWRBcmdzLmJhc2VQYXRoXG4gICAgICApO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYXdhaXQgc2VydmVyLmNsb3NlKCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgWydTSUdJTlQnLCAnU0lHVEVSTSddKSB7XG4gICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgYXN5bmMgZnVuY3Rpb24gb25TaWduYWwoKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVjZWl2ZWQgJHtzaWduYWx9IC0gc2h1dHRpbmcgZG93bmApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXBwaXVtRHJpdmVyLmRlbGV0ZUFsbFNlc3Npb25zKHtcbiAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICByZWFzb246IGBUaGUgcHJvY2VzcyBoYXMgcmVjZWl2ZWQgJHtzaWduYWx9IHNpZ25hbGAsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9nU2VydmVyUG9ydChwYXJzZWRBcmdzLmFkZHJlc3MsIHBhcnNlZEFyZ3MucG9ydCk7XG4gIGRyaXZlckNvbmZpZy5wcmludCgpO1xuICBwbHVnaW5Db25maWcucHJpbnQoWy4uLnBsdWdpbkNsYXNzZXMudmFsdWVzKCldKTtcblxuICByZXR1cm4gc2VydmVyO1xufVxuXG4vLyBOT1RFOiB0aGlzIGlzIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXQgZm9yIGFueSBzY3JpcHRzIHJlZmVyZW5jaW5nIGBtYWluLmpzYCBkaXJlY3RseVxuLy8gKG1vcmUgc3BlY2lmaWNhbGx5LCBgYnVpbGQvbGliL21haW4uanNgKVxuLy8gdGhlIGV4ZWN1dGFibGUgaXMgbm93IGAuLi9pbmRleC5qc2AsIHNvIHRoYXQgbW9kdWxlIHdpbGwgdHlwaWNhbGx5IGJlIGByZXF1aXJlLm1haW5gLlxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KG1haW4pO1xufVxuXG4vLyBldmVyeXRoaW5nIGJlbG93IGhlcmUgaXMgaW50ZW5kZWQgdG8gYmUgYSBwdWJsaWMgQVBJLlxuZXhwb3J0IHtyZWFkQ29uZmlnRmlsZX0gZnJvbSAnLi9jb25maWctZmlsZSc7XG5leHBvcnQge2ZpbmFsaXplU2NoZW1hLCBnZXRTY2hlbWEsIHZhbGlkYXRlfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuZXhwb3J0IHttYWluLCBpbml0LCByZXNvbHZlQXBwaXVtSG9tZX07XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlclR5cGV9IERyaXZlclR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5QbHVnaW5UeXBlfSBQbHVnaW5UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyQ2xhc3N9IERyaXZlckNsYXNzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuUGx1Z2luQ2xhc3N9IFBsdWdpbkNsYXNzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5XaXRoU2VydmVyU3ViY29tbWFuZH0gV2l0aFNlcnZlclN1YmNvbW1hbmRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vZXh0ZW5zaW9uJykuRHJpdmVyTmFtZU1hcH0gRHJpdmVyTmFtZU1hcFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9leHRlbnNpb24nKS5QbHVnaW5OYW1lTWFwfSBQbHVnaW5OYW1lTWFwXG4gKi9cblxuLyoqXG4gKiBMaXRlcmFsbHkgYW4gZW1wdHkgb2JqZWN0XG4gKiBAdHlwZWRlZiB7IHt9IH0gRXh0Q29tbWFuZEluaXRSZXN1bHRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlcnZlckluaXREYXRhXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi9hcHBpdW0nKS5BcHBpdW1Ecml2ZXJ9IGFwcGl1bURyaXZlciAtIFRoZSBBcHBpdW0gZHJpdmVyXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuUGFyc2VkQXJnc30gcGFyc2VkQXJncyAtIFRoZSBwYXJzZWQgYXJndW1lbnRzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7U2VydmVySW5pdERhdGEgJiBpbXBvcnQoJy4vZXh0ZW5zaW9uJykuRXh0ZW5zaW9uQ29uZmlnc30gU2VydmVySW5pdFJlc3VsdFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuQXJnczxUPn0gQXJnc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuUGFyc2VkQXJnczxUPn0gUGFyc2VkQXJnc1xuICovXG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVB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
|