A self hosted chat application with end-to-end encrypted messaging.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

237 lines
21 KiB

(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("../model/AbstractModel");
require("../model/UserModel");
require("../view/AbstractView");
require("../view/UserView");
var UserController = /** @class */ (function () {
function UserController(model, view) {
this._model = model;
this._view = view;
}
Object.defineProperty(UserController.prototype, "model", {
/**
* Getter model
* @return {Model}
*/
get: function () {
return this._model;
},
/**
* Setter model
* @param {Model} value
*/
set: function (value) {
this._model = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(UserController.prototype, "view", {
/**
* Getter view
* @return {View}
*/
get: function () {
return this._view;
},
/**
* Setter view
* @param {View} value
*/
set: function (value) {
this._view = value;
},
enumerable: true,
configurable: true
});
return UserController;
}());
exports.UserController = UserController;
},{"../model/AbstractModel":3,"../model/UserModel":5,"../view/AbstractView":6,"../view/UserView":7}],2:[function(require,module,exports){
(function (global){
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var UserView_1 = require("./view/UserView");
var UserController_1 = require("./controller/UserController");
var loglevel_1 = __importDefault((typeof window !== "undefined" ? window['log'] : typeof global !== "undefined" ? global['log'] : null));
var ModelFactory_1 = require("./model/ModelFactory");
var ActiveUserViewModel_1 = require("./viewmodel/ActiveUserViewModel");
var ChatMessageViewModel_1 = require("./viewmodel/ChatMessageViewModel");
var handlebars_1 = __importDefault((typeof window !== "undefined" ? window['Handlebars'] : typeof global !== "undefined" ? global['Handlebars'] : null));
loglevel_1.default.setLevel("TRACE");
// let userModel = new UserModel();
var userModel = ModelFactory_1.ModelFactory.createModel("USER");
var userView = new UserView_1.UserView(userModel, 2);
userModel.attach(userView);
// userView.model
var userController = new UserController_1.UserController(userModel, userView);
userModel.someBusinessMethod(5);
loglevel_1.default.info("hello");
var chatMessageViewModel = new ChatMessageViewModel_1.ChatMessageViewModel();
var activeUserViewModel = new ActiveUserViewModel_1.ActiveUserViewModel();
activeUserViewModel.userName = "some user";
activeUserViewModel.lastActive = new Date();
activeUserViewModel.online = true;
function someFunc(vm) {
loglevel_1.default.info(vm);
}
someFunc(activeUserViewModel);
// @ts-ignore: Object is possibly 'null'.
var source = document.getElementById("msg_container_template").innerHTML;
var msgContainerTemplate = handlebars_1.default.compile(source);
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./controller/UserController":1,"./model/ModelFactory":4,"./view/UserView":7,"./viewmodel/ActiveUserViewModel":8,"./viewmodel/ChatMessageViewModel":9}],3:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
},{}],4:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var UserModel_1 = require("./UserModel");
var ModelFactory = /** @class */ (function () {
function ModelFactory() {
}
ModelFactory.createModel = function (modelName) {
switch (modelName) {
case "USER":
return new UserModel_1.UserModel();
break;
default: throw new Error("Invalid model name");
}
};
return ModelFactory;
}());
exports.ModelFactory = ModelFactory;
},{"./UserModel":5}],5:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var UserModel = /** @class */ (function () {
function UserModel() {
/**
* @type {Observer[]} List of subscribers. In real life, the list of
* subscribers can be stored more comprehensively (categorized by event
* type, etc.).
*/
this.observers = [];
this.state = 0;
}
/**
* The subscription management methods.
*/
UserModel.prototype.attach = function (observer) {
console.log('Subject: Attached an observer.');
this.observers.push(observer);
};
UserModel.prototype.detach = function (observer) {
var observerIndex = this.observers.indexOf(observer);
this.observers.splice(observerIndex, 1);
console.log('Subject: Detached an observer.');
};
/**
* Trigger an update in each subscriber.
*/
UserModel.prototype.notify = function () {
console.log('Subject: Notifying observers...');
for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {
var observer = _a[_i];
observer.update(this.state);
}
};
UserModel.prototype.someBusinessMethod = function (num) {
this.state = num;
this.helperMethod();
console.log("Subject: My state has just changed to: " + this.state);
this.notify();
};
UserModel.prototype.helperMethod = function () { };
return UserModel;
}());
exports.UserModel = UserModel;
},{}],6:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
},{}],7:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var UserView = /** @class */ (function () {
function UserView(model, element) {
this._model = model;
this._element = element;
}
Object.defineProperty(UserView.prototype, "model", {
/**
* Getter model
* @return {Model}
*/
get: function () {
return this._model;
},
/**
* Setter model
* @param {Model} value
*/
set: function (value) {
this._model = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(UserView.prototype, "element", {
/**
* Getter element
* @return {any}
*/
get: function () {
return this._element;
},
/**
* Setter element
* @param {any} value
*/
set: function (value) {
this._element = value;
},
enumerable: true,
configurable: true
});
UserView.prototype.update = function (data) {
this.element = data;
console.log(this.element);
};
return UserView;
}());
exports.UserView = UserView;
},{}],8:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ActiveUserViewModel = /** @class */ (function () {
function ActiveUserViewModel() {
}
return ActiveUserViewModel;
}());
exports.ActiveUserViewModel = ActiveUserViewModel;
},{}],9:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ChatMessageViewModel = /** @class */ (function () {
function ChatMessageViewModel() {
}
return ChatMessageViewModel;
}());
exports.ChatMessageViewModel = ChatMessageViewModel;
},{}]},{},[2])
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL3dhdGNoaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvY29udHJvbGxlci9Vc2VyQ29udHJvbGxlci50cyIsInNyYy9tYWluLnRzIiwic3JjL21vZGVsL01vZGVsRmFjdG9yeS50cyIsInNyYy9tb2RlbC9Vc2VyTW9kZWwudHMiLCJzcmMvdmlldy9Vc2VyVmlldy50cyIsInNyYy92aWV3bW9kZWwvQWN0aXZlVXNlclZpZXdNb2RlbC50cyIsInNyYy92aWV3bW9kZWwvQ2hhdE1lc3NhZ2VWaWV3TW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztBQ0NBLGtDQUErQjtBQUMvQiw4QkFBMkI7QUFDM0IsZ0NBQTZCO0FBQzdCLDRCQUF5QjtBQUl6QjtJQUtDLHdCQUFZLEtBQVksRUFBRSxJQUFVO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFNRCxzQkFBVyxpQ0FBSztRQUpiOzs7V0FHRzthQUNOO1lBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BCLENBQUM7UUFVRTs7O1dBR0c7YUFDTixVQUFpQixLQUFZO1lBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQWhCQTtJQU1ELHNCQUFXLGdDQUFJO1FBSlo7OztXQUdHO2FBQ047WUFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbkIsQ0FBQztRQVVFOzs7V0FHRzthQUNOLFVBQWdCLEtBQVc7WUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDcEIsQ0FBQzs7O09BaEJBO0lBa0JGLHFCQUFDO0FBQUQsQ0ExQ0EsQUEwQ0MsSUFBQTtBQTFDWSx3Q0FBYzs7Ozs7Ozs7O0FDSjNC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ZUFBQztBQUFELENBeERBLEFBd0RDLElBQUE7QUF4RFksNEJBQVE7Ozs7O0FDTnJCO0lBQUE7SUFJQSxDQUFDO0lBQUQsMEJBQUM7QUFBRCxDQUpBLEFBSUMsSUFBQTtBQUpZLGtEQUFtQjs7Ozs7QUNBaEM7SUFBQTtJQU9BLENBQUM7SUFBRCwyQkFBQztBQUFELENBUEEsQUFPQyxJQUFBO0FBUFksb0RBQW9CIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gXCIuL0Fic3RyYWN0Q29udHJvbGxlclwiO1xuaW1wb3J0IFwiLi4vbW9kZWwvQWJzdHJhY3RNb2RlbFwiXG5pbXBvcnQgXCIuLi9tb2RlbC9Vc2VyTW9kZWxcIlxuaW1wb3J0IFwiLi4vdmlldy9BYnN0cmFjdFZpZXdcIlxuaW1wb3J0IFwiLi4vdmlldy9Vc2VyVmlld1wiXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbC9BYnN0cmFjdE1vZGVsXCI7XG5pbXBvcnQgeyBWaWV3IH0gZnJvbSBcIi4uL3ZpZXcvQWJzdHJhY3RWaWV3XCI7XG5cbmV4cG9ydCBjbGFzcyBVc2VyQ29udHJvbGxlciBpbXBsZW1lbnRzIENvbnRyb2xsZXJ7XG4gICAgICAgIHByaXZhdGUgX21vZGVsOiBNb2RlbDtcbiAgICAgICAgcHJpdmF0ZSBfdmlldzogVmlldztcblxuXG5cdGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbCwgdmlldzogVmlldykge1xuXHRcdHRoaXMuX21vZGVsID0gbW9kZWw7XG5cdFx0dGhpcy5fdmlldyA9IHZpZXc7XG5cdH1cblxuICAgIC8qKlxuICAgICAqIEdldHRlciBtb2RlbFxuICAgICAqIEByZXR1cm4ge01vZGVsfVxuICAgICAqL1xuXHRwdWJsaWMgZ2V0IG1vZGVsKCk6IE1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9kZWw7XG5cdH1cblxuICAgIC8qKlxuICAgICAqIEdldHRlciB2aWV3XG4gICAgICogQHJldHVybiB7Vmlld31cbiAgICAgKi9cblx0cHVibGljIGdldCB2aWV3KCk6IFZpZXcge1xuXHRcdHJldHVybiB0aGlzLl92aWV3O1xuXHR9XG5cbiAgICAvKipcbiAgICAgKiBTZXR0ZXIgbW9kZWxcbiAgICAgKiBAcGFyYW0ge01vZGVsfSB2YWx1ZVxuICAgICAqL1xuXHRwdWJsaWMgc2V0IG1vZGVsKHZhbHVlOiBNb2RlbCkge1xuXHRcdHRoaXMuX21vZGVsID0gdmFsdWU7XG5cdH1cblxuICAgIC8qKlxuICAgICAqIFNldHRlciB2aWV3XG4gICAgICogQHBhcmFtIHtWaWV3fSB2YWx1ZVxuICAgICAqL1xuXHRwdWJsaWMgc2V0IHZpZXcodmFsdWU6IFZpZXcpIHtcblx0XHR0aGlzLl92aWV3ID0gdmFsdWU7XG5cdH1cbiAgICAgICAgXG59IiwiaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gXCIuL2NvbnRyb2xsZXIvQWJzdHJhY3RDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBVc2VyTW9kZWwgfSBmcm9tIFwiLi9tb2RlbC9Vc2VyTW9kZWxcIlxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9tb2RlbC9BYnN0cmFjdE1vZGVsXCI7XG5pbXBvcnQgeyBWaWV3IH0gZnJvbSBcIi4vdmlldy9BYnN0cmFjdFZpZXdcIjtcbmltcG9ydCB7IFVzZXJWaWV3IH0gZnJvbSBcIi4vdmlldy9Vc2VyVmlld1wiO1xuaW1wb3J0IHsgVXNlckNvbnRyb2xsZXIgfSBmcm9tIFwiLi9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyXCI7XG5pbXBvcnQgbG9nIGZyb20gXCJsb2dsZXZlbFwiO1xuaW1wb3J0IHsgTW9kZWxGYWN0b3J5IH0gZnJvbSBcIi4vbW9kZWwvTW9kZWxGYWN0b3J5XCI7XG5pbXBvcnQgeyBBY3RpdmVVc2VyVmlld01vZGVsIH0gZnJvbSBcIi4vdmlld21vZGVsL0FjdGl2ZVVzZXJWaWV3TW9kZWxcIjtcbmltcG9ydCB7IENoYXRNZXNzYWdlVmlld01vZGVsIH0gZnJvbSBcIi4vdmlld21vZGVsL0NoYXRNZXNzYWdlVmlld01vZGVsXCI7XG5pbXBvcnQgSGFuZGxlYmFycyAgZnJvbSBcImhhbmRsZWJhcnNcIjtcblxuXG5sb2cuc2V0TGV2ZWwoXCJUUkFDRVwiKVxuLy8gbGV0IHVzZXJNb2RlbCA9IG5ldyBVc2VyTW9kZWwoKTtcbmNvbnN0IHVzZXJNb2RlbCA9IE1vZGVsRmFjdG9yeS5jcmVhdGVNb2RlbChcIlVTRVJcIik7XG5cbmNvbnN0IHVzZXJWaWV3ID0gbmV3IFVzZXJWaWV3KHVzZXJNb2RlbCwgMik7XG51c2VyTW9kZWwuYXR0YWNoKHVzZXJWaWV3KTtcbi8vIHVzZXJWaWV3Lm1vZGVsXG5jb25zdCB1c2VyQ29udHJvbGxlciA9IG5ldyBVc2VyQ29udHJvbGxlcih1c2VyTW9kZWwsIHVzZXJWaWV3KTtcbnVzZXJNb2RlbC5zb21lQnVzaW5lc3NNZXRob2QoNSk7XG5sb2cuaW5mbyhcImhlbGxvXCIpO1xuXG5jb25zdCBjaGF0TWVzc2FnZVZpZXdNb2RlbD0gbmV3IENoYXRNZXNzYWdlVmlld01vZGVsKCk7XG5cbmNvbnN0IGFjdGl2ZVVzZXJWaWV3TW9kZWwgPSBuZXcgQWN0aXZlVXNlclZpZXdNb2RlbCgpO1xuYWN0aXZlVXNlclZpZXdNb2RlbC51c2VyTmFtZSA9IFwic29tZSB1c2VyXCI7XG5hY3RpdmVVc2VyVmlld01vZGVsLmxhc3RBY3RpdmUgPSBuZXcgRGF0ZSgpO1xuYWN0aXZlVXNlclZpZXdNb2RlbC5vbmxpbmUgPSB0cnVlO1xuXG5mdW5jdGlvbiBzb21lRnVuYyh2bTogQWN0aXZlVXNlclZpZXdNb2RlbCk6IHZvaWQge1xuICAgIGxvZy5pbmZvKHZtKTtcbn1cblxuc29tZUZ1bmMoYWN0aXZlVXNlclZpZXdNb2RlbCk7XG5cbi8vIEB0cy1pZ25vcmU6IE9iamVjdCBpcyBwb3NzaWJseSAnbnVsbCcuXG52YXIgc291cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtc2dfY29udGFpbmVyX3RlbXBsYXRlXCIpLmlubmVySFRNTDsgXG5cbnZhciBtc2dDb250YWluZXJUZW1wbGF0ZSA9IEhhbmRsZWJhcnMuY29tcGlsZShzb3VyY2UpOyIsImltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4vQWJzdHJhY3RNb2RlbFwiO1xuaW1wb3J0IHsgVXNlck1vZGVsIH0gZnJvbSBcIi4vVXNlck1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBNb2RlbEZhY3Rvcnkge1xuICAgIHN0YXRpYyBjcmVhdGVNb2RlbChtb2RlbE5hbWU6IHN0cmluZyk6IE1vZGVsIHtcbiAgICAgICAgc3dpdGNoIChtb2RlbE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJVU0VSXCI6IHJldHVybiBuZXcgVXNlck1vZGVsKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbW9kZWwgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcIi4uL29ic2VydmUvT2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9BYnN0cmFjdE1vZGVsXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi9vYnNlcnZlL09ic2VydmVyXCI7XG5cbmV4cG9ydCBjbGFzcyBVc2VyTW9kZWwgaW1wbGVtZW50cyBNb2RlbCwgU3ViamVjdCB7XG4gICAgLyoqXG4gICogQHR5cGUge09ic2VydmVyW119IExpc3Qgb2Ygc3Vic2NyaWJlcnMuIEluIHJlYWwgbGlmZSwgdGhlIGxpc3Qgb2ZcbiAgKiBzdWJzY3JpYmVycyBjYW4gYmUgc3RvcmVkIG1vcmUgY29tcHJlaGVuc2l2ZWx5IChjYXRlZ29yaXplZCBieSBldmVudFxuICAqIHR5cGUsIGV0Yy4pLlxuICAqL1xuICAgIHByaXZhdGUgb2JzZXJ2ZXJzOiBPYnNlcnZlcltdID0gW107XG4gICAgcHJpdmF0ZSBzdGF0ZTogbnVtYmVyID0gMDtcblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgLyoqXG4gICAgICogVGhlIHN1YnNjcmlwdGlvbiBtYW5hZ2VtZW50IG1ldGhvZHMuXG4gICAgICovXG4gICAgcHVibGljIGF0dGFjaChvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1N1YmplY3Q6IEF0dGFjaGVkIGFuIG9ic2VydmVyLicpO1xuICAgICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGV0YWNoKG9ic2VydmVyOiBPYnNlcnZlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBvYnNlcnZlckluZGV4ID0gdGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzLnNwbGljZShvYnNlcnZlckluZGV4LCAxKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1N1YmplY3Q6IERldGFjaGVkIGFuIG9ic2VydmVyLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgYW4gdXBkYXRlIGluIGVhY2ggc3Vic2NyaWJlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgbm90aWZ5KCk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmxvZygnU3ViamVjdDogTm90aWZ5aW5nIG9ic2VydmVycy4uLicpO1xuICAgICAgICBmb3IgKGNvbnN0IG9ic2VydmVyIG9mIHRoaXMub2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICBvYnNlcnZlci51cGRhdGUodGhpcy5zdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc29tZUJ1c2luZXNzTWV0aG9kKG51bTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBudW07XG4gICAgICAgIHRoaXMuaGVscGVyTWV0aG9kKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWJqZWN0OiBNeSBzdGF0ZSBoYXMganVzdCBjaGFuZ2VkIHRvOiAke3RoaXMuc3RhdGV9YCk7XG4gICAgICAgIHRoaXMubm90aWZ5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoZWxwZXJNZXRob2QoKSB7fVxuXG59IiwiaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vb2JzZXJ2ZS9PYnNlcnZlclwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWwvQWJzdHJhY3RNb2RlbFwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCIuLi9vYnNlcnZlL09ic2VydmFibGVcIjtcbmltcG9ydCB7IFZpZXcgfSBmcm9tIFwiLi9BYnN0cmFjdFZpZXdcIjtcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tIFwiLi4vY29udHJvbGxlci9BYnN0cmFjdENvbnRyb2xsZXJcIjtcblxuZXhwb3J0IGNsYXNzIFVzZXJWaWV3IGltcGxlbWVudHMgT2JzZXJ2ZXIsIFZpZXcge1xuICAgIHByaXZhdGUgX21vZGVsOiBNb2RlbDtcbiAgICBwcml2YXRlIF9lbGVtZW50OiBhbnk7XG5cblxuXG4gICAgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsLCBlbGVtZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIEdldHRlciBtb2RlbFxuICAgICAqIEByZXR1cm4ge01vZGVsfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbW9kZWwoKTogTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXR0ZXIgZWxlbWVudFxuICAgICAqIEByZXR1cm4ge2FueX1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dGVyIG1vZGVsXG4gICAgICogQHBhcmFtIHtNb2RlbH0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IG1vZGVsKHZhbHVlOiBNb2RlbCkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IHZhbHVlO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogU2V0dGVyIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGVsZW1lbnQodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gdmFsdWU7XG4gICAgfVxuXG5cblxuXG5cbiAgICB1cGRhdGUoZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGRhdGE7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZWxlbWVudCk7XG4gICAgfVxuXG59IiwiZXhwb3J0IGNsYXNzIEFjdGl2ZVVzZXJWaWV3TW9kZWwge1xuICAgIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgb25saW5lOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIGxhc3RBY3RpdmU6IERhdGUgfCB1bmRlZmluZWQ7XG59IiwiZXhwb3J0IGNsYXNzIENoYXRNZXNzYWdlVmlld01vZGVsIHtcbiAgICBwdWJsaWMgdG9Vc2VyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIGZyb21Vc2VyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIG1lc3NhZ2VDaXBoZXI6IGFueTtcbiAgICBwdWJsaWMgbWVzc2FnZVRpbWUhOiBEYXRlO1xuXG4gICAgXG59Il19