UNPKG

@magic-xpa/utils

Version:

magic utils package

169 lines • 19.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { StorageAttribute } from "./enums"; /// <summary> /// type checking for enum 'StorageAttribute' /// </summary> export class StorageAttributeCheck { /// <summary> /// is the both types belong to the same inner data types /// </summary> /// <param name = "type1">data type</param> /// <param name = "type2">data type</param> /** * @param {?} type1 * @param {?} type2 * @return {?} */ static isTheSameType(type1, type2) { return type1 === type2 || (StorageAttributeCheck.isTypeNumeric(type1) && StorageAttributeCheck.isTypeNumeric(type2)) || (StorageAttributeCheck.isTypeLogical(type1) && StorageAttributeCheck.isTypeLogical(type2)) || (StorageAttributeCheck.IsTypeAlphaOrUnicode(type1) && StorageAttributeCheck.IsTypeAlphaOrUnicode(type2)) || (StorageAttributeCheck.isTypeBlob(type1) && StorageAttributeCheck.isTypeBlob(type2)) || (StorageAttributeCheck.isTypeDotNet(type1) && StorageAttributeCheck.isTypeDotNet(type2)); } /** * @param {?} type * @return {?} */ static isTypeBlob(type) { return type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR; } /** * @param {?} type * @return {?} */ static isTypeAlpha(type) { return type === StorageAttribute.ALPHA || type === StorageAttribute.MEMO; } /// <summary> /// is the both types belong to the NUMERIC inner type /// </summary> /** * @param {?} type * @return {?} */ static isTypeNumeric(type) { return type === StorageAttribute.DATE || type === StorageAttribute.TIME || type === StorageAttribute.NUMERIC; } /// <summary> /// is the both types belong to the LOGICAL inner type /// </summary> /** * @param {?} type * @return {?} */ static isTypeLogical(type) { return type === StorageAttribute.BOOLEAN; } /// <summary> /// is the type is DOTNET /// </summary> /** * @param {?} type * @return {?} */ static isTypeDotNet(type) { return type === StorageAttribute.DOTNET; } /// <summary> /// is the type ALPHA or UNICODE /// </summary> /// <param name = "type">data type</param> /** * @param {?} type * @return {?} */ static IsTypeAlphaOrUnicode(type) { return type === StorageAttribute.ALPHA || type === StorageAttribute.UNICODE; } /// <summary> /// is the inner type ALPHA or UNICODE /// </summary> /// <param name = "type1">data type</param> /// <param name = "type2">data type</param> /** * @param {?} type1 * @param {?} type2 * @return {?} */ static StorageFldAlphaOrUnicode(type1, type2) { return StorageAttributeCheck.IsTypeAlphaOrUnicode(type1) && StorageAttributeCheck.IsTypeAlphaOrUnicode(type2); } /** * @param {?} type1 * @param {?} type2 * @return {?} */ static StorageFldAlphaUnicodeOrBlob(type1, type2) { /** @type {?} */ let type1AlphaOrUnicode = StorageAttributeCheck.IsTypeAlphaOrUnicode(type1); /** @type {?} */ let type2AlphaOrUnicode = StorageAttributeCheck.IsTypeAlphaOrUnicode(type2); if (type1AlphaOrUnicode && type2AlphaOrUnicode) { return true; } else { /** @type {?} */ let type1Blob = type1 === StorageAttribute.BLOB; /** @type {?} */ let type2Blob = type2 === StorageAttribute.BLOB; return ((type1AlphaOrUnicode && type2Blob) || (type2AlphaOrUnicode && type1Blob)); } } /// <summary> /// Check if types are compatible or not. /// </summary> /// <param name="sourceAttribute"></param> /// <param name="destinationAttribute"></param> /// <returns></returns> /** * @param {?} sourceAttribute * @param {?} destinationAttribute * @return {?} */ static IsTypeCompatibile(sourceAttribute, destinationAttribute) { /** @type {?} */ let isTypeCompatible = false; switch (sourceAttribute) { case StorageAttribute.ALPHA: case StorageAttribute.UNICODE: if (destinationAttribute === StorageAttribute.ALPHA || destinationAttribute === StorageAttribute.UNICODE || destinationAttribute === StorageAttribute.DATE || destinationAttribute === StorageAttribute.TIME || destinationAttribute === StorageAttribute.NUMERIC) { isTypeCompatible = true; } break; case StorageAttribute.NUMERIC: if (destinationAttribute === StorageAttribute.NUMERIC || destinationAttribute === StorageAttribute.ALPHA || destinationAttribute === StorageAttribute.UNICODE || destinationAttribute === StorageAttribute.BOOLEAN || destinationAttribute === StorageAttribute.DATE || destinationAttribute === StorageAttribute.TIME) { isTypeCompatible = true; } break; case StorageAttribute.BOOLEAN: { if (destinationAttribute === StorageAttribute.BOOLEAN || destinationAttribute === StorageAttribute.ALPHA || destinationAttribute === StorageAttribute.UNICODE || destinationAttribute === StorageAttribute.NUMERIC) { isTypeCompatible = true; } } break; case StorageAttribute.DATE: case StorageAttribute.TIME: if (destinationAttribute === StorageAttribute.ALPHA || destinationAttribute === StorageAttribute.UNICODE || destinationAttribute === StorageAttribute.NUMERIC || destinationAttribute === StorageAttribute.BOOLEAN || destinationAttribute === StorageAttribute.DATE || destinationAttribute === StorageAttribute.TIME) { isTypeCompatible = true; } break; case StorageAttribute.BLOB: if (destinationAttribute === StorageAttribute.BLOB) { isTypeCompatible = true; } break; } return isTypeCompatible; } constructor() { } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUF0dHJpYnV0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtYWdpYy14cGEvdXRpbHMvIiwic291cmNlcyI6WyJzcmMvU3RvcmFnZUF0dHJpYnV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sU0FBUyxDQUFDOzs7O0FBS3pDLE1BQU07Ozs7Ozs7Ozs7O0lBTUosTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUF1QixFQUFFLEtBQXVCO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUkscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyZixDQUFDOzs7OztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBc0I7UUFDdEMsTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztJQUNqRixDQUFDOzs7OztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBc0I7UUFDdkMsTUFBTSxDQUFD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RyxJQUFJLENBQUM7Z0JBQzFCLENBQUM7Z0JBQ0QsS0FBSyxDQUFDO1FBQ1YsQ0FBQztRQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQ7SUFDQSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0b3JhZ2VBdHRyaWJ1dGV9IGZyb20gXCIuL2VudW1zXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyB0eXBlIGNoZWNraW5nIGZvciBlbnVtICdTdG9yYWdlQXR0cmlidXRlJ1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrIHtcclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGlzIHRoZSBib3RoIHR5cGVzIGJlbG9uZyB0byB0aGUgc2FtZSBpbm5lciBkYXRhIHR5cGVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGUxXCI+ZGF0YSB0eXBlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGUyXCI+ZGF0YSB0eXBlPC9wYXJhbT5cclxuICBzdGF0aWMgaXNUaGVTYW1lVHlwZSh0eXBlMTogU3RvcmFnZUF0dHJpYnV0ZSwgdHlwZTI6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlMSA9PT0gdHlwZTIgfHwgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVOdW1lcmljKHR5cGUxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTnVtZXJpYyh0eXBlMikpIHx8IChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUeXBlTG9naWNhbCh0eXBlMSkgJiYgU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUxvZ2ljYWwodHlwZTIpKSB8fCAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHR5cGUxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodHlwZTIpKSB8fCAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUJsb2IodHlwZTEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVCbG9iKHR5cGUyKSkgfHwgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVEb3ROZXQodHlwZTEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVEb3ROZXQodHlwZTIpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc1R5cGVCbG9iKHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgfHwgdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc1R5cGVBbHBoYSh0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk1FTU87XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGlzIHRoZSBib3RoIHR5cGVzIGJlbG9uZyB0byB0aGUgTlVNRVJJQyBpbm5lciB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgaXNUeXBlTnVtZXJpYyh0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFIHx8IHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGlzIHRoZSBib3RoIHR5cGVzIGJlbG9uZyB0byB0aGUgTE9HSUNBTCBpbm5lciB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgaXNUeXBlTG9naWNhbCh0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpcyB0aGUgdHlwZSBpcyBET1RORVRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBpc1R5cGVEb3ROZXQodHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpcyB0aGUgdHlwZSBBTFBIQSBvciBVTklDT0RFXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVcIj5kYXRhIHR5cGU8L3BhcmFtPlxyXG4gIHN0YXRpYyBJc1R5cGVBbHBoYU9yVW5pY29kZSh0eXBlOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGlzIHRoZSBpbm5lciB0eXBlIEFMUEhBIG9yIFVOSUNPREVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZTFcIj5kYXRhIHR5cGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZTJcIj5kYXRhIHR5cGU8L3BhcmFtPlxyXG4gIHN0YXRpYyBTdG9yYWdlRmxkQWxwaGFPclVuaWNvZGUodHlwZTE6IFN0b3JhZ2VBdHRyaWJ1dGUsIHR5cGUyOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHR5cGUxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodHlwZTIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFN0b3JhZ2VGbGRBbHBoYVVuaWNvZGVPckJsb2IodHlwZTE6IFN0b3JhZ2VBdHRyaWJ1dGUsIHR5cGUyOiBTdG9yYWdlQXR0cmlidXRlKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdHlwZTFBbHBoYU9yVW5pY29kZTogYm9vbGVhbiA9IFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh0eXBlMSk7XHJcbiAgICBsZXQgdHlwZTJBbHBoYU9yVW5pY29kZTogYm9vbGVhbiA9IFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZSh0eXBlMik7XHJcblxyXG4gICAgaWYgKHR5cGUxQWxwaGFPclVuaWNvZGUgJiYgdHlwZTJBbHBoYU9yVW5pY29kZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgdHlwZTFCbG9iOiBib29sZWFuID0gdHlwZTEgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjtcclxuICAgICAgbGV0IHR5cGUyQmxvYjogYm9vbGVhbiA9IHR5cGUyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0I7XHJcbiAgICAgIHJldHVybiAoKHR5cGUxQWxwaGFPclVuaWNvZGUgJiYgdHlwZTJCbG9iKSB8fCAodHlwZTJBbHBoYU9yVW5pY29kZSAmJiB0eXBlMUJsb2IpKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENoZWNrIGlmIHR5cGVzIGFyZSBjb21wYXRpYmxlIG9yIG5vdC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZUF0dHJpYnV0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVzdGluYXRpb25BdHRyaWJ1dGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIElzVHlwZUNvbXBhdGliaWxlKHNvdXJjZUF0dHJpYnV0ZTogU3RvcmFnZUF0dHJpYnV0ZSwgZGVzdGluYXRpb25BdHRyaWJ1dGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1R5cGVDb21wYXRpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc3dpdGNoIChzb3VyY2VBdHRyaWJ1dGUpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBpZiAoZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FIHx8XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKSB7XHJcbiAgICAgICAgICBpc1R5cGVDb21wYXRpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICBpZiAoZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOIHx8XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpIHtcclxuICAgICAgICAgIGlzVHlwZUNvbXBhdGlibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOiB7XHJcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4gfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHxcclxuICAgICAgICAgIGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQykge1xyXG4gICAgICAgICAgaXNUeXBlQ29tcGF0aWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICBpZiAoZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fFxyXG4gICAgICAgICAgZGVzdGluYXRpb25BdHRyaWJ1dGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyB8fCBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOIHx8XHJcbiAgICAgICAgICBkZXN0aW5hdGlvbkF0dHJpYnV0ZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFIHx8IGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLlRJTUUpIHtcclxuICAgICAgICAgIGlzVHlwZUNvbXBhdGlibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uQXR0cmlidXRlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICAgIGlzVHlwZUNvbXBhdGlibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBpc1R5cGVDb21wYXRpYmxlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG59XHJcbiJdfQ==