ice-utilities
Version:
Utilities for manage arrays, breadcrumb, dom elements, dates, injectors, local storage, login, objects, router animations, router, session storage, strings and translate utilities, encryption, for angular 6+ with ECMAScript 6 - ECMAScript 2015
260 lines • 19.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { SessionUtils } from './sessionUtils';
import { StringUtils } from './stringUtils';
import { ObjectUtils } from './objectUtils';
import { TranslateUtils } from './translateUtils';
import notify from 'devextreme/ui/notify';
// @dynamic
/**
* @abstract
*/
export class GlobalUtils {
/**
* @param {?} responsiveWidth
* @return {?}
*/
static setResponsiveWidth(responsiveWidth) {
if (!this.responsiveWidth && responsiveWidth) {
this.responsiveWidth = responsiveWidth;
}
}
/**
* @param {?} timeshow
* @return {?}
*/
static setTimeShow(timeshow) {
if (!this.timeshow && timeshow) {
this.timeshow = timeshow;
}
}
/**
* @param {?} obj1
* @param {?} obj2
* @return {?}
*/
static areEquals(obj1, obj2) {
return JSON.stringify(obj1) === JSON.stringify(obj2);
}
/**
* @param {?} data
* @return {?}
*/
static isEmptyData(data) {
return (this.areEquals(data, '') || this.areEquals(data, 0) || data === null || this.areEquals(data, {}) || this.areEquals(data, []));
}
/**
* @param {?} data
* @return {?}
*/
static isUndefined(data) {
return typeof data === 'undefined';
}
/**
* @param {?} name
* @return {?}
*/
static setSysname(name) {
SessionUtils.setSession('sysname', name);
}
/**
* @return {?}
*/
static getSysname() {
return SessionUtils.getSession('sysname');
}
/**
* @param {?} width
* @param {?} actstt
* @return {?}
*/
static autoFixSidebarState(width, actstt) {
if (width <= this.responsiveWidth) {
return 'inres';
}
else {
if (actstt === 'inres') {
return 'out';
}
else {
return actstt;
}
}
}
/**
* @param {?} stt
* @param {?} width
* @param {?} actstt
* @param {?} responsiveWidth
* @return {?}
*/
static fixsidebarState(stt, width, actstt, responsiveWidth) {
if (width <= responsiveWidth) {
if (actstt === 'inres') {
return 'in';
}
else {
return 'inres';
}
}
else {
return stt;
}
}
/**
* @param {?} stt
* @param {?} width
* @param {?} responsiveWidth
* @return {?}
*/
static fixContainerState(stt, width, responsiveWidth) {
if (width <= responsiveWidth) {
return 'inres';
}
else {
return stt;
}
}
/**
* @param {?} men
* @param {?} data
* @return {?}
*/
static successNotify(men, data) {
notify(TranslateUtils.Translate(men) + ' '
+ JSON.stringify(data), 'success', this.timeshow);
}
/**
* @param {?} error
* @param {?} men
* @param {?=} type
* @return {?}
*/
static cathNotify(error, men, type = 'warning') {
/** @type {?} */
const tmen = TranslateUtils.Translate(men);
this.notifyError(tmen, error, type);
}
/**
* @private
* @param {?} tmen
* @param {?} error
* @param {?} type
* @return {?}
*/
static notifyError(tmen, error, type) {
notify(`${tmen} :${this.errorCath(error)}`, type, this.timeshow);
if (type === 'error') {
throw new Error(tmen);
}
}
/**
* @param {?} error
* @param {?} men
* @param {?} extraMen
* @param {?=} type
* @return {?}
*/
static cathNotifyExtraMen(error, men, extraMen, type = 'warning') {
/** @type {?} */
const tmen = `${TranslateUtils.Translate(men)} ${extraMen}`;
this.notifyError(tmen, error, type);
}
/**
* @param {?} error
* @return {?}
*/
static errorCath(error) {
/** @type {?} */
let errorMen = '';
if (StringUtils.isString(error)) {
errorMen = error;
}
else if (ObjectUtils.isObject(error)) {
if (error.error) {
if (StringUtils.isString(error.error)) {
errorMen = error.error;
}
else if (ObjectUtils.isObject(error.error) && error.error.ResponseStatus) {
if (error.error.ResponseStatus.Message) {
errorMen = error.error.ResponseStatus.Message;
}
else if (error.error.ResponseStatus.ErrorCode) {
errorMen = error.error.ResponseStatus.ErrorCode;
}
}
else if (StringUtils.isString(error.message)) {
errorMen = error.message;
}
}
else {
if (error.message) {
errorMen = error.message;
}
else if (error.statusText) {
errorMen = error.statusText;
}
}
}
return TranslateUtils.Translate(errorMen);
}
/**
* @return {?}
*/
static getNativeWindow() {
return window;
}
/**
* @param {?} url
* @param {?=} config
* @return {?}
*/
static openWindow(url, config) {
return window.open(url, '', 'location=no,width=1800,height=900,scrollbars=yes,top=100,left=700,resizable = no');
}
/**
* @param {?=} whm
* @return {?}
*/
static setWithHeight(whm) {
if (whm && whm.fullScreen) {
return {
fullscreen: 1,
};
}
/** @type {?} */
let mm = 1.5;
if (whm && whm.Media) {
mm = whm.Media;
}
/** @type {?} */
const val = {
width: window.innerWidth / mm,
height: window.innerHeight / mm
};
if (whm && whm.hasOwnProperty('width')) {
val.width = whm.width;
}
if (whm && whm.hasOwnProperty('height')) {
val.height = whm.height;
}
return val;
}
}
GlobalUtils.responsiveWidth = 960;
GlobalUtils.timeshow = 8000;
if (false) {
/**
* @type {?}
* @private
*/
GlobalUtils.responsiveWidth;
/**
* @type {?}
* @private
*/
GlobalUtils.timeshow;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsVXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pY2UtdXRpbGl0aWVzLyIsInNvdXJjZXMiOlsibGliL3V0aWxpdGllcy9nbG9iYWxVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxNQUFNLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBRzFDLE1BQU0sT0FBZ0IsV0FBVzs7Ozs7SUFHL0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGVBQXVCO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsRUFBRTtZQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztTQUN4QztJQUNILENBQUM7Ozs7O0lBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFnQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDMUI7SUFDSCxDQUFDOzs7Ozs7SUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQVMsRUFBRSxJQUFTO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Ozs7O0lBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFTO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekksQ0FBQzs7Ozs7SUFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQVM7UUFDMUIsT0FBTyxPQUFPLElBQUksS0FBSyxXQUFXLENBQUM7SUFDckMsQ0FBQzs7Ozs7SUFDRCxNQUFNLENBQUMsVUFBVSxDQUFFLElBQVk7UUFDN0IsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7OztJQUNELE1BQU0sQ0FBQyxVQUFVO1FBQ2YsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7Ozs7OztJQUNELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBRSxLQUFhLEVBQUUsTUFBYztRQUN2RCxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2pDLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO2FBQU07WUFDTCxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7aUJBQU07Z0JBQ0wsT0FBTyxNQUFNLENBQUM7YUFDZjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7Ozs7SUFDRCxNQUFNLENBQUMsZUFBZSxDQUFFLEdBQVcsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLGVBQXVCO1FBQ3pGLElBQUksS0FBSyxJQUFJLGVBQWUsRUFBRTtZQUM1QixJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxPQUFPLENBQUM7YUFDaEI7U0FDRjthQUFNO1lBQ0wsT0FBTyxHQUFHLENBQUM7U0FDWjtJQUNILENBQUM7Ozs7Ozs7SUFDRCxNQUFNLENBQUMsaUJBQWlCLENBQUUsR0FBVyxFQUFFLEtBQWEsRUFBRSxlQUF1QjtRQUMzRSxJQUFJLEtBQUssSUFBSSxlQUFlLEVBQUU7WUFDNUIsT0FBTyxPQUFPLENBQUM7U0FDaEI7YUFBTTtZQUNMLE9BQU8sR0FBRyxDQUFDO1NBQ1o7SUFDSCxDQUFDOzs7Ozs7SUFDRCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQVcsRUFBRSxJQUFTO1FBQ3pDLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUc7Y0FDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Ozs7Ozs7SUFDRCxNQUFNLENBQUMsVUFBVSxDQUFFLEtBQUssRUFBRSxHQUFXLEVBQUUsSUFBSSxHQUFHLFNBQVM7O2NBQzdDLElBQUksR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7Ozs7Ozs7SUFDTyxNQUFNLENBQUMsV0FBVyxDQUFFLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBWTtRQUNqRSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakUsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDOzs7Ozs7OztJQUNELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBRSxLQUFLLEVBQUUsR0FBVyxFQUFFLFFBQWdCLEVBQUUsSUFBSSxHQUFHLFNBQVM7O2NBQ3pFLElBQUksR0FBRyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxFQUFFO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDOzs7OztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQUUsS0FBVTs7WUFDdEIsUUFBUSxHQUFHLEVBQUU7UUFDakIsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQy9CLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDbEI7YUFBTyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUNmLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3JDLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUN4QjtxQkFBTSxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO29CQUMxRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRTt3QkFDdEMsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztxQkFDL0M7eUJBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7d0JBQy9DLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7cUJBQ2pEO2lCQUNGO3FCQUFNLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzlDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2lCQUMxQjthQUNGO2lCQUFNO2dCQUNMLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtvQkFDakIsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7aUJBQzFCO3FCQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtvQkFDM0IsUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7aUJBQzdCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDOzs7O0lBQ0QsTUFBTSxDQUFDLGVBQWU7UUFDcEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Ozs7O0lBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFXLEVBQUUsTUFBWTtRQUN6QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxrRkFBa0YsQ0FBQyxDQUFDO0lBQ2xILENBQUM7Ozs7O0lBQ0QsTUFBTSxDQUFDLGFBQWEsQ0FBRSxHQUFvQjtRQUN4QyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLE9BQU87Z0JBQ0gsVUFBVSxFQUFFLENBQUM7YUFDaEIsQ0FBQztTQUNMOztZQUNHLEVBQUUsR0FBRyxHQUFHO1FBQ1osSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtZQUNwQixFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztTQUNoQjs7Y0FDSyxHQUFHLEdBQUc7WUFDVixLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFO1lBQzdCLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUU7U0FDaEM7UUFDRCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3RDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztTQUN2QjtRQUNELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkMsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOztBQWhJYywyQkFBZSxHQUFHLEdBQUcsQ0FBQztBQUN0QixvQkFBUSxHQUFHLElBQUksQ0FBQzs7Ozs7O0lBRC9CLDRCQUFxQzs7Ozs7SUFDckMscUJBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXNzaW9uVXRpbHN9IGZyb20gJy4vc2Vzc2lvblV0aWxzJztcclxuaW1wb3J0IHtTdHJpbmdVdGlsc30gZnJvbSAnLi9zdHJpbmdVdGlscyc7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gJy4vb2JqZWN0VXRpbHMnO1xyXG5pbXBvcnQge1RyYW5zbGF0ZVV0aWxzfSBmcm9tICcuL3RyYW5zbGF0ZVV0aWxzJztcclxuaW1wb3J0IG5vdGlmeSBmcm9tICdkZXZleHRyZW1lL3VpL25vdGlmeSc7XHJcbmltcG9ydCB7V2lkdGhIZWlnaHRNZWR9IGZyb20gJy4uL2ludGVyZmFjZXMvV2lkdGhIZWlnaHRNZWQnO1xyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2xvYmFsVXRpbHMge1xyXG4gIHByaXZhdGUgc3RhdGljIHJlc3BvbnNpdmVXaWR0aCA9IDk2MDtcclxuICBwcml2YXRlIHN0YXRpYyB0aW1lc2hvdyA9IDgwMDA7XHJcbiAgc3RhdGljIHNldFJlc3BvbnNpdmVXaWR0aChyZXNwb25zaXZlV2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJlc3BvbnNpdmVXaWR0aCAmJiByZXNwb25zaXZlV2lkdGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaXZlV2lkdGggPSByZXNwb25zaXZlV2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBzZXRUaW1lU2hvdyh0aW1lc2hvdzogbnVtYmVyKSB7XHJcbiAgICBpZiAoIXRoaXMudGltZXNob3cgJiYgdGltZXNob3cpIHtcclxuICAgICAgdGhpcy50aW1lc2hvdyA9IHRpbWVzaG93O1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgYXJlRXF1YWxzKG9iajE6IGFueSwgb2JqMjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqMSkgPT09IEpTT04uc3RyaW5naWZ5KG9iajIpO1xyXG4gIH1cclxuICBzdGF0aWMgaXNFbXB0eURhdGEoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMuYXJlRXF1YWxzKGRhdGEsICcnKSB8fCB0aGlzLmFyZUVxdWFscyhkYXRhLCAwKSB8fCBkYXRhICA9PT0gbnVsbCB8fCB0aGlzLmFyZUVxdWFscyhkYXRhLCB7fSkgfHwgdGhpcy5hcmVFcXVhbHMoZGF0YSwgW10pKTtcclxuICB9XHJcbiAgc3RhdGljIGlzVW5kZWZpbmVkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJztcclxuICB9XHJcbiAgc3RhdGljIHNldFN5c25hbWUgKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgU2Vzc2lvblV0aWxzLnNldFNlc3Npb24oJ3N5c25hbWUnLCBuYW1lKTtcclxuICB9XHJcbiAgc3RhdGljIGdldFN5c25hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gU2Vzc2lvblV0aWxzLmdldFNlc3Npb24oJ3N5c25hbWUnKTtcclxuICB9XHJcbiAgc3RhdGljIGF1dG9GaXhTaWRlYmFyU3RhdGUgKHdpZHRoOiBudW1iZXIsIGFjdHN0dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh3aWR0aCA8PSB0aGlzLnJlc3BvbnNpdmVXaWR0aCkge1xyXG4gICAgICByZXR1cm4gJ2lucmVzJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChhY3RzdHQgPT09ICdpbnJlcycpIHtcclxuICAgICAgICByZXR1cm4gJ291dCc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGFjdHN0dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgZml4c2lkZWJhclN0YXRlIChzdHQ6IHN0cmluZywgd2lkdGg6IG51bWJlciwgYWN0c3R0OiBzdHJpbmcsIHJlc3BvbnNpdmVXaWR0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICh3aWR0aCA8PSByZXNwb25zaXZlV2lkdGgpIHtcclxuICAgICAgaWYgKGFjdHN0dCA9PT0gJ2lucmVzJykge1xyXG4gICAgICAgIHJldHVybiAnaW4nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnaW5yZXMnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gc3R0O1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgZml4Q29udGFpbmVyU3RhdGUgKHN0dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCByZXNwb25zaXZlV2lkdGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAod2lkdGggPD0gcmVzcG9uc2l2ZVdpZHRoKSB7XHJcbiAgICAgIHJldHVybiAnaW5yZXMnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHN0dDtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhdGljIHN1Y2Nlc3NOb3RpZnkobWVuOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgbm90aWZ5KFRyYW5zbGF0ZVV0aWxzLlRyYW5zbGF0ZShtZW4pICsgJyAnXHJcbiAgICAgICsgSlNPTi5zdHJpbmdpZnkoZGF0YSksICdzdWNjZXNzJywgdGhpcy50aW1lc2hvdyk7XHJcbiAgfVxyXG4gIHN0YXRpYyBjYXRoTm90aWZ5IChlcnJvciwgbWVuOiBzdHJpbmcsIHR5cGUgPSAnd2FybmluZycpOiB2b2lkIHtcclxuICAgICAgY29uc3QgdG1lbiA9IFRyYW5zbGF0ZVV0aWxzLlRyYW5zbGF0ZShtZW4pO1xyXG4gICAgICB0aGlzLm5vdGlmeUVycm9yKHRtZW4sIGVycm9yLCB0eXBlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbm90aWZ5RXJyb3IgKHRtZW46IHN0cmluZywgZXJyb3I6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XHJcbiAgICAgIG5vdGlmeShgJHt0bWVufSA6JHt0aGlzLmVycm9yQ2F0aChlcnJvcil9YCwgdHlwZSwgdGhpcy50aW1lc2hvdyk7XHJcbiAgICAgIGlmICh0eXBlID09PSAnZXJyb3InKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodG1lbik7XHJcbiAgICAgIH1cclxuICB9XHJcbiAgc3RhdGljIGNhdGhOb3RpZnlFeHRyYU1lbiAoZXJyb3IsIG1lbjogc3RyaW5nLCBleHRyYU1lbjogc3RyaW5nLCB0eXBlID0gJ3dhcm5pbmcnKTogdm9pZCB7XHJcbiAgICBjb25zdCB0bWVuID0gYCR7VHJhbnNsYXRlVXRpbHMuVHJhbnNsYXRlKG1lbil9ICR7ZXh0cmFNZW59YDtcclxuICAgIHRoaXMubm90aWZ5RXJyb3IodG1lbiwgZXJyb3IsIHR5cGUpO1xyXG4gIH1cclxuICBzdGF0aWMgZXJyb3JDYXRoIChlcnJvcjogYW55KTogc3RyaW5nIHtcclxuICAgIGxldCBlcnJvck1lbiA9ICcnO1xyXG4gICAgaWYgKFN0cmluZ1V0aWxzLmlzU3RyaW5nKGVycm9yKSkge1xyXG4gICAgICBlcnJvck1lbiA9IGVycm9yO1xyXG4gICAgfSBlbHNlICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3QoZXJyb3IpKSB7XHJcbiAgICAgIGlmIChlcnJvci5lcnJvcikge1xyXG4gICAgICAgIGlmIChTdHJpbmdVdGlscy5pc1N0cmluZyhlcnJvci5lcnJvcikpIHtcclxuICAgICAgICAgIGVycm9yTWVuID0gZXJyb3IuZXJyb3I7XHJcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3RVdGlscy5pc09iamVjdChlcnJvci5lcnJvcikgJiYgZXJyb3IuZXJyb3IuUmVzcG9uc2VTdGF0dXMpIHtcclxuICAgICAgICAgIGlmIChlcnJvci5lcnJvci5SZXNwb25zZVN0YXR1cy5NZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVuID0gZXJyb3IuZXJyb3IuUmVzcG9uc2VTdGF0dXMuTWVzc2FnZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IuZXJyb3IuUmVzcG9uc2VTdGF0dXMuRXJyb3JDb2RlKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVuID0gZXJyb3IuZXJyb3IuUmVzcG9uc2VTdGF0dXMuRXJyb3JDb2RlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoU3RyaW5nVXRpbHMuaXNTdHJpbmcoZXJyb3IubWVzc2FnZSkpIHtcclxuICAgICAgICAgIGVycm9yTWVuID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgIGVycm9yTWVuID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1c1RleHQpIHtcclxuICAgICAgICAgIGVycm9yTWVuID0gZXJyb3Iuc3RhdHVzVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBUcmFuc2xhdGVVdGlscy5UcmFuc2xhdGUoZXJyb3JNZW4pO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0TmF0aXZlV2luZG93ICgpOiBXaW5kb3cge1xyXG4gICAgcmV0dXJuIHdpbmRvdztcclxuICB9XHJcbiAgc3RhdGljIG9wZW5XaW5kb3codXJsOiBzdHJpbmcsIGNvbmZpZz86IGFueSk6IFdpbmRvdyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5vcGVuKHVybCwgJycsICdsb2NhdGlvbj1ubyx3aWR0aD0xODAwLGhlaWdodD05MDAsc2Nyb2xsYmFycz15ZXMsdG9wPTEwMCxsZWZ0PTcwMCxyZXNpemFibGUgPSBubycpO1xyXG4gIH1cclxuICBzdGF0aWMgc2V0V2l0aEhlaWdodCAod2htPzogV2lkdGhIZWlnaHRNZWQpOiBhbnkge1xyXG4gICAgaWYgKHdobSAmJiB3aG0uZnVsbFNjcmVlbikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZ1bGxzY3JlZW46IDEsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBtbSA9IDEuNTtcclxuICAgIGlmICh3aG0gJiYgd2htLk1lZGlhKSB7XHJcbiAgICAgIG1tID0gd2htLk1lZGlhO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsID0ge1xyXG4gICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGggLyBtbSxcclxuICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQgLyBtbVxyXG4gICAgfTtcclxuICAgIGlmICh3aG0gJiYgd2htLmhhc093blByb3BlcnR5KCd3aWR0aCcpKSB7XHJcbiAgICAgIHZhbC53aWR0aCA9IHdobS53aWR0aDtcclxuICAgIH1cclxuICAgIGlmICh3aG0gJiYgd2htLmhhc093blByb3BlcnR5KCdoZWlnaHQnKSkge1xyXG4gICAgICB2YWwuaGVpZ2h0ID0gd2htLmhlaWdodDtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG59XHJcbiJdfQ==