ps-toolkit-ui 1.20.87 → 1.20.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -245,42 +245,65 @@ export class HelperClass {
245
245
  return (d - now) / 1000;
246
246
  }
247
247
  static getDateRemainFull(l, dt, c = 2) {
248
+ let now = new Date();
248
249
  const d = parseInt(dt.substring(6, dt.length - 2), 10);
249
- const now = moment.now();
250
+ let target = new Date(d);
250
251
  let r = '';
251
- let dif = (d - now) / 1000;
252
- const f = dif <= 0;
253
- if (dif <= 0) {
252
+ const f = now > target;
253
+ if (f) {
254
254
  r += l('Finished') + ' - ';
255
- dif = dif * -1;
256
- }
257
- const year = Math.floor(dif / 31536000);
258
- const month = Math.floor((dif % 31536000) / 2628000);
259
- const day = Math.floor(((dif % 31536000) % 2628000) / 86400);
260
- const hour = Math.floor((((dif % 31536000) % 2628000) % 86400) / 3600);
261
- const minute = Math.floor(((((dif % 31536000) % 2628000) % 86400) % 3600) / 60);
262
- if (year > 0) {
263
- r += l('YearP', year.toString());
255
+ const tmp = target;
256
+ target = now;
257
+ now = tmp;
258
+ }
259
+ let years = target.getFullYear() - now.getFullYear();
260
+ let months = target.getMonth() - now.getMonth();
261
+ let days = target.getDate() - now.getDate();
262
+ let hours = target.getHours() - now.getHours();
263
+ let minutes = target.getMinutes() - now.getMinutes();
264
+ const seconds = target.getSeconds() - now.getSeconds();
265
+ if (seconds < 0) {
266
+ minutes--;
267
+ }
268
+ if (minutes < 0) {
269
+ minutes += 60;
270
+ hours--;
271
+ }
272
+ if (hours < 0) {
273
+ hours += 24;
274
+ days--;
275
+ }
276
+ if (days < 0) {
277
+ const prevMonth = new Date(target.getFullYear(), target.getMonth(), 0);
278
+ days += prevMonth.getDate();
279
+ months--;
280
+ }
281
+ if (months < 0) {
282
+ months += 12;
283
+ years--;
284
+ }
285
+ if (years > 0) {
286
+ r += l('YearP', years.toString());
264
287
  c--;
265
288
  }
266
- if (month > 0 && c > 0) {
267
- r += year > 0 ? l('And') : '';
268
- r += l('MonthP', month.toString());
289
+ if (months > 0 && c > 0) {
290
+ r += years > 0 ? l('And') : '';
291
+ r += l('MonthP', months.toString());
269
292
  c--;
270
293
  }
271
- if (day > 0 && c > 0) {
272
- r += year > 0 || month > 0 ? l('And') : '';
273
- r += l('DayP', day.toString());
294
+ if (days > 0 && c > 0) {
295
+ r += years > 0 || months > 0 ? l('And') : '';
296
+ r += l('DayP', days.toString());
274
297
  c--;
275
298
  }
276
- if (hour > 0 && c > 0) {
277
- r += year > 0 || month > 0 || day > 0 ? l('And') : '';
278
- r += l('HourP', hour.toString());
299
+ if (hours > 0 && c > 0) {
300
+ r += years > 0 || months > 0 || days > 0 ? l('And') : '';
301
+ r += l('HourP', hours.toString());
279
302
  c--;
280
303
  }
281
- if (minute > 0 && c > 0) {
282
- r += year > 0 || month > 0 || day > 0 || hour > 0 ? l('And') : '';
283
- r += l('MinuteP', minute.toString());
304
+ if (minutes > 0 && c > 0) {
305
+ r += years > 0 || months > 0 || days > 0 || hours > 0 ? l('And') : '';
306
+ r += l('MinuteP', minutes.toString());
284
307
  c--;
285
308
  }
286
309
  r += (r !== '' ? '' : l('LessThanMinute')) + ' ' + (f ? l('Ago') : l('Later'));
@@ -624,4 +647,4 @@ export class HelperClass {
624
647
  return formData;
625
648
  }
626
649
  }
627
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IkQ6L1BzVG9vbGtpdC9VSS9wcm9qZWN0cy9wcy10b29sa2l0LXVpL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jbGFzc2VzL2hlbHBlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbkIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELFdBQVc7QUFDWCxNQUFNLE9BQU8sV0FBVztJQUN0QixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQWU7UUFDN0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDckMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUU7WUFDM0MsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO2FBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDMUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlC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dGhvZCxcclxuICBQZXJtaXNzaW9uQWNjZXNzVHlwZUVudW0sXHJcbiAgUGVybWlzc2lvbklucHV0QWN0aW9uRW51bSxcclxuICBQZXJtaXNzaW9uSW5wdXRUeXBlRW51bSxcclxuICBQZXJtaXNzaW9uVHlwZUVudW1cclxufSBmcm9tICcuL2VudW0uY2xhc3MnO1xyXG5pbXBvcnQge0lucHV0Q2xhc3N9IGZyb20gJy4vZm9ybS5jbGFzcyc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdqYWxhbGktbW9tZW50JztcclxuaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7UGVybWlzc2lvbkNsYXNzfSBmcm9tICcuL3Blcm1pc3Npb24uY2xhc3MnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIEhlbHBlckNsYXNzIHtcclxuICBzdGF0aWMgZ2V0TGFiZWwoaW5wOiBJbnB1dENsYXNzKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG4gPSBpbnAubGFiZWwgIT0gbnVsbCA/IGlucC5sYWJlbCA6IGlucC5uYW1lO1xyXG4gICAgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5SZXF1aXJlZCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvclJlcXVpcmVkJywgbik7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5JbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9ySW52YWxpZCcsIG4pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuTGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yTGVuZ3RoJywgW24sIGlucC5taW5MZW5ndGhdKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wLmVycm9yID09PSBJbnB1dEVycm9yLk1pbkxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvck1pbkxlbmd0aCcsIFtuLCBpbnAubWluTGVuZ3RoXSk7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5NYXhMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3JNYXhMZW5ndGgnLCBbbiwgaW5wLm1heExlbmd0aF0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuTWluQW1vdW50KSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yTWluQW1vdW50JywgW24sIGlucC5taW5MZW5ndGhdKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wLmVycm9yID09PSBJbnB1dEVycm9yLk1heEFtb3VudCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvck1heEFtb3VudCcsIFtuLCBpbnAubWF4TGVuZ3RoXSk7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5FeHBpcmVkKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yRXhwaXJlZCcsIG4pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuV3JvbmcpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3JXcm9uZycsIG4pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3InLCBuKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wLmVycm9yID09PSBJbnB1dEVycm9yLk5vdE1hdGNoKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yTm90TWF0Y2gnLCBpbnAubWF0Y2gubmFtZSk7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5FeGlzdCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvckV4aXN0Jywgbik7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5Ob3RFeGlzdCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvck5vdEV4aXN0Jywgbik7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5Ob3RBbGxvd2VkKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yTm90QWxsb3dlZCcsIFtuLCBpbnAuYWxsb3dlZC5qb2luKCcsICcpXSk7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5NYXhDb250ZW50KSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yTWF4Q29udGVudCcsIFtuLCBpbnAubWF4TGVuZ3RoXSk7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5VcGxvYWQpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3JVcGxvYWQnLCBuKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2MgPSBpbnAuZGVzY3JpcHRpb24gIT09IG51bGwgPyAnICgnICsgaW5wLmwoaW5wLmRlc2NyaXB0aW9uKSArICcpJyA6ICcnO1xyXG4gICAgcmV0dXJuIGlucC5sKG4pICsgZGVzYztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBuYXRpb25hbENvZGVOdW1WYWxpZChjKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gSGVscGVyQ2xhc3MubmF0aW9uYWxDb2RlVmFsaWQoYykgfHwgSGVscGVyQ2xhc3MubmF0aW9uYWxOdW1WYWxpZChjKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlY29ub21pY051bVZhbGlkKGMpOiBib29sZWFuIHtcclxuICAgIGlmICghYyl7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBjLmxlbmd0aCA9PT0gMTEgfHwgKGMubGVuZ3RoID09PSAxNCAmJiBIZWxwZXJDbGFzcy5uYXRpb25hbENvZGVWYWxpZChjLnN1YnN0cigwLCAxMCkpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBuYXRpb25hbENvZGVWYWxpZChjKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIVJlZ0V4cCgvXlxcZHsxMH0kLykudGVzdChjKSB8fCBSZWdFeHAoL14oLilcXDErJC8pLnRlc3QoYykpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2hlY2sgPSBwYXJzZUludChjWzldLCAxMCk7XHJcbiAgICBsZXQgc3VtID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTsgKytpKSB7XHJcbiAgICAgIHN1bSArPSBwYXJzZUludChjW2ldLCAxMCkgKiAoMTAgLSBpKTtcclxuICAgIH1cclxuICAgIHN1bSAlPSAxMTtcclxuICAgIHJldHVybiAoc3VtIDwgMiAmJiBjaGVjayA9PT0gc3VtKSB8fCAoc3VtID49IDIgJiYgY2hlY2sgKyBzdW0gPT09IDExKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBuYXRpb25hbE51bVZhbGlkKGNvZGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGwgPSBjb2RlLmxlbmd0aDtcclxuXHJcbiAgICBpZiAobCA8IDExIHx8IHBhcnNlSW50KGNvZGUsIDEwKSA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcnNlSW50KGNvZGUuc3Vic3RyKDMsIDYpLCAxMCkgPT09IDApe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjID0gcGFyc2VJbnQoY29kZS5zdWJzdHIoMTAsIDEpLCAxMCk7XHJcbiAgICBjb25zdCBkID0gcGFyc2VJbnQoY29kZS5zdWJzdHIoOSwgMSksIDEwKSArIDI7XHJcbiAgICBjb25zdCB6ID0gWzI5LCAyNywgMjMsIDE5LCAxN107XHJcbiAgICBsZXQgcyA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspe1xyXG4gICAgICBzICs9IChkICsgcGFyc2VJbnQoY29kZS5zdWJzdHIoaSwgMSksIDEwKSkgKiB6W2kgJSA1XTtcclxuICAgIH1cclxuICAgIHMgPSBzICUgMTE7XHJcbiAgICBpZiAocyA9PT0gMTApe1xyXG4gICAgICBzID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiBjID09PSBzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHBsYXF1ZVZhbGlkKHAsIHQ6IElucHV0VHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHQgPT09IElucHV0VHlwZS5QbGFxdWUgJiYgIVJlZ0V4cCgvXlswLTldezJ9X1vYp9io2b7Yqtir2Kzahtit2K7Yr9iw2LHYstqY2LPYtNi12LbYt9i42LnYutmB2YLaqdqv2YTZhdmG2YjZh9uMXV9bMC05XXszfV9bMC05XXsyfSQvKS50ZXN0KHApKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodCA9PT0gSW5wdXRUeXBlLlBsYXF1ZU0gJiYgIVJlZ0V4cCgvXlswLTldezN9X1swLTldezV9JC8pLnRlc3QocCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNvNzA2NE1vZDk3XzEwKGliYW4pOiBudW1iZXJ7XHJcbiAgICBsZXQgcmVtYWluZGVyID0gaWJhbjtcclxuICAgIHdoaWxlIChyZW1haW5kZXIubGVuZ3RoID4gMil7XHJcbiAgICAgIGNvbnN0IGJsb2NrID0gcmVtYWluZGVyLnNsaWNlKDAsIDkpO1xyXG4gICAgICByZW1haW5kZXIgPSBwYXJzZUludChibG9jaywgMTApICUgOTcgKyByZW1haW5kZXIuc2xpY2UoYmxvY2subGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyc2VJbnQocmVtYWluZGVyLCAxMCkgJSA5NztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzaGViYVZhbGlkKHN0cik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC9JUlswLTldezI0fS87XHJcbiAgICBpZiAoIXN0ci5zdGFydHNXaXRoKCdJUicpKXtcclxuICAgICAgc3RyID0gJ0lSJyArIHN0cjtcclxuICAgIH1cclxuICAgIGlmIChzdHIubGVuZ3RoICE9PSAyNikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFwYXR0ZXJuLnRlc3Qoc3RyKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG5ld1N0ciA9IHN0ci5zdWJzdHIoNCk7XHJcbiAgICBjb25zdCBkMSA9IHN0ci5jaGFyQ29kZUF0KDApIC0gNjUgKyAxMDtcclxuICAgIGNvbnN0IGQyID0gc3RyLmNoYXJDb2RlQXQoMSkgLSA2NSArIDEwO1xyXG4gICAgbmV3U3RyICs9IGQxLnRvU3RyaW5nKCkgKyBkMi50b1N0cmluZygpICsgc3RyLnN1YnN0cigyLCAyKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5pc283MDY0TW9kOTdfMTAobmV3U3RyKSA9PT0gMTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwb3N0YWxDb2RlVmFsaWQoYyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIFJlZ0V4cCgvXlxcYig/IShcXGQpXFwxezN9KVsxMy05XXs1fVswLTldezV9XFxiJC8pLnRlc3QoYyk7XHJcbiAgfVxyXG4gIHN0YXRpYyByYW5kb20obGVuZ3RoLCB1cHBlciA9IHRydWUsIGxvd2VyID0gdHJ1ZSwgbnVtID0gdHJ1ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gYCR7dXBwZXIgPyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonIDogJyd9JHtsb3dlciA/ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgOiAnJ30ke251bSA/ICcxMjM0NTY3ODknIDogJyd9YDtcclxuICAgIGNvbnN0IGNoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysgKSB7XHJcbiAgICAgIHJlc3VsdCArPSBjaGFyYWN0ZXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuICBzdGF0aWMgc2V0Q29va2llKG5hbWUsIHZhbHVlLCBkYXlzID0gMzY1KTogdm9pZCB7XHJcbiAgICBsZXQgZXhwaXJlcyA9ICcnO1xyXG4gICAgaWYgKGRheXMpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIChkYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCkpO1xyXG4gICAgICBleHBpcmVzID0gJzsgZXhwaXJlcz0nICsgZGF0ZS50b1VUQ1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArICc9JyArICh2YWx1ZSB8fCAnJykgICsgZXhwaXJlcyArICc7IHBhdGg9Lyc7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRDb29raWUobmFtZSwgZGVmID0gbnVsbCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBuYW1lRVEgPSBuYW1lICsgJz0nO1xyXG4gICAgY29uc3QgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcclxuICAgIGZvciAobGV0IGMgb2YgY2EpIHtcclxuICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09PSAnICcpe1xyXG4gICAgICAgIGMgPSBjLnN1YnN0cmluZygxLCBjLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09PSAwKXtcclxuICAgICAgICByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVmO1xyXG4gIH1cclxuICBzdGF0aWMgZXJhc2VDb29raWUobmFtZSk6IHZvaWQge1xyXG4gICAgZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JylcclxuICAgICAgLmZvckVhY2goKGMpID0+IHsgZG9jdW1lbnQuY29va2llID0gYy5yZXBsYWNlKC9eICsvLCAnJykucmVwbGFjZSgvPS4qLywgJz07ZXhwaXJlcz0nICsgbmV3IERhdGUoKS50b1VUQ1N0cmluZygpICsgJztwYXRoPS8nKTsgfSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXREYXRlRGlmKGwsIGR0OiBzdHJpbmcsIGMgPSAyKTogc3RyaW5ne1xyXG4gICAgY29uc3QgZCA9IHBhcnNlSW50KGR0LnN1YnN0cmluZyg2LCBkdC5sZW5ndGggLSAyKSwgMTApO1xyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50Lm5vdygpO1xyXG4gICAgY29uc3QgZGlmID0gKG5vdyAtIGQpIC8gMTAwMDtcclxuICAgIGNvbnN0IGggPSBNYXRoLmZsb29yKGRpZiAvIDM2MDApO1xyXG4gICAgY29uc3QgbSA9IE1hdGguZmxvb3IoZGlmICUgMzYwMCAvIDYwKTtcclxuICAgIGlmIChoIDwgMjQpXHJcbiAgICB7XHJcbiAgICAgIGxldCByID0gJyc7XHJcbiAgICAgIGlmIChoID4gMCl7XHJcbiAgICAgICAgciArPSBsKCdIb3VyUCcsIGgudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYy0tO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtID4gMCAmJiBjID4gMCl7XHJcbiAgICAgICAgaWYgKHIgIT09ICcnKXtcclxuICAgICAgICAgIHIgKz0gbCgnQW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHIgKz0gbCgnTWludXRlUCcsIG0udG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgICAgciArPSByICE9PSAnJyA/ICcnIDogbCgnQUZldycpO1xyXG4gICAgICByICs9ICcgJyArIGwoJ0FnbycpO1xyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH1cclxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJsdHIgZC1pYlwiPicgKyBtb21lbnQoZCkubG9jYWxlKCdmYScpLmZvcm1hdCgnallZWVkvak1NL2pERCBISDptbScpICsgJzwvc3Bhbj4nO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0Um93RW51bShsLCBlLCBkdCk6IHN0cmluZ3tcclxuICAgIGNvbnN0IHYgPSBlLmZpbmQoeCA9PiB4LlZhbHVlID09PSBkdCk7XHJcbiAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwic3RhdHVzICR7di5DbGFzc31cIj5gICsgbCh2Lk5hbWUpICsgJzwvc3Bhbj4nO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0Tm93KCk6IGFueXtcclxuICAgIHJldHVybiBtb21lbnQubm93KCk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRJbnB1dERhdGUoYW1vdW50OiBudW1iZXIgPSAwLCB1bml0OiBzdHJpbmcgPSAnbW9udGgnKTogYW55e1xyXG4gICAgcmV0dXJuIEhlbHBlckNsYXNzLmdldE1vbWVudCgpLmFkZChhbW91bnQsIHVuaXQpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ1lZWVkvTU0vREQnKTtcclxuICB9XHJcbiAgc3RhdGljIGdldE1vbWVudChpID0gbnVsbCwgZiA9IG51bGwpOiBhbnl7XHJcbiAgICBpZiAoaSA9PSBudWxsKXtcclxuICAgICAgcmV0dXJuIG1vbWVudCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vbWVudChpLCBmKTtcclxuICB9XHJcbiAgc3RhdGljIGdldERhdGVSZW1haW4obCwgZHQ6IHN0cmluZywgYyA9IDIpOiBzdHJpbmd7XHJcbiAgICBjb25zdCBkID0gcGFyc2VJbnQoZHQuc3Vic3RyaW5nKDYsIGR0Lmxlbmd0aCAtIDIpLCAxMCk7XHJcbiAgICBjb25zdCBub3cgPSBtb21lbnQubm93KCk7XHJcbiAgICBjb25zdCBkaWYgPSAoZCAtIG5vdykgLyAxMDAwO1xyXG4gICAgaWYgKGRpZiA8PSAwKVxyXG4gICAge1xyXG4gICAgICByZXR1cm4gbCgnRW5kZWQnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGggPSBNYXRoLmZsb29yKGRpZiAvIDM2MDApO1xyXG4gICAgY29uc3QgbSA9IE1hdGguZmxvb3IoZGlmICUgMzYwMCAvIDYwKTtcclxuICAgIGlmIChoIDwgMjQpXHJcbiAgICB7XHJcbiAgICAgIGxldCByID0gJyc7XHJcbiAgICAgIGlmIChoID4gMCl7XHJcbiAgICAgICAgciArPSBsKCdIb3VyUCcsIGgudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYy0tO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChtID4gMCAmJiBjID4gMCl7XHJcbiAgICAgICAgaWYgKHIgIT09ICcnKXtcclxuICAgICAgICAgIHIgKz0gbCgnQW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHIgKz0gbCgnTWludXRlUCcsIG0udG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgICAgciArPSByICE9PSAnJyA/ICcnIDogbCgnQUZldycpO1xyXG4gICAgICByICs9ICcgJyArIGwoJ0xhdGVyJyk7XHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cImx0ciBkLWliXCI+JyArIG1vbWVudChkKS5sb2NhbGUoJ2ZhJykuZm9ybWF0KCdqWVlZWS9qTU0vakREIEhIOm1tJykgKyAnPC9zcGFuPic7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXREYXRlUmVtYWluU2VjKGR0OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZCA9IHBhcnNlSW50KGR0LnN1YnN0cmluZyg2LCBkdC5sZW5ndGggLSAyKSwgMTApO1xyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50Lm5vdygpO1xyXG4gICAgcmV0dXJuIChkIC0gbm93KSAvIDEwMDA7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXREYXRlUmVtYWluRnVsbChsLCBkdDogc3RyaW5nLCBjID0gMik6IHN0cmluZ3tcclxuICAgIGNvbnN0IGQgPSBwYXJzZUludChkdC5zdWJzdHJpbmcoNiwgZHQubGVuZ3RoIC0gMiksIDEwKTtcclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudC5ub3coKTtcclxuICAgIGxldCByID0gJyc7XHJcbiAgICBsZXQgZGlmID0gKGQgLSBub3cpIC8gMTAwMDtcclxuICAgIGNvbnN0IGYgPSBkaWYgPD0gMDtcclxuICAgIGlmIChkaWYgPD0gMClcclxuICAgIHtcclxuICAgICAgciArPSBsKCdGaW5pc2hlZCcpICsgJyAtICc7XHJcbiAgICAgIGRpZiA9IGRpZiAqIC0xO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeWVhciA9IE1hdGguZmxvb3IoZGlmIC8gMzE1MzYwMDApO1xyXG4gICAgY29uc3QgbW9udGggPSBNYXRoLmZsb29yKChkaWYgJSAzMTUzNjAwMCkgLyAyNjI4MDAwKTtcclxuICAgIGNvbnN0IGRheSA9IE1hdGguZmxvb3IoKChkaWYgJSAzMTUzNjAwMCkgJSAyNjI4MDAwKSAvIDg2NDAwKTtcclxuICAgIGNvbnN0IGhvdXIgPSBNYXRoLmZsb29yKCgoKGRpZiAlIDMxNTM2MDAwKSAlIDI2MjgwMDApICUgODY0MDApIC8gMzYwMCk7XHJcbiAgICBjb25zdCBtaW51dGUgPSBNYXRoLmZsb29yKCgoKChkaWYgJSAzMTUzNjAwMCkgJSAyNjI4MDAwKSAlIDg2NDAwKSAlIDM2MDApIC8gNjApO1xyXG4gICAgaWYgKHllYXIgPiAwKXtcclxuICAgICAgciArPSBsKCdZZWFyUCcsIHllYXIudG9TdHJpbmcoKSk7XHJcbiAgICAgIGMtLTtcclxuICAgIH1cclxuICAgIGlmIChtb250aCA+IDAgJiYgYyA+IDApe1xyXG4gICAgICByICs9IHllYXIgPiAwID8gbCgnQW5kJykgOiAnJztcclxuICAgICAgciArPSBsKCdNb250aFAnLCBtb250aC50b1N0cmluZygpKTtcclxuICAgICAgYy0tO1xyXG4gICAgfVxyXG4gICAgaWYgKGRheSA+IDAgJiYgYyA+IDApe1xyXG4gICAgICByICs9IHllYXIgPiAwIHx8IG1vbnRoID4gMCA/IGwoJ0FuZCcpIDogJyc7XHJcbiAgICAgIHIgKz0gbCgnRGF5UCcsIGRheS50b1N0cmluZygpKTtcclxuICAgICAgYy0tO1xyXG4gICAgfVxyXG4gICAgaWYgKGhvdXIgPiAwICYmIGMgPiAwKXtcclxuICAgICAgciArPSB5ZWFyID4gMCB8fCBtb250aCA+IDAgfHwgZGF5ID4gMCA/IGwoJ0FuZCcpIDogJyc7XHJcbiAgICAgIHIgKz0gbCgnSG91clAnLCBob3VyLnRvU3RyaW5nKCkpO1xyXG4gICAgICBjLS07XHJcbiAgICB9XHJcbiAgICBpZiAobWludXRlID4gMCAmJiBjID4gMCl7XHJcbiAgICAgIHIgKz0geWVhciA+IDAgfHwgbW9udGggPiAwIHx8IGRheSA+IDAgfHwgaG91ciA+IDAgPyBsKCdBbmQnKSA6ICcnO1xyXG4gICAgICByICs9IGwoJ01pbnV0ZVAnLCBtaW51dGUudG9TdHJpbmcoKSk7XHJcbiAgICAgIGMtLTtcclxuICAgIH1cclxuICAgIHIgKz0gKHIgIT09ICcnID8gJycgOiBsKCdMZXNzVGhhbk1pbnV0ZScpKSArICcgJyArIChmID8gbCgnQWdvJykgOiBsKCdMYXRlcicpKTtcclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0RGF0ZShkdDogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyA9ICdqWVlZWS9qTU0vakREJywgbG9jYWxlOiBzdHJpbmcgPSAnZmEnKTogc3RyaW5ne1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGR0ID09PSBudWxsKXtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IG07XHJcbiAgICAgIGlmICh0eXBlb2YgZHQgPT09ICdzdHJpbmcnICYmIGR0Lmxlbmd0aCA9PT0gMTApIHtcclxuICAgICAgICBtID0gbW9tZW50KGR0LCAnWVlZWS9NTS9ERCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG0gPSBtb21lbnQocGFyc2VJbnQoZHQuc3Vic3RyaW5nKDYsIGR0Lmxlbmd0aCAtIDIpLCAxMCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtLmxvY2FsZShsb2NhbGUpLmZvcm1hdChmb3JtYXQgKyAneicpO1xyXG4gICAgfWNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiBkdDtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhdGljIGdldFRpbWUoZHQ6IGFueSk6IHN0cmluZ3tcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChkdCA9PT0gbnVsbCl7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG0gPSBkdC5Ub3RhbFNlY29uZHMgPj0gMCA/IDEgOiAtMTtcclxuICAgICAgY29uc3QgaG91cnMgPSAoKGR0LkRheXMgKiBtKSAqIDI0KSArIChkdC5Ib3VycyAqIG0pO1xyXG4gICAgICBjb25zdCBtaW51dGUgPSBkdC5NaW51dGVzICogbTtcclxuICAgICAgcmV0dXJuIGAkeyhob3VycyA+IDkgPyBob3VycyA6IGAwJHtob3Vyc31gKX06JHsobWludXRlID4gOSA/IG1pbnV0ZSA6IGAwJHttaW51dGV9YCl9YDtcclxuICAgIH1jYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4gZHQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXREYXRlVGltZShkdDogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyA9ICdqWVlZWS9qTU0vakREIEhIOm1tJyk6IHN0cmluZ3tcclxuICAgIGlmIChkdCA9PT0gbnVsbCl7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IGQgPSBwYXJzZUludChkdC5zdWJzdHJpbmcoNiwgZHQubGVuZ3RoIC0gMiksIDEwKTtcclxuICAgIHJldHVybiBtb21lbnQoZCkubG9jYWxlKCdmYScpLmZvcm1hdChmb3JtYXQpO1xyXG4gIH1cclxuICBzdGF0aWMgdG9QcmljZShsOiBhbnksIGN2OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KGN2KSkgPyAnPHNwYW4gY2xhc3M9XCJsdHIgZC1pYiBtLWwtNS1wXCI+JyArIHBhcnNlRmxvYXQoY3YpLnRvTG9jYWxlU3RyaW5nKCkgKyAnPC9zcGFuPicgKyBsKCdSaWFsJykgOiBsKGN2KTtcclxuICB9XHJcbiAgc3RhdGljIGdldEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3VmZml4ID0gWyAnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xyXG4gICAgbGV0IGRibFNCeXRlID0gYnl0ZXM7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBmb3IgKDsgaSA8IHN1ZmZpeC5sZW5ndGggJiYgYnl0ZXMgPj0gMTAyNDsgaSsrLCBieXRlcyAvPSAxMDI0KVxyXG4gICAge1xyXG4gICAgICBkYmxTQnl0ZSA9IGJ5dGVzIC8gMTAyNC4wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2RibFNCeXRlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcclxuICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwLFxyXG4gICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDEsXHJcbiAgICB9KX0gJHtzdWZmaXhbaV19YDtcclxuICB9XHJcbiAgc3RhdGljIGdldFBEYXRlKGwsIHMpOiBzdHJpbmd7XHJcbiAgICByZXR1cm4gcy5yZXBsYWNlKC9Ib3VyL2csIGwoJ0hvdXInKSlcclxuICAgICAgLnJlcGxhY2UoL0xlc3NUaGFuTWludXRlL2csIGwoJ0xlc3NUaGFuTWludXRlJykpXHJcbiAgICAgIC5yZXBsYWNlKC9NaW51dGUvZywgbCgnTWludXRlJykpXHJcbiAgICAgIC5yZXBsYWNlKC9BbmQvZywgbCgnQW5kJykpXHJcbiAgICAgIC5yZXBsYWNlKC9BRmV3L2csIGwoJ0FGZXcnKSlcclxuICAgICAgLnJlcGxhY2UoL0ZpbmlzaGVkL2csIGwoJ0ZpbmlzaGVkJykpXHJcbiAgICAgIC5yZXBsYWNlKC9EYXkvZywgbCgnRGF5JykpXHJcbiAgICAgIC5yZXBsYWNlKC9MYXRlci9nLCBsKCdMYXRlcicpKVxyXG4gICAgICAucmVwbGFjZSgvQWdvL2csIGwoJ0FnbycpKTtcclxuICB9XHJcblxyXG5cclxuICBzdGF0aWMgR2V0UmVtYWluRGF0ZShsLCB0cyk6IHN0cmluZyB7XHJcbiAgICBpZiAodHMuVGlrcyA8PSAwKXtcclxuICAgICAgcmV0dXJuIGwoJ0ZpbmlzaGVkJyk7XHJcbiAgICB9XHJcbiAgICBsZXQgYyA9IDA7XHJcbiAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICBpZiAodHMuWWVhcnMgPiAwKXtcclxuICAgICAgcmVzdWx0ICs9IGwoJ1llYXJQJywgdHMuWWVhcnMpO1xyXG4gICAgICBjKys7XHJcbiAgICB9XHJcbiAgICBpZiAodHMuTW9udGhzID4gMCl7XHJcbiAgICAgIHJlc3VsdCArPSBjID4gMCA/IGwoJ0FuZCcpIDogJyc7XHJcbiAgICAgIHJlc3VsdCArPSBsKCdNb250aFAnLCB0cy5Nb250aHMpO1xyXG4gICAgICBjKys7XHJcbiAgICB9XHJcbiAgICBpZiAoYyA8IDIgJiYgdHMuRGF5cyA+IDApe1xyXG4gICAgICByZXN1bHQgKz0gYyA+IDAgPyBsKCdBbmQnKSA6ICcnO1xyXG4gICAgICByZXN1bHQgKz0gbCgnRGF5UCcsIHRzLkRheXMpO1xyXG4gICAgICBjKys7XHJcbiAgICB9XHJcbiAgICBpZiAoYyA8IDIgJiYgdHMuSG91cnMgPiAwKXtcclxuICAgICAgcmVzdWx0ICs9IGMgPiAwID8gbCgnQW5kJykgOiAnJztcclxuICAgICAgcmVzdWx0ICs9IGwoJ0hvdXJQJywgdHMuSG91cnMpO1xyXG4gICAgICBjKys7XHJcbiAgICB9XHJcbiAgICBpZiAoYyA8IDIgJiYgdHMuTWludXRlcyA+IDApe1xyXG4gICAgICByZXN1bHQgKz0gYyA+IDAgPyBsKCdBbmQnKSA6ICcnO1xyXG4gICAgICByZXN1bHQgKz0gbCgnTWludXRlUCcsIHRzLk1pbnV0ZXMpO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0ICs9IHJlc3VsdCAhPT0gJycgPyAnICcgKyBsKCdMYXRlcicpIDogbCgnTGVzc1RoYW5NaW51dGUnKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2xvbmU8VD4odjogVCk6IFQge1xyXG4gICAgaWYgKHYgPT0gbnVsbCl7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvcHkgPSBuZXcgKHYuY29uc3RydWN0b3IgYXMgeyBuZXcoKSB9KSgpO1xyXG4gICAgT2JqZWN0LmFzc2lnbihjb3B5LCB2KTtcclxuICAgIHJldHVybiBjb3B5O1xyXG4gIH1cclxuICBzdGF0aWMgY2xvbmVKc29uKGlucCk6IGFueSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnApKTtcclxuICB9XHJcbiAgc3RhdGljIGdldE5hbWUobik6IHN0cmluZ3tcclxuICAgIHJldHVybiBuLnJlcGxhY2UoL9qpL2csICfZgycpLnJlcGxhY2UoL9uML2csICfZiicpLnJlcGxhY2UoL9iiL2csICfYoicpO1xyXG4gIH1cclxuICBzdGF0aWMgYWRkTm90aWZpY2F0aW9uKG0sIGUgPSB0cnVlKTogdm9pZHtcclxuICAgIGNvbnN0IGlkID0gSGVscGVyQ2xhc3MucmFuZG9tKDIwKTtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gICAgJCgnI05vdGlmaWNhdGlvbnMnKS5hcHBlbmQoJzxkaXYgaWQ9XCInICsgaWQgKyAnXCIgY2xhc3M9XCJjb25cIj48ZGl2IGNsYXNzPVwiaXRlbSAnICsgKGUgPyAnZXJyb3InIDogJ3N1Y2Nlc3MnKSArICdcIj48aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiPjwvaT48ZGl2PicgKyBtICsgJzwvZGl2PjwvZGl2PjwvZGl2PicpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGQgPSAkKCcjJyArIGlkKTtcclxuICAgICAgZC5mYWRlT3V0KDMwMCwgKCkgPT4ge1xyXG4gICAgICAgIGQucmVtb3ZlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgMjAwMDApO1xyXG4gIH1cclxuICBzdGF0aWMgY2hlY2tDYXJ0RGlnaXQoY29kZSk6IGJvb2xlYW57XHJcbiAgICBjb25zdCBsID0gY29kZS5sZW5ndGg7XHJcbiAgICBpZiAobCA8IDE2IHx8IHBhcnNlSW50KGNvZGUuc3Vic3RyKDEsIDEwKSwgMTApID09PSAwIHx8XHJcbiAgICAgIHBhcnNlSW50KGNvZGUuc3Vic3RyKDEwLCA2KSwgMTApID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGxldCBzID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKyl7XHJcbiAgICAgIGNvbnN0IGsgPSBpICUgMiA9PT0gMCA/IDIgOiAxO1xyXG4gICAgICBjb25zdCBkID0gcGFyc2VJbnQoY29kZS5zdWJzdHIoaSwgMSksIDEwKSAqIGs7XHJcbiAgICAgIHMgKz0gZCA+IDkgPyBkIC0gOSA6IGQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcyAlIDEwID09PSAwO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldERhdGEoa2V5LCBzdGF0ZSwgcGFyZW50KTogYW55IHtcclxuICAgIGNvbnN0IGRhdGEgPSBbXTtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnNuYXBzaG90LmRhdGEgJiYgcGFyZW50LnNuYXBzaG90LmRhdGFba2V5XSkge1xyXG4gICAgICBkYXRhLnB1c2gocGFyZW50LnNuYXBzaG90LmRhdGFba2V5XS5yZXBsYWNlKCd7fScsIHBhcmVudC5zbmFwc2hvdC5wYXJhbU1hcC5wYXJhbXMuaWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUgJiYgcGFyZW50KSB7XHJcbiAgICAgIGRhdGEucHVzaCguLi50aGlzLmdldERhdGEoa2V5LCBzdGF0ZSwgc3RhdGUuZmlyc3RDaGlsZChwYXJlbnQpKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRDb2xvckJ5QmdDb2xvcihiZ0NvbG9yKTogc3RyaW5ne1xyXG4gICAgaWYgKCFiZ0NvbG9yKSB7IHJldHVybiAnJzsgfVxyXG4gICAgcmV0dXJuIChwYXJzZUludChiZ0NvbG9yLnJlcGxhY2UoJyMnLCAnJyksIDE2KSA+IDB4ZmZmZmZmIC8gMikgPyAnIzAwMCcgOiAnI2ZmZic7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcXVlcnlTdHJpbmdUb0pTT04ocXMgPSBudWxsKTogYW55IHtcclxuICAgIHFzID0gcXMgfHwgbG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpO1xyXG4gICAgaWYgKHFzID09PSAnJyl7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhaXJzID0gcXMuc3BsaXQoJyYnKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgcGFpcnMuZm9yRWFjaCgocCkgPT4ge1xyXG4gICAgICBjb25zdCBwYWlyID0gcC5zcGxpdCgnPScpO1xyXG4gICAgICBjb25zdCBrZXkgPSBwYWlyWzBdLnJlcGxhY2UoJyU1QiU1RCcsICcnKTtcclxuICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQocGFpclsxXSB8fCAnJyk7XHJcblxyXG4gICAgICBpZiAoIHJlc3VsdFtrZXldICkge1xyXG4gICAgICAgIGlmICggT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKCByZXN1bHRba2V5XSApID09PSAnW29iamVjdCBBcnJheV0nICkge1xyXG4gICAgICAgICAgcmVzdWx0W2tleV0ucHVzaCggdmFsdWUgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbIHJlc3VsdFtrZXldLCB2YWx1ZSBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xyXG4gIH1cclxuICBzdGF0aWMgY29weVRvQ2xpcGJvYXJkKHRleHQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB0ZXh0KTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5wdXQpO1xyXG4gICAgaW5wdXQuc2VsZWN0KCk7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbnB1dCk7XHJcbiAgfVxyXG4gIHN0YXRpYyBzZXRCYXJjb2RlUmVhZGVyKGlucDogSW5wdXRDbGFzcyk6IHZvaWQge1xyXG4gICAgaW5wLmJ1dHRvbiA9ICdibHVlJztcclxuICAgIGNvbnN0IGZuID0gaW5wLmlkICsgJ1NldEJhcmNvZGVTY2FuVmFsdWUnO1xyXG4gICAgaW5wLm9uQ2xpY2tCdXR0b24gPSAoKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHdpbmRvdy5KU0ludGVyZmFjZS5zdGFydEJhcmNvZGVTY2FuKGZuKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB3aW5kb3dbZm5dID0gKHMpID0+IHtcclxuICAgICAgICBpZiAoaW5wLnR5cGUgPT09IElucHV0VHlwZS5UZXh0KSB7XHJcbiAgICAgICAgICBpbnAuc2V0VmFsdWUocywgZmFsc2UpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICQoJyMnICsgaW5wLmlkICsgJ1RleHRJbnB1dCAuY29udHJvbCcpLmNsaWNrKCk7XHJcbiAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5wLm9uQmFyY29kZVJlYWRlckNoYW5nZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgICBpbnAub25CYXJjb2RlUmVhZGVyQ2hhbmdlKHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgIH1cclxuICB9XHJcbiAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heCk6IG51bWJlcntcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSApICsgbWluO1xyXG4gIH1cclxuICBzdGF0aWMgZml4Q2hhcnMoc3RyKTogc3RyaW5ne1xyXG4gICAgaWYgKHN0ciA9PSBudWxsKXtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhcmFiaWNMZXR0ZXIgPSBbICfZiicsICfZgycsICfYqScgXTtcclxuICAgIGNvbnN0IHBlcnNpYW5MZXR0ZXIgPSBbICfbjCcsICfaqScsICfZhycgXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKVxyXG4gICAge1xyXG4gICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYXJhYmljTGV0dGVyW2ldLCAnZycpO1xyXG4gICAgICBzdHIgPSBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKHJlLCBwZXJzaWFuTGV0dGVyW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHIudG9TdHJpbmcoKVxyXG4gICAgICAucmVwbGFjZSgvW9uwLdu5XS9nLCBkID0+ICfbsNux27Lbs9u027Xbttu327jbuScuaW5kZXhPZihkKSlcclxuICAgICAgLnJlcGxhY2UoL1vZoC3ZqV0vZywgZCA9PiAn2aDZodmi2aPZpNml2abZp9mo2aknLmluZGV4T2YoZCkpO1xyXG4gIH1cclxuICBzdGF0aWMgVG9SZWFkYWJsZVBsYXF1ZShwKTogc3RyaW5ne1xyXG4gICAgY29uc3QgdG4gPSBwLnNwbGl0KCdfJyk7XHJcbiAgICBpZiAodG4ubGVuZ3RoID09PSA0KXtcclxuICAgICAgdG5bMV0gKz0gJyZscm07JztcclxuICAgICAgdG5bMl0gKz0gJyB8JztcclxuICAgICAgcmV0dXJuIHRuLmpvaW4oJyAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0bi5qb2luKCcgJyk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRGaWxlSWNvbihmKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpbGVJY29ucyA9IHtcclxuICAgICAganBlZzogJ2ZhZCBmYS1maWxlLWltYWdlJywganBnOiAnZmFkIGZhLWZpbGUtaW1hZ2UnLCBwbmc6ICdmYWQgZmEtZmlsZS1pbWFnZScsXHJcbiAgICAgIGRvYzogJ2ZhZCBmYS1maWxlLXdvcmQnLCBkb2N4OiAnZmFkIGZhLWZpbGUtd29yZCcsXHJcbiAgICAgIHhsczogJ2ZhZCBmYS1maWxlLWV4Y2VsJywgeGxzeDogJ2ZhZCBmYS1maWxlLWV4Y2VsJywgY3N2OiAnZmFkIGZhLWZpbGUtY3N2JyxcclxuICAgICAgcHB0OiAnZmFkIGZhLWZpbGUtcG93ZXJwb2ludCcsIHBwdHg6ICdmYWQgZmEtZmlsZS1wb3dlcnBvaW50JyxcclxuICAgICAgdHh0OiAnZmFkIGZhLWZpbGUtbGluZXMnLCBwZGY6ICdmYWQgZmEtZmlsZS1wZGYnLCBmaWxlOiAnZmFkIGZhLWZpbGUnLFxyXG4gICAgICB6aXA6ICdmYWQgZmEtZmlsZS16aXBwZXInLCByYXI6ICdmYWQgZmEtZmlsZS16aXBwZXInXHJcbiAgICB9O1xyXG4gICAgY29uc3QgayA9IGYuc3BsaXQoJy4nKS5hdCgtMSk7XHJcbiAgICByZXR1cm4gZmlsZUljb25zW2tdID8gZmlsZUljb25zW2tdIDogZmlsZUljb25zLmZpbGU7XHJcbiAgfVxyXG4gIHN0YXRpYyBncm91cEJ5KGRhdGEsIGl0ZXJhdGVlKTogYW55e1xyXG4gICAgcmV0dXJuIF8uZ3JvdXBCeShkYXRhLCBpdGVyYXRlZSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRUYWJsZVBlcm1pc3Npb25zKGwgPSB0cnVlLCBpID0gdHJ1ZSwgdSA9IHRydWUsIGQgPSB0cnVlKTogUGVybWlzc2lvbkNsYXNzIHtcclxuICAgIGNvbnN0IHAgPSBuZXcgUGVybWlzc2lvbkNsYXNzKCk7XHJcbiAgICBwLlR5cGUgPSBQZXJtaXNzaW9uVHlwZUVudW0uRm9ybTtcclxuICAgIGNvbnN0IGxBY2Nlc3MgPSBuZXcgUGVybWlzc2lvbkNsYXNzKCk7XHJcbiAgICBsQWNjZXNzLkFjdGlvbiA9ICdMaXN0JztcclxuICAgIGxBY2Nlc3MuVHlwZSA9IFBlcm1pc3Npb25UeXBlRW51bS5BY2Nlc3M7XHJcbiAgICBsQWNjZXNzLkFjY2Vzc1R5cGUgPSBQZXJtaXNzaW9uQWNjZXNzVHlwZUVudW0uTGlzdDtcclxuICAgIGxBY2Nlc3MuSW5wdXRBY3Rpb24gPSBQZXJtaXNzaW9uSW5wdXRBY3Rpb25FbnVtLk5vbmU7XHJcbiAgICBsQWNjZXNzLklucHV0VHlwZSA9IFBlcm1pc3Npb25JbnB1dFR5cGVFbnVtLkljb247XHJcbiAgICBjb25zdCBpQWNjZXNzID0gbmV3IFBlcm1pc3Npb25DbGFzcygpO1xyXG4gICAgaUFjY2Vzcy5BY3Rpb24gPSAnSW5zZXJ0JztcclxuICAgIGlBY2Nlc3MuVHlwZSA9IFBlcm1pc3Npb25UeXBlRW51bS5BY2Nlc3M7XHJcbiAgICBpQWNjZXNzLklucHV0QWN0aW9uID0gUGVybWlzc2lvbklucHV0QWN0aW9uRW51bS5Nb2RhbDtcclxuICAgIGlBY2Nlc3MuSW5wdXRUeXBlID0gUGVybWlzc2lvbklucHV0VHlwZUVudW0uQnV0dG9uO1xyXG4gICAgaUFjY2Vzcy5BY2Nlc3NUeXBlID0gUGVybWlzc2lvbkFjY2Vzc1R5cGVFbnVtLkluc2VydDtcclxuICAgIGNvbnN0IHVBY2Nlc3MgPSBuZXcgUGVybWlzc2lvbkNsYXNzKCk7XHJcbiAgICB1QWNjZXNzLkFjdGlvbiA9ICdVcGRhdGUnO1xyXG4gICAgdUFjY2Vzcy5UeXBlID0gUGVybWlzc2lvblR5cGVFbnVtLk9wdGlvbjtcclxuICAgIHVBY2Nlc3MuSW5wdXRBY3Rpb24gPSBQZXJtaXNzaW9uSW5wdXRBY3Rpb25FbnVtLk5vbmU7XHJcbiAgICB1QWNjZXNzLklucHV0VHlwZSA9IFBlcm1pc3Npb25JbnB1dFR5cGVFbnVtLkljb247XHJcbiAgICB1QWNjZXNzLkFjY2Vzc1R5cGUgPSBQZXJtaXNzaW9uQWNjZXNzVHlwZUVudW0uVXBkYXRlO1xyXG4gICAgdUFjY2Vzcy5JY29uID0gJ2ZhZCBmYS1wZW4nO1xyXG4gICAgdUFjY2Vzcy5OYW1lID0gJ1VwZGF0ZSc7XHJcbiAgICBjb25zdCBkQWNjZXNzID0gbmV3IFBlcm1pc3Npb25DbGFzcygpO1xyXG4gICAgZEFjY2Vzcy5BY3Rpb24gPSAnRGVsZXRlJztcclxuICAgIGRBY2Nlc3MuVHlwZSA9IFBlcm1pc3Npb25UeXBlRW51bS5PcHRpb247XHJcbiAgICBkQWNjZXNzLklucHV0QWN0aW9uID0gUGVybWlzc2lvbklucHV0QWN0aW9uRW51bS5Ob25lO1xyXG4gICAgZEFjY2Vzcy5JbnB1dFR5cGUgPSBQZXJtaXNzaW9uSW5wdXRUeXBlRW51bS5JY29uO1xyXG4gICAgZEFjY2Vzcy5BY2Nlc3NUeXBlID0gUGVybWlzc2lvbkFjY2Vzc1R5cGVFbnVtLkRlbGV0ZTtcclxuICAgIGRBY2Nlc3MuSWNvbiA9ICdmYWQgZmEtdHJhc2gnO1xyXG4gICAgZEFjY2Vzcy5OYW1lID0gJ0RlbGV0ZSc7XHJcbiAgICBwLkFjY2Vzc2VzID0gW107XHJcbiAgICBpZiAobCkge1xyXG4gICAgICBwLkFjY2Vzc2VzLnB1c2gobEFjY2Vzcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaSkge1xyXG4gICAgICBwLkFjY2Vzc2VzLnB1c2goaUFjY2Vzcyk7XHJcbiAgICB9XHJcbiAgICBpZiAodSkge1xyXG4gICAgICBwLkFjY2Vzc2VzLnB1c2godUFjY2Vzcyk7XHJcbiAgICB9XHJcbiAgICBpZiAoZCkge1xyXG4gICAgICBwLkFjY2Vzc2VzLnB1c2goZEFjY2Vzcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcDtcclxuICB9XHJcbiAgc3RhdGljIGpzb25Ub0Zvcm1EYXRhKGpzb24sIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCksIHBhcmVudEtleSA9ICcnKTogRm9ybURhdGEge1xyXG4gICAgaWYgKHR5cGVvZiBqc29uID09PSAnb2JqZWN0JyAmJiBqc29uICE9PSBudWxsKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGpzb24pLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBjb25zdCBmdWxsS2V5ID0gcGFyZW50S2V5ID8gYCR7cGFyZW50S2V5fVske2tleX1dYCA6IGtleTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGpzb25ba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyDYp9qv2LEg2YXZgtiv2KfYsSBudWxsINin2LPYqtiMINii2YYg2LHYpyDZhtin2K/bjNiv2Ycg2Kjar9uM2LFcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAvLyDYp9qv2LEg2KLYqNis2qnYqiDYp9iz2KrYjCDYqNmHINi12YjYsdiqINio2KfYstqv2LTYqtuMINmB2LHYp9iu2YjYp9mG24wg2qnZhlxyXG4gICAgICAgICAgdGhpcy5qc29uVG9Gb3JtRGF0YSh2YWx1ZSwgZm9ybURhdGEsIGZ1bGxLZXkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgIC8vINin2q/YsSDYotix2KfbjNmHINin2LPYqtiMINmH2LEg2LnYttmIINix2Kcg2KzYr9in2q/Yp9mG2Ycg2KfYttin2YHZhyDaqdmGXHJcbiAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJheUtleSA9IGAke2Z1bGxLZXl9WyR7aW5kZXh9XWA7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgLy8g2Kfar9ixINmF2YLYr9in2LEgbnVsbCDYp9iz2KrYjCDYotmGINix2Kcg2YbYp9iv24zYr9mHINio2q/bjNixXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgIHRoaXMuanNvblRvRm9ybURhdGEoaXRlbSwgZm9ybURhdGEsIGFycmF5S2V5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYXJyYXlLZXksIGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8g2YXZgtiv2KfYsSDYs9in2K/ZhyDYsdinINin2LbYp9mB2Ycg2qnZhlxyXG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZ1bGxLZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xyXG4gIH1cclxufVxyXG4iXX0=
650
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IkQ6L1BzVG9vbGtpdC9VSS9wcm9qZWN0cy9wcy10b29sa2l0LXVpL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jbGFzc2VzL2hlbHBlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbkIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELFdBQVc7QUFDWCxNQUFNLE9BQU8sV0FBVztJQUN0QixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQWU7UUFDN0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDckMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUU7WUFDM0MsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO2FBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDMUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlC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QUNiLEtBQUssRUFBRSxDQUFDO1NBQ1Q7UUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUM7WUFDWixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNsQyxDQUFDLEVBQUUsQ0FBQztTQUNMO1FBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUM7WUFDdEIsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9CLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsRUFBRSxDQUFDO1NBQ0w7UUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQztZQUNwQixDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNoQyxDQUFDLEVBQUUsQ0FBQztTQUNMO1FBQ0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUM7WUFDckIsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNsQyxDQUFDLEVBQUUsQ0FBQztT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QUNSOzZCQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFOzRCQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7eUJBQy9DOzZCQUFNOzRCQUNMLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO3lCQUNqQztvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCx5QkFBeUI7b0JBQ3pCLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNqQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIElucHV0RXJyb3IsXHJcbiAgSW5wdXRUeXBlLCBNZXRob2QsXHJcbiAgUGVybWlzc2lvbkFjY2Vzc1R5cGVFbnVtLFxyXG4gIFBlcm1pc3Npb25JbnB1dEFjdGlvbkVudW0sXHJcbiAgUGVybWlzc2lvbklucHV0VHlwZUVudW0sXHJcbiAgUGVybWlzc2lvblR5cGVFbnVtXHJcbn0gZnJvbSAnLi9lbnVtLmNsYXNzJztcclxuaW1wb3J0IHtJbnB1dENsYXNzfSBmcm9tICcuL2Zvcm0uY2xhc3MnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnamFsYWxpLW1vbWVudCc7XHJcbmltcG9ydCAqIGFzICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQge1Blcm1pc3Npb25DbGFzc30gZnJvbSAnLi9wZXJtaXNzaW9uLmNsYXNzJztcclxuXHJcbi8vIEBkeW5hbWljXHJcbmV4cG9ydCBjbGFzcyBIZWxwZXJDbGFzcyB7XHJcbiAgc3RhdGljIGdldExhYmVsKGlucDogSW5wdXRDbGFzcyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBuID0gaW5wLmxhYmVsICE9IG51bGwgPyBpbnAubGFiZWwgOiBpbnAubmFtZTtcclxuICAgIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuUmVxdWlyZWQpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3JSZXF1aXJlZCcsIG4pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuSW52YWxpZCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvckludmFsaWQnLCBuKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wLmVycm9yID09PSBJbnB1dEVycm9yLkxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvckxlbmd0aCcsIFtuLCBpbnAubWluTGVuZ3RoXSk7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5NaW5MZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3JNaW5MZW5ndGgnLCBbbiwgaW5wLm1pbkxlbmd0aF0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuTWF4TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yTWF4TGVuZ3RoJywgW24sIGlucC5tYXhMZW5ndGhdKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wLmVycm9yID09PSBJbnB1dEVycm9yLk1pbkFtb3VudCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvck1pbkFtb3VudCcsIFtuLCBpbnAubWluTGVuZ3RoXSk7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5NYXhBbW91bnQpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3JNYXhBbW91bnQnLCBbbiwgaW5wLm1heExlbmd0aF0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuRXhwaXJlZCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvckV4cGlyZWQnLCBuKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wLmVycm9yID09PSBJbnB1dEVycm9yLldyb25nKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yV3JvbmcnLCBuKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wLmVycm9yID09PSBJbnB1dEVycm9yLkVycm9yKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yJywgbik7XHJcbiAgICB9IGVsc2UgaWYgKGlucC5lcnJvciA9PT0gSW5wdXRFcnJvci5Ob3RNYXRjaCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvck5vdE1hdGNoJywgaW5wLm1hdGNoLm5hbWUpO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuRXhpc3QpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3JFeGlzdCcsIG4pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuTm90RXhpc3QpIHtcclxuICAgICAgcmV0dXJuIGlucC5sKCdGb3JtRXJyb3JOb3RFeGlzdCcsIG4pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuTm90QWxsb3dlZCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvck5vdEFsbG93ZWQnLCBbbiwgaW5wLmFsbG93ZWQuam9pbignLCAnKV0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuTWF4Q29udGVudCkge1xyXG4gICAgICByZXR1cm4gaW5wLmwoJ0Zvcm1FcnJvck1heENvbnRlbnQnLCBbbiwgaW5wLm1heExlbmd0aF0pO1xyXG4gICAgfSBlbHNlIGlmIChpbnAuZXJyb3IgPT09IElucHV0RXJyb3IuVXBsb2FkKSB7XHJcbiAgICAgIHJldHVybiBpbnAubCgnRm9ybUVycm9yVXBsb2FkJywgbik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjID0gaW5wLmRlc2NyaXB0aW9uICE9PSBudWxsID8gJyAoJyArIGlucC5sKGlucC5kZXNjcmlwdGlvbikgKyAnKScgOiAnJztcclxuICAgIHJldHVybiBpbnAubChuKSArIGRlc2M7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbmF0aW9uYWxDb2RlTnVtVmFsaWQoYyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEhlbHBlckNsYXNzLm5hdGlvbmFsQ29kZVZhbGlkKGMpIHx8IEhlbHBlckNsYXNzLm5hdGlvbmFsTnVtVmFsaWQoYyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZWNvbm9taWNOdW1WYWxpZChjKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWMpe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYy5sZW5ndGggPT09IDExIHx8IChjLmxlbmd0aCA9PT0gMTQgJiYgSGVscGVyQ2xhc3MubmF0aW9uYWxDb2RlVmFsaWQoYy5zdWJzdHIoMCwgMTApKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbmF0aW9uYWxDb2RlVmFsaWQoYyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFSZWdFeHAoL15cXGR7MTB9JC8pLnRlc3QoYykgfHwgUmVnRXhwKC9eKC4pXFwxKyQvKS50ZXN0KGMpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNoZWNrID0gcGFyc2VJbnQoY1s5XSwgMTApO1xyXG4gICAgbGV0IHN1bSA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7ICsraSkge1xyXG4gICAgICBzdW0gKz0gcGFyc2VJbnQoY1tpXSwgMTApICogKDEwIC0gaSk7XHJcbiAgICB9XHJcbiAgICBzdW0gJT0gMTE7XHJcbiAgICByZXR1cm4gKHN1bSA8IDIgJiYgY2hlY2sgPT09IHN1bSkgfHwgKHN1bSA+PSAyICYmIGNoZWNrICsgc3VtID09PSAxMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbmF0aW9uYWxOdW1WYWxpZChjb2RlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBsID0gY29kZS5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGwgPCAxMSB8fCBwYXJzZUludChjb2RlLCAxMCkgPT09IDApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJzZUludChjb2RlLnN1YnN0cigzLCA2KSwgMTApID09PSAwKXtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYyA9IHBhcnNlSW50KGNvZGUuc3Vic3RyKDEwLCAxKSwgMTApO1xyXG4gICAgY29uc3QgZCA9IHBhcnNlSW50KGNvZGUuc3Vic3RyKDksIDEpLCAxMCkgKyAyO1xyXG4gICAgY29uc3QgeiA9IFsyOSwgMjcsIDIzLCAxOSwgMTddO1xyXG4gICAgbGV0IHMgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKXtcclxuICAgICAgcyArPSAoZCArIHBhcnNlSW50KGNvZGUuc3Vic3RyKGksIDEpLCAxMCkpICogeltpICUgNV07XHJcbiAgICB9XHJcbiAgICBzID0gcyAlIDExO1xyXG4gICAgaWYgKHMgPT09IDEwKXtcclxuICAgICAgcyA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYyA9PT0gcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwbGFxdWVWYWxpZChwLCB0OiBJbnB1dFR5cGUpOiBib29sZWFuIHtcclxuICAgIGlmICh0ID09PSBJbnB1dFR5cGUuUGxhcXVlICYmICFSZWdFeHAoL15bMC05XXsyfV9b2KfYqNm+2KrYq9is2obYrdiu2K/YsNix2LLamNiz2LTYtdi22LfYuNi52LrZgdmC2qnar9mE2YXZhtmI2YfbjF1fWzAtOV17M31fWzAtOV17Mn0kLykudGVzdChwKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHQgPT09IElucHV0VHlwZS5QbGFxdWVNICYmICFSZWdFeHAoL15bMC05XXszfV9bMC05XXs1fSQvKS50ZXN0KHApKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzbzcwNjRNb2Q5N18xMChpYmFuKTogbnVtYmVye1xyXG4gICAgbGV0IHJlbWFpbmRlciA9IGliYW47XHJcbiAgICB3aGlsZSAocmVtYWluZGVyLmxlbmd0aCA+IDIpe1xyXG4gICAgICBjb25zdCBibG9jayA9IHJlbWFpbmRlci5zbGljZSgwLCA5KTtcclxuICAgICAgcmVtYWluZGVyID0gcGFyc2VJbnQoYmxvY2ssIDEwKSAlIDk3ICsgcmVtYWluZGVyLnNsaWNlKGJsb2NrLmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlSW50KHJlbWFpbmRlciwgMTApICUgOTc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2hlYmFWYWxpZChzdHIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvSVJbMC05XXsyNH0vO1xyXG4gICAgaWYgKCFzdHIuc3RhcnRzV2l0aCgnSVInKSl7XHJcbiAgICAgIHN0ciA9ICdJUicgKyBzdHI7XHJcbiAgICB9XHJcbiAgICBpZiAoc3RyLmxlbmd0aCAhPT0gMjYpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcGF0dGVybi50ZXN0KHN0cikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBuZXdTdHIgPSBzdHIuc3Vic3RyKDQpO1xyXG4gICAgY29uc3QgZDEgPSBzdHIuY2hhckNvZGVBdCgwKSAtIDY1ICsgMTA7XHJcbiAgICBjb25zdCBkMiA9IHN0ci5jaGFyQ29kZUF0KDEpIC0gNjUgKyAxMDtcclxuICAgIG5ld1N0ciArPSBkMS50b1N0cmluZygpICsgZDIudG9TdHJpbmcoKSArIHN0ci5zdWJzdHIoMiwgMik7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaXNvNzA2NE1vZDk3XzEwKG5ld1N0cikgPT09IDE7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcG9zdGFsQ29kZVZhbGlkKGMpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBSZWdFeHAoL15cXGIoPyEoXFxkKVxcMXszfSlbMTMtOV17NX1bMC05XXs1fVxcYiQvKS50ZXN0KGMpO1xyXG4gIH1cclxuICBzdGF0aWMgcmFuZG9tKGxlbmd0aCwgdXBwZXIgPSB0cnVlLCBsb3dlciA9IHRydWUsIG51bSA9IHRydWUpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgY29uc3QgY2hhcmFjdGVycyA9IGAke3VwcGVyID8gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyA6ICcnfSR7bG93ZXIgPyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIDogJyd9JHtudW0gPyAnMTIzNDU2Nzg5JyA6ICcnfWA7XHJcbiAgICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrICkge1xyXG4gICAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgc3RhdGljIHNldENvb2tpZShuYW1lLCB2YWx1ZSwgZGF5cyA9IDM2NSk6IHZvaWQge1xyXG4gICAgbGV0IGV4cGlyZXMgPSAnJztcclxuICAgIGlmIChkYXlzKSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcclxuICAgICAgZXhwaXJlcyA9ICc7IGV4cGlyZXM9JyArIGRhdGUudG9VVENTdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyAnPScgKyAodmFsdWUgfHwgJycpICArIGV4cGlyZXMgKyAnOyBwYXRoPS8nO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0Q29va2llKG5hbWUsIGRlZiA9IG51bGwpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbmFtZUVRID0gbmFtZSArICc9JztcclxuICAgIGNvbnN0IGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XHJcbiAgICBmb3IgKGxldCBjIG9mIGNhKSB7XHJcbiAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PT0gJyAnKXtcclxuICAgICAgICBjID0gYy5zdWJzdHJpbmcoMSwgYy5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjLmluZGV4T2YobmFtZUVRKSA9PT0gMCl7XHJcbiAgICAgICAgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsIGMubGVuZ3RoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZjtcclxuICB9XHJcbiAgc3RhdGljIGVyYXNlQ29va2llKG5hbWUpOiB2b2lkIHtcclxuICAgIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpXHJcbiAgICAgIC5mb3JFYWNoKChjKSA9PiB7IGRvY3VtZW50LmNvb2tpZSA9IGMucmVwbGFjZSgvXiArLywgJycpLnJlcGxhY2UoLz0uKi8sICc9O2V4cGlyZXM9JyArIG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSArICc7cGF0aD0vJyk7IH0pO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0RGF0ZURpZihsLCBkdDogc3RyaW5nLCBjID0gMik6IHN0cmluZ3tcclxuICAgIGNvbnN0IGQgPSBwYXJzZUludChkdC5zdWJzdHJpbmcoNiwgZHQubGVuZ3RoIC0gMiksIDEwKTtcclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudC5ub3coKTtcclxuICAgIGNvbnN0IGRpZiA9IChub3cgLSBkKSAvIDEwMDA7XHJcbiAgICBjb25zdCBoID0gTWF0aC5mbG9vcihkaWYgLyAzNjAwKTtcclxuICAgIGNvbnN0IG0gPSBNYXRoLmZsb29yKGRpZiAlIDM2MDAgLyA2MCk7XHJcbiAgICBpZiAoaCA8IDI0KVxyXG4gICAge1xyXG4gICAgICBsZXQgciA9ICcnO1xyXG4gICAgICBpZiAoaCA+IDApe1xyXG4gICAgICAgIHIgKz0gbCgnSG91clAnLCBoLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGMtLTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobSA+IDAgJiYgYyA+IDApe1xyXG4gICAgICAgIGlmIChyICE9PSAnJyl7XHJcbiAgICAgICAgICByICs9IGwoJ0FuZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByICs9IGwoJ01pbnV0ZVAnLCBtLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHIgKz0gciAhPT0gJycgPyAnJyA6IGwoJ0FGZXcnKTtcclxuICAgICAgciArPSAnICcgKyBsKCdBZ28nKTtcclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibHRyIGQtaWJcIj4nICsgbW9tZW50KGQpLmxvY2FsZSgnZmEnKS5mb3JtYXQoJ2pZWVlZL2pNTS9qREQgSEg6bW0nKSArICc8L3NwYW4+JztcclxuICB9XHJcbiAgc3RhdGljIGdldFJvd0VudW0obCwgZSwgZHQpOiBzdHJpbmd7XHJcbiAgICBjb25zdCB2ID0gZS5maW5kKHggPT4geC5WYWx1ZSA9PT0gZHQpO1xyXG4gICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cInN0YXR1cyAke3YuQ2xhc3N9XCI+YCArIGwodi5OYW1lKSArICc8L3NwYW4+JztcclxuICB9XHJcbiAgc3RhdGljIGdldE5vdygpOiBhbnl7XHJcbiAgICByZXR1cm4gbW9tZW50Lm5vdygpO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0SW5wdXREYXRlKGFtb3VudDogbnVtYmVyID0gMCwgdW5pdDogc3RyaW5nID0gJ21vbnRoJyk6IGFueXtcclxuICAgIHJldHVybiBIZWxwZXJDbGFzcy5nZXRNb21lbnQoKS5hZGQoYW1vdW50LCB1bml0KS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdZWVlZL01NL0REJyk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRNb21lbnQoaSA9IG51bGwsIGYgPSBudWxsKTogYW55e1xyXG4gICAgaWYgKGkgPT0gbnVsbCl7XHJcbiAgICAgIHJldHVybiBtb21lbnQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtb21lbnQoaSwgZik7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXREYXRlUmVtYWluKGwsIGR0OiBzdHJpbmcsIGMgPSAyKTogc3RyaW5ne1xyXG4gICAgY29uc3QgZCA9IHBhcnNlSW50KGR0LnN1YnN0cmluZyg2LCBkdC5sZW5ndGggLSAyKSwgMTApO1xyXG4gICAgY29uc3Qgbm93ID0gbW9tZW50Lm5vdygpO1xyXG4gICAgY29uc3QgZGlmID0gKGQgLSBub3cpIC8gMTAwMDtcclxuICAgIGlmIChkaWYgPD0gMClcclxuICAgIHtcclxuICAgICAgcmV0dXJuIGwoJ0VuZGVkJyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBoID0gTWF0aC5mbG9vcihkaWYgLyAzNjAwKTtcclxuICAgIGNvbnN0IG0gPSBNYXRoLmZsb29yKGRpZiAlIDM2MDAgLyA2MCk7XHJcbiAgICBpZiAoaCA8IDI0KVxyXG4gICAge1xyXG4gICAgICBsZXQgciA9ICcnO1xyXG4gICAgICBpZiAoaCA+IDApe1xyXG4gICAgICAgIHIgKz0gbCgnSG91clAnLCBoLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGMtLTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobSA+IDAgJiYgYyA+IDApe1xyXG4gICAgICAgIGlmIChyICE9PSAnJyl7XHJcbiAgICAgICAgICByICs9IGwoJ0FuZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByICs9IGwoJ01pbnV0ZVAnLCBtLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHIgKz0gciAhPT0gJycgPyAnJyA6IGwoJ0FGZXcnKTtcclxuICAgICAgciArPSAnICcgKyBsKCdMYXRlcicpO1xyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH1cclxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJsdHIgZC1pYlwiPicgKyBtb21lbnQoZCkubG9jYWxlKCdmYScpLmZvcm1hdCgnallZWVkvak1NL2pERCBISDptbScpICsgJzwvc3Bhbj4nO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0RGF0ZVJlbWFpblNlYyhkdDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGQgPSBwYXJzZUludChkdC5zdWJzdHJpbmcoNiwgZHQubGVuZ3RoIC0gMiksIDEwKTtcclxuICAgIGNvbnN0IG5vdyA9IG1vbWVudC5ub3coKTtcclxuICAgIHJldHVybiAoZCAtIG5vdykgLyAxMDAwO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0RGF0ZVJlbWFpbkZ1bGwobCwgZHQ6IHN0cmluZywgYyA9IDIpOiBzdHJpbmd7XHJcbiAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGQgPSBwYXJzZUludChkdC5zdWJzdHJpbmcoNiwgZHQubGVuZ3RoIC0gMiksIDEwKTtcclxuICAgIGxldCB0YXJnZXQgPSBuZXcgRGF0ZShkKTtcclxuICAgIGxldCByID0gJyc7XHJcbiAgICBjb25zdCBmID0gbm93ID4gdGFyZ2V0O1xyXG4gICAgaWYgKGYpXHJcbiAgICB7XHJcbiAgICAgIHIgKz0gbCgnRmluaXNoZWQnKSArICcgLSAnO1xyXG4gICAgICBjb25zdCB0bXAgPSB0YXJnZXQ7XHJcbiAgICAgIHRhcmdldCA9IG5vdztcclxuICAgICAgbm93ID0gdG1wO1xyXG4gICAgfVxyXG4gICAgbGV0IHllYXJzID0gdGFyZ2V0LmdldEZ1bGxZZWFyKCkgLSBub3cuZ2V0RnVsbFllYXIoKTtcclxuICAgIGxldCBtb250aHMgPSB0YXJnZXQuZ2V0TW9udGgoKSAtIG5vdy5nZXRNb250aCgpO1xyXG4gICAgbGV0IGRheXMgPSB0YXJnZXQuZ2V0RGF0ZSgpIC0gbm93LmdldERhdGUoKTtcclxuICAgIGxldCBob3VycyA9IHRhcmdldC5nZXRIb3VycygpIC0gbm93LmdldEhvdXJzKCk7XHJcbiAgICBsZXQgbWludXRlcyA9IHRhcmdldC5nZXRNaW51dGVzKCkgLSBub3cuZ2V0TWludXRlcygpO1xyXG4gICAgY29uc3Qgc2Vjb25kcyA9IHRhcmdldC5nZXRTZWNvbmRzKCkgLSBub3cuZ2V0U2Vjb25kcygpO1xyXG4gICAgaWYgKHNlY29uZHMgPCAwKSB7XHJcbiAgICAgIG1pbnV0ZXMtLTtcclxuICAgIH1cclxuICAgIGlmIChtaW51dGVzIDwgMCkge1xyXG4gICAgICBtaW51dGVzICs9IDYwO1xyXG4gICAgICBob3Vycy0tO1xyXG4gICAgfVxyXG4gICAgaWYgKGhvdXJzIDwgMCkge1xyXG4gICAgICBob3VycyArPSAyNDtcclxuICAgICAgZGF5cy0tO1xyXG4gICAgfVxyXG4gICAgaWYgKGRheXMgPCAwKSB7XHJcbiAgICAgIGNvbnN0IHByZXZNb250aCA9IG5ldyBEYXRlKHRhcmdldC5nZXRGdWxsWWVhcigpLCB0YXJnZXQuZ2V0TW9udGgoKSwgMCk7XHJcbiAgICAgIGRheXMgKz0gcHJldk1vbnRoLmdldERhdGUoKTtcclxuICAgICAgbW9udGhzLS07XHJcbiAgICB9XHJcbiAgICBpZiAobW9udGhzIDwgMCkge1xyXG4gICAgICBtb250aHMgKz0gMTI7XHJcbiAgICAgIHllYXJzLS07XHJcbiAgICB9XHJcbiAgICBpZiAoeWVhcnMgPiAwKXtcclxuICAgICAgciArPSBsKCdZZWFyUCcsIHllYXJzLnRvU3RyaW5nKCkpO1xyXG4gICAgICBjLS07XHJcbiAgICB9XHJcbiAgICBpZiAobW9udGhzID4gMCAmJiBjID4gMCl7XHJcbiAgICAgIHIgKz0geWVhcnMgPiAwID8gbCgnQW5kJykgOiAnJztcclxuICAgICAgciArPSBsKCdNb250aFAnLCBtb250aHMudG9TdHJpbmcoKSk7XHJcbiAgICAgIGMtLTtcclxuICAgIH1cclxuICAgIGlmIChkYXlzID4gMCAmJiBjID4gMCl7XHJcbiAgICAgIHIgKz0geWVhcnMgPiAwIHx8IG1vbnRocyA+IDAgPyBsKCdBbmQnKSA6ICcnO1xyXG4gICAgICByICs9IGwoJ0RheVAnLCBkYXlzLnRvU3RyaW5nKCkpO1xyXG4gICAgICBjLS07XHJcbiAgICB9XHJcbiAgICBpZiAoaG91cnMgPiAwICYmIGMgPiAwKXtcclxuICAgICAgciArPSB5ZWFycyA+IDAgfHwgbW9udGhzID4gMCB8fCBkYXlzID4gMCA/IGwoJ0FuZCcpIDogJyc7XHJcbiAgICAgIHIgKz0gbCgnSG91clAnLCBob3Vycy50b1N0cmluZygpKTtcclxuICAgICAgYy0tO1xyXG4gICAgfVxyXG4gICAgaWYgKG1pbnV0ZXMgPiAwICYmIGMgPiAwKXtcclxuICAgICAgciArPSB5ZWFycyA+IDAgfHwgbW9udGhzID4gMCB8fCBkYXlzID4gMCB8fCBob3VycyA+IDAgPyBsKCdBbmQnKSA6ICcnO1xyXG4gICAgICByICs9IGwoJ01pbnV0ZVAnLCBtaW51dGVzLnRvU3RyaW5nKCkpO1xyXG4gICAgICBjLS07XHJcbiAgICB9XHJcbiAgICByICs9IChyICE9PSAnJyA/ICcnIDogbCgnTGVzc1RoYW5NaW51dGUnKSkgKyAnICcgKyAoZiA/IGwoJ0FnbycpIDogbCgnTGF0ZXInKSk7XHJcbiAgICByZXR1cm4gcjtcclxuICB9XHJcbiAgc3RhdGljIGdldERhdGUoZHQ6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcgPSAnallZWVkvak1NL2pERCcsIGxvY2FsZTogc3RyaW5nID0gJ2ZhJyk6IHN0cmluZ3tcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChkdCA9PT0gbnVsbCl7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBtO1xyXG4gICAgICBpZiAodHlwZW9mIGR0ID09PSAnc3RyaW5nJyAmJiBkdC5sZW5ndGggPT09IDEwKSB7XHJcbiAgICAgICAgbSA9IG1vbWVudChkdCwgJ1lZWVkvTU0vREQnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtID0gbW9tZW50KHBhcnNlSW50KGR0LnN1YnN0cmluZyg2LCBkdC5sZW5ndGggLSAyKSwgMTApKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbS5sb2NhbGUobG9jYWxlKS5mb3JtYXQoZm9ybWF0ICsgJ3onKTtcclxuICAgIH1jYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4gZHQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRUaW1lKGR0OiBhbnkpOiBzdHJpbmd7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoZHQgPT09IG51bGwpe1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBtID0gZHQuVG90YWxTZWNvbmRzID49IDAgPyAxIDogLTE7XHJcbiAgICAgIGNvbnN0IGhvdXJzID0gKChkdC5EYXlzICogbSkgKiAyNCkgKyAoZHQuSG91cnMgKiBtKTtcclxuICAgICAgY29uc3QgbWludXRlID0gZHQuTWludXRlcyAqIG07XHJcbiAgICAgIHJldHVybiBgJHsoaG91cnMgPiA5ID8gaG91cnMgOiBgMCR7aG91cnN9YCl9OiR7KG1pbnV0ZSA+IDkgPyBtaW51dGUgOiBgMCR7bWludXRlfWApfWA7XHJcbiAgICB9Y2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIGR0O1xyXG4gICAgfVxyXG4gIH1cclxuICBzdGF0aWMgZ2V0RGF0ZVRpbWUoZHQ6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcgPSAnallZWVkvak1NL2pERCBISDptbScpOiBzdHJpbmd7XHJcbiAgICBpZiAoZHQgPT09IG51bGwpe1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkID0gcGFyc2VJbnQoZHQuc3Vic3RyaW5nKDYsIGR0Lmxlbmd0aCAtIDIpLCAxMCk7XHJcbiAgICByZXR1cm4gbW9tZW50KGQpLmxvY2FsZSgnZmEnKS5mb3JtYXQoZm9ybWF0KTtcclxuICB9XHJcbiAgc3RhdGljIHRvUHJpY2UobDogYW55LCBjdjogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChjdikpID8gJzxzcGFuIGNsYXNzPVwibHRyIGQtaWIgbS1sLTUtcFwiPicgKyBwYXJzZUZsb2F0KGN2KS50b0xvY2FsZVN0cmluZygpICsgJzwvc3Bhbj4nICsgbCgnUmlhbCcpIDogbChjdik7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRGaWxlU2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN1ZmZpeCA9IFsgJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcclxuICAgIGxldCBkYmxTQnl0ZSA9IGJ5dGVzO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgZm9yICg7IGkgPCBzdWZmaXgubGVuZ3RoICYmIGJ5dGVzID49IDEwMjQ7IGkrKywgYnl0ZXMgLz0gMTAyNClcclxuICAgIHtcclxuICAgICAgZGJsU0J5dGUgPSBieXRlcyAvIDEwMjQuMDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtkYmxTQnl0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCxcclxuICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAxLFxyXG4gICAgfSl9ICR7c3VmZml4W2ldfWA7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRQRGF0ZShsLCBzKTogc3RyaW5ne1xyXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvSG91ci9nLCBsKCdIb3VyJykpXHJcbiAgICAgIC5yZXBsYWNlKC9MZXNzVGhhbk1pbnV0ZS9nLCBsKCdMZXNzVGhhbk1pbnV0ZScpKVxyXG4gICAgICAucmVwbGFjZSgvTWludXRlL2csIGwoJ01pbnV0ZScpKVxyXG4gICAgICAucmVwbGFjZSgvQW5kL2csIGwoJ0FuZCcpKVxyXG4gICAgICAucmVwbGFjZSgvQUZldy9nLCBsKCdBRmV3JykpXHJcbiAgICAgIC5yZXBsYWNlKC9GaW5pc2hlZC9nLCBsKCdGaW5pc2hlZCcpKVxyXG4gICAgICAucmVwbGFjZSgvRGF5L2csIGwoJ0RheScpKVxyXG4gICAgICAucmVwbGFjZSgvTGF0ZXIvZywgbCgnTGF0ZXInKSlcclxuICAgICAgLnJlcGxhY2UoL0Fnby9nLCBsKCdBZ28nKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIEdldFJlbWFpbkRhdGUobCwgdHMpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRzLlRpa3MgPD0gMCl7XHJcbiAgICAgIHJldHVybiBsKCdGaW5pc2hlZCcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGMgPSAwO1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgaWYgKHRzLlllYXJzID4gMCl7XHJcbiAgICAgIHJlc3VsdCArPSBsKCdZZWFyUCcsIHRzLlllYXJzKTtcclxuICAgICAgYysrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRzLk1vbnRocyA+IDApe1xyXG4gICAgICByZXN1bHQgKz0gYyA+IDAgPyBsKCdBbmQnKSA6ICcnO1xyXG4gICAgICByZXN1bHQgKz0gbCgnTW9udGhQJywgdHMuTW9udGhzKTtcclxuICAgICAgYysrO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPCAyICYmIHRzLkRheXMgPiAwKXtcclxuICAgICAgcmVzdWx0ICs9IGMgPiAwID8gbCgnQW5kJykgOiAnJztcclxuICAgICAgcmVzdWx0ICs9IGwoJ0RheVAnLCB0cy5EYXlzKTtcclxuICAgICAgYysrO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPCAyICYmIHRzLkhvdXJzID4gMCl7XHJcbiAgICAgIHJlc3VsdCArPSBjID4gMCA/IGwoJ0FuZCcpIDogJyc7XHJcbiAgICAgIHJlc3VsdCArPSBsKCdIb3VyUCcsIHRzLkhvdXJzKTtcclxuICAgICAgYysrO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPCAyICYmIHRzLk1pbnV0ZXMgPiAwKXtcclxuICAgICAgcmVzdWx0ICs9IGMgPiAwID8gbCgnQW5kJykgOiAnJztcclxuICAgICAgcmVzdWx0ICs9IGwoJ01pbnV0ZVAnLCB0cy5NaW51dGVzKTtcclxuICAgIH1cclxuICAgIHJlc3VsdCArPSByZXN1bHQgIT09ICcnID8gJyAnICsgbCgnTGF0ZXInKSA6IGwoJ0xlc3NUaGFuTWludXRlJyk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNsb25lPFQ+KHY6IFQpOiBUIHtcclxuICAgIGlmICh2ID09IG51bGwpe1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb3B5ID0gbmV3ICh2LmNvbnN0cnVjdG9yIGFzIHsgbmV3KCkgfSkoKTtcclxuICAgIE9iamVjdC5hc3NpZ24oY29weSwgdik7XHJcbiAgICByZXR1cm4gY29weTtcclxuICB9XHJcbiAgc3RhdGljIGNsb25lSnNvbihpbnApOiBhbnkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5wKSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXROYW1lKG4pOiBzdHJpbmd7XHJcbiAgICByZXR1cm4gbi5yZXBsYWNlKC/aqS9nLCAn2YMnKS5yZXBsYWNlKC/bjC9nLCAn2YonKS5yZXBsYWNlKC/Yoi9nLCAn2KInKTtcclxuICB9XHJcbiAgc3RhdGljIGFkZE5vdGlmaWNhdGlvbihtLCBlID0gdHJ1ZSk6IHZvaWR7XHJcbiAgICBjb25zdCBpZCA9IEhlbHBlckNsYXNzLnJhbmRvbSgyMCk7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICQoJyNOb3RpZmljYXRpb25zJykuYXBwZW5kKCc8ZGl2IGlkPVwiJyArIGlkICsgJ1wiIGNsYXNzPVwiY29uXCI+PGRpdiBjbGFzcz1cIml0ZW0gJyArIChlID8gJ2Vycm9yJyA6ICdzdWNjZXNzJykgKyAnXCI+PGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+PGRpdj4nICsgbSArICc8L2Rpdj48L2Rpdj48L2Rpdj4nKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBkID0gJCgnIycgKyBpZCk7XHJcbiAgICAgIGQuZmFkZU91dCgzMDAsICgpID0+IHtcclxuICAgICAgICBkLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0sIDIwMDAwKTtcclxuICB9XHJcbiAgc3RhdGljIGNoZWNrQ2FydERpZ2l0KGNvZGUpOiBib29sZWFue1xyXG4gICAgY29uc3QgbCA9IGNvZGUubGVuZ3RoO1xyXG4gICAgaWYgKGwgPCAxNiB8fCBwYXJzZUludChjb2RlLnN1YnN0cigxLCAxMCksIDEwKSA9PT0gMCB8fFxyXG4gICAgICBwYXJzZUludChjb2RlLnN1YnN0cigxMCwgNiksIDEwKSA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgcyA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspe1xyXG4gICAgICBjb25zdCBrID0gaSAlIDIgPT09IDAgPyAyIDogMTtcclxuICAgICAgY29uc3QgZCA9IHBhcnNlSW50KGNvZGUuc3Vic3RyKGksIDEpLCAxMCkgKiBrO1xyXG4gICAgICBzICs9IGQgPiA5ID8gZCAtIDkgOiBkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHMgJSAxMCA9PT0gMDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXREYXRhKGtleSwgc3RhdGUsIHBhcmVudCk6IGFueSB7XHJcbiAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5zbmFwc2hvdC5kYXRhICYmIHBhcmVudC5zbmFwc2hvdC5kYXRhW2tleV0pIHtcclxuICAgICAgZGF0YS5wdXNoKHBhcmVudC5zbmFwc2hvdC5kYXRhW2tleV0ucmVwbGFjZSgne30nLCBwYXJlbnQuc25hcHNob3QucGFyYW1NYXAucGFyYW1zLmlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0YXRlICYmIHBhcmVudCkge1xyXG4gICAgICBkYXRhLnB1c2goLi4udGhpcy5nZXREYXRhKGtleSwgc3RhdGUsIHN0YXRlLmZpcnN0Q2hpbGQocGFyZW50KSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Q29sb3JCeUJnQ29sb3IoYmdDb2xvcik6IHN0cmluZ3tcclxuICAgIGlmICghYmdDb2xvcikgeyByZXR1cm4gJyc7IH1cclxuICAgIHJldHVybiAocGFyc2VJbnQoYmdDb2xvci5yZXBsYWNlKCcjJywgJycpLCAxNikgPiAweGZmZmZmZiAvIDIpID8gJyMwMDAnIDogJyNmZmYnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHF1ZXJ5U3RyaW5nVG9KU09OKHFzID0gbnVsbCk6IGFueSB7XHJcbiAgICBxcyA9IHFzIHx8IGxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKTtcclxuICAgIGlmIChxcyA9PT0gJycpe1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYWlycyA9IHFzLnNwbGl0KCcmJyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuICAgIHBhaXJzLmZvckVhY2goKHApID0+IHtcclxuICAgICAgY29uc3QgcGFpciA9IHAuc3BsaXQoJz0nKTtcclxuICAgICAgY29uc3Qga2V5ID0gcGFpclswXS5yZXBsYWNlKCclNUIlNUQnLCAnJyk7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0gfHwgJycpO1xyXG5cclxuICAgICAgaWYgKCByZXN1bHRba2V5XSApIHtcclxuICAgICAgICBpZiAoIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCggcmVzdWx0W2tleV0gKSA9PT0gJ1tvYmplY3QgQXJyYXldJyApIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2goIHZhbHVlICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldID0gWyByZXN1bHRba2V5XSwgdmFsdWUgXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXN1bHQpKTtcclxuICB9XHJcbiAgc3RhdGljIGNvcHlUb0NsaXBib2FyZCh0ZXh0KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdGV4dCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucHV0KTtcclxuICAgIGlucHV0LnNlbGVjdCgpO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW5wdXQpO1xyXG4gIH1cclxuICBzdGF0aWMgc2V0QmFyY29kZVJlYWRlcihpbnA6IElucHV0Q2xhc3MpOiB2b2lkIHtcclxuICAgIGlucC5idXR0b24gPSAnYmx1ZSc7XHJcbiAgICBjb25zdCBmbiA9IGlucC5pZCArICdTZXRCYXJjb2RlU2NhblZhbHVlJztcclxuICAgIGlucC5vbkNsaWNrQnV0dG9uID0gKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICB3aW5kb3cuSlNJbnRlcmZhY2Uuc3RhcnRCYXJjb2RlU2Nhbihmbik7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgd2luZG93W2ZuXSA9IChzKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucC50eXBlID09PSBJbnB1dFR5cGUuVGV4dCkge1xyXG4gICAgICAgICAgaW5wLnNldFZhbHVlKHMsIGZhbHNlKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAkKCcjJyArIGlucC5pZCArICdUZXh0SW5wdXQgLmNvbnRyb2wnKS5jbGljaygpO1xyXG4gICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlucC5vbkJhcmNvZGVSZWFkZXJDaGFuZ2UgIT09IG51bGwpe1xyXG4gICAgICAgICAgaW5wLm9uQmFyY29kZVJlYWRlckNoYW5nZShzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpOiBudW1iZXJ7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKSArIG1pbjtcclxuICB9XHJcbiAgc3RhdGljIGZpeENoYXJzKHN0cik6IHN0cmluZ3tcclxuICAgIGlmIChzdHIgPT0gbnVsbCl7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXJhYmljTGV0dGVyID0gWyAn2YonLCAn2YMnLCAn2KknIF07XHJcbiAgICBjb25zdCBwZXJzaWFuTGV0dGVyID0gWyAn24wnLCAn2qknLCAn2YcnIF07XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKylcclxuICAgIHtcclxuICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGFyYWJpY0xldHRlcltpXSwgJ2cnKTtcclxuICAgICAgc3RyID0gc3RyLnRvU3RyaW5nKCkucmVwbGFjZShyZSwgcGVyc2lhbkxldHRlcltpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyLnRvU3RyaW5nKClcclxuICAgICAgLnJlcGxhY2UoL1vbsC3buV0vZywgZCA9PiAn27Dbsduy27PbtNu127bbt9u427knLmluZGV4T2YoZCkpXHJcbiAgICAgIC5yZXBsYWNlKC9b2aAt2aldL2csIGQgPT4gJ9mg2aHZotmj2aTZpdmm2afZqNmpJy5pbmRleE9mKGQpKTtcclxuICB9XHJcbiAgc3RhdGljIFRvUmVhZGFibGVQbGFxdWUocCk6IHN0cmluZ3tcclxuICAgIGNvbnN0IHRuID0gcC5zcGxpdCgnXycpO1xyXG4gICAgaWYgKHRuLmxlbmd0aCA9PT0gNCl7XHJcbiAgICAgIHRuWzFdICs9ICcmbHJtOyc7XHJcbiAgICAgIHRuWzJdICs9ICcgfCc7XHJcbiAgICAgIHJldHVybiB0bi5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG4uam9pbignICcpO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0RmlsZUljb24oZik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaWxlSWNvbnMgPSB7XHJcbiAgICAgIGpwZWc6ICdmYWQgZmEtZmlsZS1pbWFnZScsIGpwZzogJ2ZhZCBmYS1maWxlLWltYWdlJywgcG5nOiAnZmFkIGZhLWZpbGUtaW1hZ2UnLFxyXG4gICAgICBkb2M6ICdmYWQgZmEtZmlsZS13b3JkJywgZG9jeDogJ2ZhZCBmYS1maWxlLXdvcmQnLFxyXG4gICAgICB4bHM6ICdmYWQgZmEtZmlsZS1leGNlbCcsIHhsc3g6ICdmYWQgZmEtZmlsZS1leGNlbCcsIGNzdjogJ2ZhZCBmYS1maWxlLWNzdicsXHJcbiAgICAgIHBwdDogJ2ZhZCBmYS1maWxlLXBvd2VycG9pbnQnLCBwcHR4OiAnZmFkIGZhLWZpbGUtcG93ZXJwb2ludCcsXHJcbiAgICAgIHR4dDogJ2ZhZCBmYS1maWxlLWxpbmVzJywgcGRmOiAnZmFkIGZhLWZpbGUtcGRmJywgZmlsZTogJ2ZhZCBmYS1maWxlJyxcclxuICAgICAgemlwOiAnZmFkIGZhLWZpbGUtemlwcGVyJywgcmFyOiAnZmFkIGZhLWZpbGUtemlwcGVyJ1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGsgPSBmLnNwbGl0KCcuJykuYXQoLTEpO1xyXG4gICAgcmV0dXJuIGZpbGVJY29uc1trXSA/IGZpbGVJY29uc1trXSA6IGZpbGVJY29ucy5maWxlO1xyXG4gIH1cclxuICBzdGF0aWMgZ3JvdXBCeShkYXRhLCBpdGVyYXRlZSk6IGFueXtcclxuICAgIHJldHVybiBfLmdyb3VwQnkoZGF0YSwgaXRlcmF0ZWUpO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0VGFibGVQZXJtaXNzaW9ucyhsID0gdHJ1ZSwgaSA9IHRydWUsIHUgPSB0cnVlLCBkID0gdHJ1ZSk6IFBlcm1pc3Npb25DbGFzcyB7XHJcbiAgICBjb25zdCBwID0gbmV3IFBlcm1pc3Npb25DbGFzcygpO1xyXG4gICAgcC5UeXBlID0gUGVybWlzc2lvblR5cGVFbnVtLkZvcm07XHJcbiAgICBjb25zdCBsQWNjZXNzID0gbmV3IFBlcm1pc3Npb25DbGFzcygpO1xyXG4gICAgbEFjY2Vzcy5BY3Rpb24gPSAnTGlzdCc7XHJcbiAgICBsQWNjZXNzLlR5cGUgPSBQZXJtaXNzaW9uVHlwZUVudW0uQWNjZXNzO1xyXG4gICAgbEFjY2Vzcy5BY2Nlc3NUeXBlID0gUGVybWlzc2lvbkFjY2Vzc1R5cGVFbnVtLkxpc3Q7XHJcbiAgICBsQWNjZXNzLklucHV0QWN0aW9uID0gUGVybWlzc2lvbklucHV0QWN0aW9uRW51bS5Ob25lO1xyXG4gICAgbEFjY2Vzcy5JbnB1dFR5cGUgPSBQZXJtaXNzaW9uSW5wdXRUeXBlRW51bS5JY29uO1xyXG4gICAgY29uc3QgaUFjY2VzcyA9IG5ldyBQZXJtaXNzaW9uQ2xhc3MoKTtcclxuICAgIGlBY2Nlc3MuQWN0aW9uID0gJ0luc2VydCc7XHJcbiAgICBpQWNjZXNzLlR5cGUgPSBQZXJtaXNzaW9uVHlwZUVudW0uQWNjZXNzO1xyXG4gICAgaUFjY2Vzcy5JbnB1dEFjdGlvbiA9IFBlcm1pc3Npb25JbnB1dEFjdGlvbkVudW0uTW9kYWw7XHJcbiAgICBpQWNjZXNzLklucHV0VHlwZSA9IFBlcm1pc3Npb25JbnB1dFR5cGVFbnVtLkJ1dHRvbjtcclxuICAgIGlBY2Nlc3MuQWNjZXNzVHlwZSA9IFBlcm1pc3Npb25BY2Nlc3NUeXBlRW51bS5JbnNlcnQ7XHJcbiAgICBjb25zdCB1QWNjZXNzID0gbmV3IFBlcm1pc3Npb25DbGFzcygpO1xyXG4gICAgdUFjY2Vzcy5BY3Rpb24gPSAnVXBkYXRlJztcclxuICAgIHVBY2Nlc3MuVHlwZSA9IFBlcm1pc3Npb25UeXBlRW51bS5PcHRpb247XHJcbiAgICB1QWNjZXNzLklucHV0QWN0aW9uID0gUGVybWlzc2lvbklucHV0QWN0aW9uRW51bS5Ob25lO1xyXG4gICAgdUFjY2Vzcy5JbnB1dFR5cGUgPSBQZXJtaXNzaW9uSW5wdXRUeXBlRW51bS5JY29uO1xyXG4gICAgdUFjY2Vzcy5BY2Nlc3NUeXBlID0gUGVybWlzc2lvbkFjY2Vzc1R5cGVFbnVtLlVwZGF0ZTtcclxuICAgIHVBY2Nlc3MuSWNvbiA9ICdmYWQgZmEtcGVuJztcclxuICAgIHVBY2Nlc3MuTmFtZSA9ICdVcGRhdGUnO1xyXG4gICAgY29uc3QgZEFjY2VzcyA9IG5ldyBQZXJtaXNzaW9uQ2xhc3MoKTtcclxuICAgIGRBY2Nlc3MuQWN0aW9uID0gJ0RlbGV0ZSc7XHJcbiAgICBkQWNjZXNzLlR5cGUgPSBQZXJtaXNzaW9uVHlwZUVudW0uT3B0aW9uO1xyXG4gICAgZEFjY2Vzcy5JbnB1dEFjdGlvbiA9IFBlcm1pc3Npb25JbnB1dEFjdGlvbkVudW0uTm9uZTtcclxuICAgIGRBY2Nlc3MuSW5wdXRUeXBlID0gUGVybWlzc2lvbklucHV0VHlwZUVudW0uSWNvbjtcclxuICAgIGRBY2Nlc3MuQWNjZXNzVHlwZSA9IFBlcm1pc3Npb25BY2Nlc3NUeXBlRW51bS5EZWxldGU7XHJcbiAgICBkQWNjZXNzLkljb24gPSAnZmFkIGZhLXRyYXNoJztcclxuICAgIGRBY2Nlc3MuTmFtZSA9ICdEZWxldGUnO1xyXG4gICAgcC5BY2Nlc3NlcyA9IFtdO1xyXG4gICAgaWYgKGwpIHtcclxuICAgICAgcC5BY2Nlc3Nlcy5wdXNoKGxBY2Nlc3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKGkpIHtcclxuICAgICAgcC5BY2Nlc3Nlcy5wdXNoKGlBY2Nlc3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHUpIHtcclxuICAgICAgcC5BY2Nlc3Nlcy5wdXNoKHVBY2Nlc3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKGQpIHtcclxuICAgICAgcC5BY2Nlc3Nlcy5wdXNoKGRBY2Nlc3MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHA7XHJcbiAgfVxyXG4gIHN0YXRpYyBqc29uVG9Gb3JtRGF0YShqc29uLCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpLCBwYXJlbnRLZXkgPSAnJyk6IEZvcm1EYXRhIHtcclxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gJ29iamVjdCcgJiYganNvbiAhPT0gbnVsbCkge1xyXG4gICAgICBPYmplY3Qua2V5cyhqc29uKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnVsbEtleSA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX1bJHtrZXl9XWAgOiBrZXk7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBqc29uW2tleV07XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8g2Kfar9ixINmF2YLYr9in2LEgbnVsbCDYp9iz2KrYjCDYotmGINix2Kcg2YbYp9iv24zYr9mHINio2q/bjNixXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgLy8g2Kfar9ixINii2KjYrNqp2Kog2KfYs9iq2Iwg2KjZhyDYtdmI2LHYqiDYqNin2LLar9i02KrbjCDZgdix2KfYrtmI2KfZhtuMINqp2YZcclxuICAgICAgICAgIHRoaXMuanNvblRvRm9ybURhdGEodmFsdWUsIGZvcm1EYXRhLCBmdWxsS2V5KTtcclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAvLyDYp9qv2LEg2KLYsdin24zZhyDYp9iz2KrYjCDZh9ixINi52LbZiCDYsdinINis2K/Yp9qv2KfZhtmHINin2LbYp9mB2Ycg2qnZhlxyXG4gICAgICAgICAgdmFsdWUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYXJyYXlLZXkgPSBgJHtmdWxsS2V5fVske2luZGV4fV1gO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIC8vINin2q/YsSDZhdmC2K/Yp9ixIG51bGwg2KfYs9iq2Iwg2KLZhiDYsdinINmG2KfYr9uM2K/ZhyDYqNqv24zYsVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmpzb25Ub0Zvcm1EYXRhKGl0ZW0sIGZvcm1EYXRhLCBhcnJheUtleSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGFycmF5S2V5LCBpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vINmF2YLYr9in2LEg2LPYp9iv2Ycg2LHYpyDYp9i22KfZgdmHINqp2YZcclxuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmdWxsS2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtRGF0YTtcclxuICB9XHJcbn1cclxuIl19
@@ -959,42 +959,65 @@ class HelperClass {
959
959
  return (d - now$1) / 1000;
960
960
  }
961
961
  static getDateRemainFull(l, dt, c = 2) {
962
+ let now = new Date();
962
963
  const d = parseInt(dt.substring(6, dt.length - 2), 10);
963
- const now$1 = now();
964
+ let target = new Date(d);
964
965
  let r = '';
965
- let dif = (d - now$1) / 1000;
966
- const f = dif <= 0;
967
- if (dif <= 0) {
966
+ const f = now > target;
967
+ if (f) {
968
968
  r += l('Finished') + ' - ';
969
- dif = dif * -1;
970
- }
971
- const year = Math.floor(dif / 31536000);
972
- const month = Math.floor((dif % 31536000) / 2628000);
973
- const day = Math.floor(((dif % 31536000) % 2628000) / 86400);
974
- const hour = Math.floor((((dif % 31536000) % 2628000) % 86400) / 3600);
975
- const minute = Math.floor(((((dif % 31536000) % 2628000) % 86400) % 3600) / 60);
976
- if (year > 0) {
977
- r += l('YearP', year.toString());
969
+ const tmp = target;
970
+ target = now;
971
+ now = tmp;
972
+ }
973
+ let years = target.getFullYear() - now.getFullYear();
974
+ let months = target.getMonth() - now.getMonth();
975
+ let days = target.getDate() - now.getDate();
976
+ let hours = target.getHours() - now.getHours();
977
+ let minutes = target.getMinutes() - now.getMinutes();
978
+ const seconds = target.getSeconds() - now.getSeconds();
979
+ if (seconds < 0) {
980
+ minutes--;
981
+ }
982
+ if (minutes < 0) {
983
+ minutes += 60;
984
+ hours--;
985
+ }
986
+ if (hours < 0) {
987
+ hours += 24;
988
+ days--;
989
+ }
990
+ if (days < 0) {
991
+ const prevMonth = new Date(target.getFullYear(), target.getMonth(), 0);
992
+ days += prevMonth.getDate();
993
+ months--;
994
+ }
995
+ if (months < 0) {
996
+ months += 12;
997
+ years--;
998
+ }
999
+ if (years > 0) {
1000
+ r += l('YearP', years.toString());
978
1001
  c--;
979
1002
  }
980
- if (month > 0 && c > 0) {
981
- r += year > 0 ? l('And') : '';
982
- r += l('MonthP', month.toString());
1003
+ if (months > 0 && c > 0) {
1004
+ r += years > 0 ? l('And') : '';
1005
+ r += l('MonthP', months.toString());
983
1006
  c--;
984
1007
  }
985
- if (day > 0 && c > 0) {
986
- r += year > 0 || month > 0 ? l('And') : '';
987
- r += l('DayP', day.toString());
1008
+ if (days > 0 && c > 0) {
1009
+ r += years > 0 || months > 0 ? l('And') : '';
1010
+ r += l('DayP', days.toString());
988
1011
  c--;
989
1012
  }
990
- if (hour > 0 && c > 0) {
991
- r += year > 0 || month > 0 || day > 0 ? l('And') : '';
992
- r += l('HourP', hour.toString());
1013
+ if (hours > 0 && c > 0) {
1014
+ r += years > 0 || months > 0 || days > 0 ? l('And') : '';
1015
+ r += l('HourP', hours.toString());
993
1016
  c--;
994
1017
  }
995
- if (minute > 0 && c > 0) {
996
- r += year > 0 || month > 0 || day > 0 || hour > 0 ? l('And') : '';
997
- r += l('MinuteP', minute.toString());
1018
+ if (minutes > 0 && c > 0) {
1019
+ r += years > 0 || months > 0 || days > 0 || hours > 0 ? l('And') : '';
1020
+ r += l('MinuteP', minutes.toString());
998
1021
  c--;
999
1022
  }
1000
1023
  r += (r !== '' ? '' : l('LessThanMinute')) + ' ' + (f ? l('Ago') : l('Later'));