@broadcom/endevor-for-zowe-cli
Version:
Endevor Plug-in for Zowe CLI
246 lines • 27.4 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AbstractWorkspaceActionHandler = void 0;
const imperative_1 = require("@zowe/imperative");
const api_1 = require("../../api");
const MergeUtils_1 = require("../../api/workspace/MergeUtils");
const HandlerUtils_1 = require("./HandlerUtils");
class AbstractWorkspaceActionHandler {
process(commandParameters) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b, _c, _d;
this.args = commandParameters.arguments;
this.commandConsole = commandParameters.response.console;
this.progressApi = commandParameters.response.progress;
this.actionName = this.args._[1].trim().toUpperCase();
if (this.actionName.startsWith("SYNC") ||
this.actionName.startsWith("UNSYNC") ||
this.actionName.startsWith("MERGE")) {
this.instance = api_1.EndevorRestUtils.setInstance(this.args);
this.session = yield api_1.EndevorRestUtils.setupEndevorSession(this.args, true);
api_1.EndevorRestUtils.failIfUsingV1(this.session);
const suppressMessages = this.args["suppress-messages"] != null && this.args["suppress-messages"];
if (!HandlerUtils_1.HandlerUtils.validateBasePath(this.session, this.commandConsole, this.instance, suppressMessages)) {
commandParameters.response.data.setExitCode(8);
return;
}
if (api_1.EndevorRestUtils.isThisV1(this.session)) {
throw new imperative_1.ImperativeError({
msg: "[ERROR] " + this.actionName + " action is not supported when using version 1 of Endevor REST API"
});
}
if (this.args["suppress-messages"] == null || !this.args["suppress-messages"]) {
commandParameters.response.console.log(HandlerUtils_1.HandlerUtils.getSessionNotification(this.session, this.instance));
if (this.actionName.startsWith("MERGE")) {
if (this.args["merge-out-of-sync"]) {
commandParameters.response.console.log(`[INFO] MERGE out of sync elements executed in location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`);
}
else {
const fromLocation = {
environment: (_a = this.args["merge-environment"]) !== null && _a !== void 0 ? _a : this.args.environment,
stageNumber: (_b = this.args["merge-stage-number"]) !== null && _b !== void 0 ? _b : this.args["stage-number"],
system: (_c = this.args["merge-system"]) !== null && _c !== void 0 ? _c : this.args.system,
subsystem: (_d = this.args["merge-subsystem"]) !== null && _d !== void 0 ? _d : this.args.subsystem,
type: this.args.type,
element: this.args.element
};
commandParameters.response.console.log(`[INFO] MERGE executed from location: ${fromLocation.environment}/${fromLocation.stageNumber}/${fromLocation.system}/${fromLocation.subsystem} to location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`);
}
}
else {
commandParameters.response.console.log(`[INFO] ${this.actionName} executed in location: ${this.args.environment}/${this.args["stage-number"]}/${this.args.system}/${this.args.subsystem} on element: ${this.args.element}.${this.args.type}`);
}
}
}
else {
if (this.args["suppress-messages"] == null || !this.args["suppress-messages"]) {
if (this.actionName.startsWith("CONFIRM")) {
commandParameters.response.console.log(`[INFO] CONFIRM conflict resolution executed for ${this.args["workspace-file"]}`);
}
else {
commandParameters.response.console.log(`[INFO] ${this.actionName} workspace executed`);
}
}
}
const response = yield this.sendRequest();
commandParameters.response.data.setObj(response);
if (this.args["response-format-json"] != true) {
this.handleResponse(response);
}
});
}
handleResponse(response) {
if (this.actionName != undefined && (this.actionName.startsWith("SYNC") || this.actionName.startsWith("MERGE"))) {
this.printActionsReport(response);
}
for (const message of response.errorMessages) {
this.commandConsole.log("[ERROR] " + message);
}
for (const message of response.warningMessages) {
this.commandConsole.log("[WARN] " + message);
}
for (const message of response.infoMessages) {
this.commandConsole.log("[INFO] " + message);
}
if (response.unresolvedMergeConflicts) {
this.commandConsole.log("[INFO] Conflicts have been found and need to be manually resolved before Endevor can be updated. Local files have been updated with conflict annotation.");
this.commandConsole.log("[INFO] Edit the files to resolve the conflicts, then use the following commands to confirm each conflict is resolved:");
this.commandConsole.log(" ");
response.actions.forEach((action) => {
if (action.statusDetailed == api_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS ||
action.statusDetailed == api_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED)
this.commandConsole.log(" " + MergeUtils_1.MergeUtils.getMergeCommand(action.localFile));
});
this.commandConsole.log(" ");
}
}
printActionsReport(response) {
if (response.actions.length == 0) {
return "";
}
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.LOCAL_DELETE)
this.printSingleElementAction(action);
});
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.RENAME)
this.printSingleElementAction(action);
});
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.RETRIEVE)
this.printSingleElementAction(action);
});
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.CONFLICT)
this.printSingleElementAction(action);
});
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.VALIDATE_SYNC)
this.printSingleElementAction(action);
});
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.MERGE)
this.printSingleElementAction(action);
});
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.ADD)
this.printSingleElementAction(action);
});
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.UPDATE || action.action == api_1.EndevorActionType.UPDATE_WITH_SYNC)
this.printSingleElementAction(action);
});
response.actions.forEach((action) => {
if (action.action == api_1.EndevorActionType.REMOTE_DELETE)
this.printSingleElementAction(action);
});
this.commandConsole.log("Messages:");
return "";
}
printSingleElementAction(action) {
let statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED;
let statusExplanation = "";
switch (action.statusDetailed) {
case api_1.EndevorActionStatusDetailed.NOT_RUN:
statusExplanation = "not executed";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW;
break;
case api_1.EndevorActionStatusDetailed.NOT_RUN_CCID_REQUIRED:
statusExplanation = "not executed - CCID required";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW;
break;
case api_1.EndevorActionStatusDetailed.NOT_RUN_COMMENT_REQUIRED:
statusExplanation = "not executed - comment required";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW;
break;
case api_1.EndevorActionStatusDetailed.NOT_RUN_CCID_COMMENT_REQUIRED:
statusExplanation = "not executed - CCID & comment required";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW;
break;
case api_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS:
statusExplanation = "manual conflict resolution in progress";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_BLUE;
break;
case api_1.EndevorActionStatusDetailed.FAILURE:
statusExplanation = "failed";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED;
break;
case api_1.EndevorActionStatusDetailed.FAILURE_FINGERPRINT_MISMATCH:
statusExplanation = "failed - element change (fingerprint mismatch) during sync, re-enter the sync command";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED;
break;
case api_1.EndevorActionStatusDetailed.FAILURE_NOT_FOUND:
statusExplanation = "failed - element change (not found) during sync, re-enter the sync command";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED;
break;
case api_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE:
statusExplanation = "failed - server out of STC resources, retry";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED;
break;
case api_1.EndevorActionStatusDetailed.FAILURE_MAX_RC:
statusExplanation = "failed - max RC exceeded";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED;
break;
case api_1.EndevorActionStatusDetailed.FAILURE_SIGNOUT:
statusExplanation = "failed - signout failed";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED;
break;
case api_1.EndevorActionStatusDetailed.FAILURE_MERGE_LOCATION_INVALID:
statusExplanation = "failed - invalid merge location specified";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_RED;
break;
case api_1.EndevorActionStatusDetailed.WARNING:
statusExplanation = "successful with warning(s)";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW;
break;
case api_1.EndevorActionStatusDetailed.SUCCESS:
statusExplanation = "successful";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN;
break;
case api_1.EndevorActionStatusDetailed.SUCCESS_NO_CHANGE:
statusExplanation = "successful - no changes detected";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN;
break;
case api_1.EndevorActionStatusDetailed.SUCCESS_AUTOMERGED:
statusExplanation = "auto-merge successful";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN;
break;
case api_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED:
statusExplanation = "manual conflict resolution started";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_BLUE;
break;
case api_1.EndevorActionStatusDetailed.SUCCESS_IN_SYNC:
statusExplanation = "successful - element is already in sync";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN;
break;
case api_1.EndevorActionStatusDetailed.SUCCESS_OUT_OF_SYNC:
statusExplanation = "successful - element is out of sync";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_GREEN;
break;
case api_1.EndevorActionStatusDetailed.SUCCESS_SYNC_DISABLED:
statusExplanation = "successful, but sync in place is disabled in Endevor";
statusColor = HandlerUtils_1.HandlerUtils.ANSI_COLOR_YELLOW;
break;
default:
api_1.EndevorUtils.failCompile(action.statusDetailed);
}
this.commandConsole.log(`${statusColor}${action.actionName} ${statusExplanation}${HandlerUtils_1.HandlerUtils.ANSI_COLOR_RESET}:`);
this.commandConsole.log(` element: ${action.fullElementName}`);
this.commandConsole.log(` type: ${action.type}`);
this.commandConsole.log(` file: ${action.localFile}`);
action.errorMessages.forEach((error) => {
this.commandConsole.log(` ${error}`);
});
}
}
exports.AbstractWorkspaceActionHandler = AbstractWorkspaceActionHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RXb3Jrc3BhY2VBY3Rpb24uaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvdXRpbHMvQWJzdHJhY3RXb3Jrc3BhY2VBY3Rpb24uaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUF1QkEsaURBUTBCO0FBQzFCLG1DQVVtQjtBQUNuQiwrREFBNEQ7QUFDNUQsaURBQThDO0FBRTlDLE1BQXNCLDhCQUE4QjtJQVFyQyxPQUFPLENBQUMsaUJBQXFDOzs7WUFDeEQsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBWSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xFLElBQ0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUNuQyxDQUFDO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUEwQixDQUFDLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxzQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEcsc0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxDQUFDLDJCQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO29CQUN2RyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0MsT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksc0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUM1QyxNQUFNLElBQUksNEJBQWUsQ0FBQzt3QkFDeEIsR0FBRyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLG1FQUFtRTtxQkFDeEcsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUFZLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFFekcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDOzRCQUNuQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDcEMsMkRBQTJELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUM5TSxDQUFDO3dCQUNKLENBQUM7NkJBQU0sQ0FBQzs0QkFFTixNQUFNLFlBQVksR0FBc0I7Z0NBQ3RDLFdBQVcsRUFBRSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO2dDQUNwRSxXQUFXLEVBQUUsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1DQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2dDQUN6RSxNQUFNLEVBQUUsTUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Z0NBQ3JELFNBQVMsRUFBRSxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUNBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO2dDQUM5RCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO2dDQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPOzZCQUMzQixDQUFDOzRCQUNGLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNwQyx3Q0FBd0MsWUFBWSxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLFNBQVMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUNqVCxDQUFDO3dCQUNKLENBQUM7b0JBQ0gsQ0FBQzt5QkFFSSxDQUFDO3dCQUNKLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNwQyxVQUFVLElBQUksQ0FBQyxVQUFVLDBCQUEwQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FDdE0sQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ3BDLG1EQUFtRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FDakYsQ0FBQztvQkFDSixDQUFDO3lCQUFNLENBQUM7d0JBQ04saUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO29CQUN6RixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQTZCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO0tBQUE7SUFFTSxjQUFjLENBQUMsUUFBa0M7UUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLDBKQUEwSixDQUMzSixDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLHVIQUF1SCxDQUN4SCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbEMsSUFDRSxNQUFNLENBQUMsY0FBYyxJQUFJLGlDQUEyQixDQUFDLGdDQUFnQztvQkFDckYsTUFBTSxDQUFDLGNBQWMsSUFBSSxpQ0FBMkIsQ0FBQyw0QkFBNEI7b0JBRWpGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyx1QkFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBTU8sa0JBQWtCLENBQUMsUUFBa0M7UUFDM0QsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSx1QkFBaUIsQ0FBQyxZQUFZO2dCQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHVCQUFpQixDQUFDLE1BQU07Z0JBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksdUJBQWlCLENBQUMsUUFBUTtnQkFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSx1QkFBaUIsQ0FBQyxRQUFRO2dCQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHVCQUFpQixDQUFDLGFBQWE7Z0JBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksdUJBQWlCLENBQUMsS0FBSztnQkFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSx1QkFBaUIsQ0FBQyxHQUFHO2dCQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHVCQUFpQixDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLHVCQUFpQixDQUFDLGdCQUFnQjtnQkFDbEcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksdUJBQWlCLENBQUMsYUFBYTtnQkFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFNTyx3QkFBd0IsQ0FBQyxNQUE0QjtRQUMzRCxJQUFJLFdBQVcsR0FBRywyQkFBWSxDQUFDLGNBQWMsQ0FBQztRQUM5QyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixRQUFRLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM5QixLQUFLLGlDQUEyQixDQUFDLE9BQU87Z0JBQ3RDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztnQkFDbkMsV0FBVyxHQUFHLDJCQUFZLENBQUMsaUJBQWlCLENBQUM7Z0JBQzdDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLHFCQUFxQjtnQkFDcEQsaUJBQWlCLEdBQUcsOEJBQThCLENBQUM7Z0JBQ25ELFdBQVcsR0FBRywyQkFBWSxDQUFDLGlCQUFpQixDQUFDO2dCQUM3QyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyx3QkFBd0I7Z0JBQ3ZELGlCQUFpQixHQUFHLGlDQUFpQyxDQUFDO2dCQUN0RCxXQUFXLEdBQUcsMkJBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDN0MsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsNkJBQTZCO2dCQUM1RCxpQkFBaUIsR0FBRyx3Q0FBd0MsQ0FBQztnQkFDN0QsV0FBVyxHQUFHLDJCQUFZLENBQUMsaUJBQWlCLENBQUM7Z0JBQzdDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLGdDQUFnQztnQkFDL0QsaUJBQWlCLEdBQUcsd0NBQXdDLENBQUM7Z0JBQzdELFdBQVcsR0FBRywyQkFBWSxDQUFDLGVBQWUsQ0FBQztnQkFDM0MsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsT0FBTztnQkFDdEMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO2dCQUM3QixXQUFXLEdBQUcsMkJBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLDRCQUE0QjtnQkFDM0QsaUJBQWlCLEdBQUcsdUZBQXVGLENBQUM7Z0JBQzVHLFdBQVcsR0FBRywyQkFBWSxDQUFDLGNBQWMsQ0FBQztnQkFDMUMsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsaUJBQWlCO2dCQUNoRCxpQkFBaUIsR0FBRyw0RUFBNEUsQ0FBQztnQkFDakcsV0FBVyxHQUFHLDJCQUFZLENBQUMsY0FBYyxDQUFDO2dCQUMxQyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyxvQkFBb0I7Z0JBQ25ELGlCQUFpQixHQUFHLDZDQUE2QyxDQUFDO2dCQUNsRSxXQUFXLEdBQUcsMkJBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLGNBQWM7Z0JBQzdDLGlCQUFpQixHQUFHLDBCQUEwQixDQUFDO2dCQUMvQyxXQUFXLEdBQUcsMkJBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLGVBQWU7Z0JBQzlDLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDO2dCQUM5QyxXQUFXLEdBQUcsMkJBQVksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLDhCQUE4QjtnQkFDN0QsaUJBQWlCLEdBQUcsMkNBQTJDLENBQUM7Z0JBQ2hFLFdBQVcsR0FBRywyQkFBWSxDQUFDLGNBQWMsQ0FBQztnQkFDMUMsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsT0FBTztnQkFDdEMsaUJBQWlCLEdBQUcsNEJBQTRCLENBQUM7Z0JBQ2pELFdBQVcsR0FBRywyQkFBWSxDQUFDLGlCQUFpQixDQUFDO2dCQUM3QyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyxPQUFPO2dCQUN0QyxpQkFBaUIsR0FBRyxZQUFZLENBQUM7Z0JBQ2pDLFdBQVcsR0FBRywyQkFBWSxDQUFDLGdCQUFnQixDQUFDO2dCQUM1QyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyxpQkFBaUI7Z0JBQ2hELGlCQUFpQixHQUFHLGtDQUFrQyxDQUFDO2dCQUN2RCxXQUFXLEdBQUcsMkJBQVksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDNUMsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsa0JBQWtCO2dCQUNqRCxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQztnQkFDNUMsV0FBVyxHQUFHLDJCQUFZLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzVDLE1BQU07WUFDUixLQUFLLGlDQUEyQixDQUFDLDRCQUE0QjtnQkFDM0QsaUJBQWlCLEdBQUcsb0NBQW9DLENBQUM7Z0JBQ3pELFdBQVcsR0FBRywyQkFBWSxDQUFDLGVBQWUsQ0FBQztnQkFDM0MsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMsZUFBZTtnQkFDOUMsaUJBQWlCLEdBQUcseUNBQXlDLENBQUM7Z0JBQzlELFdBQVcsR0FBRywyQkFBWSxDQUFDLGdCQUFnQixDQUFDO2dCQUM1QyxNQUFNO1lBQ1IsS0FBSyxpQ0FBMkIsQ0FBQyxtQkFBbUI7Z0JBQ2xELGlCQUFpQixHQUFHLHFDQUFxQyxDQUFDO2dCQUMxRCxXQUFXLEdBQUcsMkJBQVksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDNUMsTUFBTTtZQUNSLEtBQUssaUNBQTJCLENBQUMscUJBQXFCO2dCQUNwRCxpQkFBaUIsR0FBRyxzREFBc0QsQ0FBQztnQkFDM0UsV0FBVyxHQUFHLDJCQUFZLENBQUMsaUJBQWlCLENBQUM7Z0JBQzdDLE1BQU07WUFDUjtnQkFDRSxrQkFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksaUJBQWlCLEdBQUcsMkJBQVksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDcEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsY0FBYyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBR0Y7QUE5UEQsd0VBOFBDIn0=