brainloper-ui 14.0.25 → 14.0.27

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.
Files changed (97) hide show
  1. package/esm2020/brainloper-ui.mjs +4 -4
  2. package/esm2020/public_api.mjs +55 -51
  3. package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +304 -304
  4. package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +28 -28
  5. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +22 -22
  6. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +82 -82
  7. package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +37 -36
  8. package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +175 -175
  9. package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +612 -697
  10. package/esm2020/src/app/modules/brainloper-ui/components/data-table/services/data-table-buttons-config.service.mjs +134 -0
  11. package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +117 -117
  12. package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +184 -184
  13. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +1 -1
  14. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +1 -1
  15. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +1 -1
  16. package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +221 -221
  17. package/esm2020/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.mjs +79 -79
  18. package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +80 -80
  19. package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +107 -107
  20. package/esm2020/src/app/modules/directives/carousel-item.directive.mjs +18 -0
  21. package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +1 -1
  22. package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +1 -1
  23. package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +1 -1
  24. package/esm2020/src/app/modules/interfaces/data-table/params.mjs +1 -1
  25. package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +1 -1
  26. package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +1 -1
  27. package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +2 -2
  28. package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +8 -7
  29. package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +7 -7
  30. package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +1 -1
  31. package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +1 -1
  32. package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +1 -1
  33. package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +7 -7
  34. package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +1 -1
  35. package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +1 -1
  36. package/esm2020/src/app/modules/services/crypto.service.mjs +36 -36
  37. package/esm2020/src/app/modules/services/export-data.service.mjs +165 -165
  38. package/esm2020/src/app/modules/services/file-forms.service.mjs +23 -23
  39. package/esm2020/src/app/modules/services/functions.service.mjs +53 -53
  40. package/esm2020/src/app/modules/services/generate-pdf.service.mjs +57 -57
  41. package/esm2020/src/app/modules/services/http.service.mjs +96 -96
  42. package/esm2020/src/app/modules/services/loading/loading.component.mjs +27 -27
  43. package/esm2020/src/app/modules/services/local-storage.service.mjs +114 -114
  44. package/esm2020/src/app/modules/services/message.service.mjs +199 -199
  45. package/esm2020/src/app/modules/services/screen-size-util.mjs +5 -5
  46. package/esm2020/src/app/modules/services/session.service.mjs +41 -41
  47. package/fesm2015/brainloper-ui.mjs +2833 -2767
  48. package/fesm2015/brainloper-ui.mjs.map +1 -1
  49. package/fesm2020/brainloper-ui.mjs +2792 -2729
  50. package/fesm2020/brainloper-ui.mjs.map +1 -1
  51. package/index.d.ts +5 -5
  52. package/package.json +1 -1
  53. package/public_api.d.ts +54 -50
  54. package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +73 -73
  55. package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +13 -13
  56. package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +10 -10
  57. package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +24 -24
  58. package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +15 -13
  59. package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +46 -46
  60. package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +127 -123
  61. package/src/app/modules/brainloper-ui/components/data-table/services/data-table-buttons-config.service.d.ts +6 -0
  62. package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +21 -21
  63. package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +42 -42
  64. package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +2 -2
  65. package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +2 -2
  66. package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +2 -2
  67. package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +30 -30
  68. package/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.d.ts +35 -35
  69. package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +36 -36
  70. package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +26 -26
  71. package/src/app/modules/directives/carousel-item.directive.d.ts +9 -0
  72. package/src/app/modules/interfaces/buttons/button-icon.d.ts +9 -9
  73. package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +6 -6
  74. package/src/app/modules/interfaces/combos/combos-configuration.d.ts +13 -13
  75. package/src/app/modules/interfaces/data-table/params.d.ts +7 -7
  76. package/src/app/modules/interfaces/data-table/rules.d.ts +8 -8
  77. package/src/app/modules/interfaces/data-table/table-columns.d.ts +25 -25
  78. package/src/app/modules/interfaces/data-table/table-configuration.d.ts +26 -25
  79. package/src/app/modules/interfaces/enum/enumActions.d.ts +6 -5
  80. package/src/app/modules/interfaces/enum/enumRules.d.ts +6 -6
  81. package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +4 -4
  82. package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +13 -13
  83. package/src/app/modules/interfaces/filters/header-filters.d.ts +13 -13
  84. package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +10 -10
  85. package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +19 -19
  86. package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +20 -20
  87. package/src/app/modules/services/crypto.service.d.ts +10 -10
  88. package/src/app/modules/services/export-data.service.d.ts +18 -18
  89. package/src/app/modules/services/file-forms.service.d.ts +7 -7
  90. package/src/app/modules/services/functions.service.d.ts +13 -13
  91. package/src/app/modules/services/generate-pdf.service.d.ts +12 -12
  92. package/src/app/modules/services/http.service.d.ts +22 -22
  93. package/src/app/modules/services/loading/loading.component.d.ts +15 -15
  94. package/src/app/modules/services/local-storage.service.d.ts +49 -49
  95. package/src/app/modules/services/message.service.d.ts +23 -23
  96. package/src/app/modules/services/screen-size-util.d.ts +3 -3
  97. package/src/app/modules/services/session.service.d.ts +14 -14
