@broadcom/endevor-for-zowe-cli
Version:
Endevor Plug-in for Zowe CLI
265 lines • 29.7 kB
JavaScript
;
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.EndevorSyncActionUtils = void 0;
const lodash_1 = require("lodash");
const CacheUtils_1 = require("../CacheUtils");
const IEndevorWorkspaceEnums_1 = require("../doc/IEndevorWorkspaceEnums");
const WorkspaceUtils_1 = require("../WorkspaceUtils");
const fs = require("fs");
const RetrieveElement_1 = require("../../elements/RetrieveElement");
const EndevorUtils_1 = require("../../utils/EndevorUtils");
const ListElement_1 = require("../../metadata/ListElement");
class EndevorSyncActionUtils {
static performLocalDelete(action) {
if (fs.existsSync(action.element.localFile)) {
fs.unlinkSync(action.element.localFile);
WorkspaceUtils_1.WorkspaceUtils.cleanupParentDirs(action.element.localFile);
}
CacheUtils_1.CacheUtils.removeSha1File(action.element.localFileVersion);
action.element.localStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.MISSING;
action.element.remoteStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.MISSING;
action.element.mergeStatus = IEndevorWorkspaceEnums_1.ElementVersionStatus.MISSING;
action.element.localFileVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceFileVersion);
action.element.localElmVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceElementVersion);
action.element.remoteElmVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceElementVersion);
action.element.mergeElmVersion = (0, lodash_1.cloneDeep)(WorkspaceUtils_1.WorkspaceUtils.EmptyWorkspaceElementVersion);
}
static retrieveElm(action, session, instance, ccid, comment, optSignout, optOverrideSignout, location, searchMap, expectedFingerprint, charset, codePage) {
return __awaiter(this, void 0, void 0, function* () {
const retrieveOptions = {
path: "log",
return: "fir",
search: searchMap ? "yes" : "no",
ccid: ccid,
comment: comment,
signout: optSignout ? "yes" : "no",
oveSign: optOverrideSignout ? "yes" : "no"
};
try {
const restResponse = yield RetrieveElement_1.RetrieveElement.retrieveElement(session, instance, location, retrieveOptions, charset);
if (restResponse.isResponseJSON) {
let notFound = false;
let stcShortage = false;
let oveSignNeeded = false;
EndevorUtils_1.EndevorUtils.removeMessageTimestamps(restResponse.body.messages).forEach((message) => {
if (message.startsWith("API0000W ELEMENT NOT FOUND")) {
notFound = true;
}
if (message.startsWith("EWS1111E")) {
stcShortage = true;
}
if (message.startsWith("C1G0167E")) {
oveSignNeeded = true;
action.errorMessages.push(message);
}
});
if (notFound) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_NOT_FOUND;
return Promise.reject();
}
if (stcShortage) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE;
return Promise.reject();
}
if (oveSignNeeded) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_SIGNOUT;
return Promise.reject();
}
if (restResponse.body.data[0] == null) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
action.errorMessages = restResponse.body.messages;
return Promise.reject();
}
}
if (restResponse.body.data[0] == null || restResponse.body.returnCode > 8) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
action.errorMessages = restResponse.body.messages;
return Promise.reject();
}
const body = restResponse.body.data[0];
let fingerprint = restResponse.headers["fingerprint"];
if (fingerprint != null && fingerprint.length > 16) {
fingerprint = fingerprint.slice(fingerprint.length - 16);
}
if (expectedFingerprint != undefined && fingerprint != expectedFingerprint) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_FINGERPRINT_MISMATCH;
action.errorMessages.push(...restResponse.body.messages);
if (fingerprint == null || fingerprint.length == 0) {
action.errorMessages.push("Retrieve Element didn't return a fingerprint, sync cannot proceed. Contact you Endevor web services administrator.");
}
return Promise.reject();
}
let newCharset = charset;
const contentType = restResponse.headers["content-type"];
if (contentType) {
const contentTypeSplit = contentType.split("charset=");
if (contentTypeSplit.length == 2) {
newCharset = contentTypeSplit[1];
}
}
if (action.element.fileCharset && action.element.fileCharset != newCharset) {
action.errorMessages.push(`Endevor WS charset change: ${action.element.fileCharset} => ${newCharset}`);
}
action.element.fileCharset = newCharset;
let newCodePage = codePage;
const codePageHdr = restResponse.headers["x-broadcom-source-charset"];
if (codePageHdr) {
newCodePage = codePageHdr;
}
if (action.element.codePage && action.element.codePage != newCodePage) {
action.errorMessages.push(`Endevor WS source code page change: ${action.element.codePage} => ${newCodePage}`);
}
action.element.codePage = newCodePage;
return body;
}
catch (err) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
action.errorMessages.push(`${err}`);
return Promise.reject();
}
});
}
static listElement(action_1, session_1, instance_1, location_1, searchMap_1, returnFirst_1, logicalPath_1) {
return __awaiter(this, arguments, void 0, function* (action, session, instance, location, searchMap, returnFirst, logicalPath, failActionOnError = true) {
const listOptions = {
path: logicalPath ? "log" : "phy",
return: returnFirst ? "fir" : "all",
search: searchMap ? "yes" : "no"
};
try {
const restResponse = yield ListElement_1.ListElement.listElement(session, instance, location, listOptions);
if (restResponse.isResponseJSON) {
let stcShortage = false;
EndevorUtils_1.EndevorUtils.removeMessageTimestamps(restResponse.body.messages).forEach((message) => {
if (message.startsWith("EWS1111E")) {
stcShortage = true;
}
});
if (stcShortage) {
if (failActionOnError) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE_STC_SHORTAGE;
return Promise.reject();
}
}
if (restResponse.body.data == null || restResponse.body.returnCode > 8) {
if (failActionOnError) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
action.errorMessages.push(`Failed to list elements ${location.element}.${location.type} at ${location.environment}/${location.stageNumber}/${location.system}/${location.subsystem}`);
action.errorMessages.push(...restResponse.body.messages);
}
return Promise.reject();
}
return restResponse.body.data;
}
else {
if (failActionOnError) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
action.errorMessages.push(`Failed to list elements ${location.element}.${location.type} at ${location.environment}/${location.stageNumber}/${location.system}/${location.subsystem}`);
}
return Promise.reject();
}
}
catch (err) {
if (failActionOnError) {
action.status = IEndevorWorkspaceEnums_1.EndevorActionStatus.FAILURE;
action.statusDetailed = IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.FAILURE;
action.errorMessages.push(`Failed to list elements ${location.element}.${location.type} at ${location.environment}/${location.stageNumber}/${location.system}/${location.subsystem}`);
action.errorMessages.push(`${err}`);
}
return Promise.reject();
}
});
}
static composeActionsSummaryMsg(state, actions, successSG, successPL, failureSG, failurePL, notExecSG, notExecPL) {
let successCount = 0;
let warningCount = 0;
let notExecCount = 0;
let failCount = 0;
actions.forEach((action) => {
if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.SUCCESS)
successCount++;
else if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.WARNING)
warningCount++;
else if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.NOT_RUN)
notExecCount++;
else
failCount++;
});
if (actions.length > 0) {
if (successCount > 0) {
if (warningCount > 0) {
state.warningMessages.push(`${successCount + warningCount} ${successCount + warningCount > 1 ? successPL : successSG} - ${warningCount} with warning(s).`);
}
else {
state.infoMessages.push(`${successCount} ${successCount > 1 ? successPL : successSG}`);
}
}
if (failCount > 0) {
state.warningMessages.push(`${failCount} ${failCount > 1 ? failurePL : failureSG}`);
}
if (notExecCount > 0) {
state.infoMessages.push(`${notExecCount} ${notExecCount > 1 ? notExecPL : notExecSG}`);
}
}
return;
}
static composeActionsSummaryMsgForMerges(state, actions, successSG, successPL, autoMergeSG, autoMergePL, conflictSG, conflictPL, failureSG, failurePL, notExecSG, notExecPL) {
let automergeCount = 0;
let conflictCount = 0;
let genericSuccessCount = 0;
let notExecCount = 0;
let failCount = 0;
actions.forEach((action) => {
if (action.statusDetailed == IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_AUTOMERGED)
automergeCount++;
else if (action.statusDetailed == IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.SUCCESS_MANUAL_MERGE_STARTED)
conflictCount++;
else if (action.statusDetailed == IEndevorWorkspaceEnums_1.EndevorActionStatusDetailed.NOT_RUN_MANUAL_MERGE_IN_PROGRESS)
conflictCount++;
else if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.SUCCESS)
genericSuccessCount++;
else if (action.status == IEndevorWorkspaceEnums_1.EndevorActionStatus.NOT_RUN)
notExecCount++;
else
failCount++;
});
if (actions.length > 0) {
if (automergeCount > 0) {
state.infoMessages.push(`${automergeCount} ${automergeCount > 1 ? autoMergePL : autoMergeSG}`);
}
if (conflictCount > 0) {
state.infoMessages.push(`${conflictCount} ${conflictCount > 1 ? conflictPL : conflictSG}`);
}
if (genericSuccessCount > 0) {
state.infoMessages.push(`${genericSuccessCount} ${genericSuccessCount > 1 ? successPL : successSG}`);
}
if (failCount > 0) {
state.warningMessages.push(`${failCount} ${failCount > 1 ? failurePL : failureSG}`);
}
if (notExecCount > 0) {
state.infoMessages.push(`${notExecCount} ${notExecCount > 1 ? notExecPL : notExecSG}`);
}
}
}
}
exports.EndevorSyncActionUtils = EndevorSyncActionUtils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5kZXZvclN5bmNBY3Rpb25VdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd29ya3NwYWNlL2FjdGlvbnMvRW5kZXZvclN5bmNBY3Rpb25VdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUF1QkEsbUNBQW1DO0FBQ25DLDhDQUEyQztBQUMzQywwRUFBdUg7QUFFdkgsc0RBQW1EO0FBRW5ELHlCQUEwQjtBQUkxQixvRUFBaUU7QUFFakUsMkRBQXdEO0FBQ3hELDREQUF5RDtBQUl6RCxNQUFhLHNCQUFzQjtJQVExQixNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBeUI7UUFDeEQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsK0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCx1QkFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsNkNBQW9CLENBQUMsT0FBTyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLDZDQUFvQixDQUFDLE9BQU8sQ0FBQztRQUMzRCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyw2Q0FBb0IsQ0FBQyxPQUFPLENBQUM7UUFDMUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLGtCQUFTLEVBQUMsK0JBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLElBQUEsa0JBQVMsRUFBQywrQkFBYyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDeEYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLGtCQUFTLEVBQUMsK0JBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLElBQUEsa0JBQVMsRUFBQywrQkFBYyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDMUYsQ0FBQztJQWlCTSxNQUFNLENBQU8sV0FBVyxDQUM3QixNQUF5QixFQUN6QixPQUFnQixFQUNoQixRQUFnQixFQUNoQixJQUFZLEVBQ1osT0FBZSxFQUNmLFVBQW1CLEVBQ25CLGtCQUEyQixFQUMzQixRQUEyQixFQUMzQixTQUFrQixFQUNsQixtQkFBdUMsRUFDdkMsT0FBZSxFQUNmLFFBQWlCOztZQUVqQixNQUFNLGVBQWUsR0FBaUM7Z0JBQ3BELElBQUksRUFBRSxLQUFLO2dCQUNYLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDaEMsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDbEMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDM0MsQ0FBQztZQUNGLElBQUksQ0FBQztnQkFDSCxNQUFNLFlBQVksR0FBaUMsTUFBTSxpQ0FBZSxDQUFDLGVBQWUsQ0FDdEYsT0FBTyxFQUNQLFFBQVEsRUFDUixRQUFRLEVBQ1IsZUFBZSxFQUNmLE9BQU8sQ0FDUixDQUFDO2dCQUVGLElBQUksWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNoQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDeEIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO29CQUMxQiwyQkFBWSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ25GLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLENBQUM7NEJBQ3RELFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ2xCLENBQUM7d0JBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7NEJBQ25DLFdBQVcsR0FBRyxJQUFJLENBQUM7d0JBQ3JCLENBQUM7d0JBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7NEJBQ25DLGFBQWEsR0FBRyxJQUFJLENBQUM7NEJBQ3JCLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNyQyxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksUUFBUSxFQUFFLENBQUM7d0JBQ2IsTUFBTSxDQUFDLE1BQU0sR0FBRyw0Q0FBbUIsQ0FBQyxPQUFPLENBQUM7d0JBQzVDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsb0RBQTJCLENBQUMsaUJBQWlCLENBQUM7d0JBQ3RFLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUMxQixDQUFDO29CQUNELElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ2hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsNENBQW1CLENBQUMsT0FBTyxDQUFDO3dCQUM1QyxNQUFNLENBQUMsY0FBYyxHQUFHLG9EQUEyQixDQUFDLG9CQUFvQixDQUFDO3dCQUN6RSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNsQixNQUFNLENBQUMsTUFBTSxHQUFHLDRDQUFtQixDQUFDLE9BQU8sQ0FBQzt3QkFDNUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxvREFBMkIsQ0FBQyxlQUFlLENBQUM7d0JBQ3BFLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUMxQixDQUFDO29CQUNELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7d0JBQ3RDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsNENBQW1CLENBQUMsT0FBTyxDQUFDO3dCQUM1QyxNQUFNLENBQUMsY0FBYyxHQUFHLG9EQUEyQixDQUFDLE9BQU8sQ0FBQzt3QkFDNUQsTUFBTSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzt3QkFDbEQsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDMUUsTUFBTSxDQUFDLE1BQU0sR0FBRyw0Q0FBbUIsQ0FBQyxPQUFPLENBQUM7b0JBQzVDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsb0RBQTJCLENBQUMsT0FBTyxDQUFDO29CQUM1RCxNQUFNLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUNsRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFFRCxNQUFNLElBQUksR0FBVyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxXQUFXLEdBQVcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQVcsQ0FBQztnQkFHeEUsSUFBSSxXQUFXLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQ25ELFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzNELENBQUM7Z0JBRUQsSUFBSSxtQkFBbUIsSUFBSSxTQUFTLElBQUksV0FBVyxJQUFJLG1CQUFtQixFQUFFLENBQUM7b0JBQzNFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsNENBQW1CLENBQUMsT0FBTyxDQUFDO29CQUM1QyxNQUFNLENBQUMsY0FBYyxHQUFHLG9EQUEyQixDQUFDLDRCQUE0QixDQUFDO29CQUNqRixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pELElBQUksV0FBVyxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNuRCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdkIsb0hBQW9ILENBQ3JILENBQUM7b0JBQ0osQ0FBQztvQkFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztnQkFFRCxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUM7Z0JBQ3pCLE1BQU0sV0FBVyxHQUFXLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFXLENBQUM7Z0JBQzNFLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLE1BQU0sZ0JBQWdCLEdBQWEsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2pDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQzNFLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDhCQUE4QixNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsT0FBTyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RyxDQUFDO2dCQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztnQkFDeEMsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUMzQixNQUFNLFdBQVcsR0FBVyxZQUFZLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFXLENBQUM7Z0JBQ3hGLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLFdBQVcsR0FBRyxXQUFXLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDdEUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUNBQXVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxPQUFPLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ2hILENBQUM7Z0JBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO2dCQUN0QyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxNQUFNLEdBQUcsNENBQW1CLENBQUMsT0FBTyxDQUFDO2dCQUM1QyxNQUFNLENBQUMsY0FBYyxHQUFHLG9EQUEyQixDQUFDLE9BQU8sQ0FBQztnQkFDNUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztLQUFBO0lBZU0sTUFBTSxDQUFPLFdBQVc7NkRBQzdCLE1BQXlCLEVBQ3pCLE9BQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLFFBQTJCLEVBQzNCLFNBQWtCLEVBQ2xCLFdBQW9CLEVBQ3BCLFdBQW9CLEVBQ3BCLGlCQUFpQixHQUFHLElBQUk7WUFFeEIsTUFBTSxXQUFXLEdBQThCO2dCQUM3QyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQ2pDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDbkMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQ2pDLENBQUM7WUFDRixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxZQUFZLEdBQTBDLE1BQU0seUJBQVcsQ0FBQyxXQUFXLENBQ3ZGLE9BQU8sRUFDUCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFdBQVcsQ0FDWixDQUFDO2dCQUVGLElBQUksWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNoQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLDJCQUFZLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTt3QkFDbkYsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7NEJBQ25DLFdBQVcsR0FBRyxJQUFJLENBQUM7d0JBQ3JCLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxpQkFBaUIsRUFBRSxDQUFDOzRCQUN0QixNQUFNLENBQUMsTUFBTSxHQUFHLDRDQUFtQixDQUFDLE9BQU8sQ0FBQzs0QkFDNUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxvREFBMkIsQ0FBQyxvQkFBb0IsQ0FBQzs0QkFDekUsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQzFCLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDdkUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDOzRCQUN0QixNQUFNLENBQUMsTUFBTSxHQUFHLDRDQUFtQixDQUFDLE9BQU8sQ0FBQzs0QkFDNUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxvREFBMkIsQ0FBQyxPQUFPLENBQUM7NEJBQzVELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUN2QiwyQkFBMkIsUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxPQUFPLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FDM0osQ0FBQzs0QkFDRixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzNELENBQUM7d0JBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzFCLENBQUM7b0JBQ0QsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDaEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksaUJBQWlCLEVBQUUsQ0FBQzt3QkFDdEIsTUFBTSxDQUFDLE1BQU0sR0FBRyw0Q0FBbUIsQ0FBQyxPQUFPLENBQUM7d0JBQzVDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsb0RBQTJCLENBQUMsT0FBTyxDQUFDO3dCQUM1RCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdkIsMkJBQTJCLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksT0FBTyxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQzNKLENBQUM7b0JBQ0osQ0FBQztvQkFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksaUJBQWlCLEVBQUUsQ0FBQztvQkFDdEIsTUFBTSxDQUFDLE1BQU0sR0FBRyw0Q0FBbUIsQ0FBQyxPQUFPLENBQUM7b0JBQzVDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsb0RBQTJCLENBQUMsT0FBTyxDQUFDO29CQUM1RCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdkIsMkJBQTJCLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksT0FBTyxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQzNKLENBQUM7b0JBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO0tBQUE7SUFjTSxNQUFNLENBQUMsd0JBQXdCLENBQ3BDLEtBQTZCLEVBQzdCLE9BQTRCLEVBQzVCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCO1FBRWpCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVsQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDekIsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLDRDQUFtQixDQUFDLE9BQU87Z0JBQUUsWUFBWSxFQUFFLENBQUM7aUJBQzVELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSw0Q0FBbUIsQ0FBQyxPQUFPO2dCQUFFLFlBQVksRUFBRSxDQUFDO2lCQUNqRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksNENBQW1CLENBQUMsT0FBTztnQkFBRSxZQUFZLEVBQUUsQ0FBQzs7Z0JBQ2pFLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3hCLEdBQUcsWUFBWSxHQUFHLFlBQVksSUFDNUIsWUFBWSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FDaEQsTUFBTSxZQUFZLG1CQUFtQixDQUN0QyxDQUFDO2dCQUNKLENBQUM7cUJBQU0sQ0FBQztvQkFDTixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pGLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBQ0QsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN6RixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBZ0JNLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FDN0MsS0FBNkIsRUFDN0IsT0FBNEIsRUFDNUIsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsV0FBbUIsRUFDbkIsVUFBa0IsRUFDbEIsVUFBa0IsRUFDbEIsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsU0FBaUI7UUFFakIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN6QixJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksb0RBQTJCLENBQUMsa0JBQWtCO2dCQUFFLGNBQWMsRUFBRSxDQUFDO2lCQUN6RixJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksb0RBQTJCLENBQUMsNEJBQTRCO2dCQUFFLGFBQWEsRUFBRSxDQUFDO2lCQUN2RyxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksb0RBQTJCLENBQUMsZ0NBQWdDO2dCQUFFLGFBQWEsRUFBRSxDQUFDO2lCQUMzRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksNENBQW1CLENBQUMsT0FBTztnQkFBRSxtQkFBbUIsRUFBRSxDQUFDO2lCQUN4RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksNENBQW1CLENBQUMsT0FBTztnQkFBRSxZQUFZLEVBQUUsQ0FBQzs7Z0JBQ2pFLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksY0FBYyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLGNBQWMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakcsQ0FBQztZQUNELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDN0YsQ0FBQztZQUNELElBQUksbUJBQW1CLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDdkcsQ0FBQztZQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQixLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDekYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE3V0Qsd0RBNldDIn0=