Sanakey
2021-07-09 3fc241d02fb8b671289de3d9d80bf848349c04d4
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
"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 };
    }
};
var _this_1 = this;
Object.defineProperty(exports, "__esModule", { value: true });
var getSaveData = function (_this) { return __awaiter(_this_1, void 0, void 0, function () {
    var formId, doccode, _a, error, result, data, formData;
    return __generator(this, function (_b) {
        switch (_b.label) {
            case 0:
                formId = _this.data.formId;
                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,
                    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,
                };
                if (formId == 710802) {
                    formData.originalPrice = data.originalPrice;
                    formData.flashSalePrice = data.salesPrice;
                    formData.flashSaleTotal = data.quantity;
                    formData.flashSaleLimit = data.restrictBuyingQuantity;
                }
                if (formId == 710803) {
                    formData.originalPrice = data.salesPrice;
                }
                if (formId == 710804) {
                    formData.originalPrice = data.originalPrice;
                    formData.flashSalePrice = data.salesPrice;
                    formData.flashSaleTotal = data.numberOfTeam;
                }
                _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];
        }
    });
}); };
exports.getSaveData = getSaveData;
var postFormData = function (_this, data) { return __awaiter(_this_1, 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'];
        }
    });
}); };
var promotionsSubmitHandler = function (_this, validatorInstance) { return __awaiter(_this_1, void 0, void 0, function () {
    var formData, type, timeQuantum, sellerEdit, storeEdit, fileUploader, fileUploaderMultiple, checkTransCosts, transCosts, deliveryMethod, checkStartTime, checkEndTime, checkCoverImage, checkAllData, sellerList, storeList, checkDefaultSeller, checkArr, data, coverImage, coverImageUrl, images, selectedTime, rules, _i, rules_1, rule, errorMsg;
    return __generator(this, function (_a) {
        switch (_a.label) {
            case 0:
                formData = _this.data;
                type = {
                    710802: 1,
                    710803: 2,
                    710804: 3,
                };
                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');
                checkTransCosts = true;
                transCosts = 0;
                if (formData.formId == 710802 || formData.formId == 710804) {
                    deliveryMethod = _this.selectComponent('#delivery-method');
                    if (deliveryMethod.data.isRequiredAddress) {
                        checkTransCosts = deliveryMethod.checkFields();
                        transCosts = Number(deliveryMethod.data.transCosts);
                    }
                }
                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];
                }
                storeList = storeEdit.getSelectedStoreIdList();
                console.log('待提交的门店id', storeList);
                checkDefaultSeller = sellerEdit.checkDefaultSeller();
                if (!checkDefaultSeller) {
                    wx.showToast({
                        title: '请选择默认营销人员',
                        icon: 'none',
                        duration: 2000
                    });
                    return [2];
                }
                console.log('checkDefaultSeller', checkDefaultSeller);
                checkArr = [checkTransCosts, 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, coverImageUrl);
                selectedTime = timeQuantum.getSelectedTime();
                data = {
                    docCode: formData.doccode,
                    formId: formData.formId,
                    docStatus: 100,
                    coverImage: coverImage,
                    images: images,
                    effectiveStartDate: formData.startTime || selectedTime.startTime,
                    effectiveEndDate: formData.endTime || selectedTime.endTime,
                    freeId: formData.freeId,
                    title: formData.promotionsTitle,
                    description: formData.promotionDescription || '',
                    storeList: storeList,
                    sellerList: sellerList,
                };
                if (formData.formId == 710802) {
                    data.transCosts = transCosts;
                    data.originalPrice = Number(formData.originalPrice);
                    data.quantity = Number(formData.flashSaleTotal);
                    data.salesPrice = Number(formData.flashSalePrice);
                    data.restrictBuyingQuantity = Number(formData.flashSaleLimit);
                }
                if (formData.formId == 710803) {
                    data.salesPrice = Number(formData.originalPrice);
                }
                if (formData.formId == 710804) {
                    data.transCosts = transCosts;
                    data.originalPrice = Number(formData.originalPrice);
                    data.salesPrice = Number(formData.flashSalePrice);
                    data.numberOfTeam = Number(formData.flashSaleTotal);
                }
                console.log('待发布数据', data);
                return [4, postFormData(_this, data)];
            case 1:
                if (!(_a.sent()))
                    return [2];
                if (_this.data.fromPage == 'edit') {
                    wx.navigateBack();
                }
                else {
                    wx.redirectTo({
                        url: "../promotionsManageList/promotionsManageList?tab=" + type[formData.formId]
                    });
                }
                return [3, 3];
            case 2:
                console.log('还有错误未处理');
                if (!checkCoverImage) {
                    wx.$utils.scrollToError('#file-uploader', '请上传一张封面图');
                    return [2];
                }
                if (!checkAllData) {
                    rules = validatorInstance.getRulers();
                    for (_i = 0, rules_1 = rules; _i < rules_1.length; _i++) {
                        rule = rules_1[_i];
                        errorMsg = _this.data[rule + "Error"];
                        if (errorMsg) {
                            wx.$utils.scrollToError("#" + rule, errorMsg);
                            break;
                        }
                    }
                    return [2];
                }
                if (!checkStartTime) {
                    wx.$utils.scrollToError('#time-quantum', '开始时间需小于结束时间');
                }
                _a.label = 3;
            case 3: return [2];
        }
    });
}); };
exports.promotionsSubmitHandler = promotionsSubmitHandler;
var promotionsSaveHandler = function (_this) { return __awaiter(_this_1, void 0, void 0, function () {
    var formData, timeQuantum, sellerEdit, sellerList, storeEdit, storeList, fileUploader, fileUploaderMultiple, coverImage, images, transCosts, deliveryMethod, selectedTime, data;
    return __generator(this, function (_a) {
        switch (_a.label) {
            case 0:
                formData = _this.data;
                timeQuantum = _this.selectComponent('#time-quantum');
                sellerEdit = _this.selectComponent('#seller-edit');
                sellerList = sellerEdit.getSellerList();
                storeEdit = _this.selectComponent('#store-edit');
                storeList = storeEdit.getSelectedStoreIdList();
                console.log('待提交的门店id', storeList);
                fileUploader = _this.selectComponent('#file-uploader');
                fileUploaderMultiple = _this.selectComponent('#file-uploader-multiple');
                console.log('....提交成功');
                coverImage = fileUploader.getCoverImageUnid();
                images = fileUploaderMultiple.getImagesUnid();
                transCosts = 0;
                if (formData.formId == 710802 || formData.formId == 710804) {
                    deliveryMethod = _this.selectComponent('#delivery-method');
                    if (deliveryMethod.data.isRequiredAddress) {
                        transCosts = Number(deliveryMethod.data.transCosts);
                    }
                }
                console.log(coverImage, images);
                selectedTime = timeQuantum.getSelectedTime();
                data = {
                    docCode: formData.doccode,
                    formId: formData.formId,
                    docStatus: 0,
                    coverImage: coverImage,
                    images: images,
                    effectiveStartDate: formData.startTime || selectedTime.startTime,
                    effectiveEndDate: formData.endTime || selectedTime.endTime,
                    freeId: formData.freeId,
                    title: formData.promotionsTitle,
                    description: formData.promotionDescription,
                    storeList: storeList,
                    sellerList: sellerList,
                };
                if (formData.formId == 710802) {
                    data.transCosts = transCosts;
                    data.originalPrice = Number(formData.originalPrice) || 0;
                    data.quantity = Number(formData.flashSaleTotal) || 0;
                    data.salesPrice = Number(formData.flashSalePrice) || 0;
                    data.restrictBuyingQuantity = Number(formData.flashSaleLimit) || 0;
                }
                if (formData.formId == 710803) {
                    data.salesPrice = Number(formData.originalPrice) || 0;
                }
                if (formData.formId == 710804) {
                    data.transCosts = transCosts;
                    data.originalPrice = Number(formData.originalPrice) || 0;
                    data.salesPrice = Number(formData.flashSalePrice) || 0;
                    data.numberOfTeam = Number(formData.flashSaleTotal) || 0;
                }
                console.log('待保存数据', data);
                return [4, postFormData(_this, data)];
            case 1:
                if (!(_a.sent()))
                    return [2];
                wx.showModal({
                    title: '提示',
                    content: '保存成功',
                    confirmText: '前往预览',
                    cancelText: '留在此处',
                    success: function (res) {
                        if (res.confirm) {
                            console.log('用户点击确定');
                            wx.redirectTo({
                                url: "/pages/detail/detail?from=promotionsDraft&doccode=" + _this.data.doccode
                            });
                        }
                        else if (res.cancel) {
                            console.log('用户点击取消');
                        }
                    }
                });
                return [2];
        }
    });
}); };
exports.promotionsSaveHandler = promotionsSaveHandler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbW90aW9uc0NyZWF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb21vdGlvbnNDcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxtQkFxVUE7O0FBclVBLElBQU0sV0FBVyxHQUFHLFVBQU8sS0FBUzs7Ozs7Z0JBQzlCLE1BQU0sR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDaEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNYLFdBQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3RDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO3dCQUNmLEdBQUcsRUFBQyxpREFBaUQ7d0JBQ3JELElBQUksRUFBQzs0QkFDSCxPQUFPLFNBQUE7NEJBQ1AsTUFBTSxFQUFDLElBQUk7NEJBQ1gsWUFBWSxFQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTTt5QkFDbEM7cUJBQ0YsQ0FBQyxDQUNILEVBQUE7O2dCQVRHLEtBQWtCLFNBU3JCLEVBVEksS0FBSyxRQUFBLEVBQUUsTUFBTSxRQUFBO2dCQVVsQixJQUFJLEtBQUssRUFBQztvQkFDUixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQixXQUFPO2lCQUNSO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hCLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixRQUFRLEdBQU87b0JBQ2pCLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDM0Isb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQ3RDLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCO29CQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFD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PSBhc3luYyAoX3RoaXM6YW55KSA9PntcclxuICBsZXQgZm9ybUlkOiBhbnkgPSBfdGhpcy5kYXRhLmZvcm1JZDtcclxuICBsZXQgZG9jY29kZSA9IF90aGlzLmRhdGEuZG9jY29kZTtcclxuICBsZXQgW2Vycm9yLCByZXN1bHRdID0gYXdhaXQgd3guJHV0aWxzLnRvKFxyXG4gICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgICAgIHVybDpgL3Nob3BwaW5nL3BhbmljQnV5aW5nLmRvP209Z2V0UGFuaWNCdXlpbmdEZXRhaWxgLFxyXG4gICAgICBkYXRhOntcclxuICAgICAgICBkb2Njb2RlLFxyXG4gICAgICAgIGlzRWRpdDp0cnVlLFxyXG4gICAgICAgIFNlbGxlck9wZW5JZDp3eC5nbG9iYWxEYXRhLk9wZW5JZFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIClcclxuICBpZiAoZXJyb3Ipe1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gIGxldCBkYXRhID0gcmVzdWx0Lmxpc3RbMF07XHJcbiAgbGV0IGZvcm1EYXRhOmFueSA9IHtcclxuICAgIHByb21vdGlvbnNUaXRsZTogZGF0YS50aXRsZSxcclxuICAgIHByb21vdGlvbkRlc2NyaXB0aW9uOiBkYXRhLmRlc2NyaXB0aW9uLFxyXG4gICAgc3RhcnRUaW1lOiBkYXRhLmVmZmVjdGl2ZVN0YXJ0RGF0ZSxcclxuICAgIGVuZFRpbWU6IGRhdGEuZWZmZWN0aXZlRW5kRGF0ZSxcclxuICAgIGNvdmVySW1hZ2VMaXN0OiAoZGF0YS5jb3ZlckltYWdlVXJsJiZfdGhpcy5nZXRDb3ZlckltYWdlTGlzdChkYXRhKSl8fFtdLFxyXG4gICAgLy8gaW1hZ2VzTGlzdDogKGRhdGEuaW1hZ2VzVXJsLmxlbmd0aD4wJiZfdGhpcy5nZXRJbWFnZXNMaXN0KGRhdGEpKXx8W10sXHJcbiAgICBpbWFnZXNMaXN0OiBkYXRhLmltYWdlc1VybCxcclxuICAgIGNvdmVySW1hZ2U6IGRhdGEuY292ZXJJbWFnZSxcclxuICAgIGltYWdlczogZGF0YS5pbWFnZXMsXHJcbiAgICBmcmVlSWQ6ZGF0YS5mcmVlSWQsXHJcbiAgfTtcclxuICBpZiAoZm9ybUlkPT03MTA4MDIpe1xyXG4gICAgZm9ybURhdGEub3JpZ2luYWxQcmljZT1kYXRhLm9yaWdpbmFsUHJpY2U7XHJcbiAgICBmb3JtRGF0YS5mbGFzaFNhbGVQcmljZT0gZGF0YS5zYWxlc1ByaWNlO1xyXG4gICAgZm9ybURhdGEuZmxhc2hTYWxlVG90YWw9IGRhdGEucXVhbnRpdHk7XHJcbiAgICBmb3JtRGF0YS5mbGFzaFNhbGVMaW1pdD0gZGF0YS5yZXN0cmljdEJ1eWluZ1F1YW50aXR5O1xyXG4gIH1cclxuICBpZiAoZm9ybUlkPT03MTA4MDMpe1xyXG4gICAgZm9ybURhdGEub3JpZ2luYWxQcmljZT1kYXRhLnNhbGVzUHJpY2U7XHJcbiAgfVxyXG4gIGlmIChmb3JtSWQ9PTcxMDgwNCl7XHJcbiAgICBmb3JtRGF0YS5vcmlnaW5hbFByaWNlPWRhdGEub3JpZ2luYWxQcmljZTtcclxuICAgIGZvcm1EYXRhLmZsYXNoU2FsZVByaWNlPSBkYXRhLnNhbGVzUHJpY2U7XHJcbiAgICBmb3JtRGF0YS5mbGFzaFNhbGVUb3RhbD0gZGF0YS5udW1iZXJPZlRlYW07XHJcbiAgfVxyXG4gIF90aGlzLnNldERhdGEoe1xyXG4gICAgLi4uZm9ybURhdGEsXHJcbiAgICBjb3ZlckltYWdlVXJsOmRhdGEuY292ZXJJbWFnZVVybCxcclxuICAgIC8vIFtgZWZmZWN0aXZlU3RhcnREYXRlYF06IGRhdGEuZWZmZWN0aXZlU3RhcnREYXRlLFxyXG4gICAgLy8gW2BlZmZlY3RpdmVFbmREYXRlYF06IGRhdGEuZWZmZWN0aXZlRW5kRGF0ZSxcclxuICAgIC8vIFtgZnJlZUlkYF06IGRhdGEuZnJlZUlkLFxyXG4gICAgLy8gW2B0aXRsZWBdOiBkYXRhLnRpdGxlLFxyXG4gICAgLy8gW2BvcmlnaW5hbFByaWNlYF06IGRhdGEub3JpZ2luYWxQcmljZSxcclxuICAgIC8vIFtgc2FsZXNQcmljZWBdOiBkYXRhLnNhbGVzUHJpY2UsXHJcbiAgICAvLyBbYHF1YW50aXR5YF06IGRhdGEucXVhbnRpdHksXHJcbiAgICAvLyBbYHJlc3RyaWN0QnV5aW5nUXVhbnRpdHlgXTogZGF0YS5yZXN0cmljdEJ1eWluZ1F1YW50aXR5LFxyXG4gICAgLy8gW2BkZXNjcmlwdGlvbmBdOiBkYXRhLmRlc2NyaXB0aW9uLFxyXG4gICAgc2VsbGVyTGlzdDpyZXN1bHQuc2VsbGVyTGlzdCxcclxuICAgIHN0b3JlTGlzdDpyZXN1bHQuc3RvcmVMaXN0LFxyXG4gICAgc3RhdHVzOmRhdGEucGFuaWNCdXlpbmdTdGF0dXMsXHJcbiAgICBkZWxpdmVyeTp7XHJcbiAgICAgIGZyZWVJZDpkYXRhLmZyZWVJZCxcclxuICAgICAgZnJlZU5hbWU6ZGF0YS5mcmVlTmFtZSxcclxuICAgICAgaXNSZXF1aXJlZEFkZHJlc3M6ZGF0YS5pc1JlcXVpcmVkQWRkcmVzcyxcclxuICAgICAgdHJhbnNDb3N0czpkYXRhLnRyYW5zQ29zdHMsXHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgY29uc29sZS5sb2coJ+mFjemAgeaVsOaNruOAguOAguOAgicsX3RoaXMuZGF0YS5kZWxpdmVyeSk7XHJcbiAgd3guc2V0TmF2aWdhdGlvbkJhclRpdGxlKHtcclxuICAgIHRpdGxlOiBkYXRhLnRpdGxlXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgcG9zdEZvcm1EYXRhID0gYXN5bmMgKF90aGlzOmFueSxkYXRhOm9iamVjdCkgPT57XHJcbiAgbGV0IFtlcnJvciwgcmVzXSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgIHd4LiRodHRwLnJlcXVlc3Qoe1xyXG4gICAgICB1cmw6Jy9zaG9wcGluZy9wYW5pY0J1eWluZy5kbz9tPXNhdmVEb2NDb2RlJyxcclxuICAgICAgZGF0YSxcclxuICAgICAgbWV0aG9kOidQT1NUJ1xyXG4gICAgfSlcclxuICApXHJcbiAgaWYgKGVycm9yKSB7XHJcbiAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgaWYgKHJlcy5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICB0aXRsZTogJ+aIkOWKnycsXHJcbiAgICAgIGR1cmF0aW9uOiAyMDAwXHJcbiAgICB9KVxyXG4gICAgX3RoaXMuc2V0RGF0YSh7XHJcbiAgICAgIGRvY2NvZGU6cmVzLkRvY0NvZGVcclxuICAgIH0pXHJcbiAgICAvLyBjb25zb2xlLmxvZygn5rS75Yqo5Y2V5Y+3JyxfdGhpcy5kYXRhLmZvcm1EYXRhKTtcclxuICB9XHJcbiAgaWYgKHJlcy5zdGF0ZSA9PT0gJ2ZhaWxlZCcmJnJlcy5zZWxsZXJDaGVja2VkQmFsYW5jZT4wKSB7XHJcbiAgICBfdGhpcy5zZXREYXRhKHtcclxuICAgICAgc2VsbGVyVW5DaGVja2VkTmFtZXM6IHJlcy5zZWxsZXJVbkNoZWNrZWROYW1lcyxcclxuICAgICAgaXNTaG93RGlhbG9nOiB0cnVlXHJcbiAgICB9KVxyXG4gIH1cclxuICByZXR1cm4gcmVzLnN0YXRlID09PSAnc3VjY2Vzcyc7XHJcbn1cclxuY29uc3QgcHJvbW90aW9uc1N1Ym1pdEhhbmRsZXIgPSBhc3luYyAoX3RoaXM6YW55LHZhbGlkYXRvckluc3RhbmNlOmFueSkgPT57XHJcbiAgLy8gbGV0IHtfdGhpcyx2YWxpZGF0b3JJbnN0YW5jZX0gPSBvYmo7XHJcbiAgbGV0IGZvcm1EYXRhOiBhbnkgPSBfdGhpcy5kYXRhO1xyXG4gIGxldCB0eXBlID0ge1xyXG4gICAgNzEwODAyOiAxLCAvL+enkuadgFxyXG4gICAgNzEwODAzOiAyLCAvL+aKpeWQjVxyXG4gICAgNzEwODA0OiAzLCAvL+Wboui0rVxyXG4gIH1cclxuICBsZXQgdGltZVF1YW50dW0gPSBfdGhpcy5zZWxlY3RDb21wb25lbnQoJyN0aW1lLXF1YW50dW0nKTtcclxuICBsZXQgc2VsbGVyRWRpdCA9IF90aGlzLnNlbGVjdENvbXBvbmVudCgnI3NlbGxlci1lZGl0Jyk7XHJcbiAgbGV0IHN0b3JlRWRpdCA9IF90aGlzLnNlbGVjdENvbXBvbmVudCgnI3N0b3JlLWVkaXQnKTtcclxuICBsZXQgZmlsZVVwbG9hZGVyID0gX3RoaXMuc2VsZWN0Q29tcG9uZW50KCcjZmlsZS11cGxvYWRlcicpO1xyXG4gIGxldCBmaWxlVXBsb2FkZXJNdWx0aXBsZSA9IF90aGlzLnNlbGVjdENvbXBvbmVudCgnI2ZpbGUtdXBsb2FkZXItbXVsdGlwbGUnKTtcclxuXHJcbiAgbGV0IGNoZWNrVHJhbnNDb3N0cyA9IHRydWU7XHJcbiAgbGV0IHRyYW5zQ29zdHMgPSAwO1xyXG4gIGlmIChmb3JtRGF0YS5mb3JtSWQ9PTcxMDgwMnx8Zm9ybURhdGEuZm9ybUlkPT03MTA4MDQpe1xyXG4gICAgbGV0IGRlbGl2ZXJ5TWV0aG9kID0gX3RoaXMuc2VsZWN0Q29tcG9uZW50KCcjZGVsaXZlcnktbWV0aG9kJyk7XHJcbiAgICBpZiAoZGVsaXZlcnlNZXRob2QuZGF0YS5pc1JlcXVpcmVkQWRkcmVzcyl7XHJcbiAgICAgIGNoZWNrVHJhbnNDb3N0cyA9IGRlbGl2ZXJ5TWV0aG9kLmNoZWNrRmllbGRzKCk7XHJcbiAgICAgIHRyYW5zQ29zdHMgPSBOdW1iZXIoZGVsaXZlcnlNZXRob2QuZGF0YS50cmFuc0Nvc3RzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnNvbGUubG9nKHRpbWVRdWFudHVtKTtcclxuXHJcbiAgbGV0IGNoZWNrU3RhcnRUaW1lID0gdGltZVF1YW50dW0uY2hlY2tUaW1lKFwic3RhcnRUaW1lXCIpO1xyXG4gIGxldCBjaGVja0VuZFRpbWUgPSB0aW1lUXVhbnR1bS5jaGVja1RpbWUoXCJlbmRUaW1lXCIpO1xyXG4gIGxldCBjaGVja0NvdmVySW1hZ2UgPSBmaWxlVXBsb2FkZXIuY2hlY2tJbWFnZXMoXCJjb3ZlckltYWdlXCIsIFwi6K+35LiK5Lyg5LiA5byg5bCB6Z2i5Zu+XCIpO1xyXG4gIC8vIGxldCBjaGVja0ltYWdlcyA9IGZpbGVVcGxvYWRlck11bHRpcGxlLmNoZWNrSW1hZ2VzKFwiaW1hZ2VzXCIsIFwi6K+36Iez5bCR5LiK5Lyg5LiA5byg5Zu+54mHXCIpO1xyXG4gIGxldCBjaGVja0FsbERhdGEgPSB2YWxpZGF0b3JJbnN0YW5jZS5jaGVja0FsbERhdGEoKTtcclxuICAvLyBpZiAoX3RoaXMuZGF0YS5nb29kc0ltZ0xpc3QubGVuZ3RoIDwgMSkge1xyXG4gIC8vICAgY29uc29sZS5sb2coJ+ivt+S4iuS8oOS6p+WTgeWbvueJhycpO1xyXG4gIC8vIH1cclxuICBsZXQgc2VsbGVyTGlzdCA9IHNlbGxlckVkaXQuZ2V0U2VsbGVyTGlzdCgpO1xyXG4gIGlmIChzZWxsZXJMaXN0Lmxlbmd0aDwxKSB7XHJcbiAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICB0aXRsZTogJ+ivt+mAieaLqeiQpemUgOS6uuWRmCcsXHJcbiAgICAgIGljb246ICdub25lJyxcclxuICAgICAgZHVyYXRpb246IDIwMDBcclxuICAgIH0pXHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgbGV0IHN0b3JlTGlzdCA9IHN0b3JlRWRpdC5nZXRTZWxlY3RlZFN0b3JlSWRMaXN0KCk7XHJcbiAgY29uc29sZS5sb2coJ+W+heaPkOS6pOeahOmXqOW6l2lkJyxzdG9yZUxpc3QpO1xyXG4gIGxldCBjaGVja0RlZmF1bHRTZWxsZXIgPSBzZWxsZXJFZGl0LmNoZWNrRGVmYXVsdFNlbGxlcigpO1xyXG4gIGlmICghY2hlY2tEZWZhdWx0U2VsbGVyKSB7XHJcbiAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICB0aXRsZTogJ+ivt+mAieaLqem7mOiupOiQpemUgOS6uuWRmCcsXHJcbiAgICAgIGljb246ICdub25lJyxcclxuICAgICAgZHVyYXRpb246IDIwMDBcclxuICAgIH0pXHJcbiAgICByZXR1cm5cclxuICB9XHJcbiAgY29uc29sZS5sb2coJ2NoZWNrRGVmYXVsdFNlbGxlcicsY2hlY2tEZWZhdWx0U2VsbGVyKTtcclxuICBsZXQgY2hlY2tBcnIgPSBbY2hlY2tUcmFuc0Nvc3RzLGNoZWNrU3RhcnRUaW1lLGNoZWNrRW5kVGltZSxjaGVja0NvdmVySW1hZ2UsY2hlY2tBbGxEYXRhXTtcclxuICBsZXQgZGF0YSA9IHt9IGFzIGFueTtcclxuICBpZiAoY2hlY2tBcnIuZXZlcnkoKGl0ZW0pPT57XHJcbiAgICByZXR1cm4gaXRlbVxyXG4gIH0pKXtcclxuICAgIGNvbnNvbGUubG9nKCcuLi4u5o+Q5Lqk5oiQ5YqfJyk7XHJcbiAgICBsZXQgY292ZXJJbWFnZSA9IGZpbGVVcGxvYWRlci5nZXRDb3ZlckltYWdlVW5pZCgpO1xyXG4gICAgbGV0IGNvdmVySW1hZ2VVcmwgPSBmaWxlVXBsb2FkZXIuZ2V0SW1nTGlzdCgpWzBdLnVybHx8Jyc7XHJcbiAgICBfdGhpcy5zZXREYXRhKHtcclxuICAgICAgY292ZXJJbWFnZVVybFxyXG4gICAgfSlcclxuICAgIGxldCBpbWFnZXMgPSBmaWxlVXBsb2FkZXJNdWx0aXBsZS5nZXRJbWFnZXNVbmlkKCk7XHJcbiAgICBjb25zb2xlLmxvZyhjb3ZlckltYWdlLGltYWdlcyxjb3ZlckltYWdlVXJsKTtcclxuICAgIGxldCBzZWxlY3RlZFRpbWUgPSB0aW1lUXVhbnR1bS5nZXRTZWxlY3RlZFRpbWUoKTtcclxuICAgIGRhdGEgPSB7XHJcbiAgICAgIGRvY0NvZGU6IGZvcm1EYXRhLmRvY2NvZGUsIC8v5rS75Yqo5Y2V5Y+377yM5paw5bu65rS75Yqo5pe25Li656m65YC877yM57yW6L6R5pe26ZyA6KaBZG9jY29kZeWAvFxyXG4gICAgICBmb3JtSWQ6IGZvcm1EYXRhLmZvcm1JZCwgLy/lip/og73lj7fvvJrnp5LmnYAgNzEwODAyIO+8jCDmiqXlkI3pgoDnuqYgNzEwODAzIO+8jOWboui0rSA3MTA4MDRcclxuICAgICAgZG9jU3RhdHVzOjEwMCwgLy/ljZXmja7nirbmgIE6IDAg5L+d5a2Y77yI6LW36I2J77yJIO+8jDEwMCDlj5HluINcclxuICAgICAgY292ZXJJbWFnZSxcclxuICAgICAgaW1hZ2VzLFxyXG4gICAgICAvLyAuLi5fdGhpcy5kYXRhLmZvcm1EYXRhLFxyXG5cclxuICAgICAgZWZmZWN0aXZlU3RhcnREYXRlOiBmb3JtRGF0YS5zdGFydFRpbWUgfHwgc2VsZWN0ZWRUaW1lLnN0YXJ0VGltZSxcclxuICAgICAgZWZmZWN0aXZlRW5kRGF0ZTogZm9ybURhdGEuZW5kVGltZSAgfHwgc2VsZWN0ZWRUaW1lLmVuZFRpbWUsXHJcbiAgICAgIGZyZWVJZDogZm9ybURhdGEuZnJlZUlkLFxyXG4gICAgICB0aXRsZTogZm9ybURhdGEucHJvbW90aW9uc1RpdGxlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogZm9ybURhdGEucHJvbW90aW9uRGVzY3JpcHRpb258fCcnLFxyXG4gICAgICBzdG9yZUxpc3QsXHJcbiAgICAgIHNlbGxlckxpc3QsXHJcbiAgICB9XHJcbiAgICBpZiAoZm9ybURhdGEuZm9ybUlkPT03MTA4MDIpe1xyXG4gICAgICBkYXRhLnRyYW5zQ29zdHMgPSB0cmFuc0Nvc3RzO1xyXG4gICAgICBkYXRhLm9yaWdpbmFsUHJpY2U9TnVtYmVyKGZvcm1EYXRhLm9yaWdpbmFsUHJpY2UpO1xyXG4gICAgICBkYXRhLnF1YW50aXR5ID0gTnVtYmVyKGZvcm1EYXRhLmZsYXNoU2FsZVRvdGFsKTtcclxuICAgICAgZGF0YS5zYWxlc1ByaWNlID0gTnVtYmVyKGZvcm1EYXRhLmZsYXNoU2FsZVByaWNlKTtcclxuICAgICAgZGF0YS5yZXN0cmljdEJ1eWluZ1F1YW50aXR5PSBOdW1iZXIoZm9ybURhdGEuZmxhc2hTYWxlTGltaXQpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZvcm1EYXRhLmZvcm1JZD09NzEwODAzKXtcclxuICAgICAgZGF0YS5zYWxlc1ByaWNlID0gTnVtYmVyKGZvcm1EYXRhLm9yaWdpbmFsUHJpY2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZvcm1EYXRhLmZvcm1JZD09NzEwODA0KXtcclxuICAgICAgZGF0YS50cmFuc0Nvc3RzID0gdHJhbnNDb3N0cztcclxuICAgICAgZGF0YS5vcmlnaW5hbFByaWNlPU51bWJlcihmb3JtRGF0YS5vcmlnaW5hbFByaWNlKTtcclxuICAgICAgZGF0YS5zYWxlc1ByaWNlID0gTnVtYmVyKGZvcm1EYXRhLmZsYXNoU2FsZVByaWNlKTtcclxuICAgICAgZGF0YS5udW1iZXJPZlRlYW09IE51bWJlcihmb3JtRGF0YS5mbGFzaFNhbGVUb3RhbClcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCflvoXlj5HluIPmlbDmja4nLGRhdGEpO1xyXG4gICAgaWYgKCFhd2FpdCBwb3N0Rm9ybURhdGEoX3RoaXMsZGF0YSkpIHJldHVybjtcclxuICAgIGlmIChfdGhpcy5kYXRhLmZyb21QYWdlPT0nZWRpdCcpe1xyXG4gICAgICB3eC5uYXZpZ2F0ZUJhY2soKTtcclxuICAgIH0gZWxzZXtcclxuICAgICAgd3gucmVkaXJlY3RUbyh7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHVybDpgLi4vcHJvbW90aW9uc01hbmFnZUxpc3QvcHJvbW90aW9uc01hbmFnZUxpc3Q/dGFiPSR7dHlwZVtmb3JtRGF0YS5mb3JtSWRdfWBcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc29sZS5sb2coJ+i/mOaciemUmeivr+acquWkhOeQhicpO1xyXG4gICAgaWYgKCFjaGVja0NvdmVySW1hZ2UpIHtcclxuICAgICAgd3guJHV0aWxzLnNjcm9sbFRvRXJyb3IoJyNmaWxlLXVwbG9hZGVyJywn6K+35LiK5Lyg5LiA5byg5bCB6Z2i5Zu+JylcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjaGVja0FsbERhdGEpIHtcclxuICAgICAgbGV0IHJ1bGVzID0gdmFsaWRhdG9ySW5zdGFuY2UuZ2V0UnVsZXJzKCk7XHJcbiAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBsZXQgZXJyb3JNc2cgPSBfdGhpcy5kYXRhW2Ake3J1bGV9RXJyb3JgXTtcclxuICAgICAgICBpZiAoZXJyb3JNc2cpe1xyXG4gICAgICAgICAgd3guJHV0aWxzLnNjcm9sbFRvRXJyb3IoYCMke3J1bGV9YCxlcnJvck1zZylcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWNoZWNrU3RhcnRUaW1lKXtcclxuICAgICAgd3guJHV0aWxzLnNjcm9sbFRvRXJyb3IoJyN0aW1lLXF1YW50dW0nLCflvIDlp4vml7bpl7TpnIDlsI/kuo7nu5PmnZ/ml7bpl7QnKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwcm9tb3Rpb25zU2F2ZUhhbmRsZXIgPSBhc3luYyAoX3RoaXM6YW55KSA9PntcclxuICBsZXQgZm9ybURhdGE6IGFueSA9IF90aGlzLmRhdGE7XHJcbiAgLy8gbGV0IHR5cGUgPSB7XHJcbiAgLy8gICA3MTA4MDI6IDEsIC8v56eS5p2AXHJcbiAgLy8gICA3MTA4MDM6IDIsIC8v5oql5ZCNXHJcbiAgLy8gICA3MTA4MDQ6IDMsIC8v5Zui6LStXHJcbiAgLy8gfVxyXG4gIGxldCB0aW1lUXVhbnR1bSA9IF90aGlzLnNlbGVjdENvbXBvbmVudCgnI3RpbWUtcXVhbnR1bScpO1xyXG4gIGxldCBzZWxsZXJFZGl0ID0gX3RoaXMuc2VsZWN0Q29tcG9uZW50KCcjc2VsbGVyLWVkaXQnKTtcclxuICBsZXQgc2VsbGVyTGlzdCA9IHNlbGxlckVkaXQuZ2V0U2VsbGVyTGlzdCgpO1xyXG4gIGxldCBzdG9yZUVkaXQgPSBfdGhpcy5zZWxlY3RDb21wb25lbnQoJyNzdG9yZS1lZGl0Jyk7XHJcbiAgbGV0IHN0b3JlTGlzdCA9IHN0b3JlRWRpdC5nZXRTZWxlY3RlZFN0b3JlSWRMaXN0KCk7XHJcbiAgY29uc29sZS5sb2coJ+W+heaPkOS6pOeahOmXqOW6l2lkJyxzdG9yZUxpc3QpO1xyXG4gIGxldCBmaWxlVXBsb2FkZXIgPSBfdGhpcy5zZWxlY3RDb21wb25lbnQoJyNmaWxlLXVwbG9hZGVyJyk7XHJcbiAgbGV0IGZpbGVVcGxvYWRlck11bHRpcGxlID0gX3RoaXMuc2VsZWN0Q29tcG9uZW50KCcjZmlsZS11cGxvYWRlci1tdWx0aXBsZScpO1xyXG4gIGNvbnNvbGUubG9nKCcuLi4u5o+Q5Lqk5oiQ5YqfJyk7XHJcbiAgbGV0IGNvdmVySW1hZ2UgPSBmaWxlVXBsb2FkZXIuZ2V0Q292ZXJJbWFnZVVuaWQoKTtcclxuICBsZXQgaW1hZ2VzID0gZmlsZVVwbG9hZGVyTXVsdGlwbGUuZ2V0SW1hZ2VzVW5pZCgpO1xyXG5cclxuICBsZXQgdHJhbnNDb3N0cyA9IDA7XHJcbiAgaWYgKGZvcm1EYXRhLmZvcm1JZD09NzEwODAyfHxmb3JtRGF0YS5mb3JtSWQ9PTcxMDgwNCl7XHJcbiAgICBsZXQgZGVsaXZlcnlNZXRob2QgPSBfdGhpcy5zZWxlY3RDb21wb25lbnQoJyNkZWxpdmVyeS1tZXRob2QnKTtcclxuICAgIGlmIChkZWxpdmVyeU1ldGhvZC5kYXRhLmlzUmVxdWlyZWRBZGRyZXNzKXtcclxuICAgICAgdHJhbnNDb3N0cyA9IE51bWJlcihkZWxpdmVyeU1ldGhvZC5kYXRhLnRyYW5zQ29zdHMpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb25zb2xlLmxvZyhjb3ZlckltYWdlLGltYWdlcyk7XHJcbiAgbGV0IHNlbGVjdGVkVGltZSA9IHRpbWVRdWFudHVtLmdldFNlbGVjdGVkVGltZSgpO1xyXG4gIGxldCBkYXRhOmFueSA9IHtcclxuICAgIGRvY0NvZGU6IGZvcm1EYXRhLmRvY2NvZGUsIC8v5rS75Yqo5Y2V5Y+377yM5paw5bu65rS75Yqo5pe25Li656m65YC877yM57yW6L6R5pe26ZyA6KaBZG9jY29kZeWAvFxyXG4gICAgZm9ybUlkOiBmb3JtRGF0YS5mb3JtSWQsIC8v5Yqf6IO95Y+377ya56eS5p2AIDcxMDgwMiDvvIwg5oql5ZCN6YKA57qmIDcxMDgwMyDvvIzlm6LotK0gNzEwODA0XHJcbiAgICBkb2NTdGF0dXM6IDAsIC8v5Y2V5o2u54q25oCBOiAwIOS/neWtmO+8iOi1t+iNie+8iSDvvIwxMDAg5Y+R5biDXHJcbiAgICBjb3ZlckltYWdlLFxyXG4gICAgaW1hZ2VzLFxyXG4gICAgLy8gLi4uX3RoaXMuZGF0YS5mb3JtRGF0YSxcclxuXHJcbiAgICBlZmZlY3RpdmVTdGFydERhdGU6IGZvcm1EYXRhLnN0YXJ0VGltZSB8fCBzZWxlY3RlZFRpbWUuc3RhcnRUaW1lLFxyXG4gICAgZWZmZWN0aXZlRW5kRGF0ZTogZm9ybURhdGEuZW5kVGltZSAgfHwgc2VsZWN0ZWRUaW1lLmVuZFRpbWUsXHJcbiAgICBmcmVlSWQ6IGZvcm1EYXRhLmZyZWVJZCxcclxuICAgIHRpdGxlOiBmb3JtRGF0YS5wcm9tb3Rpb25zVGl0bGUsXHJcbiAgICBkZXNjcmlwdGlvbjogZm9ybURhdGEucHJvbW90aW9uRGVzY3JpcHRpb24sXHJcbiAgICBzdG9yZUxpc3QsXHJcbiAgICBzZWxsZXJMaXN0LFxyXG4gIH1cclxuICBpZiAoZm9ybURhdGEuZm9ybUlkPT03MTA4MDIpe1xyXG4gICAgZGF0YS50cmFuc0Nvc3RzID0gdHJhbnNDb3N0cztcclxuICAgIGRhdGEub3JpZ2luYWxQcmljZT1OdW1iZXIoZm9ybURhdGEub3JpZ2luYWxQcmljZSl8fDA7XHJcbiAgICBkYXRhLnF1YW50aXR5ID0gTnVtYmVyKGZvcm1EYXRhLmZsYXNoU2FsZVRvdGFsKXx8MDtcclxuICAgIGRhdGEuc2FsZXNQcmljZSA9IE51bWJlcihmb3JtRGF0YS5mbGFzaFNhbGVQcmljZSl8fDA7XHJcbiAgICBkYXRhLnJlc3RyaWN0QnV5aW5nUXVhbnRpdHk9IE51bWJlcihmb3JtRGF0YS5mbGFzaFNhbGVMaW1pdCl8fDA7XHJcbiAgfVxyXG4gIGlmIChmb3JtRGF0YS5mb3JtSWQ9PTcxMDgwMyl7XHJcbiAgICBkYXRhLnNhbGVzUHJpY2UgPSBOdW1iZXIoZm9ybURhdGEub3JpZ2luYWxQcmljZSl8fDA7XHJcbiAgfVxyXG4gIGlmIChmb3JtRGF0YS5mb3JtSWQ9PTcxMDgwNCl7XHJcbiAgICBkYXRhLnRyYW5zQ29zdHMgPSB0cmFuc0Nvc3RzO1xyXG4gICAgZGF0YS5vcmlnaW5hbFByaWNlPU51bWJlcihmb3JtRGF0YS5vcmlnaW5hbFByaWNlKXx8MDtcclxuICAgIGRhdGEuc2FsZXNQcmljZSA9IE51bWJlcihmb3JtRGF0YS5mbGFzaFNhbGVQcmljZSl8fDA7XHJcbiAgICBkYXRhLm51bWJlck9mVGVhbT0gTnVtYmVyKGZvcm1EYXRhLmZsYXNoU2FsZVRvdGFsKXx8MFxyXG4gIH1cclxuICBjb25zb2xlLmxvZygn5b6F5L+d5a2Y5pWw5o2uJyxkYXRhKTtcclxuICBpZiAoIWF3YWl0IHBvc3RGb3JtRGF0YShfdGhpcyxkYXRhKSkgcmV0dXJuO1xyXG4gIHd4LnNob3dNb2RhbCh7XHJcbiAgICB0aXRsZTogJ+aPkOekuicsXHJcbiAgICBjb250ZW50OiAn5L+d5a2Y5oiQ5YqfJyxcclxuICAgIGNvbmZpcm1UZXh0OifliY3lvoDpooTop4gnLFxyXG4gICAgY2FuY2VsVGV4dDon55WZ5Zyo5q2k5aSEJyxcclxuICAgIHN1Y2Nlc3MgKHJlcykge1xyXG4gICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye756Gu5a6aJylcclxuICAgICAgICB3eC5yZWRpcmVjdFRvKHtcclxuICAgICAgICAgIHVybDpgL3BhZ2VzL2RldGFpbC9kZXRhaWw/ZnJvbT1wcm9tb3Rpb25zRHJhZnQmZG9jY29kZT0ke190aGlzLmRhdGEuZG9jY29kZX1gXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ+eUqOaIt+eCueWHu+WPlua2iCcpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybjtcclxufVxyXG5leHBvcnQge1xyXG4gIHByb21vdGlvbnNTdWJtaXRIYW5kbGVyLFxyXG4gIHByb21vdGlvbnNTYXZlSGFuZGxlcixcclxuICBnZXRTYXZlRGF0YVxyXG59XHJcbiJdfQ==