ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
534 lines • 37.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ViewEncapsulation, Input, TemplateRef, EventEmitter, Output, HostBinding, HostListener } from '@angular/core';
var ListItemComponent = /** @class */ (function () {
function ListItemComponent() {
this.defaultProps = {
prefixCls: 'am-list',
align: 'middle',
error: false,
multipleLine: false,
wrap: false,
platform: 'ios',
rippleStyle: {}
};
this.arrowCls = {};
this.lineCls = {};
this.wrapCls = '';
this.rippleCls = {};
this.rippleClicked = false;
this._thumb_component = false;
this._thumb_src = '';
this._extra_component = false;
this._extra_title = '';
this._arrow = '';
this._disabled = false;
this._className = '';
this._active = false;
this.onClick = new EventEmitter();
}
Object.defineProperty(ListItemComponent.prototype, "extra", {
get: /**
* @return {?}
*/
function () {
return this._extra;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value instanceof TemplateRef) {
this._extra_component = true;
this._extra = value;
}
else {
this._extra_component = false;
this._extra_title = (/** @type {?} */ (value));
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "extra_component", {
get: /**
* @return {?}
*/
function () {
return this._extra_component;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "extra_title", {
get: /**
* @return {?}
*/
function () {
return this._extra_title;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "className", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._className = value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "arrow", {
get: /**
* @return {?}
*/
function () {
return this._arrow;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._arrow = value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "multipleLine", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.multipleLine = value === '' ? true : value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "error", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.error = value === '' ? true : value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "wrap", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.wrap = value === '' ? true : value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "align", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.align = value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "platform", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.platform = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "disabled", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (typeof value === 'boolean') {
this._disabled = value;
}
else {
if (value === 'true') {
this._disabled = true;
}
else {
this._disabled = false;
}
}
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "thumb", {
get: /**
* @return {?}
*/
function () {
return this._thumb;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value instanceof TemplateRef) {
this._thumb_component = true;
this._thumb = value;
}
else {
this._thumb_component = false;
this._thumb_src = (/** @type {?} */ (value));
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "thumb_component", {
get: /**
* @return {?}
*/
function () {
return this._thumb_component;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "thumb_src", {
get: /**
* @return {?}
*/
function () {
return this._thumb_src;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItemComponent.prototype, "bingClassName", {
get: /**
* @return {?}
*/
function () {
return this.wrapCls;
},
enumerable: true,
configurable: true
});
/**
* @param {?} event
* @return {?}
*/
ListItemComponent.prototype.click = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.onItemClick(event);
};
/**
* @return {?}
*/
ListItemComponent.prototype.start = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = true;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItemComponent.prototype.move = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItemComponent.prototype.end = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItemComponent.prototype.mouse_start = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = true;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItemComponent.prototype.mouse_end = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItemComponent.prototype.setClsMap = /**
* @return {?}
*/
function () {
var e_1, _a, _b, _c, _d, _e, _f;
/** @type {?} */
var classNameList = this._className.split(' ');
/** @type {?} */
var classNameObj = {};
this.wrapCls = '';
try {
for (var classNameList_1 = tslib_1.__values(classNameList), classNameList_1_1 = classNameList_1.next(); !classNameList_1_1.done; classNameList_1_1 = classNameList_1.next()) {
var value = classNameList_1_1.value;
if (value) {
classNameObj = tslib_1.__assign({}, classNameObj, (_b = {}, _b["" + value] = true, _b));
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (classNameList_1_1 && !classNameList_1_1.done && (_a = classNameList_1.return)) _a.call(classNameList_1);
}
finally { if (e_1) throw e_1.error; }
}
/** @type {?} */
var wrapClsObj = tslib_1.__assign((_c = {}, _c[this.defaultProps.prefixCls + "-item"] = true, _c[this.defaultProps.prefixCls + "-item-disabled"] = this._disabled, _c[this.defaultProps.prefixCls + "-item-active"] = this._active, _c[this.defaultProps.prefixCls + "-item-error"] = this.defaultProps.error, _c[this.defaultProps.prefixCls + "-item-top"] = this.defaultProps.align === 'top', _c[this.defaultProps.prefixCls + "-item-middle"] = this.defaultProps.align === 'middle', _c[this.defaultProps.prefixCls + "-item-bottom"] = this.defaultProps.align === 'bottom', _c), classNameObj);
for (var key in wrapClsObj) {
if (wrapClsObj[key]) {
this.wrapCls += " " + key;
}
}
this.rippleCls = (_d = {},
_d[this.defaultProps.prefixCls + "-ripple"] = true,
_d[this.defaultProps.prefixCls + "-ripple-animate"] = this.rippleClicked,
_d);
this.lineCls = (_e = {},
_e[this.defaultProps.prefixCls + "-line"] = true,
_e[this.defaultProps.prefixCls + "-line-multiple"] = this.defaultProps.multipleLine,
_e[this.defaultProps.prefixCls + "-line-wrap"] = this.defaultProps.wrap,
_e);
this.arrowCls = (_f = {},
_f[this.defaultProps.prefixCls + "-arrow"] = true,
_f[this.defaultProps.prefixCls + "-arrow-horizontal"] = this._arrow === 'horizontal',
_f[this.defaultProps.prefixCls + "-arrow-vertical"] = this._arrow === 'down' || this._arrow === 'up',
_f[this.defaultProps.prefixCls + "-arrow-vertical-up"] = this._arrow === 'up',
_f);
};
/**
* @param {?} ev
* @return {?}
*/
ListItemComponent.prototype.onItemClick = /**
* @param {?} ev
* @return {?}
*/
function (ev) {
var _this = this;
/** @type {?} */
var isAndroid = this.defaultProps.platform === 'android';
if (isAndroid) {
if (this.debounceTimeout) {
clearTimeout(this.debounceTimeout);
this.debounceTimeout = null;
}
/** @type {?} */
var Item = ev.currentTarget;
/** @type {?} */
var RippleWidth = Math.max(Item.offsetHeight, Item.offsetWidth);
/** @type {?} */
var ClientRect_1 = ev.currentTarget.getBoundingClientRect();
/** @type {?} */
var pointX = ev.clientX - ClientRect_1.left - Item.offsetWidth / 2;
/** @type {?} */
var pointY = ev.clientY - ClientRect_1.top - Item.offsetWidth / 2;
/** @type {?} */
var coverRippleStyle = {
width: RippleWidth + "px",
height: RippleWidth + "px",
left: pointX + "px",
top: pointY + "px"
};
this.defaultProps.rippleStyle = coverRippleStyle;
this.rippleClicked = true;
this.setClsMap();
this.debounceTimeout = setTimeout((/**
* @return {?}
*/
function () {
_this.rippleClicked = false;
_this.defaultProps.rippleStyle = { display: 'none' };
_this.setClsMap();
}), 1000);
}
this.onClick.emit(ev);
};
/**
* @return {?}
*/
ListItemComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.defaultProps.rippleStyle = { display: 'none' };
this.setClsMap();
};
/**
* @return {?}
*/
ListItemComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.debounceTimeout) {
clearTimeout(this.debounceTimeout);
this.debounceTimeout = null;
}
};
ListItemComponent.decorators = [
{ type: Component, args: [{
selector: 'ListItem, nzm-list-item',
template: "<div *ngIf=\"thumb_src && !thumb_component\" class=\"{{ defaultProps.prefixCls }}-thumb\">\n <img src=\"{{ thumb_src }}\" />\n</div>\n<div *ngIf=\"thumb && thumb_component\" class=\"{{ defaultProps.prefixCls }}-thumb\">\n <ng-template [ngTemplateOutlet]=\"thumb\"></ng-template>\n</div>\n<div [ngClass]=\"lineCls\">\n <div class=\"{{ defaultProps.prefixCls }}-content\">\n <ng-content></ng-content>\n </div>\n <div\n *ngIf=\"extra_title && !extra_component\"\n class=\"{{ defaultProps.prefixCls }}-extra\"\n [innerHTML]=\"extra_title\"\n ></div>\n <div *ngIf=\"extra && extra_component\" class=\"{{ defaultProps.prefixCls }}-extra\">\n <ng-template [ngTemplateOutlet]=\"extra\"></ng-template>\n </div>\n <div *ngIf=\"arrow\" [ngClass]=\"arrowCls\" aria-hidden=\"true\"></div>\n</div>\n<div [ngClass]=\"rippleCls\" [ngStyle]=\"defaultProps.rippleStyle\"></div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
ListItemComponent.ctorParameters = function () { return []; };
ListItemComponent.propDecorators = {
extra: [{ type: Input }],
className: [{ type: Input }],
arrow: [{ type: Input }],
multipleLine: [{ type: Input }],
error: [{ type: Input }],
wrap: [{ type: Input }],
align: [{ type: Input }],
platform: [{ type: Input }],
disabled: [{ type: Input }],
thumb: [{ type: Input }],
onClick: [{ type: Output }],
bingClassName: [{ type: HostBinding, args: ['class',] }],
click: [{ type: HostListener, args: ['click', ['$event'],] }],
start: [{ type: HostListener, args: ['touchstart',] }],
move: [{ type: HostListener, args: ['touchmove',] }],
end: [{ type: HostListener, args: ['touchend',] }],
mouse_start: [{ type: HostListener, args: ['mousedown',] }],
mouse_end: [{ type: HostListener, args: ['mouseup',] }]
};
return ListItemComponent;
}());
export { ListItemComponent };
if (false) {
/** @type {?} */
ListItemComponent.prototype.defaultProps;
/** @type {?} */
ListItemComponent.prototype.arrowCls;
/** @type {?} */
ListItemComponent.prototype.lineCls;
/** @type {?} */
ListItemComponent.prototype.wrapCls;
/** @type {?} */
ListItemComponent.prototype.rippleCls;
/** @type {?} */
ListItemComponent.prototype.rippleClicked;
/** @type {?} */
ListItemComponent.prototype.debounceTimeout;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._thumb_component;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._thumb;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._thumb_src;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._extra_component;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._extra;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._extra_title;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._arrow;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._disabled;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._className;
/**
* @type {?}
* @private
*/
ListItemComponent.prototype._active;
/** @type {?} */
ListItemComponent.prototype.onClick;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsibGlzdC9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBRWpCLEtBQUssRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFFTixXQUFXLEVBQ1gsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCO0lBd0tFO1FBbEtBLGlCQUFZLEdBQUc7WUFDYixTQUFTLEVBQUUsU0FBUztZQUNwQixLQUFLLEVBQUUsUUFBUTtZQUNmLEtBQUssRUFBRSxLQUFLO1lBQ1osWUFBWSxFQUFFLEtBQUs7WUFDbkIsSUFBSSxFQUFFLEtBQUs7WUFDWCxRQUFRLEVBQUUsS0FBSztZQUNmLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUM7UUFDRixhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ25CLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixjQUFTLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBR3ZCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBMkZqQyxZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUE4Q3RDLENBQUM7SUF2SWhCLHNCQUNJLG9DQUFLOzs7O1FBRFQ7WUFFRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckIsQ0FBQzs7Ozs7UUFPRCxVQUFVLEtBQWdDO1lBQ3hDLElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7YUFDckI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxtQkFBUSxLQUFLLEVBQUEsQ0FBQzthQUNuQztRQUNILENBQUM7OztPQWZBO0lBQ0Qsc0JBQUksOENBQWU7Ozs7UUFBbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUNELHNCQUFJLDBDQUFXOzs7O1FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFVRCxzQkFDSSx3Q0FBUzs7Ozs7UUFEYixVQUNjLEtBQUs7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7OztPQUFBO0lBQ0Qsc0JBQ0ksb0NBQUs7Ozs7UUFEVDtZQUVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyQixDQUFDOzs7OztRQUNELFVBQVUsS0FBSztZQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDOzs7T0FKQTtJQUtELHNCQUNJLDJDQUFZOzs7OztRQURoQixVQUNpQixLQUFLO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzdELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDOzs7T0FBQTtJQUNELHNCQUNJLG9DQUFLOzs7OztRQURULFVBQ1UsS0FBSztZQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3RELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDOzs7T0FBQTtJQUNELHNCQUNJLG1DQUFJOzs7OztRQURSLFVBQ1MsS0FBSztZQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3JELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDOzs7T0FBQTtJQUNELHNCQUNJLG9DQUFLOzs7OztRQURULFVBQ1UsS0FBSztZQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQzs7O09BQUE7SUFDRCxzQkFDSSx1Q0FBUTs7Ozs7UUFEWixVQUNhLEtBQUs7WUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQ0ksdUNBQVE7Ozs7O1FBRFosVUFDYSxLQUFLO1lBQ2hCLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFO2dCQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUN4QjtpQkFBTTtnQkFDTCxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUN2QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztpQkFDeEI7YUFDRjtZQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDOzs7T0FBQTtJQUNELHNCQUNJLG9DQUFLOzs7O1FBRFQ7WUFFRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckIsQ0FBQzs7Ozs7UUFPRCxVQUFVLEtBQUs7WUFDYixJQUFJLEtBQUssWUFBWSxXQUFXLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsbUJBQVEsS0FBSyxFQUFBLENBQUM7YUFDakM7UUFDSCxDQUFDOzs7T0FmQTtJQUNELHNCQUFJLDhDQUFlOzs7O1FBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsQ0FBQzs7O09BQUE7SUFDRCxzQkFBSSx3Q0FBUzs7OztRQUFiO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBYUQsc0JBQ0ksNENBQWE7Ozs7UUFEakI7WUFFRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQzs7O09BQUE7Ozs7O0lBRUQsaUNBQUs7Ozs7SUFETCxVQUNNLEtBQUs7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7Ozs7SUFFRCxpQ0FBSzs7O0lBREw7UUFFRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7Ozs7SUFFRCxnQ0FBSTs7O0lBREo7UUFFRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7Ozs7SUFFRCwrQkFBRzs7O0lBREg7UUFFRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7Ozs7SUFFRCx1Q0FBVzs7O0lBRFg7UUFFRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7Ozs7SUFFRCxxQ0FBUzs7O0lBRFQ7UUFFRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNsQjtJQUNILENBQUM7Ozs7SUFJRCxxQ0FBUzs7O0lBQVQ7OztZQUNRLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7O1lBQzVDLFlBQVksR0FBRyxFQUFFO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDOztZQUVsQixLQUFvQixJQUFBLGtCQUFBLGlCQUFBLGFBQWEsQ0FBQSw0Q0FBQSx1RUFBRTtnQkFBOUIsSUFBTSxLQUFLLDBCQUFBO2dCQUNkLElBQUksS0FBSyxFQUFFO29CQUNULFlBQVksd0JBQ1AsWUFBWSxZQUNWLEdBQUMsS0FBRyxLQUFPLElBQUcsSUFBSSxNQUN4QixDQUFDO2lCQUNIO2FBQ0Y7Ozs7Ozs7Ozs7WUFFSyxVQUFVLGlDQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxVQUFPLElBQUcsSUFBSSxLQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsbUJBQWdCLElBQUcsSUFBSSxDQUFDLFNBQVMsS0FDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLGlCQUFjLElBQUcsSUFBSSxDQUFDLE9BQU8sS0FDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLGdCQUFhLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxjQUFXLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsaUJBQWMsSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxRQUFRLEtBQ2hGLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxpQkFBYyxJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLFFBQVEsT0FDakYsWUFBWSxDQUNoQjtRQUVELEtBQUssSUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO1lBQzVCLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsT0FBTyxJQUFJLE1BQUksR0FBSyxDQUFDO2FBQzNCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsU0FBUztZQUNaLEdBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLFlBQVMsSUFBRyxJQUFJO1lBQy9DLEdBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLG9CQUFpQixJQUFHLElBQUksQ0FBQyxhQUFhO2VBQ3RFLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTztZQUNWLEdBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLFVBQU8sSUFBRyxJQUFJO1lBQzdDLEdBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLG1CQUFnQixJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUNoRixHQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxlQUFZLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJO2VBQ3JFLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUTtZQUNYLEdBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLFdBQVEsSUFBRyxJQUFJO1lBQzlDLEdBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLHNCQUFtQixJQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssWUFBWTtZQUNqRixHQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxvQkFBaUIsSUFBRyxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7WUFDakcsR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsdUJBQW9CLElBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO2VBQzNFLENBQUM7SUFDSixDQUFDOzs7OztJQUVELHVDQUFXOzs7O0lBQVgsVUFBWSxFQUFFO1FBQWQsaUJBNEJDOztZQTNCTyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssU0FBUztRQUMxRCxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDN0I7O2dCQUNLLElBQUksR0FBRyxFQUFFLENBQUMsYUFBYTs7Z0JBQ3ZCLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7Z0JBQzNELFlBQVUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFOztnQkFDckQsTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEdBQUcsWUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUM7O2dCQUM1RCxNQUFNLEdBQUcsRUFBRSxDQUFDLE9BQU8sR0FBRyxZQUFVLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQzs7Z0JBQzNELGdCQUFnQixHQUFHO2dCQUN2QixLQUFLLEVBQUssV0FBVyxPQUFJO2dCQUN6QixNQUFNLEVBQUssV0FBVyxPQUFJO2dCQUMxQixJQUFJLEVBQUssTUFBTSxPQUFJO2dCQUNuQixHQUFHLEVBQUssTUFBTSxPQUFJO2FBQ25CO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7WUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVTs7O1lBQUM7Z0JBQ2hDLEtBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixLQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDcEQsS0FBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLENBQUMsR0FBRSxJQUFJLENBQUMsQ0FBQztTQUNWO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQzs7OztJQUVELG9DQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDOzs7O0lBRUQsdUNBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDN0I7SUFDSCxDQUFDOztnQkFwUUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLGk0QkFBeUM7b0JBQ3pDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0Qzs7Ozs7d0JBNkJFLEtBQUs7NEJBbUJMLEtBQUs7d0JBS0wsS0FBSzsrQkFRTCxLQUFLO3dCQUtMLEtBQUs7dUJBS0wsS0FBSzt3QkFLTCxLQUFLOzJCQUtMLEtBQUs7MkJBSUwsS0FBSzt3QkFhTCxLQUFLOzBCQW1CTCxNQUFNO2dDQUdOLFdBQVcsU0FBQyxPQUFPO3dCQUluQixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO3dCQUloQyxZQUFZLFNBQUMsWUFBWTt1QkFPekIsWUFBWSxTQUFDLFdBQVc7c0JBT3hCLFlBQVksU0FBQyxVQUFVOzhCQU92QixZQUFZLFNBQUMsV0FBVzs0QkFPeEIsWUFBWSxTQUFDLFNBQVM7O0lBcUd6Qix3QkFBQztDQUFBLEFBclFELElBcVFDO1NBaFFZLGlCQUFpQjs7O0lBQzVCLHlDQVFFOztJQUNGLHFDQUFtQjs7SUFDbkIsb0NBQWtCOztJQUNsQixvQ0FBcUI7O0lBQ3JCLHNDQUFvQjs7SUFDcEIsMENBQStCOztJQUMvQiw0Q0FBcUI7Ozs7O0lBRXJCLDZDQUEwQzs7Ozs7SUFDMUMsbUNBQWlDOzs7OztJQUNqQyx1Q0FBZ0M7Ozs7O0lBQ2hDLDZDQUEwQzs7Ozs7SUFDMUMsbUNBQWlDOzs7OztJQUNqQyx5Q0FBa0M7Ozs7O0lBQ2xDLG1DQUE0Qjs7Ozs7SUFDNUIsc0NBQW1DOzs7OztJQUNuQyx1Q0FBZ0M7Ozs7O0lBQ2hDLG9DQUFpQzs7SUEwRmpDLG9DQUNxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgT25EZXN0cm95LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdMaXN0SXRlbSwgbnptLWxpc3QtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIExpc3RJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcHJlZml4Q2xzOiAnYW0tbGlzdCcsXG4gICAgYWxpZ246ICdtaWRkbGUnLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBtdWx0aXBsZUxpbmU6IGZhbHNlLFxuICAgIHdyYXA6IGZhbHNlLFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICByaXBwbGVTdHlsZToge31cbiAgfTtcbiAgYXJyb3dDbHM6IGFueSA9IHt9O1xuICBsaW5lQ2xzOiBhbnkgPSB7fTtcbiAgd3JhcENsczogc3RyaW5nID0gJyc7XG4gIHJpcHBsZUNsczogYW55ID0ge307XG4gIHJpcHBsZUNsaWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGVib3VuY2VUaW1lb3V0OiBhbnk7XG5cbiAgcHJpdmF0ZSBfdGh1bWJfY29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3RodW1iOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF90aHVtYl9zcmM6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9leHRyYV9jb21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZXh0cmE6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX2V4dHJhX3RpdGxlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfYXJyb3c6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9jbGFzc05hbWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9hY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgZXh0cmEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhO1xuICB9XG4gIGdldCBleHRyYV9jb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhX2NvbXBvbmVudDtcbiAgfVxuICBnZXQgZXh0cmFfdGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4dHJhX3RpdGxlO1xuICB9XG4gIHNldCBleHRyYSh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLl9leHRyYV9jb21wb25lbnQgPSB0cnVlO1xuICAgICAgdGhpcy5fZXh0cmEgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZXh0cmFfY29tcG9uZW50ID0gZmFsc2U7XG4gICAgICB0aGlzLl9leHRyYV90aXRsZSA9IDxzdHJpbmc+dmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBjbGFzc05hbWUodmFsdWUpIHtcbiAgICB0aGlzLl9jbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBhcnJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyb3c7XG4gIH1cbiAgc2V0IGFycm93KHZhbHVlKSB7XG4gICAgdGhpcy5fYXJyb3cgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtdWx0aXBsZUxpbmUodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5tdWx0aXBsZUxpbmUgPSB2YWx1ZSA9PT0gJycgPyB0cnVlIDogdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZXJyb3IodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5lcnJvciA9IHZhbHVlID09PSAnJyA/IHRydWUgOiB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB3cmFwKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMud3JhcCA9IHZhbHVlID09PSAnJyA/IHRydWUgOiB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBhbGlnbih2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGxhdGZvcm0odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5wbGF0Zm9ybSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdGh1bWIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RodW1iO1xuICB9XG4gIGdldCB0aHVtYl9jb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RodW1iX2NvbXBvbmVudDtcbiAgfVxuICBnZXQgdGh1bWJfc3JjKCkge1xuICAgIHJldHVybiB0aGlzLl90aHVtYl9zcmM7XG4gIH1cbiAgc2V0IHRodW1iKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuX3RodW1iX2NvbXBvbmVudCA9IHRydWU7XG4gICAgICB0aGlzLl90aHVtYiA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90aHVtYl9jb21wb25lbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3RodW1iX3NyYyA9IDxzdHJpbmc+dmFsdWU7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgYmluZ0NsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndyYXBDbHM7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBjbGljayhldmVudCkge1xuICAgIHRoaXMub25JdGVtQ2xpY2soZXZlbnQpO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnKVxuICBzdGFydCgpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMub25DbGljay5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNobW92ZScpXG4gIG1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnKVxuICBlbmQoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJylcbiAgbW91c2Vfc3RhcnQoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgIH1cbiAgfVxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJylcbiAgbW91c2VfZW5kKCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHNldENsc01hcCgpIHtcbiAgICBjb25zdCBjbGFzc05hbWVMaXN0ID0gdGhpcy5fY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgbGV0IGNsYXNzTmFtZU9iaiA9IHt9O1xuICAgIHRoaXMud3JhcENscyA9ICcnO1xuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBjbGFzc05hbWVMaXN0KSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgY2xhc3NOYW1lT2JqID0ge1xuICAgICAgICAgIC4uLmNsYXNzTmFtZU9iaixcbiAgICAgICAgICAuLi57IFtgJHt2YWx1ZX1gXTogdHJ1ZSB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcENsc09iaiA9IHtcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW1gXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tZGlzYWJsZWRgXTogdGhpcy5fZGlzYWJsZWQsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLWFjdGl2ZWBdOiB0aGlzLl9hY3RpdmUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLWVycm9yYF06IHRoaXMuZGVmYXVsdFByb3BzLmVycm9yLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS10b3BgXTogdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICd0b3AnLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1taWRkbGVgXTogdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICdtaWRkbGUnLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1ib3R0b21gXTogdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPT09ICdib3R0b20nLFxuICAgICAgLi4uY2xhc3NOYW1lT2JqXG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHdyYXBDbHNPYmopIHtcbiAgICAgIGlmICh3cmFwQ2xzT2JqW2tleV0pIHtcbiAgICAgICAgdGhpcy53cmFwQ2xzICs9IGAgJHtrZXl9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJpcHBsZUNscyA9IHtcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LXJpcHBsZWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tcmlwcGxlLWFuaW1hdGVgXTogdGhpcy5yaXBwbGVDbGlja2VkXG4gICAgfTtcblxuICAgIHRoaXMubGluZUNscyA9IHtcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWxpbmVgXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWxpbmUtbXVsdGlwbGVgXTogdGhpcy5kZWZhdWx0UHJvcHMubXVsdGlwbGVMaW5lLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tbGluZS13cmFwYF06IHRoaXMuZGVmYXVsdFByb3BzLndyYXBcbiAgICB9O1xuXG4gICAgdGhpcy5hcnJvd0NscyA9IHtcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWFycm93YF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1hcnJvdy1ob3Jpem9udGFsYF06IHRoaXMuX2Fycm93ID09PSAnaG9yaXpvbnRhbCcsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1hcnJvdy12ZXJ0aWNhbGBdOiB0aGlzLl9hcnJvdyA9PT0gJ2Rvd24nIHx8IHRoaXMuX2Fycm93ID09PSAndXAnLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYXJyb3ctdmVydGljYWwtdXBgXTogdGhpcy5fYXJyb3cgPT09ICd1cCdcbiAgICB9O1xuICB9XG5cbiAgb25JdGVtQ2xpY2soZXYpIHtcbiAgICBjb25zdCBpc0FuZHJvaWQgPSB0aGlzLmRlZmF1bHRQcm9wcy5wbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnO1xuICAgIGlmIChpc0FuZHJvaWQpIHtcbiAgICAgIGlmICh0aGlzLmRlYm91bmNlVGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xuICAgICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBJdGVtID0gZXYuY3VycmVudFRhcmdldDtcbiAgICAgIGNvbnN0IFJpcHBsZVdpZHRoID0gTWF0aC5tYXgoSXRlbS5vZmZzZXRIZWlnaHQsIEl0ZW0ub2Zmc2V0V2lkdGgpO1xuICAgICAgY29uc3QgQ2xpZW50UmVjdCA9IGV2LmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBwb2ludFggPSBldi5jbGllbnRYIC0gQ2xpZW50UmVjdC5sZWZ0IC0gSXRlbS5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICBjb25zdCBwb2ludFkgPSBldi5jbGllbnRZIC0gQ2xpZW50UmVjdC50b3AgLSBJdGVtLm9mZnNldFdpZHRoIC8gMjtcbiAgICAgIGNvbnN0IGNvdmVyUmlwcGxlU3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOiBgJHtSaXBwbGVXaWR0aH1weGAsXG4gICAgICAgIGhlaWdodDogYCR7UmlwcGxlV2lkdGh9cHhgLFxuICAgICAgICBsZWZ0OiBgJHtwb2ludFh9cHhgLFxuICAgICAgICB0b3A6IGAke3BvaW50WX1weGBcbiAgICAgIH07XG4gICAgICB0aGlzLmRlZmF1bHRQcm9wcy5yaXBwbGVTdHlsZSA9IGNvdmVyUmlwcGxlU3R5bGU7XG4gICAgICB0aGlzLnJpcHBsZUNsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmlwcGxlQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlZmF1bHRQcm9wcy5yaXBwbGVTdHlsZSA9IHsgZGlzcGxheTogJ25vbmUnIH07XG4gICAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoZXYpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMucmlwcGxlU3R5bGUgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWJvdW5jZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCk7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=