Sanakey
2021-07-03 a3c13b29850a908c95116604b6327b3949801ed4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
"use strict";
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
Object.defineProperty(exports, "__esModule", { value: true });
var myValidator_1 = require("../../utils/myValidator");
var validatorInstance;
Page({
    data: {
        autosize: { maxHeight: 120, minHeight: 50 },
        validatorInstance: {},
        freeId: 0,
        formId: 710803,
        formData: {},
        doccode: '',
        fromPage: '',
        delivery: {},
        feeRateForPay: 1,
        sellerUnCheckedNames: '',
        coverImageUrl: '',
        isShowDialog: false
    },
    onLoad: function (options) {
        var doccode = options.doccode || '';
        var fromPage = options.fromPage || '';
        var settings = wx.globalData.settings;
        this.setData({
            fileUploadUrl: "/shopping/panicBuying.do?m=uploadAttachment&formid=" + this.data.formId,
            doccode: doccode,
            fromPage: fromPage,
            feeRateForPay: (settings.feeRateForWxPay + settings.platformOperatorCommissionRatio) * 100
        });
        if (doccode) {
            this.getSaveData();
        }
        else {
            var storeEdit = this.selectComponent('#store-edit');
            storeEdit.getStoreList();
        }
    },
    getSaveData: function () {
        return __awaiter(this, void 0, void 0, function () {
            var doccode, _a, error, result, data, formData;
            return __generator(this, function (_b) {
                switch (_b.label) {
                    case 0:
                        doccode = this.data.doccode;
                        return [4, wx.$utils.to(wx.$http.request({
                                url: "/shopping/panicBuying.do?m=getPanicBuyingDetail",
                                data: {
                                    doccode: doccode,
                                    isEdit: true,
                                    SellerOpenId: wx.globalData.OpenId
                                }
                            }))];
                    case 1:
                        _a = _b.sent(), error = _a[0], result = _a[1];
                        if (error) {
                            console.log(error);
                            return [2];
                        }
                        console.log(result);
                        data = result.list[0];
                        formData = {
                            promotionsTitle: data.title,
                            originalPrice: data.salesPrice,
                            promotionDescription: data.description,
                            startTime: data.effectiveStartDate,
                            endTime: data.effectiveEndDate,
                            coverImageList: (data.coverImageUrl && this.getCoverImageList(data)) || [],
                            imagesList: data.imagesUrl,
                            coverImage: data.coverImage,
                            images: data.images,
                            freeId: data.freeId,
                        };
                        this.setData(__assign({}, formData, { coverImageUrl: data.coverImageUrl, sellerList: result.sellerList, storeList: result.storeList, status: data.panicBuyingStatus, delivery: {
                                freeId: data.freeId,
                                freeName: data.freeName,
                                isRequiredAddress: data.isRequiredAddress,
                                transCosts: data.transCosts,
                            } }));
                        console.log('配送数据。。。', this.data.delivery);
                        wx.setNavigationBarTitle({
                            title: data.title
                        });
                        return [2];
                }
            });
        });
    },
    getCoverImageList: function (data) {
        var _a = data.coverImage.split(";"), unid = _a[0], seq = _a[1];
        return [{
                url: data.coverImageUrl || '',
                unid: unid,
                seq: seq
            }];
    },
    onReady: function () {
        this.initValidator();
    },
    selectedStartTime: function (event) {
        console.log('开始', event);
        this.setData({
            startTime: event.detail.startTime,
        });
    },
    selectedEndTime: function (event) {
        console.log('结束', event);
        this.setData({
            endTime: event.detail.endTime,
        });
    },
    checkPromotionsTitle: function (e) {
        var value = e.detail.value;
        console.log(e);
        validatorInstance.checkField('promotionsTitle', value);
        this.setData({
            promotionsTitle: value.trim()
        });
    },
    checkOriginalPrice: function (e) {
        var value = e.detail.value;
        console.log(e);
        validatorInstance.checkField('originalPrice', value);
        this.setData({
            originalPrice: value.trim()
        });
    },
    checkPromotionDescription: function (e) {
        var value = e.detail.value;
        console.log(e);
        validatorInstance.checkField('promotionDescription', value);
        this.setData({
            promotionDescription: value.trim()
        });
    },
    postFormData: function (data) {
        return __awaiter(this, void 0, void 0, function () {
            var _a, error, res;
            return __generator(this, function (_b) {
                switch (_b.label) {
                    case 0: return [4, wx.$utils.to(wx.$http.request({
                            url: '/shopping/panicBuying.do?m=saveDocCode',
                            data: data,
                            method: 'POST'
                        }))];
                    case 1:
                        _a = _b.sent(), error = _a[0], res = _a[1];
                        if (error) {
                            console.log(error);
                            return [2, false];
                        }
                        console.log(res);
                        if (res.state === 'success') {
                            wx.showToast({
                                title: '成功',
                                duration: 2000
                            });
                            this.setData({
                                doccode: res.DocCode
                            });
                        }
                        if (res.state === 'failed' && res.sellerCheckedBalance > 0) {
                            this.setData({
                                sellerUnCheckedNames: res.sellerUnCheckedNames,
                                isShowDialog: true
                            });
                        }
                        return [2, res.state === 'success'];
                }
            });
        });
    },
    onSubmit: wx.$utils.debounce(function () {
        this.submitHandler();
        return;
    }),
    submitHandler: function () {
        return __awaiter(this, void 0, void 0, function () {
            var timeQuantum, sellerEdit, storeEdit, fileUploader, fileUploaderMultiple, checkStartTime, checkEndTime, checkCoverImage, checkAllData, sellerList, checkDefaultSeller, storeList, checkArr, data, coverImage, coverImageUrl, images, formData;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        timeQuantum = this.selectComponent('#time-quantum');
                        sellerEdit = this.selectComponent('#seller-edit');
                        storeEdit = this.selectComponent('#store-edit');
                        fileUploader = this.selectComponent('#file-uploader');
                        fileUploaderMultiple = this.selectComponent('#file-uploader-multiple');
                        console.log('sellerEdit');
                        console.log(timeQuantum);
                        checkStartTime = timeQuantum.checkTime("startTime", "请选择计划开始时间");
                        checkEndTime = timeQuantum.checkTime("endTime", "请选择计划结束时间");
                        checkCoverImage = fileUploader.checkImages("coverImage", "请上传一张封面图");
                        checkAllData = validatorInstance.checkAllData();
                        sellerList = sellerEdit.getSellerList();
                        if (sellerList.length < 1) {
                            wx.showToast({
                                title: '请选择营销人员',
                                icon: 'none',
                                duration: 2000
                            });
                            return [2];
                        }
                        checkDefaultSeller = sellerEdit.checkDefaultSeller();
                        if (!checkDefaultSeller) {
                            wx.showToast({
                                title: '请选择默认营销人员',
                                icon: 'none',
                                duration: 2000
                            });
                            return [2];
                        }
                        console.log('checkDefaultSeller', checkDefaultSeller);
                        storeList = storeEdit.getSelectedStoreIdList();
                        console.log('待提交的门店id', storeList);
                        checkArr = [checkStartTime, checkEndTime, checkCoverImage, checkAllData];
                        data = {};
                        if (!checkArr.every(function (item) {
                            return item;
                        })) return [3, 2];
                        console.log('....提交成功');
                        coverImage = fileUploader.getCoverImageUnid();
                        coverImageUrl = fileUploader.getImgList()[0].url || '';
                        this.setData({
                            coverImageUrl: coverImageUrl
                        });
                        images = fileUploaderMultiple.getImagesUnid();
                        console.log(coverImage, images);
                        formData = this.data;
                        data = {
                            docCode: formData.doccode,
                            formId: formData.formId,
                            docStatus: 100,
                            coverImage: coverImage,
                            images: images,
                            effectiveStartDate: formData.startTime,
                            effectiveEndDate: formData.endTime,
                            freeId: formData.freeId,
                            title: formData.promotionsTitle,
                            salesPrice: Number(formData.originalPrice),
                            description: formData.promotionDescription,
                            storeList: storeList,
                            sellerList: sellerList,
                        };
                        console.log('待发布数据', data);
                        return [4, this.postFormData(data)];
                    case 1:
                        if (!(_a.sent()))
                            return [2];
                        if (this.data.fromPage == 'edit') {
                            wx.navigateBack();
                        }
                        else {
                            wx.redirectTo({
                                url: '../promotionsManageList/promotionsManageList?tab=2'
                            });
                        }
                        return [3, 3];
                    case 2:
                        wx.showToast({
                            title: '页面还有错误未处理',
                            icon: 'none',
                            duration: 2000
                        });
                        console.log('还有错误未处理');
                        _a.label = 3;
                    case 3: return [2];
                }
            });
        });
    },
    onSave: wx.$utils.debounce(function () {
        var sellerEdit = this.selectComponent('#seller-edit');
        var sellerList = sellerEdit.getSellerList();
        var storeEdit = this.selectComponent('#store-edit');
        var storeList = storeEdit.getSelectedStoreIdList();
        console.log('待提交的门店id', storeList);
        var fileUploader = this.selectComponent('#file-uploader');
        var fileUploaderMultiple = this.selectComponent('#file-uploader-multiple');
        console.log('....提交成功');
        var coverImage = fileUploader.getCoverImageUnid();
        var images = fileUploaderMultiple.getImagesUnid();
        console.log(coverImage, images);
        var formData = this.data;
        var data = {
            docCode: formData.doccode,
            formId: formData.formId,
            docStatus: 0,
            coverImage: coverImage,
            images: images,
            effectiveStartDate: formData.startTime,
            effectiveEndDate: formData.endTime,
            freeId: formData.freeId,
            title: formData.promotionsTitle,
            salesPrice: Number(formData.originalPrice),
            description: formData.promotionDescription,
            storeList: storeList,
            sellerList: sellerList,
        };
        console.log('待保存数据', data);
        this.postFormData(data);
        return;
    }),
    initValidator: function () {
        validatorInstance = new myValidator_1.default({
            rules: {
                promotionsTitle: {
                    required: true,
                    rangelength: [3, 14]
                },
                originalPrice: {
                    required: true,
                    number: true
                },
            },
            messages: {
                promotionsTitle: {
                    required: '请输入活动标题',
                    rangelength: '文字长度请控制在3到14之间'
                },
                originalPrice: {
                    required: '请输入活动报名费',
                    number: '价格必须为数字'
                },
            },
            multiCheck: true
        }, this);
        console.log('hhhh,', validatorInstance);
    },
    onShareAppMessage: function () {
        var doccode = this.data.doccode || '';
        var imageUrl = this.data.coverImageUrl || '';
        var sellerUnCheckedNames = this.data.sellerUnCheckedNames || '';
        return {
            title: "\u8BF7\u8425\u9500\u4EBA\u5458[" + sellerUnCheckedNames + "]\u9A8C\u8BC1\u8EAB\u4EFD",
            imageUrl: imageUrl,
            path: "pages/sellerVerify/sellerVerify?doccode=" + doccode,
        };
    }
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblVwQ3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2lnblVwQ3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHVEQUFrRDtBQUVsRCxJQUFJLGlCQUE2QixDQUFDO0FBRWxDLElBQUksQ0FBQztJQUNILElBQUksRUFBRTtRQUNKLFFBQVEsRUFBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtRQUMxQyxpQkFBaUIsRUFBQyxFQUFFO1FBQ3BCLE1BQU0sRUFBQyxDQUFDO1FBQ1IsTUFBTSxFQUFDLE1BQU07UUFDYixRQUFRLEVBQUUsRUFBRTtRQUNaLE9BQU8sRUFBQyxFQUFFO1FBQ1YsUUFBUSxFQUFDLEVBQUU7UUFDWCxRQUFRLEVBQUMsRUFBRTtRQUNYLGFBQWEsRUFBQyxDQUFDO1FBQ2Ysb0JBQW9CLEVBQUMsRUFBRTtRQUN2QixhQUFhLEVBQUMsRUFBRTtRQUNoQixZQUFZLEVBQUMsS0FBSztLQUNuQjtJQUNELE1BQU0sWUFBQyxPQUFPO1FBRVosSUFBSSxPQUFPLEdBQUUsT0FBTyxDQUFDLE9BQU8sSUFBRSxFQUFFLENBQUM7UUFDakMsSUFBSSxRQUFRLEdBQUUsT0FBTyxDQUFDLFFBQVEsSUFBRSxFQUFFLENBQUM7UUFDbkMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNYLGFBQWEsRUFBRSx3REFBc0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFRO1lBQ3ZGLE9BQU8sU0FBQTtZQUNQLFFBQVEsVUFBQTtZQUNSLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUMsUUFBUSxDQUFDLCtCQUErQixDQUFDLEdBQUMsR0FBRztTQUN2RixDQUFDLENBQUE7UUFDRixJQUFJLE9BQU8sRUFBRTtZ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QUksRUFBRSw2Q0FBMkMsT0FBUztTQUMzRCxDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCAqIGFzIGRheWpzIGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgTXlWYWxpZGF0b3IgZnJvbSBcIi4uLy4uL3V0aWxzL215VmFsaWRhdG9yXCI7XHJcblxyXG5sZXQgdmFsaWRhdG9ySW5zdGFuY2U6TXlWYWxpZGF0b3I7XHJcbi8vIGNvbnN0IGFwcCA9IGdldEFwcDxJQXBwT3B0aW9uPigpO1xyXG5QYWdlKHtcclxuICBkYXRhOiB7XHJcbiAgICBhdXRvc2l6ZTp7IG1heEhlaWdodDogMTIwLCBtaW5IZWlnaHQ6IDUwIH0sXHJcbiAgICB2YWxpZGF0b3JJbnN0YW5jZTp7fSxcclxuICAgIGZyZWVJZDowLFxyXG4gICAgZm9ybUlkOjcxMDgwMywgLy/lip/og73lj7fvvJrnp5LmnYAgNzEwODAyIO+8jCDmiqXlkI3pgoDnuqYgNzEwODAzIO+8jOWboui0rSA3MTA4MDRcclxuICAgIGZvcm1EYXRhOiB7fSxcclxuICAgIGRvY2NvZGU6JycsXHJcbiAgICBmcm9tUGFnZTonJyxcclxuICAgIGRlbGl2ZXJ5Ont9LFxyXG4gICAgZmVlUmF0ZUZvclBheToxLFxyXG4gICAgc2VsbGVyVW5DaGVja2VkTmFtZXM6JycsXHJcbiAgICBjb3ZlckltYWdlVXJsOicnLFxyXG4gICAgaXNTaG93RGlhbG9nOmZhbHNlXHJcbiAgfSxcclxuICBvbkxvYWQob3B0aW9ucykge1xyXG4gICAgLy8gY29uc29sZS5sb2coYXBwKTtcclxuICAgIGxldCBkb2Njb2RlID1vcHRpb25zLmRvY2NvZGV8fCcnO1xyXG4gICAgbGV0IGZyb21QYWdlID1vcHRpb25zLmZyb21QYWdlfHwnJztcclxuICAgIGxldCBzZXR0aW5ncyA9IHd4Lmdsb2JhbERhdGEuc2V0dGluZ3M7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBmaWxlVXBsb2FkVXJsOiBgL3Nob3BwaW5nL3BhbmljQnV5aW5nLmRvP209dXBsb2FkQXR0YWNobWVudCZmb3JtaWQ9JHt0aGlzLmRhdGEuZm9ybUlkfWAsXHJcbiAgICAgIGRvY2NvZGUsXHJcbiAgICAgIGZyb21QYWdlLFxyXG4gICAgICBmZWVSYXRlRm9yUGF5OiAoc2V0dGluZ3MuZmVlUmF0ZUZvcld4UGF5K3NldHRpbmdzLnBsYXRmb3JtT3BlcmF0b3JDb21taXNzaW9uUmF0aW8pKjEwMFxyXG4gICAgfSlcclxuICAgIGlmIChkb2Njb2RlKSB7XHJcbiAgICAgIHRoaXMuZ2V0U2F2ZURhdGEoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgc3RvcmVFZGl0ID0gdGhpcy5zZWxlY3RDb21wb25lbnQoJyNzdG9yZS1lZGl0Jyk7XHJcbiAgICAgIHN0b3JlRWRpdC5nZXRTdG9yZUxpc3QoKTtcclxuICAgIH1cclxuICB9LFxyXG4gIGFzeW5jIGdldFNhdmVEYXRhKCkge1xyXG4gICAgbGV0IGRvY2NvZGUgPSB0aGlzLmRhdGEuZG9jY29kZTtcclxuICAgIGxldCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCB3eC4kdXRpbHMudG8oXHJcbiAgICAgIHd4LiRodHRwLnJlcXVlc3Qoe1xyXG4gICAgICAgIHVybDpgL3Nob3BwaW5nL3BhbmljQnV5aW5nLmRvP209Z2V0UGFuaWNCdXlpbmdEZXRhaWxgLFxyXG4gICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgZG9jY29kZSxcclxuICAgICAgICAgIGlzRWRpdDp0cnVlLFxyXG4gICAgICAgICAgU2VsbGVyT3BlbklkOnd4Lmdsb2JhbERhdGEuT3BlbklkXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgaWYgKGVycm9yKXtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgbGV0IGRhdGEgPSByZXN1bHQubGlzdFswXTtcclxuICAgIGxldCBmb3JtRGF0YSA9IHtcclxuICAgICAgcHJvbW90aW9uc1RpdGxlOiBkYXRhLnRpdGxlLFxyXG4gICAgICBvcmlnaW5hbFByaWNlOiBkYXRhLnNhbGVzUHJpY2UsXHJcbiAgICAgIHByb21vdGlvbkRlc2NyaXB0aW9uOiBkYXRhLmRlc2NyaXB0aW9uLFxyXG4gICAgICBzdGFydFRpbWU6IGRhdGEuZWZmZWN0aXZlU3RhcnREYXRlLFxyXG4gICAgICBlbmRUaW1lOiBkYXRhLmVmZmVjdGl2ZUVuZERhdGUsXHJcbiAgICAgIGNvdmVySW1hZ2VMaXN0OiAoZGF0YS5jb3ZlckltYWdlVXJsJiZ0aGlzLmdldENvdmVySW1hZ2VMaXN0KGRhdGEpKXx8W10sXHJcbiAgICAgIC8vIGltYWdlc0xpc3Q6IChkYXRhLmltYWdlc1VybC5sZW5ndGg+MCYmdGhpcy5nZXRJbWFnZXNMaXN0KGRhdGEpKXx8W10sXHJcbiAgICAgIGltYWdlc0xpc3Q6IGRhdGEuaW1hZ2VzVXJsLFxyXG4gICAgICBjb3ZlckltYWdlOiBkYXRhLmNvdmVySW1hZ2UsXHJcbiAgICAgIGltYWdlczogZGF0YS5pbWFnZXMsXHJcbiAgICAgIGZyZWVJZDpkYXRhLmZyZWVJZCxcclxuICAgIH07XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAuLi5mb3JtRGF0YSxcclxuICAgICAgY292ZXJJbWFnZVVybDpkYXRhLmNvdmVySW1hZ2VVcmwsXHJcbiAgICAgIHNlbGxlckxpc3Q6cmVzdWx0LnNlbGxlckxpc3QsXHJcbiAgICAgIHN0b3JlTGlzdDpyZXN1bHQuc3RvcmVMaXN0LFxyXG4gICAgICBzdGF0dXM6ZGF0YS5wYW5pY0J1eWluZ1N0YXR1cyxcclxuICAgICAgZGVsaXZlcnk6e1xyXG4gICAgICAgIGZyZWVJZDpkYXRhLmZyZWVJZCxcclxuICAgICAgICBmcmVlTmFtZTpkYXRhLmZyZWVOYW1lLFxyXG4gICAgICAgIGlzUmVxdWlyZWRBZGRyZXNzOmRhdGEuaXNSZXF1aXJlZEFkZHJlc3MsXHJcbiAgICAgICAgdHJhbnNDb3N0czpkYXRhLnRyYW5zQ29zdHMsXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coJ+mFjemAgeaVsOaNruOAguOAguOAgicsdGhpcy5kYXRhLmRlbGl2ZXJ5KTtcclxuICAgIHd4LnNldE5hdmlnYXRpb25CYXJUaXRsZSh7XHJcbiAgICAgIHRpdGxlOiBkYXRhLnRpdGxlXHJcbiAgICB9KVxyXG4gIH0sXHJcblxyXG4gIGdldENvdmVySW1hZ2VMaXN0KGRhdGE6YW55KXtcclxuICAgIGxldCBbdW5pZCxzZXFdID0gZGF0YS5jb3ZlckltYWdlLnNwbGl0KFwiO1wiKTtcclxuICAgIHJldHVybiBbe1xyXG4gICAgICB1cmw6IGRhdGEuY292ZXJJbWFnZVVybHx8JycsXHJcbiAgICAgIHVuaWQsXHJcbiAgICAgIHNlcVxyXG4gICAgfV1cclxuICB9LFxyXG5cclxuICBvblJlYWR5KCkge1xyXG4gICAgdGhpcy5pbml0VmFsaWRhdG9yKClcclxuICB9LFxyXG4gIHNlbGVjdGVkU3RhcnRUaW1lKGV2ZW50OmFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ+W8gOWniycsZXZlbnQpO1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgc3RhcnRUaW1lOiBldmVudC5kZXRhaWwuc3RhcnRUaW1lLFxyXG4gICAgfSlcclxuICB9LFxyXG4gIHNlbGVjdGVkRW5kVGltZShldmVudDphbnkpe1xyXG4gICAgY29uc29sZS5sb2coJ+e7k+adnycsZXZlbnQpO1xyXG4gICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgZW5kVGltZTogZXZlbnQuZGV0YWlsLmVuZFRpbWUsXHJcbiAgICB9KVxyXG4gIH0sXHJcblxyXG4gIGNoZWNrUHJvbW90aW9uc1RpdGxlKGU6YW55KXtcclxuICAgIGxldCB7IHZhbHVlIH0gPSBlLmRldGFpbFxyXG4gICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB2YWxpZGF0b3JJbnN0YW5jZS5jaGVja0ZpZWxkKCdwcm9tb3Rpb25zVGl0bGUnLHZhbHVlKTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIHByb21vdGlvbnNUaXRsZTp2YWx1ZS50cmltKClcclxuICAgIH0pXHJcbiAgfSxcclxuICBjaGVja09yaWdpbmFsUHJpY2UoZTphbnkpe1xyXG4gICAgbGV0IHsgdmFsdWUgfSA9IGUuZGV0YWlsXHJcbiAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIHZhbGlkYXRvckluc3RhbmNlLmNoZWNrRmllbGQoJ29yaWdpbmFsUHJpY2UnLHZhbHVlKTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIG9yaWdpbmFsUHJpY2U6dmFsdWUudHJpbSgpXHJcbiAgICB9KVxyXG4gIH0sXHJcbiAgY2hlY2tQcm9tb3Rpb25EZXNjcmlwdGlvbihlOmFueSl7XHJcbiAgICBsZXQgeyB2YWx1ZSB9ID0gZS5kZXRhaWxcclxuICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgdmFsaWRhdG9ySW5zdGFuY2UuY2hlY2tGaWVsZCgncHJvbW90aW9uRGVzY3JpcHRpb24nLHZhbHVlKTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIHByb21vdGlvbkRlc2NyaXB0aW9uOnZhbHVlLnRyaW0oKVxyXG4gICAgfSlcclxuICB9LFxyXG5cclxuICBhc3luYyBwb3N0Rm9ybURhdGEoZGF0YTpvYmplY3Qpe1xyXG4gICAgbGV0IFtlcnJvciwgcmVzXSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgICAgICAgdXJsOicvc2hvcHBpbmcvcGFuaWNCdXlpbmcuZG8/bT1zYXZlRG9jQ29kZScsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBtZXRob2Q6J1BPU1QnXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgaWYgKHJlcy5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgdGl0bGU6ICfmiJDlip8nLFxyXG4gICAgICAgIGR1cmF0aW9uOiAyMDAwXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgZG9jY29kZTpyZXMuRG9jQ29kZVxyXG4gICAgICB9KVxyXG4gICAgICAvLyBjb25zb2xlLmxvZygn5rS75Yqo5Y2V5Y+3Jyx0aGlzLmRhdGEuZm9ybURhdGEpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlcy5zdGF0ZSA9PT0gJ2ZhaWxlZCcmJnJlcy5zZWxsZXJDaGVja2VkQmFsYW5jZT4wKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgc2VsbGVyVW5DaGVja2VkTmFtZXM6IHJlcy5zZWxsZXJVbkNoZWNrZWROYW1lcyxcclxuICAgICAgICBpc1Nob3dEaWFsb2c6IHRydWVcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiByZXMuc3RhdGUgPT09ICdzdWNjZXNzJztcclxuICB9LFxyXG4gIG9uU3VibWl0Ond4LiR1dGlscy5kZWJvdW5jZShmdW5jdGlvbih0aGlzOmFueSl7XHJcbiAgICB0aGlzLnN1Ym1pdEhhbmRsZXIoKTtcclxuICAgIHJldHVybjtcclxuICB9KSxcclxuXHJcbiAgYXN5bmMgc3VibWl0SGFuZGxlcigpIHtcclxuICAgIGxldCB0aW1lUXVhbnR1bSA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjdGltZS1xdWFudHVtJyk7XHJcbiAgICBsZXQgc2VsbGVyRWRpdCA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjc2VsbGVyLWVkaXQnKTtcclxuICAgIGxldCBzdG9yZUVkaXQgPSB0aGlzLnNlbGVjdENvbXBvbmVudCgnI3N0b3JlLWVkaXQnKTtcclxuICAgIGxldCBmaWxlVXBsb2FkZXIgPSB0aGlzLnNlbGVjdENvbXBvbmVudCgnI2ZpbGUtdXBsb2FkZXInKTtcclxuICAgIGxldCBmaWxlVXBsb2FkZXJNdWx0aXBsZSA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjZmlsZS11cGxvYWRlci1tdWx0aXBsZScpO1xyXG5cclxuXHJcbiAgICBjb25zb2xlLmxvZygnc2VsbGVyRWRpdCcsKTtcclxuICAgIGNvbnNvbGUubG9nKHRpbWVRdWFudHVtKTtcclxuXHJcbiAgICBsZXQgY2hlY2tTdGFydFRpbWUgPSB0aW1lUXVhbnR1bS5jaGVja1RpbWUoXCJzdGFydFRpbWVcIiwgXCLor7fpgInmi6norqHliJLlvIDlp4vml7bpl7RcIik7XHJcbiAgICBsZXQgY2hlY2tFbmRUaW1lID0gdGltZVF1YW50dW0uY2hlY2tUaW1lKFwiZW5kVGltZVwiLCBcIuivt+mAieaLqeiuoeWIkue7k+adn+aXtumXtFwiKTtcclxuICAgIGxldCBjaGVja0NvdmVySW1hZ2UgPSBmaWxlVXBsb2FkZXIuY2hlY2tJbWFnZXMoXCJjb3ZlckltYWdlXCIsIFwi6K+35LiK5Lyg5LiA5byg5bCB6Z2i5Zu+XCIpO1xyXG4gICAgLy8gbGV0IGNoZWNrSW1hZ2VzID0gZmlsZVVwbG9hZGVyTXVsdGlwbGUuY2hlY2tJbWFnZXMoXCJpbWFnZXNcIiwgXCLor7foh7PlsJHkuIrkvKDkuIDlvKDlm77niYdcIik7XHJcbiAgICBsZXQgY2hlY2tBbGxEYXRhID0gdmFsaWRhdG9ySW5zdGFuY2UuY2hlY2tBbGxEYXRhKCk7XHJcbiAgICAvLyBpZiAodGhpcy5kYXRhLmdvb2RzSW1nTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCfor7fkuIrkvKDkuqflk4Hlm77niYcnKTtcclxuICAgIC8vIH1cclxuICAgIGxldCBzZWxsZXJMaXN0ID0gc2VsbGVyRWRpdC5nZXRTZWxsZXJMaXN0KCk7XHJcbiAgICBpZiAoc2VsbGVyTGlzdC5sZW5ndGg8MSkge1xyXG4gICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgIHRpdGxlOiAn6K+36YCJ5oup6JCl6ZSA5Lq65ZGYJyxcclxuICAgICAgICBpY29uOiAnbm9uZScsXHJcbiAgICAgICAgZHVyYXRpb246IDIwMDBcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgY2hlY2tEZWZhdWx0U2VsbGVyID0gc2VsbGVyRWRpdC5jaGVja0RlZmF1bHRTZWxsZXIoKTtcclxuICAgIGlmICghY2hlY2tEZWZhdWx0U2VsbGVyKSB7XHJcbiAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgdGl0bGU6ICfor7fpgInmi6npu5jorqTokKXplIDkurrlkZgnLFxyXG4gICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICBkdXJhdGlvbjogMjAwMFxyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdjaGVja0RlZmF1bHRTZWxsZXInLGNoZWNrRGVmYXVsdFNlbGxlcik7XHJcblxyXG4gICAgbGV0IHN0b3JlTGlzdCA9IHN0b3JlRWRpdC5nZXRTZWxlY3RlZFN0b3JlSWRMaXN0KCk7XHJcbiAgICBjb25zb2xlLmxvZygn5b6F5o+Q5Lqk55qE6Zeo5bqXaWQnLHN0b3JlTGlzdCk7XHJcblxyXG4gICAgbGV0IGNoZWNrQXJyID0gW2NoZWNrU3RhcnRUaW1lLGNoZWNrRW5kVGltZSxjaGVja0NvdmVySW1hZ2UsY2hlY2tBbGxEYXRhXTtcclxuICAgIGxldCBkYXRhID0ge307XHJcbiAgICBpZiAoY2hlY2tBcnIuZXZlcnkoKGl0ZW0pPT57XHJcbiAgICAgIHJldHVybiBpdGVtXHJcbiAgICB9KSl7XHJcbiAgICAgIGNvbnNvbGUubG9nKCcuLi4u5o+Q5Lqk5oiQ5YqfJyk7XHJcbiAgICAgIGxldCBjb3ZlckltYWdlID0gZmlsZVVwbG9hZGVyLmdldENvdmVySW1hZ2VVbmlkKCk7XHJcbiAgICAgIGxldCBjb3ZlckltYWdlVXJsID0gZmlsZVVwbG9hZGVyLmdldEltZ0xpc3QoKVswXS51cmx8fCcnO1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIGNvdmVySW1hZ2VVcmxcclxuICAgICAgfSlcclxuICAgICAgbGV0IGltYWdlcyA9IGZpbGVVcGxvYWRlck11bHRpcGxlLmdldEltYWdlc1VuaWQoKTtcclxuICAgICAgY29uc29sZS5sb2coY292ZXJJbWFnZSxpbWFnZXMpO1xyXG4gICAgICBsZXQgZm9ybURhdGE6IGFueSA9IHRoaXMuZGF0YTtcclxuICAgICAgZGF0YSA9IHtcclxuICAgICAgICBkb2NDb2RlOiBmb3JtRGF0YS5kb2Njb2RlLCAvL+a0u+WKqOWNleWPt++8jOaWsOW7uua0u+WKqOaXtuS4uuepuuWAvO+8jOe8lui+keaXtumcgOimgWRvY2NvZGXlgLxcclxuICAgICAgICBmb3JtSWQ6IGZvcm1EYXRhLmZvcm1JZCwgLy/lip/og73lj7fvvJrnp5LmnYAgNzEwODAyIO+8jCDmiqXlkI3pgoDnuqYgNzEwODAzIO+8jOWboui0rSA3MTA4MDRcclxuICAgICAgICBkb2NTdGF0dXM6MTAwLCAvL+WNleaNrueKtuaAgTogMCDkv53lrZjvvIjotbfojYnvvIkg77yMMTAwIOWPkeW4g1xyXG4gICAgICAgIGNvdmVySW1hZ2UsXHJcbiAgICAgICAgaW1hZ2VzLFxyXG4gICAgICAgIC8vIC4uLnRoaXMuZGF0YS5mb3JtRGF0YSxcclxuXHJcbiAgICAgICAgZWZmZWN0aXZlU3RhcnREYXRlOiBmb3JtRGF0YS5zdGFydFRpbWUsXHJcbiAgICAgICAgZWZmZWN0aXZlRW5kRGF0ZTogZm9ybURhdGEuZW5kVGltZSxcclxuICAgICAgICBmcmVlSWQ6IGZvcm1EYXRhLmZyZWVJZCxcclxuICAgICAgICB0aXRsZTogZm9ybURhdGEucHJvbW90aW9uc1RpdGxlLFxyXG4gICAgICAgIC8vIG9yaWdpbmFsUHJpY2U6IE51bWJlcihmb3JtRGF0YS5vcmlnaW5hbFByaWNlKSxcclxuICAgICAgICBzYWxlc1ByaWNlOiBOdW1iZXIoZm9ybURhdGEub3JpZ2luYWxQcmljZSksXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1EYXRhLnByb21vdGlvbkRlc2NyaXB0aW9uLFxyXG4gICAgICAgIHN0b3JlTGlzdCxcclxuICAgICAgICBzZWxsZXJMaXN0LFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKCflvoXlj5HluIPmlbDmja4nLGRhdGEpO1xyXG4gICAgICBpZiAoIWF3YWl0IHRoaXMucG9zdEZvcm1EYXRhKGRhdGEpKSByZXR1cm47XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuZnJvbVBhZ2U9PSdlZGl0Jyl7XHJcbiAgICAgICAgd3gubmF2aWdhdGVCYWNrKCk7XHJcbiAgICAgIH0gZWxzZXtcclxuICAgICAgICB3eC5yZWRpcmVjdFRvKHtcclxuICAgICAgICAgIHVybDonLi4vcHJvbW90aW9uc01hbmFnZUxpc3QvcHJvbW90aW9uc01hbmFnZUxpc3Q/dGFiPTInXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgdGl0bGU6ICfpobXpnaLov5jmnInplJnor6/mnKrlpITnkIYnLFxyXG4gICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgICBkdXJhdGlvbjogMjAwMFxyXG4gICAgICB9KVxyXG4gICAgICBjb25zb2xlLmxvZygn6L+Y5pyJ6ZSZ6K+v5pyq5aSE55CGJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICB9LFxyXG5cclxuICBvblNhdmU6d3guJHV0aWxzLmRlYm91bmNlKGZ1bmN0aW9uKHRoaXM6YW55KXtcclxuICAgIGxldCBzZWxsZXJFZGl0ID0gdGhpcy5zZWxlY3RDb21wb25lbnQoJyNzZWxsZXItZWRpdCcpO1xyXG4gICAgbGV0IHNlbGxlckxpc3QgPSBzZWxsZXJFZGl0LmdldFNlbGxlckxpc3QoKTtcclxuICAgIGxldCBzdG9yZUVkaXQgPSB0aGlzLnNlbGVjdENvbXBvbmVudCgnI3N0b3JlLWVkaXQnKTtcclxuICAgIGxldCBzdG9yZUxpc3QgPSBzdG9yZUVkaXQuZ2V0U2VsZWN0ZWRTdG9yZUlkTGlzdCgpO1xyXG4gICAgY29uc29sZS5sb2coJ+W+heaPkOS6pOeahOmXqOW6l2lkJyxzdG9yZUxpc3QpO1xyXG4gICAgbGV0IGZpbGVVcGxvYWRlciA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjZmlsZS11cGxvYWRlcicpO1xyXG4gICAgbGV0IGZpbGVVcGxvYWRlck11bHRpcGxlID0gdGhpcy5zZWxlY3RDb21wb25lbnQoJyNmaWxlLXVwbG9hZGVyLW11bHRpcGxlJyk7XHJcbiAgICBjb25zb2xlLmxvZygnLi4uLuaPkOS6pOaIkOWKnycpO1xyXG4gICAgbGV0IGNvdmVySW1hZ2UgPSBmaWxlVXBsb2FkZXIuZ2V0Q292ZXJJbWFnZVVuaWQoKTtcclxuICAgIGxldCBpbWFnZXMgPSBmaWxlVXBsb2FkZXJNdWx0aXBsZS5nZXRJbWFnZXNVbmlkKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coY292ZXJJbWFnZSxpbWFnZXMpO1xyXG4gICAgbGV0IGZvcm1EYXRhOiBhbnkgPSB0aGlzLmRhdGE7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgZG9jQ29kZTogZm9ybURhdGEuZG9jY29kZSwgLy/mtLvliqjljZXlj7fvvIzmlrDlu7rmtLvliqjml7bkuLrnqbrlgLzvvIznvJbovpHml7bpnIDopoFkb2Njb2Rl5YC8XHJcbiAgICAgIGZvcm1JZDogZm9ybURhdGEuZm9ybUlkLCAvL+WKn+iDveWPt++8muenkuadgCA3MTA4MDIg77yMIOaKpeWQjemCgOe6piA3MTA4MDMg77yM5Zui6LStIDcxMDgwNFxyXG4gICAgICBkb2NTdGF0dXM6IDAsIC8v5Y2V5o2u54q25oCBOiAwIOS/neWtmO+8iOi1t+iNie+8iSDvvIwxMDAg5Y+R5biDXHJcbiAgICAgIGNvdmVySW1hZ2UsXHJcbiAgICAgIGltYWdlcyxcclxuICAgICAgLy8gLi4udGhpcy5kYXRhLmZvcm1EYXRhLFxyXG5cclxuICAgICAgZWZmZWN0aXZlU3RhcnREYXRlOiBmb3JtRGF0YS5zdGFydFRpbWUsXHJcbiAgICAgIGVmZmVjdGl2ZUVuZERhdGU6IGZvcm1EYXRhLmVuZFRpbWUsXHJcbiAgICAgIGZyZWVJZDogZm9ybURhdGEuZnJlZUlkLFxyXG4gICAgICB0aXRsZTogZm9ybURhdGEucHJvbW90aW9uc1RpdGxlLFxyXG4gICAgICAvLyBvcmlnaW5hbFByaWNlOiBOdW1iZXIoZm9ybURhdGEub3JpZ2luYWxQcmljZSl8fDAsXHJcbiAgICAgIHNhbGVzUHJpY2U6IE51bWJlcihmb3JtRGF0YS5vcmlnaW5hbFByaWNlKSxcclxuICAgICAgZGVzY3JpcHRpb246IGZvcm1EYXRhLnByb21vdGlvbkRlc2NyaXB0aW9uLFxyXG4gICAgICBzdG9yZUxpc3QsXHJcbiAgICAgIHNlbGxlckxpc3QsXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygn5b6F5L+d5a2Y5pWw5o2uJyxkYXRhKTtcclxuICAgIHRoaXMucG9zdEZvcm1EYXRhKGRhdGEpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH0pLFxyXG4gIC8vIG9uSW5wdXRTdGFydERhdGUoKSB7fSxcclxuICAvLyBvbklucHV0RW5kRGF0ZSgpIHt9LFxyXG4gIGluaXRWYWxpZGF0b3IoKXtcclxuICAgIC8vIOWunuS+i+WMllxyXG4gICAgdmFsaWRhdG9ySW5zdGFuY2UgPSBuZXcgTXlWYWxpZGF0b3Ioe1xyXG4gICAgICBydWxlczoge1xyXG4gICAgICAgIHByb21vdGlvbnNUaXRsZToge1xyXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICByYW5nZWxlbmd0aDogWzMsMTRdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcmlnaW5hbFByaWNlOiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgIG51bWJlcjogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gcHJvbW90aW9uRGVzY3JpcHRpb246IHtcclxuICAgICAgICAvLyAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICAgICAgLy8gfSxcclxuICAgICAgfSxcclxuICAgICAgbWVzc2FnZXM6IHtcclxuICAgICAgICBwcm9tb3Rpb25zVGl0bGU6IHtcclxuICAgICAgICAgIHJlcXVpcmVkOiAn6K+36L6T5YWl5rS75Yqo5qCH6aKYJyxcclxuICAgICAgICAgIHJhbmdlbGVuZ3RoOiAn5paH5a2X6ZW/5bqm6K+35o6n5Yi25ZyoM+WIsDE05LmL6Ze0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3JpZ2luYWxQcmljZToge1xyXG4gICAgICAgICAgcmVxdWlyZWQ6ICfor7fovpPlhaXmtLvliqjmiqXlkI3otLknLFxyXG4gICAgICAgICAgbnVtYmVyOiAn5Lu35qC85b+F6aG75Li65pWw5a2XJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gcHJvbW90aW9uRGVzY3JpcHRpb246IHtcclxuICAgICAgICAvLyAgIHJlcXVpcmVkOiAn6K+36L6T5YWl5rS75Yqo5o+P6L+wJ1xyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIG11bHRpQ2hlY2s6dHJ1ZVxyXG4gICAgfSx0aGlzKVxyXG4gICAgLy8gdGhpcy5zZXREYXRhKHtcclxuICAgIC8vICAgdmFsaWRhdG9ySW5zdGFuY2VcclxuICAgIC8vIH0pXHJcbiAgICBjb25zb2xlLmxvZygnaGhoaCwnLHZhbGlkYXRvckluc3RhbmNlKTtcclxuICB9LFxyXG4gIG9uU2hhcmVBcHBNZXNzYWdlKCkge1xyXG4gICAgbGV0IGRvY2NvZGU6c3RyaW5nID0gdGhpcy5kYXRhLmRvY2NvZGUgfHwgJyc7XHJcbiAgICAvLyBsZXQgdGl0bGU6c3RyaW5nID0gdGhpcy5kYXRhLnByb21vdGlvbnNEYXRhLnRpdGxlIHx8ICcnO1xyXG4gICAgbGV0IGltYWdlVXJsOnN0cmluZyA9IHRoaXMuZGF0YS5jb3ZlckltYWdlVXJsIHx8ICcnO1xyXG4gICAgbGV0IHNlbGxlclVuQ2hlY2tlZE5hbWVzOnN0cmluZyA9IHRoaXMuZGF0YS5zZWxsZXJVbkNoZWNrZWROYW1lcyB8fCAnJztcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIHRpdGxlOiB1dGlscy5nZXRTaGFyZVRpdGxlKCksXHJcbiAgICAgIHRpdGxlOiBg6K+36JCl6ZSA5Lq65ZGYWyR7c2VsbGVyVW5DaGVja2VkTmFtZXN9XemqjOivgei6q+S7vWAsXHJcbiAgICAgIGltYWdlVXJsLFxyXG4gICAgICBwYXRoOiBgcGFnZXMvc2VsbGVyVmVyaWZ5L3NlbGxlclZlcmlmeT9kb2Njb2RlPSR7ZG9jY29kZX1gLFxyXG4gICAgfVxyXG4gIH1cclxufSlcclxuZXhwb3J0IHt9XHJcbiJdfQ==