@@ -1,115 +1,115 @@
1
- import { compress, decompress } from 'lz-string';
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class LocalStorageService {
5
- constructor() {
6
- this.prefix = 'bl-f';
7
- this.store = window.localStorage;
8
- this.prefix += '.';
9
- }
10
- /**
11
- * set key in local storage
12
- * @param key key
13
- * @param value value
14
- */
15
- set(key, value) {
16
- key = this.prefix + key;
17
- this.store.setItem(key, compress(JSON.stringify(value))); // compress data
18
- return true;
19
- }
20
- /**
21
- * get key in local storage
22
- * @param key key
23
- * @returns value as object
24
- */
25
- get(key) {
26
- key = this.prefix + key;
27
- const datacompressed = this.store.getItem(key);
28
- if (!datacompressed) {
29
- return null;
30
- }
31
- const item = decompress(datacompressed); // decompress
32
- return JSON.parse(item);
33
- }
34
- /**
35
- * remove a key
36
- * @param key key to remove
37
- * @returns boolean
38
- */
39
- remove(key) {
40
- key = this.prefix + key;
41
- this.store.removeItem(key);
42
- return true;
43
- }
44
- /**
45
- * clear all
46
- * @returns boolean
47
- */
48
- clear() {
49
- this.store.clear();
50
- return true;
51
- }
52
- /**
53
- * get all keys present in local storage
54
- * @returns array of keys
55
- */
56
- getAllKeys() {
57
- let keys = [];
58
- for (let index = 0; index < this.store.length; index++) {
59
- const key = this.store.key(index);
60
- if (key.indexOf(this.prefix) === 0) {
61
- keys.push(key.substr(this.prefix.length));
62
- }
63
- }
64
- return keys;
65
- }
66
- /**
67
- * set key with expire time
68
- * @param key key
69
- * @param value value
70
- * @returns true if set correctly
71
- */
72
- setWhitExpiry(key, value) {
73
- const now = new Date();
74
- const ttl = 3600 * 1000;
75
- const item = {
76
- value: value,
77
- expiry: now.getTime() + ttl,
78
- };
79
- key = this.prefix + key;
80
- this.store.setItem(key, compress(JSON.stringify(item))); // compress data
81
- return true;
82
- }
83
- /**
84
- * return key with expire time
85
- * @param key key
86
- * @returns return object with data or null if key expired
87
- */
88
- getWithExpiry(key) {
89
- key = this.prefix + key;
90
- const datacompressed = this.store.getItem(key);
91
- if (!datacompressed) {
92
- return null;
93
- }
94
- const itemStr = decompress(datacompressed); // decompress
95
- const item = JSON.parse(itemStr);
96
- const now = new Date();
97
- if (!item) {
98
- return null;
99
- }
100
- if (now.getTime() > item.expiry) {
101
- this.store.removeItem(key);
102
- return null;
103
- }
104
- return item.value;
105
- }
106
- }
107
- LocalStorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
108
- LocalStorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalStorageService, providedIn: 'root' });
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalStorageService, decorators: [{
110
- type: Injectable,
111
- args: [{
112
- providedIn: 'root',
113
- }]
114
- }], ctorParameters: function () { return []; } });
1
+ import { compress, decompress } from 'lz-string';
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class LocalStorageService {
5
+ constructor() {
6
+ this.prefix = 'bl-f';
7
+ this.store = window.localStorage;
8
+ this.prefix += '.';
9
+ }
10
+ /**
11
+ * set key in local storage
12
+ * @param key key
13
+ * @param value value
14
+ */
15
+ set(key, value) {
16
+ key = this.prefix + key;
17
+ this.store.setItem(key, compress(JSON.stringify(value))); // compress data
18
+ return true;
19
+ }
20
+ /**
21
+ * get key in local storage
22
+ * @param key key
23
+ * @returns value as object
24
+ */
25
+ get(key) {
26
+ key = this.prefix + key;
27
+ const datacompressed = this.store.getItem(key);
28
+ if (!datacompressed) {
29
+ return null;
30
+ }
31
+ const item = decompress(datacompressed); // decompress
32
+ return JSON.parse(item);
33
+ }
34
+ /**
35
+ * remove a key
36
+ * @param key key to remove
37
+ * @returns boolean
38
+ */
39
+ remove(key) {
40
+ key = this.prefix + key;
41
+ this.store.removeItem(key);
42
+ return true;
43
+ }
44
+ /**
45
+ * clear all
46
+ * @returns boolean
47
+ */
48
+ clear() {
49
+ this.store.clear();
50
+ return true;
51
+ }
52
+ /**
53
+ * get all keys present in local storage
54
+ * @returns array of keys
55
+ */
56
+ getAllKeys() {
57
+ let keys = [];
58
+ for (let index = 0; index < this.store.length; index++) {
59
+ const key = this.store.key(index);
60
+ if (key.indexOf(this.prefix) === 0) {
61
+ keys.push(key.substr(this.prefix.length));
62
+ }
63
+ }
64
+ return keys;
65
+ }
66
+ /**
67
+ * set key with expire time
68
+ * @param key key
69
+ * @param value value
70
+ * @returns true if set correctly
71
+ */
72
+ setWhitExpiry(key, value) {
73
+ const now = new Date();
74
+ const ttl = 3600 * 1000;
75
+ const item = {
76
+ value: value,
77
+ expiry: now.getTime() + ttl,
78
+ };
79
+ key = this.prefix + key;
80
+ this.store.setItem(key, compress(JSON.stringify(item))); // compress data
81
+ return true;
82
+ }
83
+ /**
84
+ * return key with expire time
85
+ * @param key key
86
+ * @returns return object with data or null if key expired
87
+ */
88
+ getWithExpiry(key) {
89
+ key = this.prefix + key;
90
+ const datacompressed = this.store.getItem(key);
91
+ if (!datacompressed) {
92
+ return null;
93
+ }
94
+ const itemStr = decompress(datacompressed); // decompress
95
+ const item = JSON.parse(itemStr);
96
+ const now = new Date();
97
+ if (!item) {
98
+ return null;
99
+ }
100
+ if (now.getTime() > item.expiry) {
101
+ this.store.removeItem(key);
102
+ return null;
103
+ }
104
+ return item.value;
105
+ }
106
+ }
107
+ LocalStorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
108
+ LocalStorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalStorageService, providedIn: 'root' });
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LocalStorageService, decorators: [{
110
+ type: Injectable,
111
+ args: [{
112
+ providedIn: 'root',
113
+ }]
114
+ }], ctorParameters: function () { return []; } });
115
115
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sbUJBQW1CO0lBRzlCO1FBRlEsV0FBTSxHQUFXLE1BQU0sQ0FBQztRQUN4QixVQUFLLEdBQVEsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUV2QyxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBSSxHQUFXLEVBQUUsS0FBUTtRQUMxQixHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUMxRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFQTs7OztPQUlHO0lBQ0osR0FBRyxDQUFJLEdBQVc7UUFDaEIsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQVcsQ0FBQyxDQUFDLGFBQWE7UUFDaEUsT0FBTyxJQUFJLENB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bXBvcnQgeyBjb21wcmVzcywgZGVjb21wcmVzcyB9IGZyb20gJ2x6LXN0cmluZyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwcmVmaXg6IHN0cmluZyA9ICdibC1mJztcbiAgcHJpdmF0ZSBzdG9yZTogYW55ID0gd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wcmVmaXggKz0gJy4nO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBrZXkgaW4gbG9jYWwgc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5ICBrZXlcbiAgICogQHBhcmFtIHZhbHVlICB2YWx1ZVxuICAgKi9cbiAgc2V0PFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCkgOiBib29sZWFue1xuICAgIGtleSA9IHRoaXMucHJlZml4ICsga2V5O1xuICAgIHRoaXMuc3RvcmUuc2V0SXRlbShrZXksIGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpOyAvLyBjb21wcmVzcyBkYXRhXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAgLyoqXG4gICAgKiBnZXQga2V5IGluIGxvY2FsIHN0b3JhZ2VcbiAgICAqIEBwYXJhbSBrZXkgIGtleVxuICAgICogQHJldHVybnMgIHZhbHVlIGFzIG9iamVjdFxuICAgICovXG4gIGdldDxUPihrZXk6IHN0cmluZykgOiBUIHwgbnVsbCB7XG4gICAga2V5ID0gdGhpcy5wcmVmaXggKyBrZXk7XG4gICAgY29uc3QgZGF0YWNvbXByZXNzZWQgPSB0aGlzLnN0b3JlLmdldEl0ZW0oa2V5KTtcbiAgICBpZiAoIWRhdGFjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXRlbSA9IGRlY29tcHJlc3MoZGF0YWNvbXByZXNzZWQpIGFzIHN0cmluZzsgLy8gZGVjb21wcmVzc1xuICAgIHJldHVybiBKU09OLnBhcnNlKGl0ZW0pIGFzIFQ7XG4gIH1cbiAgLyoqXG4gICAqIHJlbW92ZSBhIGtleVxuICAgKiBAcGFyYW0ga2V5IGtleSB0byByZW1vdmVcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgcmVtb3ZlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAga2V5ID0gdGhpcy5wcmVmaXggKyBrZXk7XG4gICAgdGhpcy5zdG9yZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAgIC8qKlxuICAgKiBjbGVhciBhbGxcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgY2xlYXIoKTpib29sZWFue1xuICAgIHRoaXMuc3RvcmUuY2xlYXIoKVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBhbGwga2V5cyBwcmVzZW50IGluIGxvY2FsIHN0b3JhZ2VcbiAgICogQHJldHVybnMgIGFycmF5IG9mIGtleXNcbiAgICovXG4gIGdldEFsbEtleXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgbGV0IGtleXMgPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zdG9yZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RvcmUua2V5KGluZGV4KTtcbiAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLnByZWZpeCkgPT09IDApIHtcbiAgICAgICAga2V5cy5wdXNoKGtleS5zdWJzdHIodGhpcy5wcmVmaXgubGVuZ3RoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBrZXkgd2l0aCBleHBpcmUgdGltZVxuICAgKiBAcGFyYW0ga2V5IGtleVxuICAgKiBAcGFyYW0gdmFsdWUgIHZhbHVlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgc2V0IGNvcnJlY3RseVxuICAgKi9cbiAgc2V0V2hpdEV4cGlyeTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBib29sZWFuIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHR0bCA9IDM2MDAgKiAxMDAwO1xuICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBleHBpcnk6IG5vdy5nZXRUaW1lKCkgKyB0dGwsXG4gICAgfTtcblxuICAgIGtleSA9IHRoaXMucHJlZml4ICsga2V5O1xuICAgIHRoaXMuc3RvcmUuc2V0SXRlbShrZXksIGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KGl0ZW0pKSk7IC8vIGNvbXByZXNzIGRhdGFcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuIC8qKlxuICAqIHJldHVybiBrZXkgd2l0aCBleHBpcmUgdGltZVxuICAqIEBwYXJhbSBrZXkga2V5XG4gICogQHJldHVybnMgcmV0dXJuIG9iamVjdCB3aXRoIGRhdGEgb3IgbnVsbCBpZiBrZXkgZXhwaXJlZFxuICAqL1xuXG4gIGdldFdpdGhFeHBpcnk8VD4oa2V5OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAga2V5ID0gdGhpcy5wcmVmaXggKyBrZXk7XG4gICAgY29uc3QgZGF0YWNvbXByZXNzZWQgPSB0aGlzLnN0b3JlLmdldEl0ZW0oa2V5KTtcbiAgICBpZiAoIWRhdGFjb21wcmVzc2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXRlbVN0ciA9IGRlY29tcHJlc3MoZGF0YWNvbXByZXNzZWQpIGFzIHN0cmluZzsgLy8gZGVjb21wcmVzc1xuXG4gICAgY29uc3QgaXRlbSA9IEpTT04ucGFyc2UoaXRlbVN0cik7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobm93LmdldFRpbWUoKSA+IGl0ZW0uZXhwaXJ5KSB7XG4gICAgICB0aGlzLnN0b3JlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbS52YWx1ZSBhcyBUO1xuICB9XG59XG4iXX0=