r3-v2/dist/r3.js

795 lines
64 KiB
JavaScript

/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/r3/index.js");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./src/r3/index.js":
/*!*************************!*\
!*** ./src/r3/index.js ***!
\*************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var R3 = __webpack_require__(/*! ./r3.js */ "./src/r3/r3.js");
R3.System.Linking.start();
R3.System.Socket.start();
module.exports = R3;
/***/ }),
/***/ "./src/r3/r3-event.js":
/*!****************************!*\
!*** ./src/r3/r3-event.js ***!
\****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var Utils = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module 'r3-utils'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
/**
OPTIONS_START
OPTIONS_END
**/
var Event = /*#__PURE__*/function () {
//CONSTRUCTOR_TEMPLATE_START
function Event(options) {
_classCallCheck(this, Event);
Event.Emit(Event.OBJECT_CREATED, this); //OPTIONS_INIT_START
if (typeof options === 'undefined') {
options = {};
} //OPTIONS_INIT_END
//CUSTOM_OPTIONS_INIT_START
//CUSTOM_OPTIONS_INIT_END
Object.assign(this, options); //CUSTOM_BEFORE_INIT_START
//CUSTOM_BEFORE_INIT_END
Event.Emit(Event.OBJECT_INITIALIZED, this);
} //CONSTRUCTOR_TEMPLATE_END
//CUSTOM_IMPLEMENTATION_START
/**
* Some nice Events handling
* @type {{}}
*/
_createClass(Event, [{
key: "subscribe",
value:
/**
* Subscribe to some events
* @param eventName
* @param callback
*/
function subscribe(eventName, callback) {
return Event.Subscribe(eventName, callback.bind(this));
}
}, {
key: "emit",
value: function emit(eventName, data, clientCallback, clientErrorCallback) {
return Event.Emit(eventName, data, clientCallback, clientErrorCallback);
}
/**
* Execute the functions which subscribe to this event, but don't process the client callback - the subscription function
* should execute the client callback
* @param eventId
* @param data
* @param clientCallback
* @param clientErrorCallback
* @returns {number}
* @constructor
*/
}], [{
key: "Subscribe",
value: function Subscribe(eventName, fn) {
/**
* Todo - maybe eventually store a boolean which indicates if the function has been executed
*/
var subscriptionId = Utils.RandomId(10);
if (Event.Subscriptions.hasOwnProperty(eventName)) {
if (Event.Subscriptions[eventName][subscriptionId]) {
throw new Error('A component can only subscribe to a particular event ID once');
}
Event.Subscriptions[eventName][subscriptionId] = fn;
} else {
Event.Subscriptions[eventName] = {};
Event.Subscriptions[eventName][subscriptionId] = fn;
}
/**
* Return a handle to the caller to allow us to unsubscribe to this event
*/
return {
fn: fn,
remove: function (eventId, subscriptionId) {
return function () {
/**
* Stop listening for this event from this component
*/
delete Event.Subscriptions[eventId][subscriptionId];
/**
* If the length of listeners is 0, stop referencing this event
* @type {string[]}
*/
var listeners = Object.keys(Event.Subscriptions[eventId]);
if (listeners.length === 0) {
delete Event.Subscriptions[eventId];
}
};
}(eventName, subscriptionId),
subscriptionId: subscriptionId
};
}
}, {
key: "Emit",
value:
/**
* Static Synchronous Event - Calls clientCallback directly after the event result is obtained
* @param eventId
* @param data
* @param clientCallback is executed ideally when the event completed
* @param clientErrorCallback
* @returns {number} of callbacks executed
* @constructor
*/
function Emit(eventId, data, clientCallback, clientErrorCallback) {
if (Event.Subscriptions.hasOwnProperty(eventId)) {
var subscriptionIds = Object.keys(Event.Subscriptions[eventId]);
subscriptionIds.map(function (subscriptionId) {
try {
var result = Event.Subscriptions[eventId][subscriptionId](data);
if (clientCallback) {
clientCallback(result);
}
} catch (error) {
if (clientErrorCallback) {
clientErrorCallback(error);
} else {
console.error(error);
throw error;
}
}
});
}
}
}, {
key: "Async",
value: function Async(eventId, data, clientCallback, clientErrorCallback) {
if (Event.Subscriptions.hasOwnProperty(eventId)) {
var subscriptionIds = Object.keys(Event.Subscriptions[eventId]);
subscriptionIds.map(function (subscriptionId) {
try {
Event.Subscriptions[eventId][subscriptionId](data, clientCallback, clientErrorCallback);
} catch (error) {
if (clientErrorCallback) {
clientErrorCallback(error);
} else {
console.error(error);
throw error;
}
}
});
}
}
}]);
return Event;
}();
_defineProperty(Event, "Subscriptions", {});
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//EVENT_GENERATED_START
Event.COMPONENT_INITIALIZED = 0x1;
Event.CREATE_INSTANCE_BEFORE = 0x2;
Event.DISPOSE_INSTANCE = 0x3;
Event.DISPOSE_OBJECT = 0x4;
Event.GET_RUNTIME = 0x5;
Event.GET_WINDOW_SIZE = 0x6;
Event.INSTANCE_CREATED = 0x7;
Event.INSTANCE_DISPOSED = 0x8;
Event.OBJECT_CREATED = 0x9;
Event.OBJECT_INITIALIZED = 0xa;
Event.PAUSE = 0xb;
Event.RESTART = 0xc;
Event.START = 0xd;
Event.UPDATE_FROM_INSTANCE_AFTER = 0xe;
Event.UPDATE_FROM_INSTANCE_BEFORE = 0xf;
Event.UPDATE_INSTANCE_AFTER = 0x10;
Event.UPDATE_INSTANCE_BEFORE = 0x11;
Event.MAX_EVENTS = 0x12;
Event.GetEventName = function (eventId) {
switch (eventId) {
case 0x1:
return 'component_initialized';
case 0x2:
return 'create_instance_before';
case 0x3:
return 'dispose_instance';
case 0x4:
return 'dispose_object';
case 0x5:
return 'get_runtime';
case 0x6:
return 'get_window_size';
case 0x7:
return 'instance_created';
case 0x8:
return 'instance_disposed';
case 0x9:
return 'object_created';
case 0xa:
return 'object_initialized';
case 0xb:
return 'pause';
case 0xc:
return 'restart';
case 0xd:
return 'start';
case 0xe:
return 'update_from_instance_after';
case 0xf:
return 'update_from_instance_before';
case 0x10:
return 'update_instance_after';
case 0x11:
return 'update_instance_before';
default:
throw new Error('Event type not defined : ' + eventId);
}
}; //EVENT_GENERATED_END
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
module.exports = Event;
/***/ }),
/***/ "./src/r3/r3-r3-object.js":
/*!********************************!*\
!*** ./src/r3/r3-r3-object.js ***!
\********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var Utils = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module 'r3-utils'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
var Event = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module 'r3-event.js'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
/**
OPTIONS_START
id=Utils.RandomId(10)
name=this.constructor.name + '(' + options.id + ')'
register=true
OPTIONS_END
INSTANCE_OPTIONS_MAPPING_START
INSTANCE_OPTIONS_MAPPING_END
LINKED_OBJECTS_START
LINKED_OBJECTS_END
EXCLUDED_FROM_INSTANCE_OPTIONS_START
id
name
register
EXCLUDED_FROM_INSTANCE_OPTIONS_END
**/
var R3Object = /*#__PURE__*/function (_Event) {
_inherits(R3Object, _Event);
var _super = _createSuper(R3Object);
//CONSTRUCTOR_EXTENDS_TEMPLATE_START
function R3Object(options) {
var _this;
_classCallCheck(this, R3Object);
if (Utils.UndefinedOrNull(options)) {
options = {};
}
_this = _super.call(this, options);
_this.emit(Event.OBJECT_CREATED, _assertThisInitialized(_this)); //OPTIONS_INIT_START
if (typeof options === 'undefined') {
options = {};
}
if (Utils.UndefinedOrNull(options.id)) {
options.id = Utils.RandomId(10);
}
if (Utils.UndefinedOrNull(options.name)) {
options.name = _this.constructor.name + '(' + options.id + ')';
}
if (Utils.UndefinedOrNull(options.register)) {
options.register = true;
} //OPTIONS_INIT_END
//CUSTOM_OPTIONS_INIT_START
//CUSTOM_OPTIONS_INIT_END
Object.assign(_assertThisInitialized(_this), options); //CUSTOM_BEFORE_INIT_START
//CUSTOM_BEFORE_INIT_END
_this.emit(Event.OBJECT_INITIALIZED, _assertThisInitialized(_this));
return _this;
} //CONSTRUCTOR_EXTENDS_TEMPLATE_END
//CREATE_INSTANCE_TEMPLATE_START
_createClass(R3Object, [{
key: "createInstance",
value: function createInstance() {
//CREATE_INSTANCE_BEFORE_START
this.emit(Event.CREATE_INSTANCE_BEFORE, this); //CREATE_INSTANCE_BEFORE_END
//CUSTOM_CREATE_INSTANCE_START
//CUSTOM_CREATE_INSTANCE_END
//CREATE_INSTANCE_AFTER_START
this[this.runtime].createInstance(this, {//CREATE_INSTANCE_OPTIONS_START
//CREATE_INSTANCE_OPTIONS_END
});
this.emit(Event.INSTANCE_CREATED, this); //CREATE_INSTANCE_AFTER_END
} //CREATE_INSTANCE_TEMPLATE_END
//UPDATE_INSTANCE_TEMPLATE_START
}, {
key: "updateInstance",
value: function updateInstance(property) {
//UPDATE_INSTANCE_BEFORE_START
this.emit(Event.UPDATE_INSTANCE_BEFORE, this); //UPDATE_INSTANCE_BEFORE_END
//UPDATE_INSTANCE_OPTIONS_START
//UPDATE_INSTANCE_OPTIONS_END
//CUSTOM_UPDATE_INSTANCE_START
//CUSTOM_UPDATE_INSTANCE_END
//UPDATE_INSTANCE_AFTER_START
this.emit(Event.UPDATE_INSTANCE_AFTER, this); //UPDATE_INSTANCE_AFTER_END
} //UPDATE_INSTANCE_TEMPLATE_END
//UPDATE_FROM_INSTANCE_TEMPLATE_START
}, {
key: "updateFromInstance",
value: function updateFromInstance(property) {
//UPDATE_FROM_INSTANCE_BEFORE_START
this.emit(Event.UPDATE_FROM_INSTANCE_BEFORE, this); //UPDATE_FROM_INSTANCE_BEFORE_END
//UPDATE_FROM_INSTANCE_OPTIONS_START
//UPDATE_FROM_INSTANCE_OPTIONS_END
//CUSTOM_UPDATE_FROM_INSTANCE_START
//CUSTOM_UPDATE_FROM_INSTANCE_END
//UPDATE_FROM_INSTANCE_AFTER_START
this.emit(Event.UPDATE_FROM_INSTANCE_AFTER, this); //UPDATE_FROM_INSTANCE_AFTER_END
} //UPDATE_FROM_INSTANCE_TEMPLATE_END
//DISPOSE_TEMPLATE_START
}, {
key: "dispose",
value: function dispose() {
//DISPOSE_BEFORE_START
this.subscribe(Event.INSTANCE_DISPOSED, function (object) {
if (object === this) {
this.emit(Event.DISPOSE_OBJECT, this);
}
}); //DISPOSE_BEFORE_END
//CUSTOM_DISPOSE_START
//CUSTOM_DISPOSE_END
//DISPOSE_AFTER_START
this.disposeInstance(); //DISPOSE_AFTER_END
} //DISPOSE_TEMPLATE_END
//DISPOSE_INSTANCE_TEMPLATE_START
}, {
key: "disposeInstance",
value: function disposeInstance() {
//DISPOSE_INSTANCE_BEFORE_START
console.log('Disposing instance of ' + this.name); //DISPOSE_INSTANCE_BEFORE_END
//CUSTOM_DISPOSE_INSTANCE_START
//CUSTOM_DISPOSE_INSTANCE_END
//DISPOSE_INSTANCE_AFTER_START
this.emit(Event.DISPOSE_INSTANCE, this); //DISPOSE_INSTANCE_AFTER_END
} //DISPOSE_INSTANCE_TEMPLATE_END
//CUSTOM_IMPLEMENTATION_START
//CUSTOM_IMPLEMENTATION_END
}]);
return R3Object;
}(Event); //CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
module.exports = R3Object;
/***/ }),
/***/ "./src/r3/r3-system/index.js":
/*!***********************************!*\
!*** ./src/r3/r3-system/index.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var System = __webpack_require__(/*! ./r3-system.js */ "./src/r3/r3-system/r3-system.js");
var SystemLinking = __webpack_require__(/*! ./r3-system-linking.js */ "./src/r3/r3-system/r3-system-linking.js");
var SystemSocket = __webpack_require__(/*! ./r3-system-socket.js */ "./src/r3/r3-system/r3-system-socket.js");
module.exports = {
System: System,
SystemLinking: SystemLinking,
SystemSocket: SystemSocket
};
/***/ }),
/***/ "./src/r3/r3-system/r3-system-linking.js":
/*!***********************************************!*\
!*** ./src/r3/r3-system/r3-system-linking.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var System = __webpack_require__(/*! ./r3-system */ "./src/r3/r3-system/r3-system.js");
var R3Object = __webpack_require__(/*! ../r3-r3-object */ "./src/r3/r3-r3-object.js");
var Event = __webpack_require__(/*! ../r3-event */ "./src/r3/r3-event.js");
var LinkingSystem = /*#__PURE__*/function (_System) {
_inherits(LinkingSystem, _System);
var _super = _createSuper(LinkingSystem);
function LinkingSystem() {
_classCallCheck(this, LinkingSystem);
return _super.apply(this, arguments);
}
_createClass(LinkingSystem, null, [{
key: "start",
value: function start() {
_get(_getPrototypeOf(LinkingSystem), "start", this).call(this);
console.log('starting linking system');
Event.Subscribe(Event.OBJECT_CREATED, function () {
console.log('linking system discovered an object');
});
var object = new R3Object();
return true;
}
}]);
return LinkingSystem;
}(System);
module.exports = LinkingSystem;
/***/ }),
/***/ "./src/r3/r3-system/r3-system-socket.js":
/*!**********************************************!*\
!*** ./src/r3/r3-system/r3-system-socket.js ***!
\**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var System = __webpack_require__(/*! ./r3-system.js */ "./src/r3/r3-system/r3-system.js");
var SocketSystem = /*#__PURE__*/function (_System) {
_inherits(SocketSystem, _System);
var _super = _createSuper(SocketSystem);
function SocketSystem() {
_classCallCheck(this, SocketSystem);
return _super.apply(this, arguments);
}
_createClass(SocketSystem, null, [{
key: "start",
value: function start() {
_get(_getPrototypeOf(SocketSystem), "start", this).call(this);
console.log('starting socket system');
return true;
}
}]);
return SocketSystem;
}(System);
module.exports = SocketSystem;
/***/ }),
/***/ "./src/r3/r3-system/r3-system.js":
/*!***************************************!*\
!*** ./src/r3/r3-system/r3-system.js ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports) {
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var System = /*#__PURE__*/function () {
function System() {
_classCallCheck(this, System);
}
_createClass(System, null, [{
key: "start",
value: function start() {
console.log('starting a system');
}
}]);
return System;
}();
module.exports = System;
/***/ }),
/***/ "./src/r3/r3.js":
/*!**********************!*\
!*** ./src/r3/r3.js ***!
\**********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var _require = __webpack_require__(/*! ./r3-system */ "./src/r3/r3-system/index.js"),
System = _require.System,
SystemLinking = _require.SystemLinking,
SystemSocket = _require.SystemSocket;
var R3Object = __webpack_require__(/*! ./r3-r3-object */ "./src/r3/r3-r3-object.js");
var R3 = /*#__PURE__*/function () {
function R3() {
_classCallCheck(this, R3);
}
_createClass(R3, null, [{
key: "version",
value: function version() {
return 'Sun Jun 20 2021 18:45:42 GMT+0000 (Coordinated Universal Time)';
}
}]);
return R3;
}();
R3.R3Object = R3Object;
R3.System = System;
R3.System.Linking = SystemLinking;
R3.System.Socket = SystemSocket;
module.exports = R3;
/***/ })
/******/ });
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3IzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9yMy9yMy1ldmVudC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcjMvcjMtcjMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL3NyYy9yMy9yMy1zeXN0ZW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3IzL3IzLXN5c3RlbS9yMy1zeXN0ZW0tbGlua2luZy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcjMvcjMtc3lzdGVtL3IzLXN5c3RlbS1zb2NrZXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3IzL3IzLXN5c3RlbS9yMy1zeXN0ZW0uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3IzL3IzLmpzIl0sIm5hbWVzIjpbIlIzIiwicmVxdWlyZSIsIlN5c3RlbSIsIkxpbmtpbmciLCJzdGFydCIsIlNvY2tldCIsIm1vZHVsZSIsImV4cG9ydHMiLCJVdGlscyIsIkV2ZW50Iiwib3B0aW9ucyIsIkVtaXQiLCJPQkpFQ1RfQ1JFQVRFRCIsIk9iamVjdCIsImFzc2lnbiIsIk9CSkVDVF9JTklUSUFMSVpFRCIsImV2ZW50TmFtZSIsImNhbGxiYWNrIiwiU3Vic2NyaWJlIiwiYmluZCIsImRhdGEiLCJjbGllbnRDYWxsYmFjayIsImNsaWVudEVycm9yQ2FsbGJhY2siLCJmbiIsInN1YnNjcmlwdGlvbklkIiwiUmFuZG9tSWQiLCJTdWJzY3JpcHRpb25zIiwiaGFzT3duUHJvcGVydHkiLCJFcnJvciIsInJlbW92ZSIsImV2ZW50SWQiLCJsaXN0ZW5lcnMiLCJrZXlzIiwibGVuZ3RoIiwic3Vic2NyaXB0aW9uSWRzIiwibWFwIiwicmVzdWx0IiwiZXJyb3IiLCJjb25zb2xlIiwiQ09NUE9ORU5UX0lOSVRJQUxJWkVEIiwiQ1JFQVRFX0lOU1RBTkNFX0JFRk9SRSIsIkRJU1BPU0VfSU5TVEFOQ0UiLCJESVNQT1NFX09CSkVDVCIsIkdFVF9SVU5USU1FIiwiR0VUX1dJTkRPV19TSVpFIiwiSU5TVEFOQ0VfQ1JFQVRFRCIsIklOU1RBTkNFX0RJU1BPU0VEIiwiUEFVU0UiLCJSRVNUQVJUIiwiU1RBUlQiLCJVUERBVEVfRlJPTV9JTlNUQU5DRV9BRlRFUiIsIlVQREFURV9GUk9NX0lOU1RBTkNFX0JFRk9SRSIsIlVQREFURV9JTlNUQU5DRV9BRlRFUiIsIlVQREFURV9JTlNUQU5DRV9CRUZPUkUiLCJNQVhfRVZFTlRTIiwiR2V0RXZlbnROYW1lIiwiUjNPYmplY3QiLCJVbmRlZmluZWRPck51bGwiLCJlbWl0IiwiaWQiLCJuYW1lIiwiY29uc3RydWN0b3IiLCJyZWdpc3RlciIsInJ1bnRpbWUiLCJjcmVhdGVJbnN0YW5jZSIsInByb3BlcnR5Iiwic3Vic2NyaWJlIiwib2JqZWN0IiwiZGlzcG9zZUluc3RhbmNlIiwibG9nIiwiU3lzdGVtTGlua2luZyIsIlN5c3RlbVNvY2tldCIsIkxpbmtpbmdTeXN0ZW0iLCJTb2NrZXRTeXN0ZW0iXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFz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Q0FBeEI7O0lBRU1ELEU7QUFFTCxnQkFBYztBQUFBO0FBQ2I7Ozs7V0FFRCxtQkFBaUI7QUFDaEIsYUFBTyxVQUFQO0FBQ0E7Ozs7OztBQUlGQSxFQUFFLENBQUN3RCxRQUFILEdBQWdCQSxRQUFoQjtBQUNBeEQsRUFBRSxDQUFDRSxNQUFILEdBQWVBLE1BQWY7QUFDQUYsRUFBRSxDQUFDRSxNQUFILENBQVVDLE9BQVYsR0FBb0JtRSxhQUFwQjtBQUNBdEUsRUFBRSxDQUFDRSxNQUFILENBQVVHLE1BQVYsR0FBbUJrRSxZQUFuQjtBQUVBakUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCUCxFQUFqQixDIiwiZmlsZSI6InIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvcjMvaW5kZXguanNcIik7XG4iLCJjb25zdCBSMyA9IHJlcXVpcmUoJy4vcjMuanMnKTtcblxuUjMuU3lzdGVtLkxpbmtpbmcuc3RhcnQoKTtcblIzLlN5c3RlbS5Tb2NrZXQuc3RhcnQoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSMztcbiIsImNvbnN0IFV0aWxzID0gcmVxdWlyZSgncjMtdXRpbHMnKTtcblxuLyoqXG5cbiBPUFRJT05TX1NUQVJUXG4gT1BUSU9OU19FTkRcblxuICoqL1xuXG5jbGFzcyBFdmVudCB7XG5cbiAgLy9DT05TVFJVQ1RPUl9URU1QTEFURV9TVEFSVFxuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cbiAgICBFdmVudC5FbWl0KEV2ZW50Lk9CSkVDVF9DUkVBVEVELCB0aGlzKTtcblxuICAgIC8vT1BUSU9OU19JTklUX1NUQVJUXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXHRcdC8vT1BUSU9OU19JTklUX0VORFxuXG4gICAgLy9DVVNUT01fT1BUSU9OU19JTklUX1NUQVJUXG4gICAgLy9DVVNUT01fT1BUSU9OU19JTklUX0VORFxuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBvcHRpb25zKTtcblxuICAgIC8vQ1VTVE9NX0JFRk9SRV9JTklUX1NUQVJUXG4gICAgLy9DVVNUT01fQkVGT1JFX0lOSVRfRU5EXG5cbiAgICBFdmVudC5FbWl0KEV2ZW50Lk9CSkVDVF9JTklUSUFMSVpFRCwgdGhpcyk7XG4gIH1cblx0Ly9DT05TVFJVQ1RPUl9URU1QTEFURV9FTkRcblxuICAvL0NVU1RPTV9JTVBMRU1FTlRBVElPTl9TVEFSVFxuXG5cdC8qKlxuXHQgKiBTb21lIG5pY2UgRXZlbnRzIGhhbmRsaW5nXG5cdCAqIEB0eXBlIHt7fX1cblx0ICovXG5cdHN0YXRpYyBTdWJzY3JpcHRpb25zID0ge307XG5cblx0c3RhdGljIFN1YnNjcmliZShcblx0XHRldmVudE5hbWUsXG5cdFx0Zm5cblx0KSB7XG5cdFx0LyoqXG5cdFx0ICogVG9kbyAtIG1heWJlIGV2ZW50dWFsbHkgc3RvcmUgYSBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWRcblx0XHQgKi9cblx0XHRsZXQgc3Vic2NyaXB0aW9uSWQgPSBVdGlscy5SYW5kb21JZCgxMCk7XG5cblx0XHRpZiAoRXZlbnQuU3Vic2NyaXB0aW9ucy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG5cblx0XHRcdGlmIChFdmVudC5TdWJzY3JpcHRpb25zW2V2ZW50TmFtZV1bc3Vic2NyaXB0aW9uSWRdKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignQSBjb21wb25lbnQgY2FuIG9ubHkgc3Vic2NyaWJlIHRvIGEgcGFydGljdWxhciBldmVudCBJRCBvbmNlJyk7XG5cdFx0XHR9XG5cblx0XHRcdEV2ZW50LlN1YnNjcmlwdGlvbnNbZXZlbnROYW1lXVtzdWJzY3JpcHRpb25JZF0gPSBmbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0RXZlbnQuU3Vic2NyaXB0aW9uc1tldmVudE5hbWVdID0ge307XG5cdFx0XHRFdmVudC5TdWJzY3JpcHRpb25zW2V2ZW50TmFtZV1bc3Vic2NyaXB0aW9uSWRdID0gZm47XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBjYWxsZXIgdG8gYWxsb3cgdXMgdG8gdW5zdWJzY3JpYmUgdG8gdGhpcyBldmVudFxuXHRcdCAqL1xuXHRcdHJldHVybiB7XG5cdFx0XHRmbjogZm4sXG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uIChldmVudElkLCBzdWJzY3JpcHRpb25JZCkge1xuXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBTdG9wIGxpc3RlbmluZyBmb3IgdGhpcyBldmVudCBmcm9tIHRoaXMgY29tcG9uZW50XG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0ZGVsZXRlIEV2ZW50LlN1YnNjcmlwdGlvbnNbZXZlbnRJZF1bc3Vic2NyaXB0aW9uSWRdO1xuXG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogSWYgdGhlIGxlbmd0aCBvZiBsaXN0ZW5lcnMgaXMgMCwgc3RvcCByZWZlcmVuY2luZyB0aGlzIGV2ZW50XG5cdFx0XHRcdFx0ICogQHR5cGUge3N0cmluZ1tdfVxuXHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdGxldCBsaXN0ZW5lcnMgPSBPYmplY3Qua2V5cyhFdmVudC5TdWJzY3JpcHRpb25zW2V2ZW50SWRdKTtcblx0XHRcdFx0XHRpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIEV2ZW50LlN1YnNjcmlwdGlvbnNbZXZlbnRJZF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH0oZXZlbnROYW1lLCBzdWJzY3JpcHRpb25JZCksXG5cdFx0XHRzdWJzY3JpcHRpb25JZCA6IHN1YnNjcmlwdGlvbklkXG5cdFx0fTtcblx0fTtcblxuXHQvKipcblx0ICogU3Vic2NyaWJlIHRvIHNvbWUgZXZlbnRzXG5cdCAqIEBwYXJhbSBldmVudE5hbWVcblx0ICogQHBhcmFtIGNhbGxiYWNrXG5cdCAqL1xuXHRzdWJzY3JpYmUoXG5cdFx0ZXZlbnROYW1lLFxuXHRcdGNhbGxiYWNrXG5cdCkge1xuXHRcdHJldHVybiBFdmVudC5TdWJzY3JpYmUoZXZlbnROYW1lLCBjYWxsYmFjay5iaW5kKHRoaXMpKTtcblx0fTtcblxuXHQvKipcblx0ICogU3RhdGljIFN5bmNocm9ub3VzIEV2ZW50IC0gQ2FsbHMgY2xpZW50Q2FsbGJhY2sgZGlyZWN0bHkgYWZ0ZXIgdGhlIGV2ZW50IHJlc3VsdCBpcyBvYnRhaW5lZFxuXHQgKiBAcGFyYW0gZXZlbnRJZFxuXHQgKiBAcGFyYW0gZGF0YVxuXHQgKiBAcGFyYW0gY2xpZW50Q2FsbGJhY2sgaXMgZXhlY3V0ZWQgaWRlYWxseSB3aGVuIHRoZSBldmVudCBjb21wbGV0ZWRcblx0ICogQHBhcmFtIGNsaWVudEVycm9yQ2FsbGJhY2tcblx0ICogQHJldHVybnMge251bWJlcn0gb2YgY2FsbGJhY2tzIGV4ZWN1dGVkXG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0c3RhdGljIEVtaXQoXG5cdFx0ZXZlbnRJZCxcblx0XHRkYXRhLFxuXHRcdGNsaWVudENhbGxiYWNrLFxuXHRcdGNsaWVudEVycm9yQ2FsbGJhY2tcblx0KSB7XG5cdFx0aWYgKEV2ZW50LlN1YnNjcmlwdGlvbnMuaGFzT3duUHJvcGVydHkoZXZlbnRJZCkpIHtcblxuXHRcdFx0bGV0IHN1YnNjcmlwdGlvbklkcyA9IE9iamVjdC5rZXlzKEV2ZW50LlN1YnNjcmlwdGlvbnNbZXZlbnRJZF0pO1xuXG5cdFx0XHRzdWJzY3JpcHRpb25JZHMubWFwKFxuXHRcdFx0XHRmdW5jdGlvbihzdWJzY3JpcHRpb25JZCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0ID0gRXZlbnQuU3Vic2NyaXB0aW9uc1tldmVudElkXVtzdWJzY3JpcHRpb25JZF0oZGF0YSk7XG5cblx0XHRcdFx0XHRcdGlmIChjbGllbnRDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRjbGllbnRDYWxsYmFjayhyZXN1bHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRpZiAoY2xpZW50RXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRjbGllbnRFcnJvckNhbGxiYWNrKGVycm9yKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHR9XG5cdH1cblxuXHRlbWl0KFxuXHRcdGV2ZW50TmFtZSxcblx0XHRkYXRhLFxuXHRcdGNsaWVudENhbGxiYWNrLFxuXHRcdGNsaWVudEVycm9yQ2FsbGJhY2tcblx0KSB7XG5cdFx0cmV0dXJuIEV2ZW50LkVtaXQoXG5cdFx0XHRldmVudE5hbWUsXG5cdFx0XHRkYXRhLFxuXHRcdFx0Y2xpZW50Q2FsbGJhY2ssXG5cdFx0XHRjbGllbnRFcnJvckNhbGxiYWNrXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlIHRoZSBmdW5jdGlvbnMgd2hpY2ggc3Vic2NyaWJlIHRvIHRoaXMgZXZlbnQsIGJ1dCBkb24ndCBwcm9jZXNzIHRoZSBjbGllbnQgY2FsbGJhY2sgLSB0aGUgc3Vic2NyaXB0aW9uIGZ1bmN0aW9uXG5cdCAqIHNob3VsZCBleGVjdXRlIHRoZSBjbGllbnQgY2FsbGJhY2tcblx0ICogQHBhcmFtIGV2ZW50SWRcblx0ICogQHBhcmFtIGRhdGFcblx0ICogQHBhcmFtIGNsaWVudENhbGxiYWNrXG5cdCAqIEBwYXJhbSBjbGllbnRFcnJvckNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9XG5cdCAqIEBjb25zdHJ1Y3RvclxuXHQgKi9cblx0c3RhdGljIEFzeW5jKFxuXHRcdGV2ZW50SWQsXG5cdFx0ZGF0YSxcblx0XHRjbGllbnRDYWxsYmFjayxcblx0XHRjbGllbnRFcnJvckNhbGxiYWNrXG5cdCkge1xuXHRcdGlmIChFdmVudC5TdWJzY3JpcHRpb25zLmhhc093blByb3BlcnR5KGV2ZW50SWQpKSB7XG5cblx0XHRcdGxldCBzdWJzY3JpcHRpb25JZHMgPSBPYmplY3Qua2V5cyhFdmVudC5TdWJzY3JpcHRpb25zW2V2ZW50SWRdKTtcblxuXHRcdFx0c3Vic2NyaXB0aW9uSWRzLm1hcChcblx0XHRcdFx0ZnVuY3Rpb24oc3Vic2NyaXB0aW9uSWQpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0RXZlbnQuU3Vic2NyaXB0aW9uc1tldmVudElkXVtzdWJzY3JpcHRpb25JZF0oZGF0YSwgY2xpZW50Q2FsbGJhY2ssIGNsaWVudEVycm9yQ2FsbGJhY2spO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRpZiAoY2xpZW50RXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRjbGllbnRFcnJvckNhbGxiYWNrKGVycm9yKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHR9XG5cdH07XG4gIC8vQ1VTVE9NX0lNUExFTUVOVEFUSU9OX0VORFxuXG59XG5cbi8vQ1VTVE9NX09VVF9PRl9DTEFTU19JTVBMRU1FTlRBVElPTl9TVEFSVFxuXG4vL0VWRU5UX0dFTkVSQVRFRF9TVEFSVFxuRXZlbnQuQ09NUE9ORU5UX0lOSVRJQUxJWkVEID0gMHgxO1xuRXZlbnQuQ1JFQVRFX0lOU1RBTkNFX0JFRk9SRSA9IDB4MjtcbkV2ZW50LkRJU1BPU0VfSU5TVEFOQ0UgPSAweDM7XG5FdmVudC5ESVNQT1NFX09CSkVDVCA9IDB4NDtcbkV2ZW50LkdFVF9SVU5USU1FID0gMHg1O1xuRXZlbnQuR0VUX1dJTkRPV19TSVpFID0gMHg2O1xuRXZlbnQuSU5TVEFOQ0VfQ1JFQVRFRCA9IDB4NztcbkV2ZW50LklOU1RBTkNFX0RJU1BPU0VEID0gMHg4O1xuRXZlbnQuT0JKRUNUX0NSRUFURUQgPSAweDk7XG5FdmVudC5PQkpFQ1RfSU5JVElBTElaRUQgPSAweGE7XG5FdmVudC5QQVVTRSA9IDB4YjtcbkV2ZW50LlJFU1RBUlQgPSAweGM7XG5FdmVudC5TVEFSVCA9IDB4ZDtcbkV2ZW50LlVQREFURV9GUk9NX0lOU1RBTkNFX0FGVEVSID0gMHhlO1xuRXZlbnQuVVBEQVRFX0ZST01fSU5TVEFOQ0VfQkVGT1JFID0gMHhmO1xuRXZlbnQuVVBEQVRFX0lOU1RBTkNFX0FGVEVSID0gMHgxMDtcbkV2ZW50LlVQREFURV9JTlNUQU5DRV9CRUZPUkUgPSAweDExO1xuRXZlbnQuTUFYX0VWRU5UUyA9IDB4MTI7XG5cbkV2ZW50LkdldEV2ZW50TmFtZSA9IGZ1bmN0aW9uKGV2ZW50SWQpIHtcblxuXHRzd2l0Y2goZXZlbnRJZCkge1xuXHRcdGNhc2UgMHgxIDogcmV0dXJuICdjb21wb25lbnRfaW5pdGlhbGl6ZWQnO1xuXHRcdGNhc2UgMHgyIDogcmV0dXJuICdjcmVhdGVfaW5zdGFuY2VfYmVmb3JlJztcblx0XHRjYXNlIDB4MyA6IHJldHVybiAnZGlzcG9zZV9pbnN0YW5jZSc7XG5cdFx0Y2FzZSAweDQgOiByZXR1cm4gJ2Rpc3Bvc2Vfb2JqZWN0Jztcblx0XHRjYXNlIDB4NSA6IHJldHVybiAnZ2V0X3J1bnRpbWUnO1xuXHRcdGNhc2UgMHg2IDogcmV0dXJuICdnZXRfd2luZG93X3NpemUnO1xuXHRcdGNhc2UgMHg3IDogcmV0dXJuICdpbnN0YW5jZV9jcmVhdGVkJztcblx0XHRjYXNlIDB4OCA6IHJldHVybiAnaW5zdGFuY2VfZGlzcG9zZWQnO1xuXHRcdGNhc2UgMHg5IDogcmV0dXJuICdvYmplY3RfY3JlYXRlZCc7XG5cdFx0Y2FzZSAweGEgOiByZXR1cm4gJ29iamVjdF9pbml0aWFsaXplZCc7XG5cdFx0Y2FzZSAweGIgOiByZXR1cm4gJ3BhdXNlJztcblx0XHRjYXNlIDB4YyA6IHJldHVybiAncmVzdGFydCc7XG5cdFx0Y2FzZSAweGQgOiByZXR1cm4gJ3N0YXJ0Jztcblx0XHRjYXNlIDB4ZSA6IHJldHVybiAndXBkYXRlX2Zyb21faW5zdGFuY2VfYWZ0ZXInO1xuXHRcdGNhc2UgMHhmIDogcmV0dXJuICd1cGRhdGVfZnJvbV9pbnN0YW5jZV9iZWZvcmUnO1xuXHRcdGNhc2UgMHgxMCA6IHJldHVybiAndXBkYXRlX2luc3RhbmNlX2FmdGVyJztcblx0XHRjYXNlIDB4MTEgOiByZXR1cm4gJ3VwZGF0ZV9pbnN0YW5jZV9iZWZvcmUnO1xuXHRcdGRlZmF1bHQgOlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFdmVudCB0eXBlIG5vdCBkZWZpbmVkIDogJyArIGV2ZW50SWQpO1xuXHR9XG5cbn07XG4vL0VWRU5UX0dFTkVSQVRFRF9FTkRcblxuLy9DVVNUT01fT1VUX09GX0NMQVNTX0lNUExFTUVOVEFUSU9OX0VORFxuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50OyIsImNvbnN0IFV0aWxzID0gcmVxdWlyZSgncjMtdXRpbHMnKTtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZSgncjMtZXZlbnQuanMnKTtcblxuLyoqXG5cbiBPUFRJT05TX1NUQVJUXG4gaWQ9VXRpbHMuUmFuZG9tSWQoMTApXG4gbmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnKCcgKyBvcHRpb25zLmlkICsgJyknXG4gcmVnaXN0ZXI9dHJ1ZVxuIE9QVElPTlNfRU5EXG5cbiBJTlNUQU5DRV9PUFRJT05TX01BUFBJTkdfU1RBUlRcbiBJTlNUQU5DRV9PUFRJT05TX01BUFBJTkdfRU5EXG5cbiBMSU5LRURfT0JKRUNUU19TVEFSVFxuIExJTktFRF9PQkpFQ1RTX0VORFxuXG4gRVhDTFVERURfRlJPTV9JTlNUQU5DRV9PUFRJT05TX1NUQVJUXG4gaWRcbiBuYW1lXG4gcmVnaXN0ZXJcbiBFWENMVURFRF9GUk9NX0lOU1RBTkNFX09QVElPTlNfRU5EXG5cbiAqKi9cblxuY2xhc3MgUjNPYmplY3QgZXh0ZW5kcyBFdmVudCB7XG5cbiAgLy9DT05TVFJVQ1RPUl9FWFRFTkRTX1RFTVBMQVRFX1NUQVJUXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblxuICAgIGlmIChVdGlscy5VbmRlZmluZWRPck51bGwob3B0aW9ucykpIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHRoaXMuZW1pdChFdmVudC5PQkpFQ1RfQ1JFQVRFRCwgdGhpcyk7XG5cbiAgICAvL09QVElPTlNfSU5JVF9TVEFSVFxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoVXRpbHMuVW5kZWZpbmVkT3JOdWxsKG9wdGlvbnMuaWQpKSB7XG4gICAgICBvcHRpb25zLmlkID0gVXRpbHMuUmFuZG9tSWQoMTApO1xuICAgIH1cbiAgICBpZiAoVXRpbHMuVW5kZWZpbmVkT3JOdWxsKG9wdGlvbnMubmFtZSkpIHtcbiAgICAgIG9wdGlvbnMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZSArICcoJyArIG9wdGlvbnMuaWQgKyAnKSc7XG4gICAgfVxuICAgIGlmIChVdGlscy5VbmRlZmluZWRPck51bGwob3B0aW9ucy5yZWdpc3RlcikpIHtcbiAgICAgIG9wdGlvbnMucmVnaXN0ZXIgPSB0cnVlO1xuICAgIH1cblx0XHQvL09QVElPTlNfSU5JVF9FTkRcblxuICAgIC8vQ1VTVE9NX09QVElPTlNfSU5JVF9TVEFSVFxuICAgIC8vQ1VTVE9NX09QVElPTlNfSU5JVF9FTkRcblxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XG5cbiAgICAvL0NVU1RPTV9CRUZPUkVfSU5JVF9TVEFSVFxuICAgIC8vQ1VTVE9NX0JFRk9SRV9JTklUX0VORFxuXG4gICAgdGhpcy5lbWl0KEV2ZW50Lk9CSkVDVF9JTklUSUFMSVpFRCwgdGhpcyk7XG4gIH1cblx0Ly9DT05TVFJVQ1RPUl9FWFRFTkRTX1RFTVBMQVRFX0VORFxuXG4gIC8vQ1JFQVRFX0lOU1RBTkNFX1RFTVBMQVRFX1NUQVJUXG4gIGNyZWF0ZUluc3RhbmNlKCkge1xuXG4gICAgLy9DUkVBVEVfSU5TVEFOQ0VfQkVGT1JFX1NUQVJUXG4gICAgdGhpcy5lbWl0KEV2ZW50LkNSRUFURV9JTlNUQU5DRV9CRUZPUkUsIHRoaXMpO1xuXHRcdC8vQ1JFQVRFX0lOU1RBTkNFX0JFRk9SRV9FTkRcblxuICAgIC8vQ1VTVE9NX0NSRUFURV9JTlNUQU5DRV9TVEFSVFxuICAgIC8vQ1VTVE9NX0NSRUFURV9JTlNUQU5DRV9FTkRcblxuICAgIC8vQ1JFQVRFX0lOU1RBTkNFX0FGVEVSX1NUQVJUXG4gICAgdGhpc1t0aGlzLnJ1bnRpbWVdLmNyZWF0ZUluc3RhbmNlKFxuICAgICAgdGhpcyxcbiAgICAgIHtcbiAgICAgICAgLy9DUkVBVEVfSU5TVEFOQ0VfT1BUSU9OU19TVEFSVFxuICAgICAgICAvL0NSRUFURV9JTlNUQU5DRV9PUFRJT05TX0VORFxuICAgICAgfVxuICAgIClcblxuICAgIHRoaXMuZW1pdChFdmVudC5JTlNUQU5DRV9DUkVBVEVELCB0aGlzKTtcblx0XHQvL0NSRUFURV9JTlNUQU5DRV9BRlRFUl9FTkRcblxuICB9XG5cdC8vQ1JFQVRFX0lOU1RBTkNFX1RFTVBMQVRFX0VORFxuXG4gIC8vVVBEQVRFX0lOU1RBTkNFX1RFTVBMQVRFX1NUQVJUXG4gIHVwZGF0ZUluc3RhbmNlKHByb3BlcnR5KSB7XG5cbiAgICAvL1VQREFURV9JTlNUQU5DRV9CRUZPUkVfU1RBUlRcbiAgICB0aGlzLmVtaXQoRXZlbnQuVVBEQVRFX0lOU1RBTkNFX0JFRk9SRSwgdGhpcyk7XG5cdFx0Ly9VUERBVEVfSU5TVEFOQ0VfQkVGT1JFX0VORFxuXG4gICAgLy9VUERBVEVfSU5TVEFOQ0VfT1BUSU9OU19TVEFSVFxuXHRcdC8vVVBEQVRFX0lOU1RBTkNFX09QVElPTlNfRU5EXG5cbiAgICAvL0NVU1RPTV9VUERBVEVfSU5TVEFOQ0VfU1RBUlRcbiAgICAvL0NVU1RPTV9VUERBVEVfSU5TVEFOQ0VfRU5EXG5cbiAgICAvL1VQREFURV9JTlNUQU5DRV9BRlRFUl9TVEFSVFxuICAgIHRoaXMuZW1pdChFdmVudC5VUERBVEVfSU5TVEFOQ0VfQUZURVIsIHRoaXMpO1xuXHRcdC8vVVBEQVRFX0lOU1RBTkNFX0FGVEVSX0VORFxuXG4gIH1cblx0Ly9VUERBVEVfSU5TVEFOQ0VfVEVNUExBVEVfRU5EXG5cbiAgLy9VUERBVEVfRlJPTV9JTlNUQU5DRV9URU1QTEFURV9TVEFSVFxuICB1cGRhdGVGcm9tSW5zdGFuY2UocHJvcGVydHkpIHtcblxuICAgIC8vVVBEQVRFX0ZST01fSU5TVEFOQ0VfQkVGT1JFX1NUQVJUXG4gICAgdGhpcy5lbWl0KEV2ZW50LlVQREFURV9GUk9NX0lOU1RBTkNFX0JFRk9SRSwgdGhpcyk7XG5cdFx0Ly9VUERBVEVfRlJPTV9JTlNUQU5DRV9CRUZPUkVfRU5EXG5cbiAgICAvL1VQREFURV9GUk9NX0lOU1RBTkNFX09QVElPTlNfU1RBUlRcblx0XHQvL1VQREFURV9GUk9NX0lOU1RBTkNFX09QVElPTlNfRU5EXG5cbiAgICAvL0NVU1RPTV9VUERBVEVfRlJPTV9JTlNUQU5DRV9TVEFSVFxuICAgIC8vQ1VTVE9NX1VQREFURV9GUk9NX0lOU1RBTkNFX0VORFxuXG4gICAgLy9VUERBVEVfRlJPTV9JTlNUQU5DRV9BRlRFUl9TVEFSVFxuICAgIHRoaXMuZW1pdChFdmVudC5VUERBVEVfRlJPTV9JTlNUQU5DRV9BRlRFUiwgdGhpcyk7XG5cdFx0Ly9VUERBVEVfRlJPTV9JTlNUQU5DRV9BRlRFUl9FTkRcblxuICB9XG5cdC8vVVBEQVRFX0ZST01fSU5TVEFOQ0VfVEVNUExBVEVfRU5EXG5cbiAgLy9ESVNQT1NFX1RFTVBMQVRFX1NUQVJUXG4gIGRpc3Bvc2UoKSB7XG5cbiAgICAvL0RJU1BPU0VfQkVGT1JFX1NUQVJUXG4gICAgdGhpcy5zdWJzY3JpYmUoXG4gICAgICBFdmVudC5JTlNUQU5DRV9ESVNQT1NFRCxcbiAgICAgIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICBpZiAob2JqZWN0ID09PSB0aGlzKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KEV2ZW50LkRJU1BPU0VfT0JKRUNULCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cdFx0Ly9ESVNQT1NFX0JFRk9SRV9FTkRcblxuICAgIC8vQ1VTVE9NX0RJU1BPU0VfU1RBUlRcbiAgICAvL0NVU1RPTV9ESVNQT1NFX0VORFxuXG4gICAgLy9ESVNQT1NFX0FGVEVSX1NUQVJUXG4gICAgdGhpcy5kaXNwb3NlSW5zdGFuY2UoKTtcblx0XHQvL0RJU1BPU0VfQUZURVJfRU5EXG5cbiAgfVxuXHQvL0RJU1BPU0VfVEVNUExBVEVfRU5EXG5cbiAgLy9ESVNQT1NFX0lOU1RBTkNFX1RFTVBMQVRFX1NUQVJUXG4gIGRpc3Bvc2VJbnN0YW5jZSgpIHtcblxuICAgIC8vRElTUE9TRV9JTlNUQU5DRV9CRUZPUkVfU1RBUlRcbiAgICBjb25zb2xlLmxvZygnRGlzcG9zaW5nIGluc3RhbmNlIG9mICcgKyB0aGlzLm5hbWUpO1xuXHRcdC8vRElTUE9TRV9JTlNUQU5DRV9CRUZPUkVfRU5EXG5cbiAgICAvL0NVU1RPTV9ESVNQT1NFX0lOU1RBTkNFX1NUQVJUXG4gICAgLy9DVVNUT01fRElTUE9TRV9JTlNUQU5DRV9FTkRcblxuICAgIC8vRElTUE9TRV9JTlNUQU5DRV9BRlRFUl9TVEFSVFxuICAgIHRoaXMuZW1pdChFdmVudC5ESVNQT1NFX0lOU1RBTkNFLCB0aGlzKTtcblx0XHQvL0RJU1BPU0VfSU5TVEFOQ0VfQUZURVJfRU5EXG5cbiAgfVxuXHQvL0RJU1BPU0VfSU5TVEFOQ0VfVEVNUExBVEVfRU5EXG5cbiAgLy9DVVNUT01fSU1QTEVNRU5UQVRJT05fU1RBUlRcbiAgLy9DVVNUT01fSU1QTEVNRU5UQVRJT05fRU5EXG5cbn1cblxuLy9DVVNUT01fT1VUX09GX0NMQVNTX0lNUExFTUVOVEFUSU9OX1NUQVJUXG4vL0NVU1RPTV9PVVRfT0ZfQ0xBU1NfSU1QTEVNRU5UQVRJT05fRU5EXG5cbm1vZHVsZS5leHBvcnRzID0gUjNPYmplY3Q7IiwiY29uc3QgU3lzdGVtID0gcmVxdWlyZSgnLi9yMy1zeXN0ZW0uanMnKTtcbmNvbnN0IFN5c3RlbUxpbmtpbmcgPSByZXF1aXJlKCcuL3IzLXN5c3RlbS1saW5raW5nLmpzJyk7XG5jb25zdCBTeXN0ZW1Tb2NrZXQgPSByZXF1aXJlKCcuL3IzLXN5c3RlbS1zb2NrZXQuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFN5c3RlbSxcbiAgU3lzdGVtTGlua2luZyxcbiAgU3lzdGVtU29ja2V0XG59IiwiY29uc3QgU3lzdGVtID0gcmVxdWlyZSgnLi9yMy1zeXN0ZW0nKTtcbmNvbnN0IFIzT2JqZWN0ID0gcmVxdWlyZSgnLi4vcjMtcjMtb2JqZWN0Jyk7XG5jb25zdCBFdmVudCA9IHJlcXVpcmUoJy4uL3IzLWV2ZW50Jyk7XG5cbmNsYXNzIExpbmtpbmdTeXN0ZW0gZXh0ZW5kcyBTeXN0ZW0ge1xuXG5cdHN0YXRpYyBzdGFydCgpIHtcblxuXHRcdHN1cGVyLnN0YXJ0KCk7XG5cdFx0XG5cdFx0Y29uc29sZS5sb2coJ3N0YXJ0aW5nIGxpbmtpbmcgc3lzdGVtJyk7XG5cblx0XHRFdmVudC5TdWJzY3JpYmUoXG5cdFx0XHRFdmVudC5PQkpFQ1RfQ1JFQVRFRCxcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coJ2xpbmtpbmcgc3lzdGVtIGRpc2NvdmVyZWQgYW4gb2JqZWN0Jyk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGxldCBvYmplY3QgPSBuZXcgUjNPYmplY3QoKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXG5cdH1cdFxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTGlua2luZ1N5c3RlbTtcbiIsImNvbnN0IFN5c3RlbSA9IHJlcXVpcmUoJy4vcjMtc3lzdGVtLmpzJyk7XG5cbmNsYXNzIFNvY2tldFN5c3RlbSBleHRlbmRzIFN5c3RlbSB7XG5cblx0c3RhdGljIHN0YXJ0KCkge1xuXG5cdFx0c3VwZXIuc3RhcnQoKTtcblx0XHRcblx0XHRjb25zb2xlLmxvZygnc3RhcnRpbmcgc29ja2V0IHN5c3RlbScpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU29ja2V0U3lzdGVtOyIsImNsYXNzIFN5c3RlbSB7XG5cblx0c3RhdGljIHN0YXJ0KCkge1xuXHRcdGNvbnNvbGUubG9nKCdzdGFydGluZyBhIHN5c3RlbScpO1x0XG5cdH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN5c3RlbTtcbiIsImNvbnN0IHtTeXN0ZW0sIFN5c3RlbUxpbmtpbmcsIFN5c3RlbVNvY2tldH0gPSByZXF1aXJlKCcuL3IzLXN5c3RlbScpO1xuY29uc3QgUjNPYmplY3QgPSByZXF1aXJlKCcuL3IzLXIzLW9iamVjdCcpO1xuXG5jbGFzcyBSMyB7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdH1cblxuXHRzdGF0aWMgdmVyc2lvbigpIHtcblx0XHRyZXR1cm4gJ19fREFURV9fJztcblx0fVxuXG59XG5cblIzLlIzT2JqZWN0IFx0XHQ9IFIzT2JqZWN0O1xuUjMuU3lzdGVtIFx0XHRcdD0gU3lzdGVtO1xuUjMuU3lzdGVtLkxpbmtpbmdcdD0gU3lzdGVtTGlua2luZztcblIzLlN5c3RlbS5Tb2NrZXRcdD0gU3lzdGVtU29ja2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFIzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==