com.phloxui
Version:
PhloxUI Ng2+ Framework
378 lines (377 loc) • 27.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core';
import { DialogService } from '../service/DialogService.service';
import { PhloxAppInfo } from '../component/model/PhloxAppInfo';
import { AbstractComponentDataLangSelector } from './AbstractComponentDataLangSelector';
import { Option } from '../decorator/Option.decorator';
import { I18N } from '../decorator/I18N.decorator';
import { ComponentDataLangSelectorModel } from './model/ComponentDataLangSelectorModel';
import { LanguageButtonModel } from './model/LanguageButtonModel';
const /** @type {?} */ TYPE_NAME = "phx-component-lang-selector";
export class ComponentDataLangSelector extends AbstractComponentDataLangSelector {
/**
* @param {?} elementRef
* @param {?} dialogService
*/
constructor(elementRef, dialogService) {
super(elementRef, dialogService);
this.LANGUAGE_FIELD_NAME = PhloxAppInfo.DEFAULT_LANGUAGE_FIELD_NAME;
this.OBJECT_ID_FIELD_NAME = PhloxAppInfo.DEFAULT_OBJECT_ID_FIELD_NAME;
this.dataObjects = [];
}
/**
* @return {?}
*/
ngOnInit() {
// We've to resolve controller from model before calling super.ngOnInit().
if (this.model !== null && typeof this.model !== 'undefined') {
// Only controller is null or undefined in which that we'll use value from model.
if ((this.controller === null || typeof this.controller === 'undefined')) {
this.controller = this.model.controller;
}
}
super.ngOnInit();
}
/**
* @return {?}
*/
hasModel() {
if (this.model !== null && typeof this.model !== 'undefined') {
return true;
}
return false;
}
/**
* @return {?}
*/
getModel() {
return this.model;
}
/**
* @param {?} model
* @return {?}
*/
setModel(model) {
this.model = model;
if (this.model !== null && typeof this.model !== 'undefined') {
// replace controller
this.controller = this.model.controller;
}
}
/**
* @return {?}
*/
getLanguageFieldName() {
return this.LANGUAGE_FIELD_NAME;
}
/**
* @return {?}
*/
getObjectIdFieldName() {
return this.OBJECT_ID_FIELD_NAME;
}
/**
* @param {?} data
* @return {?}
*/
getInstanceDefaultData(data) {
return data;
}
/**
* @param {?} data
* @return {?}
*/
getInstanceDataLanguage(data) {
return data;
}
/**
* @param {?} data
* @return {?}
*/
isDataLanguageDirty(data) {
return false;
}
/**
* @return {?} any as one object.
*/
getDefaultData() {
return this.data;
}
/**
* @return {?}
*/
getDataObjects() {
return this.dataObjects;
}
/**
* @param {?} langCode
* @return {?}
*/
parseLanguageButtonModel(langCode) {
let /** @type {?} */ upperCaseLang = (langCode !== null && typeof langCode !== 'undefined') ? langCode.toUpperCase() : 'N/A';
return new LanguageButtonModel('', langCode, upperCaseLang);
}
/**
* @param {?} data
* @return {?}
*/
setData(data) {
super.setData(data);
this.dataObjects = [];
this.dataObjects.push(data);
}
/**
* @return {?}
*/
getWidth() {
return this.width;
}
/**
* @param {?} width
* @return {?}
*/
setWidth(width) {
this.width = width;
}
/**
* @return {?}
*/
getHeight() {
return this.height;
}
/**
* @param {?} height
* @return {?}
*/
setHeight(height) {
this.height = height;
}
}
ComponentDataLangSelector.TYPE_NAME = TYPE_NAME;
ComponentDataLangSelector.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: 'phx-component-lang-selector',
template: `<div class="phx-component-lang-selector disabled-overlay" [style.width]="getWidth()" [style.height]="getHeight()">
<div class="wrapper left" [class.expand]="!hasLanguage()">
<div class="component-pane">
<!-- default -->
<div class="component-wrapper" [class.show]="_isSelectedLanguageByIndex(null)">
<phx-component-wrapper *ngIf="hasModel()" [type]="getModel().componentType" [model]="getModel().componentModel"
[handler]="getDefaultComponentHandler()" [data]="_getDefaultData()" [dataParent]="this"
[options]="getModel().componentOptions"></phx-component-wrapper>
</div>
<!-- by lang -->
<ng-template ngFor let-item [ngForOf]="_getDataLangList()" let-i="index">
<div class="component-wrapper" [class.show]="_isSelectedLanguageByIndex(i)">
<phx-component-wrapper *ngIf="hasModel()" [type]="getModel().componentType" [model]="getModel().componentModel"
[handler]="getComponentHandler()" [setting]="getComponentSetting(i)" [data]="item" [dataParent]="this"
[options]="getModel().componentOptions"></phx-component-wrapper>
</div>
</ng-template>
</div>
</div>
<div class="wrapper right" [class.hide]="!hasLanguage()">
<div class="lang-pane">
<div class="language-btn default data" [class.selected]="isSelectedLanguage(null)" [class.dirty]="_isDataDirtyByIndex(null)"
(click)="onActionBtnClicked($event, null, null)">
<div class="table-wrapper fluid">
<div class="table-cell-wrapper middle">
Default
</div>
</div>
</div>
<div *ngFor="let item of getMergedLanguageList(); let i = index" class="language-btn" [class.data]="_langHasDataByIndex(i)"
[class.dirty]="_isDataDirtyByIndex(i)"
[class.selected]="isSelectedLanguage(item)" (click)="onActionBtnClicked($event, item, i)">
<div class="table-wrapper fluid">
<div class="table-cell-wrapper middle">
<div *ngIf="!_hasButtonIcon(item)">{{item.label}}</div>
<div *ngIf="_hasButtonIcon(item)">
<img src="{{item.iconURL}}">
</div>
</div>
</div>
</div>
<div class="mocking-btn"></div>
</div>
</div>
</div>
`
},] },
];
/** @nocollapse */
ComponentDataLangSelector.ctorParameters = () => [
{ type: ElementRef, },
{ type: DialogService, },
];
ComponentDataLangSelector.propDecorators = {
"model": [{ type: Input },],
"controller": [{ type: Input },],
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
"help": [{ type: Input },],
"width": [{ type: Input },],
"height": [{ type: Input },],
"loadEvent": [{ type: Output, args: ['phxLoad',] },],
"langClickEvent": [{ type: Output, args: ['phxLangClick',] },],
"langAddEvent": [{ type: Output, args: ['phxLangAdd',] },],
"langRemoveEvent": [{ type: Output, args: ['phxLangRemove',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", ComponentDataLangSelectorModel)
], ComponentDataLangSelector.prototype, "model", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentDataLangSelector.prototype, "controller", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentDataLangSelector.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDataLangSelector.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentDataLangSelector.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDataLangSelector.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDataLangSelector.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentDataLangSelector.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentDataLangSelector.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDataLangSelector.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDataLangSelector.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], ComponentDataLangSelector.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentDataLangSelector.prototype, "disabled", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentDataLangSelector.prototype, "help", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDataLangSelector.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentDataLangSelector.prototype, "height", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDataLangSelector.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('langClick'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDataLangSelector.prototype, "langClickEvent", void 0);
tslib_1.__decorate([
Option('langAdd'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDataLangSelector.prototype, "langAddEvent", void 0);
tslib_1.__decorate([
Option('langRemove'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentDataLangSelector.prototype, "langRemoveEvent", void 0);
function ComponentDataLangSelector_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ComponentDataLangSelector.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ComponentDataLangSelector.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ComponentDataLangSelector.propDecorators;
/** @type {?} */
ComponentDataLangSelector.TYPE_NAME;
/** @type {?} */
ComponentDataLangSelector.prototype.LANGUAGE_FIELD_NAME;
/** @type {?} */
ComponentDataLangSelector.prototype.OBJECT_ID_FIELD_NAME;
/** @type {?} */
ComponentDataLangSelector.prototype.dataObjects;
/** @type {?} */
ComponentDataLangSelector.prototype.model;
/** @type {?} */
ComponentDataLangSelector.prototype.controller;
/** @type {?} */
ComponentDataLangSelector.prototype.dataParent;
/** @type {?} */
ComponentDataLangSelector.prototype.ignoreParentData;
/** @type {?} */
ComponentDataLangSelector.prototype.data;
/** @type {?} */
ComponentDataLangSelector.prototype.ignoreParentDisabled;
/** @type {?} */
ComponentDataLangSelector.prototype.delegateHistory;
/** @type {?} */
ComponentDataLangSelector.prototype.onDisabled;
/** @type {?} */
ComponentDataLangSelector.prototype.onEnabled;
/** @type {?} */
ComponentDataLangSelector.prototype.loadingEnabled;
/** @type {?} */
ComponentDataLangSelector.prototype.i18nKey;
/** @type {?} */
ComponentDataLangSelector.prototype.bypass;
/** @type {?} */
ComponentDataLangSelector.prototype.options;
/** @type {?} */
ComponentDataLangSelector.prototype.disabled;
/** @type {?} */
ComponentDataLangSelector.prototype.help;
/** @type {?} */
ComponentDataLangSelector.prototype.width;
/** @type {?} */
ComponentDataLangSelector.prototype.height;
/** @type {?} */
ComponentDataLangSelector.prototype.loadEvent;
/** @type {?} */
ComponentDataLangSelector.prototype.langClickEvent;
/** @type {?} */
ComponentDataLangSelector.prototype.langAddEvent;
/** @type {?} */
ComponentDataLangSelector.prototype.langRemoveEvent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvQ29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUEyQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUd4RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRW5ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSWxFLHVCQUFNLFNBQVMsR0FBVyw2QkFBNkIsQ0FBQztBQW9EeEQsTUFBTSxnQ0FBaUMsU0FBUSxpQ0FBaUM7Ozs7O0lBaUY5RSxZQUFZLFVBQXNCLEVBQUUsYUFBNEI7UUFDOUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQzttQ0E5RUcsWUFBWSxDQUFDLDJCQUEyQjtvQ0FDdkMsWUFBWSxDQUFDLDRCQUE0QjtRQStFOUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7S0FDdkI7Ozs7SUFFTSxRQUFROztRQUViLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFX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QVU7WUFDN0IsYUFBYTs7O3NCQTRFbkIsS0FBSzsyQkFHTCxLQUFLOzJCQUdMLEtBQUs7aUNBR0wsS0FBSztxQkFHTCxLQUFLO3FDQUdMLEtBQUs7Z0NBR0wsS0FBSzsyQkFHTCxLQUFLOzBCQUdMLEtBQUs7K0JBR0wsS0FBSzt3QkFHTCxLQUFLO3VCQUdMLEtBQUssU0FBQyxZQUFZO3dCQUdsQixLQUFLO3lCQUVMLEtBQUs7cUJBSUwsS0FBSztzQkFLTCxLQUFLO3VCQUdMLEtBQUs7MEJBTUwsTUFBTSxTQUFDLFNBQVM7K0JBSWhCLE1BQU0sU0FBQyxjQUFjOzZCQUdyQixNQUFNLFNBQUMsWUFBWTtnQ0FHbkIsTUFBTSxTQUFDLGVBQWU7OztJQWpFdEIsTUFBTSxFQUFFO3NDQUNRLDhCQUE4Qjs7O0lBRTlDLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTtzQ0FDYSxRQUFROzs7SUFFN0IsTUFBTSxFQUFFO3NDQUNZLFFBQVE7OztJQUU1QixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLENBQUMsWUFBWSxDQUFDOzs7O0lBS3BCLE1BQU0sRUFBRTs7OztJQUlSLElBQUksRUFBRTtJQUNOLE1BQU0sRUFBRTs7OztJQUlSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sRUFBRTs7OztJQU1SLE1BQU0sQ0FBQyxNQUFNLENBQUM7c0NBQ00sWUFBWTs7O0lBR2hDLE1BQU0sQ0FBQyxXQUFXLENBQUM7c0NBQ00sWUFBWTs7O0lBRXJDLE1BQU0sQ0FBQyxTQUFTLENBQUM7c0NBQ00sWUFBWTs7O0lBRW5DLE1BQU0sQ0FBQyxZQUFZLENBQUM7c0NBQ00sWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9EaWFsb2dTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vY29tcG9uZW50L21vZGVsL1BobG94QXBwSW5mbyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudERhdGFMYW5nU2VsZWN0b3IgfSBmcm9tICcuL0Fic3RyYWN0Q29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvcic7XG5pbXBvcnQgeyBJSGFzTW9kZWwgfSBmcm9tICcuL0lIYXNNb2RlbCc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XG5pbXBvcnQgeyBJRGF0YUxhbmdTZWxlY3RvckNvbnRyb2xsZXIgfSBmcm9tICcuL0lEYXRhTGFuZ1NlbGVjdG9yQ29udHJvbGxlcic7XG5pbXBvcnQgeyBDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yTW9kZWwgfSBmcm9tICcuL21vZGVsL0NvbXBvbmVudERhdGFMYW5nU2VsZWN0b3JNb2RlbCc7XG5pbXBvcnQgeyBMYW5ndWFnZUJ1dHRvbk1vZGVsIH0gZnJvbSAnLi9tb2RlbC9MYW5ndWFnZUJ1dHRvbk1vZGVsJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWNvbXBvbmVudC1sYW5nLXNlbGVjdG9yXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogJ3BoeC1jb21wb25lbnQtbGFuZy1zZWxlY3RvcicsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1jb21wb25lbnQtbGFuZy1zZWxlY3RvciBkaXNhYmxlZC1vdmVybGF5XCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoKClcIiBbc3R5bGUuaGVpZ2h0XT1cImdldEhlaWdodCgpXCI+XG5cdDxkaXYgY2xhc3M9XCJ3cmFwcGVyIGxlZnRcIiBbY2xhc3MuZXhwYW5kXT1cIiFoYXNMYW5ndWFnZSgpXCI+XG5cdFx0PGRpdiBjbGFzcz1cImNvbXBvbmVudC1wYW5lXCI+XG5cdFx0XHQ8IS0tIGRlZmF1bHQgLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY29tcG9uZW50LXdyYXBwZXJcIiBbY2xhc3Muc2hvd109XCJfaXNTZWxlY3RlZExhbmd1YWdlQnlJbmRleChudWxsKVwiPlxuXHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyICpuZ0lmPVwiaGFzTW9kZWwoKVwiIFt0eXBlXT1cImdldE1vZGVsKCkuY29tcG9uZW50VHlwZVwiIFttb2RlbF09XCJnZXRNb2RlbCgpLmNvbXBvbmVudE1vZGVsXCJcblx0XHRcdFx0XHRbaGFuZGxlcl09XCJnZXREZWZhdWx0Q29tcG9uZW50SGFuZGxlcigpXCIgW2RhdGFdPVwiX2dldERlZmF1bHREYXRhKClcIiBbZGF0YVBhcmVudF09XCJ0aGlzXCJcblx0XHRcdFx0XHRbb3B0aW9uc109XCJnZXRNb2RlbCgpLmNvbXBvbmVudE9wdGlvbnNcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PCEtLSBieSBsYW5nIC0tPlxuXHRcdFx0PG5nLXRlbXBsYXRlIG5nRm9yIGxldC1pdGVtIFtuZ0Zvck9mXT1cIl9nZXREYXRhTGFuZ0xpc3QoKVwiIGxldC1pPVwiaW5kZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbXBvbmVudC13cmFwcGVyXCIgW2NsYXNzLnNob3ddPVwiX2lzU2VsZWN0ZWRMYW5ndWFnZUJ5SW5kZXgoaSlcIj5cblx0XHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyICpuZ0lmPVwiaGFzTW9kZWwoKVwiIFt0eXBlXT1cImdldE1vZGVsKCkuY29tcG9uZW50VHlwZVwiIFttb2RlbF09XCJnZXRNb2RlbCgpLmNvbXBvbmVudE1vZGVsXCJcblx0XHRcdFx0XHRcdFtoYW5kbGVyXT1cImdldENvbXBvbmVudEhhbmRsZXIoKVwiIFtzZXR0aW5nXT1cImdldENvbXBvbmVudFNldHRpbmcoaSlcIiBbZGF0YV09XCJpdGVtXCIgW2RhdGFQYXJlbnRdPVwidGhpc1wiXG5cdFx0XHRcdFx0XHRbb3B0aW9uc109XCJnZXRNb2RlbCgpLmNvbXBvbmVudE9wdGlvbnNcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIndyYXBwZXIgcmlnaHRcIiBbY2xhc3MuaGlkZV09XCIhaGFzTGFuZ3VhZ2UoKVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsYW5nLXBhbmVcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJsYW5ndWFnZS1idG4gZGVmYXVsdCBkYXRhXCIgW2NsYXNzLnNlbGVjdGVkXT1cImlzU2VsZWN0ZWRMYW5ndWFnZShudWxsKVwiIFtjbGFzcy5kaXJ0eV09XCJfaXNEYXRhRGlydHlCeUluZGV4KG51bGwpXCJcblx0XHRcdFx0KGNsaWNrKT1cIm9uQWN0aW9uQnRuQ2xpY2tlZCgkZXZlbnQsIG51bGwsIG51bGwpXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyIGZsdWlkXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cblx0XHRcdFx0XHRcdERlZmF1bHRcblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0TWVyZ2VkTGFuZ3VhZ2VMaXN0KCk7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImxhbmd1YWdlLWJ0blwiIFtjbGFzcy5kYXRhXT1cIl9sYW5nSGFzRGF0YUJ5SW5kZXgoaSlcIlxuXHRcdFx0XHRbY2xhc3MuZGlydHldPVwiX2lzRGF0YURpcnR5QnlJbmRleChpKVwiXG5cdFx0XHRcdFtjbGFzcy5zZWxlY3RlZF09XCJpc1NlbGVjdGVkTGFuZ3VhZ2UoaXRlbSlcIiAoY2xpY2spPVwib25BY3Rpb25CdG5DbGlja2VkKCRldmVudCwgaXRlbSwgaSlcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cIiFfaGFzQnV0dG9uSWNvbihpdGVtKVwiPnt7aXRlbS5sYWJlbH19PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiX2hhc0J1dHRvbkljb24oaXRlbSlcIj5cblx0XHRcdFx0XHRcdFx0PGltZyBzcmM9XCJ7e2l0ZW0uaWNvblVSTH19XCI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJtb2NraW5nLWJ0blwiPjwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yIGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yIGltcGxlbWVudHMgT25Jbml0LCBJSGFzTW9kZWwge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgcHJpdmF0ZSBMQU5HVUFHRV9GSUVMRF9OQU1FOiBzdHJpbmcgPSBQaGxveEFwcEluZm8uREVGQVVMVF9MQU5HVUFHRV9GSUVMRF9OQU1FO1xuICBwcml2YXRlIE9CSkVDVF9JRF9GSUVMRF9OQU1FOiBzdHJpbmcgPSBQaGxveEFwcEluZm8uREVGQVVMVF9PQkpFQ1RfSURfRklFTERfTkFNRTtcblxuICBwcm90ZWN0ZWQgZGF0YU9iamVjdHM6IGFueVtdO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG1vZGVsOiBDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yTW9kZWw7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgY29udHJvbGxlcjogSURhdGFMYW5nU2VsZWN0b3JDb250cm9sbGVyO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YUhlbHBcbiAgQElucHV0KClcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlbHA6IGFueTtcbiAgLy8gLS0tIHNlbGZcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCB3aWR0aDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlaWdodDogc3RyaW5nO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgQE91dHB1dCgncGh4TG9hZCcpXG4gIEBPcHRpb24oJ2xvYWQnKVxuICBwcm90ZWN0ZWQgbG9hZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3REYXRhTGFuZ1NlbGVjdG9yXG4gIEBPdXRwdXQoJ3BoeExhbmdDbGljaycpXG4gIEBPcHRpb24oJ2xhbmdDbGljaycpXG4gIHByb3RlY3RlZCBsYW5nQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeExhbmdBZGQnKVxuICBAT3B0aW9uKCdsYW5nQWRkJylcbiAgcHJvdGVjdGVkIGxhbmdBZGRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeExhbmdSZW1vdmUnKVxuICBAT3B0aW9uKCdsYW5nUmVtb3ZlJylcbiAgcHJvdGVjdGVkIGxhbmdSZW1vdmVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIGRpYWxvZ1NlcnZpY2UpO1xuXG4gICAgdGhpcy5kYXRhT2JqZWN0cyA9IFtdO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFdlJ3ZlIHRvIHJlc29sdmUgY29udHJvbGxlciBmcm9tIG1vZGVsIGJlZm9yZSBjYWxsaW5nIHN1cGVyLm5nT25Jbml0KCkuXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBPbmx5IGNvbnRyb2xsZXIgaXMgbnVsbCBvciB1bmRlZmluZWQgaW4gd2hpY2ggdGhhdCB3ZSdsbCB1c2UgdmFsdWUgZnJvbSBtb2RlbC5cbiAgICAgIGlmICgodGhpcy5jb250cm9sbGVyID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLmNvbnRyb2xsZXIgPT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSB0aGlzLm1vZGVsLmNvbnRyb2xsZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNNb2RlbCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kZWwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNb2RlbChtb2RlbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuXG4gICAgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyByZXBsYWNlIGNvbnRyb2xsZXJcbiAgICAgIHRoaXMuY29udHJvbGxlciA9IHRoaXMubW9kZWwuY29udHJvbGxlcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFuZ3VhZ2VGaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5MQU5HVUFHRV9GSUVMRF9OQU1FO1xuICB9XG5cbiAgcHVibGljIGdldE9iamVjdElkRmllbGROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuT0JKRUNUX0lEX0ZJRUxEX05BTUU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5zdGFuY2VEZWZhdWx0RGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHVibGljIGdldEluc3RhbmNlRGF0YUxhbmd1YWdlKGRhdGE6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwdWJsaWMgaXNEYXRhTGFuZ3VhZ2VEaXJ0eShkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGRhdGEgYXMgYW55XG4gICAqIEByZXR1cm4gYW55IGFzIG9uZSBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdERhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgcHVibGljIGdldERhdGFPYmplY3RzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhT2JqZWN0cztcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZUxhbmd1YWdlQnV0dG9uTW9kZWwobGFuZ0NvZGU6IHN0cmluZyk6IExhbmd1YWdlQnV0dG9uTW9kZWwge1xuICAgIGxldCB1cHBlckNhc2VMYW5nID0gKGxhbmdDb2RlICE9PSBudWxsICYmIHR5cGVvZiBsYW5nQ29kZSAhPT0gJ3VuZGVmaW5lZCcpID8gbGFuZ0NvZGUudG9VcHBlckNhc2UoKSA6ICdOL0EnO1xuICAgIHJldHVybiBuZXcgTGFuZ3VhZ2VCdXR0b25Nb2RlbCgnJywgbGFuZ0NvZGUsIHVwcGVyQ2FzZUxhbmcpO1xuICB9XG5cbiAgcHVibGljIHNldERhdGEoZGF0YTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuc2V0RGF0YShkYXRhKTtcblxuICAgIHRoaXMuZGF0YU9iamVjdHMgPSBbXTtcbiAgICB0aGlzLmRhdGFPYmplY3RzLnB1c2goZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0V2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53aWR0aDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRXaWR0aCh3aWR0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICB9XG5cbiAgcHVibGljIGdldEhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhlaWdodDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIZWlnaHQoaGVpZ2h0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxufVxuIl19