coer-elements 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. package/components/index.d.ts +12 -0
  2. package/components/lib/coer-button/coer-button.component.d.ts +3 -3
  3. package/components/lib/coer-checkbox/coer-checkbox.component.d.ts +28 -0
  4. package/components/lib/coer-filebox/coer-filebox.component.d.ts +33 -0
  5. package/components/lib/coer-form/coer-form.component.d.ts +33 -0
  6. package/components/lib/coer-grid/coer-grid.component.d.ts +53 -0
  7. package/components/lib/coer-grid/coer-grid.extension.d.ts +105 -0
  8. package/components/lib/coer-modal/coer-modal.component.d.ts +38 -0
  9. package/components/lib/coer-numberbox/coer-numberbox.component.d.ts +56 -0
  10. package/components/lib/coer-page-title/coer-page-title.component.d.ts +12 -0
  11. package/components/lib/coer-selectbox/coer-selectbox.component.d.ts +75 -0
  12. package/components/lib/coer-switch/coer-switch.component.d.ts +31 -0
  13. package/components/lib/coer-tab/coer-tab.component.d.ts +35 -0
  14. package/components/lib/coer-textarea/coer-textarea.component.d.ts +51 -0
  15. package/components/lib/coer-textbox/coer-textbox.component.d.ts +57 -0
  16. package/components/lib/components.module.d.ts +24 -5
  17. package/directives/index.d.ts +3 -0
  18. package/directives/lib/coer-ref.directive.d.ts +14 -0
  19. package/directives/lib/directives.module.d.ts +8 -0
  20. package/directives/lib/life-cycle.directive.d.ts +14 -0
  21. package/esm2022/components/index.mjs +13 -1
  22. package/esm2022/components/lib/coer-button/coer-button.component.mjs +2 -2
  23. package/esm2022/components/lib/coer-checkbox/coer-checkbox.component.mjs +84 -0
  24. package/esm2022/components/lib/coer-filebox/coer-filebox.component.mjs +104 -0
  25. package/esm2022/components/lib/coer-form/coer-form.component.mjs +102 -0
  26. package/esm2022/components/lib/coer-grid/coer-grid.component.mjs +515 -0
  27. package/esm2022/components/lib/coer-grid/coer-grid.extension.mjs +412 -0
  28. package/esm2022/components/lib/coer-modal/coer-modal.component.mjs +108 -0
  29. package/esm2022/components/lib/coer-numberbox/coer-numberbox.component.mjs +260 -0
  30. package/esm2022/components/lib/coer-page-title/coer-page-title.component.mjs +44 -0
  31. package/esm2022/components/lib/coer-selectbox/coer-selectbox.component.mjs +339 -0
  32. package/esm2022/components/lib/coer-switch/coer-switch.component.mjs +94 -0
  33. package/esm2022/components/lib/coer-tab/coer-tab.component.mjs +116 -0
  34. package/esm2022/components/lib/coer-textarea/coer-textarea.component.mjs +157 -0
  35. package/esm2022/components/lib/coer-textbox/coer-textbox.component.mjs +196 -0
  36. package/esm2022/components/lib/components.module.mjs +93 -57
  37. package/esm2022/directives/index.mjs +4 -0
  38. package/esm2022/directives/lib/coer-ref.directive.mjs +23 -0
  39. package/esm2022/directives/lib/directives.module.mjs +25 -0
  40. package/esm2022/directives/lib/life-cycle.directive.mjs +29 -0
  41. package/esm2022/interfaces/coer-filebox/index.mjs +3 -0
  42. package/esm2022/interfaces/coer-grid/index.mjs +21 -0
  43. package/esm2022/interfaces/index.mjs +1 -3
  44. package/esm2022/interfaces/lib/coer-filebox/file-image.interface.mjs +2 -0
  45. package/esm2022/interfaces/lib/coer-filebox/file.interface.mjs +2 -0
  46. package/esm2022/interfaces/lib/coer-grid/grid-button-by-row.interface.mjs +2 -0
  47. package/esm2022/interfaces/lib/coer-grid/grid-checkbox.interface.mjs +2 -0
  48. package/esm2022/interfaces/lib/coer-grid/grid-coer-numberbox.interface.mjs +2 -0
  49. package/esm2022/interfaces/lib/coer-grid/grid-coer-selectbox.interface.mjs +2 -0
  50. package/esm2022/interfaces/lib/coer-grid/grid-coer-switch.interface.mjs +2 -0
  51. package/esm2022/interfaces/lib/coer-grid/grid-coer-textbox.interface.mjs +2 -0
  52. package/esm2022/interfaces/lib/coer-grid/grid-column.interface.mjs +2 -0
  53. package/esm2022/interfaces/lib/coer-grid/grid-data-source.interface.mjs +2 -0
  54. package/esm2022/interfaces/lib/coer-grid/grid-header-button.interface.mjs +2 -0
  55. package/esm2022/interfaces/lib/coer-grid/grid-header-export-button.interface.mjs +2 -0
  56. package/esm2022/interfaces/lib/coer-grid/grid-header.interface.mjs +2 -0
  57. package/esm2022/interfaces/lib/coer-grid/grid-import.interface.mjs +2 -0
  58. package/esm2022/interfaces/lib/coer-grid/grid-input-checkbox.interface.mjs +2 -0
  59. package/esm2022/interfaces/lib/coer-grid/grid-input-switch-change.interface.mjs +2 -0
  60. package/esm2022/interfaces/lib/coer-grid/grid-input-textbox.interface.mjs +2 -0
  61. package/esm2022/interfaces/lib/coer-grid/grid-item.interface.mjs +2 -0
  62. package/esm2022/interfaces/lib/coer-grid/grid-keyup-enter.interface.mjs +2 -0
  63. package/esm2022/interfaces/lib/coer-grid/grid-length.interface.mjs +2 -0
  64. package/esm2022/interfaces/lib/coer-grid/grid-search.interface.mjs +2 -0
  65. package/esm2022/interfaces/lib/coer-grid/grid-sort.interface.mjs +2 -0
  66. package/esm2022/interfaces/lib/menu/menu-option-selected.interface.mjs +2 -0
  67. package/esm2022/interfaces/lib/menu/menu.interface.mjs +2 -0
  68. package/esm2022/interfaces/lib/page-title/breadcrumb.interface.mjs +2 -0
  69. package/esm2022/interfaces/lib/page-title/go-back.interface.mjs +2 -0
  70. package/esm2022/interfaces/page-title/index.mjs +3 -0
  71. package/esm2022/pipes/index.mjs +5 -0
  72. package/esm2022/pipes/lib/html.pipe.mjs +18 -0
  73. package/esm2022/pipes/lib/no-image.pipe.mjs +23 -0
  74. package/esm2022/pipes/lib/numeric-format.pipe.mjs +15 -0
  75. package/esm2022/pipes/lib/pipes.module.mjs +31 -0
  76. package/esm2022/public_api.mjs +3 -1
  77. package/esm2022/signals/lib/breakpoint.signal.mjs +2 -2
  78. package/esm2022/signals/lib/is-loading.signal.mjs +2 -2
  79. package/esm2022/signals/lib/is-modal-open.signal.mjs +2 -2
  80. package/esm2022/tools/index.mjs +3 -2
  81. package/esm2022/tools/lib/breadcrumbs.class.mjs +2 -2
  82. package/esm2022/tools/lib/date-time.class.mjs +14 -7
  83. package/esm2022/tools/lib/files.class.mjs +2 -2
  84. package/esm2022/tools/lib/menu.class.mjs +23 -0
  85. package/esm2022/tools/lib/page.class.mjs +6 -6
  86. package/esm2022/tools/lib/screen.class.mjs +9 -1
  87. package/esm2022/tools/lib/source.class.mjs +3 -3
  88. package/esm2022/tools/lib/tools.mjs +220 -0
  89. package/fesm2022/coer-elements.mjs +3266 -603
  90. package/fesm2022/coer-elements.mjs.map +1 -1
  91. package/interfaces/coer-filebox/index.d.ts +2 -0
  92. package/interfaces/coer-grid/index.d.ts +20 -0
  93. package/interfaces/index.d.ts +0 -2
  94. package/interfaces/lib/coer-filebox/file-image.interface.d.ts +14 -0
  95. package/interfaces/lib/coer-filebox/file.interface.d.ts +5 -0
  96. package/interfaces/lib/coer-grid/grid-button-by-row.interface.d.ts +6 -0
  97. package/interfaces/lib/coer-grid/grid-checkbox.interface.d.ts +5 -0
  98. package/interfaces/lib/coer-grid/grid-coer-numberbox.interface.d.ts +12 -0
  99. package/interfaces/lib/coer-grid/grid-coer-selectbox.interface.d.ts +9 -0
  100. package/interfaces/lib/coer-grid/grid-coer-switch.interface.d.ts +6 -0
  101. package/interfaces/lib/coer-grid/grid-coer-textbox.interface.d.ts +11 -0
  102. package/interfaces/lib/coer-grid/grid-column.interface.d.ts +22 -0
  103. package/interfaces/lib/coer-grid/grid-data-source.interface.d.ts +6 -0
  104. package/interfaces/lib/coer-grid/grid-header-button.interface.d.ts +8 -0
  105. package/interfaces/lib/coer-grid/grid-header-export-button.interface.d.ts +10 -0
  106. package/interfaces/lib/coer-grid/grid-header.interface.d.ts +5 -0
  107. package/interfaces/lib/coer-grid/grid-import.interface.d.ts +4 -0
  108. package/interfaces/lib/coer-grid/grid-input-checkbox.interface.d.ts +5 -0
  109. package/interfaces/lib/coer-grid/grid-input-switch-change.interface.d.ts +5 -0
  110. package/interfaces/lib/coer-grid/grid-input-textbox.interface.d.ts +5 -0
  111. package/interfaces/lib/coer-grid/grid-item.interface.d.ts +5 -0
  112. package/interfaces/lib/coer-grid/grid-keyup-enter.interface.d.ts +6 -0
  113. package/interfaces/lib/coer-grid/grid-length.interface.d.ts +5 -0
  114. package/interfaces/lib/coer-grid/grid-search.interface.d.ts +4 -0
  115. package/interfaces/lib/coer-grid/grid-sort.interface.d.ts +5 -0
  116. package/interfaces/lib/menu/menu-option-selected.interface.d.ts +9 -0
  117. package/interfaces/lib/menu/menu.interface.d.ts +6 -0
  118. package/interfaces/page-title/index.d.ts +2 -0
  119. package/package.json +1 -1
  120. package/pipes/index.d.ts +4 -0
  121. package/pipes/lib/html.pipe.d.ts +10 -0
  122. package/pipes/lib/no-image.pipe.d.ts +7 -0
  123. package/pipes/lib/numeric-format.pipe.d.ts +7 -0
  124. package/pipes/lib/pipes.module.d.ts +9 -0
  125. package/public_api.d.ts +2 -0
  126. package/signals/lib/is-loading.signal.d.ts +1 -1
  127. package/signals/lib/is-modal-open.signal.d.ts +1 -1
  128. package/src/interfaces/coer-filebox/index.ts +2 -0
  129. package/src/interfaces/coer-grid/index.ts +20 -0
  130. package/src/interfaces/index.ts +1 -3
  131. package/src/interfaces/lib/coer-filebox/file-image.interface.ts +14 -0
  132. package/src/interfaces/lib/coer-filebox/file.interface.ts +5 -0
  133. package/src/interfaces/lib/coer-grid/grid-button-by-row.interface.ts +7 -0
  134. package/src/interfaces/lib/coer-grid/grid-checkbox.interface.ts +5 -0
  135. package/src/interfaces/lib/coer-grid/grid-coer-numberbox.interface.ts +12 -0
  136. package/src/interfaces/lib/coer-grid/grid-coer-selectbox.interface.ts +9 -0
  137. package/src/interfaces/lib/coer-grid/grid-coer-switch.interface.ts +6 -0
  138. package/src/interfaces/lib/coer-grid/grid-coer-textbox.interface.ts +11 -0
  139. package/src/interfaces/lib/coer-grid/grid-column.interface.ts +23 -0
  140. package/src/interfaces/lib/coer-grid/grid-data-source.interface.ts +6 -0
  141. package/src/interfaces/lib/coer-grid/grid-header-button.interface.ts +8 -0
  142. package/src/interfaces/lib/coer-grid/grid-header-export-button.interface.ts +10 -0
  143. package/src/interfaces/lib/coer-grid/grid-header.interface.ts +5 -0
  144. package/src/interfaces/lib/coer-grid/grid-import.interface.ts +4 -0
  145. package/src/interfaces/lib/coer-grid/grid-input-checkbox.interface.ts +5 -0
  146. package/src/interfaces/lib/coer-grid/grid-input-switch-change.interface.ts +5 -0
  147. package/src/interfaces/lib/coer-grid/grid-input-textbox.interface.ts +5 -0
  148. package/src/interfaces/lib/coer-grid/grid-item.interface.ts +5 -0
  149. package/src/interfaces/lib/coer-grid/grid-keyup-enter.interface.ts +6 -0
  150. package/src/interfaces/lib/coer-grid/grid-length.interface.ts +5 -0
  151. package/src/interfaces/lib/coer-grid/grid-search.interface.ts +4 -0
  152. package/src/interfaces/lib/coer-grid/grid-sort.interface.ts +5 -0
  153. package/src/interfaces/lib/menu/menu-option-selected.interface.ts +10 -0
  154. package/src/interfaces/lib/menu/menu-selected.interface.ts +11 -0
  155. package/src/interfaces/lib/menu/menu.interface.ts +6 -0
  156. package/src/interfaces/menu/index.ts +3 -0
  157. package/src/interfaces/page-title/index.ts +2 -0
  158. package/tools/index.d.ts +2 -1
  159. package/tools/lib/breadcrumbs.class.d.ts +1 -1
  160. package/tools/lib/date-time.class.d.ts +4 -2
  161. package/tools/lib/menu.class.d.ts +8 -0
  162. package/tools/lib/page.class.d.ts +4 -3
  163. package/tools/lib/screen.class.d.ts +3 -1
  164. package/tools/lib/source.class.d.ts +1 -1
  165. package/tools/lib/{generi-tools.d.ts → tools.d.ts} +7 -5
  166. package/esm2022/interfaces/lib/breadcrumb.interface.mjs +0 -2
  167. package/esm2022/interfaces/lib/go-back.interface.mjs +0 -2
  168. package/esm2022/tools/lib/generi-tools.mjs +0 -199
  169. /package/interfaces/lib/{breadcrumb.interface.d.ts → page-title/breadcrumb.interface.d.ts} +0 -0
  170. /package/interfaces/lib/{go-back.interface.d.ts → page-title/go-back.interface.d.ts} +0 -0
  171. /package/src/interfaces/lib/{breadcrumb.interface.ts → page-title/breadcrumb.interface.ts} +0 -0
  172. /package/src/interfaces/lib/{go-back.interface.ts → page-title/go-back.interface.ts} +0 -0
  173. /package/src/styles/{coer-elements.scss → index.scss} +0 -0
@@ -1,9 +1,9 @@
1
- import { Component, Inject, inject } from '@angular/core';
2
1
  import { ActivatedRoute, Router } from '@angular/router';
3
- import { CoerAlert } from '../../components';
4
- import { Breadcrumbs } from './breadcrumbs.class';
5
- import { Source } from './source.class';
6
- import { Tools } from './generi-tools';
2
+ import { Component, Inject, inject } from '@angular/core';
3
+ import { CoerAlert } from '../../components/lib/coer-alert/coer-alert.component';
4
+ import { Breadcrumbs } from '../lib/breadcrumbs.class';
5
+ import { Source } from '../lib/source.class';
6
+ import { Tools } from './tools';
7
7
  import * as i0 from "@angular/core";
8
8
  export class Page {
9
9
  constructor(page) {
@@ -153,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
153
153
  type: Inject,
154
154
  args: [String]
155
155
  }] }] });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvc3JjL3Rvb2xzL2xpYi9wYWdlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR3ZDLE1BQU0sT0FBTyxJQUFJO0lBd0NiLFlBQTRCLElBQVk7UUF0Q3hDLFdBQVc7UUFDUSxVQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFekQsTUFBTTtRQUNJLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFcEMsTUFBTTtRQUNJLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFckMsTUFBTTtRQUNJLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXZDLE1BQU07UUFDSSxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFRNUMsTUFBTTtRQUNJLGdCQUFXLEdBQWtCLEVBQUUsQ0FBQztRQUUxQyxNQUFNO1FBQ0ksaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFbkMsTUFBTTtRQUNJLFdBQU0sR0FBWSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUU1Qyxt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SSxvREFETSxFQUFFOzs0RkFDWixJQUFJO2tCQURoQixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTs7MEJBeUNWLE1BQU07MkJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5qZWN0LCBpbmplY3QsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSUFwcFNvdXJjZSwgSUJyZWFkY3J1bWIsIElHb0JhY2sgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29lckFsZXJ0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJzIH0gZnJvbSAnLi9icmVhZGNydW1icy5jbGFzcyc7XHJcbmltcG9ydCB7IFNvdXJjZSB9IGZyb20gJy4vc291cmNlLmNsYXNzJztcclxuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuL2dlbmVyaS10b29scyc7XHJcblxyXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYWdlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICAvL0luamVjdGlvblxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0ID0gaW5qZWN0KENvZXJBbGVydCk7XHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBpc1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIGlzUmVhZHlQYWdlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgZW5hYmxlQW5pbWF0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIHJvdXRlUGFyYW1zOiBhbnk7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgcXVlcnlQYXJhbXM6IGFueTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBicmVhZGNydW1iczogSUJyZWFkY3J1bWJbXSA9IFtdO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIHBhZ2VSZXNwb25zZTogYW55ID0gbnVsbDtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBnb0JhY2s6IElHb0JhY2sgPSB7IHNob3c6IGZhbHNlIH07XHJcblxyXG4gICAgLy9Qcml2YXRlIFZhcmlhYmxlc1xyXG4gICAgcHJpdmF0ZSBfcGFnZTogc3RyaW5nID0gJyc7XHJcbiAgICBwcml2YXRlIF9zb3VyY2U6IElBcHBTb3VyY2UgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgX3ByZXZlbnREZXN0cm95OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoU3RyaW5nKSBwYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLlNldFBhZ2VOYW1lKHBhZ2UpO1xyXG4gICAgICAgIHRoaXMuU2V0U291cmNlKCk7XHJcbiAgICAgICAgdGhpcy5HZXRTb3VyY2UoKTtcclxuICAgICAgICB0aGlzLkdldE5hdmlnYXRpb24oKTtcclxuICAgICAgICB0aGlzLlNldEdvQmFjaygpO1xyXG4gICAgICAgIHRoaXMuR2V0UGFnZVJlc3BvbnNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGVQYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcztcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNSZWFkeVBhZ2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLlJ1blBhZ2UoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuZW5hYmxlQW5pbWF0aW9ucyA9IHRydWUgfSwgMTAwMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcHJldmVudERlc3Ryb3kpIFNvdXJjZS5DbGVhclBhZ2VSZXNwb25zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNYWluIG1ldGhvZC4gU3RhcnRzIGFmdGVyIG5nQWZ0ZXJWaWV3SW5pdCgpICovXHJcbiAgICBwcm90ZWN0ZWQgUnVuUGFnZSgpOiB2b2lkIHt9O1xyXG5cclxuXHJcbiAgICAvKiogUmVuYW1lIHRoZSBsYXN0IGJyZWFkY3J1bWIgYW5kIHVwZGF0ZSB0aGUgdXJsIGlkICovXHJcbiAgICBwcm90ZWN0ZWQgU2V0UGFnZU5hbWUobmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9wYWdlID0gbmFtZTtcclxuXHJcbiAgICAgICAgbGV0IHBhdGggPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgaWYgKHBhdGguaW5jbHVkZXMoJz8nKSkgcGF0aCA9IHBhdGguc3BsaXQoJz8nKVswXTtcclxuXHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBVEhfQVJSQVkgPSBwYXRoLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBVEhfSUQgPSBUb29scy5CcmVha1JlZmVyZW5jZShQQVRIX0FSUkFZKS5wb3AoKTtcclxuICAgICAgICAgICAgaWYgKFBBVEhfSUQpIHtcclxuICAgICAgICAgICAgICAgIFBBVEhfQVJSQVlbUEFUSF9BUlJBWS5sZW5ndGggLSAxXSA9IFN0cmluZyhpZCk7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gUEFUSF9BUlJBWS5qb2luKCcvJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJyZWFkY3J1bWJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1t0aGlzLmJyZWFkY3J1bWJzLmxlbmd0aCAtIDFdLnBhZ2UgPSBuYW1lO1xyXG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzW3RoaXMuYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV0ucGF0aCA9IHBhdGg7XHJcbiAgICAgICAgICAgIEJyZWFkY3J1bWJzLlNldExhc3QobmFtZSwgcGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJpdmF0ZSBTZXRTb3VyY2UoKTogdm9pZCB7XHJcbiAgICAgICAgU291cmNlLlNldCh0aGlzLl9wYWdlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIEdldFNvdXJjZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBTb3VyY2UuR2V0KCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIEdldFBhZ2VSZXNwb25zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2VSZXNwb25zZSA9IFNvdXJjZS5HZXRQYWdlUmVzcG9uc2UoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIEdldE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0gQnJlYWRjcnVtYnMuR2V0KCkubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiBpdGVtLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBpdGVtLnBhdGgsXHJcbiAgICAgICAgICAgICAgICBjbGljazogdGhpcy5Hb0JhY2soaXRlbS5wYXRoKVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHRoaXMuYnJlYWRjcnVtYnMgPSBbeyBwYWdlOiB0aGlzLl9wYWdlIH1dO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByaXZhdGUgU2V0R29CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5nb0JhY2sgPSB7XHJcbiAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogdGhpcy5fc291cmNlLnBhdGgsXHJcbiAgICAgICAgICAgICAgICBjbGljazogdGhpcy5Hb0JhY2soKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIEdvQmFjayA9IChwYXRoPzogc3RyaW5nKSA9PiAoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwYXRoKSBCcmVhZGNydW1icy5SZW1vdmUocGF0aCk7XHJcbiAgICAgICAgZWxzZSBCcmVhZGNydW1icy5SZW1vdmVMYXN0KCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLyoqIE5hdmlnYXRlIHRvIHByZXZpb3VzIHBhZ2UgKi9cclxuICAgIHByb3RlY3RlZCBHb1RvU291cmNlPFQ+KHBhZ2VSZXNwb25zZTogVCB8IG51bGwgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYodGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgIEJyZWFkY3J1bWJzLlJlbW92ZUxhc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5TZXRQYWdlUmVzcG9uc2UocGFnZVJlc3BvbnNlKTtcclxuICAgICAgICAgICAgVG9vbHMuU2xlZXAoKS50aGVuKF8gPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9zb3VyY2UhLnBhdGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBTZXRQYWdlUmVzcG9uc2U8VD4ocGFnZVJlc3BvbnNlOiBUIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoVG9vbHMuSXNOb3ROdWxsKHBhZ2VSZXNwb25zZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJldmVudERlc3Ryb3kgPSB0cnVlO1xyXG4gICAgICAgICAgICBTb3VyY2UuU2V0UGFnZVJlc3BvbnNlKHBhZ2VSZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgUmVsb2FkUGFnZSgpOiB2b2lkIHtcclxuICAgICAgICBCcmVhZGNydW1icy5SZW1vdmVMYXN0KCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBMb2codmFsdWU6IGFueSwgbG9nOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChUb29scy5Jc05vdE51bGwobG9nKSkgY29uc29sZS5sb2coeyBsb2csIHZhbHVlIH0pO1xyXG4gICAgICAgIGVsc2UgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgfVxyXG59Il19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvc3JjL3Rvb2xzL2xpYi9wYWdlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUlwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUdoQyxNQUFNLE9BQU8sSUFBSTtJQXdDYixZQUE0QixJQUFZO1FBdEN4QyxXQUFXO1FBQ1EsVUFBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXpELE1BQU07UUFDSSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXBDLE1BQU07UUFDSSxjQUFTLEdBQVksS0FBSyxDQUFDO1FBRXJDLE1BQU07UUFDSSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUV2QyxNQUFNO1FBQ0kscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBUTVDLE1BQU07UUFDSSxnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFFMUMsTUFBTTtRQUNJLGlCQUFZLEdBQVEsSUFBSSxDQUFDO1FBRW5DLE1BQU07UUFDSSxXQUFNLEdBQVksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFFNUMsbUJB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b0RBRE0sRUFBRTs7NEZBQ1osSUFBSTtrQkFEaEIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7OzBCQXlDVixNQUFNOzJCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbmplY3QsIGluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElCcmVhZGNydW1iIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9saWIvcGFnZS10aXRsZS9icmVhZGNydW1iLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElHb0JhY2sgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xpYi9wYWdlLXRpdGxlL2dvLWJhY2suaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSUFwcFNvdXJjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbGliL2FwcC1zb3VyY2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29lckFsZXJ0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9saWIvY29lci1hbGVydC9jb2VyLWFsZXJ0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJzIH0gZnJvbSAnLi4vbGliL2JyZWFkY3J1bWJzLmNsYXNzJztcclxuaW1wb3J0IHsgU291cmNlIH0gZnJvbSAnLi4vbGliL3NvdXJjZS5jbGFzcyc7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi90b29scyc7XHJcblxyXG5AQ29tcG9uZW50KHsgdGVtcGxhdGU6ICcnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYWdlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICAvL0luamVjdGlvblxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0ID0gaW5qZWN0KENvZXJBbGVydCk7XHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBpc1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIGlzUmVhZHlQYWdlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgZW5hYmxlQW5pbWF0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIHJvdXRlUGFyYW1zOiBhbnk7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgcXVlcnlQYXJhbXM6IGFueTtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBicmVhZGNydW1iczogSUJyZWFkY3J1bWJbXSA9IFtdO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIHBhZ2VSZXNwb25zZTogYW55ID0gbnVsbDtcclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBnb0JhY2s6IElHb0JhY2sgPSB7IHNob3c6IGZhbHNlIH07XHJcblxyXG4gICAgLy9Qcml2YXRlIFZhcmlhYmxlc1xyXG4gICAgcHJpdmF0ZSBfcGFnZTogc3RyaW5nID0gJyc7XHJcbiAgICBwcml2YXRlIF9zb3VyY2U6IElBcHBTb3VyY2UgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgX3ByZXZlbnREZXN0cm95OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoU3RyaW5nKSBwYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLlNldFBhZ2VOYW1lKHBhZ2UpO1xyXG4gICAgICAgIHRoaXMuU2V0U291cmNlKCk7XHJcbiAgICAgICAgdGhpcy5HZXRTb3VyY2UoKTtcclxuICAgICAgICB0aGlzLkdldE5hdmlnYXRpb24oKTtcclxuICAgICAgICB0aGlzLlNldEdvQmFjaygpO1xyXG4gICAgICAgIHRoaXMuR2V0UGFnZVJlc3BvbnNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGVQYXJhbXMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtcztcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNSZWFkeVBhZ2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLlJ1blBhZ2UoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuZW5hYmxlQW5pbWF0aW9ucyA9IHRydWUgfSwgMTAwMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcHJldmVudERlc3Ryb3kpIFNvdXJjZS5DbGVhclBhZ2VSZXNwb25zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNYWluIG1ldGhvZC4gU3RhcnRzIGFmdGVyIG5nQWZ0ZXJWaWV3SW5pdCgpICovXHJcbiAgICBwcm90ZWN0ZWQgUnVuUGFnZSgpOiB2b2lkIHt9O1xyXG5cclxuXHJcbiAgICAvKiogUmVuYW1lIHRoZSBsYXN0IGJyZWFkY3J1bWIgYW5kIHVwZGF0ZSB0aGUgdXJsIGlkICovXHJcbiAgICBwcm90ZWN0ZWQgU2V0UGFnZU5hbWUobmFtZTogc3RyaW5nLCBpZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9wYWdlID0gbmFtZTtcclxuXHJcbiAgICAgICAgbGV0IHBhdGggPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgaWYgKHBhdGguaW5jbHVkZXMoJz8nKSkgcGF0aCA9IHBhdGguc3BsaXQoJz8nKVswXTtcclxuXHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBVEhfQVJSQVkgPSBwYXRoLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IFBBVEhfSUQgPSBUb29scy5CcmVha1JlZmVyZW5jZShQQVRIX0FSUkFZKS5wb3AoKTtcclxuICAgICAgICAgICAgaWYgKFBBVEhfSUQpIHtcclxuICAgICAgICAgICAgICAgIFBBVEhfQVJSQVlbUEFUSF9BUlJBWS5sZW5ndGggLSAxXSA9IFN0cmluZyhpZCk7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gUEFUSF9BUlJBWS5qb2luKCcvJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJyZWFkY3J1bWJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1ic1t0aGlzLmJyZWFkY3J1bWJzLmxlbmd0aCAtIDFdLnBhZ2UgPSBuYW1lO1xyXG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzW3RoaXMuYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV0ucGF0aCA9IHBhdGg7XHJcbiAgICAgICAgICAgIEJyZWFkY3J1bWJzLlNldExhc3QobmFtZSwgcGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJpdmF0ZSBTZXRTb3VyY2UoKTogdm9pZCB7XHJcbiAgICAgICAgU291cmNlLlNldCh0aGlzLl9wYWdlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIEdldFNvdXJjZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBTb3VyY2UuR2V0KCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIEdldFBhZ2VSZXNwb25zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2VSZXNwb25zZSA9IFNvdXJjZS5HZXRQYWdlUmVzcG9uc2UoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIEdldE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJzID0gQnJlYWRjcnVtYnMuR2V0KCkubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiBpdGVtLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBpdGVtLnBhdGgsXHJcbiAgICAgICAgICAgICAgICBjbGljazogdGhpcy5Hb0JhY2soaXRlbS5wYXRoKVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHRoaXMuYnJlYWRjcnVtYnMgPSBbeyBwYWdlOiB0aGlzLl9wYWdlIH1dO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByaXZhdGUgU2V0R29CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5nb0JhY2sgPSB7XHJcbiAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogdGhpcy5fc291cmNlLnBhdGgsXHJcbiAgICAgICAgICAgICAgICBjbGljazogdGhpcy5Hb0JhY2soKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcml2YXRlIEdvQmFjayA9IChwYXRoPzogc3RyaW5nKSA9PiAoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwYXRoKSBCcmVhZGNydW1icy5SZW1vdmUocGF0aCk7XHJcbiAgICAgICAgZWxzZSBCcmVhZGNydW1icy5SZW1vdmVMYXN0KCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgLyoqIE5hdmlnYXRlIHRvIHByZXZpb3VzIHBhZ2UgKi9cclxuICAgIHByb3RlY3RlZCBHb1RvU291cmNlPFQ+KHBhZ2VSZXNwb25zZTogVCB8IG51bGwgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYodGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgIEJyZWFkY3J1bWJzLlJlbW92ZUxhc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5TZXRQYWdlUmVzcG9uc2UocGFnZVJlc3BvbnNlKTtcclxuICAgICAgICAgICAgVG9vbHMuU2xlZXAoKS50aGVuKF8gPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9zb3VyY2UhLnBhdGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBTZXRQYWdlUmVzcG9uc2U8VD4ocGFnZVJlc3BvbnNlOiBUIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoVG9vbHMuSXNOb3ROdWxsKHBhZ2VSZXNwb25zZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJldmVudERlc3Ryb3kgPSB0cnVlO1xyXG4gICAgICAgICAgICBTb3VyY2UuU2V0UGFnZVJlc3BvbnNlKHBhZ2VSZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwcm90ZWN0ZWQgUmVsb2FkUGFnZSgpOiB2b2lkIHtcclxuICAgICAgICBCcmVhZGNydW1icy5SZW1vdmVMYXN0KCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByb3RlY3RlZCBMb2codmFsdWU6IGFueSwgbG9nOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChUb29scy5Jc05vdE51bGwobG9nKSkgY29uc29sZS5sb2coeyBsb2csIHZhbHVlIH0pO1xyXG4gICAgICAgIGVsc2UgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgfVxyXG59Il19
@@ -39,5 +39,13 @@ export class Screen {
39
39
  });
40
40
  };
41
41
  }); }
42
+ /** */
43
+ static { this.BackButtonBrowser = new Observable(subscriber => {
44
+ window.addEventListener('popstate', popStateEvent => {
45
+ if (popStateEvent.state && popStateEvent.target) {
46
+ subscriber.next(popStateEvent.target.location.href);
47
+ }
48
+ });
49
+ }); }
42
50
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyZWVuLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29lci1lbGVtZW50cy9zcmMvdG9vbHMvbGliL3NjcmVlbi5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2xDLE1BQU0sT0FBTyxNQUFNO0lBRVIsTUFBTSxLQUFLLFlBQVk7UUFDMUIsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFHTSxNQUFNLEtBQUssYUFBYTtRQUMzQixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDOUIsQ0FBQztJQUdNLE1BQU0sS0FBSyxZQUFZO1FBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUdNLE1BQU0sS0FBSyxhQUFhO1FBQzNCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUdNLE1BQU0sS0FBSyxVQUFVO1FBQ3hCLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDcEMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQzthQUNyRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO2FBQ3JFLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDdEUsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQzs7WUFDdkUsT0FBTyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELE1BQU07YUFDUSxXQUFNLEdBQUcsSUFBSSxVQUFVLENBQWMsVUFBVSxDQUFDLEVBQUU7UUFDNUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDakMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzdCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBJU2NyZWVuU2l6ZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2NyZWVuIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBXSU5ET1dfV0lEVEgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IFdJTkRPV19IRUlHSFQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBERVZJQ0VfV0lEVEgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LnNjcmVlbi53aWR0aDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgREVWSUNFX0hFSUdIVCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuc2NyZWVuLmhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgQlJFQUtQT0lOVCgpOiAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJyB8ICd4eGwnIHtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA1NzYpIHJldHVybiAneHMnO1xyXG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCkgcmV0dXJuICdzbSc7XHJcbiAgICAgICAgZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPj0gNzY4ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyKSByZXR1cm4gJ21kJztcclxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSA5OTIgJiYgd2luZG93LmlubmVyV2lkdGggPCAxMjAwKSByZXR1cm4gJ2xnJztcclxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSAxMjAwICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkgcmV0dXJuICd4bCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3h4bCc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBSZXNpemUgPSBuZXcgT2JzZXJ2YWJsZTxJU2NyZWVuU2l6ZT4oc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLldJTkRPV19XSURUSCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5XSU5ET1dfSEVJR0hULFxyXG4gICAgICAgICAgICAgICAgYnJlYWtwb2luOiB0aGlzLkJSRUFLUE9JTlRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0iXX0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyZWVuLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29lci1lbGVtZW50cy9zcmMvdG9vbHMvbGliL3NjcmVlbi5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2xDLE1BQU0sT0FBTyxNQUFNO0lBRVIsTUFBTSxLQUFLLFlBQVk7UUFDMUIsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFHTSxNQUFNLEtBQUssYUFBYTtRQUMzQixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDOUIsQ0FBQztJQUdNLE1BQU0sS0FBSyxZQUFZO1FBQzFCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUdNLE1BQU0sS0FBSyxhQUFhO1FBQzNCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUdNLE1BQU0sS0FBSyxVQUFVO1FBQ3hCLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDcEMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQzthQUNyRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO2FBQ3JFLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDdEUsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQzs7WUFDdkUsT0FBTyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELE1BQU07YUFDUSxXQUFNLEdBQUcsSUFBSSxVQUFVLENBQWMsVUFBVSxDQUFDLEVBQUU7UUFDNUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDakMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzdCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBR0gsTUFBTTthQUNRLHNCQUFpQixHQUFHLElBQUksVUFBVSxDQUFTLFVBQVUsQ0FBQyxFQUFFO1FBQ2xFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDaEQsSUFBSSxhQUFhLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUMsVUFBVSxDQUFDLElBQUksQ0FBRSxhQUFhLENBQUMsTUFBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgSVNjcmVlblNpemUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9saWIvc2NyZWVuLXNpemUuaW50ZXJmYWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2NyZWVuIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBXSU5ET1dfV0lEVEgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IFdJTkRPV19IRUlHSFQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBERVZJQ0VfV0lEVEgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LnNjcmVlbi53aWR0aDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgREVWSUNFX0hFSUdIVCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuc2NyZWVuLmhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgQlJFQUtQT0lOVCgpOiAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJyB8ICd4eGwnIHtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA1NzYpIHJldHVybiAneHMnO1xyXG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCkgcmV0dXJuICdzbSc7XHJcbiAgICAgICAgZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPj0gNzY4ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyKSByZXR1cm4gJ21kJztcclxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSA5OTIgJiYgd2luZG93LmlubmVyV2lkdGggPCAxMjAwKSByZXR1cm4gJ2xnJztcclxuICAgICAgICBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSAxMjAwICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkgcmV0dXJuICd4bCc7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJ3h4bCc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBSZXNpemUgPSBuZXcgT2JzZXJ2YWJsZTxJU2NyZWVuU2l6ZT4oc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLldJTkRPV19XSURUSCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5XSU5ET1dfSEVJR0hULFxyXG4gICAgICAgICAgICAgICAgYnJlYWtwb2luOiB0aGlzLkJSRUFLUE9JTlRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBCYWNrQnV0dG9uQnJvd3NlciA9IG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgcG9wU3RhdGVFdmVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwb3BTdGF0ZUV2ZW50LnN0YXRlICYmIHBvcFN0YXRlRXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKHBvcFN0YXRlRXZlbnQudGFyZ2V0IGFzIGFueSkubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59Il19
@@ -1,7 +1,7 @@
1
1
  import { inject } from "@angular/core";
