ngx-moveable
Version:
An Angular Component that create Moveable, Draggable, Resizable, Scalable, Rotatable, Warpable, Pinchable, Groupable, Snappable.
386 lines • 28.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, EventEmitter, Output } from '@angular/core';
import Moveable, { PROPERTIES, EVENTS, } from 'moveable';
import { NgxMoveableInterface } from './ngx-moveable.interface';
// @dynamic
var NgxMoveableComponent = /** @class */ (function (_super) {
tslib_1.__extends(NgxMoveableComponent, _super);
function NgxMoveableComponent() {
var _this = _super.call(this) || this;
EVENTS.forEach((/**
* @param {?} name
* @return {?}
*/
function (name) {
_this[name] = new EventEmitter();
}));
return _this;
}
/**
* @return {?}
*/
NgxMoveableComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var options = {};
/** @type {?} */
var events = {};
PROPERTIES.forEach((/**
* @param {?} name
* @return {?}
*/
function (name) {
((/** @type {?} */ (options)))[name] = _this[name];
}));
EVENTS.forEach((/**
* @param {?} name
* @return {?}
*/
function (name) {
events[name] = (/**
* @param {?} e
* @return {?}
*/
function (e) {
_this[name].emit(e);
});
}));
this.moveable = new Moveable(this.container || document.body, options);
this.moveable.on(events);
};
/**
* @param {?} changes
* @return {?}
*/
NgxMoveableComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
/** @type {?} */
var moveable = this.moveable;
if (!moveable) {
return;
}
for (var name_1 in changes) {
var _a = changes[name_1], previousValue = _a.previousValue, currentValue = _a.currentValue;
if (previousValue === currentValue) {
continue;
}
moveable[name_1] = currentValue;
}
};
/**
* @return {?}
*/
NgxMoveableComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.moveable.destroy();
};
NgxMoveableComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-moveable',
template: ''
}] }
];
/** @nocollapse */
NgxMoveableComponent.ctorParameters = function () { return []; };
NgxMoveableComponent.propDecorators = {
draggable: [{ type: Input }],
resizable: [{ type: Input }],
scalable: [{ type: Input }],
rotatable: [{ type: Input }],
warpable: [{ type: Input }],
pinchable: [{ type: Input }],
snappable: [{ type: Input }],
origin: [{ type: Input }],
target: [{ type: Input }],
container: [{ type: Input }],
throttleDrag: [{ type: Input }],
throttleDragRotate: [{ type: Input }],
throttleResize: [{ type: Input }],
throttleScale: [{ type: Input }],
throttleRotate: [{ type: Input }],
keepRatio: [{ type: Input }],
edge: [{ type: Input }],
pinchThreshold: [{ type: Input }],
snapCenter: [{ type: Input }],
snapVertical: [{ type: Input }],
snapElement: [{ type: Input }],
snapHorizontal: [{ type: Input }],
snapThreshold: [{ type: Input }],
horizontalGuidelines: [{ type: Input }],
verticalGuidelines: [{ type: Input }],
elementGuidelines: [{ type: Input }],
bounds: [{ type: Input }],
dragArea: [{ type: Input }],
rotationPosition: [{ type: Input }],
baseDirection: [{ type: Input }],
defaultGroupRotate: [{ type: Input }],
ables: [{ type: Input }],
className: [{ type: Input }],
renderDirections: [{ type: Input }],
scrollable: [{ type: Input }],
scrollContainer: [{ type: Input }],
scrollThreshold: [{ type: Input }],
getScrollPosition: [{ type: Input }],
rootContainer: [{ type: Input }],
zoom: [{ type: Input }],
transformOrigin: [{ type: Input }],
snapDigit: [{ type: Input }],
isDisplaySnapDigit: [{ type: Input }],
innerBounds: [{ type: Input }],
triggerAblesSimultaneously: [{ type: Input }],
snapGap: [{ type: Input }],
pinchOutside: [{ type: Input }],
padding: [{ type: Input }],
snapDistFormat: [{ type: Input }],
dragTarget: [{ type: Input }],
dragStart: [{ type: Output }],
drag: [{ type: Output }],
dragEnd: [{ type: Output }],
dragGroupStart: [{ type: Output }],
dragGroup: [{ type: Output }],
dragGroupEnd: [{ type: Output }],
resizeStart: [{ type: Output }],
resize: [{ type: Output }],
resizeEnd: [{ type: Output }],
resizeGroupStart: [{ type: Output }],
resizeGroup: [{ type: Output }],
resizeGroupEnd: [{ type: Output }],
scaleStart: [{ type: Output }],
scale: [{ type: Output }],
scaleEnd: [{ type: Output }],
scaleGroupStart: [{ type: Output }],
scaleGroup: [{ type: Output }],
scaleGroupEnd: [{ type: Output }],
rotateStart: [{ type: Output }],
rotate: [{ type: Output }],
rotateEnd: [{ type: Output }],
rotateGroupStart: [{ type: Output }],
rotateGroup: [{ type: Output }],
rotateGroupEnd: [{ type: Output }],
warpStart: [{ type: Output }],
warp: [{ type: Output }],
warpEnd: [{ type: Output }],
pinchStart: [{ type: Output }],
pinch: [{ type: Output }],
pinchEnd: [{ type: Output }],
pinchGroupStart: [{ type: Output }],
pinchGroup: [{ type: Output }],
pinchGroupEnd: [{ type: Output }],
click: [{ type: Output }],
clickGroup: [{ type: Output }],
renderStart: [{ type: Output }],
render: [{ type: Output }],
renderEnd: [{ type: Output }],
renderGroupStart: [{ type: Output }],
renderGroup: [{ type: Output }],
renderGroupEnd: [{ type: Output }],
scroll: [{ type: Output }],
scrollGroup: [{ type: Output }],
snap: [{ type: Output }]
};
return NgxMoveableComponent;
}(NgxMoveableInterface));
export { NgxMoveableComponent };
if (false) {
/** @type {?} */
NgxMoveableComponent.prototype.draggable;
/** @type {?} */
NgxMoveableComponent.prototype.resizable;
/** @type {?} */
NgxMoveableComponent.prototype.scalable;
/** @type {?} */
NgxMoveableComponent.prototype.rotatable;
/** @type {?} */
NgxMoveableComponent.prototype.warpable;
/** @type {?} */
NgxMoveableComponent.prototype.pinchable;
/** @type {?} */
NgxMoveableComponent.prototype.snappable;
/** @type {?} */
NgxMoveableComponent.prototype.origin;
/** @type {?} */
NgxMoveableComponent.prototype.target;
/** @type {?} */
NgxMoveableComponent.prototype.container;
/** @type {?} */
NgxMoveableComponent.prototype.throttleDrag;
/** @type {?} */
NgxMoveableComponent.prototype.throttleDragRotate;
/** @type {?} */
NgxMoveableComponent.prototype.throttleResize;
/** @type {?} */
NgxMoveableComponent.prototype.throttleScale;
/** @type {?} */
NgxMoveableComponent.prototype.throttleRotate;
/** @type {?} */
NgxMoveableComponent.prototype.keepRatio;
/** @type {?} */
NgxMoveableComponent.prototype.edge;
/** @type {?} */
NgxMoveableComponent.prototype.pinchThreshold;
/** @type {?} */
NgxMoveableComponent.prototype.snapCenter;
/** @type {?} */
NgxMoveableComponent.prototype.snapVertical;
/** @type {?} */
NgxMoveableComponent.prototype.snapElement;
/** @type {?} */
NgxMoveableComponent.prototype.snapHorizontal;
/** @type {?} */
NgxMoveableComponent.prototype.snapThreshold;
/** @type {?} */
NgxMoveableComponent.prototype.horizontalGuidelines;
/** @type {?} */
NgxMoveableComponent.prototype.verticalGuidelines;
/** @type {?} */
NgxMoveableComponent.prototype.elementGuidelines;
/** @type {?} */
NgxMoveableComponent.prototype.bounds;
/** @type {?} */
NgxMoveableComponent.prototype.dragArea;
/** @type {?} */
NgxMoveableComponent.prototype.rotationPosition;
/** @type {?} */
NgxMoveableComponent.prototype.baseDirection;
/** @type {?} */
NgxMoveableComponent.prototype.defaultGroupRotate;
/** @type {?} */
NgxMoveableComponent.prototype.ables;
/** @type {?} */
NgxMoveableComponent.prototype.className;
/** @type {?} */
NgxMoveableComponent.prototype.renderDirections;
/** @type {?} */
NgxMoveableComponent.prototype.scrollable;
/** @type {?} */
NgxMoveableComponent.prototype.scrollContainer;
/** @type {?} */
NgxMoveableComponent.prototype.scrollThreshold;
/** @type {?} */
NgxMoveableComponent.prototype.getScrollPosition;
/** @type {?} */
NgxMoveableComponent.prototype.rootContainer;
/** @type {?} */
NgxMoveableComponent.prototype.zoom;
/** @type {?} */
NgxMoveableComponent.prototype.transformOrigin;
/** @type {?} */
NgxMoveableComponent.prototype.snapDigit;
/** @type {?} */
NgxMoveableComponent.prototype.isDisplaySnapDigit;
/** @type {?} */
NgxMoveableComponent.prototype.innerBounds;
/** @type {?} */
NgxMoveableComponent.prototype.triggerAblesSimultaneously;
/** @type {?} */
NgxMoveableComponent.prototype.snapGap;
/** @type {?} */
NgxMoveableComponent.prototype.pinchOutside;
/** @type {?} */
NgxMoveableComponent.prototype.padding;
/** @type {?} */
NgxMoveableComponent.prototype.snapDistFormat;
/** @type {?} */
NgxMoveableComponent.prototype.dragTarget;
/** @type {?} */
NgxMoveableComponent.prototype.dragStart;
/** @type {?} */
NgxMoveableComponent.prototype.drag;
/** @type {?} */
NgxMoveableComponent.prototype.dragEnd;
/** @type {?} */
NgxMoveableComponent.prototype.dragGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.dragGroup;
/** @type {?} */
NgxMoveableComponent.prototype.dragGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.resizeStart;
/** @type {?} */
NgxMoveableComponent.prototype.resize;
/** @type {?} */
NgxMoveableComponent.prototype.resizeEnd;
/** @type {?} */
NgxMoveableComponent.prototype.resizeGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.resizeGroup;
/** @type {?} */
NgxMoveableComponent.prototype.resizeGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.scaleStart;
/** @type {?} */
NgxMoveableComponent.prototype.scale;
/** @type {?} */
NgxMoveableComponent.prototype.scaleEnd;
/** @type {?} */
NgxMoveableComponent.prototype.scaleGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.scaleGroup;
/** @type {?} */
NgxMoveableComponent.prototype.scaleGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.rotateStart;
/** @type {?} */
NgxMoveableComponent.prototype.rotate;
/** @type {?} */
NgxMoveableComponent.prototype.rotateEnd;
/** @type {?} */
NgxMoveableComponent.prototype.rotateGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.rotateGroup;
/** @type {?} */
NgxMoveableComponent.prototype.rotateGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.warpStart;
/** @type {?} */
NgxMoveableComponent.prototype.warp;
/** @type {?} */
NgxMoveableComponent.prototype.warpEnd;
/** @type {?} */
NgxMoveableComponent.prototype.pinchStart;
/** @type {?} */
NgxMoveableComponent.prototype.pinch;
/** @type {?} */
NgxMoveableComponent.prototype.pinchEnd;
/** @type {?} */
NgxMoveableComponent.prototype.pinchGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.pinchGroup;
/** @type {?} */
NgxMoveableComponent.prototype.pinchGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.click;
/** @type {?} */
NgxMoveableComponent.prototype.clickGroup;
/** @type {?} */
NgxMoveableComponent.prototype.renderStart;
/** @type {?} */
NgxMoveableComponent.prototype.render;
/** @type {?} */
NgxMoveableComponent.prototype.renderEnd;
/** @type {?} */
NgxMoveableComponent.prototype.renderGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.renderGroup;
/** @type {?} */
NgxMoveableComponent.prototype.renderGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.scroll;
/** @type {?} */
NgxMoveableComponent.prototype.scrollGroup;
/** @type {?} */
NgxMoveableComponent.prototype.snap;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1vdmVhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tb3ZlYWJsZS8iLCJzb3VyY2VzIjpbIm5neC1tb3ZlYWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFDa0IsWUFBWSxFQUFFLE1BQU0sRUFDdkQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxRQUFRLEVBQUUsRUFDZixVQUFVLEVBQUUsTUFBTSxHQUVuQixNQUFNLFVBQVUsQ0FBQztBQUlsQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFJaEU7SUFLVSxnREFBb0I7SUErRzVCO1FBQUEsWUFDRSxpQkFBTyxTQUlSO1FBSEMsTUFBTSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLElBQUk7WUFDakIsS0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdkMsQ0FBQyxFQUFDLENBQUM7O0lBQ0wsQ0FBQzs7OztJQUNELHVDQUFROzs7SUFBUjtRQUFBLGlCQWVDOztZQWRPLE9BQU8sR0FBb0IsRUFBRTs7WUFDN0IsTUFBTSxHQUFpQixFQUFFO1FBRS9CLFVBQVUsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxJQUFJO1lBQ3JCLENBQUMsbUJBQUEsT0FBTyxFQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxFQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsSUFBSTtZQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDOzs7O1lBQUcsVUFBQSxDQUFDO2dCQUNkLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFBLENBQUM7UUFDSixDQUFDLEVBQUMsQ0FBQztRQUVILElBQUks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QUFpRjs7SUFFakYseUNBQXVFOztJQUN2RSxvQ0FBNkQ7O0lBQzdELHVDQUFtRTs7SUFFbkUsMENBQXlFOztJQUN6RSxxQ0FBK0Q7O0lBQy9ELHdDQUFxRTs7SUFDckUsK0NBQW1GOztJQUNuRiwwQ0FBeUU7O0lBQ3pFLDZDQUErRTs7SUFFL0UscUNBQStEOztJQUMvRCwwQ0FBeUU7O0lBRXpFLDJDQUEyRTs7SUFDM0Usc0NBQWlFOztJQUNqRSx5Q0FBdUU7O0lBQ3ZFLGdEQUFxRjs7SUFDckYsMkNBQTJFOztJQUMzRSw4Q0FBaUY7O0lBRWpGLHNDQUFpRDs7SUFDakQsMkNBQTJEOztJQUUzRCxvQ0FBNkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBFdmVudEVtaXR0ZXIsIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBNb3ZlYWJsZSwge1xuICBQUk9QRVJUSUVTLCBFVkVOVFMsIE1vdmVhYmxlT3B0aW9ucyxcbiAgT25TY3JvbGxHcm91cCwgT25TY3JvbGwsIE1vdmVhYmxlRXZlbnRzLCBPblNuYXAsXG59IGZyb20gJ21vdmVhYmxlJztcbmltcG9ydCB7IElPYmplY3QgfSBmcm9tICdAZGF5YnJ1c2gvdXRpbHMnO1xuaW1wb3J0IHsgTmd4TW92ZWFibGVFdmVudHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEFibGUgfSBmcm9tICdtb3ZlYWJsZSc7XG5pbXBvcnQgeyBOZ3hNb3ZlYWJsZUludGVyZmFjZSB9IGZyb20gJy4vbmd4LW1vdmVhYmxlLmludGVyZmFjZSc7XG5cblxuLy8gQGR5bmFtaWNcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1tb3ZlYWJsZScsXG4gIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgY2xhc3MgTmd4TW92ZWFibGVDb21wb25lbnRcbiAgZXh0ZW5kcyBOZ3hNb3ZlYWJsZUludGVyZmFjZVxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXMsIFJlcXVpcmVkPE1vdmVhYmxlT3B0aW9ucz4sIE5neE1vdmVhYmxlRXZlbnRzIHtcbiAgQElucHV0KCkgcHVibGljIGRyYWdnYWJsZSE6IE1vdmVhYmxlT3B0aW9uc1snZHJhZ2dhYmxlJ107XG4gIEBJbnB1dCgpIHB1YmxpYyByZXNpemFibGUhOiBNb3ZlYWJsZU9wdGlvbnNbJ3Jlc2l6YWJsZSddO1xuICBASW5wdXQoKSBwdWJsaWMgc2NhbGFibGUhOiBNb3ZlYWJsZU9wdGlvbnNbJ3NjYWxhYmxlJ107XG4gIEBJbnB1dCgpIHB1YmxpYyByb3RhdGFibGUhOiBNb3ZlYWJsZU9wdGlvbnNbJ3JvdGF0YWJsZSddO1xuICBASW5wdXQoKSBwdWJsaWMgd2FycGFibGUhOiBNb3ZlYWJsZU9wdGlvbnNbJ3dhcnBhYmxlJ107XG4gIEBJbnB1dCgpIHB1YmxpYyBwaW5jaGFibGUhOiBib29sZWFuIHwgQXJyYXk8J3JvdGF0YWJsZScgfCAncmVzaXphYmxlJyB8ICdzY2FsYWJsZSc+O1xuICBASW5wdXQoKSBwdWJsaWMgc25hcHBhYmxlITogYm9vbGVhbiB8IHN0cmluZ1tdO1xuICBASW5wdXQoKSBwdWJsaWMgb3JpZ2luITogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHRhcmdldCE6IFNWR0VsZW1lbnQgfCBIVE1MRWxlbWVudCB8IEFycmF5PFNWR0VsZW1lbnQgfCBIVE1MRWxlbWVudD47XG4gIEBJbnB1dCgpIHB1YmxpYyBjb250YWluZXIhOiBTVkdFbGVtZW50IHwgSFRNTEVsZW1lbnQgfCBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgdGhyb3R0bGVEcmFnITogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgdGhyb3R0bGVEcmFnUm90YXRlITogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgdGhyb3R0bGVSZXNpemUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyB0aHJvdHRsZVNjYWxlITogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgdGhyb3R0bGVSb3RhdGUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyBrZWVwUmF0aW8hOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgZWRnZSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBwaW5jaFRocmVzaG9sZCE6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIHNuYXBDZW50ZXIhOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgc25hcFZlcnRpY2FsITogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHNuYXBFbGVtZW50ITogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHNuYXBIb3Jpem9udGFsITogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHNuYXBUaHJlc2hvbGQhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyBob3Jpem9udGFsR3VpZGVsaW5lcyE6IG51bWJlcltdO1xuICBASW5wdXQoKSBwdWJsaWMgdmVydGljYWxHdWlkZWxpbmVzITogbnVtYmVyW107XG4gIEBJbnB1dCgpIHB1YmxpYyBlbGVtZW50R3VpZGVsaW5lcyE6IEVsZW1lbnRbXTtcbiAgQElucHV0KCkgcHVibGljIGJvdW5kcyE6IHsgbGVmdD86IG51bWJlciwgdG9wPzogbnVtYmVyLCByaWdodD86IG51bWJlciwgYm90dG9tPzogbnVtYmVyIH07XG4gIEBJbnB1dCgpIHB1YmxpYyBkcmFnQXJlYSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyByb3RhdGlvblBvc2l0aW9uITogJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBiYXNlRGlyZWN0aW9uITogbnVtYmVyW107XG4gIEBJbnB1dCgpIHB1YmxpYyBkZWZhdWx0R3JvdXBSb3RhdGUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyBhYmxlcyE6IEFibGVbXTtcblxuICBASW5wdXQoKSBwdWJsaWMgY2xhc3NOYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgcmVuZGVyRGlyZWN0aW9ucyE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsYWJsZSE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxDb250YWluZXIhOiBIVE1MRWxlbWVudDtcbiAgQElucHV0KCkgcHVibGljIHNjcm9sbFRocmVzaG9sZCE6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIGdldFNjcm9sbFBvc2l0aW9uITogTW92ZWFibGVPcHRpb25zWydnZXRTY3JvbGxQb3NpdGlvbiddO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyByb290Q29udGFpbmVyITogTW92ZWFibGVPcHRpb25zWydyb290Q29udGFpbmVyJ107XG4gIEBJbnB1dCgpIHB1YmxpYyB6b29tITogTW92ZWFibGVPcHRpb25zWyd6b29tJ107XG4gIEBJbnB1dCgpIHB1YmxpYyB0cmFuc2Zvcm1PcmlnaW4hOiBNb3ZlYWJsZU9wdGlvbnNbJ3RyYW5zZm9ybU9yaWdpbiddO1xuICBASW5wdXQoKSBwdWJsaWMgc25hcERpZ2l0ITogTW92ZWFibGVPcHRpb25zWydzbmFwRGlnaXQnXTtcbiAgQElucHV0KCkgcHVibGljIGlzRGlzcGxheVNuYXBEaWdpdCE6IE1vdmVhYmxlT3B0aW9uc1snaXNEaXNwbGF5U25hcERpZ2l0J107XG4gIEBJbnB1dCgpIHB1YmxpYyBpbm5lckJvdW5kcyE6IE1vdmVhYmxlT3B0aW9uc1snaW5uZXJCb3VuZHMnXTtcblxuICBASW5wdXQoKSBwdWJsaWMgdHJpZ2dlckFibGVzU2ltdWx0YW5lb3VzbHkhOiBNb3ZlYWJsZU9wdGlvbnNbJ3RyaWdnZXJBYmxlc1NpbXVsdGFuZW91c2x5J107XG4gIEBJbnB1dCgpIHB1YmxpYyBzbmFwR2FwITogTW92ZWFibGVPcHRpb25zWydzbmFwR2FwJ107XG5cbiAgQElucHV0KCkgcHVibGljIHBpbmNoT3V0c2lkZSE6IE1vdmVhYmxlT3B0aW9uc1sncGluY2hPdXRzaWRlJ107XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWRkaW5nITogTW92ZWFibGVPcHRpb25zWydwYWRkaW5nJ107XG4gIEBJbnB1dCgpIHB1YmxpYyBzbmFwRGlzdEZvcm1hdCE6IE1vdmVhYmxlT3B0aW9uc1snc25hcERpc3RGb3JtYXQnXTtcbiAgQElucHV0KCkgcHVibGljIGRyYWdUYXJnZXQhOiBNb3ZlYWJsZU9wdGlvbnNbJ2RyYWdUYXJnZXQnXTtcblxuICBAT3V0cHV0KCkgcHVibGljIGRyYWdTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snZHJhZ1N0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIGRyYWchOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ2RyYWcnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgZHJhZ0VuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snZHJhZ0VuZCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBkcmFnR3JvdXBTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snZHJhZ0dyb3VwU3RhcnQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgZHJhZ0dyb3VwITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydkcmFnR3JvdXAnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgZHJhZ0dyb3VwRW5kITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydkcmFnR3JvdXBFbmQnXT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyByZXNpemVTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncmVzaXplU3RhcnQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVzaXplITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZXNpemUnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVzaXplRW5kITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZXNpemVFbmQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVzaXplR3JvdXBTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncmVzaXplR3JvdXBTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZXNpemVHcm91cCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncmVzaXplR3JvdXAnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVzaXplR3JvdXBFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3Jlc2l6ZUdyb3VwRW5kJ10+O1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2NhbGVTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snc2NhbGVTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBzY2FsZSE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snc2NhbGUnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgc2NhbGVFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3NjYWxlRW5kJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIHNjYWxlR3JvdXBTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snc2NhbGVHcm91cFN0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIHNjYWxlR3JvdXAhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3NjYWxlR3JvdXAnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgc2NhbGVHcm91cEVuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snc2NhbGVHcm91cEVuZCddPjtcblxuICBAT3V0cHV0KCkgcHVibGljIHJvdGF0ZVN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyb3RhdGVTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByb3RhdGUhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3JvdGF0ZSddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByb3RhdGVFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3JvdGF0ZUVuZCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByb3RhdGVHcm91cFN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyb3RhdGVHcm91cFN0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIHJvdGF0ZUdyb3VwITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyb3RhdGVHcm91cCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByb3RhdGVHcm91cEVuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncm90YXRlR3JvdXBFbmQnXT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyB3YXJwU3RhcnQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3dhcnBTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyB3YXJwITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWyd3YXJwJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIHdhcnBFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3dhcnBFbmQnXT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBwaW5jaFN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydwaW5jaFN0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIHBpbmNoITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydwaW5jaCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBwaW5jaEVuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncGluY2hFbmQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcGluY2hHcm91cFN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydwaW5jaEdyb3VwU3RhcnQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcGluY2hHcm91cCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncGluY2hHcm91cCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBwaW5jaEdyb3VwRW5kITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydwaW5jaEdyb3VwRW5kJ10+O1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xpY2shOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ2NsaWNrJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIGNsaWNrR3JvdXAhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ2NsaWNrR3JvdXAnXT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyByZW5kZXJTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncmVuZGVyU3RhcnQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVuZGVyITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZW5kZXInXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVuZGVyRW5kITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZW5kZXJFbmQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVuZGVyR3JvdXBTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncmVuZGVyR3JvdXBTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZW5kZXJHcm91cCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncmVuZGVyR3JvdXAnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVuZGVyR3JvdXBFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3JlbmRlckdyb3VwRW5kJ10+O1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2Nyb2xsITogRXZlbnRFbWl0dGVyPE9uU2Nyb2xsPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBzY3JvbGxHcm91cCE6IEV2ZW50RW1pdHRlcjxPblNjcm9sbEdyb3VwPjtcblxuICBAT3V0cHV0KCkgcHVibGljIHNuYXAhOiBFdmVudEVtaXR0ZXI8T25TbmFwPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIEVWRU5UUy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgdGhpc1tuYW1lXSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIH0pO1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnM6IE1vdmVhYmxlT3B0aW9ucyA9IHt9O1xuICAgIGNvbnN0IGV2ZW50czogSU9iamVjdDxhbnk+ID0ge307XG5cbiAgICBQUk9QRVJUSUVTLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAob3B0aW9ucyBhcyBhbnkpW25hbWVdID0gdGhpc1tuYW1lXTtcbiAgICB9KTtcbiAgICBFVkVOVFMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIGV2ZW50c1tuYW1lXSA9IGUgPT4ge1xuICAgICAgICB0aGlzW25hbWVdLmVtaXQoZSk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5tb3ZlYWJsZSA9IG5ldyBNb3ZlYWJsZSh0aGlzLmNvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5LCBvcHRpb25zKTtcbiAgICB0aGlzLm1vdmVhYmxlLm9uKGV2ZW50cyk7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IG1vdmVhYmxlID0gdGhpcy5tb3ZlYWJsZTtcblxuICAgIGlmICghbW92ZWFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIGluIGNoYW5nZXMpIHtcbiAgICAgIGNvbnN0IHsgcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlIH0gPSBjaGFuZ2VzW25hbWVdO1xuXG4gICAgICBpZiAocHJldmlvdXNWYWx1ZSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbW92ZWFibGVbbmFtZV0gPSBjdXJyZW50VmFsdWU7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubW92ZWFibGUuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=