UNPKG

moh-common-lib

Version:

A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).

257 lines (254 loc) 20.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { forwardRef, Component, Input, Output, EventEmitter } from '@angular/core'; import { Person } from '../../models/person.model'; import { Base } from '../../models/base'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; /** * @record */ export function FullNameErrorMsg() { } if (false) { /** @type {?|undefined} */ FullNameErrorMsg.prototype.required; /** @type {?|undefined} */ FullNameErrorMsg.prototype.pattern; } /** * FullNameComponent includes a first, middle, and last name field. If you only * need an individual field, \@see NameComponent. * * **Note** This component is in dev, there are issues around "required" * TODO - Properly handle "required" * * \@example * <common-full-name [(person)]='person'></common-full-name> * * @export */ var FullNameComponent = /** @class */ (function (_super) { tslib_1.__extends(FullNameComponent, _super); function FullNameComponent() { var _this = _super.call(this) || this; _this.personChange = new EventEmitter(); _this.firstNamelabel = 'First Name'; _this.middleNamelabel = 'Middle Name'; _this.lastNamelabel = 'Last Name'; _this.disabled = false; _this.NameRegEx = '^[a-zA-Z][a-zA-Z\\-.\' ]*$'; // default messages _this.requiredMsgSeg = 'is required'; _this.pattern = 'Must begin with a letter followed by a letters, hyphen, period, apostrophe, or blank character'; _this._onChange = (/** * @param {?} _ * @return {?} */ function (_) { }); _this._onTouched = (/** * @return {?} */ function () { }); return _this; } /** * @return {?} */ FullNameComponent.prototype.ngOnInit = /** * @return {?} */ function () { if (this.person) { this.firstName = this.person.firstName ? this.person.firstName : ''; this.lastName = this.person.lastName ? this.person.lastName : ''; this.middleName = this.person.middleName ? this.person.middleName : ''; } this.errMsg = { required: this.requiredMsgSeg, pattern: this.pattern }; }; /*ngAfterViewInit(): void { // https://github.com/angular/angular/issues/24818 this.form.valueChanges.pipe(debounceTime(0)).subscribe((values) => { this.onChange.emit(values); this._onChange(values); this._onTouched(); } ); }*/ // setFirstName(value: any) { // this.person.firstName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } // setMiddleName(value: any) { // this.person.middleName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } // setLastName(value: any) { // this.person.lastName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } /*ngAfterViewInit(): void { // https://github.com/angular/angular/issues/24818 this.form.valueChanges.pipe(debounceTime(0)).subscribe((values) => { this.onChange.emit(values); this._onChange(values); this._onTouched(); } ); }*/ // setFirstName(value: any) { // this.person.firstName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } // setMiddleName(value: any) { // this.person.middleName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } // setLastName(value: any) { // this.person.lastName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } /** * @param {?} fn * @return {?} */ FullNameComponent.prototype.registerOnChange = /*ngAfterViewInit(): void { // https://github.com/angular/angular/issues/24818 this.form.valueChanges.pipe(debounceTime(0)).subscribe((values) => { this.onChange.emit(values); this._onChange(values); this._onTouched(); } ); }*/ // setFirstName(value: any) { // this.person.firstName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } // setMiddleName(value: any) { // this.person.middleName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } // setLastName(value: any) { // this.person.lastName = value; // this.onChange.emit(this.person); // this._onChange(this.person); // this._onTouched(); // } /** * @param {?} fn * @return {?} */ function (fn) { this._onChange = fn; }; /** * @param {?} fn * @return {?} */ FullNameComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this._onTouched = fn; }; /** * @param {?} value * @return {?} */ FullNameComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { this.person = value; }; FullNameComponent.decorators = [ { type: Component, args: [{ selector: 'common-full-name', template: "<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"First Name\"\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.firstName\"\r\n objectID=\"first_name\"></common-name>\r\n <!-- (blurEvent)=\"onBlur($event)\" -->\r\n</div>\r\n\r\n<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"Middle Name\"\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.middleName\"\r\n objectID=\"middle_name\"></common-name>\r\n</div>\r\n\r\n<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"Last Name\"\r\n required\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.lastName\"\r\n objectID=\"last_name\"></common-name>\r\n</div>\r\n\r\n\r\n<!-- \r\n<div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (firstNameRef.touched && (firstName === undefined || firstName === null))}\">\r\n <label class=\"control-label\" for=\"firstName_{{objectId}}\"\r\n >{{firstNamelabel}}</label>\r\n <input type=\"text\"\r\n [ngModel]=\"firstName\"\r\n name=\"firstName\"\r\n (ngModelChange)=\"setFirstName($event)\"\r\n required\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n id=\"firstName_{{objectId}}\" #firstNameRef=\"ngModel\"\r\n class=\"form-control\">\r\n <div *ngIf='showError && (firstNameRef.touched && (firstName === undefined || firstName === null))' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"firstNameRef.errors?.required\"\r\n >{{firstNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"firstNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (middleNameRef.touched &&(middleName === undefined || middleName === null))}\">\r\n <label class=\"control-label if-applicable\" for=\"middleName_{{objectId}}\">{{middleNamelabel}}</label>\r\n <input type=\"text\"\r\n name=\"middleName\"\r\n [ngModel]=\"middleName\"\r\n (ngModelChange)=\"setMiddleName($event)\"\r\n id='middleName_{{objectId}}' #middleNameRef=\"ngModel\"\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n class=\"form-control\">\r\n <div *ngIf='middleNameRef.touched || showError' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"middleNameRef.errors?.required\"\r\n >{{middleNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"middleNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (lastNameRef.touched && (lastName === undefined || lastName === null))}\">\r\n <label class=\"control-label\" for=\"lastName_{{objectId}}\" >{{lastNamelabel}}</label>\r\n <input type=\"text\"\r\n name=\"lastName\"\r\n [ngModel]=\"lastName\"\r\n (ngModelChange)=\"setLastName($event)\"\r\n id=\"lastName_{{objectId}}\" #lastNameRef=\"ngModel\"\r\n required\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n class=\"form-control\">\r\n <div *ngIf='showError && (lastNameRef.touched && (lastName === undefined || lastName === null))' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"lastNameRef.errors?.required\"\r\n >{{lastNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"lastNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div> -->\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef((/** * @return {?} */ function () { return FullNameComponent; })) } ], styles: [".form-group{margin-bottom:1.5rem}"] }] } ]; /** @nocollapse */ FullNameComponent.ctorParameters = function () { return []; }; FullNameComponent.propDecorators = { person: [{ type: Input }], personChange: [{ type: Output }], showError: [{ type: Input }], firstNamelabel: [{ type: Input }], middleNamelabel: [{ type: Input }], lastNamelabel: [{ type: Input }], disabled: [{ type: Input }] }; return FullNameComponent; }(Base)); export { FullNameComponent }; if (false) { /** @type {?} */ FullNameComponent.prototype.person; /** @type {?} */ FullNameComponent.prototype.personChange; /** @type {?} */ FullNameComponent.prototype.showError; /** @type {?} */ FullNameComponent.prototype.firstNamelabel; /** @type {?} */ FullNameComponent.prototype.middleNamelabel; /** @type {?} */ FullNameComponent.prototype.lastNamelabel; /** @type {?} */ FullNameComponent.prototype.disabled; /** @type {?} */ FullNameComponent.prototype.firstName; /** @type {?} */ FullNameComponent.prototype.middleName; /** @type {?} */ FullNameComponent.prototype.lastName; /** @type {?} */ FullNameComponent.prototype.NameRegEx; /** @type {?} */ FullNameComponent.prototype.errMsg; /** * @type {?} * @private */ FullNameComponent.prototype.requiredMsgSeg; /** * @type {?} * @private */ FullNameComponent.prototype.pattern; /** @type {?} */ FullNameComponent.prototype._onChange; /** @type {?} */ FullNameComponent.prototype._onTouched; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1uYW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vaC1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZnVsbC1uYW1lL2Z1bGwtbmFtZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUd6RSxzQ0FHQzs7O0lBRkMsb0NBQWtCOztJQUNsQixtQ0FBaUI7Ozs7Ozs7Ozs7Ozs7O0FBZW5CO0lBU3VDLDZDQUFJO0lBeUJ6QztRQUFBLFlBQ0UsaUJBQU8sU0FDUjtRQXhCUyxrQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFM0Msb0JBQWMsR0FBVyxZQUFZLENBQUM7UUFDdEMscUJBQWUsR0FBVyxhQUFhLENBQUM7UUFDeEMsbUJBQWEsR0FBVyxXQUFXLENBQUM7UUFDcEMsY0FBUSxHQUFZLEtBQUssQ0FBQztRQU81QixlQUFTLEdBQVcsNEJBQTRCLENBQUM7O1FBSWhELG9CQUFjLEdBQVcsYUFBYSxDQUFDO1FBQ3ZDLGFBQU8sR0FBVyxnR0FBZ0csQ0FBQztRQUVwSCxlQUFTOzs7O1FBQUcsVUFBQyxDQUFNLElBQU0sQ0FBQyxFQUFDO1FBQzNCLGdCQUFVOzs7UUFBRyxjQUFPLENBQUMsRUFBQzs7SUFJN0IsQ0FBQzs7OztJQUVELG9DQUFROzs7SUFBUjtRQUVFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBTTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFFSCw2QkFBNkI7SUFDN0IsbUNBQW1DO0lBQ25DLHFDQUFxQztJQUNyQyxpQ0FBaUM7SUFDakMsdUJBQXVCO0lBQ3ZCLElBQUk7SUFFSiw4QkFBOEI7SUFFOUIsb0NBQW9DO0lBQ3BDLHFDQUFxQztJQUNyQyxpQ0FBaUM7SUFDakMsdUJBQXVCO0lBRXZCLElBQUk7SUFFSiw0QkFBNEI7SUFFNUIsa0NBQWtDO0lBQ2xDLHFDQUFxQztJQUNyQyxpQ0FBaUM7SUFDakMsdUJBQXVCO0lBRXZCLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVKLDRDQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBaEIsVUFBaUIsRUFBTztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7OztJQUVELDZDQUFpQjs7OztJQUFqQixVQUFrQixFQUFPO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Ozs7O0lBRUQsc0NBQVU7Ozs7SUFBVixVQUFXLEtBQVU7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs7Z0JBbEdGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixnL0lBQXlDO29CQUV6QyxTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVTs7OzRCQUFDLGNBQU0sT0FBQSxpQkFBaUIsRUFBakIsQ0FBaUIsRUFBRSxFQUFDO3FCQUM5Rjs7aUJBQ0Y7Ozs7O3lCQUlFLEtBQUs7K0JBQ0wsTUFBTTs0QkFDTixLQUFLO2lDQUNMLEtBQUs7a0NBQ0wsS0FBSztnQ0FDTCxLQUFLOzJCQUNMLEtBQUs7O0lBb0ZSLHdCQUFDO0NBQUEsQUFyR0QsQ0FTdUMsSUFBSSxHQTRGMUM7U0E1RlksaUJBQWlCOzs7SUFFNUIsbUNBQXdCOztJQUN4Qix5Q0FBb0Q7O0lBQ3BELHNDQUE0Qjs7SUFDNUIsMkNBQStDOztJQUMvQyw0Q0FBaUQ7O0lBQ2pELDBDQUE2Qzs7SUFDN0MscUNBQW1DOztJQUduQyxzQ0FBbUI7O0lBQ25CLHVDQUFtQjs7SUFDbkIscUNBQWtCOztJQUVsQixzQ0FBd0Q7O0lBRXhELG1DQUFpQzs7Ozs7SUFFakMsMkNBQStDOzs7OztJQUMvQyxvQ0FBMkg7O0lBRTNILHNDQUFrQzs7SUFDbEMsdUNBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9yd2FyZFJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQZXJzb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcGVyc29uLm1vZGVsJztcclxuaW1wb3J0IHsgQmFzZSB9IGZyb20gJy4uLy4uL21vZGVscy9iYXNlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRnVsbE5hbWVFcnJvck1zZyB7XHJcbiAgcmVxdWlyZWQ/OiBzdHJpbmc7XHJcbiAgcGF0dGVybj86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEZ1bGxOYW1lQ29tcG9uZW50IGluY2x1ZGVzIGEgZmlyc3QsIG1pZGRsZSwgYW5kIGxhc3QgbmFtZSBmaWVsZC4gIElmIHlvdSBvbmx5XHJcbiAqIG5lZWQgYW4gaW5kaXZpZHVhbCBmaWVsZCwgQHNlZSBOYW1lQ29tcG9uZW50LlxyXG4gKlxyXG4gKiAqKk5vdGUqKiBUaGlzIGNvbXBvbmVudCBpcyBpbiBkZXYsIHRoZXJlIGFyZSBpc3N1ZXMgYXJvdW5kIFwicmVxdWlyZWRcIlxyXG4gKiBUT0RPIC0gUHJvcGVybHkgaGFuZGxlIFwicmVxdWlyZWRcIlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgICAgICA8Y29tbW9uLWZ1bGwtbmFtZSBbKHBlcnNvbildPSdwZXJzb24nPjwvY29tbW9uLWZ1bGwtbmFtZT5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb21tb24tZnVsbC1uYW1lJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZnVsbC1uYW1lLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mdWxsLW5hbWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIG11bHRpOiB0cnVlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGdWxsTmFtZUNvbXBvbmVudCApfVxyXG4gIF1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBGdWxsTmFtZUNvbXBvbmVudCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgcGVyc29uOiBQZXJzb247XHJcbiAgQE91dHB1dCgpIHBlcnNvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGVyc29uPigpO1xyXG4gIEBJbnB1dCgpIHNob3dFcnJvcjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBmaXJzdE5hbWVsYWJlbDogc3RyaW5nID0gJ0ZpcnN0IE5hbWUnO1xyXG4gIEBJbnB1dCgpIG1pZGRsZU5hbWVsYWJlbDogc3RyaW5nID0gJ01pZGRsZSBOYW1lJztcclxuICBASW5wdXQoKSBsYXN0TmFtZWxhYmVsOiBzdHJpbmcgPSAnTGFzdCBOYW1lJztcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgZmlyc3ROYW1lOiBzdHJpbmcgO1xyXG4gIG1pZGRsZU5hbWU6IHN0cmluZztcclxuICBsYXN0TmFtZTogc3RyaW5nIDtcclxuXHJcbiAgcHVibGljIE5hbWVSZWdFeDogc3RyaW5nID0gJ15bYS16QS1aXVthLXpBLVpcXFxcLS5cXCcgXSokJztcclxuXHJcbiAgcHVibGljIGVyck1zZzogRnVsbE5hbWVFcnJvck1zZyA7XHJcbiAgLy8gZGVmYXVsdCBtZXNzYWdlc1xyXG4gIHByaXZhdGUgcmVxdWlyZWRNc2dTZWc6IHN0cmluZyA9ICdpcyByZXF1aXJlZCc7XHJcbiAgcHJpdmF0ZSBwYXR0ZXJuOiBzdHJpbmcgPSAnTXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyIGZvbGxvd2VkIGJ5IGEgbGV0dGVycywgaHlwaGVuLCBwZXJpb2QsIGFwb3N0cm9waGUsIG9yIGJsYW5rIGNoYXJhY3Rlcic7XHJcblxyXG4gIHB1YmxpYyBfb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICBwdWJsaWMgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBpZiAodGhpcy5wZXJzb24pIHtcclxuICAgICAgdGhpcy5maXJzdE5hbWUgPSB0aGlzLnBlcnNvbi5maXJzdE5hbWUgPyB0aGlzLnBlcnNvbi5maXJzdE5hbWUgOiAnJztcclxuICAgICAgdGhpcy5sYXN0TmFtZSA9IHRoaXMucGVyc29uLmxhc3ROYW1lID8gdGhpcy5wZXJzb24ubGFzdE5hbWUgOiAnJztcclxuICAgICAgdGhpcy5taWRkbGVOYW1lID0gdGhpcy5wZXJzb24ubWlkZGxlTmFtZSA/IHRoaXMucGVyc29uLm1pZGRsZU5hbWUgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVyck1zZyA9ICAgIHtcclxuICAgICAgcmVxdWlyZWQ6IHRoaXMucmVxdWlyZWRNc2dTZWcsXHJcbiAgICAgIHBhdHRlcm46IHRoaXMucGF0dGVyblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8yNDgxOFxyXG4gICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDApKS5zdWJzY3JpYmUoKHZhbHVlcykgPT4ge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh2YWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH0qL1xyXG5cclxuICAvLyBzZXRGaXJzdE5hbWUodmFsdWU6IGFueSkge1xyXG4gIC8vICAgdGhpcy5wZXJzb24uZmlyc3ROYW1lID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25DaGFuZ2UodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXRNaWRkbGVOYW1lKHZhbHVlOiBhbnkpIHtcclxuXHJcbiAgLy8gICB0aGlzLnBlcnNvbi5taWRkbGVOYW1lID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25DaGFuZ2UodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcblxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0TGFzdE5hbWUodmFsdWU6IGFueSkge1xyXG5cclxuICAvLyAgIHRoaXMucGVyc29uLmxhc3ROYW1lID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25DaGFuZ2UodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcblxyXG4gIC8vIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucGVyc29uID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19