Sanakey
2021-07-09 3fc241d02fb8b671289de3d9d80bf848349c04d4
提交 | 用户 | age
61abc9 1 "use strict";
S 2 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3     return new (P || (P = Promise))(function (resolve, reject) {
4         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6         function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7         step((generator = generator.apply(thisArg, _arguments || [])).next());
8     });
9 };
10 var __generator = (this && this.__generator) || function (thisArg, body) {
11     var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12     return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13     function verb(n) { return function (v) { return step([n, v]); }; }
14     function step(op) {
15         if (f) throw new TypeError("Generator is already executing.");
16         while (_) try {
17             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;
18             if (y = 0, t) op = [op[0] & 2, t.value];
19             switch (op[0]) {
20                 case 0: case 1: t = op; break;
21                 case 4: _.label++; return { value: op[1], done: false };
22                 case 5: _.label++; y = op[1]; op = [0]; continue;
23                 case 7: op = _.ops.pop(); _.trys.pop(); continue;
24                 default:
25                     if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26                     if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27                     if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28                     if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29                     if (t[2]) _.ops.pop();
30                     _.trys.pop(); continue;
31             }
32             op = body.call(thisArg, _);
33         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35     }
36 };
37 Object.defineProperty(exports, "__esModule", { value: true });
38 var myValidator_1 = require("../../utils/myValidator");
39 var chooseLocation = requirePlugin('chooseLocation');
40 var validatorInstance;
41 Page({
42     data: {
43         doccode: null,
44         location: null,
45         street: '',
46         storeName: '',
47         images: '',
9d3461 48         phone: '',
S 49         linkMan: '',
50         startTime: '00:00',
51         endTime: '24:00',
52         storeStatusList: []
61abc9 53     },
S 54     onLoad: function (options) {
55         console.log(options);
56         var doccode = options.doccode;
57         if (doccode) {
58             this.setData({
59                 doccode: doccode
60             });
61             this.getStoreData();
62         }
63         this.setData({
64             fileUploadUrl: "/shopping/customerStore.do?m=uploadAttachment",
65             fileDeleteUrl: "/shopping/customerStore.do?m=deleteAttachment",
66         });
67     },
68     onReady: function () {
69         validatorInstance = new myValidator_1.default({
70             rules: {
71                 street: {
72                     required: true,
73                 },
74                 storeName: {
75                     required: true
76                 },
9d3461 77                 linkMan: {
S 78                     required: true
79                 },
80                 phone: {
81                     required: true,
82                     mobile: true
83                 }
61abc9 84             },
S 85             messages: {
86                 street: {
87                     required: '请输入门店详细地址'
88                 },
89                 storeName: {
90                     required: '请输入门店名称'
9d3461 91                 },
S 92                 linkMan: {
93                     required: '请输入负责人姓名'
94                 },
95                 phone: {
96                     required: '请输入门店联系方式',
97                     mobile: '手机号格式不正确'
61abc9 98                 },
S 99             },
100             multiCheck: true
101         }, this);
102     },
103     getStoreData: function () {
104         return __awaiter(this, void 0, void 0, function () {
105             var _a, doccode, _b, error, result, data;
106             return __generator(this, function (_c) {
107                 switch (_c.label) {
108                     case 0:
109                         doccode = this.data.doccode;
110                         return [4, wx.$utils.to(wx.$http.request({
9d3461 111                                 url: "/shopping/customerStore.do?m=getCustomerStoreDetail",
61abc9 112                                 data: {
S 113                                     doccode: doccode
114                                 }
115                             }))];
116                     case 1:
117                         _b = _c.sent(), error = _b[0], result = _b[1];
118                         if (error) {
119                             console.log(error);
120                             return [2];
121                         }
122                         console.log(result);
123                         data = result.list[0];
124                         this.setData((_a = {
125                                 street: data.street,
126                                 storeName: data.storeName,
127                                 imagesUrl: data.imagesUrl
128                             },
129                             _a["location.province"] = data.provinceName,
130                             _a["location.city"] = data.cityName,
131                             _a["location.district"] = data.countyName,
132                             _a["location.address"] = data.address,
9d3461 133                             _a["location.name"] = data.addressName,
61abc9 134                             _a["location.longitude"] = data.longitude,
S 135                             _a["location.latitude"] = data.latitude,
9d3461 136                             _a.status = data.status,
S 137                             _a.startTime = data.fromBusinessHours,
138                             _a.endTime = data.toBusinessHours,
139                             _a.phone = data.telephone,
140                             _a.linkMan = data.linkMan,
141                             _a.storeStatusList = result.storeStatusList,
61abc9 142                             _a));
S 143                         return [2];
144                 }
145             });
146         });
147     },
148     selectLocation: function () {
149         var key = wx.globalData.TengXunMapLocationServiceKey;
150         if (!key) {
151             wx.showModal({
152                 title: '提示',
153                 content: '请配置腾讯地图服务所需要的key',
154                 showCancel: false
155             });
156             return;
157         }
158         var referer = 'miniApp';
159         wx.navigateTo({
160             url: 'plugin://chooseLocation/index?key=' + key + '&referer=' + referer
161         });
162     },
163     checkStreet: function (e) {
164         var value = e.detail.value;
165         console.log(e);
9d3461 166         this.checkField("street", value);
S 167     },
168     checkStoreName: function (e) {
169         var value = e.detail.value;
170         console.log(e);
171         this.checkField("storeName", value);
172     },
173     checkLinkMan: function (e) {
174         var value = e.detail.value;
175         console.log(e);
176         this.checkField("linkMan", value);
177     },
178     checkPhone: function (e) {
179         var value = e.detail.value;
180         console.log(e);
181         this.checkField("phone", value);
182     },
183     checkField: function (name, value) {
184         var _a, _b;
185         var errorMsg = validatorInstance.checkField("" + name, value);
61abc9 186         if (errorMsg === '') {
S 187             this.setData((_a = {},
9d3461 188                 _a["" + name] = value,
S 189                 _a[name + "Error"] = errorMsg,
61abc9 190                 _a));
S 191         }
192         else {
193             this.setData((_b = {},
9d3461 194                 _b[name + "Name"] = value,
S 195                 _b[name + "Error"] = errorMsg,
61abc9 196                 _b));
S 197         }
198     },
9d3461 199     onDeleteStore: function () {
S 200         var _this = this;
201         wx.pro.showModal({
202             title: '确定删除该门店吗?',
203         }).then(function (res) {
204             if (res.confirm) {
205                 console.log('用户点击确定');
206                 _this.deleteStore();
207             }
208             else if (res.cancel) {
209                 console.log('用户点击取消');
210             }
211         });
212     },
213     deleteStore: function () {
214         return __awaiter(this, void 0, void 0, function () {
215             var doccode, _a, error, result;
216             return __generator(this, function (_b) {
217                 switch (_b.label) {
218                     case 0:
219                         doccode = this.data.doccode;
220                         return [4, wx.$utils.to(wx.$http.request({
221                                 url: "/shopping/customerStore.do?m=deleteCustomerStore",
222                                 data: {
223                                     doccode: doccode
224                                 }
225                             }))];
226                     case 1:
227                         _a = _b.sent(), error = _a[0], result = _a[1];
228                         if (error) {
229                             console.log(error);
230                             return [2];
231                         }
232                         console.log(result);
233                         wx.showToast({
234                             title: '删除成功'
235                         });
236                         setTimeout(function () { wx.navigateBack(); }, 1000);
237                         return [2];
238                 }
239             });
240         });
61abc9 241     },
S 242     saveStore: function () {
243         return __awaiter(this, void 0, void 0, function () {
9d3461 244             var timeSelector, _a, startTime, endTime, storeStatus, status, _b, location, street, storeName, doccode, images, linkMan, phone, storeData, _c, error, result;
S 245             return __generator(this, function (_d) {
246                 switch (_d.label) {
61abc9 247                     case 0:
9d3461 248                         timeSelector = this.selectComponent('#time-selector');
S 249                         _a = timeSelector.getSelectedTime(), startTime = _a.startTime, endTime = _a.endTime;
250                         storeStatus = this.selectComponent('#store-status');
251                         status = storeStatus.getStoreStatusValue();
252                         _b = this.data, location = _b.location, street = _b.street, storeName = _b.storeName, doccode = _b.doccode, images = _b.images, linkMan = _b.linkMan, phone = _b.phone;
61abc9 253                         storeData = {
S 254                             countryName: '中国',
255                             provinceName: location.province,
256                             cityName: location.city,
257                             countyName: location.district,
258                             address: location.address,
259                             addressName: location.name,
260                             longitude: location.longitude,
261                             latitude: location.latitude,
262                             street: street,
263                             storeName: storeName,
264                             images: images,
9d3461 265                             linkMan: linkMan,
S 266                             fromBusinessHours: startTime,
267                             toBusinessHours: endTime,
268                             telephone: phone,
269                             docCode: doccode,
270                             status: status
61abc9 271                         };
S 272                         console.log('待保存的门店数据', storeData);
273                         return [4, wx.$utils.to(wx.$http.request({
274                                 url: "/shopping/customerStore.do?m=saveCustomerStore",
275                                 data: storeData,
276                                 method: 'POST'
277                             }))];
278                     case 1:
9d3461 279                         _c = _d.sent(), error = _c[0], result = _c[1];
61abc9 280                         if (error) {
S 281                             console.log(error);
282                             return [2];
283                         }
284                         console.log(result);
285                         wx.showToast({
286                             title: '保存成功'
287                         });
9d3461 288                         setTimeout(function () { wx.navigateBack(); }, 1500);
61abc9 289                         return [2];
S 290                 }
291             });
292         });
293     },
3fc241 294     onSave: wx.$utils.debounce(function () {
61abc9 295         var location = this.data.location;
S 296         if (!location) {
297             wx.showToast({
298                 title: '请选择门店地址',
299                 icon: 'none'
300             });
301             return;
302         }
303         var checkAllData = validatorInstance.checkAllData();
304         var fileUploaderMultiple = this.selectComponent('#file-uploader-multiple');
305         var checkImages = fileUploaderMultiple.checkImages("images", "请至少上传一张图片");
306         if (!checkAllData) {
307             console.log('还有错误未处理');
308             return;
309         }
310         if (!checkImages)
311             return;
312         var images = fileUploaderMultiple.getImagesUnid();
313         this.setData({
314             images: images
315         });
316         console.log('....提交成功');
317         this.saveStore();
3fc241 318     }),
61abc9 319     onShow: function () {
S 320         var location = chooseLocation.getLocation();
321         console.log(location);
322         if (location) {
323             this.setData({
324                 location: location
325             });
326         }
327     },
328     onUnload: function () {
329         chooseLocation.setLocation(null);
330     }
331 });
3fc241 332 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVFZGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RvcmVFZGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1REFBa0Q7QUFFbEQsSUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkQsSUFBSSxpQkFBOEIsQ0FBQztBQUNuQyxJQUFJLENBQUM7SUFDSCxJQUFJLEVBQUU7UUFDSixPQUFPLEVBQUMsSUFBVztRQUNuQixRQUFRLEVBQUMsSUFBVztRQUNwQixNQUFNLEVBQUMsRUFBRTtRQUNULFNBQVMsRUFBQyxFQUFFO1FBQ1osTUFBTSxFQUFDLEVBQUU7UUFDVCxLQUFLLEVBQUUsRUFBRTtRQUNULE9BQU8sRUFBQyxFQUFFO1FBQ1YsU0FBUyxFQUFDLE9BQU87UUFDakIsT0FBTyxFQUFDLE9BQU87UUFDZixlQUFlLEVBQUMsRUFBRTtLQUVuQjtJQUNELE1BQU0sWUFBQyxPQUFPO1FBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDWCxPQUFPLFNBQUE7YUFDUixDQUFDLENBQUE7WUFDRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7U0FDcEI7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ1gsYUFBYSxFQUFFLCtDQUErQztZQUM5RCxhQUFhLEVBQUUsK0NBQStDO1NBQy9ELENBQUMsQ0FBQztJQVVMLENBQUM7SUFDRCxPQUFPO1FBQ0wsaUJBQWlCLEdBQUcsSUFBSSxxQkFBVyxDQUFDO1lBQ2xDLEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLElBQUk7aUJBQ2Y7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULFFBQVEsRUFBRSxJQUFJO2lCQUNmO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxRQUFRLEVBQUUsSUFBSTtpQkFDZjtnQkFDRCxLQUFLLEVBQUU7b0JBQ0wsUUFBUSxFQUFFLElBQUk7b0JBQ2QsTUFBTSxFQUFFLElBQUk7aUJBQ2I7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUU7b0JBQ04sUUFBUSxFQUFFLFdBQVc7aUJBQ3RCO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxRQUFRLEVBQUUsU0FBUztpQkFDcEI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLFFBQVEsRUFBRSxVQUFVO2lCQUNyQjtnQkFDRCxLQUFLLEVBQUU7b0JBQ0wsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2lCQUNuQjthQUNGO1lBQ0QsVUFBVSxFQUFDLElBQUk7U0FDaEIsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNWLENBQUM7SUFDSyxZQUFZOzs7Ozs7d0JBQ1osT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO3dCQUNWLFdBQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3RDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dDQUNmLEdBQUcsRUFBQyxxREFBcUQ7Z0NBQ3pELElBQUksRUFBQztvQ0FDSCxPQUFPLFNBQUE7aUNBQ1I7NkJBQ0YsQ0FBQyxDQUNILEVBQUE7O3dCQVBHLEtBQWtCLFNBT3JCLEVBUEksS0FBSyxRQUFBLEVBQUUsTUFBTSxRQUFBO3dCQVFsQixJQUFJLEtBQUssRUFBQzs0QkFDUixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNuQixXQUFPO3lCQUNSO3dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ2hCLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMxQixJQUFJLENBQUMsT0FBTztnQ0FDVixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0NBQ25CLFNBQVMsRUFBQyxJQUFJLENBQUMsU0FBUztnQ0FDeEIsU0FBUyxFQUFDLElBQUksQ0FBQyxTQUFTOzs0QkFDeEIsR0FBQyxtQkFBbUIsSUFBRyxJQUFJLENBQUMsWUFBWTs0QkFDeEMsR0FBQyxlQUFlLElBQUcsSUFBSSxDQUFDLFFBQVE7NEJBQ2hDLEdBQUMsbUJBQW1CLElBQUcsSUFBSSxDQUFDLFVBQVU7NEJBQ3RDLEdBQUMsa0JBQWtCLElBQUcsSUFBSSxDQUFDLE9BQU87NEJBQ2xDLEdBQUMsZUFBZSxJQUFHLElBQUksQ0FBQyxXQUFXOzRCQUNuQyxHQUFDLG9CQUFvQixJQUFHLElBQUksQ0FBQyxTQUFTOzRCQUN0QyxHQUFDLG1CQUFtQixJQUFHLElBQUksQ0FBQyxRQUFROzRCQUNwQyxTQUFNLEdBQUUsSUFBSSxDQUFDLE1BQU07NEJBQ25CLFlBQVMsR0FBRSxJQUFJLENBQUMsaUJBQWlCOzRCQUNqQyxVQUFPLEdBQUUsSUFBSSxDQUFDLGVBQWU7NEJBQzdCLFFBQUssR0FBRSxJQUFJLENBQUMsU0FBUzs0QkFDckIsVUFBTyxHQUFFLElBQUksQ0FBQyxPQUFPOzRCQUNyQixrQkFBZSxHQUFDLE1BQU0sQ0FBQyxlQUFlO2dDQUN0QyxDQUFBOzs7OztLQUNIO0lBQ0QsY0FBYztRQUNaLElBQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUM7UUFDdkQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ1gsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsVUFBVSxFQUFDLEtBQUs7YUFDakIsQ0FBQyxDQUFBO1lBQ0YsT0FBTztTQUNSO1FBQ0QsSUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzFCLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDWixHQUFHLEVBQUUsb0NBQW9DLEdBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxPQUFPO1NBRXhFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxXQUFXLFlBQUMsQ0FBSztRQUNULElBQUEsc0JBQUssQ0FBYztRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELGNBQWMsWUFBQyxDQUFLO1FBQ1osSUFBQSxzQkFBSyxDQUFjO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsWUFBWSxZQUFDLENBQUs7UUFDVixJQUFBLHNCQUFLLENBQWM7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxVQUFVLFlBQUMsQ0FBSztRQUNSLElBQUEsc0JBQUssQ0FBYztRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELFVBQVUsWUFBQyxJQUFXLEVBQUMsS0FBWTs7UUFDakMsSUFBSSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUcsSUFBTSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksUUFBUSxLQUFHLEVBQUUsRUFBQztZQUNoQixJQUFJLENBQUMsT0FBTztnQkFDVixHQUFDLEtBQUcsSUFBTSxJQUFHLEtBQUs7Z0JBQ2xCLEdBQUksSUFBSSxVQUFPLElBQUcsUUFBUTtvQkFDMUIsQ0FBQTtTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTztnQkFDVixHQUFJLElBQUksU0FBTSxJQUFHLEtBQUs7Z0JBQ3RCLEdBQUksSUFBSSxVQUFPLElBQUcsUUFBUTtvQkFDMUIsQ0FBQTtTQUNIO0lBQ0gsQ0FBQztJQUNELGFBQWE7UUFBYixpQkFlQztRQVpDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ2YsS0FBSyxFQUFFLFdBQVc7U0FDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQU87WUFDZCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDckIsS0FBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBRXBCO2lCQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTthQUN0QjtRQUVILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNLLFdBQVc7Ozs7Ozt3QkFDWCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7d0JBQ1YsV0FBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDdEMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0NBQ2YsR0FBRyxFQUFDLGtEQUFrRDtnQ0FDdEQsSUFBSSxFQUFDO29DQUNILE9BQU8sU0FBQTtpQ0FDUjs2QkFDRixDQUFDLENBQ0gsRUFBQTs7d0JBUEcsS0FBa0IsU0FPckIsRUFQSSxLQUFLLFFBQUEsRUFBRSxNQUFNLFFBQUE7d0JBUWxCLElBQUksS0FBSyxFQUFDOzRCQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ25CLFdBQU87eUJBQ1I7d0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDcEIsRUFBRSxDQUFDLFNBQVMsQ0FBQzs0QkFDWCxLQUFLLEVBQUMsTUFBTTt5QkFDYixDQUFDLENBQUE7d0JBQ0YsVUFBVSxDQUFDLGNBQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUEsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFBOzs7OztLQUM1QztJQUNLLFNBQVM7Ozs7Ozt3QkFDVCxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUN0RCxLQUFzQixZQUFZLENBQUMsZUFBZSxFQUFFLEVBQW5ELFNBQVMsZUFBQSxFQUFDLE9BQU8sYUFBQSxDQUFtQzt3QkFDckQsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBQ3BELE1BQU0sR0FBRyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzt3QkFDM0MsS0FRQSxJQUFJLENBQUMsSUFBSSxFQVBYLFFBQVEsY0FBQSxFQUNSLE1BQU0sWUFBQSxFQUNOLFNBQVMsZUFBQSxFQUNULE9BQU8sYUFBQSxFQUNQLE1BQU0sWUFBQSxFQUNOLE9BQU8sYUFBQSxFQUNQLEtBQUssV0FBQSxDQUNPO3dCQUNWLFNBQVMsR0FBRzs0QkFDZCxXQUFXLEVBQUMsSUFBSTs0QkFDaEIsWUFBWSxFQUFFLFFBQVEsQ0FBQyxRQUFROzRCQUMvQixRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUk7NEJBQ3ZCLFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUTs0QkFDN0IsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPOzRCQUN6QixXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUk7NEJBQzFCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUzs0QkFDN0IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFROzRCQUMzQixNQUFNLFFBQUE7NEJBQ04sU0FBUyxXQUFBOzRCQUNULE1BQU0sUUFBQTs0QkFDTixPQUFPLFNBQUE7NEJBQ1AsaUJBQWlCLEVBQUMsU0FBUzs0QkFDM0IsZUFBZSxFQUFDLE9BQU87NEJBQ3ZCLFNBQVMsRUFBQyxLQUFLOzRCQUNmLE9BQU8sRUFBQyxPQUFPOzRCQUNmLE1BQU0sUUFBQTt5QkFDUCxDQUFBO3dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNaLFdBQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3RDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dDQUNmLEdBQUcsRUFBQyxnREFBZ0Q7Z0NBQ3BELElBQUksRUFBRSxTQUFTO2dDQUNmLE1BQU0sRUFBQyxNQUFNOzZCQUNkLENBQUMsQ0FDSCxFQUFBOzt3QkFORyxLQUFrQixTQU1yQixFQU5JLEtBQUssUUFBQSxFQUFFLE1BQU0sUUFBQTt3QkFPbEIsSUFBSSxLQUFLLEVBQUM7NEJBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDbkIsV0FBTzt5QkFDUjt3QkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNwQixFQUFFLENBQUMsU0FBUyxDQUFDOzRCQUNYLEtBQUssRUFBQyxNQUFNO3lCQUNiLENBQUMsQ0FBQTt3QkFDRixVQUFVLENBQUMsY0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQSxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUE7Ozs7O0tBQzVDO0lBZUQsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3hCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUNYLEtBQUssRUFBQyxTQUFTO2dCQUNmLElBQUksRUFBQyxNQUFNO2FBQ1osQ0FBQyxDQUFBO1lBQ0YsT0FBTTtTQUNQO1FBRUQsSUFBSSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDM0UsSUFBSSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxFQUFDO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQ3pCLElBQUksTUFBTSxHQUFHLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUM7WUFDWCxNQUFNLFFBQUE7U0FDUCxDQUFDLENBQUE7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFDRixNQUFNO1FBQ0osSUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEIsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNYLFFBQVEsVUFBQTthQUNULENBQUMsQ0FBQTtTQUNIO0lBRUgsQ0FBQztJQUNELFFBQVE7UUFFTixjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FFRixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTXlWYWxpZGF0b3IgZnJvbSBcIi4uLy4uL3V0aWxzL215VmFsaWRhdG9yXCI7XHJcbi8vIEB0cy1pZ25vcmVcclxuY29uc3QgY2hvb3NlTG9jYXRpb24gPSByZXF1aXJlUGx1Z2luKCdjaG9vc2VMb2NhdGlvbicpO1xyXG5sZXQgdmFsaWRhdG9ySW5zdGFuY2U6IE15VmFsaWRhdG9yO1xyXG5QYWdlKHtcclxuICBkYXRhOiB7XHJcbiAgICBkb2Njb2RlOm51bGwgYXMgYW55LFxyXG4gICAgbG9jYXRpb246bnVsbCBhcyBhbnksXHJcbiAgICBzdHJlZXQ6JycsXHJcbiAgICBzdG9yZU5hbWU6JycsXHJcbiAgICBpbWFnZXM6JycsXHJcbiAgICBwaG9uZTogJycsXHJcbiAgICBsaW5rTWFuOicnLFxyXG4gICAgc3RhcnRUaW1lOicwMDowMCcsXHJcbiAgICBlbmRUaW1lOicyNDowMCcsXHJcbiAgICBzdG9yZVN0YXR1c0xpc3Q6W11cclxuICAgIC8vIHNlbGVjdGVkU3RvcmVJZExpc3Q6W11cclxuICB9LFxyXG4gIG9uTG9hZChvcHRpb25zKSB7XHJcbiAgICBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuICAgIGxldCBkb2Njb2RlID0gb3B0aW9ucy5kb2Njb2RlO1xyXG4gICAgaWYgKGRvY2NvZGUpIHtcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBkb2Njb2RlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZ2V0U3RvcmVEYXRhKClcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIGZpbGVVcGxvYWRVcmw6IFwiL3Nob3BwaW5nL2N1c3RvbWVyU3RvcmUuZG8/bT11cGxvYWRBdHRhY2htZW50XCIsXHJcbiAgICAgIGZpbGVEZWxldGVVcmw6IFwiL3Nob3BwaW5nL2N1c3RvbWVyU3RvcmUuZG8/bT1kZWxldGVBdHRhY2htZW50XCIsXHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMuZ2V0TXlGb290cHJpbnQoKTtcclxuICAgIC8vIGNvbnN0IGV2ZW50Q2hhbm5lbCA9IHRoaXMuZ2V0T3BlbmVyRXZlbnRDaGFubmVsKCk7XHJcbiAgICAvLyBldmVudENoYW5uZWwub24oJ2dldFN0b3JlTGlzdEZyb21TdG9yZUxpc3RQYWdlJywgKGRhdGE6YW55KT0+IHtcclxuICAgIC8vICAgY29uc29sZS5sb2coJ+iOt+WPluaWsOW7uua0u+WKqOaXtumAieS4reeahOmXqOW6lycsZGF0YSlcclxuICAgIC8vICAgdGhpcy5zZXREYXRhKHtcclxuICAgIC8vICAgICBzZWxlY3RlZFN0b3JlSWRMaXN0OmRhdGEuc2VsZWN0ZWRTdG9yZUlkTGlzdCxcclxuICAgIC8vICAgfSlcclxuICAgIC8vXHJcbiAgICAvLyB9KVxyXG4gIH0sXHJcbiAgb25SZWFkeSgpIHtcclxuICAgIHZhbGlkYXRvckluc3RhbmNlID0gbmV3IE15VmFsaWRhdG9yKHtcclxuICAgICAgcnVsZXM6IHtcclxuICAgICAgICBzdHJlZXQ6IHtcclxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RvcmVOYW1lOiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGlua01hbjoge1xyXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBob25lOiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgIG1vYmlsZTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbWVzc2FnZXM6IHtcclxuICAgICAgICBzdHJlZXQ6IHtcclxuICAgICAgICAgIHJlcXVpcmVkOiAn6K+36L6T5YWl6Zeo5bqX6K+m57uG5Zyw5Z2AJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RvcmVOYW1lOiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogJ+ivt+i+k+WFpemXqOW6l+WQjeensCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxpbmtNYW46IHtcclxuICAgICAgICAgIHJlcXVpcmVkOiAn6K+36L6T5YWl6LSf6LSj5Lq65aeT5ZCNJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGhvbmU6IHtcclxuICAgICAgICAgIHJlcXVpcmVkOiAn6K+36L6T5YWl6Zeo5bqX6IGU57O75pa55byPJyxcclxuICAgICAgICAgIG1vYmlsZTogJ+aJi+acuuWPt+agvOW8j+S4jeato+ehridcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICBtdWx0aUNoZWNrOnRydWVcclxuICAgIH0sdGhpcyk7XHJcbiAgfSxcclxuICBhc3luYyBnZXRTdG9yZURhdGEoKXtcclxuICAgIGxldCBkb2Njb2RlID0gdGhpcy5kYXRhLmRvY2NvZGU7XHJcbiAgICBsZXQgW2Vycm9yLCByZXN1bHRdID0gYXdhaXQgd3guJHV0aWxzLnRvKFxyXG4gICAgICB3eC4kaHR0cC5yZXF1ZXN0KHtcclxuICAgICAgICB1cmw6YC9zaG9wcGluZy9jdXN0b21lclN0b3JlLmRvP209Z2V0Q3VzdG9tZXJTdG9yZURldGFpbGAsXHJcbiAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICBkb2Njb2RlXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgaWYgKGVycm9yKXtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgbGV0IGRhdGEgPSByZXN1bHQubGlzdFswXTtcclxuICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgIHN0cmVldDogZGF0YS5zdHJlZXQsXHJcbiAgICAgIHN0b3JlTmFtZTpkYXRhLnN0b3JlTmFtZSxcclxuICAgICAgaW1hZ2VzVXJsOmRhdGEuaW1hZ2VzVXJsLFxyXG4gICAgICBbXCJsb2NhdGlvbi5wcm92aW5jZVwiXTogZGF0YS5wcm92aW5jZU5hbWUsXHJcbiAgICAgIFtcImxvY2F0aW9uLmNpdHlcIl06IGRhdGEuY2l0eU5hbWUsXHJcbiAgICAgIFtcImxvY2F0aW9uLmRpc3RyaWN0XCJdOiBkYXRhLmNvdW50eU5hbWUsXHJcbiAgICAgIFtcImxvY2F0aW9uLmFkZHJlc3NcIl06IGRhdGEuYWRkcmVzcyxcclxuICAgICAgW1wibG9jYXRpb24ubmFtZVwiXTogZGF0YS5hZGRyZXNzTmFtZSxcclxuICAgICAgW1wibG9jYXRpb24ubG9uZ2l0dWRlXCJdOiBkYXRhLmxvbmdpdHVkZSxcclxuICAgICAgW1wibG9jYXRpb24ubGF0aXR1ZGVcIl06IGRhdGEubGF0aXR1ZGUsXHJcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXHJcbiAgICAgIHN0YXJ0VGltZTogZGF0YS5mcm9tQnVzaW5lc3NIb3VycyxcclxuICAgICAgZW5kVGltZTogZGF0YS50b0J1c2luZXNzSG91cnMsXHJcbiAgICAgIHBob25lOiBkYXRhLnRlbGVwaG9uZSxcclxuICAgICAgbGlua01hbjogZGF0YS5saW5rTWFuLFxyXG4gICAgICBzdG9yZVN0YXR1c0xpc3Q6cmVzdWx0LnN0b3JlU3RhdHVzTGlzdFxyXG4gICAgfSlcclxuICB9LFxyXG4gIHNlbGVjdExvY2F0aW9uKCl7XHJcbiAgICBjb25zdCBrZXkgPSB3eC5nbG9iYWxEYXRhLlRlbmdYdW5NYXBMb2NhdGlvblNlcnZpY2VLZXk7XHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICB3eC5zaG93TW9kYWwoe1xyXG4gICAgICAgIHRpdGxlOiAn5o+Q56S6JyxcclxuICAgICAgICBjb250ZW50OiAn6K+36YWN572u6IW+6K6v5Zyw5Zu+5pyN5Yqh5omA6ZyA6KaB55qEa2V5JyxcclxuICAgICAgICBzaG93Q2FuY2VsOmZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlZmVyZXIgPSAnbWluaUFwcCc7XHJcbiAgICB3eC5uYXZpZ2F0ZVRvKHtcclxuICAgICAgdXJsOiAncGx1Z2luOi8vY2hvb3NlTG9jYXRpb24vaW5kZXg/a2V5PScgKyBrZXkgKyAnJnJlZmVyZXI9JyArIHJlZmVyZXJcclxuICAgICAgLy8gICsgJyZsb2NhdGlvbj0nICsgbG9jYXRpb24gKyAnJmNhdGVnb3J5PScgKyBjYXRlZ29yeVxyXG4gICAgfSk7XHJcbiAgfSxcclxuICBjaGVja1N0cmVldChlOmFueSl7XHJcbiAgICBsZXQgeyB2YWx1ZSB9ID0gZS5kZXRhaWw7XHJcbiAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIHRoaXMuY2hlY2tGaWVsZChgc3RyZWV0YCx2YWx1ZSk7XHJcbiAgfSxcclxuICBjaGVja1N0b3JlTmFtZShlOmFueSl7XHJcbiAgICBsZXQgeyB2YWx1ZSB9ID0gZS5kZXRhaWw7XHJcbiAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIHRoaXMuY2hlY2tGaWVsZChgc3RvcmVOYW1lYCx2YWx1ZSk7XHJcbiAgfSxcclxuICBjaGVja0xpbmtNYW4oZTphbnkpe1xyXG4gICAgbGV0IHsgdmFsdWUgfSA9IGUuZGV0YWlsO1xyXG4gICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB0aGlzLmNoZWNrRmllbGQoYGxpbmtNYW5gLHZhbHVlKTtcclxuICB9LFxyXG4gIGNoZWNrUGhvbmUoZTphbnkpe1xyXG4gICAgbGV0IHsgdmFsdWUgfSA9IGUuZGV0YWlsO1xyXG4gICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB0aGlzLmNoZWNrRmllbGQoYHBob25lYCx2YWx1ZSk7XHJcbiAgfSxcclxuICBjaGVja0ZpZWxkKG5hbWU6c3RyaW5nLHZhbHVlOnN0cmluZyl7XHJcbiAgICBsZXQgZXJyb3JNc2cgPSB2YWxpZGF0b3JJbnN0YW5jZS5jaGVja0ZpZWxkKGAke25hbWV9YCx2YWx1ZSk7XHJcbiAgICBpZiAoZXJyb3JNc2c9PT0nJyl7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgW2Ake25hbWV9YF06IHZhbHVlLFxyXG4gICAgICAgIFtgJHtuYW1lfUVycm9yYF06IGVycm9yTXNnLFxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBbYCR7bmFtZX1OYW1lYF06IHZhbHVlLFxyXG4gICAgICAgIFtgJHtuYW1lfUVycm9yYF06IGVycm9yTXNnLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgb25EZWxldGVTdG9yZSgpIHtcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyhldmVudCk7XHJcbiAgICB3eC5wcm8uc2hvd01vZGFsKHtcclxuICAgICAgdGl0bGU6ICfnoa7lrprliKDpmaTor6Xpl6jlupflkJfvvJ8nLFxyXG4gICAgfSkudGhlbigocmVzOmFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzLmNvbmZpcm0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye756Gu5a6aJylcclxuICAgICAgICB0aGlzLmRlbGV0ZVN0b3JlKCk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHJlcy5jYW5jZWwpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJylcclxuICAgICAgfVxyXG4gICAgICAvLyBpbnN0YW5jZS5jbG9zZSgpO1xyXG4gICAgfSk7XHJcbiAgfSxcclxuICBhc3luYyBkZWxldGVTdG9yZSgpe1xyXG4gICAgbGV0IGRvY2NvZGUgPSB0aGlzLmRhdGEuZG9jY29kZTtcclxuICAgIGxldCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCB3eC4kdXRpbHMudG8oXHJcbiAgICAgIHd4LiRodHRwLnJlcXVlc3Qoe1xyXG4gICAgICAgIHVybDpgL3Nob3BwaW5nL2N1c3RvbWVyU3RvcmUuZG8/bT1kZWxldGVDdXN0b21lclN0b3JlYCxcclxuICAgICAgICBkYXRhOntcclxuICAgICAgICAgIGRvY2NvZGVcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoZXJyb3Ipe1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICB0aXRsZTon5Yig6Zmk5oiQ5YqfJ1xyXG4gICAgfSlcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge3d4Lm5hdmlnYXRlQmFjaygpO30sMTAwMClcclxuICB9LFxyXG4gIGFzeW5jIHNhdmVTdG9yZSgpe1xyXG4gICAgbGV0IHRpbWVTZWxlY3RvciA9IHRoaXMuc2VsZWN0Q29tcG9uZW50KCcjdGltZS1zZWxlY3RvcicpO1xyXG4gICAgbGV0IHtzdGFydFRpbWUsZW5kVGltZX0gPSB0aW1lU2VsZWN0b3IuZ2V0U2VsZWN0ZWRUaW1lKCk7XHJcbiAgICBsZXQgc3RvcmVTdGF0dXMgPSB0aGlzLnNlbGVjdENvbXBvbmVudCgnI3N0b3JlLXN0YXR1cycpO1xyXG4gICAgbGV0IHN0YXR1cyA9IHN0b3JlU3RhdHVzLmdldFN0b3JlU3RhdHVzVmFsdWUoKTtcclxuICAgIGxldCB7XHJcbiAgICAgIGxvY2F0aW9uLFxyXG4gICAgICBzdHJlZXQsXHJcbiAgICAgIHN0b3JlTmFtZSxcclxuICAgICAgZG9jY29kZSxcclxuICAgICAgaW1hZ2VzLFxyXG4gICAgICBsaW5rTWFuLFxyXG4gICAgICBwaG9uZVxyXG4gICAgfSA9IHRoaXMuZGF0YTtcclxuICAgIGxldCBzdG9yZURhdGEgPSB7XHJcbiAgICAgIGNvdW50cnlOYW1lOifkuK3lm70nLFxyXG4gICAgICBwcm92aW5jZU5hbWU6IGxvY2F0aW9uLnByb3ZpbmNlLFxyXG4gICAgICBjaXR5TmFtZTogbG9jYXRpb24uY2l0eSxcclxuICAgICAgY291bnR5TmFtZTogbG9jYXRpb24uZGlzdHJpY3QsXHJcbiAgICAgIGFkZHJlc3M6IGxvY2F0aW9uLmFkZHJlc3MsXHJcbiAgICAgIGFkZHJlc3NOYW1lOiBsb2NhdGlvbi5uYW1lLFxyXG4gICAgICBsb25naXR1ZGU6IGxvY2F0aW9uLmxvbmdpdHVkZSxcclxuICAgICAgbGF0aXR1ZGU6IGxvY2F0aW9uLmxhdGl0dWRlLFxyXG4gICAgICBzdHJlZXQsXHJcbiAgICAgIHN0b3JlTmFtZSxcclxuICAgICAgaW1hZ2VzLFxyXG4gICAgICBsaW5rTWFuLFxyXG4gICAgICBmcm9tQnVzaW5lc3NIb3VyczpzdGFydFRpbWUsXHJcbiAgICAgIHRvQnVzaW5lc3NIb3VyczplbmRUaW1lLFxyXG4gICAgICB0ZWxlcGhvbmU6cGhvbmUsXHJcbiAgICAgIGRvY0NvZGU6ZG9jY29kZSxcclxuICAgICAgc3RhdHVzXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygn5b6F5L+d5a2Y55qE6Zeo5bqX5pWw5o2uJyxzdG9yZURhdGEpO1xyXG4gICAgbGV0IFtlcnJvciwgcmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgICAgICAgdXJsOmAvc2hvcHBpbmcvY3VzdG9tZXJTdG9yZS5kbz9tPXNhdmVDdXN0b21lclN0b3JlYCxcclxuICAgICAgICBkYXRhOiBzdG9yZURhdGEsXHJcbiAgICAgICAgbWV0aG9kOidQT1NUJ1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gICAgaWYgKGVycm9yKXtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgdGl0bGU6J+S/neWtmOaIkOWKnydcclxuICAgIH0pXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHt3eC5uYXZpZ2F0ZUJhY2soKTt9LDE1MDApXHJcbiAgfSxcclxuICAvLyBuYXZpZ2F0ZUJhY2sobW9kZT86YW55KXtcclxuICAvLyAgIGxldCB7c2VsZWN0ZWRTdG9yZUlkTGlzdCxkb2Njb2RlfSA9IHRoaXMuZGF0YTtcclxuICAvLyAgIGlmIChtb2RlID09J2RlbGV0ZScpe1xyXG4gIC8vICAgICAvLyBAdHMtaWdub3JlXHJcbiAgLy8gICAgIHNlbGVjdGVkU3RvcmVJZExpc3Quc3BsaWNlKHNlbGVjdGVkU3RvcmVJZExpc3QuaW5kZXhPZihkb2Njb2RlKSwxKVxyXG4gIC8vICAgICBjb25zb2xlLmxvZygn5Yig6Zmk6Zeo5bqX5ZCO55qEc2VsZWN0ZWRTdG9yZUlkTGlzdCcsc2VsZWN0ZWRTdG9yZUlkTGlzdCk7XHJcbiAgLy8gICB9XHJcbiAgLy9cclxuICAvLyAgIGxldCBldmVudENoYW5uZWwgPSB0aGlzLmdldE9wZW5lckV2ZW50Q2hhbm5lbCgpO1xyXG4gIC8vICAgZXZlbnRDaGFubmVsLmVtaXQoJ2dldFNlbGVjdGVkU3RvcmVJZExpc3RGcm9tU3RvcmVFZGl0UGFnZScsIHtcclxuICAvLyAgICAgc2VsZWN0ZWRTdG9yZUlkTGlzdCxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgd3gubmF2aWdhdGVCYWNrKCk7XHJcbiAgLy8gfSxcclxuICBvblNhdmU6d3guJHV0aWxzLmRlYm91bmNlKGZ1bmN0aW9uKHRoaXM6YW55KXtcclxuICAgIGxldCBsb2NhdGlvbiA9IHRoaXMuZGF0YS5sb2NhdGlvbjtcclxuICAgIGlmICghbG9jYXRpb24pIHtcclxuICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICB0aXRsZTon6K+36YCJ5oup6Zeo5bqX5Zyw5Z2AJyxcclxuICAgICAgICBpY29uOidub25lJ1xyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2hlY2tBbGxEYXRhID0gdmFsaWRhdG9ySW5zdGFuY2UuY2hlY2tBbGxEYXRhKCk7XHJcbiAgICBsZXQgZmlsZVVwbG9hZGVyTXVsdGlwbGUgPSB0aGlzLnNlbGVjdENvbXBvbmVudCgnI2ZpbGUtdXBsb2FkZXItbXVsdGlwbGUnKTtcclxuICAgIGxldCBjaGVja0ltYWdlcyA9IGZpbGVVcGxvYWRlck11bHRpcGxlLmNoZWNrSW1hZ2VzKFwiaW1hZ2VzXCIsIFwi6K+36Iez5bCR5LiK5Lyg5LiA5byg5Zu+54mHXCIpO1xyXG4gICAgaWYgKCFjaGVja0FsbERhdGEpe1xyXG4gICAgICBjb25zb2xlLmxvZygn6L+Y5pyJ6ZSZ6K+v5pyq5aSE55CGJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghY2hlY2tJbWFnZXMpIHJldHVybjtcclxuICAgIGxldCBpbWFnZXMgPSBmaWxlVXBsb2FkZXJNdWx0aXBsZS5nZXRJbWFnZXNVbmlkKCk7XHJcbiAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICBpbWFnZXNcclxuICAgIH0pXHJcbiAgICBjb25zb2xlLmxvZygnLi4uLuaPkOS6pOaIkOWKnycpO1xyXG4gICAgdGhpcy5zYXZlU3RvcmUoKTtcclxuICB9KSxcclxuICBvblNob3coKXtcclxuICAgIGNvbnN0IGxvY2F0aW9uID0gY2hvb3NlTG9jYXRpb24uZ2V0TG9jYXRpb24oKTsgLy8g5aaC5p6c54K55Ye756Gu6K6k6YCJ54K55oyJ6ZKu77yM5YiZ6L+U5Zue6YCJ54K557uT5p6c5a+56LGh77yM5ZCm5YiZ6L+U5ZuebnVsbFxyXG4gICAgY29uc29sZS5sb2cobG9jYXRpb24pO1xyXG4gICAgaWYgKGxvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgbG9jYXRpb25cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgfSxcclxuICBvblVubG9hZCAoKSB7XHJcbiAgICAvLyDpobXpnaLljbjovb3ml7borr7nva7mj5Lku7bpgInngrnmlbDmja7kuLpudWxs77yM6Ziy5q2i5YaN5qyh6L+b5YWl6aG16Z2i77yMZ2VMb2NhdGlvbui/lOWbnueahOaYr+S4iuasoemAieeCuee7k+aenFxyXG4gICAgY2hvb3NlTG9jYXRpb24uc2V0TG9jYXRpb24obnVsbCk7XHJcbiAgfVxyXG5cclxufSlcclxuZXhwb3J0IHt9XHJcbiJdfQ==