@magic-xpa/utils
Version:
magic utils package
165 lines • 16.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { NString, StringBuilder } from "@magic-xpa/mscorelib";
import { SEQ_2_STR, StrUtil } from "./StrUtil";
var ChoiceUtils = /** @class */ (function () {
function ChoiceUtils() {
}
/// <summary>
/// init the display Value from string
/// </summary>
/// <param name = "choiceDispStr">the all substring separated with comma.
/// The behavior:
/// a. when have "\" before char a-z need to ignore the \ put the a-z char
/// b. when "\," -> ","
/// c. when "\-" -> "-"
/// d. when "\\" -> "\"
/// e. when "\\\\" -> "\\"
/// the display can be all string. and we don't need to check validation according to the dataType(as we do in Link
/// </param>
/// <summary>
/// init the display Value from string
/// </summary>
/// <param name = "choiceDispStr">the all substring separated with comma.
/// The behavior:
/// a. when have "\" before char a-z need to ignore the \ put the a-z char
/// b. when "\," -> ","
/// c. when "\-" -> "-"
/// d. when "\\" -> "\"
/// e. when "\\\\" -> "\\"
/// the display can be all string. and we don't need to check validation according to the dataType(as we do in Link
/// </param>
/**
* @param {?} choiceDispStr
* @param {?} removeAccelerators
* @param {?} shouldMakePrintable
* @param {?} shouldTrimOptions
* @return {?}
*/
ChoiceUtils.GetDisplayListFromString =
/// <summary>
/// init the display Value from string
/// </summary>
/// <param name = "choiceDispStr">the all substring separated with comma.
/// The behavior:
/// a. when have "\" before char a-z need to ignore the \ put the a-z char
/// b. when "\," -> ","
/// c. when "\-" -> "-"
/// d. when "\\" -> "\"
/// e. when "\\\\" -> "\\"
/// the display can be all string. and we don't need to check validation according to the dataType(as we do in Link
/// </param>
/**
* @param {?} choiceDispStr
* @param {?} removeAccelerators
* @param {?} shouldMakePrintable
* @param {?} shouldTrimOptions
* @return {?}
*/
function (choiceDispStr, removeAccelerators, shouldMakePrintable, shouldTrimOptions) {
/** @type {?} */
var fromHelp = new Array("\\\\", "\\-", "\\,");
/** @type {?} */
var toHelp = new Array("XX", "XX", "XX");
choiceDispStr = NString.TrimEnd(choiceDispStr);
/** @type {?} */
var helpStrDisp = StrUtil.searchAndReplace(choiceDispStr, fromHelp, toHelp);
/** @type {?} */
var sTok = StrUtil.tokenize(helpStrDisp, ",");
/** @type {?} */
var size = (helpStrDisp !== "" ? sTok.length : 0);
/** @type {?} */
var tokenBuffer;
/** @type {?} */
var helpTokenDisp;
/** @type {?} */
var token;
/** @type {?} */
var currPosDisp = 0;
/** @type {?} */
var nextPosDisp = 0;
/** @type {?} */
var tokenPosDisp;
/** @type {?} */
var i = 0;
/** @type {?} */
var choiceDisp = new Array(size);
for (; i < size; i++) {
nextPosDisp = currPosDisp;
nextPosDisp = helpStrDisp.indexOf(',', nextPosDisp);
if (nextPosDisp === currPosDisp)
token = helpTokenDisp = "";
else if (nextPosDisp === -1) {
token = choiceDispStr.substr(currPosDisp);
helpTokenDisp = helpStrDisp.substr(currPosDisp);
}
else {
token = choiceDispStr.substr(currPosDisp, (nextPosDisp) - (currPosDisp));
helpTokenDisp = helpStrDisp.substr(currPosDisp, (nextPosDisp) - (currPosDisp));
}
currPosDisp = nextPosDisp + 1;
if (token != null) {
token = StrUtil.ltrim(token);
if (removeAccelerators)
token = ChoiceUtils.RemoveAcclCharFromOptions(new StringBuilder(token));
helpTokenDisp = StrUtil.ltrim(helpTokenDisp);
if (removeAccelerators)
helpTokenDisp = ChoiceUtils.RemoveAcclCharFromOptions(new StringBuilder(helpTokenDisp));
}
if (helpTokenDisp.indexOf('\\') >= 0) {
tokenBuffer = new StringBuilder();
for (; tokenPosDisp < helpTokenDisp.length; tokenPosDisp++)
if (helpTokenDisp[tokenPosDisp] !== '\\')
tokenBuffer.Append(token[tokenPosDisp]);
else if (tokenPosDisp === helpTokenDisp.length - 1)
tokenBuffer.Append(' ');
token = tokenBuffer.ToString();
}
if (shouldMakePrintable) {
token = StrUtil.makePrintableTokens(token, SEQ_2_STR);
if (shouldTrimOptions) {
/** @type {?} */
var temp = NString.TrimEnd(token);
if (temp.length === 0)
choiceDisp[i] = " ";
else
choiceDisp[i] = NString.TrimEnd(token);
}
else
choiceDisp[i] = token;
}
else
choiceDisp[i] = token;
}
return choiceDisp;
};
/**
* @param {?} OptionStr
* @return {?}
*/
ChoiceUtils.RemoveAcclCharFromOptions = /**
* @param {?} OptionStr
* @return {?}
*/
function (OptionStr) {
/** @type {?} */
var i = 0;
if (OptionStr != null) {
for (; i < OptionStr.Length;) {
if (OptionStr.get_Item(i) === '&') {
if (i < OptionStr.Length - 1 && OptionStr.get_Item(i + 1) === ('&'))
i++;
OptionStr = OptionStr.Remove(i, 1);
}
else
i++;
}
}
return (OptionStr != null ? OptionStr.ToString() : null);
};
return ChoiceUtils;
}());
export { ChoiceUtils };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hvaWNlVXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFnaWMteHBhL3V0aWxzLyIsInNvdXJjZXMiOlsic3JjL0Nob2ljZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRTdDO0lBQUE7SUFxRkEsQ0FBQztJQW5GQyxhQUFhO0lBQ2Isd0NBQXdDO0lBQ3hDLGNBQWM7SUFDZCx5RUFBeUU7SUFDekUsbUJBQW1CO0lBQ25CLDRFQUE0RTtJQUM1RSx5QkFBeUI7SUFDekIseUJBQXlCO0lBQ3pCLHlCQUF5QjtJQUN6Qiw0QkFBNEI7SUFDNUIscUhBQXFIO0lBQ3JILFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQ0wsb0NBQXdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUEvQixVQUFnQyxhQUFxQixFQUFFLGtCQUEyQixFQUFFLG1CQUE0QixFQUFFLGlCQUEwQjs7WUFDdEksUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDOztZQUMxQyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7UUFDeEMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7O1lBQzNDLFdBQVcsR0FBVyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7O1lBQy9FLElBQUksR0FBYSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUM7O1lBQ25ELElBQUksR0FBVyxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFDckQsV0FBMEI7O1lBQzFCLGFBQXFCOztZQUFFLEtBQWE7O1lBQ3BDLFdBQVcsR0FBVyxDQUFDOztZQUFFLFdBQVcsR0FBRyxDQUFDOztZQUFFLFlBQVk7O1lBQUUsQ0FBQyxHQUFHLENBQUM7O1lBQzdELFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDaEMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckIsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUMxQixXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDcEQsRUFBRSxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQztnQkFDOUIsS0FBSyxHQUFHLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMxQyxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUM7Z0JBQ0osS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakYsQ0FBQztZQUNELFdBQVcsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUM7b0JBQ3JCLEtBQUssR0FBRyxXQUFXLENBQUMseUJBQXlCLENBQUMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzdDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO29CQUNyQixhQUFhLEdBQUcsV0FBVyxDQUFDLHlCQUF5QixDQUFDLElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDNUYsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsV0FBVyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsWUFBWSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFO29CQUN4RCxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDO3dCQUN2QyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxLQUFLLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUNqRCxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLENBQUM7WUFDRCxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLEtBQUssR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN0RCxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7O3dCQUNsQixJQUFJLEdBQVcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO3dCQUNwQixVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUN0QixJQUFJO3dCQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO2dCQUNELElBQUk7b0JBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSTtnQkFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3BCLENBQUM7Ozs7O0lBRU0scUNBQXlCOzs7O0lBQWhDLFVBQWlDLFNBQXdCOztZQUNuRCxDQUFDLEdBQVcsQ0FBQztRQUNqQixFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQzdCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2xFLENBQUMsRUFBRSxDQUFDO29CQUNOLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxJQUFJO29CQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1gsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQUFyRkQsSUFxRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1NFUV8yX1NUUiwgU3RyVXRpbH0gZnJvbSBcIi4vU3RyVXRpbFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENob2ljZVV0aWxzIHtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluaXQgdGhlIGRpc3BsYXkgVmFsdWUgZnJvbSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2hvaWNlRGlzcFN0clwiPnRoZSBhbGwgc3Vic3RyaW5nIHNlcGFyYXRlZCB3aXRoIGNvbW1hLlxyXG4gIC8vLyAgIFRoZSBiZWhhdmlvcjpcclxuICAvLy8gICBhLiB3aGVuIGhhdmUgXCJcXFwiIGJlZm9yZSBjaGFyIGEteiBuZWVkIHRvIGlnbm9yZSB0aGUgXFwgcHV0IHRoZSBhLXogY2hhclxyXG4gIC8vLyAgIGIuIHdoZW4gXCJcXCxcIiAtPiBcIixcIlxyXG4gIC8vLyAgIGMuIHdoZW4gXCJcXC1cIiAtPiBcIi1cIlxyXG4gIC8vLyAgIGQuIHdoZW4gXCJcXFxcXCIgLT4gXCJcXFwiXHJcbiAgLy8vICAgZS4gd2hlbiBcIlxcXFxcXFxcXCIgLT4gXCJcXFxcXCJcclxuICAvLy8gICB0aGUgZGlzcGxheSBjYW4gYmUgYWxsIHN0cmluZy4gYW5kIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdmFsaWRhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGRhdGFUeXBlKGFzIHdlIGRvIGluIExpbmtcclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgR2V0RGlzcGxheUxpc3RGcm9tU3RyaW5nKGNob2ljZURpc3BTdHI6IHN0cmluZywgcmVtb3ZlQWNjZWxlcmF0b3JzOiBib29sZWFuLCBzaG91bGRNYWtlUHJpbnRhYmxlOiBib29sZWFuLCBzaG91bGRUcmltT3B0aW9uczogYm9vbGVhbik6IHN0cmluZ1tdIHtcclxuICAgIGxldCBmcm9tSGVscCA9IG5ldyBBcnJheShcIlxcXFxcXFxcXCIsIFwiXFxcXC1cIiwgXCJcXFxcLFwiKTtcclxuICAgIGxldCB0b0hlbHAgPSBuZXcgQXJyYXkoXCJYWFwiLCBcIlhYXCIsIFwiWFhcIik7XHJcbiAgICBjaG9pY2VEaXNwU3RyID0gTlN0cmluZy5UcmltRW5kKGNob2ljZURpc3BTdHIpO1xyXG4gICAgbGV0IGhlbHBTdHJEaXNwOiBzdHJpbmcgPSBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2UoY2hvaWNlRGlzcFN0ciwgZnJvbUhlbHAsIHRvSGVscCk7XHJcbiAgICBsZXQgc1RvazogU3RyaW5nW10gPSBTdHJVdGlsLnRva2VuaXplKGhlbHBTdHJEaXNwLCBcIixcIik7XHJcbiAgICBsZXQgc2l6ZTogbnVtYmVyID0gKGhlbHBTdHJEaXNwICE9PSBcIlwiID8gc1Rvay5sZW5ndGggOiAwKTtcclxuICAgIGxldCB0b2tlbkJ1ZmZlcjogU3RyaW5nQnVpbGRlcjtcclxuICAgIGxldCBoZWxwVG9rZW5EaXNwOiBzdHJpbmcsIHRva2VuOiBzdHJpbmc7XHJcbiAgICBsZXQgY3VyclBvc0Rpc3A6IG51bWJlciA9IDAsIG5leHRQb3NEaXNwID0gMCwgdG9rZW5Qb3NEaXNwLCBpID0gMDtcclxuICAgIGxldCBjaG9pY2VEaXNwID0gbmV3IEFycmF5KHNpemUpO1xyXG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgbmV4dFBvc0Rpc3AgPSBjdXJyUG9zRGlzcDtcclxuICAgICAgbmV4dFBvc0Rpc3AgPSBoZWxwU3RyRGlzcC5pbmRleE9mKCcsJywgbmV4dFBvc0Rpc3ApO1xyXG4gICAgICBpZiAobmV4dFBvc0Rpc3AgPT09IGN1cnJQb3NEaXNwKVxyXG4gICAgICAgIHRva2VuID0gaGVscFRva2VuRGlzcCA9IFwiXCI7XHJcbiAgICAgIGVsc2UgaWYgKG5leHRQb3NEaXNwID09PSAtMSkge1xyXG4gICAgICAgIHRva2VuID0gY2hvaWNlRGlzcFN0ci5zdWJzdHIoY3VyclBvc0Rpc3ApO1xyXG4gICAgICAgIGhlbHBUb2tlbkRpc3AgPSBoZWxwU3RyRGlzcC5zdWJzdHIoY3VyclBvc0Rpc3ApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRva2VuID0gY2hvaWNlRGlzcFN0ci5zdWJzdHIoY3VyclBvc0Rpc3AsIChuZXh0UG9zRGlzcCkgLSAoY3VyclBvc0Rpc3ApKTtcclxuICAgICAgICBoZWxwVG9rZW5EaXNwID0gaGVscFN0ckRpc3Auc3Vic3RyKGN1cnJQb3NEaXNwLCAobmV4dFBvc0Rpc3ApIC0gKGN1cnJQb3NEaXNwKSk7XHJcbiAgICAgIH1cclxuICAgICAgY3VyclBvc0Rpc3AgPSBuZXh0UG9zRGlzcCArIDE7XHJcbiAgICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XHJcbiAgICAgICAgdG9rZW4gPSBTdHJVdGlsLmx0cmltKHRva2VuKTtcclxuICAgICAgICBpZiAocmVtb3ZlQWNjZWxlcmF0b3JzKVxyXG4gICAgICAgICAgdG9rZW4gPSBDaG9pY2VVdGlscy5SZW1vdmVBY2NsQ2hhckZyb21PcHRpb25zKG5ldyBTdHJpbmdCdWlsZGVyKHRva2VuKSk7XHJcbiAgICAgICAgaGVscFRva2VuRGlzcCA9IFN0clV0aWwubHRyaW0oaGVscFRva2VuRGlzcCk7XHJcbiAgICAgICAgaWYgKHJlbW92ZUFjY2VsZXJhdG9ycylcclxuICAgICAgICAgIGhlbHBUb2tlbkRpc3AgPSBDaG9pY2VVdGlscy5SZW1vdmVBY2NsQ2hhckZyb21PcHRpb25zKG5ldyBTdHJpbmdCdWlsZGVyKGhlbHBUb2tlbkRpc3ApKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGVscFRva2VuRGlzcC5pbmRleE9mKCdcXFxcJykgPj0gMCkge1xyXG4gICAgICAgIHRva2VuQnVmZmVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgICBmb3IgKDsgdG9rZW5Qb3NEaXNwIDwgaGVscFRva2VuRGlzcC5sZW5ndGg7IHRva2VuUG9zRGlzcCsrKVxyXG4gICAgICAgICAgaWYgKGhlbHBUb2tlbkRpc3BbdG9rZW5Qb3NEaXNwXSAhPT0gJ1xcXFwnKVxyXG4gICAgICAgICAgICB0b2tlbkJ1ZmZlci5BcHBlbmQodG9rZW5bdG9rZW5Qb3NEaXNwXSk7XHJcbiAgICAgICAgICBlbHNlIGlmICh0b2tlblBvc0Rpc3AgPT09IGhlbHBUb2tlbkRpc3AubGVuZ3RoIC0gMSlcclxuICAgICAgICAgICAgdG9rZW5CdWZmZXIuQXBwZW5kKCcgJyk7XHJcbiAgICAgICAgdG9rZW4gPSB0b2tlbkJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzaG91bGRNYWtlUHJpbnRhYmxlKSB7XHJcbiAgICAgICAgdG9rZW4gPSBTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnModG9rZW4sIFNFUV8yX1NUUik7XHJcbiAgICAgICAgaWYgKHNob3VsZFRyaW1PcHRpb25zKSB7XHJcbiAgICAgICAgICBsZXQgdGVtcDogc3RyaW5nID0gTlN0cmluZy5UcmltRW5kKHRva2VuKTtcclxuICAgICAgICAgIGlmICh0ZW1wLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgY2hvaWNlRGlzcFtpXSA9IFwiIFwiO1xyXG4gICAgICAgICAgZWxzZSBjaG9pY2VEaXNwW2ldID0gTlN0cmluZy5UcmltRW5kKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBjaG9pY2VEaXNwW2ldID0gdG9rZW47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBjaG9pY2VEaXNwW2ldID0gdG9rZW47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hvaWNlRGlzcDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBSZW1vdmVBY2NsQ2hhckZyb21PcHRpb25zKE9wdGlvblN0cjogU3RyaW5nQnVpbGRlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuICAgIGlmIChPcHRpb25TdHIgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKDsgaSA8IE9wdGlvblN0ci5MZW5ndGg7KSB7XHJcbiAgICAgICAgaWYgKE9wdGlvblN0ci5nZXRfSXRlbShpKSA9PT0gJyYnKSB7XHJcbiAgICAgICAgICBpZiAoaSA8IE9wdGlvblN0ci5MZW5ndGggLSAxICYmIE9wdGlvblN0ci5nZXRfSXRlbShpICsgMSkgPT09ICgnJicpKVxyXG4gICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICBPcHRpb25TdHIgPSBPcHRpb25TdHIuUmVtb3ZlKGksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChPcHRpb25TdHIgIT0gbnVsbCA/IE9wdGlvblN0ci5Ub1N0cmluZygpIDogbnVsbCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==