@smarterplan/ngx-smarterplan-core 0.4.45 → 0.4.46
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/esm2020/lib/services/matterport-import.service.mjs +46 -48
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +45 -47
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +45 -47
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/services/matterport-import.service.d.ts +0 -1
- package/package.json +1 -1
|
@@ -20,7 +20,6 @@ export class MatterportImportService {
|
|
|
20
20
|
this.planService = planService;
|
|
21
21
|
this.stop = false;
|
|
22
22
|
this.importingImages = new Subject();
|
|
23
|
-
this.intersection = new Subject();
|
|
24
23
|
this.sweepProcessedCount = new Subject();
|
|
25
24
|
this.totalSweepsCount = new Subject();
|
|
26
25
|
}
|
|
@@ -89,17 +88,10 @@ export class MatterportImportService {
|
|
|
89
88
|
// Subscribe to Sweep data
|
|
90
89
|
this.sdk.Sweep.data.subscribe({
|
|
91
90
|
onCollectionUpdated: function upd(collection) {
|
|
92
|
-
|
|
93
|
-
// "the entire up-to-date collection",
|
|
94
|
-
// collection,
|
|
95
|
-
// );
|
|
91
|
+
console.log("the entire up-to-date collection", collection);
|
|
96
92
|
this.sweeps = collection;
|
|
97
93
|
}.bind(this),
|
|
98
94
|
});
|
|
99
|
-
// Subscribe to intersection
|
|
100
|
-
this.sdk.Pointer.intersection.subscribe(function pointer(intersectionData) {
|
|
101
|
-
this.intersection.next(intersectionData.position);
|
|
102
|
-
}.bind(this));
|
|
103
95
|
// remove labels
|
|
104
96
|
this.sdk.Settings.update("labels", false)
|
|
105
97
|
.then(function (data) {
|
|
@@ -114,54 +106,60 @@ export class MatterportImportService {
|
|
|
114
106
|
resolve(true);
|
|
115
107
|
}, 5000);
|
|
116
108
|
})
|
|
117
|
-
.catch((
|
|
109
|
+
.catch((error) => {
|
|
110
|
+
console.error(error);
|
|
111
|
+
reject(error);
|
|
112
|
+
});
|
|
118
113
|
});
|
|
119
114
|
}
|
|
120
115
|
async importData(spaceID, surface, reloading = false, node = null) {
|
|
121
116
|
this.spaceID = spaceID;
|
|
117
|
+
if (!this.sweeps) {
|
|
118
|
+
Promise.reject(new Error("no sweeps initialized"));
|
|
119
|
+
}
|
|
122
120
|
let floorZones = [];
|
|
123
121
|
const zones = await this.zoneService.getZonesBySpace(spaceID);
|
|
124
122
|
const mainZone = zones.find((z) => !z.parentID);
|
|
125
|
-
if (
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
return Promise.resolve(true);
|
|
135
|
-
}
|
|
136
|
-
// check layer of building type
|
|
137
|
-
const layerBuilding = await this.getLayerByName("BUILDING");
|
|
138
|
-
const createdDefaultZone = await this.createZone(node.metadata, layerBuilding.id, surface, mainZone.id, Object.keys(this.sweeps), node);
|
|
139
|
-
if (!createdDefaultZone) {
|
|
140
|
-
return Promise.resolve(false);
|
|
141
|
-
}
|
|
142
|
-
if (this.floors) {
|
|
143
|
-
floorZones = await this.importFloorData(createdDefaultZone.id, node);
|
|
144
|
-
}
|
|
145
|
-
// console.log(floorZones);
|
|
146
|
-
await Promise.all(Object.keys(this.sweeps).map(async (key) => {
|
|
147
|
-
const sweepInfo = this.sweeps[key];
|
|
148
|
-
const navigationInput = {
|
|
149
|
-
matterportSweepID: sweepInfo.uuid,
|
|
150
|
-
position: JSON.stringify(sweepInfo.position),
|
|
151
|
-
rotation: JSON.stringify(sweepInfo.rotation),
|
|
152
|
-
level: LevelStatus.LOW,
|
|
153
|
-
nodeID: node.id,
|
|
154
|
-
spaceID,
|
|
155
|
-
};
|
|
156
|
-
const nav = await this.navigationService.createNavigation(navigationInput);
|
|
157
|
-
if (!nav) {
|
|
158
|
-
console.log("could create navigation", navigationInput.id);
|
|
159
|
-
}
|
|
160
|
-
}));
|
|
123
|
+
if (!mainZone) {
|
|
124
|
+
return Promise.reject(new Error("missing data (no main Building Zone)"));
|
|
125
|
+
}
|
|
126
|
+
console.log("importing data from matterport");
|
|
127
|
+
// save sweeps data as json
|
|
128
|
+
const json = JSON.stringify(Object.values(this.sweeps));
|
|
129
|
+
await uploadJsonToS3(`visits/${this.modelID}/inventory/`, json, "data.json");
|
|
130
|
+
if (reloading) {
|
|
131
|
+
// perform only 360 import since we are reloading
|
|
161
132
|
await this.import360images();
|
|
133
|
+
console.log("after reloading");
|
|
162
134
|
return Promise.resolve(true);
|
|
163
135
|
}
|
|
164
|
-
|
|
136
|
+
// check layer of building type
|
|
137
|
+
const layerBuilding = await this.getLayerByName("BUILDING");
|
|
138
|
+
const createdDefaultZone = await this.createZone(node.metadata, layerBuilding.id, surface, mainZone.id, Object.keys(this.sweeps), node);
|
|
139
|
+
if (!createdDefaultZone) {
|
|
140
|
+
return Promise.resolve(false);
|
|
141
|
+
}
|
|
142
|
+
if (this.floors) {
|
|
143
|
+
floorZones = await this.importFloorData(createdDefaultZone.id, node);
|
|
144
|
+
}
|
|
145
|
+
// console.log(floorZones);
|
|
146
|
+
await Promise.all(Object.keys(this.sweeps).map(async (key) => {
|
|
147
|
+
const sweepInfo = this.sweeps[key];
|
|
148
|
+
const navigationInput = {
|
|
149
|
+
matterportSweepID: sweepInfo.uuid,
|
|
150
|
+
position: JSON.stringify(sweepInfo.position),
|
|
151
|
+
rotation: JSON.stringify(sweepInfo.rotation),
|
|
152
|
+
level: LevelStatus.LOW,
|
|
153
|
+
nodeID: node.id,
|
|
154
|
+
spaceID,
|
|
155
|
+
};
|
|
156
|
+
const nav = await this.navigationService.createNavigation(navigationInput);
|
|
157
|
+
if (!nav) {
|
|
158
|
+
console.log("could create navigation", navigationInput.id);
|
|
159
|
+
}
|
|
160
|
+
}));
|
|
161
|
+
await this.import360images();
|
|
162
|
+
return Promise.resolve(true);
|
|
165
163
|
}
|
|
166
164
|
async createZone(name, layerID, surface = null, parentID = null, sweeps = [], node = null, metadata = null) {
|
|
167
165
|
const zoneInput = {
|
|
@@ -336,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
336
334
|
providedIn: "root",
|
|
337
335
|
}]
|
|
338
336
|
}], ctorParameters: function () { return [{ type: i1.NavigationService }, { type: i2.ZoneService }, { type: i3.ViewerService }, { type: i4.LayerService }, { type: i5.BaseUserService }, { type: i6.PlanService }]; } });
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7QUFLcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFPN0YsTUFBTSxPQUFPLHVCQUF1QjtJQXlDaEMsWUFDWSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsV0FBd0I7UUFMeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFoQjdCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFFYixvQkFBZSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRTNELGlCQUFZLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFFaEQsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QscUJBQWdCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFT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R0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFZO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FDaEUsSUFBSSxFQUNKLFlBQVksQ0FDZixDQUFDO1FBQ0YsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQjtRQUNELGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVFLENBQUM7O29IQTNhUSx1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZwQixNQUFNOzJGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCwgd2FpdCB9IGZyb20gXCIuLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGV2ZWxTdGF0dXMsIExheWVyLCBOb2RlLCBab25lLCBOYXZpZ2F0aW9uLCBQbGFuIH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2xheWVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBsYW5TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3BsYW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gXCIuL21vZGVscy96b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgdXBsb2FkSnNvblRvUzMsIHVwbG9hZEJhc2U2NEltYWdlLCByZW1vdmVBbGxGaWxlc0Zyb21Gb2xkZXJTMyB9IGZyb20gXCIuL3MzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4vdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tIFwiLi92aWV3ZXIuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0SW1wb3J0U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICBwdWJsaWMgc2RrOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBzd2VlcHM6IE9iamVjdDtcclxuXHJcbiAgICBwdWJsaWMgZmxvb3JzOiBPYmplY3Q7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XHJcblxyXG4gICAgcHJpdmF0ZSBfbW9kZWxJRDogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3NwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3BhY2VJRDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IHNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3NwYWNlSUQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1vZGVsSUQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxJRDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IG1vZGVsSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX21vZGVsSUQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RvcCA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBpbXBvcnRpbmdJbWFnZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIHB1YmxpYyBpbnRlcnNlY3Rpb246IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgICBwdWJsaWMgc3dlZXBQcm9jZXNzZWRDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuICAgIHB1YmxpYyB0b3RhbFN3ZWVwc0NvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zdG9wID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIE1hdHRlcnBvcnQgU0RLXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSUQgPSBtb2RlbElEO1xyXG4gICAgICAgICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgaWZyYW1lXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlclNlcnZpY2Uuc2V0VG91clVybChtb2RlbElEKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcclxuICAgICAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCB1cmwpO1xyXG4gICAgICAgICAgICBpZnJhbWUuYWxsb3cgPSBcInhyLXNwYXRpYWwtdHJhY2tpbmdcIjtcclxuICAgICAgICAgICAgaWZyYW1lLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgICAgICBpZnJhbWUud2lkdGggPSBcIjEwMCVcIjtcclxuICAgICAgICAgICAgaWZyYW1lLmlkID0gXCJ2aWV3ZXItbW9kdWxlXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3ZpZXdlci1mcmFtZVwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoaWZyYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpZnJhbWU7XHJcblxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHdpbmRvdy5NUF9TREsuY29ubmVjdChpZnJhbWUsIFwicW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZFwiLCBcIjMuMTFcIilcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChzZGspID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbnN0YW5jaWF0ZSBzZGtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkayA9IHNkaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2lic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRmxvb3JzXCIsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGN1cnJlbnQgRmxvb3JcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdXBkKGN1cnJlbnRGbG9vcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rmxvb3IgPSBjdXJyZW50Rmxvb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmxvb3IgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGN1cnJlbnRGbG9vci5zZXF1ZW5jZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhcIkN1cnJlbnRseSB2aWV3aW5nIGFsbCBmbG9vcnNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGN1cnJlbnRGbG9vci5zZXF1ZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGN1cnJlbnRGbG9vci5pZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiQ3VycmVudCB2aWV3aW5nIGFuIHVucGxhY2VkIHVuYWxpZ25lZCBzd2VlcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudGx5IHRyYW5zaXRpb25pbmcgYmV0d2VlbiBmbG9vcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50bHkgb24gZmxvb3InLCBjdXJyZW50Rmxvb3IuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IGZsb29yXFwncyBzZXF1ZW5jZSBpbmRleCcsIGN1cnJlbnRGbG9vci5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgZmxvb3JcXCdzIG5hbWUnLCBjdXJyZW50Rmxvb3IubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBTd2VlcCBkYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgXCJ0aGUgZW50aXJlIHVwLXRvLWRhdGUgY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5Qb2ludGVyLmludGVyc2VjdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBvaW50ZXIoaW50ZXJzZWN0aW9uRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb24ubmV4dChpbnRlcnNlY3Rpb25EYXRhLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGxhYmVsc1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLlNldHRpbmdzLnVwZGF0ZShcImxhYmVsc1wiLCBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdXBkYXRlIGNvbXBsZXRlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYExhYmVscyBzZXR0aW5nOiAke2RhdGF9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdXBkYXRlIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiaW5pdCBkb25lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoaGFuZGxlRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoaGFuZGxlRXJyb3IpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbXBvcnREYXRhKFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICAgICBzdXJmYWNlOiBudW1iZXIsXHJcbiAgICAgICAgcmVsb2FkaW5nOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgbm9kZTogTm9kZSA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLnNwYWNlSUQgPSBzcGFjZUlEO1xyXG4gICAgICAgIGxldCBmbG9vclpvbmVzOiBab25lW10gPSBbXTtcclxuICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IG1haW5ab25lID0gem9uZXMuZmluZCgoeikgPT4gIXoucGFyZW50SUQpO1xyXG4gICAgICAgIGlmICh0aGlzLnN3ZWVwcyAmJiBtYWluWm9uZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydGluZyBkYXRhIGZyb20gbWF0dGVycG9ydFwiKTtcclxuICAgICAgICAgICAgLy8gc2F2ZSBzd2VlcHMgZGF0YSBhcyBqc29uXHJcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHVwbG9hZEpzb25Ub1MzKFxyXG4gICAgICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vaW52ZW50b3J5L2AsXHJcbiAgICAgICAgICAgICAgICBqc29uLFxyXG4gICAgICAgICAgICAgICAgXCJkYXRhLmpzb25cIixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHJlbG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gcGVyZm9ybSBvbmx5IDM2MCBpbXBvcnQgc2luY2Ugd2UgYXJlIHJlbG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMoKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWZ0ZXIgcmVsb2FkaW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjaGVjayBsYXllciBvZiBidWlsZGluZyB0eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IGxheWVyQnVpbGRpbmcgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKFwiQlVJTERJTkdcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWREZWZhdWx0Wm9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEsXHJcbiAgICAgICAgICAgICAgICBsYXllckJ1aWxkaW5nLmlkLFxyXG4gICAgICAgICAgICAgICAgc3VyZmFjZSxcclxuICAgICAgICAgICAgICAgIG1haW5ab25lLmlkLFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLFxyXG4gICAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFjcmVhdGVkRGVmYXVsdFpvbmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZsb29ycykge1xyXG4gICAgICAgICAgICAgICAgZmxvb3Jab25lcyA9IGF3YWl0IHRoaXMuaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREZWZhdWx0Wm9uZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vclpvbmVzKTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcykubWFwKGFzeW5jIChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2VlcEluZm8gPSB0aGlzLnN3ZWVwc1trZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHN3ZWVwSW5mby51dWlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnBvc2l0aW9uKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5yb3RhdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJRDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgICAgICB9IGFzIE5hdmlnYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2ID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jcmVhdGVOYXZpZ2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hdikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bGQgY3JlYXRlIG5hdmlnYXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JbnB1dC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIm1pc3NpbmcgZGF0YSAobm8gYnVpbGRpbmcgem9uZSlcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVpvbmUoXHJcbiAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIGxheWVySUQ6IHN0cmluZyxcclxuICAgICAgICBzdXJmYWNlOiBudW1iZXIgPSBudWxsLFxyXG4gICAgICAgIHBhcmVudElEOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgICAgIHN3ZWVwczogc3RyaW5nW10gPSBbXSxcclxuICAgICAgICBub2RlOiBOb2RlID0gbnVsbCxcclxuICAgICAgICBtZXRhZGF0YTogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBsYXllcklELFxyXG4gICAgICAgICAgICBzd2VlcElEczogc3dlZXBzLFxyXG4gICAgICAgICAgICBub2RlSURzOiBub2RlID8gW25vZGUuaWRdIDogbnVsbCxcclxuICAgICAgICB9IGFzIFpvbmU7XHJcbiAgICAgICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHpvbmVJbnB1dCk7XHJcbiAgICAgICAgaWYgKHN1cmZhY2UpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnN1cmZhY2UgPSBzdXJmYWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50SUQpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnBhcmVudElEID0gcGFyZW50SUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV3TG9jYWwgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmNyZWF0ZSh6b25lSW5wdXQpO1xyXG4gICAgICAgIHJldHVybiBuZXdMb2NhbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbXBvcnQzNjBpbWFnZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnRpbmcgMzYwIGltYWdlc1wiKTtcclxuICAgICAgICB0aGlzLmltcG9ydGluZ0ltYWdlcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FucyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICAgICAgICBsZXQgbWF4U2NhbjtcclxuICAgICAgICAgICAgbGV0IGluZGV4U2NhbjtcclxuICAgICAgICAgICAgY29uc3Qgbm1iU2NhbnMgPSBPYmplY3Qua2V5cyhzY2FucykubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBzY2FuIHBvaW50cyA6XCIsIG5tYlNjYW5zKTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFN3ZWVwc0NvdW50Lm5leHQobm1iU2NhbnMpO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBzdGFydGVkIHRvIGxvYWQgaW1hZ2VzIGFscmVhZHlcclxuICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXRha2luZyBpbXBvcnQgZnJvbSBzY2FuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGluZGV4U2NhbiA9ICtsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICBubWJTY2FucyA8IGluZGV4U2NhbiArIDUwXHJcbiAgICAgICAgICAgICAgICAgICAgPyAobWF4U2NhbiA9IG5tYlNjYW5zKVxyXG4gICAgICAgICAgICAgICAgICAgIDogKG1heFNjYW4gPSBpbmRleFNjYW4gKyA1MCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleFNjYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgbm1iU2NhbnMgPCA1MCA/IChtYXhTY2FuID0gbm1iU2NhbnMpIDogKG1heFNjYW4gPSA1MCk7XHJcbiAgICAgICAgICAgICAgICBtYXhTY2FuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IGluZGV4U2NhbjsgaW5kZXggPCBtYXhTY2FuOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzY2Fuc1tpbmRleF0udXVpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCB0aGlzLnNkay5SZW5kZXJlci50YWtlRXF1aXJlY3Rhbmd1bGFyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiAyMDQ4LCBoZWlnaHQ6IDEwMjQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXR0ZXJ0YWdzOiBmYWxzZSwgc3dlZXBzOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2Fuc1tpbmRleF0udXVpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzL2AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3dlZXBcIixcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBQcm9jZXNzZWRDb3VudC5uZXh0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFsbEZpbGVzRnJvbUZvbGRlclMzKGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3N3ZWVwc2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJhbmRvbmluZyBpbXBvcnQgYmVhY3VzZSBpdCB3YXMgY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXhTY2FuID09PSBubWJTY2Fucykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnQgMzYwIGRvbmVcIik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0byByZXN0YXJ0IHRoZSBwcm9jZWR1cmUgZnJvbSB3aGVyZSB3ZSBsZWZ0IG9mXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImluZGV4U2NhbkxvYWRcIiwgbWF4U2Nhbi50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdFNka0Zvck1vZGVsKHRoaXMubW9kZWxJRCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmltcG9ydERhdGEodGhpcy5zcGFjZUlELCAwLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb3ZlVG9GbG9vcihmbG9vck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIC8vIGJ5IG5hbWVcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vck5hbWUpO1xyXG4gICAgICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yLm5hbWUgIT09IFwiXCIgJiYgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgaWRcclxuICAgICAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKChmbG9vcikgPT5cclxuICAgICAgICAgICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZsb29yTWF0dGVycG9ydCk7XHJcbiAgICAgICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBtb3ZlIHRvIEZsb29yXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgIGRlZmF1dFpvbmVJRDogc3RyaW5nLFxyXG4gICAgICAgIG5vZGU6IE5vZGUsXHJcbiAgICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVzID0gW107XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8odGhpcy5zZGsuTW9kZS5Nb2RlLkZMT09SUExBTik7XHJcbiAgICAgICAgY29uc3Qgbm1iRmxvb3JzID0gT2JqZWN0LmtleXModGhpcy5mbG9vcnMpLmxlbmd0aDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBmbG9vcnNcIiwgbm1iRmxvb3JzKTtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm1iRmxvb3JzOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSW1wb3J0aW5nIGZsb29yXCIsIGluZGV4KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGluZGV4KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHdhaXQoNzAwKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWJvdXQgdG8gc2F2ZSB0aGUgZmxvb3JcIiwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuc2F2ZUZsb29yKGRlZmF1dFpvbmVJRCwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlY2VpdmVkIGZsb29yIHpvbmVcIiwgem9uZSk7XHJcbiAgICAgICAgICAgICAgICB6b25lcy5wdXNoKHpvbmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzYXZlRmxvb3IoZGVmYXV0Wm9uZUlEOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLmlkO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsYXllckZsb29yID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkZMT09SXCIpO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwc0luZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcclxuICAgICAgICBjb25zdCBzd2VlcHNGb3JGbG9vciA9IHN3ZWVwc0luZm8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoc3dlZXBJbmZvKSA9PiBzd2VlcEluZm8uZmxvb3JJbmZvLmlkID09PSB0aGlzLmN1cnJlbnRGbG9vci5pZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgICAgICAgIGDDiXRhZ2UgJHtuYW1lfSAtICR7bm9kZS5tZXRhZGF0YX1gLFxyXG4gICAgICAgICAgICBsYXllckZsb29yLmlkLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBkZWZhdXRab25lSUQsXHJcbiAgICAgICAgICAgIHN3ZWVwSURzLFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiB0aGlzLmN1cnJlbnRGbG9vci5zZXF1ZW5jZSB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gVE9ETyBsaW5rIHRvIHNjYW5zXHJcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3QoXHJcbiAgICAgICAgICAgIHsgd2lkdGg6IDQwOTYsIGhlaWdodDogMjA0OCB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3BhY2VJRHNob3J0ID0gdGhpcy5zcGFjZUlELnNsaWNlKDAsIDgpO1xyXG4gICAgICAgIGF3YWl0IHVwbG9hZEJhc2U2NEltYWdlKFxyXG4gICAgICAgICAgICBiYXNlNjQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3BsYW5zL2AsXHJcbiAgICAgICAgICAgIGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9XyR7c3BhY2VJRHNob3J0fWAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjcmVhdGUgUGxhbiBvYmplY3RcclxuICAgICAgICBjb25zdCBwbGFuID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfWAsXHJcbiAgICAgICAgICAgIGFubmV4ZTogYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH0uanBlZ2AsXHJcbiAgICAgICAgICAgIHpvbmVJRDogem9uZS5pZCxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBpc0N1cnJlbnRGb3Jab25lOiB0cnVlLFxyXG4gICAgICAgICAgICBpc01vZGlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNJbXBvcnRlZE1hdHRlcnBvcnQ6IHRydWUsXHJcbiAgICAgICAgfSBhcyBQbGFuO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGxhblNlcnZpY2UuY3JlYXRlUGxhbihwbGFuKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImZsb29yIHNhdmVkXCIpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWJhbmRvbigpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhYmFuZG9ubmluZyBpbXBvcnRcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgICB9LCAxNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGcmFtZSgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZS5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRMYXllckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24odGhpcy5zcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50T3JnSWQgPSBtaXNzaW9uLm9yZ2FuaXNhdGlvbklEO1xyXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmdldExheWVyQnlOYW1lRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBjdXJyZW50T3JnSWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxheWVyc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHRoZW5cclxuICAgICAgICByZXR1cm4gdGhpcy5sYXllclNlcnZpY2UuY3JlYXRlTGF5ZXJGb3JPcmdhbmlzYXRpb24obmFtZSwgY3VycmVudE9yZ0lkKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7QUFLcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFPN0YsTUFBTSxPQUFPLHVCQUF1QjtJQXVDaEMsWUFDWSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsV0FBd0I7UUFMeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFkN0IsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViLG9CQUFlLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFFM0Qsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QscUJBQWdCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFTN0QsQ0FBQztJQS9CTCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUks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QUFDLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQ2hFLElBQUksRUFDSixZQUFZLENBQ2YsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7UUFDRCxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1RSxDQUFDOztvSEExYVEsdUJBQXVCO3dIQUF2Qix1QkFBdUIsY0FGcEIsTUFBTTsyRkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IHJlamVjdHMgfSBmcm9tIFwiYXNzZXJ0XCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXQgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExldmVsU3RhdHVzLCBMYXllciwgTm9kZSwgWm9uZSwgTmF2aWdhdGlvbiwgUGxhbiB9IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9sYXllci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQbGFuU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9wbGFuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHVwbG9hZEpzb25Ub1MzLCB1cGxvYWRCYXNlNjRJbWFnZSwgcmVtb3ZlQWxsRmlsZXNGcm9tRm9sZGVyUzMgfSBmcm9tIFwiLi9zMy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld2VyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydEltcG9ydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50RnJhbWU7XHJcblxyXG4gICAgcHVibGljIHNkazogYW55O1xyXG5cclxuICAgIHByaXZhdGUgc3dlZXBzOiBPYmplY3Q7XHJcblxyXG4gICAgcHVibGljIGZsb29yczogT2JqZWN0O1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudEZsb29yO1xyXG5cclxuICAgIHByaXZhdGUgX21vZGVsSUQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9zcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGdldCBzcGFjZUlEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYWNlSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBzcGFjZUlEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zcGFjZUlEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtb2RlbElEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBtb2RlbElEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tb2RlbElEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3AgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaW1wb3J0aW5nSW1hZ2VzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwdWJsaWMgc3dlZXBQcm9jZXNzZWRDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuICAgIHB1YmxpYyB0b3RhbFN3ZWVwc0NvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zdG9wID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIE1hdHRlcnBvcnQgU0RLXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSUQgPSBtb2RlbElEO1xyXG4gICAgICAgICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgaWZyYW1lXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlclNlcnZpY2Uuc2V0VG91clVybChtb2RlbElEKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcclxuICAgICAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCB1cmwpO1xyXG4gICAgICAgICAgICBpZnJhbWUuYWxsb3cgPSBcInhyLXNwYXRpYWwtdHJhY2tpbmdcIjtcclxuICAgICAgICAgICAgaWZyYW1lLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgICAgICBpZnJhbWUud2lkdGggPSBcIjEwMCVcIjtcclxuICAgICAgICAgICAgaWZyYW1lLmlkID0gXCJ2aWV3ZXItbW9kdWxlXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3ZpZXdlci1mcmFtZVwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoaWZyYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpZnJhbWU7XHJcblxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHdpbmRvdy5NUF9TREsuY29ubmVjdChpZnJhbWUsIFwicW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZFwiLCBcIjMuMTFcIilcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChzZGspID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbnN0YW5jaWF0ZSBzZGtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkayA9IHNkaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2lic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRmxvb3JzXCIsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGN1cnJlbnQgRmxvb3JcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdXBkKGN1cnJlbnRGbG9vcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rmxvb3IgPSBjdXJyZW50Rmxvb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmxvb3IgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGN1cnJlbnRGbG9vci5zZXF1ZW5jZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhcIkN1cnJlbnRseSB2aWV3aW5nIGFsbCBmbG9vcnNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGN1cnJlbnRGbG9vci5zZXF1ZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGN1cnJlbnRGbG9vci5pZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiQ3VycmVudCB2aWV3aW5nIGFuIHVucGxhY2VkIHVuYWxpZ25lZCBzd2VlcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudGx5IHRyYW5zaXRpb25pbmcgYmV0d2VlbiBmbG9vcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50bHkgb24gZmxvb3InLCBjdXJyZW50Rmxvb3IuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IGZsb29yXFwncyBzZXF1ZW5jZSBpbmRleCcsIGN1cnJlbnRGbG9vci5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgZmxvb3JcXCdzIG5hbWUnLCBjdXJyZW50Rmxvb3IubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBTd2VlcCBkYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGUgZW50aXJlIHVwLXRvLWRhdGUgY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGxhYmVsc1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLlNldHRpbmdzLnVwZGF0ZShcImxhYmVsc1wiLCBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdXBkYXRlIGNvbXBsZXRlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYExhYmVscyBzZXR0aW5nOiAke2RhdGF9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdXBkYXRlIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiaW5pdCBkb25lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW1wb3J0RGF0YShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgc3VyZmFjZTogbnVtYmVyLFxyXG4gICAgICAgIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zcGFjZUlEID0gc3BhY2VJRDtcclxuICAgICAgICBpZiAoIXRoaXMuc3dlZXBzKSB7XHJcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIm5vIHN3ZWVwcyBpbml0aWFsaXplZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmbG9vclpvbmVzOiBab25lW10gPSBbXTtcclxuICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IG1haW5ab25lID0gem9uZXMuZmluZCgoeikgPT4gIXoucGFyZW50SUQpO1xyXG5cclxuICAgICAgICBpZiAoIW1haW5ab25lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJtaXNzaW5nIGRhdGEgKG5vIG1haW4gQnVpbGRpbmcgWm9uZSlcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydGluZyBkYXRhIGZyb20gbWF0dGVycG9ydFwiKTtcclxuICAgICAgICAvLyBzYXZlIHN3ZWVwcyBkYXRhIGFzIGpzb25cclxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcykpO1xyXG4gICAgICAgIGF3YWl0IHVwbG9hZEpzb25Ub1MzKFxyXG4gICAgICAgICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9pbnZlbnRvcnkvYCxcclxuICAgICAgICAgICAganNvbixcclxuICAgICAgICAgICAgXCJkYXRhLmpzb25cIixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChyZWxvYWRpbmcpIHtcclxuICAgICAgICAgICAgLy8gcGVyZm9ybSBvbmx5IDM2MCBpbXBvcnQgc2luY2Ugd2UgYXJlIHJlbG9hZGluZ1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmltcG9ydDM2MGltYWdlcygpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFmdGVyIHJlbG9hZGluZ1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgbGF5ZXIgb2YgYnVpbGRpbmcgdHlwZVxyXG4gICAgICAgIGNvbnN0IGxheWVyQnVpbGRpbmcgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKFwiQlVJTERJTkdcIik7XHJcbiAgICAgICAgY29uc3QgY3JlYXRlZERlZmF1bHRab25lID0gYXdhaXQgdGhpcy5jcmVhdGVab25lKFxyXG4gICAgICAgICAgICBub2RlLm1ldGFkYXRhLFxyXG4gICAgICAgICAgICBsYXllckJ1aWxkaW5nLmlkLFxyXG4gICAgICAgICAgICBzdXJmYWNlLFxyXG4gICAgICAgICAgICBtYWluWm9uZS5pZCxcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFjcmVhdGVkRGVmYXVsdFpvbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZsb29ycykge1xyXG4gICAgICAgICAgICBmbG9vclpvbmVzID0gYXdhaXQgdGhpcy5pbXBvcnRGbG9vckRhdGEoXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkRGVmYXVsdFpvbmUuaWQsXHJcbiAgICAgICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vclpvbmVzKTtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLm1hcChhc3luYyAoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzd2VlcEluZm8gPSB0aGlzLnN3ZWVwc1trZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbklucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBzd2VlcEluZm8udXVpZCxcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnBvc2l0aW9uKSxcclxuICAgICAgICAgICAgICAgICAgICByb3RhdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnJvdGF0aW9uKSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogTGV2ZWxTdGF0dXMuTE9XLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJRDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgfSBhcyBOYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2ID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jcmVhdGVOYXZpZ2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JbnB1dCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5hdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvdWxkIGNyZWF0ZSBuYXZpZ2F0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JbnB1dC5pZCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlWm9uZShcclxuICAgICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgbGF5ZXJJRDogc3RyaW5nLFxyXG4gICAgICAgIHN1cmZhY2U6IG51bWJlciA9IG51bGwsXHJcbiAgICAgICAgcGFyZW50SUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgc3dlZXBzOiBzdHJpbmdbXSA9IFtdLFxyXG4gICAgICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgICAgIG1ldGFkYXRhOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxab25lPiB7XHJcbiAgICAgICAgY29uc3Qgem9uZUlucHV0ID0ge1xyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgIGxheWVySUQsXHJcbiAgICAgICAgICAgIHN3ZWVwSURzOiBzd2VlcHMsXHJcbiAgICAgICAgICAgIG5vZGVJRHM6IG5vZGUgPyBbbm9kZS5pZF0gOiBudWxsLFxyXG4gICAgICAgIH0gYXMgWm9uZTtcclxuICAgICAgICByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3Qoem9uZUlucHV0KTtcclxuICAgICAgICBpZiAoc3VyZmFjZSkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQuc3VyZmFjZSA9IHN1cmZhY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRJRCkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQucGFyZW50SUQgPSBwYXJlbnRJRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIHpvbmVJbnB1dC5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdMb2NhbCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuY3JlYXRlKHpvbmVJbnB1dCk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xvY2FsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGltcG9ydDM2MGltYWdlcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkltcG9ydGluZyAzNjAgaW1hZ2VzXCIpO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0aW5nSW1hZ2VzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYW5zID0gT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcyk7XHJcbiAgICAgICAgICAgIGxldCBtYXhTY2FuO1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhTY2FuO1xyXG4gICAgICAgICAgICBjb25zdCBubWJTY2FucyA9IE9iamVjdC5rZXlzKHNjYW5zKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVG90YWwgbnVtYmVyIG9mIHNjYW4gcG9pbnRzIDpcIiwgbm1iU2NhbnMpO1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsU3dlZXBzQ291bnQubmV4dChubWJTY2Fucyk7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIHN0YXJ0ZWQgdG8gbG9hZCBpbWFnZXMgYWxyZWFkeVxyXG4gICAgICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICBcInJldGFraW5nIGltcG9ydCBmcm9tIHNjYW5cIixcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZGV4U2NhbkxvYWRcIiksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXhTY2FuID0gK2xvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKTtcclxuICAgICAgICAgICAgICAgIG5tYlNjYW5zIDwgaW5kZXhTY2FuICsgNTBcclxuICAgICAgICAgICAgICAgICAgICA/IChtYXhTY2FuID0gbm1iU2NhbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgOiAobWF4U2NhbiA9IGluZGV4U2NhbiArIDUwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluZGV4U2NhbiA9IDA7XHJcbiAgICAgICAgICAgICAgICBubWJTY2FucyA8IDUwID8gKG1heFNjYW4gPSBubWJTY2FucykgOiAobWF4U2NhbiA9IDUwKTtcclxuICAgICAgICAgICAgICAgIG1heFNjYW47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gaW5kZXhTY2FuOyBpbmRleCA8IG1heFNjYW47IGluZGV4ICs9IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAubW92ZVRvKHNjYW5zW2luZGV4XS51dWlkKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5DYW1lcmEuc2V0Um90YXRpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZyA9IGF3YWl0IHRoaXMuc2RrLlJlbmRlcmVyLnRha2VFcXVpcmVjdGFuZ3VsYXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IDIwNDgsIGhlaWdodDogMTAyNCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG1hdHRlcnRhZ3M6IGZhbHNlLCBzd2VlcHM6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHVwbG9hZEJhc2U2NEltYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5zW2luZGV4XS51dWlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9zd2VlcHMvYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzd2VlcFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcFByb2Nlc3NlZENvdW50Lm5leHQoaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQWxsRmlsZXNGcm9tRm9sZGVyUzMoYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBYmFuZG9uaW5nIGltcG9ydCBiZWFjdXNlIGl0IHdhcyBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1heFNjYW4gPT09IG5tYlNjYW5zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkltcG9ydCAzNjAgZG9uZVwiKTtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnN0b3ApIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvIHJlc3RhcnQgdGhlIHByb2NlZHVyZSBmcm9tIHdoZXJlIHdlIGxlZnQgb2ZcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiLCBtYXhTY2FuLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0U2RrRm9yTW9kZWwodGhpcy5tb2RlbElEKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0RGF0YSh0aGlzLnNwYWNlSUQsIDAsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vdmVUb0Zsb29yKGZsb29yTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gYnkgbmFtZVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZsb29yTmFtZSk7XHJcbiAgICAgICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoXHJcbiAgICAgICAgICAgIChmbG9vcikgPT4gZmxvb3IubmFtZSAhPT0gXCJcIiAmJiBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IubmFtZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBieSBpZFxyXG4gICAgICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICAgIGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoKGZsb29yKSA9PlxyXG4gICAgICAgICAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KTtcclxuICAgICAgICBpZiAoZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IG1vdmUgdG8gRmxvb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRGbG9vckRhdGEoXHJcbiAgICAgICAgZGVmYXV0Wm9uZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgbm9kZTogTm9kZSxcclxuICAgICk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICAgICAgY29uc3Qgem9uZXMgPSBbXTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbyh0aGlzLnNkay5Nb2RlLk1vZGUuRkxPT1JQTEFOKTtcclxuICAgICAgICBjb25zdCBubWJGbG9vcnMgPSBPYmplY3Qua2V5cyh0aGlzLmZsb29ycykubGVuZ3RoO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVG90YWwgbnVtYmVyIG9mIGZsb29yc1wiLCBubWJGbG9vcnMpO1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBubWJGbG9vcnM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnRpbmcgZmxvb3JcIiwgaW5kZXgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oaW5kZXgpLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdCg3MDApO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJhYm91dCB0byBzYXZlIHRoZSBmbG9vclwiLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lID0gYXdhaXQgdGhpcy5zYXZlRmxvb3IoZGVmYXV0Wm9uZUlELCBub2RlKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwicmVjZWl2ZWQgZmxvb3Igem9uZVwiLCB6b25lKTtcclxuICAgICAgICAgICAgICAgIHpvbmVzLnB1c2goem9uZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHpvbmVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNhdmVGbG9vcihkZWZhdXRab25lSUQ6IHN0cmluZywgbm9kZTogTm9kZSk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IuaWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZsb29yLm5hbWUgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxheWVyRmxvb3IgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKFwiRkxPT1JcIik7XHJcbiAgICAgICAgY29uc3Qgc3dlZXBzSW5mbyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwc0ZvckZsb29yID0gc3dlZXBzSW5mby5maWx0ZXIoXHJcbiAgICAgICAgICAgIChzd2VlcEluZm8pID0+IHN3ZWVwSW5mby5mbG9vckluZm8uaWQgPT09IHRoaXMuY3VycmVudEZsb29yLmlkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3dlZXBJRHM6IHN0cmluZ1tdID0gc3dlZXBzRm9yRmxvb3IubWFwKChzd2VlcCkgPT4gc3dlZXAudXVpZCk7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgICAgICAgYMOJdGFnZSAke25hbWV9IC0gJHtub2RlLm1ldGFkYXRhfWAsXHJcbiAgICAgICAgICAgIGxheWVyRmxvb3IuaWQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIGRlZmF1dFpvbmVJRCxcclxuICAgICAgICAgICAgc3dlZXBJRHMsXHJcbiAgICAgICAgICAgIG5vZGUsXHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHsgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IHRoaXMuY3VycmVudEZsb29yLnNlcXVlbmNlIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBUT0RPIGxpbmsgdG8gc2NhbnNcclxuICAgICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCB0aGlzLnNkay5SZW5kZXJlci50YWtlU2NyZWVuU2hvdChcclxuICAgICAgICAgICAgeyB3aWR0aDogNDA5NiwgaGVpZ2h0OiAyMDQ4IH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzcGFjZUlEc2hvcnQgPSB0aGlzLnNwYWNlSUQuc2xpY2UoMCwgOCk7XHJcbiAgICAgICAgYXdhaXQgdXBsb2FkQmFzZTY0SW1hZ2UoXHJcbiAgICAgICAgICAgIGJhc2U2NCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvYCxcclxuICAgICAgICAgICAgYHBsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1fJHtzcGFjZUlEc2hvcnR9YCxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBQbGFuIG9iamVjdFxyXG4gICAgICAgIGNvbnN0IHBsYW4gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9YCxcclxuICAgICAgICAgICAgYW5uZXhlOiBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9wbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9XyR7c3BhY2VJRHNob3J0fS5qcGVnYCxcclxuICAgICAgICAgICAgem9uZUlEOiB6b25lLmlkLFxyXG4gICAgICAgICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgIGlzQ3VycmVudEZvclpvbmU6IHRydWUsXHJcbiAgICAgICAgICAgIGlzTW9kaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0ltcG9ydGVkTWF0dGVycG9ydDogdHJ1ZSxcclxuICAgICAgICB9IGFzIFBsYW47XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wbGFuU2VydmljZS5jcmVhdGVQbGFuKHBsYW4pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmxvb3Igc2F2ZWRcIik7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lKTtcclxuICAgIH1cclxuXHJcbiAgICBhYmFuZG9uKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFiYW5kb25uaW5nIGltcG9ydFwiKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgIH0sIDE1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZyYW1lKCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldExheWVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TGF5ZXI+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbih0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IG1pc3Npb24ub3JnYW5pc2F0aW9uSUQ7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gYXdhaXQgdGhpcy5sYXllclNlcnZpY2UuZ2V0TGF5ZXJCeU5hbWVGb3JPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGF5ZXJzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjcmVhdGUgdGhlblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihuYW1lLCBjdXJyZW50T3JnSWQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -9076,7 +9076,6 @@ class MatterportImportService {
|
|
|
9076
9076
|
this.planService = planService;
|
|
9077
9077
|
this.stop = false;
|
|
9078
9078
|
this.importingImages = new Subject();
|
|
9079
|
-
this.intersection = new Subject();
|
|
9080
9079
|
this.sweepProcessedCount = new Subject();
|
|
9081
9080
|
this.totalSweepsCount = new Subject();
|
|
9082
9081
|
}
|
|
@@ -9146,17 +9145,10 @@ class MatterportImportService {
|
|
|
9146
9145
|
// Subscribe to Sweep data
|
|
9147
9146
|
this.sdk.Sweep.data.subscribe({
|
|
9148
9147
|
onCollectionUpdated: function upd(collection) {
|
|
9149
|
-
|
|
9150
|
-
// "the entire up-to-date collection",
|
|
9151
|
-
// collection,
|
|
9152
|
-
// );
|
|
9148
|
+
console.log("the entire up-to-date collection", collection);
|
|
9153
9149
|
this.sweeps = collection;
|
|
9154
9150
|
}.bind(this),
|
|
9155
9151
|
});
|
|
9156
|
-
// Subscribe to intersection
|
|
9157
|
-
this.sdk.Pointer.intersection.subscribe(function pointer(intersectionData) {
|
|
9158
|
-
this.intersection.next(intersectionData.position);
|
|
9159
|
-
}.bind(this));
|
|
9160
9152
|
// remove labels
|
|
9161
9153
|
this.sdk.Settings.update("labels", false)
|
|
9162
9154
|
.then(function (data) {
|
|
@@ -9171,56 +9163,62 @@ class MatterportImportService {
|
|
|
9171
9163
|
resolve(true);
|
|
9172
9164
|
}), 5000);
|
|
9173
9165
|
}))
|
|
9174
|
-
.catch((
|
|
9166
|
+
.catch((error) => {
|
|
9167
|
+
console.error(error);
|
|
9168
|
+
reject(error);
|
|
9169
|
+
});
|
|
9175
9170
|
});
|
|
9176
9171
|
});
|
|
9177
9172
|
}
|
|
9178
9173
|
importData(spaceID, surface, reloading = false, node = null) {
|
|
9179
9174
|
return __awaiter(this, void 0, void 0, function* () {
|
|
9180
9175
|
this.spaceID = spaceID;
|
|
9176
|
+
if (!this.sweeps) {
|
|
9177
|
+
Promise.reject(new Error("no sweeps initialized"));
|
|
9178
|
+
}
|
|
9181
9179
|
let floorZones = [];
|
|
9182
9180
|
const zones = yield this.zoneService.getZonesBySpace(spaceID);
|
|
9183
9181
|
const mainZone = zones.find((z) => !z.parentID);
|
|
9184
|
-
if (
|
|
9185
|
-
|
|
9186
|
-
|
|
9187
|
-
|
|
9188
|
-
|
|
9189
|
-
|
|
9190
|
-
|
|
9191
|
-
|
|
9192
|
-
|
|
9193
|
-
return Promise.resolve(true);
|
|
9194
|
-
}
|
|
9195
|
-
// check layer of building type
|
|
9196
|
-
const layerBuilding = yield this.getLayerByName("BUILDING");
|
|
9197
|
-
const createdDefaultZone = yield this.createZone(node.metadata, layerBuilding.id, surface, mainZone.id, Object.keys(this.sweeps), node);
|
|
9198
|
-
if (!createdDefaultZone) {
|
|
9199
|
-
return Promise.resolve(false);
|
|
9200
|
-
}
|
|
9201
|
-
if (this.floors) {
|
|
9202
|
-
floorZones = yield this.importFloorData(createdDefaultZone.id, node);
|
|
9203
|
-
}
|
|
9204
|
-
// console.log(floorZones);
|
|
9205
|
-
yield Promise.all(Object.keys(this.sweeps).map((key) => __awaiter(this, void 0, void 0, function* () {
|
|
9206
|
-
const sweepInfo = this.sweeps[key];
|
|
9207
|
-
const navigationInput = {
|
|
9208
|
-
matterportSweepID: sweepInfo.uuid,
|
|
9209
|
-
position: JSON.stringify(sweepInfo.position),
|
|
9210
|
-
rotation: JSON.stringify(sweepInfo.rotation),
|
|
9211
|
-
level: LevelStatus.LOW,
|
|
9212
|
-
nodeID: node.id,
|
|
9213
|
-
spaceID,
|
|
9214
|
-
};
|
|
9215
|
-
const nav = yield this.navigationService.createNavigation(navigationInput);
|
|
9216
|
-
if (!nav) {
|
|
9217
|
-
console.log("could create navigation", navigationInput.id);
|
|
9218
|
-
}
|
|
9219
|
-
})));
|
|
9182
|
+
if (!mainZone) {
|
|
9183
|
+
return Promise.reject(new Error("missing data (no main Building Zone)"));
|
|
9184
|
+
}
|
|
9185
|
+
console.log("importing data from matterport");
|
|
9186
|
+
// save sweeps data as json
|
|
9187
|
+
const json = JSON.stringify(Object.values(this.sweeps));
|
|
9188
|
+
yield uploadJsonToS3(`visits/${this.modelID}/inventory/`, json, "data.json");
|
|
9189
|
+
if (reloading) {
|
|
9190
|
+
// perform only 360 import since we are reloading
|
|
9220
9191
|
yield this.import360images();
|
|
9192
|
+
console.log("after reloading");
|
|
9221
9193
|
return Promise.resolve(true);
|
|
9222
9194
|
}
|
|
9223
|
-
|
|
9195
|
+
// check layer of building type
|
|
9196
|
+
const layerBuilding = yield this.getLayerByName("BUILDING");
|
|
9197
|
+
const createdDefaultZone = yield this.createZone(node.metadata, layerBuilding.id, surface, mainZone.id, Object.keys(this.sweeps), node);
|
|
9198
|
+
if (!createdDefaultZone) {
|
|
9199
|
+
return Promise.resolve(false);
|
|
9200
|
+
}
|
|
9201
|
+
if (this.floors) {
|
|
9202
|
+
floorZones = yield this.importFloorData(createdDefaultZone.id, node);
|
|
9203
|
+
}
|
|
9204
|
+
// console.log(floorZones);
|
|
9205
|
+
yield Promise.all(Object.keys(this.sweeps).map((key) => __awaiter(this, void 0, void 0, function* () {
|
|
9206
|
+
const sweepInfo = this.sweeps[key];
|
|
9207
|
+
const navigationInput = {
|
|
9208
|
+
matterportSweepID: sweepInfo.uuid,
|
|
9209
|
+
position: JSON.stringify(sweepInfo.position),
|
|
9210
|
+
rotation: JSON.stringify(sweepInfo.rotation),
|
|
9211
|
+
level: LevelStatus.LOW,
|
|
9212
|
+
nodeID: node.id,
|
|
9213
|
+
spaceID,
|
|
9214
|
+
};
|
|
9215
|
+
const nav = yield this.navigationService.createNavigation(navigationInput);
|
|
9216
|
+
if (!nav) {
|
|
9217
|
+
console.log("could create navigation", navigationInput.id);
|
|
9218
|
+
}
|
|
9219
|
+
})));
|
|
9220
|
+
yield this.import360images();
|
|
9221
|
+
return Promise.resolve(true);
|
|
9224
9222
|
});
|
|
9225
9223
|
}
|
|
9226
9224
|
createZone(name, layerID, surface = null, parentID = null, sweeps = [], node = null, metadata = null) {
|