1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.Context = undefined;
|
7 |
|
8 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
9 |
|
10 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
11 |
|
12 | var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
13 |
|
14 | var _events = require('events');
|
15 |
|
16 | var _defined = require('defined');
|
17 |
|
18 | var _defined2 = _interopRequireDefault(_defined);
|
19 |
|
20 | var _document = require('global/document');
|
21 |
|
22 | var _document2 = _interopRequireDefault(_document);
|
23 |
|
24 | var _window = require('global/window');
|
25 |
|
26 | var _window2 = _interopRequireDefault(_window);
|
27 |
|
28 | var _domEvents = require('dom-events');
|
29 |
|
30 | var _domEvents2 = _interopRequireDefault(_domEvents);
|
31 |
|
32 | var _regl = require('@littlstar/regl');
|
33 |
|
34 | var _regl2 = _interopRequireDefault(_regl);
|
35 |
|
36 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
37 |
|
38 | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
39 |
|
40 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
41 |
|
42 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
43 |
|
44 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
45 |
|
46 | var Context = exports.Context = function (_EventEmitter) {
|
47 | _inherits(Context, _EventEmitter);
|
48 |
|
49 | function Context() {
|
50 | var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
51 | var createRegl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _regl2.default;
|
52 |
|
53 | _classCallCheck(this, Context);
|
54 |
|
55 | var _this = _possibleConstructorReturn(this, (Context.__proto__ || Object.getPrototypeOf(Context)).call(this));
|
56 |
|
57 | _this.setMaxListeners(Infinity);
|
58 | _this._hasFocus = false;
|
59 | _this._isDestroyed = false;
|
60 |
|
61 | // coalesce regl options if given as `.gl`
|
62 | opts.regl = (0, _defined2.default)(opts.regl, opts.gl || {});
|
63 | if (opts.gl && opts.gl.context) {
|
64 | opts.regl.gl = opts.gl.context;
|
65 | delete opts.gl.context;
|
66 | }
|
67 |
|
68 | // derive container element
|
69 | if (opts.canvas && 'object' == _typeof(opts.canvas)) {
|
70 | opts.regl.canvas = opts.canvas;
|
71 | } else if (opts.element && 'CANVAS' == opts.element.nodeName) {
|
72 | opts.regl.canvas = opts.element;
|
73 | } else if (opts.element && opts.element.nodeName) {
|
74 | opts.regl.container = opts.element;
|
75 | } else if ('string' == typeof opts.element) {
|
76 | opts.regl.container = opts.element;
|
77 | }
|
78 |
|
79 | // call regl initializer
|
80 | createRegl(_extends({
|
81 | pixelRatio: opts.pixelRatio || _window2.default.devicePixelRatio || 1,
|
82 | profile: Boolean(opts.profile)
|
83 | }, opts.regl, {
|
84 | attributes: _extends({}, opts.regl.attributes || {}),
|
85 | extensions: [].concat(_toConsumableArray(opts.regl.extensions || [])),
|
86 | optionalExtensions: ['ANGLE_instanced_arrays'].concat(_toConsumableArray(opts.regl.optionalExtensions || [])),
|
87 |
|
88 | onDone: function onDone(err, regl) {
|
89 | if (err) {
|
90 | return _this.emit('error', err);
|
91 | }
|
92 | _this._regl = regl;
|
93 | _this._isDestroyed = false;
|
94 | if (regl._gl && regl._gl.canvas) {
|
95 | _this._domElement = _this._regl._gl.canvas;
|
96 | } else {
|
97 | _this._domElement = null;
|
98 | }
|
99 | }
|
100 | }));
|
101 |
|
102 | if (null != _this._domElement && 'undefind' != typeof _window2.default && 'undefind' != typeof _document2.default) {
|
103 | var bind = function bind(t, e, f) {
|
104 | _domEvents2.default.on(t, e, f);
|
105 | _this.once('beforedestroy', function () {
|
106 | return _domEvents2.default.off(t, e, f);
|
107 | });
|
108 | };
|
109 | // context focus event handlers
|
110 | var onblur = function onblur() {
|
111 | _this.blur();
|
112 | };
|
113 | var onfocus = function onfocus() {
|
114 | _this.focus();
|
115 | };
|
116 | var onwindowblur = function onwindowblur() {
|
117 | _this.blur();
|
118 | };
|
119 | var onmousedown = function onmousedown(e) {
|
120 | if (e.target == _this._domElement) {
|
121 | _this.focus();
|
122 | } else {
|
123 | _this.blur();
|
124 | }
|
125 | };
|
126 | bind(_this._domElement, 'blur', onblur);
|
127 | bind(_this._domElement, 'focus', onfocus);
|
128 | bind(_window2.default, 'blur', onwindowblur);
|
129 | bind(_document2.default, 'mousedown', onmousedown);
|
130 | bind(_document2.default, 'touchstart', onmousedown);
|
131 | }
|
132 | return _this;
|
133 | }
|
134 |
|
135 | _createClass(Context, [{
|
136 | key: 'focus',
|
137 | value: function focus() {
|
138 | this._hasFocus = true;
|
139 | this.emit('focus');
|
140 | return this;
|
141 | }
|
142 | }, {
|
143 | key: 'blur',
|
144 | value: function blur() {
|
145 | this._hasFocus = false;
|
146 | this.emit('blur');
|
147 | return this;
|
148 | }
|
149 | }, {
|
150 | key: 'destroy',
|
151 | value: function destroy() {
|
152 | this.emit('beforedestroy');
|
153 | if (this._regl && 'function' == typeof this._regl.destroy) {
|
154 | this._regl.destroy();
|
155 | }
|
156 |
|
157 | if (this._domElement && this._domElement.parentElement) {
|
158 | this._domElement.parentElement.removeChild(this._domElement);
|
159 | }
|
160 |
|
161 | delete this._regl;
|
162 | delete this._domElement;
|
163 | this._hasFocus = false;
|
164 | this.emit('destroy');
|
165 | return this;
|
166 | }
|
167 | }, {
|
168 | key: 'refresh',
|
169 | value: function refresh() {
|
170 | if (this.regl && 'function' == typeof this.regl._refresh) {
|
171 | this.regl._refresh();
|
172 | }
|
173 | return this;
|
174 | }
|
175 | }, {
|
176 | key: 'flush',
|
177 | value: function flush() {
|
178 | if (this.gl) {
|
179 | this.gl.flush();
|
180 | }
|
181 | return this;
|
182 | }
|
183 | }, {
|
184 | key: 'poll',
|
185 | value: function poll() {
|
186 | if (this.regl) {
|
187 | if (this.regl && 'function' == typeof this.regl.poll) {
|
188 | this.regl.poll();
|
189 | }
|
190 | }
|
191 | }
|
192 | }, {
|
193 | key: 'isDestroyed',
|
194 | get: function get() {
|
195 | return Boolean(this._isDestroyed);
|
196 | }
|
197 | }, {
|
198 | key: 'domElement',
|
199 | get: function get() {
|
200 | return this._domElement || null;
|
201 | }
|
202 | }, {
|
203 | key: 'hasFocus',
|
204 | get: function get() {
|
205 | return Boolean(this._hasFocus);
|
206 | }
|
207 | }, {
|
208 | key: 'regl',
|
209 | get: function get() {
|
210 | return this._regl || null;
|
211 | }
|
212 | }, {
|
213 | key: 'gl',
|
214 | get: function get() {
|
215 | return this._regl ? this._regl._gl || null : null;
|
216 | }
|
217 | }]);
|
218 |
|
219 | return Context;
|
220 | }(_events.EventEmitter);
|
221 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2NvbnRleHQuanMiXSwibmFtZXMiOlsiQ29udGV4dCIsIm9wdHMiLCJjcmVhdGVSZWdsIiwic2V0TWF4TGlzdGVuZXJzIiwiSW5maW5pdHkiLCJfaGFzRm9jdXMiLCJfaXNEZXN0cm95ZWQiLCJyZWdsIiwiZ2wiLCJjb250ZXh0IiwiY2FudmFzIiwiZWxlbWVudCIsIm5vZGVOYW1lIiwiY29udGFpbmVyIiwicGl4ZWxSYXRpbyIsImRldmljZVBpeGVsUmF0aW8iLCJwcm9maWxlIiwiQm9vbGVhbiIsImF0dHJpYnV0ZXMiLCJleHRlbnNpb25zIiwib3B0aW9uYWxFeHRlbnNpb25zIiwib25Eb25lIiwiZXJyIiwiZW1pdCIsIl9yZWdsIiwiX2dsIiwiX2RvbUVsZW1lbnQiLCJiaW5kIiwidCIsImUiLCJmIiwib24iLCJvbmNlIiwib2ZmIiwib25ibHVyIiwiYmx1ciIsIm9uZm9jdXMiLCJmb2N1cyIsIm9ud2luZG93Ymx1ciIsIm9ubW91c2Vkb3duIiwidGFyZ2V0IiwiZGVzdHJveSIsInBhcmVudEVsZW1lbnQiLCJyZW1vdmVDaGlsZCIsIl9yZWZyZXNoIiwiZmx1c2giLCJwb2xsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7SUFFYUEsTyxXQUFBQSxPOzs7QUFDWCxxQkFBMEM7QUFBQSxRQUE5QkMsSUFBOEIsdUVBQXZCLEVBQXVCO0FBQUEsUUFBbkJDLFVBQW1COztBQUFBOztBQUFBOztBQUV4QyxVQUFLQyxlQUFMLENBQXFCQyxRQUFyQjtBQUNBLFVBQUtDLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxVQUFLQyxZQUFMLEdBQW9CLEtBQXBCOztBQUVBO0FBQ0FMLFNBQUtNLElBQUwsR0FBWSx1QkFBU04sS0FBS00sSUFBZCxFQUFvQk4sS0FBS08sRUFBTCxJQUFXLEVBQS9CLENBQVo7QUFDQSxRQUFJUCxLQUFLTyxFQUFMLElB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RCxhQUFLckMsSUFBTCxDQUFVcUMsUUFBVjtBQUNEO0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7Ozs0QkFFTztBQUNOLFVBQUksS0FBS3BDLEVBQVQsRUFBYTtBQUNYLGFBQUtBLEVBQUwsQ0FBUXFDLEtBQVI7QUFDRDtBQUNELGFBQU8sSUFBUDtBQUNEOzs7MkJBRU07QUFDTCxVQUFJLEtBQUt0QyxJQUFULEVBQWU7QUFDYixZQUFJLEtBQUtBLElBQUwsSUFBYSxjQUFjLE9BQU8sS0FBS0EsSUFBTCxDQUFVdUMsSUFBaEQsRUFBc0Q7QUFDcEQsZUFBS3ZDLElBQUwsQ0FBVXVDLElBQVY7QUFDRDtBQUNGO0FBQ0Y7Ozt3QkF2RGlCO0FBQUUsYUFBTzdCLFFBQVEsS0FBS1gsWUFBYixDQUFQO0FBQW1DOzs7d0JBQ3RDO0FBQUUsYUFBTyxLQUFLb0IsV0FBTCxJQUFvQixJQUEzQjtBQUFpQzs7O3dCQUNyQztBQUFFLGFBQU9ULFFBQVEsS0FBS1osU0FBYixDQUFQO0FBQWdDOzs7d0JBQ3RDO0FBQUUsYUFBTyxLQUFLbUIsS0FBTCxJQUFjLElBQXJCO0FBQTJCOzs7d0JBQy9CO0FBQUUsYUFBTyxLQUFLQSxLQUFMLEdBQWEsS0FBS0EsS0FBTCxDQUFXQyxHQUFYLElBQWtCLElBQS9CLEdBQXNDLElBQTdDO0FBQW1EIiwiZmlsZSI6ImNvbnRleHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5pbXBvcnQgY29hbGVzY2UgZnJvbSAnZGVmaW5lZCdcbmltcG9ydCBkb2N1bWVudCBmcm9tICdnbG9iYWwvZG9jdW1lbnQnXG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnXG5pbXBvcnQgZXZlbnRzIGZyb20gJ2RvbS1ldmVudHMnXG5pbXBvcnQgcmVnbCBmcm9tICdAbGl0dGxzdGFyL3JlZ2wnXG5cbmV4cG9ydCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9LCBjcmVhdGVSZWdsID0gcmVnbCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldE1heExpc3RlbmVycyhJbmZpbml0eSlcbiAgICB0aGlzLl9oYXNGb2N1cyA9IGZhbHNlXG4gICAgdGhpcy5faXNEZXN0cm95ZWQgPSBmYWxzZVxuXG4gICAgLy8gY29hbGVzY2UgcmVnbCBvcHRpb25zIGlmIGdpdmVuIGFzIGAuZ2xgXG4gICAgb3B0cy5yZWdsID0gY29hbGVzY2Uob3B0cy5yZWdsLCBvcHRzLmdsIHx8IHt9KVxuICAgIGlmIChvcHRzLmdsICYmIG9wdHMuZ2wuY29udGV4dCkge1xuICAgICAgb3B0cy5yZWdsLmdsID0gb3B0cy5nbC5jb250ZXh0XG4gICAgICBkZWxldGUgb3B0cy5nbC5jb250ZXh0XG4gICAgfVxuXG4gICAgLy8gZGVyaXZlIGNvbnRhaW5lciBlbGVtZW50XG4gICAgaWYgKG9wdHMuY2FudmFzICYmICdvYmplY3QnID09IHR5cGVvZiBvcHRzLmNhbnZhcykge1xuICAgICAgb3B0cy5yZWdsLmNhbnZhcyA9IG9wdHMuY2FudmFzXG4gICAgfSBlbHNlIGlmIChvcHRzLmVsZW1lbnQgJiYgJ0NBTlZBUycgPT0gb3B0cy5lbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgICBvcHRzLnJlZ2wuY2FudmFzID0gb3B0cy5lbGVtZW50XG4gICAgfSBlbHNlIGlmIChvcHRzLmVsZW1lbnQgJiYgb3B0cy5lbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgICBvcHRzLnJlZ2wuY29udGFpbmVyID0gb3B0cy5lbGVtZW50XG4gICAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PSB0eXBlb2Ygb3B0cy5lbGVtZW50KSB7XG4gICAgICBvcHRzLnJlZ2wuY29udGFpbmVyID0gb3B0cy5lbGVtZW50XG4gICAgfVxuXG4gICAgLy8gY2FsbCByZWdsIGluaXRpYWxpemVyXG4gICAgY3JlYXRlUmVnbCh7XG4gICAgICBwaXhlbFJhdGlvOiBvcHRzLnBpeGVsUmF0aW8gfHwgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSxcbiAgICAgIHByb2ZpbGU6IEJvb2xlYW4ob3B0cy5wcm9maWxlKSxcbiAgICAgIC4uLm9wdHMucmVnbCxcbiAgICAgIGF0dHJpYnV0ZXM6IHsgLi4uKG9wdHMucmVnbC5hdHRyaWJ1dGVzIHx8IHt9KSB9LFxuICAgICAgZXh0ZW5zaW9uczogWyAuLi4ob3B0cy5yZWdsLmV4dGVuc2lvbnMgfHwgW10pIF0sXG4gICAgICBvcHRpb25hbEV4dGVuc2lvbnM6IFtcbiAgICAgICAgJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnLFxuICAgICAgICAuLi4ob3B0cy5yZWdsLm9wdGlvbmFsRXh0ZW5zaW9ucyB8fCBbXSlcbiAgICAgIF0sXG5cbiAgICAgIG9uRG9uZTogKGVyciwgcmVnbCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7IHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKSB9XG4gICAgICAgIHRoaXMuX3JlZ2wgPSByZWdsXG4gICAgICAgIHRoaXMuX2lzRGVzdHJveWVkID0gZmFsc2VcbiAgICAgICAgaWYgKHJlZ2wuX2dsICYmIHJlZ2wuX2dsLmNhbnZhcykge1xuICAgICAgICAgIHRoaXMuX2RvbUVsZW1lbnQgPSB0aGlzLl9yZWdsLl9nbC5jYW52YXNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9kb21FbGVtZW50ID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChcbiAgICAgIG51bGwgIT0gdGhpcy5fZG9tRWxlbWVudCAmJlxuICAgICAgJ3VuZGVmaW5kJyAhPSB0eXBlb2Ygd2luZG93ICYmXG4gICAgICAndW5kZWZpbmQnICE9IHR5cGVvZiBkb2N1bWVudFxuICAgICkge1xuICAgICAgY29uc3QgYmluZCA9ICh0LCBlLCBmKSA9PiB7XG4gICAgICAgIGV2ZW50cy5vbih0LCBlLCBmKVxuICAgICAgICB0aGlzLm9uY2UoJ2JlZm9yZWRlc3Ryb3knLCAoKSA9PiBldmVudHMub2ZmKHQsIGUsIGYpKVxuICAgICAgfVxuICAgICAgLy8gY29udGV4dCBmb2N1cyBldmVudCBoYW5kbGVyc1xuICAgICAgY29uc3Qgb25ibHVyID0gKCkgPT4geyB0aGlzLmJsdXIoKSB9XG4gICAgICBjb25zdCBvbmZvY3VzID0gKCkgPT4geyB0aGlzLmZvY3VzKCkgfVxuICAgICAgY29uc3Qgb253aW5kb3dibHVyID0gKCkgPT4geyB0aGlzLmJsdXIoKSB9XG4gICAgICBjb25zdCBvbm1vdXNlZG93biA9IChlKSA9PiB7XG4gICAgICAgIGlmIChlLnRhcmdldCA9PSB0aGlzLl9kb21FbGVtZW50KSB7IHRoaXMuZm9jdXMoKSB9XG4gICAgICAgIGVsc2UgeyB0aGlzLmJsdXIoKSB9XG4gICAgICB9XG4gICAgICBiaW5kKHRoaXMuX2RvbUVsZW1lbnQsICdibHVyJywgb25ibHVyKVxuICAgICAgYmluZCh0aGlzLl9kb21FbGVtZW50LCAnZm9jdXMnLCBvbmZvY3VzKVxuICAgICAgYmluZCh3aW5kb3csICdibHVyJywgb253aW5kb3dibHVyKVxuICAgICAgYmluZChkb2N1bWVudCwgJ21vdXNlZG93bicsIG9ubW91c2Vkb3duKVxuICAgICAgYmluZChkb2N1bWVudCwgJ3RvdWNoc3RhcnQnLCBvbm1vdXNlZG93bilcbiAgICB9XG4gIH1cblxuICBnZXQgaXNEZXN0cm95ZWQoKSB7IHJldHVybiBCb29sZWFuKHRoaXMuX2lzRGVzdHJveWVkKSB9XG4gIGdldCBkb21FbGVtZW50KCkgeyByZXR1cm4gdGhpcy5fZG9tRWxlbWVudCB8fCBudWxsIH1cbiAgZ2V0IGhhc0ZvY3VzKCkgeyByZXR1cm4gQm9vbGVhbih0aGlzLl9oYXNGb2N1cykgfVxuICBnZXQgcmVnbCgpIHsgcmV0dXJuIHRoaXMuX3JlZ2wgfHwgbnVsbCB9XG4gIGdldCBnbCgpIHsgcmV0dXJuIHRoaXMuX3JlZ2wgPyB0aGlzLl9yZWdsLl9nbCB8fCBudWxsIDogbnVsbCB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5faGFzRm9jdXMgPSB0cnVlXG4gICAgdGhpcy5lbWl0KCdmb2N1cycpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGJsdXIoKSB7XG4gICAgdGhpcy5faGFzRm9jdXMgPSBmYWxzZVxuICAgIHRoaXMuZW1pdCgnYmx1cicpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5lbWl0KCdiZWZvcmVkZXN0cm95JylcbiAgICBpZiAodGhpcy5fcmVnbCAmJiAnZnVuY3Rpb24nID09IHR5cGVvZiB0aGlzLl9yZWdsLmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3JlZ2wuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RvbUVsZW1lbnQgJiYgdGhpcy5fZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLl9kb21FbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZG9tRWxlbWVudClcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5fcmVnbFxuICAgIGRlbGV0ZSB0aGlzLl9kb21FbGVtZW50XG4gICAgdGhpcy5faGFzRm9jdXMgPSBmYWxzZVxuICAgIHRoaXMuZW1pdCgnZGVzdHJveScpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgaWYgKHRoaXMucmVnbCAmJiAnZnVuY3Rpb24nID09IHR5cGVvZiB0aGlzLnJlZ2wuX3JlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVnbC5fcmVmcmVzaCgpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBmbHVzaCgpIHtcbiAgICBpZiAodGhpcy5nbCkge1xuICAgICAgdGhpcy5nbC5mbHVzaCgpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwb2xsKCkge1xuICAgIGlmICh0aGlzLnJlZ2wpIHtcbiAgICAgIGlmICh0aGlzLnJlZ2wgJiYgJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgdGhpcy5yZWdsLnBvbGwpIHtcbiAgICAgICAgdGhpcy5yZWdsLnBvbGwoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19 |
\ | No newline at end of file |