2
2
  import { Router } from '@angular/router';
3
- import { Breadcrumbs } from "./breadcrumbs.class";
4
- import { Tools } from './generi-tools';
3
+ import { Breadcrumbs } from "../lib/breadcrumbs.class";
4
+ import { Tools } from "../lib/tools";
5
5
  export class Source {
6
6
  static { this.storage = 'COER-System'; }
7
7
  /** */
@@ -77,4 +77,4 @@ export class Source {
77
77
  sessionStorage.removeItem(this.storage);
78
78
  }
79
79
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29lci1lbGVtZW50cy9zcmMvdG9vbHMvbGliL3NvdXJjZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE1BQU0sT0FBTyxNQUFNO2FBRVMsWUFBTyxHQUFHLGFBQWEsQ0FBQztJQUVoRCxNQUFNO0lBQ0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFZO1FBQzFCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU1QixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdEMsSUFBRyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFHLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxV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QUFFLENBQUM7WUFDekMsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2hDLENBQUM7UUFFRCxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBR0QsTUFBTTtJQUNDLE1BQU0sQ0FBQyxLQUFLO1FBQ2YsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IElBcHBTb3VyY2UgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1icyB9IGZyb20gXCIuL2JyZWFkY3J1bWJzLmNsYXNzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi9nZW5lcmktdG9vbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNvdXJjZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgc3RvcmFnZSA9ICdDT0VSLVN5c3RlbSc7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFNldChwYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBST1VURVIgPSBpbmplY3QoUm91dGVyKTtcclxuXHJcbiAgICAgICAgbGV0IHBhdGggPSBST1VURVIudXJsO1xyXG4gICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCc/JykpIHBhdGggPSBwYXRoLnNwbGl0KCc/JylbMF07XHJcblxyXG4gICAgICAgIEJyZWFkY3J1bWJzLkFkZChwYWdlLCBwYXRoKTtcclxuXHJcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSBCcmVhZGNydW1icy5HZXQoKTtcclxuXHJcbiAgICAgICAgaWYoYnJlYWRjcnVtYnMubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgICAgYnJlYWRjcnVtYnMucG9wKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSBicmVhZGNydW1icy5wb3AoKSE7XHJcbiAgICAgICAgICAgIHRoaXMuU2F2ZSh7IHBhZ2U6IGJyZWFkY3J1bWIucGFnZSwgcGF0aDogYnJlYWRjcnVtYi5wYXRoIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSB0aGlzLlNhdmUobnVsbCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgU2F2ZShzb3VyY2U6IElBcHBTb3VyY2UgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZSkgYXMgYW55O1xyXG4gICAgICAgIGlmIChzdG9yYWdlKSBzdG9yYWdlID0gSlNPTi5wYXJzZShzdG9yYWdlKTtcclxuICAgICAgICBzdG9yYWdlID0gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmFnZSwgeyBzb3VyY2UgfSk7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2UsIEpTT04uc3RyaW5naWZ5KHN0b3JhZ2UpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldCgpOiBJQXBwU291cmNlIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZSkgYXMgYW55O1xyXG5cclxuICAgICAgICBpZiAoc3RvcmFnZSkge1xyXG4gICAgICAgICAgICBzdG9yYWdlID0gSlNPTi5wYXJzZShzdG9yYWdlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlLmhhc093blByb3BlcnR5KCdzb3VyY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2Uuc291cmNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldFJvb3QoKTogSUFwcFNvdXJjZSB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gQnJlYWRjcnVtYnMuR2V0KCk7XHJcbiAgICAgICAgcmV0dXJuIChicmVhZGNydW1icy5sZW5ndGggPiAwKSA/IGJyZWFkY3J1bWJzLnNoaWZ0KCkhIDogbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFNldFBhZ2VSZXNwb25zZTxUPihwYWdlUmVzcG9uc2U6IFQpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlKSBhcyBhbnk7XHJcbiAgICAgICAgc3RvcmFnZSA9IEpTT04ucGFyc2Uoc3RvcmFnZSk7XHJcbiAgICAgICAgc3RvcmFnZSA9IE9iamVjdC5hc3NpZ24oe30sIHN0b3JhZ2UsIHsgcGFnZVJlc3BvbnNlIH0pO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlLCBKU09OLnN0cmluZ2lmeShzdG9yYWdlKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHZXRQYWdlUmVzcG9uc2U8VD4oKTogVCB8IG51bGwge1xyXG4gICAgICAgIGxldCBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2UpIGFzIGFueTtcclxuXHJcbiAgICAgICAgaWYgKHN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgc3RvcmFnZSA9IEpTT04ucGFyc2Uoc3RvcmFnZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZS5oYXNPd25Qcm9wZXJ0eSgncGFnZVJlc3BvbnNlJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBUb29scy5CcmVha1JlZmVyZW5jZShzdG9yYWdlLnBhZ2VSZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgQ2xlYXJQYWdlUmVzcG9uc2UoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZSkgYXMgYW55O1xyXG4gICAgICAgIHN0b3JhZ2UgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xyXG5cclxuICAgICAgICBpZiAoc3RvcmFnZS5oYXNPd25Qcm9wZXJ0eSgncGFnZVJlc3BvbnNlJykpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHN0b3JhZ2UucGFnZVJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RvcmFnZSA9IE9iamVjdC5hc3NpZ24oe30sIHN0b3JhZ2UpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlLCBKU09OLnN0cmluZ2lmeShzdG9yYWdlKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBSZXNldCgpOiB2b2lkIHtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuc3RvcmFnZSk7XHJcbiAgICB9XHJcbn0iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29lci1lbGVtZW50cy9zcmMvdG9vbHMvbGliL3NvdXJjZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLE9BQU8sTUFBTTthQUVTLFlBQU8sR0FBRyxhQUFhLENBQUM7SUFFaEQsTUFBTTtJQUNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBWTtRQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFNUIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXRDLElBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6QixXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbEIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFB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RSxDQUFDO1lBQ3pDLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNoQyxDQUFDO1FBRUQsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUdELE1BQU07SUFDQyxNQUFNLENBQUMsS0FBSztRQUNmLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBJQXBwU291cmNlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvbGliL2FwcC1zb3VyY2UuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJzIH0gZnJvbSBcIi4uL2xpYi9icmVhZGNydW1icy5jbGFzc1wiO1xyXG5pbXBvcnQgeyBUb29scyB9IGZyb20gXCIuLi9saWIvdG9vbHNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTb3VyY2Uge1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHN0b3JhZ2UgPSAnQ09FUi1TeXN0ZW0nO1xyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBTZXQocGFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgUk9VVEVSID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gICAgICAgIGxldCBwYXRoID0gUk9VVEVSLnVybDtcclxuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcygnPycpKSBwYXRoID0gcGF0aC5zcGxpdCgnPycpWzBdO1xyXG5cclxuICAgICAgICBCcmVhZGNydW1icy5BZGQocGFnZSwgcGF0aCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gQnJlYWRjcnVtYnMuR2V0KCk7XHJcblxyXG4gICAgICAgIGlmKGJyZWFkY3J1bWJzLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgICAgIGJyZWFkY3J1bWJzLnBvcCgpO1xyXG4gICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gYnJlYWRjcnVtYnMucG9wKCkhO1xyXG4gICAgICAgICAgICB0aGlzLlNhdmUoeyBwYWdlOiBicmVhZGNydW1iLnBhZ2UsIHBhdGg6IGJyZWFkY3J1bWIucGF0aCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgdGhpcy5TYXZlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHByaXZhdGUgc3RhdGljIFNhdmUoc291cmNlOiBJQXBwU291cmNlIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2UpIGFzIGFueTtcclxuICAgICAgICBpZiAoc3RvcmFnZSkgc3RvcmFnZSA9IEpTT04ucGFyc2Uoc3RvcmFnZSk7XHJcbiAgICAgICAgc3RvcmFnZSA9IE9iamVjdC5hc3NpZ24oe30sIHN0b3JhZ2UsIHsgc291cmNlIH0pO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlLCBKU09OLnN0cmluZ2lmeShzdG9yYWdlKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHZXQoKTogSUFwcFNvdXJjZSB8IG51bGwge1xyXG4gICAgICAgIGxldCBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2UpIGFzIGFueTtcclxuXHJcbiAgICAgICAgaWYgKHN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgc3RvcmFnZSA9IEpTT04ucGFyc2Uoc3RvcmFnZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZS5oYXNPd25Qcm9wZXJ0eSgnc291cmNlJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnNvdXJjZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHZXRSb290KCk6IElBcHBTb3VyY2UgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBicmVhZGNydW1icyA9IEJyZWFkY3J1bWJzLkdldCgpO1xyXG4gICAgICAgIHJldHVybiAoYnJlYWRjcnVtYnMubGVuZ3RoID4gMCkgPyBicmVhZGNydW1icy5zaGlmdCgpISA6IG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBTZXRQYWdlUmVzcG9uc2U8VD4ocGFnZVJlc3BvbnNlOiBUKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZSkgYXMgYW55O1xyXG4gICAgICAgIHN0b3JhZ2UgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xyXG4gICAgICAgIHN0b3JhZ2UgPSBPYmplY3QuYXNzaWduKHt9LCBzdG9yYWdlLCB7IHBhZ2VSZXNwb25zZSB9KTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZSwgSlNPTi5zdHJpbmdpZnkoc3RvcmFnZSkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0UGFnZVJlc3BvbnNlPFQ+KCk6IFQgfCBudWxsIHtcclxuICAgICAgICBsZXQgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlKSBhcyBhbnk7XHJcblxyXG4gICAgICAgIGlmIChzdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHN0b3JhZ2UgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2UuaGFzT3duUHJvcGVydHkoJ3BhZ2VSZXNwb25zZScpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbHMuQnJlYWtSZWZlcmVuY2Uoc3RvcmFnZS5wYWdlUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIENsZWFyUGFnZVJlc3BvbnNlKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2UpIGFzIGFueTtcclxuICAgICAgICBzdG9yYWdlID0gSlNPTi5wYXJzZShzdG9yYWdlKTtcclxuXHJcbiAgICAgICAgaWYgKHN0b3JhZ2UuaGFzT3duUHJvcGVydHkoJ3BhZ2VSZXNwb25zZScpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBzdG9yYWdlLnBhZ2VSZXNwb25zZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0b3JhZ2UgPSBPYmplY3QuYXNzaWduKHt9LCBzdG9yYWdlKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZSwgSlNPTi5zdHJpbmdpZnkoc3RvcmFnZSkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgUmVzZXQoKTogdm9pZCB7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2UpO1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,220 @@
1
+ import { signal } from "@angular/core";
2
+ const reference_signal = signal({});
3
+ export const Tools = {
4
+ /** Generate a Guid */
5
+ GetGuid: (seed = 'coer-system') => {
6
+ let time = new Date().getTime();
7
+ seed = seed.toString().trim();
8
+ return seed + `-xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g, (c) => {
9
+ const random = (time + Math.random() * 16) % 16 | 0;
10
+ time = Math.floor(time / 16);
11
+ return (c == 'x' ? random : (random & 0x3 | 0x8)).toString(16);
12
+ });
13
+ },
14
+ /** Returns true if the value is null or undefined, false otherwise */
15
+ IsNull: (value) => {
16
+ if (value === undefined)
17
+ return true;
18
+ if (value === null)
19
+ return true;
20
+ return false;
21
+ },
22
+ /** Returns true if the value is not null or undefined, false otherwise */
23
+ IsNotNull: (value) => {
24
+ if (value === undefined)
25
+ return false;
26
+ if (value === null)
27
+ return false;
28
+ return true;
29
+ },
30
+ /** Returns true if the value is null or undefined or contains only whitespace, false otherwise */
31
+ IsOnlyWhiteSpace: (value) => {
32
+ if (value === undefined)
33
+ return true;
34
+ if (value === null)
35
+ return true;
36
+ if (typeof value === 'string' && value.trim() === '')
37
+ return true;
38
+ return false;
39
+ },
40
+ /** Returns true if has string value and is not only whitespace, false otherwise */
41
+ IsNotOnlyWhiteSpace: (value) => {
42
+ if (value === undefined)
43
+ return false;
44
+ if (value === null)
45
+ return false;
46
+ if (typeof value === 'string' && value.trim() === '')
47
+ return false;
48
+ return true;
49
+ },
50
+ /** Break reference of a object or array */
51
+ BreakReference: (object) => {
52
+ if (object === null)
53
+ return object;
54
+ if (typeof object === 'undefined')
55
+ return object;
56
+ if (typeof object === 'string')
57
+ return object;
58
+ if (typeof object === 'number')
59
+ return object;
60
+ if (typeof object === 'boolean')
61
+ return object;
62
+ const OBJECT = JSON.parse(JSON.stringify(object));
63
+ return (Array.isArray(OBJECT)) ? [...OBJECT] : { ...OBJECT };
64
+ },
65
+ /** Clean extra whitespaces */
66
+ CleanUpBlanks: (text) => {
67
+ if (Tools.IsNull(text))
68
+ return '';
69
+ let worlds = String(text).split(' ');
70
+ worlds = worlds.filter(x => x.length > 0);
71
+ return worlds.join(' ');
72
+ },
73
+ /** Get properties of an object */
74
+ GetObjectProperties: (obj) => {
75
+ const properties = [];
76
+ if (obj === null)
77
+ return properties;
78
+ if (typeof obj === 'undefined')
79
+ return properties;
80
+ if (typeof obj === 'string')
81
+ return properties;
82
+ if (typeof obj === 'number')
83
+ return properties;
84
+ if (typeof obj === 'boolean')
85
+ return properties;
86
+ for (const property in obj)
87
+ properties.push(String(property));
88
+ return properties;
89
+ },
90
+ /**
91
+ * Set an index and merge more arrays of the same type
92
+ * */
93
+ SetIndex: (array, ...args) => {
94
+ let index = 0;
95
+ for (const arg of args) {
96
+ array = Tools.BreakReference(array).concat(Tools.BreakReference(arg));
97
+ }
98
+ return Tools.BreakReference(array).map(item => Object.assign({ index: index++ }, item));
99
+ },
100
+ /** Set First Char To Lower */
101
+ FirstCharToLower: (text) => {
102
+ if (Tools.IsOnlyWhiteSpace(text))
103
+ return '';
104
+ const textArray = [];
105
+ for (let i = 0; i < text.length; i++) {
106
+ if (i === 0)
107
+ textArray.push(text[i].toLowerCase());
108
+ else
109
+ textArray.push(text[i]);
110
+ }
111
+ return textArray.join('');
112
+ },
113
+ /** Set First Char To Upper */
114
+ FirstCharToUpper: (text) => {
115
+ if (Tools.IsOnlyWhiteSpace(text))
116
+ return '';
117
+ const textArray = [];
118
+ for (let i = 0; i < text.length; i++) {
119
+ if (i === 0)
120
+ textArray.push(text[i].toUpperCase());
121
+ else
122
+ textArray.push(text[i]);
123
+ }
124
+ return textArray.join('');
125
+ },
126
+ /** Sort an array in ascending order by property */
127
+ SortBy: (array, property, propertyType = 'string') => {
128
+ switch (propertyType) {
129
+ case 'string': {
130
+ return array.sort((x, y) => {
131
+ if (String(x[property]).toUpperCase().trim() < String(y[property]).toUpperCase().trim())
132
+ return -1;
133
+ else if (String(x[property]).toUpperCase().trim() > String(y[property]).toUpperCase().trim())
134
+ return 1;
135
+ else
136
+ return 0;
137
+ });
138
+ }
139
+ case 'number': {
140
+ return array.sort((x, y) => Number(x[property] - Number(y[property])));
141
+ }
142
+ }
143
+ },
144
+ /** Sort an array in descending order by property */
145
+ SortByDesc: (array, property, propertyType = 'string') => {
146
+ switch (propertyType) {
147
+ case 'string': {
148
+ return array.sort((x, y) => {
149
+ if (String(x[property]).toUpperCase().trim() < String(y[property]).toUpperCase().trim())
150
+ return 1;
151
+ else if (String(x[property]).toUpperCase().trim() > String(y[property]).toUpperCase().trim())
152
+ return -1;
153
+ else
154
+ return 0;
155
+ });
156
+ }
157
+ case 'number': {
158
+ return array.sort((x, y) => Number(Number(y[property])) - x[property]);
159
+ }
160
+ }
161
+ },
162
+ /** Return a string with forman numeric */
163
+ GetNumericFormat: (value, decimals = 0) => {
164
+ if (Tools.IsOnlyWhiteSpace(value) || isNaN(Number(value))) {
165
+ return '0';
166
+ }
167
+ let valueInteger = '';
168
+ let valueDecimal = '';
169
+ value = value.toString().replaceAll(' ', '');
170
+ if (value.includes('.') || (decimals > 0)) {
171
+ valueInteger = value.includes('.') ? value.split('.')[0] : value;
172
+ if (decimals > 0) {
173
+ const PADDING = decimals - valueDecimal.length;
174
+ valueDecimal = value.includes('.') ? value.split('.')[1] : '';
175
+ for (let i = 0; i < PADDING; i++)
176
+ valueDecimal += '0';
177
+ valueDecimal = valueDecimal.substring(0, decimals);
178
+ valueDecimal = `.${valueDecimal}`;
179
+ }
180
+ }
181
+ else {
182
+ valueInteger = value;
183
+ }
184
+ let counter = 0;
185
+ const VALUE_INTEGER_ARRAY = [];
186
+ for (const char of valueInteger.split('').reverse()) {
187
+ if (counter == 3) {
188
+ VALUE_INTEGER_ARRAY.push(',');
189
+ counter = 0;
190
+ }
191
+ VALUE_INTEGER_ARRAY.push(char);
192
+ ++counter;
193
+ }
194
+ valueInteger = VALUE_INTEGER_ARRAY.reverse().join('');
195
+ return `${valueInteger}${valueDecimal}`;
196
+ },
197
+ /** Wait the time indicated */
198
+ Sleep: (milliseconds = 0, reference = null) => {
199
+ if (Tools.IsNull(reference)) {
200
+ return new Promise(Resolve => setTimeout(Resolve, milliseconds));
201
+ }
202
+ else
203
+ return new Promise(Resolve => {
204
+ reference = reference.replaceAll(' ', '_').toLowerCase();
205
+ if (reference_signal().hasOwnProperty(reference)) {
206
+ clearInterval(reference_signal()[reference]);
207
+ }
208
+ reference_signal.set(Object.assign(reference_signal(), {
209
+ [reference]: setTimeout(() => {
210
+ Resolve();
211
+ clearInterval(reference_signal()[reference]);
212
+ const _reference = { ...reference_signal() };
213
+ delete _reference[reference];
214
+ reference_signal.set({ ..._reference });
215
+ }, milliseconds)
216
+ }));
217
+ });
218
+ }
219
+ };
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL3NyYy90b29scy9saWIvdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBTSxFQUFFLENBQUMsQ0FBQztBQUV6QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUc7SUFDakIsc0JBQXNCO0lBQ3RCLE9BQU8sRUFBRSxDQUFDLE9BQWUsYUFBYSxFQUFFLEVBQUU7UUFDdEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzdCLE9BQU8sSUFBSSxHQUFHLHVDQUF1QyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN6RSxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNuRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFDNUIsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2xFLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUdELHNFQUFzRTtJQUN0RSxNQUFNLEVBQUUsQ0FBSSxLQUEyQixFQUFXLEVBQUU7UUFDaEQsSUFBSSxLQUFLLEtBQUssU0FB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QVUsQ0FBQyxDQUFDO3dCQUM5QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUM7b0JBQzVDLENBQUMsRUFBRSxZQUFZLENBQUM7aUJBQ25CLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmNvbnN0IHJlZmVyZW5jZV9zaWduYWwgPSBzaWduYWw8YW55Pih7fSk7XHJcblxyXG5leHBvcnQgY29uc3QgVG9vbHMgPSB7XHJcbiAgICAvKiogR2VuZXJhdGUgYSBHdWlkICovXHJcbiAgICBHZXRHdWlkOiAoc2VlZDogc3RyaW5nID0gJ2NvZXItc3lzdGVtJykgPT4ge1xyXG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgc2VlZCA9IHNlZWQudG9TdHJpbmcoKS50cmltKClcclxuICAgICAgICByZXR1cm4gc2VlZCArIGAteHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmRvbSA9ICh0aW1lICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2IHwgMFxyXG4gICAgICAgICAgICB0aW1lID0gTWF0aC5mbG9vcih0aW1lIC8gMTYpXHJcbiAgICAgICAgICAgIHJldHVybiAoYyA9PSAneCcgPyByYW5kb20gOiAocmFuZG9tICYgMHgzIHwgMHg4KSkudG9TdHJpbmcoMTYpXHJcbiAgICAgICAgfSlcclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCBmYWxzZSBvdGhlcndpc2UgKi9cclxuICAgIElzTnVsbDogPFQ+KHZhbHVlOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZCwgZmFsc2Ugb3RoZXJ3aXNlICovXHJcbiAgICBJc05vdE51bGw6IDxUPih2YWx1ZTogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuID0+IHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLCBmYWxzZSBvdGhlcndpc2UgKi9cclxuICAgIElzT25seVdoaXRlU3BhY2U6IDxUPih2YWx1ZTogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuID0+IHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgPT09ICcnKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKiogUmV0dXJucyB0cnVlIGlmIGhhcyBzdHJpbmcgdmFsdWUgYW5kIGlzIG5vdCBvbmx5IHdoaXRlc3BhY2UsIGZhbHNlIG90aGVyd2lzZSAqL1xyXG4gICAgSXNOb3RPbmx5V2hpdGVTcGFjZTogPFQ+KHZhbHVlOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSAnJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqIEJyZWFrIHJlZmVyZW5jZSBvZiBhIG9iamVjdCBvciBhcnJheSAqL1xyXG4gICAgQnJlYWtSZWZlcmVuY2U6IDxUPihvYmplY3Q6IFQpOiBUID0+IHtcclxuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSByZXR1cm4gb2JqZWN0O1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG9iamVjdDtcclxuICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHJldHVybiBvYmplY3Q7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdudW1iZXInKSByZXR1cm4gb2JqZWN0O1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnYm9vbGVhbicpIHJldHVybiBvYmplY3Q7XHJcbiAgICAgICAgY29uc3QgT0JKRUNUID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmplY3QpKVxyXG4gICAgICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShPQkpFQ1QpKSA/IFsuLi5PQkpFQ1RdIDogeyAuLi5PQkpFQ1QgfVxyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqIENsZWFuIGV4dHJhIHdoaXRlc3BhY2VzICovXHJcbiAgICBDbGVhblVwQmxhbmtzOiAodGV4dDogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgICAgICBpZihUb29scy5Jc051bGwodGV4dCkpIHJldHVybiAnJztcclxuICAgICAgICBsZXQgd29ybGRzOiBzdHJpbmdbXSA9IFN0cmluZyh0ZXh0KS5zcGxpdCgnICcpO1xyXG4gICAgICAgIHdvcmxkcyA9IHdvcmxkcy5maWx0ZXIoeCA9PiB4Lmxlbmd0aCA+IDApO1xyXG4gICAgICAgIHJldHVybiB3b3JsZHMuam9pbignICcpO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqIEdldCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCAqL1xyXG4gICAgR2V0T2JqZWN0UHJvcGVydGllczogPFQ+KG9iajogVCB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gcHJvcGVydGllcztcclxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdudW1iZXInKSByZXR1cm4gcHJvcGVydGllcztcclxuICAgICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gcHJvcGVydGllcztcclxuICAgICAgICBmb3IoY29uc3QgcHJvcGVydHkgaW4gb2JqKSBwcm9wZXJ0aWVzLnB1c2goU3RyaW5nKHByb3BlcnR5KSk7XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhbiBpbmRleCBhbmQgbWVyZ2UgbW9yZSBhcnJheXMgb2YgdGhlIHNhbWUgdHlwZVxyXG4gICAgICogKi9cclxuICAgIFNldEluZGV4OiA8VD4oYXJyYXk6IFRbXSwgLi4uYXJnczogVFtdW10pOiBUW10gPT4ge1xyXG4gICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncykge1xyXG4gICAgICAgICAgICBhcnJheSA9IFRvb2xzLkJyZWFrUmVmZXJlbmNlKGFycmF5KS5jb25jYXQoVG9vbHMuQnJlYWtSZWZlcmVuY2UoYXJnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gVG9vbHMuQnJlYWtSZWZlcmVuY2UoYXJyYXkpLm1hcChpdGVtID0+IE9iamVjdC5hc3NpZ24oeyBpbmRleDogaW5kZXgrKyB9LCBpdGVtKSk7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKiogU2V0IEZpcnN0IENoYXIgVG8gTG93ZXIgKi9cclxuICAgIEZpcnN0Q2hhclRvTG93ZXI6ICh0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcclxuICAgICAgICBpZiAoVG9vbHMuSXNPbmx5V2hpdGVTcGFjZSh0ZXh0KSkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBjb25zdCB0ZXh0QXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRleHQhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmKGkgPT09IDApIHRleHRBcnJheS5wdXNoKHRleHQhW2ldLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBlbHNlIHRleHRBcnJheS5wdXNoKHRleHQhW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0QXJyYXkuam9pbignJyk7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKiogU2V0IEZpcnN0IENoYXIgVG8gVXBwZXIgKi9cclxuICAgIEZpcnN0Q2hhclRvVXBwZXI6ICh0ZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcclxuICAgICAgICBpZiAoVG9vbHMuSXNPbmx5V2hpdGVTcGFjZSh0ZXh0KSkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICBjb25zdCB0ZXh0QXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRleHQhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmKGkgPT09IDApIHRleHRBcnJheS5wdXNoKHRleHQhW2ldLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBlbHNlIHRleHRBcnJheS5wdXNoKHRleHQhW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0QXJyYXkuam9pbignJyk7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKiogU29ydCBhbiBhcnJheSBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgcHJvcGVydHkgKi9cclxuICAgIFNvcnRCeTogPFQ+KGFycmF5OiBUW10sIHByb3BlcnR5OiBzdHJpbmcsIHByb3BlcnR5VHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyA9ICdzdHJpbmcnKTogVFtdID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkuc29ydCgoeDogYW55LCB5OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nKHhbcHJvcGVydHldKS50b1VwcGVyQ2FzZSgpLnRyaW0oKSA8IFN0cmluZyh5W3Byb3BlcnR5XSkudG9VcHBlckNhc2UoKS50cmltKCkpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChTdHJpbmcoeFtwcm9wZXJ0eV0pLnRvVXBwZXJDYXNlKCkudHJpbSgpID4gU3RyaW5nKHlbcHJvcGVydHldKS50b1VwcGVyQ2FzZSgpLnRyaW0oKSkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjYXNlICdudW1iZXInOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkuc29ydCgoeDogYW55LCB5OiBhbnkpID0+IE51bWJlcih4W3Byb3BlcnR5XSAtIE51bWJlcih5W3Byb3BlcnR5XSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKiBTb3J0IGFuIGFycmF5IGluIGRlc2NlbmRpbmcgb3JkZXIgYnkgcHJvcGVydHkgKi9cclxuICAgIFNvcnRCeURlc2M6IDxUPihhcnJheTogVFtdLCBwcm9wZXJ0eTogc3RyaW5nLCBwcm9wZXJ0eVR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgPSAnc3RyaW5nJyk6IFRbXSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LnNvcnQoKHg6IGFueSwgeTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZyh4W3Byb3BlcnR5XSkudG9VcHBlckNhc2UoKS50cmltKCkgPCBTdHJpbmcoeVtwcm9wZXJ0eV0pLnRvVXBwZXJDYXNlKCkudHJpbSgpKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChTdHJpbmcoeFtwcm9wZXJ0eV0pLnRvVXBwZXJDYXNlKCkudHJpbSgpID4gU3RyaW5nKHlbcHJvcGVydHldKS50b1VwcGVyQ2FzZSgpLnRyaW0oKSkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LnNvcnQoKHg6IGFueSwgeTogYW55KSA9PiBOdW1iZXIoTnVtYmVyKHlbcHJvcGVydHldKSkgLSB4W3Byb3BlcnR5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKiogUmV0dXJuIGEgc3RyaW5nIHdpdGggZm9ybWFuIG51bWVyaWMgKi9cclxuICAgIEdldE51bWVyaWNGb3JtYXQ6ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgZGVjaW1hbHM6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGlmIChUb29scy5Jc09ubHlXaGl0ZVNwYWNlKHZhbHVlKSB8fCBpc05hTihOdW1iZXIodmFsdWUpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZhbHVlSW50ZWdlciA9ICcnO1xyXG4gICAgICAgIGxldCB2YWx1ZURlY2ltYWwgPSAnJztcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlIS50b1N0cmluZygpLnJlcGxhY2VBbGwoJyAnLCAnJyk7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnLicpIHx8IChkZWNpbWFscyA+IDApKSB7XHJcbiAgICAgICAgICAgIHZhbHVlSW50ZWdlciA9IHZhbHVlLmluY2x1ZGVzKCcuJykgPyB2YWx1ZS5zcGxpdCgnLicpWzBdIDogdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBQQURESU5HID0gZGVjaW1hbHMgLSB2YWx1ZURlY2ltYWwubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdmFsdWVEZWNpbWFsID0gdmFsdWUuaW5jbHVkZXMoJy4nKSA/IHZhbHVlLnNwbGl0KCcuJylbMV0gOiAnJztcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBQQURESU5HOyBpKyspIHZhbHVlRGVjaW1hbCArPSAnMCc7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZURlY2ltYWwgPSB2YWx1ZURlY2ltYWwuc3Vic3RyaW5nKDAsIGRlY2ltYWxzKTtcclxuICAgICAgICAgICAgICAgIHZhbHVlRGVjaW1hbCA9IGAuJHt2YWx1ZURlY2ltYWx9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVlSW50ZWdlciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgICAgIGNvbnN0IFZBTFVFX0lOVEVHRVJfQVJSQVk6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yKGNvbnN0IGNoYXIgb2YgdmFsdWVJbnRlZ2VyLnNwbGl0KCcnKS5yZXZlcnNlKCkpIHtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMykge1xyXG4gICAgICAgICAgICAgICAgVkFMVUVfSU5URUdFUl9BUlJBWS5wdXNoKCcsJyk7XHJcbiAgICAgICAgICAgICAgICBjb3VudGVyID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgVkFMVUVfSU5URUdFUl9BUlJBWS5wdXNoKGNoYXIpO1xyXG4gICAgICAgICAgICArK2NvdW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YWx1ZUludGVnZXIgPSBWQUxVRV9JTlRFR0VSX0FSUkFZLnJldmVyc2UoKS5qb2luKCcnKTtcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWVJbnRlZ2VyfSR7dmFsdWVEZWNpbWFsfWA7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvKiogV2FpdCB0aGUgdGltZSBpbmRpY2F0ZWQgKi9cclxuICAgIFNsZWVwOiAobWlsbGlzZWNvbmRzOiBudW1iZXIgPSAwLCByZWZlcmVuY2U6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XHJcbiAgICAgICAgaWYgKFRvb2xzLklzTnVsbChyZWZlcmVuY2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShSZXNvbHZlID0+IHNldFRpbWVvdXQoUmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihSZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlIS5yZXBsYWNlQWxsKCcgJywgJ18nKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV9zaWduYWwoKS5oYXNPd25Qcm9wZXJ0eShyZWZlcmVuY2UpKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHJlZmVyZW5jZV9zaWduYWwoKVtyZWZlcmVuY2UhXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZV9zaWduYWwuc2V0KE9iamVjdC5hc3NpZ24ocmVmZXJlbmNlX3NpZ25hbCgpLCB7XHJcbiAgICAgICAgICAgICAgICBbcmVmZXJlbmNlIV06IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHJlZmVyZW5jZV9zaWduYWwoKVtyZWZlcmVuY2UhXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX3JlZmVyZW5jZSA9IHsgLi4ucmVmZXJlbmNlX3NpZ25hbCgpIH07XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIF9yZWZlcmVuY2VbcmVmZXJlbmNlIV07XHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlX3NpZ25hbC5zZXQoeyAuLi5fcmVmZXJlbmNlIH0pO1xyXG4gICAgICAgICAgICAgICAgfSwgbWlsbGlzZWNvbmRzKVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07Il19