hart-estate-widget 0.0.65 → 0.0.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/build/assets/css/index.css +2 -0
- package/build/assets/img/floor-dark.jpg +0 -0
- package/build/assets/img/floor-white.jpg +0 -0
- package/build/assets/img/grass.jpg +0 -0
- package/build/bundle.js +2 -0
- package/build/components/Application.js +2 -135
- package/build/components/Buttons/FullScreenButton.js +2 -50
- package/build/components/Buttons/TabButton.js +2 -24
- package/build/components/Instructions.js +2 -54
- package/build/components/Loader.js +2 -22
- package/build/components/ModelTab.js +2 -213
- package/build/components/PanoramaTab.js +2 -620
- package/build/components/RotationTab/DefaultView.js +2 -124
- package/build/components/RotationTab/ThreesixtyView.js +2 -45
- package/build/components/RotationTab/index.js +2 -187
- package/build/components/Widget.js +2 -110
- package/build/config/defaultConfig.js +2 -32
- package/build/enums/deviceOrientationStatuses.js +2 -11
- package/build/enums/deviceWidth.js +2 -21
- package/build/enums/imageExtentions.js +2 -16
- package/build/enums/rotationModes.js +2 -11
- package/build/index.css +1 -1
- package/build/index.js +2 -75
- package/build/locale/index.js +2 -71
- package/build/store/apiStore.js +2 -231
- package/build/store/deviceStore.js +2 -60
- package/build/store/fullScreenStore.js +2 -159
- package/build/store/houseStore.js +2 -952
- package/build/store/index.js +2 -124
- package/build/store/modelStore.js +2 -338
- package/build/threesixty/events.js +2 -220
- package/build/threesixty/index.js +2 -264
- package/build/utils/csg/csg-lib.js +2 -472
- package/build/utils/csg/csg-worker.js +2 -84
- package/build/utils/csg/three-csg.js +2 -277
- package/build/utils/helpers.js +2 -12
- package/build/utils/modelHelpers.js +2 -161
- package/build/utils/panoramaHelpers.js +2 -117
- package/package.json +17 -5
- package/build/assets/css/app.css +0 -1
- package/build/assets/css/app.css.map +0 -1
- package/build/assets/img/floor-dark.png +0 -0
- package/build/assets/img/floor-white.png +0 -0
- package/build/assets/img/grass.png +0 -0
@@ -1,620 +1,2 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
4
|
-
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
6
|
-
value: true
|
7
|
-
});
|
8
|
-
exports.default = void 0;
|
9
|
-
|
10
|
-
var _react = _interopRequireWildcard(require("react"));
|
11
|
-
|
12
|
-
var _deviceStore = _interopRequireDefault(require("../store/deviceStore"));
|
13
|
-
|
14
|
-
var _locale = _interopRequireDefault(require("../locale"));
|
15
|
-
|
16
|
-
var _store = _interopRequireDefault(require("../store"));
|
17
|
-
|
18
|
-
var THREE = _interopRequireWildcard(require("three"));
|
19
|
-
|
20
|
-
var PANOLENS = _interopRequireWildcard(require("panolens"));
|
21
|
-
|
22
|
-
var _threeDeviceOrientation = _interopRequireDefault(require("three-device-orientation"));
|
23
|
-
|
24
|
-
var _geometric = require("geometric");
|
25
|
-
|
26
|
-
var _deviceOrientationStatuses = require("../enums/deviceOrientationStatuses");
|
27
|
-
|
28
|
-
var _deviceWidth = require("../enums/deviceWidth");
|
29
|
-
|
30
|
-
var _imageExtentions = require("../enums/imageExtentions");
|
31
|
-
|
32
|
-
var _helpers = require("../utils/helpers");
|
33
|
-
|
34
|
-
var _panoramaHelpers = require("../utils/panoramaHelpers");
|
35
|
-
|
36
|
-
var _Loader = _interopRequireDefault(require("./Loader"));
|
37
|
-
|
38
|
-
var _Instructions = _interopRequireDefault(require("./Instructions"));
|
39
|
-
|
40
|
-
var _spotIcon = _interopRequireDefault(require("../assets/img/spot-icon.png"));
|
41
|
-
|
42
|
-
var _doorIcon = _interopRequireDefault(require("../assets/img/door-icon.png"));
|
43
|
-
|
44
|
-
var _handMove = _interopRequireDefault(require("../assets/icons/hand-move.svg"));
|
45
|
-
|
46
|
-
var _handResearch = _interopRequireDefault(require("../assets/icons/hand-research.svg"));
|
47
|
-
|
48
|
-
var _rotationClose = _interopRequireDefault(require("../assets/icons/rotation-close.svg"));
|
49
|
-
|
50
|
-
var _rotation = _interopRequireDefault(require("../assets/icons/rotation.svg"));
|
51
|
-
|
52
|
-
var _x = _interopRequireDefault(require("../assets/icons/1x.svg"));
|
53
|
-
|
54
|
-
var _x2 = _interopRequireDefault(require("../assets/icons/2x.svg"));
|
55
|
-
|
56
|
-
var _close = _interopRequireDefault(require("../assets/icons/close.svg"));
|
57
|
-
|
58
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
59
|
-
|
60
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
61
|
-
|
62
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
63
|
-
|
64
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
65
|
-
|
66
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
67
|
-
|
68
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
69
|
-
|
70
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
71
|
-
|
72
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
73
|
-
|
74
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
75
|
-
|
76
|
-
var _PANOLENS$CONTROLS = PANOLENS.CONTROLS,
|
77
|
-
DEVICEORIENTATION = _PANOLENS$CONTROLS.DEVICEORIENTATION,
|
78
|
-
ORBIT = _PANOLENS$CONTROLS.ORBIT;
|
79
|
-
var pathName = 'Panorama_0_0_';
|
80
|
-
var cameraFovValues = {
|
81
|
-
x1: 90,
|
82
|
-
x2: 60
|
83
|
-
};
|
84
|
-
|
85
|
-
var getDefaultUserData = function getDefaultUserData() {
|
86
|
-
return {
|
87
|
-
left: 0,
|
88
|
-
top: 0,
|
89
|
-
points: []
|
90
|
-
};
|
91
|
-
};
|
92
|
-
|
93
|
-
var createPanorama = function createPanorama(image, index, setLoadingState) {
|
94
|
-
var panorama = new PANOLENS.ImagePanorama(image);
|
95
|
-
panorama.userData = getDefaultUserData();
|
96
|
-
panorama['panorama_id'] = index + 1;
|
97
|
-
panorama.addEventListener('progress', function (event) {
|
98
|
-
setLoadingState(true);
|
99
|
-
|
100
|
-
if (event.progress.loaded / event.progress.total * 100 === 100) {
|
101
|
-
setLoadingState(false);
|
102
|
-
}
|
103
|
-
});
|
104
|
-
panorama.addEventListener('enter', function () {
|
105
|
-
return setLoadingState(false);
|
106
|
-
});
|
107
|
-
return panorama;
|
108
|
-
};
|
109
|
-
|
110
|
-
var getPanoramas = function getPanoramas(json, images, setLoadingState) {
|
111
|
-
if (!json) return images.map(function (image, index) {
|
112
|
-
return createPanorama(image, index, setLoadingState);
|
113
|
-
});
|
114
|
-
var panoramas = json.Floors[0].Units[0].Rooms.reduce(function (acc, jsonRoom, index) {
|
115
|
-
var roomImages = images.filter(function (img) {
|
116
|
-
var panoramaIdIndex = img.indexOf(pathName) + pathName.length;
|
117
|
-
if (panoramaIdIndex < pathName.length) return false;
|
118
|
-
var indexAsString = String(index);
|
119
|
-
var panoramaId = String((0, _imageExtentions.removeExtention)(img.substring(panoramaIdIndex))).split('.')[0];
|
120
|
-
|
121
|
-
if (panoramaId.toLowerCase().includes(_panoramaHelpers.cameraIdBeginning)) {
|
122
|
-
var cameraIdIndex = panoramaId.toLowerCase().indexOf(_panoramaHelpers.cameraIdBeginning) - 1;
|
123
|
-
panoramaId = panoramaId.slice(0, cameraIdIndex);
|
124
|
-
}
|
125
|
-
|
126
|
-
var maxIndexLength = Math.max(indexAsString.length, panoramaId.length);
|
127
|
-
var imageInRoom = (0, _panoramaHelpers.getArrayFromNumber)(maxIndexLength).every(function (i) {
|
128
|
-
return panoramaId[i] === indexAsString[i];
|
129
|
-
});
|
130
|
-
return imageInRoom;
|
131
|
-
});
|
132
|
-
if (!roomImages.length) return acc;
|
133
|
-
roomImages.forEach(function (image) {
|
134
|
-
var panorama = createPanorama(image, index, setLoadingState);
|
135
|
-
panorama['room_images'] = roomImages;
|
136
|
-
panorama['room_id'] = jsonRoom.ID;
|
137
|
-
var roomPoints = (0, _panoramaHelpers.getRoomCoordinates)(jsonRoom, json.Floors[0].Walls, json.Vertices);
|
138
|
-
|
139
|
-
var _polygonMean = (0, _geometric.polygonMean)(roomPoints),
|
140
|
-
_polygonMean2 = _slicedToArray(_polygonMean, 2),
|
141
|
-
left = _polygonMean2[0],
|
142
|
-
top = _polygonMean2[1];
|
143
|
-
|
144
|
-
if (panorama.src.toLowerCase().includes(_panoramaHelpers.cameraIdBeginning)) {
|
145
|
-
var currentCamera = (0, _panoramaHelpers.getCameraFromSrc)(json, panorama.src);
|
146
|
-
left = currentCamera.Location.X;
|
147
|
-
top = currentCamera.Location.Y;
|
148
|
-
}
|
149
|
-
|
150
|
-
panorama.userData = {
|
151
|
-
left: left,
|
152
|
-
top: top,
|
153
|
-
points: roomPoints
|
154
|
-
};
|
155
|
-
|
156
|
-
if (panorama['room_id'] === _store.default.initialPanoramaRoomId) {
|
157
|
-
acc.unshift(panorama);
|
158
|
-
} else {
|
159
|
-
acc.push(panorama);
|
160
|
-
}
|
161
|
-
});
|
162
|
-
return acc;
|
163
|
-
}, []);
|
164
|
-
return panoramas.map(function (panorama, index) {
|
165
|
-
panorama['panorama_index'] = index;
|
166
|
-
var currentRoom = json.Floors[0].Units[0].Rooms.find(function (room) {
|
167
|
-
return room.ID === panorama['room_id'];
|
168
|
-
});
|
169
|
-
|
170
|
-
if (!panorama.linkedSpots.length) {
|
171
|
-
return setPanoramaLinks(json, currentRoom, panorama, panoramas);
|
172
|
-
}
|
173
|
-
|
174
|
-
return panorama;
|
175
|
-
});
|
176
|
-
};
|
177
|
-
|
178
|
-
var setPanoramaLinks = function setPanoramaLinks(json, currentRoom, panorama, panoramas) {
|
179
|
-
var center = [panorama.userData.left, panorama.userData.top];
|
180
|
-
panorama['room_images'].forEach(function (image) {
|
181
|
-
if (image === panorama.src) return;
|
182
|
-
var connectedPanorama = panoramas.find(function (_ref) {
|
183
|
-
var src = _ref.src;
|
184
|
-
return src === image;
|
185
|
-
});
|
186
|
-
var currentCamera = (0, _panoramaHelpers.getCameraFromSrc)(json, connectedPanorama.src);
|
187
|
-
if (!currentCamera) return;
|
188
|
-
connectPanorama(panorama, connectedPanorama, currentCamera.Location, center, false);
|
189
|
-
});
|
190
|
-
json.Floors[0].Doors.forEach(function (_ref2) {
|
191
|
-
var Location = _ref2.Location,
|
192
|
-
Walls = _ref2.Walls;
|
193
|
-
if (!Walls.some(function (doorWallId) {
|
194
|
-
return currentRoom.Walls.some(function (roomWallId) {
|
195
|
-
return roomWallId === doorWallId;
|
196
|
-
});
|
197
|
-
})) return;
|
198
|
-
var connectedRoom = json.Floors[0].Units[0].Rooms.find(function (room) {
|
199
|
-
var roomHasSameWall = room.Walls.some(function (roomWallId) {
|
200
|
-
return Walls.some(function (doorWallId) {
|
201
|
-
return roomWallId === doorWallId;
|
202
|
-
});
|
203
|
-
});
|
204
|
-
var isSameRoom = room.ID === currentRoom.ID;
|
205
|
-
return roomHasSameWall && !isSameRoom;
|
206
|
-
});
|
207
|
-
if (!connectedRoom) return;
|
208
|
-
var availablePanoramas = panoramas.filter(function (_ref3) {
|
209
|
-
var room_id = _ref3.room_id;
|
210
|
-
return room_id === connectedRoom.ID;
|
211
|
-
});
|
212
|
-
|
213
|
-
var _getClosestPanorama = (0, _panoramaHelpers.getClosestPanorama)([Location.X, Location.Y], availablePanoramas),
|
214
|
-
connectedPanorama = _getClosestPanorama.panorama;
|
215
|
-
|
216
|
-
if (!connectedPanorama) return;
|
217
|
-
connectPanorama(panorama, connectedPanorama, Location, center, true);
|
218
|
-
});
|
219
|
-
return panorama;
|
220
|
-
};
|
221
|
-
|
222
|
-
var connectPanorama = function connectPanorama(panorama, connectedPanorama, location, center) {
|
223
|
-
var isDoorLink = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
224
|
-
var locationX = location.Y - center[1];
|
225
|
-
var locationY = location.X - center[0];
|
226
|
-
var locationZ = isDoorLink ? -10 : -100;
|
227
|
-
var icon = isDoorLink ? _doorIcon.default : _spotIcon.default;
|
228
|
-
var iconUrl = "".concat(icon, "?id=").concat(panorama['panorama_index'], "-").concat(panorama['panorama_id'], "-").concat(Math.random());
|
229
|
-
var defaultScale = 20;
|
230
|
-
var maxScale = 50;
|
231
|
-
var defaultLength = 120;
|
232
|
-
var length = (0, _geometric.lineLength)([[0, 0], [locationX, locationY]]);
|
233
|
-
var scale = length / defaultLength * defaultScale;
|
234
|
-
var finalScale = scale > maxScale ? maxScale : scale;
|
235
|
-
var resultScale = isDoorLink ? finalScale : finalScale - 15;
|
236
|
-
var position = new THREE.Vector3(locationX, locationZ, locationY);
|
237
|
-
panorama.link(connectedPanorama, position, resultScale, iconUrl);
|
238
|
-
};
|
239
|
-
|
240
|
-
var PanoramaTab = function PanoramaTab(_ref4) {
|
241
|
-
var _panoramas$currentRoo;
|
242
|
-
|
243
|
-
var json = _ref4.json,
|
244
|
-
planImage = _ref4.planImage,
|
245
|
-
images = _ref4.images,
|
246
|
-
disabled = _ref4.disabled;
|
247
|
-
var instructionSteps = [{
|
248
|
-
icon: _handMove.default,
|
249
|
-
text: _locale.default.getLocaleText('rotate-plan')
|
250
|
-
}, {
|
251
|
-
icon: _handResearch.default,
|
252
|
-
text: _locale.default.getLocaleText('research-plan')
|
253
|
-
}];
|
254
|
-
|
255
|
-
var _useState = (0, _react.useState)(_deviceOrientationStatuses.deviceOrientationStatuses.DENIED),
|
256
|
-
_useState2 = _slicedToArray(_useState, 2),
|
257
|
-
deviceOrientationStatus = _useState2[0],
|
258
|
-
setDeviceOrientationStatus = _useState2[1];
|
259
|
-
|
260
|
-
var _useState3 = (0, _react.useState)(true),
|
261
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
262
|
-
showInstructions = _useState4[0],
|
263
|
-
setInstructionsState = _useState4[1];
|
264
|
-
|
265
|
-
var _useState5 = (0, _react.useState)(true),
|
266
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
267
|
-
loadingState = _useState6[0],
|
268
|
-
setLoadingState = _useState6[1];
|
269
|
-
|
270
|
-
var _useState7 = (0, _react.useState)({
|
271
|
-
width: '200px',
|
272
|
-
height: 'auto'
|
273
|
-
}),
|
274
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
275
|
-
mapSize = _useState8[0],
|
276
|
-
setMapSize = _useState8[1];
|
277
|
-
|
278
|
-
var _useState9 = (0, _react.useState)(false),
|
279
|
-
_useState10 = _slicedToArray(_useState9, 2),
|
280
|
-
mapOpen = _useState10[0],
|
281
|
-
setMapState = _useState10[1];
|
282
|
-
|
283
|
-
var _useState11 = (0, _react.useState)({
|
284
|
-
X: 1,
|
285
|
-
Y: 1
|
286
|
-
}),
|
287
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
288
|
-
planScale = _useState12[0],
|
289
|
-
setPlanScale = _useState12[1];
|
290
|
-
|
291
|
-
var _useState13 = (0, _react.useState)(true),
|
292
|
-
_useState14 = _slicedToArray(_useState13, 2),
|
293
|
-
isMapDisabled = _useState14[0],
|
294
|
-
setMapDisabledState = _useState14[1];
|
295
|
-
|
296
|
-
var _useState15 = (0, _react.useState)(false),
|
297
|
-
_useState16 = _slicedToArray(_useState15, 2),
|
298
|
-
autoplayEnabled = _useState16[0],
|
299
|
-
setAutoplayState = _useState16[1];
|
300
|
-
|
301
|
-
var _useState17 = (0, _react.useState)(cameraFovValues.x1),
|
302
|
-
_useState18 = _slicedToArray(_useState17, 2),
|
303
|
-
cameraFov = _useState18[0],
|
304
|
-
setCameraFov = _useState18[1];
|
305
|
-
|
306
|
-
var _useState19 = (0, _react.useState)(0),
|
307
|
-
_useState20 = _slicedToArray(_useState19, 2),
|
308
|
-
currentRoomIndex = _useState20[0],
|
309
|
-
setCurrentRoomIndex = _useState20[1];
|
310
|
-
|
311
|
-
var _useState21 = (0, _react.useState)([]),
|
312
|
-
_useState22 = _slicedToArray(_useState21, 2),
|
313
|
-
panoramas = _useState22[0],
|
314
|
-
setPanoramas = _useState22[1];
|
315
|
-
|
316
|
-
var _useState23 = (0, _react.useState)(null),
|
317
|
-
_useState24 = _slicedToArray(_useState23, 2),
|
318
|
-
viewer = _useState24[0],
|
319
|
-
setViewer = _useState24[1];
|
320
|
-
|
321
|
-
var changePanorama = function changePanorama(panorama) {
|
322
|
-
setCurrentRoomIndex(panorama['panorama_index']);
|
323
|
-
viewer.setPanorama(panorama);
|
324
|
-
};
|
325
|
-
|
326
|
-
var setScale = function setScale() {
|
327
|
-
if (!viewer) return;
|
328
|
-
var image = document.querySelector('.widget-tab__panorama-map img');
|
329
|
-
var imageWidth = image.naturalWidth;
|
330
|
-
var imageHeight = image.naturalHeight;
|
331
|
-
var imageDelta = imageWidth / imageHeight;
|
332
|
-
var maxWidth = 200;
|
333
|
-
var maxHeight = _store.default.config.height - 200;
|
334
|
-
var width = maxWidth;
|
335
|
-
var height = width / imageDelta;
|
336
|
-
|
337
|
-
if (height >= maxHeight) {
|
338
|
-
height = maxHeight;
|
339
|
-
width = height * imageDelta;
|
340
|
-
}
|
341
|
-
|
342
|
-
setMapSize({
|
343
|
-
width: "".concat(width, "px"),
|
344
|
-
height: "".concat(height, "px")
|
345
|
-
});
|
346
|
-
setPlanScale((0, _panoramaHelpers.getScale)({
|
347
|
-
width: width,
|
348
|
-
height: height
|
349
|
-
}, json));
|
350
|
-
viewer.onWindowResize(_store.default.config.width, _store.default.config.height);
|
351
|
-
};
|
352
|
-
|
353
|
-
var onImageLoaded = function onImageLoaded() {
|
354
|
-
setScale();
|
355
|
-
setMapDisabledState(!json);
|
356
|
-
};
|
357
|
-
|
358
|
-
var getDotPosition = function getDotPosition(_ref5) {
|
359
|
-
var left = _ref5.left,
|
360
|
-
top = _ref5.top;
|
361
|
-
return {
|
362
|
-
left: "".concat(left * planScale.X, "px"),
|
363
|
-
top: "".concat(top * planScale.Y, "px")
|
364
|
-
};
|
365
|
-
};
|
366
|
-
|
367
|
-
var updateCameraFov = function updateCameraFov(fov) {
|
368
|
-
setCameraFov(fov);
|
369
|
-
viewer.camera.fov = fov;
|
370
|
-
viewer.camera.currentFov = fov;
|
371
|
-
viewer.camera.updateProjectionMatrix();
|
372
|
-
};
|
373
|
-
|
374
|
-
var toggleFov = function toggleFov() {
|
375
|
-
if (viewer.camera.fov === cameraFovValues.x1) {
|
376
|
-
updateCameraFov(cameraFovValues.x2);
|
377
|
-
return;
|
378
|
-
}
|
379
|
-
|
380
|
-
updateCameraFov(cameraFovValues.x1);
|
381
|
-
};
|
382
|
-
|
383
|
-
var getAngle = function getAngle(control) {
|
384
|
-
if (control.alpha) {
|
385
|
-
return control.alpha - THREE.MathUtils.degToRad(control.screenOrientation);
|
386
|
-
}
|
387
|
-
|
388
|
-
return control.getAzimuthalAngle();
|
389
|
-
};
|
390
|
-
|
391
|
-
var toggleAutoplay = function toggleAutoplay() {
|
392
|
-
setAutoplayState(!autoplayEnabled);
|
393
|
-
|
394
|
-
if (autoplayEnabled) {
|
395
|
-
viewer.disableAutoRate();
|
396
|
-
|
397
|
-
if (deviceOrientationStatus === _deviceOrientationStatuses.deviceOrientationStatuses.GRANTED) {
|
398
|
-
viewer.enableControl(DEVICEORIENTATION);
|
399
|
-
}
|
400
|
-
|
401
|
-
return;
|
402
|
-
}
|
403
|
-
|
404
|
-
if (viewer.getControlId() !== 'orbit') {
|
405
|
-
viewer.enableControl(ORBIT);
|
406
|
-
}
|
407
|
-
|
408
|
-
viewer.enableAutoRate();
|
409
|
-
};
|
410
|
-
|
411
|
-
(0, _react.useEffect)(function () {
|
412
|
-
if (!panoramas.length) return;
|
413
|
-
var container = document.querySelector('.widget-tab__panorama-overlay');
|
414
|
-
var newViewer = new PANOLENS.Viewer({
|
415
|
-
autoRotateActivationDuration: 1000,
|
416
|
-
cameraFov: cameraFovValues.x1,
|
417
|
-
autoHideInfospot: false,
|
418
|
-
controlButtons: [],
|
419
|
-
container: container
|
420
|
-
});
|
421
|
-
|
422
|
-
var preventCameraFovChange = function preventCameraFovChange(e) {
|
423
|
-
e.preventDefault();
|
424
|
-
e.stopPropagation();
|
425
|
-
newViewer.camera.fov = newViewer.camera.currentFov;
|
426
|
-
newViewer.camera.updateProjectionMatrix();
|
427
|
-
};
|
428
|
-
|
429
|
-
container.addEventListener('mousewheel', preventCameraFovChange);
|
430
|
-
container.addEventListener('touchmove', preventCameraFovChange);
|
431
|
-
panoramas.forEach(function (panorama) {
|
432
|
-
if (!panorama.panorama_id) return;
|
433
|
-
panorama.addEventListener('enter', function (_ref6) {
|
434
|
-
var target = _ref6.target;
|
435
|
-
return setCurrentRoomIndex(target['panorama_index']);
|
436
|
-
});
|
437
|
-
newViewer.add(panorama);
|
438
|
-
});
|
439
|
-
newViewer.scene.rotation.y = Math.PI / 2;
|
440
|
-
newViewer.camera.currentFov = cameraFovValues.x1;
|
441
|
-
setViewer(newViewer);
|
442
|
-
var camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 1, 1000);
|
443
|
-
var orientationControls = new _threeDeviceOrientation.default(camera);
|
444
|
-
|
445
|
-
var animate = function animate() {
|
446
|
-
window.requestAnimationFrame(animate);
|
447
|
-
orientationControls.update();
|
448
|
-
var fovElement = document.querySelector('.widget-tab__panorama-map__fov');
|
449
|
-
if (!fovElement) return;
|
450
|
-
var angle = -getAngle(newViewer.getControl());
|
451
|
-
fovElement.style.transform = "translate(-50%, -50%) rotate(".concat(angle, "rad)");
|
452
|
-
};
|
453
|
-
|
454
|
-
animate();
|
455
|
-
}, [panoramas]);
|
456
|
-
(0, _react.useEffect)(setScale, [json, viewer, _store.default.config.width, _store.default.config.height]);
|
457
|
-
(0, _react.useEffect)(function () {
|
458
|
-
return setPanoramas(getPanoramas(json, images, setLoadingState));
|
459
|
-
}, [json, images]);
|
460
|
-
|
461
|
-
var requestDeviceOrientation = function requestDeviceOrientation() {
|
462
|
-
return DeviceOrientationEvent.requestPermission().then(function (status) {
|
463
|
-
setDeviceOrientationStatus(status);
|
464
|
-
|
465
|
-
if (status !== _deviceOrientationStatuses.deviceOrientationStatuses.GRANTED) {
|
466
|
-
viewer.enableControl(ORBIT);
|
467
|
-
return;
|
468
|
-
}
|
469
|
-
|
470
|
-
viewer.enableControl(DEVICEORIENTATION);
|
471
|
-
});
|
472
|
-
};
|
473
|
-
|
474
|
-
var onStart = function onStart() {
|
475
|
-
setInstructionsState(false);
|
476
|
-
if (!_deviceStore.default.isMobile && !_deviceStore.default.isTablet) return;
|
477
|
-
|
478
|
-
var allowDeviceOrientation = function allowDeviceOrientation() {
|
479
|
-
window.removeEventListener('deviceorientation', allowDeviceOrientation);
|
480
|
-
setDeviceOrientationStatus(_deviceOrientationStatuses.deviceOrientationStatuses.GRANTED);
|
481
|
-
viewer.enableControl(DEVICEORIENTATION);
|
482
|
-
};
|
483
|
-
|
484
|
-
try {
|
485
|
-
if (!DeviceOrientationEvent.requestPermission) {
|
486
|
-
window.addEventListener('deviceorientation', allowDeviceOrientation);
|
487
|
-
return;
|
488
|
-
}
|
489
|
-
|
490
|
-
return requestDeviceOrientation();
|
491
|
-
} catch (error) {
|
492
|
-
console.error(error.message);
|
493
|
-
}
|
494
|
-
};
|
495
|
-
|
496
|
-
var getRoomPointsAsString = function getRoomPointsAsString(points) {
|
497
|
-
return points.map(function (_ref7) {
|
498
|
-
var _ref8 = _slicedToArray(_ref7, 2),
|
499
|
-
x = _ref8[0],
|
500
|
-
y = _ref8[1];
|
501
|
-
|
502
|
-
return [x * planScale.X, y * planScale.Y];
|
503
|
-
}).flat().filter(function (num) {
|
504
|
-
return !isNaN(num);
|
505
|
-
}).toString();
|
506
|
-
};
|
507
|
-
|
508
|
-
var openMap = function openMap() {
|
509
|
-
_store.default.hideControls();
|
510
|
-
|
511
|
-
setMapState(true);
|
512
|
-
};
|
513
|
-
|
514
|
-
var closeMap = function closeMap() {
|
515
|
-
_store.default.showControls();
|
516
|
-
|
517
|
-
setMapState(false);
|
518
|
-
};
|
519
|
-
|
520
|
-
var onMapClick = function onMapClick(event) {
|
521
|
-
if (loadingState) return;
|
522
|
-
|
523
|
-
if (_store.default.config.width <= _deviceWidth.deviceWidth.tablet) {
|
524
|
-
if (!mapOpen) {
|
525
|
-
openMap();
|
526
|
-
return;
|
527
|
-
}
|
528
|
-
}
|
529
|
-
|
530
|
-
var map = document.querySelector('.widget-tab__panorama-map');
|
531
|
-
var mapScale = map.getBoundingClientRect().width / map.offsetWidth;
|
532
|
-
var image = document.querySelector('.widget-tab__panorama-map img');
|
533
|
-
var offset = image.getBoundingClientRect();
|
534
|
-
var clientX = event.clientX,
|
535
|
-
clientY = event.clientY;
|
536
|
-
var x = (clientX - offset.left) / mapScale / planScale.X;
|
537
|
-
var y = (clientY - offset.top) / mapScale / planScale.Y;
|
538
|
-
var availablePanoramas = panoramas.filter(function (_ref9) {
|
539
|
-
var userData = _ref9.userData;
|
540
|
-
return (0, _geometric.pointInPolygon)([x, y], userData.points);
|
541
|
-
});
|
542
|
-
|
543
|
-
var _getClosestPanorama2 = (0, _panoramaHelpers.getClosestPanorama)([x, y], availablePanoramas),
|
544
|
-
panorama = _getClosestPanorama2.panorama;
|
545
|
-
|
546
|
-
closeMap();
|
547
|
-
if (!panorama) return;
|
548
|
-
changePanorama(panorama);
|
549
|
-
};
|
550
|
-
|
551
|
-
var getMapClass = function getMapClass() {
|
552
|
-
var className = 'widget-tab__panorama-map';
|
553
|
-
|
554
|
-
if (isMapDisabled) {
|
555
|
-
className += ' widget-tab__panorama-map--hidden';
|
556
|
-
}
|
557
|
-
|
558
|
-
if (mapOpen) {
|
559
|
-
className += ' widget-tab__panorama-map--scaled';
|
560
|
-
}
|
561
|
-
|
562
|
-
return className;
|
563
|
-
};
|
564
|
-
|
565
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
566
|
-
className: "widget-tab__panorama"
|
567
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
568
|
-
className: "widget-tab__panorama-overlay",
|
569
|
-
onContextMenu: _helpers.preventRightClick
|
570
|
-
}), loadingState && /*#__PURE__*/_react.default.createElement(_Loader.default, {
|
571
|
-
absolute: true
|
572
|
-
}), mapOpen && /*#__PURE__*/_react.default.createElement("div", {
|
573
|
-
className: "widget-tab__panorama-close-map",
|
574
|
-
onClick: closeMap
|
575
|
-
}, /*#__PURE__*/_react.default.createElement("img", {
|
576
|
-
src: _close.default,
|
577
|
-
alt: "close-map"
|
578
|
-
})), /*#__PURE__*/_react.default.createElement("div", {
|
579
|
-
className: getMapClass()
|
580
|
-
}, /*#__PURE__*/_react.default.createElement("img", {
|
581
|
-
src: planImage,
|
582
|
-
style: mapSize,
|
583
|
-
alt: "plan",
|
584
|
-
onLoad: onImageLoaded
|
585
|
-
}), !isMapDisabled && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
586
|
-
className: "widget-tab__panorama-map__fov",
|
587
|
-
style: getDotPosition(((_panoramas$currentRoo = panoramas[currentRoomIndex]) === null || _panoramas$currentRoo === void 0 ? void 0 : _panoramas$currentRoo.userData) || getDefaultUserData())
|
588
|
-
}), /*#__PURE__*/_react.default.createElement("svg", {
|
589
|
-
width: mapSize.width,
|
590
|
-
key: "X-".concat(planScale.X, "-Y-").concat(planScale.Y),
|
591
|
-
onClick: onMapClick
|
592
|
-
}, panoramas.map(function (_ref10, index) {
|
593
|
-
var userData = _ref10.userData;
|
594
|
-
return /*#__PURE__*/_react.default.createElement("polygon", {
|
595
|
-
key: index,
|
596
|
-
points: getRoomPointsAsString(userData.points)
|
597
|
-
});
|
598
|
-
})))), /*#__PURE__*/_react.default.createElement("div", {
|
599
|
-
className: "widget-tab__panorama-controls"
|
600
|
-
}, /*#__PURE__*/_react.default.createElement("button", {
|
601
|
-
className: "widget-tab__panorama-controls-button",
|
602
|
-
onClick: toggleFov
|
603
|
-
}, /*#__PURE__*/_react.default.createElement("img", {
|
604
|
-
src: cameraFov === cameraFovValues.x1 ? _x.default : _x2.default,
|
605
|
-
alt: "scale-icon"
|
606
|
-
})), /*#__PURE__*/_react.default.createElement("button", {
|
607
|
-
className: "widget-tab__panorama-controls-button",
|
608
|
-
onClick: toggleAutoplay
|
609
|
-
}, /*#__PURE__*/_react.default.createElement("img", {
|
610
|
-
src: autoplayEnabled ? _rotationClose.default : _rotation.default,
|
611
|
-
alt: "rotation-icon"
|
612
|
-
})))), showInstructions && /*#__PURE__*/_react.default.createElement(_Instructions.default, {
|
613
|
-
disabled: disabled,
|
614
|
-
steps: instructionSteps,
|
615
|
-
onClick: onStart
|
616
|
-
}));
|
617
|
-
};
|
618
|
-
|
619
|
-
var _default = PanoramaTab;
|
620
|
-
exports.default = _default;
|
1
|
+
"use strict";function _typeof(A){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(A){return typeof A}:function(A){return A&&"function"==typeof Symbol&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A})(A)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _react=_interopRequireWildcard(require("react")),_deviceStore=_interopRequireDefault(require("../store/deviceStore")),_locale=_interopRequireDefault(require("../locale")),_store=_interopRequireDefault(require("../store")),THREE=_interopRequireWildcard(require("three")),PANOLENS=_interopRequireWildcard(require("panolens")),_threeDeviceOrientation=_interopRequireDefault(require("three-device-orientation")),_geometric=require("geometric"),_deviceOrientationStatuses=require("../enums/deviceOrientationStatuses"),_deviceWidth=require("../enums/deviceWidth"),_imageExtentions=require("../enums/imageExtentions"),_helpers=require("../utils/helpers"),_panoramaHelpers=require("../utils/panoramaHelpers"),_Loader=_interopRequireDefault(require("./Loader")),_Instructions=_interopRequireDefault(require("./Instructions"));function _interopRequireDefault(A){return A&&A.__esModule?A:{default:A}}function _getRequireWildcardCache(A){if("function"!=typeof WeakMap)return null;var M=new WeakMap,g=new WeakMap;return(_getRequireWildcardCache=function(A){return A?g:M})(A)}function _interopRequireWildcard(A,M){if(!M&&A&&A.__esModule)return A;if(null===A||"object"!==_typeof(A)&&"function"!=typeof A)return{default:A};M=_getRequireWildcardCache(M);if(M&&M.has(A))return M.get(A);var g,D,I={},N=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(g in A)"default"!==g&&Object.prototype.hasOwnProperty.call(A,g)&&((D=N?Object.getOwnPropertyDescriptor(A,g):null)&&(D.get||D.set)?Object.defineProperty(I,g,D):I[g]=A[g]);return I.default=A,M&&M.set(A,I),I}function _slicedToArray(A,M){return _arrayWithHoles(A)||_iterableToArrayLimit(A,M)||_unsupportedIterableToArray(A,M)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(A,M){if(A){if("string"==typeof A)return _arrayLikeToArray(A,M);var g=Object.prototype.toString.call(A).slice(8,-1);return"Map"===(g="Object"===g&&A.constructor?A.constructor.name:g)||"Set"===g?Array.from(A):"Arguments"===g||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(g)?_arrayLikeToArray(A,M):void 0}}function _arrayLikeToArray(A,M){(null==M||M>A.length)&&(M=A.length);for(var g=0,D=new Array(M);g<M;g++)D[g]=A[g];return D}function _iterableToArrayLimit(A,M){var g=null==A?null:"undefined"!=typeof Symbol&&A[Symbol.iterator]||A["@@iterator"];if(null!=g){var D,I,N=[],Q=!0,e=!1;try{for(g=g.call(A);!(Q=(D=g.next()).done)&&(N.push(D.value),!M||N.length!==M);Q=!0);}catch(A){e=!0,I=A}finally{try{Q||null==g.return||g.return()}finally{if(e)throw I}}return N}}function _arrayWithHoles(A){if(Array.isArray(A))return A}var spotIcon="data:image/png;base64,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",doorIcon="data:image/png;base64,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AAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAAAAIIAAAAABBAAAAAAIAAAgAAAAAEEAAAAAAggAAAAAAAAQQAAAAACCAAAAAAQAABAAAA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AAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAAAQQAAAAACCAAAAAAAABBAAAAAAIIAAAAABAAAEAAAAAAggAAAAAEEAAAAAAgAACAAAAQMH8CQAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAAAAIIAAAAAAAAEEAAAAAAggAAAAAEAAAQAAAAACCAAAAAAQQAAAAACAAAIAAAAABBAAAACAfflLAQcjAAAAAPvypICDEQAAAICdu7i4eFrAQQkAAADAPiwLOCgBAAAA2IcXBRyUAAAAAOzDswIOSgAAAAB26uLi4qRsAYCDEwAAAIBde1XAwQkAAADAzrSn/334XxZwcAIAAACwE234X7aP0wImQQAAAAC2bhj+fy9gMgQAAABgq0bD/7KAyRAAAACArWnD/4v28c8y/MPkfFUAAABfaHjq/2tbqwImyRsAAADAo7Sh/0lbq7b66/7vy/APk+YNAACAMH1oq/Wg1j+XBQ/3f209rfWfP08KOAoCAABAgGHoP2nr2/KUFiCSAAAAMHNt+H/VPl6WJ7UA0QQAAICZGg5l+3utX9UGIJwAAAAwQ23470N/P5jNU38APnILAADAzBj+AbiOAAAAMCOj1/4N/wB8QgAAAJiX/uR/WQCwQQAAAJiJ9vT/pAz/ANxAAAAAmI9XBQA3EAAAAGagPf1/UZ7+A3ALAQAAYB5eFADcQgAAAJiHbwsAbiEAwHZ8KAA4kOHqP9f+AXArAQC2410BwOEsCwDuIADAdggAABySp/8A3EkAgC1YLBZ9C8BZAQAATJQAANvzSwHAYTiLBoA7CQCwJYvF4m37OC8A2L/zAm5juyaUAADb9n0BwJ61CH1e3gKA2/y7AAEAtqn9AHbWPn4rANi/fxRwk7cFCACwAy/Lq5gA7N+bAm5yVoAAANs23AjwvEQAAPZoeAvNNgD43JthmwzEEwBgB4YvmR4BzgoA9ufHAja9LuAjAQB2pEeAtnoE8KUDwF607503JT7D2GtP/+GKAAA71r50TtvH17U+HPC8AGC3+o00tgJA1bvh5zBgIADAHgxvA5y01UPA39r6pa1/FQBs2WgbmghAsvNa/8wFjHxVwF61H8z6NTQfr6K5uLh40j6etrUa1jdtPSkA+ALtu+Zd+47pEeD38r1CnvO2nnv1Hz4nAMABDTcGnNVov2b7gW1VV1HgWfnBDYBHGCLAX2sdAZYFGfqWy5fDz1jAhkUBk9Z+eOsx4DII9M9vCoDHep24J7h9l5y2j+9KCGC+ztv6frgOE7iBAABHpv0Qt6xPg8CzAuC+IgNAN3x/rNo6Kd8dzEN/yt/PVDo1+MP9CABw5JwjAPAgsQFgbPTd0ZfvDI7NeVvv+qdX/eFhBACYoWHbwKqugsCyAOgEAABiOQQQZqgf/FTrMv5z/+PRa599OUcAAAACCQAQYLgG582wLl/9XJVzBAAAIIYAAIGG/XJvh/XR6PrBF+UcAQAAmB0BAPhoOD23r8ttA5eHQ10GgWUBAABHSwAArjU6R+BN/+ON6wf7co4AAAAcEQEAuJfhHIG+Pm4buOb6QecIAADAhAkAwKMM5wicDeuj0TkC/bMHAecIAADARAgAwNbcco7Aqlw/CAAAByUAADtzxzkCrh8EAIA9EgCAvbnHOQKuHwQAgB0RAICDucc5Aq4fBACALREAgElxjgAAAOyGAABM2jXnCPQtAqtyjgAAADyIAAAclWHbwNthfTTaNvCinCMAAADXEgCAo3fDtoFVOUcAAAD+JAAAszPaNnAZBJZ19YaAcwQAAIgkAACzd8v1g5dBwDkCAADMngAAxLnH9YM9CDhHAACAWREAAOrO6wd7EFgWAAAcMQEA4BrXXD+4rKsg0JdzBAAAOCoCAMA93HKOwKqugoBtAwAATJYAAPAI9zhHwPWDAABMigAAsCV3nCPg+kEAAA5KAADYkWvOEehbBFZ1FQRcPwgAwN4IAAB7MmwbeFvOEQAA4AAEAIADueEcgc0gsCwAANgCAQBgQkbbBi7PEVjW+i2BF+UcAQAAvoAAADBhN1w/uCrnCAAA8EACAMAR2TxHoBtdP9jfEnCOAAAA1xIAAI7cLdcPXgaBZQEAEE8AAJiZa64fXNbntw0AABBGAACYuRvOERgHAecIAAAEEAAAwtxw/eCqrqJADwLOEQAAmBkBAIDbzhFYlesHAQBmQQAA4DN3nCPg+kEAgCMkAABwp3ucI+D6QQCAiRMAAHiwG84R2AwCywIAYDIEAAC2YrRt4PIcgWVdBQHnCAAAHJgAAMBODNsG3tTVOQJ9i8CqnCMAAHAQAgAAezFsG3g7rI9G1w++KOcIAADslAAAwMHccv3gZRBYFgAAWyEAADAZd1w/2JdzBAAAHkkAAGCybrl+8EU5RwAA4EEEAACOxg3XD67q6i2BHgScIwAAcA0BAICjdss5Aqty/SAAwJ8EAABmxTkCAADXEwAAmLVbzhFY1VUQsG0AAJg9AQCAKPc4R8D1gwDALAkAAMRzjgAAkEAAAIAN15wj0LcIrOoqCLh+EAA4OgIAANxh2DbwdlgfDdsGLpdzBACAyRMAAOARRtsGPhq2DazKOQIAwEQJAACwBaNtA5fnCCxrvV3gRTlHAACYAAEAAHbglusHL4OAcwQAgL0SAABgD+5x/WAPAs4RAAB2RgAAgAO54/rBHgSWBQCwJQIAAEzENdcPLusqCPTlHAEA4NEEAACYqFvOEViV6wcf60MBQKhFAQBHa+McAdcP3u1vLay8LQAIJAAAwIxsnCPg+sHP/XXYagEAcQQAAJixjXME0q8fPG/D/9cFAKEEAAAIEn6OwJsWAL4vAAglAABAuGHbwKrmf47A8+HqRQCIJAAAAJ8YbRt4UfM5R+CPNvyvCgCCCQAAwK2GbQOrOu5zBL4erlUEgFgCAADwYKPrB/tbAlM/R+B1G/5PCwDCCQAAwBcbXT94GQSWNQ3v2vD/1wIABAAAYPs2rh/s6xDnCLyr9cF/HwoAEAAAgN275vrBXZ8j8FtbLw3/AAAAcGD9HIG2Xrb1tq3/XGxH/31eFgAAADBN/RyBtk7aetPWu4uH6YP/6fCmAQBwDVsAAIBJ2jhHoH/2P/6/4V/+d1vntd7n/3axWJwVAAAAAAAAAAAAAAAAAAAAAAAAAAAATMH/A9LZxHhsGzQfAAAAAElFTkSuQmCC",HandMoveIcon="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTIiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCA1MiA4MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzg1NF84MjcyKSI+CjxwYXRoIGQ9Ik0zOC44OTIgNy43NDQ2M0w0NS41Nzk5IDE0LjQzMjVMMzguODkyIDIxLjEyMDQiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1MjcxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTI5Ljk3NDggMTQuNDMyNUw0NS41Nzk5IDE0LjQzMjUiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1MjcxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTguNjgxNjQgMjEuMTIwNEwxLjk5MzczIDE0LjQzMjVMOC42ODE2NCA3Ljc0NDYzIiBzdHJva2U9IiM0MTNFM0UiIHN0cm9rZS13aWR0aD0iMy4xNTI3MSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNy41OTg5IDE0LjQzMjVMMS45OTM4MyAxNC40MzI1IiBzdHJva2U9IiM0MTNFM0UiIHN0cm9rZS13aWR0aD0iMy4xNTI3MSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0yOC42MDMzIDQzLjE5NzhWMjQuNzc0MkMyOC42MDMzIDIzLjMzNzEgMjguMDMyNCAyMS45NTg4IDI3LjAxNjIgMjAuOTQyNkMyNiAxOS45MjY0IDI0LjYyMTcgMTkuMzU1NSAyMy4xODQ1IDE5LjM1NTVDMjEuNzQ3NCAxOS4zNTU1IDIwLjM2OTEgMTkuOTI2NCAxOS4zNTI5IDIwLjk0MjZDMTguMzM2NyAyMS45NTg4IDE3Ljc2NTggMjMuMzM3MSAxNy43NjU4IDI0Ljc3NDJWNTcuNjI5NUwxMS44MjQ5IDQ3LjMzOTVDMTEuNDY5NCA0Ni43MjI2IDEwLjk5NTggNDYuMTgxOCAxMC40MzEzIDQ1Ljc0OEM5Ljg2NjY4IDQ1LjMxNDMgOS4yMjIxNiA0NC45OTYgOC41MzQ1MSA0NC44MTE0QzcuODQ2ODcgNDQuNjI2OSA3LjEyOTYgNDQuNTc5NiA2LjQyMzcgNDQuNjcyNEM1LjcxNzc5IDQ0Ljc2NTIgNS4wMzcwOSA0NC45OTYyIDQuNDIwNSA0NS4zNTIyQzMuODAzOTEgNDUuNzA4MiAzLjI2MzUyIDQ2LjE4MjIgMi44MzAyMSA0Ni43NDcxQzIuMzk2OSA0Ny4zMTIxIDIuMDc5MTggNDcuOTU2OSAxLjg5NTE5IDQ4LjY0NDdDMS43MTEyMSA0OS4zMzI1IDEuNjY0NTcgNTAuMDQ5OCAxLjc1Nzk0IDUwLjc1NTZDMS44NTEzMiA1MS40NjE0IDIuMDgyODcgNTIuMTQxOSAyLjQzOTM4IDUyLjc1ODJDMTEuMjYzNCA3MS4zNzUyIDE2LjYzMjYgNzcuODc3NiAyOC42MDMzIDc3Ljg3NzZDMzEuNDQ5NyA3Ny44Nzc2IDM0LjI2ODIgNzcuMzE3IDM2Ljg5NzkgNzYuMjI3N0MzOS41Mjc2IDc1LjEzODUgNDEuOTE3IDczLjU0MTkgNDMuOTI5NyA3MS41MjkyQzQ1Ljk0MjQgNjkuNTE2NSA0Ny41MzkgNjcuMTI3MSA0OC42MjgyIDY0LjQ5NzRDNDkuNzE3NSA2MS44Njc3IDUwLjI3ODEgNTkuMDQ5MSA1MC4yNzgxIDU2LjIwMjhWNDUuMzY1M0M1MC4yNzgxIDQzLjkyODIgNDkuNzA3MiA0Mi41NDk5IDQ4LjY5MSA0MS41MzM3QzQ3LjY3NDggNDAuNTE3NSA0Ni4yOTY2IDM5Ljk0NjYgNDQuODU5NCAzOS45NDY2QzQzLjQyMjMgMzkuOTQ2NiA0Mi4wNDQgNDAuNTE3NSA0MS4wMjc4IDQxLjUzMzdDNDAuMDExNiA0Mi41NDk5IDM5LjQ0MDcgNDMuOTI4MiAzOS40NDA3IDQ1LjM2NTMiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1MjcxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTM5LjQ0MDcgNDUuMzY1M1Y0Mi4xMTQxQzM5LjQ0MDcgNDAuNjc3IDM4Ljg2OTggMzkuMjk4NyAzNy44NTM2IDM4LjI4MjVDMzYuODM3NCAzNy4yNjYzIDM1LjQ1OTEgMzYuNjk1NCAzNC4wMjIgMzYuNjk1NEMzMi41ODQ5IDM2LjY5NTQgMzEuMjA2NiAzNy4yNjYzIDMwLjE5MDQgMzguMjgyNUMyOS4xNzQyIDM5LjI5ODcgMjguNjAzMyA0MC42NzcgMjguNjAzMyA0Mi4xMTQxVjQzLjE5NzgiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1MjcxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF84NTRfODI3MiI+CjxyZWN0IHdpZHRoPSI1MiIgaGVpZ2h0PSI4MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K",HandResearchIcon="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTIiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCA1MiA4MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzg1NF84MjMzKSI+CjxwYXRoIGQ9Ik0zMS4xMjk4IDIzLjIwODNDMzAuNTE0MiAyMy44MjM5IDMwLjUxNDIgMjQuODIyIDMxLjEyOTggMjUuNDM3NkMzMS43NDU0IDI2LjA1MzMgMzIuNzQzNSAyNi4wNTMzIDMzLjM1OTEgMjUuNDM3NkwzMS4xMjk4IDIzLjIwODNaTTM1LjA5MjUgMTAuMDA1M0wzNi41NDg4IDkuNDAyMDJWOS40MDIwMkwzNS4wOTI1IDEwLjAwNTNaTTMwLjI1MzYgNC4xMDkwOEwyOS4zNzc4IDUuNDE5NzdMMzAuMjUzNiA0LjEwOTA4Wk0xNS42NTU0IDQuMTA5MDhMMTQuNzc5NiAyLjc5ODM5VjIuNzk4MzlMMTUuNjU1NCA0LjEwOTA4Wk0xMC44MTY1IDEwLjAwNTNMOS4zNjAxMyA5LjQwMjAySDkuMzYwMTNMMTAuODE2NSAxMC4wMDUzWk0xMi41NDk4IDI1LjQzNzZDMTMuMTY1NCAyNi4wNTMyIDE0LjE2MzUgMjYuMDUzMiAxNC43NzkxIDI1LjQzNzZDMTUuMzk0NyAyNC44MjIgMTUuMzk0NyAyMy44MjM5IDE0Ljc3OTEgMjMuMjA4M0wxMi41NDk4IDI1LjQzNzZaTTMzLjM1OTEgMjUuNDM3NkMzNS40MTcgMjMuMzc5OCAzNi44MTg0IDIwLjc1NzkgMzcuMzg2MiAxNy45MDM2TDM0LjI5NCAxNy4yODg2QzMzLjg0NzkgMTkuNTMxMyAzMi43NDY4IDIxLjU5MTQgMzEuMTI5OCAyMy4yMDgzTDMzLjM1OTEgMjUuNDM3NlpNMzcuMzg2MiAxNy45MDM2QzM3Ljk1MzkgMTUuMDQ5MyAzNy42NjI1IDEyLjA5MDcgMzYuNTQ4OCA5LjQwMjAyTDMzLjYzNjEgMTAuNjA4NUMzNC41MTEyIDEyLjcyMTEgMzQuNzQwMSAxNS4wNDU4IDM0LjI5NCAxNy4yODg2TDM3LjM4NjIgMTcuOTAzNlpNMzYuNTQ4OCA5LjQwMjAyQzM1LjQzNTEgNi43MTMzMSAzMy41NDkxIDQuNDE1MjMgMzEuMTI5NCAyLjc5ODM5TDI5LjM3NzggNS40MTk3N0MzMS4yNzkxIDYuNjkwMTkgMzIuNzYxIDguNDk1ODggMzMuNjM2MSAxMC42MDg1TDM2LjU0ODggOS40MDIwMlpNMzEuMTI5NCAyLjc5ODM5QzI4LjcwOTYgMS4xODE1NSAyNS44NjQ3IDAuMzE4NTY1IDIyLjk1NDUgMC4zMTg1NjVWMy40NzEyN0MyNS4yNDEyIDMuNDcxMjcgMjcuNDc2NSA0LjE0OTM2IDI5LjM3NzggNS40MTk3N0wzMS4xMjk0IDIuNzk4MzlaTTIyLjk1NDUgMC4zMTg1NjVDMjAuMDQ0MiAwLjMxODU2NSAxNy4xOTk0IDEuMTgxNTUgMTQuNzc5NiAyLjc5ODM5TDE2LjUzMTEgNS40MTk3N0MxOC40MzI0IDQuMTQ5MzYgMjAuNjY3OCAzLjQ3MTI3IDIyLjk1NDUgMy40NzEyN1YwLjMxODU2NVpNMTQuNzc5NiAyLjc5ODM5QzEyLjM1OTggNC40MTUyMyAxMC40NzM4IDYuNzEzMzEgOS4zNjAxMyA5LjQwMjAyTDEyLjI3MjggMTAuNjA4NUMxMy4xNDc5IDguNDk1ODggMTQuNjI5OCA2LjY5MDE5IDE2LjUzMTEgNS40MTk3N0wxNC43Nzk2IDIuNzk4MzlaTTkuMzYwMTMgOS40MDIwMkM4LjI0NjQzIDEyLjA5MDcgNy45NTUwMyAxNS4wNDkzIDguNTIyNzkgMTcuOTAzNkwxMS42MTQ5IDE3LjI4ODZDMTEuMTY4OCAxNS4wNDU4IDExLjM5NzggMTIuNzIxMSAxMi4yNzI4IDEwLjYwODVMOS4zNjAxMyA5LjQwMjAyWk04LjUyMjc5IDE3LjkwMzZDOS4wOTA1NSAyMC43NTc5IDEwLjQ5MiAyMy4zNzk4IDEyLjU0OTggMjUuNDM3NkwxNC43NzkxIDIzLjIwODNDMTMuMTYyMiAyMS41OTE0IDEyLjA2MSAxOS41MzEzIDExLjYxNDkgMTcuMjg4Nkw4LjUyMjc5IDE3LjkwMzZaIiBmaWxsPSIjNDEzRTNFIi8+CjxwYXRoIGQ9Ik0yOC41OTM0IDQzLjE5NzNWMjQuNzczNkMyOC41OTM0IDIzLjMzNjUgMjguMDIyNSAyMS45NTgyIDI3LjAwNjMgMjAuOTQyQzI1Ljk5MDEgMTkuOTI1OCAyNC42MTE4IDE5LjM1NDkgMjMuMTc0NyAxOS4zNTQ5QzIxLjczNzYgMTkuMzU0OSAyMC4zNTkzIDE5LjkyNTggMTkuMzQzMSAyMC45NDJDMTguMzI2OSAyMS45NTgyIDE3Ljc1NiAyMy4zMzY1IDE3Ljc1NiAyNC43NzM2VjU3LjYyOUwxMS44MTUgNDcuMzM4OUMxMS40NTk2IDQ2LjcyMiAxMC45ODYgNDYuMTgxMyAxMC40MjE0IDQ1Ljc0NzVDOS44NTY4NCA0NS4zMTM3IDkuMjEyMzEgNDQuOTk1NCA4LjUyNDY3IDQ0LjgxMDlDNy44MzcwMyA0NC42MjYzIDcuMTE5NzYgNDQuNTc5MSA2LjQxMzg1IDQ0LjY3MTlDNS43MDc5NSA0NC43NjQ2IDUuMDI3MjQgNDQuOTk1NiA0LjQxMDY1IDQ1LjM1MTZDMy43OTQwNiA0NS43MDc2IDMuMjUzNjcgNDYuMTgxNiAyLjgyMDM2IDQ2Ljc0NjZDMi4zODcwNiA0Ny4zMTE1IDIuMDY5MzMgNDcuOTU2MyAxLjg4NTM1IDQ4LjY0NDFDMS43MDEzNiA0OS4zMzE5IDEuNjU0NzIgNTAuMDQ5MiAxLjc0ODEgNTAuNzU1QzEuODQxNDcgNTEuNDYwOCAyLjA3MzAzIDUyLjE0MTQgMi40Mjk1MyA1Mi43NTc2QzExLjI1MzUgNzEuMzc0NiAxNi42MjI3IDc3Ljg3NzEgMjguNTkzNCA3Ny44NzcxQzMxLjQzOTggNzcuODc3MSAzNC4yNTgzIDc3LjMxNjQgMzYuODg4IDc2LjIyNzJDMzkuNTE3OCA3NS4xMzc5IDQxLjkwNzIgNzMuNTQxMyA0My45MTk5IDcxLjUyODZDNDUuOTMyNiA2OS41MTU5IDQ3LjUyOTEgNjcuMTI2NSA0OC42MTg0IDY0LjQ5NjhDNDkuNzA3NyA2MS44NjcxIDUwLjI2ODMgNTkuMDQ4NiA1MC4yNjgzIDU2LjIwMjJWNDUuMzY0OEM1MC4yNjgzIDQzLjkyNzYgNDkuNjk3NCA0Mi41NDkzIDQ4LjY4MTIgNDEuNTMzMUM0Ny42NjUgNDAuNTE2OSA0Ni4yODY3IDM5Ljk0NiA0NC44NDk2IDM5Ljk0NkM0My40MTI0IDM5Ljk0NiA0Mi4wMzQyIDQwLjUxNjkgNDEuMDE4IDQxLjUzMzFDNDAuMDAxOCA0Mi41NDkzIDM5LjQzMDkgNDMuOTI3NiAzOS40MzA5IDQ1LjM2NDgiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1MjcxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTM5LjQzMDggNDUuMzY0N1Y0Mi4xMTM1QzM5LjQzMDggNDAuNjc2NCAzOC44NTk5IDM5LjI5ODEgMzcuODQzNyAzOC4yODE5QzM2LjgyNzUgMzcuMjY1NyAzNS40NDkyIDM2LjY5NDggMzQuMDEyMSAzNi42OTQ4QzMyLjU3NSAzNi42OTQ4IDMxLjE5NjcgMzcuMjY1NyAzMC4xODA1IDM4LjI4MTlDMjkuMTY0MyAzOS4yOTgxIDI4LjU5MzQgNDAuNjc2NCAyOC41OTM0IDQyLjExMzVWNDMuMTk3MyIgc3Ryb2tlPSIjNDEzRTNFIiBzdHJva2Utd2lkdGg9IjMuMTUyNzEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzg1NF84MjMzIj4KPHJlY3Qgd2lkdGg9IjUyIiBoZWlnaHQ9IjgwIiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtMC4wMDAzMzA0NDgpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",RotationCloseIcon="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzgiIGhlaWdodD0iMzgiIHZpZXdCb3g9IjAgMCAzOCAzOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIyLjc2IDI2LjQxNDNDMjUuNDIxIDI2LjA2NjYgMjcuOTA3NCAyNS4zMjI1IDI5Ljk2ODUgMjQuMjM4M0MzMi45MDcxIDIyLjY5MjYgMzQuNzc1MyAyMC41NjM5IDM1LjIxNjMgMTguMjU4OEMzNS42NTczIDE1Ljk1MzcgMzQuNjQwMSAxMy42MzM4IDMyLjM1OTEgMTEuNzQyMkMzMC4wNzgxIDkuODUwNTEgMjYuNjkzMSA4LjUxOTY4IDIyLjg1MDUgOC4wMDM4NUMxOS4wMDggNy40ODgwMiAxNC45NzczIDcuODIzMzQgMTEuNTI4MiA4Ljk0NTc3QzguMDc5MTEgMTAuMDY4MiA1LjQ1MzM5IDExLjg5OTEgNC4xNTI1MiAxNC4wODg3QzMuODE4MTEgMTQuNjUxNiAzLjU3NzI4IDE1LjIyOCAzLjQyOTY1IDE1LjgxMDMiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1MjcxIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI1LjI1MzYgMTkuNDMzM0wxOS45Njg3IDI2LjA4MzlMMjYuMDg3MyAzMC45NDYzIiBzdHJva2U9IiM0MTNFM0UiIHN0cm9rZS13aWR0aD0iMy4xNTI3MSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNC40Nzg1IDIwLjk2OTdMNS40MTAyMyAzMC4wMzgiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTE0LjQ3ODUgMzAuMDM4TDUuNDEwMjMgMjAuOTY5NyIgc3Ryb2tlPSIjNDEzRTNFIiBzdHJva2Utd2lkdGg9IjMuMTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K",RotationIcon="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzgiIGhlaWdodD0iMzgiIHZpZXdCb3g9IjAgMCAzOCAzOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI5Ljk2ODUgMjQuMjM4M0wyOS4yMzQ2IDIyLjg0MzJMMjkuOTY4NSAyNC4yMzgzWk0xMS45MDQ1IDI3LjIyMjFDMTIuNzQyMiAyNy40NTkzIDEzLjYxMzUgMjYuOTcyNiAxMy44NTA4IDI2LjEzNDlDMTQuMDg4IDI1LjI5NzMgMTMuNjAxMyAyNC40MjU5IDEyLjc2MzYgMjQuMTg4N0wxMS45MDQ1IDI3LjIyMjFaTTIyLjU1NTcgMjQuODUxM0MyMS42OTI1IDI0Ljk2NDEgMjEuMDg0MSAyNS43NTUzIDIxLjE5NjkgMjYuNjE4NkMyMS4zMDk3IDI3LjQ4MTggMjIuMTAxIDI4LjA5MDIgMjIuOTY0MiAyNy45Nzc0TDIyLjU1NTcgMjQuODUxM1pNMzAuNzAyMyAyNS42MzM1QzMzLjg4MDcgMjMuOTYxNiAzNi4yMDA0IDIxLjUwMzkgMzYuNzY0NiAxOC41NTVMMzMuNjY4IDE3Ljk2MjZDMzMuMzUwMiAxOS42MjM5IDMxLjkzMzUgMjEuNDIzNiAyOS4yMzQ2IDIyLjg0MzJMMzAuNzAyMyAyNS42MzM1Wk0zNi43NjQ2IDE4LjU1NUMzNy4zNDMxIDE1LjUzMSAzNS45NTI2IDEyLjY3NDQgMzMuMzY1NCAxMC41Mjg4TDMxLjM1MjkgMTIuOTU1NkMzMy4zMjc3IDE0LjU5MzMgMzMuOTcxNSAxNi4zNzY1IDMzLjY2OCAxNy45NjI2TDM2Ljc2NDYgMTguNTU1Wk0zMy4zNjU0IDEwLjUyODhDMzAuNzk2NyA4LjM5ODU2IDI3LjEwNzIgNi45ODQ4MSAyMy4wNjAzIDYuNDQxNTRMMjIuNjQwOCA5LjU2NjIyQzI2LjI3ODkgMTAuMDU0NiAyOS4zNTk1IDExLjMwMjUgMzEuMzUyOSAxMi45NTU2TDMzLjM2NTQgMTAuNTI4OFpNMjMuMDYwMyA2LjQ0MTU0QzE4Ljk5OTkgNS44OTY0NyAxNC43Mjk2IDYuMjQ2MjYgMTEuMDQwNCA3LjQ0NjgzTDEyLjAxNiAxMC40NDQ4QzE1LjIyNSA5LjQwMDQ5IDE5LjAxNjEgOS4wNzk2MyAyMi42NDA4IDkuNTY2MjJMMjMuMDYwMyA2LjQ0MTU0Wk0xMS4wNDA0IDcuNDQ2ODNDNy4zODAxOCA4LjYzNzk2IDQuMzYyMzQgMTAuNjQ5MyAyLjc5NzI5IDEzLjI4MzZMNS41MDc3NSAxNC44OTM5QzYuNTQ0NDQgMTMuMTQ4OSA4Ljc3ODA0IDExLjQ5ODUgMTIuMDE2IDEwLjQ0NDhMMTEuMDQwNCA3LjQ0NjgzWk0yLjc5NzI5IDEzLjI4MzZDMS4xNjczMSAxNi4wMjcyIDEuMzMzNzQgMTkuMDkyMiAzLjE4NzIxIDIxLjcyMzlMNS43NjQ4IDE5LjkwODVDNC41OTk4OSAxOC4yNTQ1IDQuNTM2MDEgMTYuNTI5NSA1LjUwNzc1IDE0Ljg5MzlMMi43OTcyOSAxMy4yODM2Wk0zLjE4NzIxIDIxLjcyMzlDNC45NzUwMSAyNC4yNjIzIDguMTQ0OTEgMjYuMTU3MyAxMS45MDQ1IDI3LjIyMjFMMTIuNzYzNiAyNC4xODg3QzkuNDIwMzcgMjMuMjQxOCA2Ljk5NTM3IDIxLjY1NTcgNS43NjQ4IDE5LjkwODVMMy4xODcyMSAyMS43MjM5Wk0yMi45NjQyIDI3Ljk3NzRDMjUuNzc4MyAyNy42MDk3IDI4LjQ0OTcgMjYuODE4NCAzMC43MDIzIDI1LjYzMzVMMjkuMjM0NiAyMi44NDMyQzI3LjM2NTEgMjMuODI2NiAyNS4wNjM3IDI0LjUyMzUgMjIuNTU1NyAyNC44NTEzTDIyLjk2NDIgMjcuOTc3NFoiIGZpbGw9IiM0MTNFM0UiLz4KPHBhdGggZD0iTTI1LjI1MzYgMTkuNDMzM0wxOS45Njg3IDI2LjA4MzlMMjYuMDg3MyAzMC45NDYzIiBzdHJva2U9IiM0MTNFM0UiIHN0cm9rZS13aWR0aD0iMy4xNTI3MSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",ScaleIcon1x="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTkuMTYzMiAyNC45MDY3VjUuOTA2NjhIOC45NjI1N0wwLjQ4Mjg1NyA4Ljg5NVYxMi4wNTNMNS40MDQ4NCAxMC4zMzA0VjI0LjkwNjdIOS4xNjMyWiIgZmlsbD0iIzQxM0UzRSIvPgo8cGF0aCBkPSJNMjMuMTI2NiAxNS4xOTc5TDE5Ljk5NjkgMTAuNzg3MkgxNS45OTc4TDIwLjgzOTUgMTcuNzE2NEwxNS44MTA1IDI0LjkwNjdIMTkuODM2NEwyMy4xNCAyMC4yODcyTDI2LjQ3MDQgMjQuOTA2N0gzMC40ODI5TDI1LjQ1MzkgMTcuNzE2NEwzMC4zMDkgMTAuNzg3MkgyNi4zMDk5TDIzLjEyNjYgMTUuMTk3OVoiIGZpbGw9IiM0MTNFM0UiLz4KPC9zdmc+Cg==",ScaleIcon2x="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjcwNzYgMjQuOTA2N1YyMS45OTc5SDUuMTYyMTRMOC44MjY0MSAxOC4yMTUxQzkuNDU5NDEgMTcuNTgwMyAxMC4wMzQ1IDE2Ljk3NTkgMTAuNTUxNiAxNi40MDJDMTEuMDY4NyAxNS44MTkzIDExLjUxNDQgMTUuMjQ5NyAxMS44ODg5IDE0LjY5MzJDMTIuMjU0NCAxNC4xMzY3IDEyLjUzNTMgMTMuNTc1OCAxMi43MzE0IDEzLjAxMDVDMTIuOTM2NSAxMi40MzY2IDEzLjAzOSAxMS44MzY2IDEzLjAzOSAxMS4yMTA0QzEzLjAzOSAxMC4zODQzIDEyLjkwNTIgOS42MzIxMiAxMi42Mzc4IDguOTUzODNDMTIuMzcwMyA4LjI2Njg0IDExLjk4MjUgNy42Nzk4NiAxMS40NzQzIDcuMTkyODhDMTAuOTU3MiA2LjcwNTkxIDEwLjMxNTMgNi4zMjc2MyA5LjU0ODU2IDYuMDU4MDVDOC43OTA3NSA1Ljc4ODQ3IDcuOTE3MDMgNS42NTM2OSA2LjkyNzQxIDUuNjUzNjlDNS44OTMyMSA1LjY1MzY5IDQuOTQ4MTcgNS44MTg5MSA0LjA5MjI4IDYuMTQ5MzZDMy4yNDUzMSA2LjQ3MTExIDIuNTIzMTYgNi45MTQ2MSAxLjkyNTgyIDcuNDc5ODVDMS4zMTk1NiA4LjA0NTA5IDAuODUxNSA4LjcwNTk5IDAuNTIxNjI3IDkuNDYyNTVDMC4xOTE3NTQgMTAuMjEwNCAwLjAyNjgxNzMgMTEuMDA2MSAwLjAyNjgxNzMgMTEuODQ5NkgzLjc1Nzk1QzMuNzU3OTUgMTEuMzM2NSAzLjgyNDgyIDEwLjg4IDMuOTU4NTUgMTAuNDhDNC4wOTIyOCAxMC4wOCA0LjI4ODQyIDkuNzQ1MTcgNC41NDY5NyA5LjQ3NTU5QzQuNzk2NjEgOS4yMTQ3MSA1LjEwODY1IDkuMDE5MDUgNS40ODMxIDguODg4NjFDNS44NjY0NyA4Ljc0OTQ3IDYuMzA3NzggOC42Nzk5IDYuODA3MDUgOC42Nzk5QzcuMTkwNDIgOC42Nzk5IDcuNTM4MTIgOC43NDA3NyA3Ljg1MDE2IDguODYyNTJDOC4xNzExMiA4Ljk4NDI2IDguNDQ3NSA5LjE1ODE4IDguNjc5MyA5LjM4NDI4QzguOTAyMTkgOS42MTkwNyA5LjA3NjA0IDkuOTAxNjkgOS4yMDA4NiAxMC4yMzIxQzkuMzI1NjggMTAuNTYyNiA5LjM4ODA5IDEwLjk0MDkgOS4zODgwOSAxMS4zNjdDOS4zODgwOSAxMS42NTM5IDkuMzM5MDUgMTEuOTQ5NiA5LjI0MDk4IDEyLjI1NEM5LjE1MTgzIDEyLjU1ODMgOS4wMDQ3MiAxMi44ODQ0IDguNzk5NjYgMTMuMjMyM0M4LjU4NTY5IDEzLjU4ODggOC4zMDkzMSAxMy45ODAxIDcuOTcwNTIgMTQuNDA2MkM3LjYzMTczIDE0LjgzMjMgNy4yMTcxNiAxNS4zMDYzIDYuNzI2ODEgMTUuODI4TDAuNDI4MDE1IDIyLjQyODNWMjQuOTA2N0gxMy43MDc2WiIgZmlsbD0iIzQxM0UzRSIvPgo8cGF0aCBkPSJNMjQuMDQ1MiAxNS4yMDE5TDIwLjkxNTggMTAuNzkzSDE2LjkxNzJMMjEuNzU4MyAxNy43MTk0TDE2LjczIDI0LjkwNjdIMjAuNzU1M0wyNC4wNTg1IDIwLjI4OTFMMjcuMzg4NSAyNC45MDY3SDMxLjQwMDRMMjYuMzcyMSAxNy43MTk0TDMxLjIyNjYgMTAuNzkzSDI3LjIyOEwyNC4wNDUyIDE1LjIwMTlaIiBmaWxsPSIjNDEzRTNFIi8+Cjwvc3ZnPgo=",CloseIcon="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCA1MSA1MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM5LjQwODkgMTAuMjc2OUwxMS4wMzQ1IDM4LjY1MTMiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1MjcxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTM5LjQwODkgMzguNjUxM0wxMS4wMzQ1IDEwLjI3NjkiIHN0cm9rZT0iIzQxM0UzRSIgc3Ryb2tlLXdpZHRoPSIzLjE1MjcxIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg==",_PANOLENS$CONTROLS=PANOLENS.CONTROLS,DEVICEORIENTATION=_PANOLENS$CONTROLS.DEVICEORIENTATION,ORBIT=_PANOLENS$CONTROLS.ORBIT,pathName="Panorama_0_0_",cameraFovValues={x1:90,x2:60},getDefaultUserData=function(){return{left:0,top:0,points:[]}},createPanorama=function(A,M,g){A=new PANOLENS.ImagePanorama(A);return A.userData=getDefaultUserData(),A.panorama_id=M+1,A.addEventListener("progress",function(A){g(!0),A.progress.loaded/A.progress.total*100==100&&g(!1)}),A.addEventListener("enter",function(){return g(!1)}),A},getPanoramas=function(t,A,B){if(!t)return A.map(function(A,M){return createPanorama(A,M,B)});var g=t.Floors[0].Units[0].Rooms.reduce(function(N,Q,e){var C=A.filter(function(A){var M=A.indexOf(pathName)+pathName.length;if(M<pathName.length)return!1;var g=String(e),D=String((0,_imageExtentions.removeExtention)(A.substring(M))).split(".")[0],M=(D.toLowerCase().includes(_panoramaHelpers.cameraIdBeginning)&&(A=D.toLowerCase().indexOf(_panoramaHelpers.cameraIdBeginning)-1,D=D.slice(0,A)),Math.max(g.length,D.length));return(0,_panoramaHelpers.getArrayFromNumber)(M).every(function(A){return D[A]===g[A]})});return C.length&&C.forEach(function(A){var M,A=createPanorama(A,e,B),g=(A.room_images=C,A.room_id=Q.ID,(0,_panoramaHelpers.getRoomCoordinates)(Q,t.Floors[0].Walls,t.Vertices)),D=_slicedToArray((0,_geometric.polygonMean)(g),2),I=D[0],D=D[1];A.src.toLowerCase().includes(_panoramaHelpers.cameraIdBeginning)&&(I=(M=(0,_panoramaHelpers.getCameraFromSrc)(t,A.src)).Location.X,D=M.Location.Y),A.userData={left:I,top:D,points:g},A.room_id===_store.default.initialPanoramaRoomId?N.unshift(A):N.push(A)}),N},[]);return g.map(function(M,A){M.panorama_index=A;A=t.Floors[0].Units[0].Rooms.find(function(A){return A.ID===M.room_id});return M.linkedSpots.length?M:setPanoramaLinks(t,A,M,g)})},setPanoramaLinks=function(I,N,Q,e){var C=[Q.userData.left,Q.userData.top];return Q.room_images.forEach(function(M){var A,g;M!==Q.src&&(A=e.find(function(A){return A.src===M}),(g=(0,_panoramaHelpers.getCameraFromSrc)(I,A.src))&&connectPanorama(Q,A,g.Location,C,!1))}),I.Floors[0].Doors.forEach(function(A){var M,g=A.Location,D=A.Walls;!D.some(function(M){return N.Walls.some(function(A){return A===M})})||(M=I.Floors[0].Units[0].Rooms.find(function(A){var M=A.Walls.some(function(M){return D.some(function(A){return M===A})}),A=A.ID===N.ID;return M&&!A}))&&(A=e.filter(function(A){return A.room_id===M.ID}),(A=(0,_panoramaHelpers.getClosestPanorama)([g.X,g.Y],A).panorama)&&connectPanorama(Q,A,g,C,!0))}),Q},connectPanorama=function(A,M,g,D){var I=4<arguments.length&&void 0!==arguments[4]&&arguments[4],N=g.Y-D[1],g=g.X-D[0],D=I?-10:-100,Q="".concat(I?doorIcon:spotIcon,"?id=").concat(A.panorama_index,"-").concat(A.panorama_id,"-").concat(Math.random()),e=(0,_geometric.lineLength)([[0,0],[N,g]])/120*20,e=50<e?50:e,I=I?e:e-15,e=new THREE.Vector3(N,D,g);A.link(M,e,I,Q)},PanoramaTab=function(A){function M(){var A,M,g,D;Y&&(A=(A=document.querySelector(".widget-tab__panorama-map img")).naturalWidth/A.naturalHeight,(M=_store.default.config.height-200)<=(D=(g=200)/A)&&(g=(D=M)*A),o({width:"".concat(g,"px"),height:"".concat(D,"px")}),j((0,_panoramaHelpers.getScale)({width:g,height:D},I)),Y.onWindowResize(_store.default.config.width,_store.default.config.height))}function g(A){f(A),Y.camera.fov=A,Y.camera.currentFov=A,Y.camera.updateProjectionMatrix()}function Q(){_store.default.showControls(),u(!1)}var I=A.json,D=A.planImage,N=A.images,A=A.disabled,e=[{icon:HandMoveIcon,text:_locale.default.getLocaleText("rotate-plan")},{icon:HandResearchIcon,text:_locale.default.getLocaleText("research-plan")}],C=_slicedToArray((0,_react.useState)(_deviceOrientationStatuses.deviceOrientationStatuses.DENIED),2),t=C[0],B=C[1],C=_slicedToArray((0,_react.useState)(!0),2),E=C[0],a=C[1],C=_slicedToArray((0,_react.useState)(!0),2),z=C[0],c=C[1],C=_slicedToArray((0,_react.useState)({width:"200px",height:"auto"}),2),i=C[0],o=C[1],C=_slicedToArray((0,_react.useState)(!1),2),r=C[0],u=C[1],C=_slicedToArray((0,_react.useState)({X:1,Y:1}),2),n=C[0],j=C[1],C=_slicedToArray((0,_react.useState)(!0),2),w=C[0],T=C[1],C=_slicedToArray((0,_react.useState)(!1),2),L=C[0],y=C[1],C=_slicedToArray((0,_react.useState)(cameraFovValues.x1),2),O=C[0],f=C[1],C=_slicedToArray((0,_react.useState)(0),2),l=C[0],d=C[1],C=_slicedToArray((0,_react.useState)([]),2),s=C[0],x=C[1],C=_slicedToArray((0,_react.useState)(null),2),Y=C[0],m=C[1];(0,_react.useEffect)(function(){var A,D,M,I;s.length&&(A=document.querySelector(".widget-tab__panorama-overlay"),D=new PANOLENS.Viewer({autoRotateActivationDuration:1e3,cameraFov:cameraFovValues.x1,autoHideInfospot:!1,controlButtons:[],container:A}),A.addEventListener("mousewheel",M=function(A){A.preventDefault(),A.stopPropagation(),D.camera.fov=D.camera.currentFov,D.camera.updateProjectionMatrix()}),A.addEventListener("touchmove",M),s.forEach(function(A){A.panorama_id&&(A.addEventListener("enter",function(A){A=A.target;return d(A.panorama_index)}),D.add(A))}),D.scene.rotation.y=Math.PI/2,D.camera.currentFov=cameraFovValues.x1,m(D),M=new THREE.PerspectiveCamera(75,A.clientWidth/A.clientHeight,1,1e3),I=new _threeDeviceOrientation.default(M),function A(){window.requestAnimationFrame(A),I.update();var M,g=document.querySelector(".widget-tab__panorama-map__fov");g&&(M=-((M=D.getControl()).alpha?M.alpha-THREE.MathUtils.degToRad(M.screenOrientation):M.getAzimuthalAngle()),g.style.transform="translate(-50%, -50%) rotate(".concat(M,"rad)"))}())},[s]),(0,_react.useEffect)(M,[I,Y,_store.default.config.width,_store.default.config.height]),(0,_react.useEffect)(function(){return x(getPanoramas(I,N,c))},[I,N]);return _react.default.createElement(_react.default.Fragment,null,_react.default.createElement("div",{className:"widget-tab__panorama"},_react.default.createElement("div",{className:"widget-tab__panorama-overlay",onContextMenu:_helpers.preventRightClick}),z&&_react.default.createElement(_Loader.default,{absolute:!0}),r&&_react.default.createElement("div",{className:"widget-tab__panorama-close-map",onClick:Q},_react.default.createElement("img",{src:CloseIcon,alt:"close-map"})),_react.default.createElement("div",{className:(C="widget-tab__panorama-map",w&&(C+=" widget-tab__panorama-map--hidden"),r&&(C+=" widget-tab__panorama-map--scaled"),C)},_react.default.createElement("img",{src:D,style:i,alt:"plan",onLoad:function(){M(),T(!I)}}),!w&&_react.default.createElement(_react.default.Fragment,null,_react.default.createElement("div",{className:"widget-tab__panorama-map__fov",style:(D=(null==(C=s[l])?void 0:C.userData)||getDefaultUserData(),w=D.left,D=D.top,{left:"".concat(w*n.X,"px"),top:"".concat(D*n.Y,"px")})}),_react.default.createElement("svg",{width:i.width,key:"X-".concat(n.X,"-Y-").concat(n.Y),onClick:function(A){if(!z){if(_store.default.config.width<=_deviceWidth.deviceWidth.tablet&&!r)return _store.default.hideControls(),void u(!0);var M=document.querySelector(".widget-tab__panorama-map"),M=M.getBoundingClientRect().width/M.offsetWidth,g=document.querySelector(".widget-tab__panorama-map img").getBoundingClientRect(),D=A.clientX,A=A.clientY,I=(D-g.left)/M/n.X,N=(A-g.top)/M/n.Y,D=s.filter(function(A){A=A.userData;return(0,_geometric.pointInPolygon)([I,N],A.points)}),A=(0,_panoramaHelpers.getClosestPanorama)([I,N],D).panorama;Q(),A&&(d((g=A).panorama_index),Y.setPanorama(g))}}},s.map(function(A,M){A=A.userData;return _react.default.createElement("polygon",{key:M,points:A.points.map(function(A){var A=_slicedToArray(A,2),M=A[0],A=A[1];return[M*n.X,A*n.Y]}).flat().filter(function(A){return!isNaN(A)}).toString()})})))),_react.default.createElement("div",{className:"widget-tab__panorama-controls"},_react.default.createElement("button",{className:"widget-tab__panorama-controls-button",onClick:function(){Y.camera.fov===cameraFovValues.x1?g(cameraFovValues.x2):g(cameraFovValues.x1)}},_react.default.createElement("img",{src:O===cameraFovValues.x1?ScaleIcon1x:ScaleIcon2x,alt:"scale-icon"})),_react.default.createElement("button",{className:"widget-tab__panorama-controls-button",onClick:function(){if(y(!L),L)return Y.disableAutoRate(),void(t===_deviceOrientationStatuses.deviceOrientationStatuses.GRANTED&&Y.enableControl(DEVICEORIENTATION));"orbit"!==Y.getControlId()&&Y.enableControl(ORBIT),Y.enableAutoRate()}},_react.default.createElement("img",{src:L?RotationCloseIcon:RotationIcon,alt:"rotation-icon"})))),E&&_react.default.createElement(_Instructions.default,{disabled:A,steps:e,onClick:function(){if(a(!1),_deviceStore.default.isMobile||_deviceStore.default.isTablet){var A=function A(){window.removeEventListener("deviceorientation",A),B(_deviceOrientationStatuses.deviceOrientationStatuses.GRANTED),Y.enableControl(DEVICEORIENTATION)};try{return DeviceOrientationEvent.requestPermission?DeviceOrientationEvent.requestPermission().then(function(A){B(A),A!==_deviceOrientationStatuses.deviceOrientationStatuses.GRANTED?Y.enableControl(ORBIT):Y.enableControl(DEVICEORIENTATION)}):void window.addEventListener("deviceorientation",A)}catch(A){console.error(A.message)}}}}))},_default=PanoramaTab;exports.default=_default;
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUGFub3JhbWFUYWIuanMiXSwibmFtZXMiOlsiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX2RldmljZVN0b3JlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sb2NhbGUiLCJfc3RvcmUiLCJUSFJFRSIsIlBBTk9MRU5TIiwiX3RocmVlRGV2aWNlT3JpZW50YXRpb24iLCJfZ2VvbWV0cmljIiwiX2RldmljZU9yaWVudGF0aW9uU3RhdHVzZXMiLCJfZGV2aWNlV2lkdGgiLCJfaW1hZ2VFeHRlbnRpb25zIiwiX2hlbHBlcnMiLCJfcGFub3JhbWFIZWxwZXJzIiwiX0xvYWRlciIsIl9JbnN0cnVjdGlvbnMiLCJfUEFOT0xFTlMkQ09OVFJPTFMiLCJDT05UUk9MUyIsIkRFVklDRU9SSUVOVEFUSU9OIiwiT1JCSVQiLCJwYXRoTmFtZSIsImNhbWVyYUZvdlZhbHVlcyIsIngxIiwieDIiLCJnZXREZWZhdWx0VXNlckRhdGEiLCJsZWZ0IiwidG9wIiwicG9pbnRzIiwiY3JlYXRlUGFub3JhbWEiLCJpbWFnZSIsImluZGV4Iiwic2V0TG9hZGluZ1N0YXRlIiwicGFub3JhbWEiLCJJbWFnZVBhbm9yYW1hIiwidXNlckRhdGEiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJwcm9ncmVzcyIsImxvYWRlZCIsInRvdGFsIiwiZ2V0UGFub3JhbWFzIiwianNvbiIsImltYWdlcyIsIm1hcCIsInBhbm9yYW1hcyIsIkZsb29ycyIsIlVuaXRzIiwiUm9vbXMiLCJyZWR1Y2UiLCJhY2MiLCJqc29uUm9vbSIsInJvb21JbWFnZXMiLCJmaWx0ZXIiLCJpbWciLCJwYW5vcmFtYUlkSW5kZXgiLCJpbmRleE9mIiwibGVuZ3RoIiwiaW5kZXhBc1N0cmluZyIsIlN0cmluZyIsInBhbm9yYW1hSWQiLCJyZW1vdmVFeHRlbnRpb24iLCJzdWJzdHJpbmciLCJzcGxpdCIsIm1heEluZGV4TGVuZ3RoIiwidG9Mb3dlckNhc2UiLCJpbmNsdWRlcyIsImNhbWVyYUlkQmVnaW5uaW5nIiwiY2FtZXJhSWRJbmRleCIsInNsaWNlIiwiTWF0aCIsIm1heCIsImdldEFycmF5RnJvbU51bWJlciIsImV2ZXJ5IiwiaSIsImZvckVhY2giLCJyb29tUG9pbnRzIiwiSUQiLCJnZXRSb29tQ29vcmRpbmF0ZXMiLCJXYWxscyIsIlZlcnRpY2VzIiwiX3BvbHlnb25NZWFuMiIsIl9zbGljZWRUb0FycmF5IiwicG9seWdvbk1lYW4iLCJzcmMiLCJnZXRDYW1lcmFGcm9tU3JjIiwiTG9jYXRpb24iLCJYIiwiY3VycmVudENhbWVyYSIsIlkiLCJzdG9yZSIsImluaXRpYWxQYW5vcmFtYVJvb21JZCIsImN1cnJlbnRSb29tIiwiZmluZCIsInJvb20iLCJzZXRQYW5vcmFtYUxpbmtzIiwiY2VudGVyIiwiX3JlZiIsImNvbm5lY3RQYW5vcmFtYSIsIl9yZWYyIiwiY29ubmVjdGVkUm9vbSIsImltYWdlSW5Sb29tIiwiZG9vcldhbGxJZCIsInJvb21IYXNTYW1lV2FsbCIsInNvbWUiLCJyb29tV2FsbElkIiwiaXNTYW1lUm9vbSIsImNvbm5lY3RlZFBhbm9yYW1hIiwiZ2V0Q2xvc2VzdFBhbm9yYW1hIiwiYXZhaWxhYmxlUGFub3JhbWFzIiwibG9jYXRpb24iLCJpc0Rvb3JMaW5rIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwibG9jYXRpb25YIiwiY29uY2F0IiwiZG9vckljb24iLCJzcG90SWNvbiIsImxpbmVMZW5ndGgiLCJsb2NhdGlvblkiLCJmaW5hbFNjYWxlIiwic2NhbGUiLCJyZXN1bHRTY2FsZSIsInBvc2l0aW9uIiwiVmVjdG9yMyIsImxvY2F0aW9uWiIsImljb25VcmwiLCJQYW5vcmFtYVRhYiIsIl9yZWY0IiwibWF4SGVpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJxdWVyeVNlbGVjdG9yIiwibmF0dXJhbFdpZHRoIiwibmF0dXJhbEhlaWdodCIsImNvbmZpZyIsImltYWdlRGVsdGEiLCJzZXRNYXBTaXplIiwicm9vbV9pZCIsInNldFBsYW5TY2FsZSIsInZpZXdlciIsIm9uV2luZG93UmVzaXplIiwic2V0Q2FtZXJhRm92IiwiZm92IiwiY2FtZXJhIiwidXBkYXRlUHJvamVjdGlvbk1hdHJpeCIsInNldE1hcFN0YXRlIiwiZGlzYWJsZWQiLCJpbnN0cnVjdGlvblN0ZXBzIiwiaWNvbiIsIkhhbmRNb3ZlSWNvbiIsInRleHQiLCJsb2NhbGVTdG9yZSIsImdldExvY2FsZVRleHQiLCJfdXNlU3RhdGUyIiwidXNlU3RhdGUiLCJkZXZpY2VPcmllbnRhdGlvblN0YXR1c2VzIiwiREVOSUVEIiwiZGV2aWNlT3JpZW50YXRpb25TdGF0dXMiLCJzZXREZXZpY2VPcmllbnRhdGlvblN0YXR1cyIsIl91c2VTdGF0ZTQiLCJzaG93SW5zdHJ1Y3Rpb25zIiwic2V0SW5zdHJ1Y3Rpb25zU3RhdGUiLCJfdXNlU3RhdGU2IiwibG9hZGluZ1N0YXRlIiwiX3VzZVN0YXRlOCIsIm1hcFNpemUiLCJfdXNlU3RhdGUxMCIsIm1hcE9wZW4iLCJfdXNlU3RhdGUxMiIsInNldE1hcERpc2FibGVkU3RhdGUiLCJfdXNlU3RhdGUxNiIsInNldEF1dG9wbGF5U3RhdGUiLCJfdXNlU3RhdGUxOCIsIl91c2VTdGF0ZTIwIiwiY3VycmVudFJvb21JbmRleCIsInNldEN1cnJlbnRSb29tSW5kZXgiLCJfdXNlU3RhdGUyMiIsInNldFBhbm9yYW1hcyIsIl91c2VTdGF0ZTI0Iiwic2V0Vmlld2VyIiwidXNlRWZmZWN0IiwiY29udGFpbmVyIiwibmV3Vmlld2VyIiwib3JpZW50YXRpb25Db250cm9scyIsImRvY3VtZW50IiwiYXV0b1JvdGF0ZUFjdGl2YXRpb25EdXJhdGlvbiIsImNvbnRyb2xCdXR0b25zIiwicHJldmVudENhbWVyYUZvdkNoYW5nZSIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImN1cnJlbnRGb3YiLCJwYW5vcmFtYV9pZCIsIl9yZWY2IiwidGFyZ2V0IiwiYWRkIiwic2NlbmUiLCJyb3RhdGlvbiIsInkiLCJQSSIsImlzTWFwRGlzYWJsZWQiLCJQZXJzcGVjdGl2ZUNhbWVyYSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwiYXV0b3BsYXlFbmFibGVkIiwiYW5pbWF0ZSIsInVwZGF0ZSIsImNvbnRyb2wiLCJmb3ZFbGVtZW50IiwiYW5nbGUiLCJnZXRDb250cm9sIiwiYWxwaGEiLCJNYXRoVXRpbHMiLCJkZWdUb1JhZCIsInNjcmVlbk9yaWVudGF0aW9uIiwic3R5bGUiLCJ0cmFuc2Zvcm0iLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwib25Db250ZXh0TWVudSIsInByZXZlbnRSaWdodENsaWNrIiwiYWJzb2x1dGUiLCJvbkNsaWNrIiwiY2xvc2VNYXAiLCJhbHQiLCJjYW1lcmFGb3YiLCJhdXRvSGlkZUluZm9zcG90Iiwib25Mb2FkIiwic2V0U2NhbGUiLCJfcmVmNSIsIl9wYW5vcmFtYXMkY3VycmVudFJvbyIsInBsYW5TY2FsZSIsInVwZGF0ZUNhbWVyYUZvdiIsImRldmljZVdpZHRoIiwidG9nZ2xlRm92IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXQiLCJjbGllbnRYIiwiY2xpZW50WSIsIngiLCJtYXBTY2FsZSIsIl9yZWY5IiwicG9pbnRJblBvbHlnb24iLCJzZXRQYW5vcmFtYSIsImtleSIsIl9yZWY3IiwiX3JlZjgiLCJmbGF0IiwibnVtIiwiaXNOYU4iLCJ0b1N0cmluZyIsIlNjYWxlSWNvbjF4IiwiU2NhbGVJY29uMngiLCJHUkFOVEVEIiwiSGFuZFJlc2VhcmNoSWNvbiIsImdldENvbnRyb2xJZCIsImVuYWJsZUNvbnRyb2wiLCJSb3RhdGlvbkNsb3NlSWNvbiIsIlJvdGF0aW9uSWNvbiIsInN0ZXBzIiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0IiwiaXNUYWJsZXQiLCJ3aW5kb3ciLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWxsb3dEZXZpY2VPcmllbnRhdGlvbiIsIkRldmljZU9yaWVudGF0aW9uRXZlbnQiLCJyZXF1ZXN0UGVybWlzc2lvbiIsInRoZW4i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QzVCTSxJQUFBRiwyQkFBQUEsMEJBQUFvRyxTQUFNcEgsRUFBRXFILGNBQVI5TyxvQkFHNER3SSxVQUE5RGYsRUFBQXNILGdCQUFBdEgsRUFBQXVILGNBQUEvTyxPQUFBd0gsRUFBZ0NtQixtQkFxSDlCd0IsT0FBQUEsUUFBQUEsY0FBQUEsTUFBQUEsQ0FBVWEsSUFBTUMsRUFBYStELGtCQUE3QkMsYUFBQW5DLElBQUEscUJBMEpHakUsR0FBb0JsSyxPQUFBME4sUUFBQUMsY0FBQzFNLGNBQUF5TSxRQUFELENBQWN0RSxTQUFVQSxFQUFVbUgsTUFBT2xILEVBQWtCNEUsUUF6UHBFdkMsV0FHZCxHQUZBdkIsR0FBbUJwSSxHQUViMEcsYUFBQUEsUUFBYStILFVBQWFDLGFBQUFBLFFBQWhDQyxTQUFBLENBRUEsSUFBTXhJLEVBQWtCTSxTQUFsQk4sSUFDTnlJLE9BQVNDLG9CQUFULG9CQUFBQyxHQUNBN0csRUFBcUJ2QiwyQkFBQUEsMEJBQXJCd0gsU0FzSUVwSCxFQUFPdUgsY0FBY2hQLG9CQUd2QixJQXBJQyxPQUFBMFAsdUJBQUFDLGtCQXRCSWxJLHVCQUFQa0ksb0JBQUFDLEtBQUEsU0FBQUMsR0FBZTVGLEVBQWY0RixHQXVJUUEsSUFBV3BILDJCQUFBQSwwQkFBMEJvRyxRQXJJdkNpQixFQUFBQSxjQUFpQjdQLE9BQXZCd0gsRUFBQXVILGNBQUFoUCwwQkEwSk11UCxPQUFPdE8saUJBQWlCLG9CQUFxQndPLEdBcElqRCxNQUFBTSxHQUNBdkksUUFBQUEsTUFBYXVJLEVBQUFDLGdCLFNBOEZObkUiLCJmaWxlIjoiY29tcG9uZW50cy9QYW5vcmFtYVRhYi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGRldmljZVN0b3JlIGZyb20gJy4uL3N0b3JlL2RldmljZVN0b3JlJztcbmltcG9ydCBsb2NhbGVTdG9yZSBmcm9tICcuLi9sb2NhbGUnO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCAqIGFzIFBBTk9MRU5TIGZyb20gJ3Bhbm9sZW5zJztcbmltcG9ydCBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xzIGZyb20gJ3RocmVlLWRldmljZS1vcmllbnRhdGlvbic7XG5pbXBvcnQgeyBsaW5lTGVuZ3RoLCBwb2x5Z29uTWVhbiwgcG9pbnRJblBvbHlnb24gfSBmcm9tICdnZW9tZXRyaWMnO1xuaW1wb3J0IHsgZGV2aWNlT3JpZW50YXRpb25TdGF0dXNlcyB9IGZyb20gJy4uL2VudW1zL2RldmljZU9yaWVudGF0aW9uU3RhdHVzZXMnO1xuaW1wb3J0IHsgZGV2aWNlV2lkdGggfSBmcm9tICcuLi9lbnVtcy9kZXZpY2VXaWR0aCc7XG5pbXBvcnQgeyByZW1vdmVFeHRlbnRpb24gfSBmcm9tICcuLi9lbnVtcy9pbWFnZUV4dGVudGlvbnMnO1xuaW1wb3J0IHsgcHJldmVudFJpZ2h0Q2xpY2sgfSBmcm9tICcuLi91dGlscy9oZWxwZXJzJztcbmltcG9ydCB7XG4gIGdldFNjYWxlLFxuICBnZXRDYW1lcmFGcm9tU3JjLFxuICBjYW1lcmFJZEJlZ2lubmluZyxcbiAgZ2V0Um9vbUNvb3JkaW5hdGVzLFxuICBnZXRBcnJheUZyb21OdW1iZXIsXG4gIGdldENsb3Nlc3RQYW5vcmFtYSxcbn0gZnJvbSAnLi4vdXRpbHMvcGFub3JhbWFIZWxwZXJzJztcblxuaW1wb3J0IExvYWRlciBmcm9tICcuL0xvYWRlcic7XG5pbXBvcnQgSW5zdHJ1Y3Rpb25zIGZyb20gJy4vSW5zdHJ1Y3Rpb25zJztcblxuaW1wb3J0IHNwb3RJY29uIGZyb20gJy4uL2Fzc2V0cy9pbWcvc3BvdC1pY29uLnBuZyc7XG5pbXBvcnQgZG9vckljb24gZnJvbSAnLi4vYXNzZXRzL2ltZy9kb29yLWljb24ucG5nJztcbmltcG9ydCBIYW5kTW92ZUljb24gZnJvbSAnLi4vYXNzZXRzL2ljb25zL2hhbmQtbW92ZS5zdmcnO1xuaW1wb3J0IEhhbmRSZXNlYXJjaEljb24gZnJvbSAnLi4vYXNzZXRzL2ljb25zL2hhbmQtcmVzZWFyY2guc3ZnJztcbmltcG9ydCBSb3RhdGlvbkNsb3NlSWNvbiBmcm9tICcuLi9hc3NldHMvaWNvbnMvcm90YXRpb24tY2xvc2Uuc3ZnJztcbmltcG9ydCBSb3RhdGlvbkljb24gZnJvbSAnLi4vYXNzZXRzL2ljb25zL3JvdGF0aW9uLnN2Zyc7XG5pbXBvcnQgU2NhbGVJY29uMXggZnJvbSAnLi4vYXNzZXRzL2ljb25zLzF4LnN2Zyc7XG5pbXBvcnQgU2NhbGVJY29uMnggZnJvbSAnLi4vYXNzZXRzL2ljb25zLzJ4LnN2Zyc7XG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJy4uL2Fzc2V0cy9pY29ucy9jbG9zZS5zdmcnO1xuXG5jb25zdCB7IERFVklDRU9SSUVOVEFUSU9OLCBPUkJJVCB9ID0gUEFOT0xFTlMuQ09OVFJPTFM7XG5cbmNvbnN0IHBhdGhOYW1lID0gJ1Bhbm9yYW1hXzBfMF8nO1xuY29uc3QgY2FtZXJhRm92VmFsdWVzID0geyB4MTogOTAsIHgyOiA2MCB9O1xuXG5jb25zdCBnZXREZWZhdWx0VXNlckRhdGEgPSAoKSA9PiAoeyBsZWZ0OiAwLCB0b3A6IDAsIHBvaW50czogW10gfSk7XG5cbmNvbnN0IGNyZWF0ZVBhbm9yYW1hID0gKGltYWdlLCBpbmRleCwgc2V0TG9hZGluZ1N0YXRlKSA9PiB7XG4gIGNvbnN0IHBhbm9yYW1hID0gbmV3IFBBTk9MRU5TLkltYWdlUGFub3JhbWEoaW1hZ2UpO1xuICBwYW5vcmFtYS51c2VyRGF0YSA9IGdldERlZmF1bHRVc2VyRGF0YSgpO1xuICBwYW5vcmFtYVsncGFub3JhbWFfaWQnXSA9IGluZGV4ICsgMTtcblxuICBwYW5vcmFtYS5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIChldmVudCkgPT4ge1xuICAgIHNldExvYWRpbmdTdGF0ZSh0cnVlKTtcbiAgICBpZiAoKGV2ZW50LnByb2dyZXNzLmxvYWRlZCAvIGV2ZW50LnByb2dyZXNzLnRvdGFsKSAqIDEwMCA9PT0gMTAwKSB7XG4gICAgICBzZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgIH1cbiAgfSk7XG4gIHBhbm9yYW1hLmFkZEV2ZW50TGlzdGVuZXIoJ2VudGVyJywgKCkgPT4gc2V0TG9hZGluZ1N0YXRlKGZhbHNlKSk7XG5cbiAgcmV0dXJuIHBhbm9yYW1hO1xufTtcblxuY29uc3QgZ2V0UGFub3JhbWFzID0gKGpzb24sIGltYWdlcywgc2V0TG9hZGluZ1N0YXRlKSA9PiB7XG4gIGlmICghanNvbikgcmV0dXJuIGltYWdlcy5tYXAoKGltYWdlLCBpbmRleCkgPT4gY3JlYXRlUGFub3JhbWEoaW1hZ2UsIGluZGV4LCBzZXRMb2FkaW5nU3RhdGUpKTtcblxuICBjb25zdCBwYW5vcmFtYXMgPSBqc29uLkZsb29yc1swXS5Vbml0c1swXS5Sb29tcy5yZWR1Y2UoKGFjYywganNvblJvb20sIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgcm9vbUltYWdlcyA9IGltYWdlcy5maWx0ZXIoKGltZykgPT4ge1xuICAgICAgY29uc3QgcGFub3JhbWFJZEluZGV4ID0gaW1nLmluZGV4T2YocGF0aE5hbWUpICsgcGF0aE5hbWUubGVuZ3RoO1xuICAgICAgaWYgKHBhbm9yYW1hSWRJbmRleCA8IHBhdGhOYW1lLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBpbmRleEFzU3RyaW5nID0gU3RyaW5nKGluZGV4KTtcbiAgICAgIGxldCBwYW5vcmFtYUlkID0gU3RyaW5nKHJlbW92ZUV4dGVudGlvbihpbWcuc3Vic3RyaW5nKHBhbm9yYW1hSWRJbmRleCkpKS5zcGxpdCgnLicpWzBdO1xuXG4gICAgICBpZiAocGFub3JhbWFJZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNhbWVyYUlkQmVnaW5uaW5nKSkge1xuICAgICAgICBjb25zdCBjYW1lcmFJZEluZGV4ID0gcGFub3JhbWFJZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoY2FtZXJhSWRCZWdpbm5pbmcpIC0gMTtcbiAgICAgICAgcGFub3JhbWFJZCA9IHBhbm9yYW1hSWQuc2xpY2UoMCwgY2FtZXJhSWRJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heEluZGV4TGVuZ3RoID0gTWF0aC5tYXgoaW5kZXhBc1N0cmluZy5sZW5ndGgsIHBhbm9yYW1hSWQubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGltYWdlSW5Sb29tID0gZ2V0QXJyYXlGcm9tTnVtYmVyKG1heEluZGV4TGVuZ3RoKS5ldmVyeSgoaSkgPT4ge1xuICAgICAgICByZXR1cm4gcGFub3JhbWFJZFtpXSA9PT0gaW5kZXhBc1N0cmluZ1tpXTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaW1hZ2VJblJvb207XG4gICAgfSk7XG5cbiAgICBpZiAoIXJvb21JbWFnZXMubGVuZ3RoKSByZXR1cm4gYWNjO1xuXG4gICAgcm9vbUltYWdlcy5mb3JFYWNoKChpbWFnZSkgPT4ge1xuICAgICAgY29uc3QgcGFub3JhbWEgPSBjcmVhdGVQYW5vcmFtYShpbWFnZSwgaW5kZXgsIHNldExvYWRpbmdTdGF0ZSk7XG4gICAgICBwYW5vcmFtYVsncm9vbV9pbWFnZXMnXSA9IHJvb21JbWFnZXM7XG4gICAgICBwYW5vcmFtYVsncm9vbV9pZCddID0ganNvblJvb20uSUQ7XG5cbiAgICAgIGNvbnN0IHJvb21Qb2ludHMgPSBnZXRSb29tQ29vcmRpbmF0ZXMoanNvblJvb20sIGpzb24uRmxvb3JzWzBdLldhbGxzLCBqc29uLlZlcnRpY2VzKTtcbiAgICAgIGxldCBbbGVmdCwgdG9wXSA9IHBvbHlnb25NZWFuKHJvb21Qb2ludHMpO1xuXG4gICAgICBpZiAocGFub3JhbWEuc3JjLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY2FtZXJhSWRCZWdpbm5pbmcpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYW1lcmEgPSBnZXRDYW1lcmFGcm9tU3JjKGpzb24sIHBhbm9yYW1hLnNyYyk7XG4gICAgICAgIGxlZnQgPSBjdXJyZW50Q2FtZXJhLkxvY2F0aW9uLlg7XG4gICAgICAgIHRvcCA9IGN1cnJlbnRDYW1lcmEuTG9jYXRpb24uWTtcbiAgICAgIH1cblxuICAgICAgcGFub3JhbWEudXNlckRhdGEgPSB7IGxlZnQsIHRvcCwgcG9pbnRzOiByb29tUG9pbnRzIH07XG5cbiAgICAgIGlmIChwYW5vcmFtYVsncm9vbV9pZCddID09PSBzdG9yZS5pbml0aWFsUGFub3JhbWFSb29tSWQpIHtcbiAgICAgICAgYWNjLnVuc2hpZnQocGFub3JhbWEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjLnB1c2gocGFub3JhbWEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBwYW5vcmFtYXMubWFwKChwYW5vcmFtYSwgaW5kZXgpID0+IHtcbiAgICBwYW5vcmFtYVsncGFub3JhbWFfaW5kZXgnXSA9IGluZGV4O1xuICAgIGNvbnN0IGN1cnJlbnRSb29tID0ganNvbi5GbG9vcnNbMF0uVW5pdHNbMF0uUm9vbXMuZmluZCgocm9vbSkgPT4gcm9vbS5JRCA9PT0gcGFub3JhbWFbJ3Jvb21faWQnXSk7XG4gICAgaWYgKCFwYW5vcmFtYS5saW5rZWRTcG90cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBzZXRQYW5vcmFtYUxpbmtzKGpzb24sIGN1cnJlbnRSb29tLCBwYW5vcmFtYSwgcGFub3JhbWFzKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhbm9yYW1hO1xuICB9KTtcbn07XG5cbmNvbnN0IHNldFBhbm9yYW1hTGlua3MgPSAoanNvbiwgY3VycmVudFJvb20sIHBhbm9yYW1hLCBwYW5vcmFtYXMpID0+IHtcbiAgY29uc3QgY2VudGVyID0gW3Bhbm9yYW1hLnVzZXJEYXRhLmxlZnQsIHBhbm9yYW1hLnVzZXJEYXRhLnRvcF07XG5cbiAgcGFub3JhbWFbJ3Jvb21faW1hZ2VzJ10uZm9yRWFjaCgoaW1hZ2UpID0+IHtcbiAgICBpZiAoaW1hZ2UgPT09IHBhbm9yYW1hLnNyYykgcmV0dXJuO1xuXG4gICAgY29uc3QgY29ubmVjdGVkUGFub3JhbWEgPSBwYW5vcmFtYXMuZmluZCgoeyBzcmMgfSkgPT4gc3JjID09PSBpbWFnZSk7XG4gICAgY29uc3QgY3VycmVudENhbWVyYSA9IGdldENhbWVyYUZyb21TcmMoanNvbiwgY29ubmVjdGVkUGFub3JhbWEuc3JjKTtcblxuICAgIGlmICghY3VycmVudENhbWVyYSkgcmV0dXJuO1xuXG4gICAgY29ubmVjdFBhbm9yYW1hKHBhbm9yYW1hLCBjb25uZWN0ZWRQYW5vcmFtYSwgY3VycmVudENhbWVyYS5Mb2NhdGlvbiwgY2VudGVyLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGpzb24uRmxvb3JzWzBdLkRvb3JzLmZvckVhY2goKHsgTG9jYXRpb24sIFdhbGxzIH0pID0+IHtcbiAgICBpZiAoIVdhbGxzLnNvbWUoKGRvb3JXYWxsSWQpID0+IGN1cnJlbnRSb29tLldhbGxzLnNvbWUoKHJvb21XYWxsSWQpID0+IHJvb21XYWxsSWQgPT09IGRvb3JXYWxsSWQpKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29ubmVjdGVkUm9vbSA9IGpzb24uRmxvb3JzWzBdLlVuaXRzWzBdLlJvb21zLmZpbmQoKHJvb20pID0+IHtcbiAgICAgIGNvbnN0IHJvb21IYXNTYW1lV2FsbCA9IHJvb20uV2FsbHMuc29tZSgocm9vbVdhbGxJZCkgPT4gV2FsbHMuc29tZSgoZG9vcldhbGxJZCkgPT4gcm9vbVdhbGxJZCA9PT0gZG9vcldhbGxJZCkpO1xuICAgICAgY29uc3QgaXNTYW1lUm9vbSA9IHJvb20uSUQgPT09IGN1cnJlbnRSb29tLklEO1xuICAgICAgcmV0dXJuIHJvb21IYXNTYW1lV2FsbCAmJiAhaXNTYW1lUm9vbTtcbiAgICB9KTtcblxuICAgIGlmICghY29ubmVjdGVkUm9vbSkgcmV0dXJuO1xuXG4gICAgY29uc3QgYXZhaWxhYmxlUGFub3JhbWFzID0gcGFub3JhbWFzLmZpbHRlcigoeyByb29tX2lkIH0pID0+IHJvb21faWQgPT09IGNvbm5lY3RlZFJvb20uSUQpO1xuICAgIGNvbnN0IHsgcGFub3JhbWE6IGNvbm5lY3RlZFBhbm9yYW1hIH0gPSBnZXRDbG9zZXN0UGFub3JhbWEoW0xvY2F0aW9uLlgsIExvY2F0aW9uLlldLCBhdmFpbGFibGVQYW5vcmFtYXMpO1xuXG4gICAgaWYgKCFjb25uZWN0ZWRQYW5vcmFtYSkgcmV0dXJuO1xuXG4gICAgY29ubmVjdFBhbm9yYW1hKHBhbm9yYW1hLCBjb25uZWN0ZWRQYW5vcmFtYSwgTG9jYXRpb24sIGNlbnRlciwgdHJ1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBwYW5vcmFtYTtcbn07XG5cbmNvbnN0IGNvbm5lY3RQYW5vcmFtYSA9IChwYW5vcmFtYSwgY29ubmVjdGVkUGFub3JhbWEsIGxvY2F0aW9uLCBjZW50ZXIsIGlzRG9vckxpbmsgPSBmYWxzZSkgPT4ge1xuICBjb25zdCBsb2NhdGlvblggPSBsb2NhdGlvbi5ZIC0gY2VudGVyWzFdO1xuICBjb25zdCBsb2NhdGlvblkgPSBsb2NhdGlvbi5YIC0gY2VudGVyWzBdO1xuICBjb25zdCBsb2NhdGlvblogPSBpc0Rvb3JMaW5rID8gLTEwIDogLTEwMDtcbiAgY29uc3QgaWNvbiA9IGlzRG9vckxpbmsgPyBkb29ySWNvbiA6IHNwb3RJY29uO1xuICBjb25zdCBpY29uVXJsID0gYCR7aWNvbn0/aWQ9JHtwYW5vcmFtYVsncGFub3JhbWFfaW5kZXgnXX0tJHtwYW5vcmFtYVsncGFub3JhbWFfaWQnXX0tJHtNYXRoLnJhbmRvbSgpfWA7XG4gIGNvbnN0IGRlZmF1bHRTY2FsZSA9IDIwO1xuICBjb25zdCBtYXhTY2FsZSA9IDUwO1xuXG4gIGNvbnN0IGRlZmF1bHRMZW5ndGggPSAxMjA7XG4gIGNvbnN0IGxlbmd0aCA9IGxpbmVMZW5ndGgoW1swLCAwXSwgW2xvY2F0aW9uWCwgbG9jYXRpb25ZXV0pO1xuICBjb25zdCBzY2FsZSA9IChsZW5ndGggLyBkZWZhdWx0TGVuZ3RoKSAqIGRlZmF1bHRTY2FsZTtcbiAgY29uc3QgZmluYWxTY2FsZSA9IHNjYWxlID4gbWF4U2NhbGUgPyBtYXhTY2FsZSA6IHNjYWxlO1xuICBjb25zdCByZXN1bHRTY2FsZSA9IGlzRG9vckxpbmsgPyBmaW5hbFNjYWxlIDogZmluYWxTY2FsZSAtIDE1O1xuICBjb25zdCBwb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKGxvY2F0aW9uWCwgbG9jYXRpb25aLCBsb2NhdGlvblkpO1xuXG4gIHBhbm9yYW1hLmxpbmsoY29ubmVjdGVkUGFub3JhbWEsIHBvc2l0aW9uLCByZXN1bHRTY2FsZSwgaWNvblVybCk7XG59O1xuXG5jb25zdCBQYW5vcmFtYVRhYiA9ICh7IGpzb24sIHBsYW5JbWFnZSwgaW1hZ2VzLCBkaXNhYmxlZCB9KSA9PiB7XG4gIGNvbnN0IGluc3RydWN0aW9uU3RlcHMgPSBbXG4gICAgeyBpY29uOiBIYW5kTW92ZUljb24sIHRleHQ6IGxvY2FsZVN0b3JlLmdldExvY2FsZVRleHQoJ3JvdGF0ZS1wbGFuJykgfSxcbiAgICB7IGljb246IEhhbmRSZXNlYXJjaEljb24sIHRleHQ6IGxvY2FsZVN0b3JlLmdldExvY2FsZVRleHQoJ3Jlc2VhcmNoLXBsYW4nKSB9LFxuICBdO1xuXG4gIGNvbnN0IFtkZXZpY2VPcmllbnRhdGlvblN0YXR1cywgc2V0RGV2aWNlT3JpZW50YXRpb25TdGF0dXNdID0gdXNlU3RhdGUoZGV2aWNlT3JpZW50YXRpb25TdGF0dXNlcy5ERU5JRUQpO1xuICBjb25zdCBbc2hvd0luc3RydWN0aW9ucywgc2V0SW5zdHJ1Y3Rpb25zU3RhdGVdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtsb2FkaW5nU3RhdGUsIHNldExvYWRpbmdTdGF0ZV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW21hcFNpemUsIHNldE1hcFNpemVdID0gdXNlU3RhdGUoeyB3aWR0aDogJzIwMHB4JywgaGVpZ2h0OiAnYXV0bycgfSk7XG4gIGNvbnN0IFttYXBPcGVuLCBzZXRNYXBTdGF0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIFxuICBjb25zdCBbcGxhblNjYWxlLCBzZXRQbGFuU2NhbGVdID0gdXNlU3RhdGUoeyBYOiAxLCBZOiAxIH0pO1xuICBjb25zdCBbaXNNYXBEaXNhYmxlZCwgc2V0TWFwRGlzYWJsZWRTdGF0ZV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2F1dG9wbGF5RW5hYmxlZCwgc2V0QXV0b3BsYXlTdGF0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtjYW1lcmFGb3YsIHNldENhbWVyYUZvdl0gPSB1c2VTdGF0ZShjYW1lcmFGb3ZWYWx1ZXMueDEpO1xuICBjb25zdCBbY3VycmVudFJvb21JbmRleCwgc2V0Q3VycmVudFJvb21JbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3Bhbm9yYW1hcywgc2V0UGFub3JhbWFzXSA9IHVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW3ZpZXdlciwgc2V0Vmlld2VyXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gIGNvbnN0IGNoYW5nZVBhbm9yYW1hID0gKHBhbm9yYW1hKSA9PiB7XG4gICAgc2V0Q3VycmVudFJvb21JbmRleChwYW5vcmFtYVsncGFub3JhbWFfaW5kZXgnXSk7XG4gICAgdmlld2VyLnNldFBhbm9yYW1hKHBhbm9yYW1hKTtcbiAgfTtcblxuICBjb25zdCBzZXRTY2FsZSA9ICgpID0+IHtcbiAgICBpZiAoIXZpZXdlcikgcmV0dXJuO1xuXG4gICAgY29uc3QgaW1hZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud2lkZ2V0LXRhYl9fcGFub3JhbWEtbWFwIGltZycpO1xuICAgIGNvbnN0IGltYWdlV2lkdGggPSBpbWFnZS5uYXR1cmFsV2lkdGg7XG4gICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBpbWFnZS5uYXR1cmFsSGVpZ2h0O1xuICAgIGNvbnN0IGltYWdlRGVsdGEgPSBpbWFnZVdpZHRoIC8gaW1hZ2VIZWlnaHQ7XG4gICAgY29uc3QgbWF4V2lkdGggPSAyMDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gc3RvcmUuY29uZmlnLmhlaWdodCAtIDIwMDtcbiAgICBsZXQgd2lkdGggPSBtYXhXaWR0aDtcbiAgICBsZXQgaGVpZ2h0ID0gd2lkdGggLyBpbWFnZURlbHRhO1xuXG4gICAgaWYgKGhlaWdodCA+PSBtYXhIZWlnaHQpIHtcbiAgICAgIGhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgIHdpZHRoID0gaGVpZ2h0ICogaW1hZ2VEZWx0YTtcbiAgICB9XG5cbiAgICBzZXRNYXBTaXplKHsgd2lkdGg6IGAke3dpZHRofXB4YCwgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgIH0pO1xuICAgIHNldFBsYW5TY2FsZShnZXRTY2FsZSh7IHdpZHRoLCBoZWlnaHQgfSwganNvbikpO1xuXG4gICAgdmlld2VyLm9uV2luZG93UmVzaXplKHN0b3JlLmNvbmZpZy53aWR0aCwgc3RvcmUuY29uZmlnLmhlaWdodCk7XG4gIH07XG5cbiAgY29uc3Qgb25JbWFnZUxvYWRlZCA9ICgpID0+IHtcbiAgICBzZXRTY2FsZSgpO1xuICAgIHNldE1hcERpc2FibGVkU3RhdGUoIWpzb24pO1xuICB9O1xuXG4gIGNvbnN0IGdldERvdFBvc2l0aW9uID0gKHsgbGVmdCwgdG9wIH0pID0+IHtcbiAgICByZXR1cm4geyBsZWZ0OiBgJHtsZWZ0ICogcGxhblNjYWxlLlh9cHhgLCB0b3A6IGAke3RvcCAqIHBsYW5TY2FsZS5ZfXB4YCB9O1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUNhbWVyYUZvdiA9IChmb3YpID0+IHtcbiAgICBzZXRDYW1lcmFGb3YoZm92KTtcbiAgICB2aWV3ZXIuY2FtZXJhLmZvdiA9IGZvdjtcbiAgICB2aWV3ZXIuY2FtZXJhLmN1cnJlbnRGb3YgPSBmb3Y7XG4gICAgdmlld2VyLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG4gIH07XG5cbiAgY29uc3QgdG9nZ2xlRm92ID0gKCkgPT4ge1xuICAgIGlmICh2aWV3ZXIuY2FtZXJhLmZvdiA9PT0gY2FtZXJhRm92VmFsdWVzLngxKSB7XG4gICAgICB1cGRhdGVDYW1lcmFGb3YoY2FtZXJhRm92VmFsdWVzLngyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdXBkYXRlQ2FtZXJhRm92KGNhbWVyYUZvdlZhbHVlcy54MSk7XG4gIH07XG5cbiAgY29uc3QgZ2V0QW5nbGUgPSAoY29udHJvbCkgPT4ge1xuICAgIGlmIChjb250cm9sLmFscGhhKSB7XG4gICAgICByZXR1cm4gY29udHJvbC5hbHBoYSAtIFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZChjb250cm9sLnNjcmVlbk9yaWVudGF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyb2wuZ2V0QXppbXV0aGFsQW5nbGUoKTtcbiAgfTtcblxuICBjb25zdCB0b2dnbGVBdXRvcGxheSA9ICgpID0+IHtcbiAgICBzZXRBdXRvcGxheVN0YXRlKCFhdXRvcGxheUVuYWJsZWQpO1xuICAgIGlmIChhdXRvcGxheUVuYWJsZWQpIHtcbiAgICAgIHZpZXdlci5kaXNhYmxlQXV0b1JhdGUoKTtcbiAgICAgIGlmIChkZXZpY2VPcmllbnRhdGlvblN0YXR1cyA9PT0gZGV2aWNlT3JpZW50YXRpb25TdGF0dXNlcy5HUkFOVEVEKSB7XG4gICAgICAgIHZpZXdlci5lbmFibGVDb250cm9sKERFVklDRU9SSUVOVEFUSU9OKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZpZXdlci5nZXRDb250cm9sSWQoKSAhPT0gJ29yYml0Jykge1xuICAgICAgdmlld2VyLmVuYWJsZUNvbnRyb2woT1JCSVQpO1xuICAgIH1cbiAgICB2aWV3ZXIuZW5hYmxlQXV0b1JhdGUoKTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcGFub3JhbWFzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLndpZGdldC10YWJfX3Bhbm9yYW1hLW92ZXJsYXknKTtcbiAgICBjb25zdCBuZXdWaWV3ZXIgPSBuZXcgUEFOT0xFTlMuVmlld2VyKHtcbiAgICAgIGF1dG9Sb3RhdGVBY3RpdmF0aW9uRHVyYXRpb246IDEwMDAsXG4gICAgICBjYW1lcmFGb3Y6IGNhbWVyYUZvdlZhbHVlcy54MSxcbiAgICAgIGF1dG9IaWRlSW5mb3Nwb3Q6IGZhbHNlLFxuICAgICAgY29udHJvbEJ1dHRvbnM6IFtdLFxuICAgICAgY29udGFpbmVyLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcHJldmVudENhbWVyYUZvdkNoYW5nZSA9IChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBuZXdWaWV3ZXIuY2FtZXJhLmZvdiA9IG5ld1ZpZXdlci5jYW1lcmEuY3VycmVudEZvdjtcbiAgICAgIG5ld1ZpZXdlci5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgIH07XG5cbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V3aGVlbCcsIHByZXZlbnRDYW1lcmFGb3ZDaGFuZ2UpO1xuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50Q2FtZXJhRm92Q2hhbmdlKTtcblxuICAgIHBhbm9yYW1hcy5mb3JFYWNoKChwYW5vcmFtYSkgPT4ge1xuICAgICAgaWYgKCFwYW5vcmFtYS5wYW5vcmFtYV9pZCkgcmV0dXJuO1xuICAgICAgcGFub3JhbWEuYWRkRXZlbnRMaXN0ZW5lcignZW50ZXInLCAoeyB0YXJnZXQgfSkgPT4gc2V0Q3VycmVudFJvb21JbmRleCh0YXJnZXRbJ3Bhbm9yYW1hX2luZGV4J10pKTtcbiAgICAgIG5ld1ZpZXdlci5hZGQocGFub3JhbWEpO1xuICAgIH0pO1xuXG4gICAgbmV3Vmlld2VyLnNjZW5lLnJvdGF0aW9uLnkgPSBNYXRoLlBJIC8gMjtcbiAgICBuZXdWaWV3ZXIuY2FtZXJhLmN1cnJlbnRGb3YgPSBjYW1lcmFGb3ZWYWx1ZXMueDE7XG5cbiAgICBzZXRWaWV3ZXIobmV3Vmlld2VyKTtcblxuICAgIGNvbnN0IGNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSg3NSwgY29udGFpbmVyLmNsaWVudFdpZHRoIC8gY29udGFpbmVyLmNsaWVudEhlaWdodCwgMSwgMTAwMCk7XG4gICAgY29uc3Qgb3JpZW50YXRpb25Db250cm9scyA9IG5ldyBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xzKGNhbWVyYSk7XG5cbiAgICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAgICAgIG9yaWVudGF0aW9uQ29udHJvbHMudXBkYXRlKCk7XG5cbiAgICAgIGNvbnN0IGZvdkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud2lkZ2V0LXRhYl9fcGFub3JhbWEtbWFwX19mb3YnKTtcblxuICAgICAgaWYgKCFmb3ZFbGVtZW50KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGFuZ2xlID0gLWdldEFuZ2xlKG5ld1ZpZXdlci5nZXRDb250cm9sKCkpO1xuICAgICAgZm92RWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgke2FuZ2xlfXJhZClgO1xuICAgIH07XG5cbiAgICBhbmltYXRlKCk7XG4gIH0sIFtwYW5vcmFtYXNdKTtcblxuICB1c2VFZmZlY3Qoc2V0U2NhbGUsIFtqc29uLCB2aWV3ZXIsIHN0b3JlLmNvbmZpZy53aWR0aCwgc3RvcmUuY29uZmlnLmhlaWdodF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRQYW5vcmFtYXMoZ2V0UGFub3JhbWFzKGpzb24sIGltYWdlcywgc2V0TG9hZGluZ1N0YXRlKSksIFtqc29uLCBpbWFnZXNdKTtcblxuICBjb25zdCByZXF1ZXN0RGV2aWNlT3JpZW50YXRpb24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIERldmljZU9yaWVudGF0aW9uRXZlbnQucmVxdWVzdFBlcm1pc3Npb24oKS50aGVuKChzdGF0dXMpID0+IHtcbiAgICAgIHNldERldmljZU9yaWVudGF0aW9uU3RhdHVzKHN0YXR1cyk7XG4gICAgICBpZiAoc3RhdHVzICE9PSBkZXZpY2VPcmllbnRhdGlvblN0YXR1c2VzLkdSQU5URUQpIHtcbiAgICAgICAgdmlld2VyLmVuYWJsZUNvbnRyb2woT1JCSVQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2aWV3ZXIuZW5hYmxlQ29udHJvbChERVZJQ0VPUklFTlRBVElPTik7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3Qgb25TdGFydCA9ICgpID0+IHtcbiAgICBzZXRJbnN0cnVjdGlvbnNTdGF0ZShmYWxzZSk7XG5cbiAgICBpZiAoIWRldmljZVN0b3JlLmlzTW9iaWxlICYmICFkZXZpY2VTdG9yZS5pc1RhYmxldCkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWxsb3dEZXZpY2VPcmllbnRhdGlvbiA9ICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkZXZpY2VvcmllbnRhdGlvbicsIGFsbG93RGV2aWNlT3JpZW50YXRpb24pO1xuICAgICAgc2V0RGV2aWNlT3JpZW50YXRpb25TdGF0dXMoZGV2aWNlT3JpZW50YXRpb25TdGF0dXNlcy5HUkFOVEVEKTtcbiAgICAgIHZpZXdlci5lbmFibGVDb250cm9sKERFVklDRU9SSUVOVEFUSU9OKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghRGV2aWNlT3JpZW50YXRpb25FdmVudC5yZXF1ZXN0UGVybWlzc2lvbikge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZGV2aWNlb3JpZW50YXRpb24nLCBhbGxvd0RldmljZU9yaWVudGF0aW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3REZXZpY2VPcmllbnRhdGlvbigpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFJvb21Qb2ludHNBc1N0cmluZyA9IChwb2ludHMpID0+IHtcbiAgICByZXR1cm4gcG9pbnRzLm1hcCgoW3gsIHldKSA9PiBbeCAqIHBsYW5TY2FsZS5YLCB5ICogcGxhblNjYWxlLlldKS5mbGF0KCkuZmlsdGVyKChudW0pID0+ICFpc05hTihudW0pKS50b1N0cmluZygpO1xuICB9O1xuXG4gIGNvbnN0IG9wZW5NYXAgPSAoKSA9PiB7XG4gICAgc3RvcmUuaGlkZUNvbnRyb2xzKCk7XG4gICAgc2V0TWFwU3RhdGUodHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgY2xvc2VNYXAgPSAoKSA9PiB7XG4gICAgc3RvcmUuc2hvd0NvbnRyb2xzKCk7XG4gICAgc2V0TWFwU3RhdGUoZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IG9uTWFwQ2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAobG9hZGluZ1N0YXRlKSByZXR1cm47XG5cbiAgICBpZiAoc3RvcmUuY29uZmlnLndpZHRoIDw9IGRldmljZVdpZHRoLnRhYmxldCkge1xuICAgICAgaWYgKCFtYXBPcGVuKSB7XG4gICAgICAgIG9wZW5NYXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53aWRnZXQtdGFiX19wYW5vcmFtYS1tYXAnKTtcbiAgICBjb25zdCBtYXBTY2FsZSA9IG1hcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIG1hcC5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBpbWFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53aWRnZXQtdGFiX19wYW5vcmFtYS1tYXAgaW1nJyk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gaW1hZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBldmVudDtcbiAgICBjb25zdCB4ID0gKChjbGllbnRYIC0gb2Zmc2V0LmxlZnQpIC8gbWFwU2NhbGUpIC8gcGxhblNjYWxlLlg7XG4gICAgY29uc3QgeSA9ICgoY2xpZW50WSAtIG9mZnNldC50b3ApIC8gbWFwU2NhbGUpIC8gcGxhblNjYWxlLlk7XG4gICAgXG4gICAgY29uc3QgYXZhaWxhYmxlUGFub3JhbWFzID0gcGFub3JhbWFzLmZpbHRlcigoeyB1c2VyRGF0YSB9KSA9PiBwb2ludEluUG9seWdvbihbeCwgeV0sIHVzZXJEYXRhLnBvaW50cykpO1xuXG4gICAgY29uc3QgeyBwYW5vcmFtYSB9ID0gZ2V0Q2xvc2VzdFBhbm9yYW1hKFt4LCB5XSwgYXZhaWxhYmxlUGFub3JhbWFzKTtcblxuICAgIGNsb3NlTWFwKCk7XG5cbiAgICBpZiAoIXBhbm9yYW1hKSByZXR1cm47XG5cbiAgICBjaGFuZ2VQYW5vcmFtYShwYW5vcmFtYSk7XG4gIH07XG5cbiAgY29uc3QgZ2V0TWFwQ2xhc3MgPSAoKSA9PiB7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICd3aWRnZXQtdGFiX19wYW5vcmFtYS1tYXAnO1xuICAgIGlmIChpc01hcERpc2FibGVkKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyB3aWRnZXQtdGFiX19wYW5vcmFtYS1tYXAtLWhpZGRlbic7XG4gICAgfVxuICAgIGlmIChtYXBPcGVuKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyB3aWRnZXQtdGFiX19wYW5vcmFtYS1tYXAtLXNjYWxlZCc7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3aWRnZXQtdGFiX19wYW5vcmFtYVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndpZGdldC10YWJfX3Bhbm9yYW1hLW92ZXJsYXlcIiBvbkNvbnRleHRNZW51PXtwcmV2ZW50UmlnaHRDbGlja30gLz5cbiAgICAgICAge2xvYWRpbmdTdGF0ZSAmJiA8TG9hZGVyIGFic29sdXRlPXt0cnVlfSAvPn1cblxuICAgICAgICB7bWFwT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3aWRnZXQtdGFiX19wYW5vcmFtYS1jbG9zZS1tYXBcIiBvbkNsaWNrPXtjbG9zZU1hcH0+XG4gICAgICAgICAgICA8aW1nIHNyYz17Q2xvc2VJY29ufSBhbHQ9XCJjbG9zZS1tYXBcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRNYXBDbGFzcygpfT5cbiAgICAgICAgICA8aW1nIHNyYz17cGxhbkltYWdlfSBzdHlsZT17bWFwU2l6ZX0gYWx0PVwicGxhblwiIG9uTG9hZD17b25JbWFnZUxvYWRlZH0gLz5cblxuICAgICAgICAgIHshaXNNYXBEaXNhYmxlZCAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2lkZ2V0LXRhYl9fcGFub3JhbWEtbWFwX19mb3ZcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtnZXREb3RQb3NpdGlvbihwYW5vcmFtYXNbY3VycmVudFJvb21JbmRleF0/LnVzZXJEYXRhIHx8IGdldERlZmF1bHRVc2VyRGF0YSgpKX0gLz5cblxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPXttYXBTaXplLndpZHRofSBrZXk9e2BYLSR7cGxhblNjYWxlLlh9LVktJHtwbGFuU2NhbGUuWX1gfSBvbkNsaWNrPXtvbk1hcENsaWNrfT5cbiAgICAgICAgICAgICAgICB7cGFub3JhbWFzLm1hcCgoeyB1c2VyRGF0YSB9LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPHBvbHlnb24ga2V5PXtpbmRleH0gcG9pbnRzPXtnZXRSb29tUG9pbnRzQXNTdHJpbmcodXNlckRhdGEucG9pbnRzKX0gLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3aWRnZXQtdGFiX19wYW5vcmFtYS1jb250cm9sc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwid2lkZ2V0LXRhYl9fcGFub3JhbWEtY29udHJvbHMtYnV0dG9uXCIgb25DbGljaz17dG9nZ2xlRm92fT5cbiAgICAgICAgICAgIDxpbWcgc3JjPXtjYW1lcmFGb3YgPT09IGNhbWVyYUZvdlZhbHVlcy54MSA/IFNjYWxlSWNvbjF4IDogU2NhbGVJY29uMnh9IGFsdD1cInNjYWxlLWljb25cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJ3aWRnZXQtdGFiX19wYW5vcmFtYS1jb250cm9scy1idXR0b25cIiBvbkNsaWNrPXt0b2dnbGVBdXRvcGxheX0+XG4gICAgICAgICAgICA8aW1nIHNyYz17YXV0b3BsYXlFbmFibGVkID8gUm90YXRpb25DbG9zZUljb24gOiBSb3RhdGlvbkljb259IGFsdD1cInJvdGF0aW9uLWljb25cIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7c2hvd0luc3RydWN0aW9ucyAmJiA8SW5zdHJ1Y3Rpb25zIGRpc2FibGVkPXtkaXNhYmxlZH0gc3RlcHM9e2luc3RydWN0aW9uU3RlcHN9IG9uQ2xpY2s9e29uU3RhcnR9IC8+fVxuICAgIDwvPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFub3JhbWFUYWI7XG4iXX0=
|