ngx-sp-infra 0.1.7 → 0.1.9

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.
@@ -51,6 +51,25 @@ export class Utils {
51
51
  const dateString = text.split('-');
52
52
  return new Date(+dateString[0], (+dateString[1]) - 1, +dateString[2]);
53
53
  }
54
+ /**
55
+ * Verifica se um determinado ano é bissexto.
56
+ * @param year Ano a ser verificado.
57
+ * @returns Retorna true se o ano for bissexto e false se ele não for, ou se o ano informado for inválido.
58
+ */
59
+ static isLeapYear(year) {
60
+ const YEAR_NUMBER = typeof year === 'string' ? parseInt(year) : year;
61
+ if (!isNaN(YEAR_NUMBER)) {
62
+ if ((YEAR_NUMBER % 4 === 0 && YEAR_NUMBER % 100 !== 0) || YEAR_NUMBER % 400 === 0) {
63
+ return true;
64
+ }
65
+ else {
66
+ return false;
67
+ }
68
+ }
69
+ else {
70
+ return false;
71
+ }
72
+ }
54
73
  /**
55
74
  * Tenta realizar um parse de uma data com os seguintes valores: dd/MM/yyyy HH:mm
56
75
  *
@@ -282,4 +301,4 @@ export class Utils {
282
301
  return width < 768;
283
302
  }
284
303
  }
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sS0FBSztJQUVoQixrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQVU7UUFFbkMsSUFBSSxZQUFZLEdBQVcsRUFBRSxDQUFDO1FBRTlCLElBQUksS0FBSyxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDckMsaUNBQWlDO1lBQ2pDLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNwQzthQUFNO1lBRUwsbUNBQW1DO1lBQ25DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFFaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFDdkI7b0JBRUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO3dCQUVmLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7NEJBQzVCLFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7eUJBQzlDOzZCQUNJOzRCQUNILFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ3pDO3FCQUVGO3lCQUFNO3dCQUNMLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO3FCQUM5QjtpQkFFRjtxQkFFRDtvQkFFRSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBRWYsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRTs0QkFDNUIsWUFBWSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLFdBQVcsS0FBSyxDQUFDLE1BQU0sTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7eUJBQzNGOzZCQUNJOzRCQUNILFlB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Q0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sR0FBRyxHQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sT0FBTyxHQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE1BQU0sUUFBUSxHQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTNELFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNsSDtRQUVELFNBQVMsR0FBRyxDQUFDLENBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELElBQUksYUFBYSxHQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBJLGFBQWEsSUFBSSxHQUFHLENBQUM7UUFDckIsYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakgsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQVU7UUFDOUIsSUFBSSxTQUFlLENBQUM7UUFFcEIsSUFBSTtZQUNGLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQzNJO1FBQ0QsT0FBTyxLQUFLLEVBQUU7WUFDWixzREFBc0Q7WUFDdEQsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsTUFBTSxJQUFJLEdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkQsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEQsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEQsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pHO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFXLEVBQUUsS0FBVztRQUMvQyxJQUFJLFFBQVEsR0FBVyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksUUFBUSxHQUFXLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkQsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQWE7UUFDdEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRS9CLElBQUksS0FBSyxHQUFXLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksSUFBSSxHQUFXLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpELDJFQUEyRTtRQUMzRSxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVsQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQVc7UUFFeEMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzFCLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxLQUFXO1FBRTVDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7WUFDckcsT0FBTyxxQkFBcUIsQ0FBQztTQUM5QjtRQUVELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxJQUFJLGFBQWEsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVHLGFBQWEsR0FBRyxhQUFhLEdBQUcsR0FBRyxDQUFDO1FBQ3BDLGFBQWEsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVySCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFlLEVBQUUsSUFBWTtRQUNyRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVuQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNO1FBQ04sK0dBQStHO1FBQy9HLG9EQUFvRDtRQUNwRCxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBRXJCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7TUFLRTtJQUNGLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBVSxFQUFFLFFBQWdCO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxELE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWYsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBVztRQUNqQyw2RUFBNkU7UUFDN0UsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwRCxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsV0FBVztRQUNoQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JHLE9BQU8sS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNyQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVXRpbHMge1xyXG5cclxuICAvLyBPYnTDqW0gYSBtZW5zYWdlbSBkZSBlcnJvIGRlIHVtYSByZXF1aXNpw6fDo28gaHR0cFxyXG4gIHN0YXRpYyBnZXRIdHRwRXJyb3JNZXNzYWdlKGVycm9yOiBhbnkpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmIChlcnJvci5lcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcclxuICAgICAgLy8gRXJybyBvY29ycmV1IG5vIGxhZG8gZG8gY2xpZW50XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLmVycm9yLm1lc3NhZ2U7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gRXJybyBvY29ycmV1IG5vIGxhZG8gZG8gc2Vydmlkb3JcclxuICAgICAgaWYgKGVycm9yLnN0YXR1cykge1xyXG5cclxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDIwMClcclxuICAgICAgICB7XHJcblxyXG4gICAgICAgICAgaWYgKGVycm9yLmVycm9yKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IuRXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3IuZXJyb3IuRXJyb3JNZXNzYWdlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3IuZXJyb3IuTWVzc2FnZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuXHJcbiAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IpIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChlcnJvci5lcnJvci5FcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtlcnJvci5lcnJvci5FcnJvck1lc3NhZ2V9PGJyPjxicj4ke2Vycm9yLnN0YXR1c30gLSAke2Vycm9yLnN0YXR1c1RleHR9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtlcnJvci5lcnJvci5NZXNzYWdlfTxicj48YnI+JHtlcnJvci5zdGF0dXN9IC0gJHtlcnJvci5zdGF0dXNUZXh0fWA7XHJcbiAgICAgICAgICAgIH1cclxuICBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBjb252ZXJ0RGF0ZVRpbWVUb0RhdGVTdHJpbmcoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRlU3RyaW5nOiBzdHJpbmdbXSA9IGRhdGUudG9TdHJpbmcoKS5zcGxpdCgnVCcpWzBdLnNwbGl0KCctJyk7XHJcblxyXG4gICAgcmV0dXJuIGAke2RhdGVTdHJpbmdbMF19LSR7ZGF0ZVN0cmluZ1sxXX0tJHtkYXRlU3RyaW5nWzJdfWA7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29udmVydFN0cmluZ1RvRGF0ZSh0ZXh0OiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIGNvbnN0IGRhdGVTdHJpbmc6IHN0cmluZ1tdID0gdGV4dC5zcGxpdCgnLScpO1xyXG5cclxuICAgIHJldHVybiBuZXcgRGF0ZSgrZGF0ZVN0cmluZ1swXSwgKCtkYXRlU3RyaW5nWzFdKSAtIDEsICtkYXRlU3RyaW5nWzJdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlbnRhIHJlYWxpemFyIHVtIHBhcnNlIGRlIHVtYSBkYXRhIGNvbSBvcyBzZWd1aW50ZXMgdmFsb3JlczogZGQvTU0veXl5eSBISDptbVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgcXVlIGNvbnTDqW0gYSBkYXRhIGZvcm1hdGFkYSBlbSBwdC1iclxyXG4gICAqIEBwYXJhbSBkYXRlU2VwYXJhdG9yIFNlcGFyYWRvciBkYSBkYXRhLlxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZURhdGVUaW1lKHZhbHVlOiBzdHJpbmcsIGRhdGVTZXBhcmF0b3I6IHN0cmluZyA9IFwiL1wiKTogRGF0ZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBsZXQgdXNEYXRlID0gXCJcIjtcclxuXHJcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcclxuXHJcbiAgICBsZXQgZGF0ZUFuZFRpbWU6IHN0cmluZ1tdID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG5cclxuICAgIC8vIFBvc3N1aSBwZWxvIG1lbm9zIDUgY2FyYWN0ZXJlczogMS8xLzFcclxuICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gNSkge1xyXG4gICAgICBsZXQgZGF0ZVNlcGFyYXRlZDogc3RyaW5nW10gPSBkYXRlQW5kVGltZVswXS5zcGxpdChkYXRlU2VwYXJhdG9yKTtcclxuXHJcbiAgICAgIGlmIChkYXRlU2VwYXJhdGVkLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRhdGVTZXBhcmF0ZWRbMl0ubGVuZ3RoID4gMikge1xyXG4gICAgICAgIGRhdGVTZXBhcmF0ZWRbMl0gPSBgJHtkYXRlU2VwYXJhdGVkWzJdLmNoYXJBdCgwKX0ke2RhdGVTZXBhcmF0ZWRbMl0uY2hhckF0KDEpfWAudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB1c0RhdGUgPSBgJHtkYXRlU2VwYXJhdGVkWzFdfS8ke2RhdGVTZXBhcmF0ZWRbMF19LyR7ZGF0ZVNlcGFyYXRlZFsyXX1gXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGVBbmRUaW1lLmxlbmd0aCA9PT0gMikge1xyXG5cclxuICAgICAgdXNEYXRlICs9IGAgJHtkYXRlQW5kVGltZVsxXX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBleHBlY3RlZERhdGU6IG51bWJlciA9IERhdGUucGFyc2UodXNEYXRlKTtcclxuXHJcbiAgICBpZiAoZXhwZWN0ZWREYXRlICE9PSBudWxsIHx8IGV4cGVjdGVkRGF0ZSA8IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgRGF0ZShleHBlY3RlZERhdGUpO1xyXG4gIH1cclxuXHJcbiAgLy8gT2J0w6ltIGEgRGF0YSBsb2NhbFxyXG4gIHN0YXRpYyBnZXREYXRlTG9jYWxUaW1lKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIHJldHVybiAobmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gT2J0w6ltIGEgRGF0YSBsb2NhbCBubyBQYWRyw6NvIElzb1xyXG4gIHN0YXRpYyBnZXREYXRlTG9jYWxUaW1lSVNPKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLmdldERhdGVMb2NhbFRpbWUoZGF0ZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKCcuMDAwWicsICcnKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0RGF0ZVBpY2tlckRhdGUoc3RyOiBTdHJpbmcpOiBEYXRlIHtcclxuICAgIGNvbnN0IFtkYXRlQ29tcG9uZW50cywgdGltZUNvbXBvbmVudHNdID0gc3RyLnNwbGl0KCdUJylcclxuICAgIGNvbnN0IFthbm8sIG1lcywgZGlhXSA9IGRhdGVDb21wb25lbnRzLnNwbGl0KCctJyk7XHJcbiAgICBjb25zdCBbaG9yYSwgbWludXRvLCBzZWd1bmRvXSA9IHRpbWVDb21wb25lbnRzLnNwbGl0KCc6Jyk7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoTnVtYmVyKGFubyksIE51bWJlcihtZXMpLCBOdW1iZXIoZGlhKSlcclxuXHJcbiAgICByZXR1cm4gZGF0ZVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIEFkaWNpb25hRGlhcyhkYXRhOiBEYXRlLCBkYXlzOiBudW1iZXIpOiBEYXRlIHtcclxuICAgIGNvbnN0IGZpbmQgPSBuZXcgRGF0ZShOdW1iZXIoZGF0YSkpXHJcblxyXG4gICAgZmluZC5zZXREYXRlKGRhdGEuZ2V0RGF0ZSgpICsgZGF5cylcclxuXHJcbiAgICByZXR1cm4gZmluZFxyXG4gIH1cclxuXHJcbiAgc3RhdGljIERpZmVyZW5jYURpYXMoZGF0YUluaWNpYWw6IERhdGUsIGRhdGFGaW5hbDogRGF0ZSk6IG51bWJlciB7XHJcbiAgICB2YXIgVGltZSA9IGRhdGFGaW5hbC5nZXRUaW1lKCkgLSBkYXRhSW5pY2lhbC5nZXRUaW1lKCk7XHJcblxyXG4gICAgcmV0dXJuIFRpbWUgLyAoMTAwMCAqIDM2MDAgKiAyNCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgRGlmZXJlbmNhTWVzZXMoZGF0YUluaWNpYWw6IERhdGUsIGRhdGFGaW5hbDogRGF0ZSk6IG51bWJlciB7XHJcbiAgICB2YXIgbWVzZXMgPSAoZGF0YUZpbmFsLmdldEZ1bGxZZWFyKCkgLSBkYXRhSW5pY2lhbC5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gICAgbWVzZXMgLT0gZGF0YUluaWNpYWwuZ2V0TW9udGgoKTtcclxuICAgIG1lc2VzICs9IGRhdGFGaW5hbC5nZXRNb250aCgpO1xyXG5cclxuICAgIHJldHVybiBtZXNlcyA8PSAwID8gMCA6IG1lc2VzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vT2J0w6ltIGEgRGF0YSBVVEMgY29tIGhvcmEgemVyYWRhXHJcbiAgc3RhdGljIGdldERhdGVVVEMoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgLy9jb2RpZ28gb3JpZ2luYWxcclxuICAgIC8vcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbiAgICBsZXQgZGF0YVNhaWRhOiBEYXRlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSwgMCwgMCwgMCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy9RdWFuZG8gZGF0ZSBjaGVnYSBuZXN0ZSBmb3JtYXRvOiAyMDIyLTA2LTIwVDAwOjAwOjAwXHJcbiAgICAgIC8vdGVudG8gcGVnYXIgYW5vL21lcy9kaWEgZGlyZXRvIFxyXG4gICAgICAvL0RhdGUoRHRJbmlGZXIuZ2V0VVRDRnVsbFllYXIoKSwgRHRJbmlGZXIuZ2V0VVRDTW9udGgoKSwgRHRJbmlGZXIuZ2V0VVRDRGF0ZSgpLCAwICwgMCAsIDApO1xyXG4gICAgICAvL2UgbsOjbyBmdW5jaW9uYVxyXG4gICAgICBjb25zdCBkaWE6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoOCwgMTApO1xyXG4gICAgICBjb25zdCBtZXM6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoNSwgNyk7XHJcbiAgICAgIGNvbnN0IGFubzogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygwLCA0KTtcclxuICAgICAgZGF0YVNhaWRhID0gbmV3IERhdGUoTnVtYmVyKGFubyksIE51bWJlcihtZXMpIC0gMSwgTnVtYmVyKGRpYSksIDAsIDAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRhU2FpZGE7XHJcbiAgfVxyXG5cclxuICAvL09idMOpbSBhIERhdGEgVVRDIGNvbSBob3JhIHplcmFkYVxyXG4gIHN0YXRpYyBnZXREYXRlZGRNTXl5eShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIC8vY29kaWdvIG9yaWdpbmFsXHJcbiAgICAvL3JldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG4gICAgbGV0IGRhdGFTYWlkYTogRGF0ZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCksIDAsIDAsIDApO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vUXVhbmRvIGRhdGUgY2hlZ2EgbmVzdGUgZm9ybWF0bzogMjAyMi0wNi0yMFQwMDowMDowMFxyXG4gICAgICAvL3RlbnRvIHBlZ2FyIGFuby9tZXMvZGlhIGRpcmV0byBcclxuICAgICAgLy9EYXRlKER0SW5pRmVyLmdldFVUQ0Z1bGxZZWFyKCksIER0SW5pRmVyLmdldFVUQ01vbnRoKCksIER0SW5pRmVyLmdldFVUQ0RhdGUoKSwgMCAsIDAgLCAwKTtcclxuICAgICAgLy9lIG7Do28gZnVuY2lvbmFcclxuICAgICAgY29uc3QgZGlhOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDgsIDEwKTtcclxuICAgICAgY29uc3QgbWVzOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDUsIDcpO1xyXG4gICAgICBjb25zdCBhbm86IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCk7XHJcblxyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShOdW1iZXIoYW5vKSwgTnVtYmVyKG1lcykgLSAxLCBOdW1iZXIoZGlhKSwgMCwgMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFkKHM6IGFueSkgeyByZXR1cm4gKHMgPCAxMCkgPyAnMCcgKyBzIDogczsgfVxyXG5cclxuICAgIHJldHVybiBbcGFkKGRhdGFTYWlkYS5nZXRVVENEYXRlKCkpLCBwYWQoZGF0YVNhaWRhLmdldFVUQ01vbnRoKCkgKyAxKSwgcGFkKGRhdGFTYWlkYS5nZXRVVENGdWxsWWVhcigpKV0uam9pbignLycpO1xyXG4gIH1cclxuXHJcbiAgLy9PYnTDqW0gYSBEYXRhIFVUQyBjb20gYSBob3JhXHJcbiAgc3RhdGljIGdldERhdGVkZE1NeXl5eUhobW1zcyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBkYXRhU2FpZGE6IERhdGU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgZGF0YVNhaWRhID0gbmV3IERhdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCksIGRhdGUuZ2V0VVRDRGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy9RdWFuZG8gZGF0ZSBjaGVnYSBuZXN0ZSBmb3JtYXRvOiAyMDIyLTA2LTIwVDAwOjAwOjAwXHJcbiAgICAgIC8vdGVudG8gcGVnYXIgYW5vL21lcy9kaWEgZGlyZXRvIFxyXG4gICAgICAvL0RhdGUoRHRJbmlGZXIuZ2V0VVRDRnVsbFllYXIoKSwgRHRJbmlGZXIuZ2V0VVRDTW9udGgoKSwgRHRJbmlGZXIuZ2V0VVRDRGF0ZSgpLCAwICwgMCAsIDApO1xyXG4gICAgICAvL2UgbsOjbyBmdW5jaW9uYVxyXG4gICAgICBjb25zdCBkaWE6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoOCwgMTApO1xyXG4gICAgICBjb25zdCBtZXM6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoNSwgNyk7XHJcbiAgICAgIGNvbnN0IGFubzogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygwLCA0KTtcclxuICAgICAgY29uc3QgaG9yYTogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygxMSwgMTMpO1xyXG4gICAgICBjb25zdCBtaW51dG9zOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDE0LCAxNik7XHJcbiAgICAgIGNvbnN0IHNlZ3VuZG9zOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDE3LCAxOSk7XHJcblxyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShOdW1iZXIoYW5vKSwgTnVtYmVyKG1lcykgLSAxLCBOdW1iZXIoZGlhKSwgTnVtYmVyKGhvcmEpLCBOdW1iZXIobWludXRvcyksIE51bWJlcihzZWd1bmRvcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhZChzOiBhbnkpIHsgcmV0dXJuIChzIDwgMTApID8gJzAnICsgcyA6IHM7IH1cclxuXHJcbiAgICBsZXQgZGF0YUZvcm1hdGFkYTogc3RyaW5nID0gW3BhZChkYXRhU2FpZGEuZ2V0RGF0ZSgpKSwgcGFkKGRhdGFTYWlkYS5nZXRVVENNb250aCgpICsgMSksIHBhZChkYXRhU2FpZGEuZ2V0VVRDRnVsbFllYXIoKSldLmpvaW4oJy8nKTtcclxuXHJcbiAgICBkYXRhRm9ybWF0YWRhICs9IFwiIFwiO1xyXG4gICAgZGF0YUZvcm1hdGFkYSArPSBbcGFkKGRhdGFTYWlkYS5nZXRIb3VycygpKSwgcGFkKGRhdGFTYWlkYS5nZXRNaW51dGVzKCkpLCBwYWQoZGF0YVNhaWRhLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcclxuXHJcbiAgICByZXR1cm4gZGF0YUZvcm1hdGFkYTtcclxuICB9XHJcblxyXG4gIC8vT2J0w6ltIGEgRGF0YS9ob3JhIFVUQ1xyXG4gIHN0YXRpYyBnZXREYXRlVGltZVVUQyhkYXRlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICBsZXQgZGF0YVNhaWRhOiBEYXRlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vUXVhbmRvIGRhdGUgY2hlZ2EgbmVzdGUgZm9ybWF0bzogMjAyMi0wNi0yMFQxMToxMjoxM1xyXG4gICAgICBjb25zdCBkaWE6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoOCwgMTApO1xyXG4gICAgICBjb25zdCBtZXM6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoNSwgNyk7XHJcbiAgICAgIGNvbnN0IGFubzogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygwLCA0KTtcclxuICAgICAgY29uc3QgaG9yYTogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygxMSwgMTMpO1xyXG4gICAgICBjb25zdCBtaW46IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMTQsIDE2KTtcclxuICAgICAgY29uc3Qgc2VnOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDE3LCAxOSk7XHJcbiAgICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKE51bWJlcihhbm8pLCBOdW1iZXIobWVzKSAtIDEsIE51bWJlcihkaWEpLCBOdW1iZXIoaG9yYSksIE51bWJlcihtaW4pLCBOdW1iZXIoc2VnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGFTYWlkYTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb21wYXJlRXF1YWxEYXRlcyhkYXRlMTogRGF0ZSwgZGF0ZTI6IERhdGUpOiBib29sZWFuIHtcclxuICAgIGxldCBzdHJEYXRlMTogc3RyaW5nID0gVXRpbHMuZ2V0RGF0ZWRkTU15eXkoZGF0ZTEpO1xyXG4gICAgbGV0IHN0ckRhdGUyOiBzdHJpbmcgPSBVdGlscy5nZXREYXRlZGRNTXl5eShkYXRlMik7XHJcblxyXG4gICAgaWYgKHN0ckRhdGUxID09PSBzdHJEYXRlMikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb252ZXJ0TU1ZWVlZVG9EYXRlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnLycsICcnKTtcclxuXHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoMCwgMikpO1xyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoMiwgNikpO1xyXG5cclxuICAgIC8vRGltaW51aSAxIHBvaXMgbm8gYW5ndWxhciBleGlzdGUgdW0gw61uZGljZSBkbyBtw6pzIHF1ZSBuw6NvIMOpIGlndWFsIGFvIG3DqnMuXHJcbiAgICBtb250aCA9IG1vbnRoIC0gMTtcclxuXHJcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldE51bGxEYXRlKCk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKDE5MDAsIDAsIDEsIDAsIDAsIDApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldERhdGVXZWJTZXJ2aWNlRm9ybWF0KHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcclxuXHJcbiAgICBpZiAodmFsdWUudG9TdHJpbmcoKSA9PSAnJykge1xyXG4gICAgICByZXR1cm4gJzE5MDAtMDEtMDEnO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhID0gVXRpbHMuZ2V0RGF0ZWRkTU15eXkodmFsdWUpO1xyXG5cclxuICAgIHJldHVybiBkYXRhLnN1YnN0cmluZyg2LCAxMCkgKyAnLScgKyBkYXRhLnN1YnN0cmluZygzLCA1KSArICctJyArIGRhdGEuc3Vic3RyaW5nKDAsIDIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldERhdGVUaW1lV2ViU2VydmljZUZvcm1hdCh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkgPT0gJycgfHwgVXRpbHMuZ2V0RGF0ZWRkTU15eXkodmFsdWUpID09IFV0aWxzLmdldERhdGVkZE1NeXl5KHRoaXMuZ2V0TnVsbERhdGUoKSkpIHtcclxuICAgICAgcmV0dXJuICcxOTAwLTAxLTAxVDAwOjAwOjAwJztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0RGF0ZWRkTU15eXl5SGhtbXNzKHZhbHVlKTtcclxuXHJcbiAgICBsZXQgZGF0YUZvcm1hdGFkYTogc3RyaW5nID0gZGF0YS5zdWJzdHJpbmcoNiwgMTApICsgJy0nICsgZGF0YS5zdWJzdHJpbmcoMywgNSkgKyAnLScgKyBkYXRhLnN1YnN0cmluZygwLCAyKTtcclxuICAgIGRhdGFGb3JtYXRhZGEgPSBkYXRhRm9ybWF0YWRhICsgJ1QnO1xyXG4gICAgZGF0YUZvcm1hdGFkYSA9IGRhdGFGb3JtYXRhZGEgKyBkYXRhLnN1YnN0cmluZygxMSwgMTMpICsgJzonICsgZGF0YS5zdWJzdHJpbmcoMTQsIDE2KSArICc6JyArIGRhdGEuc3Vic3RyaW5nKDE3LCAxOSk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGFGb3JtYXRhZGE7XHJcbiAgfVxyXG5cclxuICAvL1RyYW5zZm9ybWEgYSBzdHJpbmcgQmFzZTY0IG51bSBhcnJheSBkZSBieXRlcyBlIGZheiBvIGRvd25sb2FkIGRvIGFycXVpdm8uXHJcbiAgc3RhdGljIGRvd25sb2FkRmlsZUJhc2U2NChmbGVOYW1lOiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGZpbGUpO1xyXG4gICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xyXG4gICAgY29uc3QgaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpbnQ4QXJyYXlbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtpbnQ4QXJyYXldKTtcclxuXHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICAvL0FiaW9cclxuICAgIC8vTyB3aW5kb3cub3BlbiBmb2kgY29tZW50YWRvIHBvcnF1ZSBubyBkb3dubG9hZCBkb3MgYXJxdWl2b3MgZGlnaXRhaXMgYWJyaWEgdW1hIGphbmVsYSBjb20gbyBibG9iIGRvIGFycXVpdm8uIFxyXG4gICAgLy9Db21lbnRhciBuw6NvIGFmZXRvdSBvIGRvd25sb2FkIGRvIGNvbnRyYS1jaGVxdWUuICBcclxuICAgIC8vd2luZG93Lm9wZW4odXJsKTtcclxuICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICBhLmRvd25sb2FkID0gZmxlTmFtZTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG5cclxuICAgIGEuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogQWJyZSBvIHBvcHVwIGRvIG5hdmVnYWRvciBwYXJhIGJhaXhhciB1bSBhcnF1aXZvIHF1ZSB2ZWlvIGRlIHVtIGJsb2IuXHJcbiAgKiBcclxuICAqIEBwYXJhbSBibG9iIENvbnRlw7pkbyBkbyBhcnF1aXZvIGJpbsOhcmlvIGEgc2VyIGJhaXhhZG8uXHJcbiAgKiBAcGFyYW0gZmlsZU5hbWUgTm9tZSBkbyBhcnF1aXZvIGEgc2VyIHNhbHZvLlxyXG4gICovXHJcbiAgc3RhdGljIGRvd25sb2FkRmlsZShibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBhbmNob3IgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG5cclxuICAgIGFuY2hvci5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBhbmNob3IuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFuY2hvcik7XHJcblxyXG4gICAgYW5jaG9yLmNsaWNrKCk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhbmNob3IpO1xyXG4gICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoYW5jaG9yLmhyZWYpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGI2NERlY29kZVVuaWNvZGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gR29pbmcgYmFja3dhcmRzOiBmcm9tIGJ5dGVzdHJlYW0sIHRvIHBlcmNlbnQtZW5jb2RpbmcsIHRvIG9yaWdpbmFsIHN0cmluZy5cclxuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoYXRvYihzdHIpLnNwbGl0KCcnKS5tYXAoYyA9PiB7XHJcbiAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtcclxuICAgIH0pLmpvaW4oJycpKTtcclxuICB9XHJcblxyXG4gIC8vTGFyZ3VyYSBhIHBhcnRpciBkZSBvbmRlIHJlbW9udGEgbyBuZ3hfZGF0YXRhYmxlIHBhcmEgbW9iaWxlXHJcbiAgc3RhdGljIGdldElzTW9iaWxlKCkge1xyXG4gICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDtcclxuICAgIHJldHVybiB3aWR0aCA8IDc2ODtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sS0FBSztJQUVoQixrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQVU7UUFFbkMsSUFBSSxZQUFZLEdBQVcsRUFBRSxDQUFDO1FBRTlCLElBQUksS0FBSyxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDckMsaUNBQWlDO1lBQ2pDLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNwQzthQUFNO1lBRUwsbUNBQW1DO1lBQ25DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFFaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRTtvQkFFdkIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO3dCQUVmLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7NEJBQzVCLFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7eUJBQzlDOzZCQUNJOzRCQUNILFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ3pDO3FCQUVGO3lCQUFNO3dCQUNMLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO3FCQUM5QjtpQkFFRjtxQkFDSTtvQkFFSCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBRWYsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRTs0QkFDNUIsWUFBWSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLFdBQVcsS0FBSyxDQUFDLE1BQU0sTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7eUJBQzNGOzZCQUNJOzRCQUNILFlB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SUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2pDLDZFQUE2RTtRQUM3RSxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BELE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRUQsOERBQThEO0lBQzlELE1BQU0sQ0FBQyxXQUFXO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckcsT0FBTyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBVdGlscyB7XHJcblxyXG4gIC8vIE9idMOpbSBhIG1lbnNhZ2VtIGRlIGVycm8gZGUgdW1hIHJlcXVpc2nDp8OjbyBodHRwXHJcbiAgc3RhdGljIGdldEh0dHBFcnJvck1lc3NhZ2UoZXJyb3I6IGFueSk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgaWYgKGVycm9yLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAvLyBFcnJvIG9jb3JyZXUgbm8gbGFkbyBkbyBjbGllbnRcclxuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBFcnJvIG9jb3JyZXUgbm8gbGFkbyBkbyBzZXJ2aWRvclxyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzKSB7XHJcblxyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgaWYgKGVycm9yLmVycm9yKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IuRXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3IuZXJyb3IuRXJyb3JNZXNzYWdlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3IuZXJyb3IuTWVzc2FnZX1gO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG5cclxuICAgICAgICAgIGlmIChlcnJvci5lcnJvcikge1xyXG5cclxuICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLkVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yLmVycm9yLkVycm9yTWVzc2FnZX08YnI+PGJyPiR7ZXJyb3Iuc3RhdHVzfSAtICR7ZXJyb3Iuc3RhdHVzVGV4dH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yLmVycm9yLk1lc3NhZ2V9PGJyPjxicj4ke2Vycm9yLnN0YXR1c30gLSAke2Vycm9yLnN0YXR1c1RleHR9YDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBjb252ZXJ0RGF0ZVRpbWVUb0RhdGVTdHJpbmcoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRlU3RyaW5nOiBzdHJpbmdbXSA9IGRhdGUudG9TdHJpbmcoKS5zcGxpdCgnVCcpWzBdLnNwbGl0KCctJyk7XHJcblxyXG4gICAgcmV0dXJuIGAke2RhdGVTdHJpbmdbMF19LSR7ZGF0ZVN0cmluZ1sxXX0tJHtkYXRlU3RyaW5nWzJdfWA7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29udmVydFN0cmluZ1RvRGF0ZSh0ZXh0OiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIGNvbnN0IGRhdGVTdHJpbmc6IHN0cmluZ1tdID0gdGV4dC5zcGxpdCgnLScpO1xyXG5cclxuICAgIHJldHVybiBuZXcgRGF0ZSgrZGF0ZVN0cmluZ1swXSwgKCtkYXRlU3RyaW5nWzFdKSAtIDEsICtkYXRlU3RyaW5nWzJdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNlIHVtIGRldGVybWluYWRvIGFubyDDqSBiaXNzZXh0by5cclxuICAgKiBAcGFyYW0geWVhciBBbm8gYSBzZXIgdmVyaWZpY2Fkby5cclxuICAgKiBAcmV0dXJucyBSZXRvcm5hIHRydWUgc2UgbyBhbm8gZm9yIGJpc3NleHRvIGUgZmFsc2Ugc2UgZWxlIG7Do28gZm9yLCBvdSBzZSBvIGFubyBpbmZvcm1hZG8gZm9yIGludsOhbGlkby5cclxuICAgKi9cclxuICBzdGF0aWMgaXNMZWFwWWVhcih5ZWFyOiBudW1iZXIgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IFlFQVJfTlVNQkVSOiBudW1iZXIgPSB0eXBlb2YgeWVhciA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh5ZWFyKSA6IHllYXI7XHJcblxyXG4gICAgaWYgKCFpc05hTihZRUFSX05VTUJFUikpIHtcclxuICAgICAgaWYgKChZRUFSX05VTUJFUiAlIDQgPT09IDAgJiYgWUVBUl9OVU1CRVIgJSAxMDAgIT09IDApIHx8IFlFQVJfTlVNQkVSICUgNDAwID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUZW50YSByZWFsaXphciB1bSBwYXJzZSBkZSB1bWEgZGF0YSBjb20gb3Mgc2VndWludGVzIHZhbG9yZXM6IGRkL01NL3l5eXkgSEg6bW1cclxuICAgKiBcclxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHF1ZSBjb250w6ltIGEgZGF0YSBmb3JtYXRhZGEgZW0gcHQtYnJcclxuICAgKiBAcGFyYW0gZGF0ZVNlcGFyYXRvciBTZXBhcmFkb3IgZGEgZGF0YS5cclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VEYXRlVGltZSh2YWx1ZTogc3RyaW5nLCBkYXRlU2VwYXJhdG9yOiBzdHJpbmcgPSBcIi9cIik6IERhdGUgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHVzRGF0ZSA9IFwiXCI7XHJcblxyXG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XHJcblxyXG4gICAgbGV0IGRhdGVBbmRUaW1lOiBzdHJpbmdbXSA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuXHJcbiAgICAvLyBQb3NzdWkgcGVsbyBtZW5vcyA1IGNhcmFjdGVyZXM6IDEvMS8xXHJcbiAgICBpZiAodmFsdWUubGVuZ3RoID49IDUpIHtcclxuICAgICAgbGV0IGRhdGVTZXBhcmF0ZWQ6IHN0cmluZ1tdID0gZGF0ZUFuZFRpbWVbMF0uc3BsaXQoZGF0ZVNlcGFyYXRvcik7XHJcblxyXG4gICAgICBpZiAoZGF0ZVNlcGFyYXRlZC5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkYXRlU2VwYXJhdGVkWzJdLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICBkYXRlU2VwYXJhdGVkWzJdID0gYCR7ZGF0ZVNlcGFyYXRlZFsyXS5jaGFyQXQoMCl9JHtkYXRlU2VwYXJhdGVkWzJdLmNoYXJBdCgxKX1gLnRyaW0oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdXNEYXRlID0gYCR7ZGF0ZVNlcGFyYXRlZFsxXX0vJHtkYXRlU2VwYXJhdGVkWzBdfS8ke2RhdGVTZXBhcmF0ZWRbMl19YFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRlQW5kVGltZS5sZW5ndGggPT09IDIpIHtcclxuXHJcbiAgICAgIHVzRGF0ZSArPSBgICR7ZGF0ZUFuZFRpbWVbMV19YDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZXhwZWN0ZWREYXRlOiBudW1iZXIgPSBEYXRlLnBhcnNlKHVzRGF0ZSk7XHJcblxyXG4gICAgaWYgKGV4cGVjdGVkRGF0ZSAhPT0gbnVsbCB8fCBleHBlY3RlZERhdGUgPCAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IERhdGUoZXhwZWN0ZWREYXRlKTtcclxuICB9XHJcblxyXG4gIC8vIE9idMOpbSBhIERhdGEgbG9jYWxcclxuICBzdGF0aWMgZ2V0RGF0ZUxvY2FsVGltZShkYXRlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gKG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcclxuICB9XHJcblxyXG4gIC8vIE9idMOpbSBhIERhdGEgbG9jYWwgbm8gUGFkcsOjbyBJc29cclxuICBzdGF0aWMgZ2V0RGF0ZUxvY2FsVGltZUlTTyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5nZXREYXRlTG9jYWxUaW1lKGRhdGUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnLjAwMFonLCAnJykpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldERhdGVQaWNrZXJEYXRlKHN0cjogU3RyaW5nKTogRGF0ZSB7XHJcbiAgICBjb25zdCBbZGF0ZUNvbXBvbmVudHMsIHRpbWVDb21wb25lbnRzXSA9IHN0ci5zcGxpdCgnVCcpXHJcbiAgICBjb25zdCBbYW5vLCBtZXMsIGRpYV0gPSBkYXRlQ29tcG9uZW50cy5zcGxpdCgnLScpO1xyXG4gICAgY29uc3QgW2hvcmEsIG1pbnV0bywgc2VndW5kb10gPSB0aW1lQ29tcG9uZW50cy5zcGxpdCgnOicpO1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKE51bWJlcihhbm8pLCBOdW1iZXIobWVzKSwgTnVtYmVyKGRpYSkpXHJcblxyXG4gICAgcmV0dXJuIGRhdGVcclxuICB9XHJcblxyXG4gIHN0YXRpYyBBZGljaW9uYURpYXMoZGF0YTogRGF0ZSwgZGF5czogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICBjb25zdCBmaW5kID0gbmV3IERhdGUoTnVtYmVyKGRhdGEpKVxyXG5cclxuICAgIGZpbmQuc2V0RGF0ZShkYXRhLmdldERhdGUoKSArIGRheXMpXHJcblxyXG4gICAgcmV0dXJuIGZpbmRcclxuICB9XHJcblxyXG4gIHN0YXRpYyBEaWZlcmVuY2FEaWFzKGRhdGFJbmljaWFsOiBEYXRlLCBkYXRhRmluYWw6IERhdGUpOiBudW1iZXIge1xyXG4gICAgdmFyIFRpbWUgPSBkYXRhRmluYWwuZ2V0VGltZSgpIC0gZGF0YUluaWNpYWwuZ2V0VGltZSgpO1xyXG5cclxuICAgIHJldHVybiBUaW1lIC8gKDEwMDAgKiAzNjAwICogMjQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIERpZmVyZW5jYU1lc2VzKGRhdGFJbmljaWFsOiBEYXRlLCBkYXRhRmluYWw6IERhdGUpOiBudW1iZXIge1xyXG4gICAgdmFyIG1lc2VzID0gKGRhdGFGaW5hbC5nZXRGdWxsWWVhcigpIC0gZGF0YUluaWNpYWwuZ2V0RnVsbFllYXIoKSkgKiAxMjtcclxuICAgIG1lc2VzIC09IGRhdGFJbmljaWFsLmdldE1vbnRoKCk7XHJcbiAgICBtZXNlcyArPSBkYXRhRmluYWwuZ2V0TW9udGgoKTtcclxuXHJcbiAgICByZXR1cm4gbWVzZXMgPD0gMCA/IDAgOiBtZXNlcztcclxuICB9XHJcblxyXG5cclxuICAvL09idMOpbSBhIERhdGEgVVRDIGNvbSBob3JhIHplcmFkYVxyXG4gIHN0YXRpYyBnZXREYXRlVVRDKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIC8vY29kaWdvIG9yaWdpbmFsXHJcbiAgICAvL3JldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG4gICAgbGV0IGRhdGFTYWlkYTogRGF0ZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCksIDAsIDAsIDApO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vUXVhbmRvIGRhdGUgY2hlZ2EgbmVzdGUgZm9ybWF0bzogMjAyMi0wNi0yMFQwMDowMDowMFxyXG4gICAgICAvL3RlbnRvIHBlZ2FyIGFuby9tZXMvZGlhIGRpcmV0byBcclxuICAgICAgLy9EYXRlKER0SW5pRmVyLmdldFVUQ0Z1bGxZZWFyKCksIER0SW5pRmVyLmdldFVUQ01vbnRoKCksIER0SW5pRmVyLmdldFVUQ0RhdGUoKSwgMCAsIDAgLCAwKTtcclxuICAgICAgLy9lIG7Do28gZnVuY2lvbmFcclxuICAgICAgY29uc3QgZGlhOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDgsIDEwKTtcclxuICAgICAgY29uc3QgbWVzOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDUsIDcpO1xyXG4gICAgICBjb25zdCBhbm86IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCk7XHJcbiAgICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKE51bWJlcihhbm8pLCBOdW1iZXIobWVzKSAtIDEsIE51bWJlcihkaWEpLCAwLCAwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YVNhaWRhO1xyXG4gIH1cclxuXHJcbiAgLy9PYnTDqW0gYSBEYXRhIFVUQyBjb20gaG9yYSB6ZXJhZGFcclxuICBzdGF0aWMgZ2V0RGF0ZWRkTU15eXkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICAvL2NvZGlnbyBvcmlnaW5hbFxyXG4gICAgLy9yZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcclxuICAgIGxldCBkYXRhU2FpZGE6IERhdGU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgZGF0YVNhaWRhID0gbmV3IERhdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCksIGRhdGUuZ2V0VVRDRGF0ZSgpLCAwLCAwLCAwKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvL1F1YW5kbyBkYXRlIGNoZWdhIG5lc3RlIGZvcm1hdG86IDIwMjItMDYtMjBUMDA6MDA6MDBcclxuICAgICAgLy90ZW50byBwZWdhciBhbm8vbWVzL2RpYSBkaXJldG8gXHJcbiAgICAgIC8vRGF0ZShEdEluaUZlci5nZXRVVENGdWxsWWVhcigpLCBEdEluaUZlci5nZXRVVENNb250aCgpLCBEdEluaUZlci5nZXRVVENEYXRlKCksIDAgLCAwICwgMCk7XHJcbiAgICAgIC8vZSBuw6NvIGZ1bmNpb25hXHJcbiAgICAgIGNvbnN0IGRpYTogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZyg4LCAxMCk7XHJcbiAgICAgIGNvbnN0IG1lczogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZyg1LCA3KTtcclxuICAgICAgY29uc3QgYW5vOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDQpO1xyXG5cclxuICAgICAgZGF0YVNhaWRhID0gbmV3IERhdGUoTnVtYmVyKGFubyksIE51bWJlcihtZXMpIC0gMSwgTnVtYmVyKGRpYSksIDAsIDAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhZChzOiBhbnkpIHsgcmV0dXJuIChzIDwgMTApID8gJzAnICsgcyA6IHM7IH1cclxuXHJcbiAgICByZXR1cm4gW3BhZChkYXRhU2FpZGEuZ2V0VVRDRGF0ZSgpKSwgcGFkKGRhdGFTYWlkYS5nZXRVVENNb250aCgpICsgMSksIHBhZChkYXRhU2FpZGEuZ2V0VVRDRnVsbFllYXIoKSldLmpvaW4oJy8nKTtcclxuICB9XHJcblxyXG4gIC8vT2J0w6ltIGEgRGF0YSBVVEMgY29tIGEgaG9yYVxyXG4gIHN0YXRpYyBnZXREYXRlZGRNTXl5eXlIaG1tc3MoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgZGF0YVNhaWRhOiBEYXRlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vUXVhbmRvIGRhdGUgY2hlZ2EgbmVzdGUgZm9ybWF0bzogMjAyMi0wNi0yMFQwMDowMDowMFxyXG4gICAgICAvL3RlbnRvIHBlZ2FyIGFuby9tZXMvZGlhIGRpcmV0byBcclxuICAgICAgLy9EYXRlKER0SW5pRmVyLmdldFVUQ0Z1bGxZZWFyKCksIER0SW5pRmVyLmdldFVUQ01vbnRoKCksIER0SW5pRmVyLmdldFVUQ0RhdGUoKSwgMCAsIDAgLCAwKTtcclxuICAgICAgLy9lIG7Do28gZnVuY2lvbmFcclxuICAgICAgY29uc3QgZGlhOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDgsIDEwKTtcclxuICAgICAgY29uc3QgbWVzOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDUsIDcpO1xyXG4gICAgICBjb25zdCBhbm86IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCk7XHJcbiAgICAgIGNvbnN0IGhvcmE6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMTEsIDEzKTtcclxuICAgICAgY29uc3QgbWludXRvczogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygxNCwgMTYpO1xyXG4gICAgICBjb25zdCBzZWd1bmRvczogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygxNywgMTkpO1xyXG5cclxuICAgICAgZGF0YVNhaWRhID0gbmV3IERhdGUoTnVtYmVyKGFubyksIE51bWJlcihtZXMpIC0gMSwgTnVtYmVyKGRpYSksIE51bWJlcihob3JhKSwgTnVtYmVyKG1pbnV0b3MpLCBOdW1iZXIoc2VndW5kb3MpKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYWQoczogYW55KSB7IHJldHVybiAocyA8IDEwKSA/ICcwJyArIHMgOiBzOyB9XHJcblxyXG4gICAgbGV0IGRhdGFGb3JtYXRhZGE6IHN0cmluZyA9IFtwYWQoZGF0YVNhaWRhLmdldERhdGUoKSksIHBhZChkYXRhU2FpZGEuZ2V0VVRDTW9udGgoKSArIDEpLCBwYWQoZGF0YVNhaWRhLmdldFVUQ0Z1bGxZZWFyKCkpXS5qb2luKCcvJyk7XHJcblxyXG4gICAgZGF0YUZvcm1hdGFkYSArPSBcIiBcIjtcclxuICAgIGRhdGFGb3JtYXRhZGEgKz0gW3BhZChkYXRhU2FpZGEuZ2V0SG91cnMoKSksIHBhZChkYXRhU2FpZGEuZ2V0TWludXRlcygpKSwgcGFkKGRhdGFTYWlkYS5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGFGb3JtYXRhZGE7XHJcbiAgfVxyXG5cclxuICAvL09idMOpbSBhIERhdGEvaG9yYSBVVENcclxuICBzdGF0aWMgZ2V0RGF0ZVRpbWVVVEMoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgbGV0IGRhdGFTYWlkYTogRGF0ZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvL1F1YW5kbyBkYXRlIGNoZWdhIG5lc3RlIGZvcm1hdG86IDIwMjItMDYtMjBUMTE6MTI6MTNcclxuICAgICAgY29uc3QgZGlhOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDgsIDEwKTtcclxuICAgICAgY29uc3QgbWVzOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDUsIDcpO1xyXG4gICAgICBjb25zdCBhbm86IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCk7XHJcbiAgICAgIGNvbnN0IGhvcmE6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMTEsIDEzKTtcclxuICAgICAgY29uc3QgbWluOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDE0LCAxNik7XHJcbiAgICAgIGNvbnN0IHNlZzogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygxNywgMTkpO1xyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShOdW1iZXIoYW5vKSwgTnVtYmVyKG1lcykgLSAxLCBOdW1iZXIoZGlhKSwgTnVtYmVyKGhvcmEpLCBOdW1iZXIobWluKSwgTnVtYmVyKHNlZykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRhU2FpZGE7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29tcGFyZUVxdWFsRGF0ZXMoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc3RyRGF0ZTE6IHN0cmluZyA9IFV0aWxzLmdldERhdGVkZE1NeXl5KGRhdGUxKTtcclxuICAgIGxldCBzdHJEYXRlMjogc3RyaW5nID0gVXRpbHMuZ2V0RGF0ZWRkTU15eXkoZGF0ZTIpO1xyXG5cclxuICAgIGlmIChzdHJEYXRlMSA9PT0gc3RyRGF0ZTIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29udmVydE1NWVlZWVRvRGF0ZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJy8nLCAnJyk7XHJcblxyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDAsIDIpKTtcclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBOdW1iZXIodmFsdWUuc3Vic3RyaW5nKDIsIDYpKTtcclxuXHJcbiAgICAvL0RpbWludWkgMSBwb2lzIG5vIGFuZ3VsYXIgZXhpc3RlIHVtIMOtbmRpY2UgZG8gbcOqcyBxdWUgbsOjbyDDqSBpZ3VhbCBhbyBtw6pzLlxyXG4gICAgbW9udGggPSBtb250aCAtIDE7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXROdWxsRGF0ZSgpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSgxOTAwLCAwLCAxLCAwLCAwLCAwKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXREYXRlV2ViU2VydmljZUZvcm1hdCh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkgPT0gJycpIHtcclxuICAgICAgcmV0dXJuICcxOTAwLTAxLTAxJztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGF0YSA9IFV0aWxzLmdldERhdGVkZE1NeXl5KHZhbHVlKTtcclxuXHJcbiAgICByZXR1cm4gZGF0YS5zdWJzdHJpbmcoNiwgMTApICsgJy0nICsgZGF0YS5zdWJzdHJpbmcoMywgNSkgKyAnLScgKyBkYXRhLnN1YnN0cmluZygwLCAyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXREYXRlVGltZVdlYlNlcnZpY2VGb3JtYXQodmFsdWU6IERhdGUpOiBzdHJpbmcge1xyXG5cclxuICAgIGlmICh2YWx1ZS50b1N0cmluZygpID09ICcnIHx8IFV0aWxzLmdldERhdGVkZE1NeXl5KHZhbHVlKSA9PSBVdGlscy5nZXREYXRlZGRNTXl5eSh0aGlzLmdldE51bGxEYXRlKCkpKSB7XHJcbiAgICAgIHJldHVybiAnMTkwMC0wMS0wMVQwMDowMDowMCc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRhdGEgPSB0aGlzLmdldERhdGVkZE1NeXl5eUhobW1zcyh2YWx1ZSk7XHJcblxyXG4gICAgbGV0IGRhdGFGb3JtYXRhZGE6IHN0cmluZyA9IGRhdGEuc3Vic3RyaW5nKDYsIDEwKSArICctJyArIGRhdGEuc3Vic3RyaW5nKDMsIDUpICsgJy0nICsgZGF0YS5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICBkYXRhRm9ybWF0YWRhID0gZGF0YUZvcm1hdGFkYSArICdUJztcclxuICAgIGRhdGFGb3JtYXRhZGEgPSBkYXRhRm9ybWF0YWRhICsgZGF0YS5zdWJzdHJpbmcoMTEsIDEzKSArICc6JyArIGRhdGEuc3Vic3RyaW5nKDE0LCAxNikgKyAnOicgKyBkYXRhLnN1YnN0cmluZygxNywgMTkpO1xyXG5cclxuICAgIHJldHVybiBkYXRhRm9ybWF0YWRhO1xyXG4gIH1cclxuXHJcbiAgLy9UcmFuc2Zvcm1hIGEgc3RyaW5nIEJhc2U2NCBudW0gYXJyYXkgZGUgYnl0ZXMgZSBmYXogbyBkb3dubG9hZCBkbyBhcnF1aXZvLlxyXG4gIHN0YXRpYyBkb3dubG9hZEZpbGVCYXNlNjQoZmxlTmFtZTogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihmaWxlKTtcclxuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcclxuICAgIGNvbnN0IGludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW50OEFycmF5W2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaW50OEFycmF5XSk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgLy9BYmlvXHJcbiAgICAvL08gd2luZG93Lm9wZW4gZm9pIGNvbWVudGFkbyBwb3JxdWUgbm8gZG93bmxvYWQgZG9zIGFycXVpdm9zIGRpZ2l0YWlzIGFicmlhIHVtYSBqYW5lbGEgY29tIG8gYmxvYiBkbyBhcnF1aXZvLiBcclxuICAgIC8vQ29tZW50YXIgbsOjbyBhZmV0b3UgbyBkb3dubG9hZCBkbyBjb250cmEtY2hlcXVlLiAgXHJcbiAgICAvL3dpbmRvdy5vcGVuKHVybCk7XHJcbiAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuXHJcbiAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICBhLnRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgYS5kb3dubG9hZCA9IGZsZU5hbWU7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuXHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEFicmUgbyBwb3B1cCBkbyBuYXZlZ2Fkb3IgcGFyYSBiYWl4YXIgdW0gYXJxdWl2byBxdWUgdmVpbyBkZSB1bSBibG9iLlxyXG4gICogXHJcbiAgKiBAcGFyYW0gYmxvYiBDb250ZcO6ZG8gZG8gYXJxdWl2byBiaW7DoXJpbyBhIHNlciBiYWl4YWRvLlxyXG4gICogQHBhcmFtIGZpbGVOYW1lIE5vbWUgZG8gYXJxdWl2byBhIHNlciBzYWx2by5cclxuICAqL1xyXG4gIHN0YXRpYyBkb3dubG9hZEZpbGUoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgYW5jaG9yID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuXHJcbiAgICBhbmNob3IuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgYW5jaG9yLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhbmNob3IpO1xyXG5cclxuICAgIGFuY2hvci5jbGljaygpO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYW5jaG9yKTtcclxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGFuY2hvci5ocmVmKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBiNjREZWNvZGVVbmljb2RlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vIEdvaW5nIGJhY2t3YXJkczogZnJvbSBieXRlc3RyZWFtLCB0byBwZXJjZW50LWVuY29kaW5nLCB0byBvcmlnaW5hbCBzdHJpbmcuXHJcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKGMgPT4ge1xyXG4gICAgICByZXR1cm4gJyUnICsgKCcwMCcgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7XHJcbiAgICB9KS5qb2luKCcnKSk7XHJcbiAgfVxyXG5cclxuICAvL0xhcmd1cmEgYSBwYXJ0aXIgZGUgb25kZSByZW1vbnRhIG8gbmd4X2RhdGF0YWJsZSBwYXJhIG1vYmlsZVxyXG4gIHN0YXRpYyBnZXRJc01vYmlsZSgpIHtcclxuICAgIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XHJcbiAgICByZXR1cm4gd2lkdGggPCA3Njg7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -1,6 +1,7 @@
1
1
  export class TreeItem {
2
2
  constructor() {
3
3
  this.aplicClass = false;
4
+ this.level = 0;
4
5
  }
5
6
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90cmVlL21vZGVscy90cmVlLWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFFBQVE7SUFBckI7UUFRRSxlQUFVLEdBQVksS0FBSyxDQUFDO0lBQzlCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBUcmVlSXRlbSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIGNoaWxkcmVuOiBUcmVlSXRlbVtdO1xyXG4gIGV4cGFuZGVkOiBib29sZWFuO1xyXG4gIGhhc19jaGlsZHJlbjogYm9vbGVhbjtcclxuICBpc19zZWxlY3RlZDogYm9vbGVhbjtcclxuICBrZXk6IHN0cmluZztcclxuICBhcGxpY0NsYXNzOiBib29sZWFuID0gZmFsc2U7XHJcbn0iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy90cmVlL21vZGVscy90cmVlLWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFFBQVE7SUFBckI7UUFRRSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLFVBQUssR0FBVyxDQUFDLENBQUM7SUFDcEIsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFRyZWVJdGVtIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgY2hpbGRyZW46IFRyZWVJdGVtW107XHJcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgaGFzX2NoaWxkcmVuOiBib29sZWFuO1xyXG4gIGlzX3NlbGVjdGVkOiBib29sZWFuO1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGFwbGljQ2xhc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsZXZlbDogbnVtYmVyID0gMDtcclxufSJdfQ==
@@ -1914,6 +1914,25 @@ class Utils {
1914
1914
  const dateString = text.split('-');
1915
1915
  return new Date(+dateString[0], (+dateString[1]) - 1, +dateString[2]);
1916
1916
  }
1917
+ /**
1918
+ * Verifica se um determinado ano é bissexto.
1919
+ * @param year Ano a ser verificado.
1920
+ * @returns Retorna true se o ano for bissexto e false se ele não for, ou se o ano informado for inválido.
1921
+ */
1922
+ static isLeapYear(year) {
1923
+ const YEAR_NUMBER = typeof year === 'string' ? parseInt(year) : year;
1924
+ if (!isNaN(YEAR_NUMBER)) {
1925
+ if ((YEAR_NUMBER % 4 === 0 && YEAR_NUMBER % 100 !== 0) || YEAR_NUMBER % 400 === 0) {
1926
+ return true;
1927
+ }
1928
+ else {
1929
+ return false;
1930
+ }
1931
+ }
1932
+ else {
1933
+ return false;
1934
+ }
1935
+ }
1917
1936
  /**
1918
1937
  * Tenta realizar um parse de uma data com os seguintes valores: dd/MM/yyyy HH:mm
1919
1938
  *
@@ -2223,6 +2242,7 @@ class RetTree {
2223
2242
  class TreeItem {
2224
2243
  constructor() {
2225
2244
  this.aplicClass = false;
2245
+ this.level = 0;
2226
2246
  }
2227
2247
  }
2228
2248