vega-footer-logo
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 6.1.5.
353 lines (343 loc) • 41.3 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/http'), require('rxjs/operators'), require('crypto-js'), require('@angular/router'), require('@angular/platform-browser')) :
typeof define === 'function' && define.amd ? define('vega-footer-logo', ['exports', '@angular/core', '@angular/http', 'rxjs/operators', 'crypto-js', '@angular/router', '@angular/platform-browser'], factory) :
(factory((global['vega-footer-logo'] = {}),global.ng.core,global.ng.http,global.rxjs.operators,global.CryptoJS,global.ng.router,global.ng.platformBrowser));
}(this, (function (exports,core,http,operators,CryptoJS,router,platformBrowser) { 'use strict';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var ResultMessage = (function () {
function ResultMessage() {
}
return ResultMessage;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/** @type {?} */
var gnPostAlertAcknowledgement = "Notify/PostAlertAcknowledgement";
/** @type {?} */
var gnPostResetAllAlerts = "Notify/PostResetAllAlerts";
var NotificationServices = (function () {
function NotificationServices(http$$1) {
this.http = http$$1;
this.userTO = {};
this.resultMessage = new ResultMessage;
}
/**
* @return {?}
*/
NotificationServices.prototype.getUserTOFromLocalStorage = /**
* @return {?}
*/
function () {
/** @type {?} */
var userTo = {};
userTo = JSON.parse(this.decryption(localStorage.getItem("currentUser")));
return userTo;
};
/**
* @param {?} Url
* @return {?}
*/
NotificationServices.prototype.getAlertForNotify = /**
* @param {?} Url
* @return {?}
*/
function (Url) {
debugger;
if (this.userTO == null && this.userTO == undefined) {
return;
}
this.getAllActiveNotification(this.userTO, Url).subscribe(function (res) {
/** @type {?} */
var v = res.filter(function (p) { return p.IsAcknowledged == 0; }).length;
if (document.getElementById("bgNotification") != null) {
document.getElementById("bgNotification").innerText = v == 0 ? '' : v.toString();
}
}, function (err) { });
};
/**
* @param {?} UserTo
* @param {?} masterBaseUrl
* @return {?}
*/
NotificationServices.prototype.getAllActiveNotification = /**
* @param {?} UserTo
* @param {?} masterBaseUrl
* @return {?}
*/
function (UserTo, masterBaseUrl) {
/** @type {?} */
var keys = masterBaseUrl + "Notify/GetAllActiveAlertList?userId=1&roleId=1";
return this.http
.get(keys).pipe(operators.map(function (response) { return response.json(); }));
};
/**
* @param {?} notificationTo
* @param {?} loginId
* @param {?} URL
* @return {?}
*/
NotificationServices.prototype.postAlertAcknowledgement = /**
* @param {?} notificationTo
* @param {?} loginId
* @param {?} URL
* @return {?}
*/
function (notificationTo, loginId, URL) {
/** @type {?} */
var params = {
alertUsersTO: notificationTo,
loginUserId: loginId
};
/** @type {?} */
var bodyString = JSON.stringify(params);
/** @type {?} */
var headers = new http.Headers({ 'Content-Type': 'application/json' });
/** @type {?} */
var options = new http.RequestOptions({ headers: headers });
return this.http.post(URL + gnPostAlertAcknowledgement, bodyString, options);
};
/**
* @param {?} userTo
* @param {?} URL
* @return {?}
*/
NotificationServices.prototype.postAllAlertAcknowledgement = /**
* @param {?} userTo
* @param {?} URL
* @return {?}
*/
function (userTo, URL) {
/** @type {?} */
var params = {
loginUserId: userTo.IdUser,
roleId: userTo.UserRoleList[0].RoleId
};
/** @type {?} */
var bodyString = JSON.stringify(params);
/** @type {?} */
var headers = new http.Headers({ 'Content-Type': 'application/json' });
/** @type {?} */
var options = new http.RequestOptions({ headers: headers });
return this.http.post(URL + gnPostResetAllAlerts, bodyString, options);
};
/**
* @param {?} data
* @return {?}
*/
NotificationServices.prototype.encryption = /**
* @param {?} data
* @return {?}
*/
function (data) {
data = JSON.stringify(data);
/** @type {?} */
var ciphertext = CryptoJS.AES.encrypt(data.toString(), "secret key 123");
return ciphertext.toString();
};
/**
* @param {?} data
* @return {?}
*/
NotificationServices.prototype.decryption = /**
* @param {?} data
* @return {?}
*/
function (data) {
// Decrypt
if (data) {
/** @type {?} */
var bytes = CryptoJS.AES.decrypt(data, "secret key 123");
/** @type {?} */
var plaintext = bytes.toString(CryptoJS.enc.Utf8);
return plaintext;
}
return null;
};
NotificationServices.decorators = [
{ type: core.Injectable }
];
/** @nocollapse */
NotificationServices.ctorParameters = function () {
return [
{ type: http.Http }
];
};
return NotificationServices;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var NotificationComponent = (function () {
function NotificationComponent(comman, router$$1, route) {
this.comman = comman;
this.router = router$$1;
this.userTO = {};
this.resultMessage = new ResultMessage;
this.notificationList = [];
this.userTO = this.comman.getUserTOFromLocalStorage();
}
/**
* @return {?}
*/
NotificationComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.comman.getAlertForNotify(this.URL);
this.getNotificationListByUser();
};
/**
* @return {?}
*/
NotificationComponent.prototype.getNotificationListByUser = /**
* @return {?}
*/
function () {
var _this = this;
this.notificationList = [];
this.comman.getAllActiveNotification(this.userTO, this.URL).subscribe(function (notificationRes) {
_this.notificationList = notificationRes;
}, function (err) {
console.log('Err : ' + err);
});
};
/**
* @param {?} alertMessageTo
* @param {?=} isReset
* @return {?}
*/
NotificationComponent.prototype.markAsReadToNotification = /**
* @param {?} alertMessageTo
* @param {?=} isReset
* @return {?}
*/
function (alertMessageTo, isReset) {
var _this = this;
if (isReset === void 0) {
isReset = false;
}
debugger;
if (alertMessageTo.IsAcknowledged != 0 && !isReset) {
return;
}
if (isReset) {
alertMessageTo.IsReseted = 1;
}
this.comman.postAlertAcknowledgement(alertMessageTo, this.userTO.IdUser, this.URL).subscribe(function (vRes) {
debugger;
// if (this.resultMessage.MessageType == 1 && this.resultMessage.Result == 1) {
// if (this.resultMessage.MessageType == 1 && this.resultMessage.Result == 1) {
_this.comman.getAlertForNotify(_this.URL);
_this.getNotificationListByUser();
//}
}, function (err) {
console.log("Error Msg : " + err);
});
};
/**
* @param {?} isAcknowelded
* @return {?}
*/
NotificationComponent.prototype.getValidationColor = /**
* @param {?} isAcknowelded
* @return {?}
*/
function (isAcknowelded) {
return isAcknowelded == 0 ? 'bold' : 'normal';
};
/**
* @return {?}
*/
NotificationComponent.prototype.resetAllNotification = /**
* @return {?}
*/
function () {
var _this = this;
//this.ss.showLoader();
this.comman.postAllAlertAcknowledgement(this.userTO, this.URL).subscribe(function (vRes) {
//this.resultMessage = vRes;
if (_this.resultMessage.MessageType == 1 && _this.resultMessage.Result == 1) {
_this.comman.getAlertForNotify(_this.URL);
_this.notificationList = [];
}
}, function (err) {
console.log("Error Msg : " + err);
});
};
/**
* @param {?} alertMessageTo
* @return {?}
*/
NotificationComponent.prototype.redirectFun = /**
* @param {?} alertMessageTo
* @return {?}
*/
function (alertMessageTo) {
if (alertMessageTo.NavigationUrl != null || alertMessageTo.NavigationUrl != "") {
this.router.navigate(['/' + alertMessageTo.NavigationUrl]);
}
};
NotificationComponent.decorators = [
{ type: core.Component, args: [{
selector: 'notification',
template: "\r\n<div class=\"col-lg-12\" style=\"margin-top: 20px\">\r\n<div class=\"panel panel-default top10 \">\r\n <div class=\"panel-heading\" style=\"color: red\">\r\n All Notification\r\n </div>\r\n <div class=\"panel-body\">\r\n <div class=\"row col-lg-12 top10\" *ngIf=\" notificationList?.length == 0 || notificationList == null\">\r\n <div class=\" alert-success\">\r\n <strong class=\"col-sm-2\">Information: </strong>\r\n <label class=\"control-label-left col-sm-10 fontweight\">All Message caught up !</label>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"notificationList?.length > 0\">\r\n <div class=\"col-lg-12 \">\r\n <div class=\"table-responsive \">\r\n <table class=\"table table-bordered table-hover\">\r\n <thead>\r\n <tr class=\"bg-info\">\r\n <th>Raised By</th>\r\n <th>Alert Message</th>\r\n <th>Raised On</th>\r\n <!--<th>Action</th>-->\r\n <th>\r\n <i class=\"fa fa-trash btn-custom-icon\" style=\"width:25px; height:20px;margin-right: 3px;\" aria-hidden=\"true\" (click)=\"resetAllNotification()\"> \r\n </i> Delete All\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- redirectFun(notificationTo)\" -->\r\n <tr style=\"cursor: pointer\" *ngFor=\" let notificationTo of notificationList \" [style.font-weight]=\"getValidationColor(notificationTo.IsAcknowledged)\">\r\n <td (click)=\"markAsReadToNotification(notificationTo)\">{{notificationTo.RaisedByUserName}}</td>\r\n <td (click)=\"markAsReadToNotification(notificationTo)\">{{notificationTo.AlertComment}}</td>\r\n <td (click)=\"markAsReadToNotification(notificationTo)\">{{notificationTo.RaisedOnStr}}</td>\r\n <td>\r\n <p style=\"width: 50px;margin: 0px\">\r\n <i class=\"fa fa-trash btn-custom-icon\" style=\"width:20px; height:20px;margin-right: 3px;\" aria-hidden=\"true\" (click)=\"markAsReadToNotification(notificationTo, true)\"></i>\r\n </p>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n</div>"
}] }
];
/** @nocollapse */
NotificationComponent.ctorParameters = function () {
return [
{ type: NotificationServices },
{ type: router.Router },
{ type: router.ActivatedRoute }
];
};
NotificationComponent.propDecorators = {
URL: [{ type: core.Input }]
};
return NotificationComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/** @type {?} */
var appRoutes = [
{ path: '', component: NotificationComponent }
];
var NotifyModule = (function () {
function NotifyModule() {
}
NotifyModule.decorators = [
{ type: core.NgModule, args: [{
declarations: [
NotificationComponent
],
imports: [
platformBrowser.BrowserModule, http.HttpModule, router.RouterModule.forRoot(appRoutes)
],
providers: [NotificationServices],
exports: [NotificationComponent]
},] }
];
return NotifyModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
exports.NotifyModule = NotifyModule;
exports.ɵa = NotificationComponent;
exports.ɵb = NotificationServices;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVnYS1mb290ZXItbG9nby51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL3ZlZ2EtZm9vdGVyLWxvZ28vYXBwL25vdGlmaWNhdGlvbi9tb2RlbC9ub3RpZmljYXRpb25UTy50cyIsIm5nOi8vdmVnYS1mb290ZXItbG9nby9hcHAvbm90aWZpY2F0aW9uL3NlcnZpY2VzL25vdGlmaWNhdGlvbl9zZXJ2aWNlcy50cyIsIm5nOi8vdmVnYS1mb290ZXItbG9nby9hcHAvbm90aWZpY2F0aW9uL2NvbXBvbmVudC9ub3RpZmljYXRpb25fY29tcG9uZW50cy50cyIsIm5nOi8vdmVnYS1mb290ZXItbG9nby9hcHAvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbl9tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25UTyB7XHJcbiAgICBwdWJsaWMgSWRBbGVydFVzZXI/OiBudW1iZXJcclxuICAgIHB1YmxpYyBBbGVydEluc3RhbmNlSWQ/OiBudW1iZXJcclxuICAgIHB1YmxpYyBVc2VySWQ/OiBudW1iZXJcclxuICAgIHB1YmxpYyBSb2xlSWQ/OiBudW1iZXJcclxuICAgIHB1YmxpYyBSYWlzZWRCeVVzZXJOYW1lPzogc3RyaW5nXHJcbiAgICBwdWJsaWMgQWxlcnRDb21tZW50Pzogc3RyaW5nXHJcbiAgICBwdWJsaWMgUmFpc2VkT25TdHI/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBSYWlzZWRPbj86IERhdGVcclxuICAgIHB1YmxpYyBJc0Fja25vd2xlZGdlZD86IG51bWJlclxyXG4gICAgcHVibGljIElzUmVzZXRlZD86IG51bWJlclxyXG4gICAgcHVibGljIE5hdmlnYXRpb25Vcmw/OiBzdHJpbmdcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyVE8ge1xyXG4gICAgcHVibGljIFVzZXJMb2dpbj86IHN0cmluZ1xyXG4gICAgcHVibGljIElkVXNlcj86IG51bWJlclxyXG4gICAgcHVibGljIFVzZXJQYXNzd2Q/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBVc2VyRGlzcGxheU5hbWU/OiBzdHJpbmdcclxuICAgIHB1YmxpYyBSZWdpc3RlcmVkRGV2aWNlSWQ/OiBudW1iZXJcclxuICAgIHB1YmxpYyBEZWFjdGl2YXRlZE9uPzogbnVtYmVyXHJcbiAgICBwdWJsaWMgRGVhY3RpdmF0ZWRCeT86IG51bWJlclxyXG4gICAgcHVibGljIEltZWlOdW1iZXI/OiBudW1iZXJcclxuICAgIC8vIHB1YmxpYyBUb2tlbj8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBJc0FjdGl2ZT86IG51bWJlclxyXG4gICAgcHVibGljIENyZWF0ZWRCeT86IHN0cmluZ1xyXG4gICAgcHVibGljIENyZWF0ZWRPbj86IHN0cmluZ1xyXG4gICAgcHVibGljIFVwZGF0ZWRCeT86IHN0cmluZ1xyXG4gICAgcHVibGljIFVwZGF0ZWRPbj86IHN0cmluZ1xyXG4gICAgcHVibGljIHVzZXJuYW1lPzogc3RyaW5nXHJcbiAgICBwdWJsaWMgcGFzc3dvcmQ/OiBzdHJpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXN1bHRNZXNzYWdlIHtcclxuICAgIHB1YmxpYyBFeGNlcHRpb24/OiBFcnJvclxyXG4gICAgcHVibGljIFRhZz86IE9iamVjdFxyXG4gICAgcHVibGljIE1lc3NhZ2VUeXBlPzogYW55XHJcbiAgICBwdWJsaWMgVGV4dD86IHN0cmluZ1xyXG4gICAgcHVibGljIFJlc3VsdD86IG51bWJlclxyXG4gICAgcHVibGljIERpc3BsYXlNZXNzYWdlPzogc3RyaW5nXHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIENvbW1hb25Vc2VyVE97XHJcbiAgICBwdWJsaWMgVXNlckxvZ2luPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIElkVXNlcj8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBJc0FjdGl2ZT8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBVc2VyUGFzc3dkPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIFVzZXJSb2xlTGlzdD8gOiBVc2VyUm9sZVRPW11cclxuICAgIHB1YmxpYyBMb2dpblRPPyA6IExvZ2luVE9cclxuICAgIHB1YmxpYyBQZXJzb25JZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBBZGRyZXNzSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgT3JnYW5pemF0aW9uSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgT3JnYW5pemF0aW9uTmFtZT8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBVc2VyRGlzcGxheU5hbWU/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgTWVudVN0cnVjdHVyZVRPTGlzdD8gOiBNZW51SW5mb3JtYXRpb25bXVxyXG4gICAgcHVibGljIFN5c0VsZUFjY2Vzc0RDVD8gOiB7fVxyXG4gICAgcHVibGljIFJlZ2lzdGVyZWREZXZpY2VJZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBJc1NwZWNpYWxDbmY/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgVXNlclBlcnNvblRPPyA6IFBlcnNvbkluZm8gPSBuZXcgUGVyc29uSW5mbygpO1xyXG4gICAgcHVibGljIFVzZXJFeHRUTz8gOiBVc2VyRXh0VE8gXHJcbiAgICBwdWJsaWMgSW1laU51bWJlcj8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBSZXN1bHQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgVGFnPyA6IG9iamVjdFxyXG4gICAgcHVibGljIE1vZHVsZVRPTGlzdD86TW9kdWxlVE9bXTtcclxuXHJcbiAgICBcclxufVxyXG5leHBvcnQgY2xhc3MgUGVyc29uSW5mb1xyXG57XHJcbiAgICAgICBcclxuICAgIHB1YmxpYyBJZFBlcnNvbj86bnVtYmVyO1xyXG4gICAgcHVibGljIFNhbHV0YXRpb25JZD86bnVtYmVyO1xyXG4gICAgcHVibGljIFNhbHV0YXRpb25OYW1lPzpzdHJpbmc7XHJcbiAgICBwdWJsaWMgTW9iaWxlTm8/OnN0cmluZzsgICAgIFxyXG4gICAgcHVibGljIEFsdGVybmF0ZU1vYk5vPzpzdHJpbmc7ICAgXHJcbiAgICBwdWJsaWMgUGhvbmVObz86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIERhdGVPZkJpcnRoPzpEYXRlOyAgIFxyXG4gICAgcHVibGljIEZpcnN0TmFtZT86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIE1pZE5hbWU/OnN0cmluZzsgICBcclxuICAgIHB1YmxpYyBMYXN0TmFtZT86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIFByaW1hcnlFbWFpbD86c3RyaW5nOyAgIFxyXG4gICAgcHVibGljIEFsdGVybmF0ZUVtYWlsPzpzdHJpbmc7ICAgXHJcbiAgICBwdWJsaWMgQ29tbWVudHM/OnN0cmluZzsgICBcclxuICAgIHB1YmxpYyBTZXFObz86bnVtYmVyOyAgIFxyXG4gICAgcHVibGljIFBob3RvQmFzZTY0PzpzdHJpbmc7XHJcbiAgICBwdWJsaWMgRGF0ZU9mQmlydGhTdHI/OnN0cmluZztcclxuICAgIHB1YmxpYyBEb2JEYXk/Om51bWJlcjtcclxuICAgIHB1YmxpYyBEb2JNb250aD86bnVtYmVyO1xyXG4gICAgcHVibGljIERvYlllYXI/Om51bWJlcjtcclxuICAgIHB1YmxpYyBEaXNwbGF5TmFtZT86c3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyUm9sZVRPe1xyXG4gICAgcHVibGljIElkVXNlclJvbGU/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgVXNlcklkPyA6IG51bWJlclxyXG4gICAgcHVibGljIFJvbGVJZD8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBJc0FjdGl2ZT8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBDcmVhdGVkQnk/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgQ3JlYXRlZE9uPyA6IERhdGVcclxuICAgIHB1YmxpYyBSb2xlRGVzYz8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBFbmFibGVBcmVhQWxsb2M/Om51bWJlclxyXG59XHJcbmV4cG9ydCBjbGFzcyBMb2dpblRPe1xyXG4gICAgcHVibGljIElkTG9naW4/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgVXNlcklkPyA6IG51bWJlclxyXG4gICAgcHVibGljIExvZ2luRGF0ZT8gOiBudW1iZXJcclxuICAgIHB1YmxpYyBMb2dvdXREYXRlPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIExvZ2luSVA/IDogc3RyaW5nXHJcbiAgICBwdWJsaWMgTG9uZ2l0dWRlPyA6IHN0cmluZ1xyXG4gICAgcHVibGljIExhdGl0dWRlPyA6IHN0cmluZ1xyXG4gICAgXHJcbn1cclxuXHJcbi8vU2FuamF5IFsyMDE3LTA2LTA2XSBGb3IgUmVnaW9uYWwgTWFuYWdlciBhbmQgRmllbGQgT2ZmaWNlciBEaWZmZXJlbnQgQyZGcyBhcmVhIGlzIGFsbG9jYXRlZFxyXG5leHBvcnQgY2xhc3MgVXNlckFyZWFBbGxvY2F0aW9uVE97XHJcbiAgICBwdWJsaWMgSWRBcmVhQWxsb2NEdGw/IDogTnVtYmVyXHJcbiAgICBwdWJsaWMgVXNlcklkPyA6IG51bWJlclxyXG4gICAgcHVibGljIENuZk9yZ0lkPyA6IG51bWJlclxyXG4gICAgcHVibGljIERpc3RyaWN0SWQ/IDogTnVtYmVyXHJcbiAgICBwdWJsaWMgQ3JlYXRlZEJ5PyA6IE51bWJlclxyXG4gICAgcHVibGljIElzQWN0aXZlPyA6IE51bWJlclxyXG4gICAgcHVibGljIENyZWF0ZWRPbj8gOiBEYXRlXHJcbiAgICBwdWJsaWMgQ3JlYXRlZE9uU3RyPyA6IFN0cmluZ1xyXG4gICAgcHVibGljIFJlbWFyaz8gOiBTdHJpbmdcclxuICAgIHB1YmxpYyBVc2VyTmFtZT8gOiBTdHJpbmdcclxuICAgIHB1YmxpYyBEaXN0cmljdE5hbWU/IDogU3RyaW5nXHJcbiAgICBwdWJsaWMgQ25mT3JnTmFtZT8gOiBTdHJpbmcgICAgXHJcbiAgICBcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJFeHRUT3tcclxuICAgIHB1YmxpYyBVc2VySWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgUGVyc29uSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgT3JnYW5pemF0aW9uSWQ/IDogbnVtYmVyXHJcbiAgICBwdWJsaWMgQWRkcmVzc0lkPyA6IE51bWJlclxyXG4gICAgcHVibGljIENyZWF0ZWRCeT8gOiBOdW1iZXJcclxuICAgIHB1YmxpYyBDb21tZW50cz8gOiBzdHJpbmdcclxuICAgIHB1YmxpYyBDcmVhdGVkT24/IDogRGF0ZVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzICBNZW51SW5mb3JtYXRpb25cclxue1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICBwdWJsaWMgSWRNZW51Om51bWJlcixcclxuICAgICAgIHB1YmxpYyBTeXNFbGVtZW50SWQ6bnVtYmVyLFxyXG4gICAgICAgcHVibGljIE1lbnVOYW1lOnN0cmluZyxcclxuICAgICAgIHB1YmxpYyBNZW51RGVzYzpzdHJpbmcsXHJcbiAgICAgICBwdWJsaWMgUGFyZW50TWVudUlkOm51bWJlcixcclxuICAgICAgIHB1YmxpYyBNb2R1bGVJZDpudW1iZXIsXHJcbiAgICAgICBwdWJsaWMgU2VyTm86bnVtYmVyLFxyXG4gICAgICAgcHVibGljIENyZWF0ZWRPbjpEYXRlLFxyXG4gICAgICAgcHVibGljIFN1Yk1lbnVMaXN0IDogTWVudUluZm9ybWF0aW9uW10gLFxyXG4gICAgICAgcHVibGljIE1lbnVBY3Rpb246c3RyaW5nLFxyXG4gICAgICAgcHVibGljIE1lbnVJdGVtSWNvbjpzdHJpbmcsIFxyXG4gICAgICAgcHVibGljIE1lbnVTaG9ydEN1dDpzdHJpbmcsIFxyXG4gICAgICAvLyBwdWJsaWMgSW1nUGF0aDpzdHJpbmdcclxuICAgICAgIFxyXG4gICAgICAgICl7fVxyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBNb2R1bGVUT1xyXG57XHJcbiAgICBJZE1vZHVsZT86bnVtYmVyXHJcbm1vZHVsZU5hbWU/OnN0cmluZ1xyXG5tb2R1bGVEZXNjPzpzdHJpbmdcclxuY3JlYXRlZE9uPzpzdHJpbmdcclxuTmF2aWdhdGVVcmw/OnN0cmluZ1xyXG5Jc0FjdGl2ZT86bnVtYmVyXHJcbkxvZ29Vcmw/OnN0cmluZ1xyXG5BbmRyb2lkVXJsPzpzdHJpbmdcclxuSXNTdWJzY3JpYmU/Om51bWJlcjtcclxufVxyXG5cclxuXHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cCwgSGVhZGVycywgUmVzcG9uc2UsIFJlcXVlc3RPcHRpb25zLCBCYXNlUmVxdWVzdE9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9odHRwJztcclxuaW1wb3J0IHsgVXNlclRPLCBOb3RpZmljYXRpb25UTywgUmVzdWx0TWVzc2FnZSwgQ29tbWFvblVzZXJUTyB9IGZyb20gJy4uL21vZGVsL25vdGlmaWNhdGlvblRPJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCByZXRyeSxtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tIFwiY3J5cHRvLWpzXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsRXJyb3JPYnNlcnZlcn0gZnJvbSAncnhqcyc7XHJcbmV4cG9ydCBjb25zdCBnbkdldEFsbEFjdGl2ZUFsZXJ0TGlzdCA9IFwiTm90aWZ5L0dldEFsbEFjdGl2ZUFsZXJ0TGlzdD91c2VySWQ9XCI7XHJcbmV4cG9ydCBjb25zdCBnblBvc3RBbGVydEFja25vd2xlZGdlbWVudCA9IFwiTm90aWZ5L1Bvc3RBbGVydEFja25vd2xlZGdlbWVudFwiO1xyXG5leHBvcnQgY29uc3QgZ25Qb3N0UmVzZXRBbGxBbGVydHMgPSBcIk5vdGlmeS9Qb3N0UmVzZXRBbGxBbGVydHNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblNlcnZpY2VzIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cCkgeyB9XHJcbiAgICB1c2VyVE86IENvbW1hb25Vc2VyVE8gPSB7fVxyXG4gICAgcmVzdWx0TWVzc2FnZTogUmVzdWx0TWVzc2FnZSA9IG5ldyBSZXN1bHRNZXNzYWdlO1xyXG4gICAgZ2V0VXNlclRPRnJvbUxvY2FsU3RvcmFnZSgpOiBDb21tYW9uVXNlclRPIHtcclxuICAgICAgICBsZXQgdXNlclRvOiBDb21tYW9uVXNlclRPID0ge307XHJcbiAgICAgICAgdXNlclRvID0gSlNPTi5wYXJzZSh0aGlzLmRlY3J5cHRpb24obG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjdXJyZW50VXNlclwiKSkpO1xyXG4gICAgICAgIGlmICh1c2VyVG8gPT0gdW5kZWZpbmVkIHx8IHVzZXJUbyA9PSBudWxsKSB7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2VyVG87XHJcbiAgICB9XHJcbiAgICBnZXRBbGVydEZvck5vdGlmeShVcmwpIHtcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIGlmICh0aGlzLnVzZXJUTyA9PSBudWxsICYmIHRoaXMudXNlclRPID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0QWxsQWN0aXZlTm90aWZpY2F0aW9uKHRoaXMudXNlclRPLFVybCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSByZXMuZmlsdGVyKHAgPT4gcC5Jc0Fja25vd2xlZGdlZCA9PSAwKS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZ05vdGlmaWNhdGlvblwiKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZ05vdGlmaWNhdGlvblwiKS5pbm5lclRleHQgPSB2ID09IDAgPyAnJyA6IHYudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHsgfVxyXG4gICAgICAgIClcclxuXHJcbiAgICB9XHJcbiAgICBnZXRBbGxBY3RpdmVOb3RpZmljYXRpb24oVXNlclRvOiBDb21tYW9uVXNlclRPLG1hc3RlckJhc2VVcmw6c3RyaW5nKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25UT1tdPiB7XHJcbiAgICAgICAgLy9sZXQga2V5cyA9IFwiaHR0cHM6Ly9zaW1wbHlkZWxpdmVyZGVtby52ZWdhaW5ub3ZhdGlvbnMuY28uaW4vbWFkaGF2c2ltcGxpZGVsaXZlcmFwaS9hcGkvTm90aWZ5L0dldEFsbEFjdGl2ZUFsZXJ0TGlzdD91c2VySWQ9MSZyb2xlSWQ9MVwiXHJcbiAgICAgICAgLy9sZXQga2V5cyA9IG1hc3RlckJhc2VVcmwgKyBnbkdldEFsbEFjdGl2ZUFsZXJ0TGlzdCArIFVzZXJUby5JZFVzZXIgKyBcIiZyb2xlSWQ9XCIgKyBVc2VyVG8uVXNlclJvbGVMaXN0WzBdLlJvbGVJZFxyXG4gICAgICAgIGxldCBrZXlzID0gbWFzdGVyQmFzZVVybCArIFwiTm90aWZ5L0dldEFsbEFjdGl2ZUFsZXJ0TGlzdD91c2VySWQ9MSZyb2xlSWQ9MVwiO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldChrZXlzKS5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UuanNvbigpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEFsZXJ0QWNrbm93bGVkZ2VtZW50KG5vdGlmaWNhdGlvblRvOiBOb3RpZmljYXRpb25UT1xyXG4gICAgICAgICwgbG9naW5JZDogbnVtYmVyLFVSTDpzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBhbGVydFVzZXJzVE86IG5vdGlmaWNhdGlvblRvLFxyXG4gICAgICAgICAgICBsb2dpblVzZXJJZDogbG9naW5JZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IGJvZHlTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpO1xyXG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKHsgaGVhZGVyczogaGVhZGVycyB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoVVJMICsgZ25Qb3N0QWxlcnRBY2tub3dsZWRnZW1lbnQsIGJvZHlTdHJpbmcsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RBbGxBbGVydEFja25vd2xlZGdlbWVudCh1c2VyVG86IENvbW1hb25Vc2VyVE8sVVJMOnN0cmluZykge1xyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGxvZ2luVXNlcklkOiB1c2VyVG8uSWRVc2VyLFxyXG4gICAgICAgICAgICByb2xlSWQ6IHVzZXJUby5Vc2VyUm9sZUxpc3RbMF0uUm9sZUlkXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgYm9keVN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSk7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBuZXcgUmVxdWVzdE9wdGlvbnMoeyBoZWFkZXJzOiBoZWFkZXJzIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChVUkwgKyBnblBvc3RSZXNldEFsbEFsZXJ0cywgYm9keVN0cmluZywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5jcnlwdGlvbihkYXRhKSB7XHJcbiAgICAgICAgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gICAgICAgIC8vIEVuY3J5cHRcclxuICAgICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KGRhdGEudG9TdHJpbmcoKSwgXCJzZWNyZXQga2V5IDEyM1wiKTtcclxuICAgICAgICByZXR1cm4gY2lwaGVydGV4dC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZGVjcnlwdGlvbihkYXRhKSB7XHJcbiAgICAgICAgLy8gRGVjcnlwdFxyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBieXRlcyA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KGRhdGEsIFwic2VjcmV0IGtleSAxMjNcIik7XHJcbiAgICAgICAgICAgIHZhciBwbGFpbnRleHQgPSBieXRlcy50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwbGFpbnRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgSW5wdXQsIFBpcGUsIEluamVjdGFibGUsIFBpcGVUcmFuc2Zvcm0sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IH0gZnJvbSAncnhqcy9SeCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VzIH0gZnJvbSAnLi4vc2VydmljZXMvbm90aWZpY2F0aW9uX3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVXNlclRPLCBOb3RpZmljYXRpb25UTywgUmVzdWx0TWVzc2FnZSwgQ29tbWFvblVzZXJUTyB9IGZyb20gJy4uL21vZGVsL25vdGlmaWNhdGlvblRPJ1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuLy9pbXBvcnQgeyBMaXN0U2VydmljZSwgSUxvYWRlciB9IGZyb20gXCIuLi8uLi9jb21tb24vc2VydmljZS9nZXREcm9wZG93bkxpc3Quc2VydmljZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdub3RpZmljYXRpb24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuLi9ub3RpZmljYXRpb24uaHRtbCcsXHJcblxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB1c2VyVE86IENvbW1hb25Vc2VyVE8gPSB7fTtcclxuICAgIEBJbnB1dCgpIFVSTDogc3RyaW5nO1xyXG4gICAgcmVzdWx0TWVzc2FnZTogUmVzdWx0TWVzc2FnZSA9IG5ldyBSZXN1bHRNZXNzYWdlO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjb21tYW46IE5vdGlmaWNhdGlvblNlcnZpY2VzXHJcbiAgICAgICAgLCBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICAgICAgLCByb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMudXNlclRPID0gdGhpcy5jb21tYW4uZ2V0VXNlclRPRnJvbUxvY2FsU3RvcmFnZSgpO1xyXG4gICAgfVxyXG4gICAgbm90aWZpY2F0aW9uTGlzdDogTm90aWZpY2F0aW9uVE9bXSA9IFtdO1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb21tYW4uZ2V0QWxlcnRGb3JOb3RpZnkodGhpcy5VUkwpO1xyXG4gICAgICAgIHRoaXMuZ2V0Tm90aWZpY2F0aW9uTGlzdEJ5VXNlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5vdGlmaWNhdGlvbkxpc3RCeVVzZXIoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25MaXN0ID0gW11cclxuICAgICAgICB0aGlzLmNvbW1hbi5nZXRBbGxBY3RpdmVOb3RpZmljYXRpb24odGhpcy51c2VyVE8sIHRoaXMuVVJMKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxpc3QgPSBub3RpZmljYXRpb25SZXM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyIDogJyArIGVycik7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1JlYWRUb05vdGlmaWNhdGlvbihhbGVydE1lc3NhZ2VUbzogTm90aWZpY2F0aW9uVE8sIGlzUmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgaWYgKGFsZXJ0TWVzc2FnZVRvLklzQWNrbm93bGVkZ2VkICE9IDAgJiYgIWlzUmVzZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNSZXNldCkge1xyXG4gICAgICAgICAgICBhbGVydE1lc3NhZ2VUby5Jc1Jlc2V0ZWQgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbW1hbi5wb3N0QWxlcnRBY2tub3dsZWRnZW1lbnQoYWxlcnRNZXNzYWdlVG8sIHRoaXMudXNlclRPLklkVXNlciwgdGhpcy5VUkwpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgdlJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucmVzdWx0TWVzc2FnZS5NZXNzYWdlVHlwZSA9PSAxICYmIHRoaXMucmVzdWx0TWVzc2FnZS5SZXN1bHQgPT0gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuLmdldEFsZXJ0Rm9yTm90aWZ5KHRoaXMuVVJMKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm90aWZpY2F0aW9uTGlzdEJ5VXNlcigpO1xyXG4gICAgICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIE1zZyA6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsaWRhdGlvbkNvbG9yKGlzQWNrbm93ZWxkZWQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBpc0Fja25vd2VsZGVkID09IDAgPyAnYm9sZCcgOiAnbm9ybWFsJ1xyXG5cclxuICAgIH1cclxuICAgIHJlc2V0QWxsTm90aWZpY2F0aW9uKCkge1xyXG4gICAgICAgIC8vdGhpcy5zcy5zaG93TG9hZGVyKCk7XHJcbiAgICAgICAgdGhpcy5jb21tYW4ucG9zdEFsbEFsZXJ0QWNrbm93bGVkZ2VtZW50KHRoaXMudXNlclRPLCB0aGlzLlVSTCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICB2UmVzID0+IHtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5yZXN1bHRNZXNzYWdlID0gdlJlcztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3VsdE1lc3NhZ2UuTWVzc2FnZVR5cGUgPT0gMSAmJiB0aGlzLnJlc3VsdE1lc3NhZ2UuUmVzdWx0ID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbi5nZXRBbGVydEZvck5vdGlmeSh0aGlzLlVSTCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIE1zZyA6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3RGdW4oYWxlcnRNZXNzYWdlVG86IE5vdGlmaWNhdGlvblRPKSB7XHJcbiAgICAgICAgaWYgKGFsZXJ0TWVzc2FnZVRvLk5hdmlnYXRpb25VcmwgIT0gbnVsbCB8fCBhbGVydE1lc3NhZ2VUby5OYXZpZ2F0aW9uVXJsICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJyArIGFsZXJ0TWVzc2FnZVRvLk5hdmlnYXRpb25VcmxdKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxufSIsIlxyXG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Tm90aWZpY2F0aW9uQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudC9ub3RpZmljYXRpb25fY29tcG9uZW50cydcclxuaW1wb3J0IHtOb3RpZmljYXRpb25TZXJ2aWNlc30gZnJvbSAnLi9zZXJ2aWNlcy9ub3RpZmljYXRpb25fc2VydmljZXMnXHJcbmltcG9ydCB7IEh0dHBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9odHRwJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGUsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuY29uc3QgYXBwUm91dGVzOiBSb3V0ZXMgPSBbXHJcbiAgICB7cGF0aDogJycsIGNvbXBvbmVudDogTm90aWZpY2F0aW9uQ29tcG9uZW50fVxyXG4gIF07XHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBOb3RpZmljYXRpb25Db21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEJyb3dzZXJNb2R1bGUsSHR0cE1vZHVsZSxSb3V0ZXJNb2R1bGUuZm9yUm9vdChhcHBSb3V0ZXMpXHJcbiAgXSxcclxuICBwcm92aWRlcnM6W05vdGlmaWNhdGlvblNlcnZpY2VzXSxcclxuICBleHBvcnRzOiBbTm90aWZpY2F0aW9uQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZ5TW9kdWxlIHsgfVxyXG4iXSwibmFtZXMiOlsiaHR0cCIsIm1hcCIsIkhlYWRlcnMiLCJSZXF1ZXN0T3B0aW9ucyIsIkNyeXB0b0pTLkFFUyIsIkNyeXB0b0pTLmVuYyIsIkluamVjdGFibGUiLCJIdHRwIiwicm91dGVyIiwiQ29tcG9uZW50IiwiUm91dGVyIiwiQWN0aXZhdGVkUm91dGUiLCJJbnB1dCIsIk5nTW9kdWxlIiwiQnJvd3Nlck1vZHVsZSIsIkh0dHBNb2R1bGUiLCJSb3V0ZXJNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxJQW1DQSxJQUFBOzs7NEJBcENBO1FBNENDLENBQUE7Ozs7OztBQzVDRDtBQVNBLFFBQWEsMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7O0FBQzVFLFFBQWEsb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7O1FBSTVELDhCQUFvQkEsT0FBVTtZQUFWLFNBQUksR0FBSkEsT0FBSSxDQUFNOzBCQUNOLEVBQUU7aUNBQ0ssSUFBSSxhQUFhO1NBRmI7Ozs7UUFHbkMsd0RBQXlCOzs7WUFBekI7O2dCQUNJLElBQUksTUFBTSxHQUFrQixFQUFFLENBQUM7Z0JBQy9CLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBSzFFLE9BQU8sTUFBTSxDQUFDO2FBQ2pCOzs7OztRQUNELGdEQUFpQjs7OztZQUFqQixVQUFrQixHQUFHO2dCQUNqQixTQUFRO2dCQUNSLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7b0JBQ2pELE9BQU87aUJBQ1Y7Z0JBQ0QsSUFB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