chrv-components 1.0.0 → 1.0.2

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 (93) hide show
  1. package/chr-theme.scss +97 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +7 -23
  4. package/src/lib/chr-breadcrumb/chr-breadcrumb.component.html +9 -0
  5. package/src/lib/chr-breadcrumb/chr-breadcrumb.component.scss +0 -0
  6. package/src/lib/chr-breadcrumb/chr-breadcrumb.component.spec.ts +22 -0
  7. package/src/lib/chr-breadcrumb/chr-breadcrumb.component.ts +23 -0
  8. package/src/lib/chr-button/chr-button.component.html +20 -0
  9. package/src/lib/chr-button/chr-button.component.scss +0 -0
  10. package/src/lib/chr-button/chr-button.component.spec.ts +23 -0
  11. package/src/lib/chr-button/chr-button.component.ts +36 -0
  12. package/src/lib/chr-checkbox/chr-checkbox.component.html +4 -0
  13. package/src/lib/chr-checkbox/chr-checkbox.component.scss +15 -0
  14. package/src/lib/chr-checkbox/chr-checkbox.component.spec.ts +23 -0
  15. package/src/lib/chr-checkbox/chr-checkbox.component.ts +30 -0
  16. package/src/lib/chr-components.module.ts +69 -0
  17. package/src/lib/chr-delete-modal/chr-delete-modal.component.html +26 -0
  18. package/src/lib/chr-delete-modal/chr-delete-modal.component.scss +0 -0
  19. package/src/lib/chr-delete-modal/chr-delete-modal.component.spec.ts +23 -0
  20. package/src/lib/chr-delete-modal/chr-delete-modal.component.ts +19 -0
  21. package/src/lib/chr-form/chr-form.component.html +98 -0
  22. package/src/lib/chr-form/chr-form.component.scss +37 -0
  23. package/src/lib/chr-form/chr-form.component.spec.ts +23 -0
  24. package/src/lib/chr-form/chr-form.component.ts +173 -0
  25. package/src/lib/chr-form/chr-validators/decimal-validator.ts +54 -0
  26. package/src/lib/chr-form/chr-validators/max-date-validator.ts +48 -0
  27. package/src/lib/chr-form/chr-validators/type-validator.ts +47 -0
  28. package/src/lib/chr-search-select/chr-search-select.component.html +19 -0
  29. package/src/lib/chr-search-select/chr-search-select.component.scss +3 -0
  30. package/src/lib/chr-search-select/chr-search-select.component.spec.ts +23 -0
  31. package/src/lib/chr-search-select/chr-search-select.component.ts +164 -0
  32. package/src/lib/chr-searchbar/chr-searchbar.component.html +10 -0
  33. package/src/lib/chr-searchbar/chr-searchbar.component.scss +0 -0
  34. package/src/lib/chr-searchbar/chr-searchbar.component.spec.ts +23 -0
  35. package/src/lib/chr-searchbar/chr-searchbar.component.ts +23 -0
  36. package/src/lib/chr-separator/chr-separator.component.html +3 -0
  37. package/src/lib/chr-separator/chr-separator.component.scss +24 -0
  38. package/src/lib/chr-separator/chr-separator.component.spec.ts +23 -0
  39. package/src/lib/chr-separator/chr-separator.component.ts +10 -0
  40. package/src/lib/chr-table/chr-table.component.html +88 -0
  41. package/src/lib/chr-table/chr-table.component.scss +53 -0
  42. package/src/lib/chr-table/chr-table.component.spec.ts +23 -0
  43. package/src/lib/chr-table/chr-table.component.ts +72 -0
  44. package/src/lib/chr-table-header-cell/chr-table-header-cell.component.html +9 -0
  45. package/src/lib/chr-table-header-cell/chr-table-header-cell.component.scss +31 -0
  46. package/src/lib/chr-table-header-cell/chr-table-header-cell.component.spec.ts +23 -0
  47. package/src/lib/chr-table-header-cell/chr-table-header-cell.component.ts +39 -0
  48. package/src/lib/services/dialog.service.ts +23 -0
  49. package/{public-api.d.ts → src/public-api.ts} +21 -15
  50. package/styles.scss +93 -0
  51. package/tailwind.config.js +30 -0
  52. package/theme.scss +59 -0
  53. package/tsconfig.lib.json +14 -0
  54. package/tsconfig.lib.prod.json +10 -0
  55. package/tsconfig.spec.json +14 -0
  56. package/chrv-components-1.0.0.tgz +0 -0
  57. package/esm2020/chrv-components.mjs +0 -5
  58. package/esm2020/lib/chr-breadcrumb/chr-breadcrumb.component.mjs +0 -22
  59. package/esm2020/lib/chr-button/chr-button.component.mjs +0 -46
  60. package/esm2020/lib/chr-checkbox/chr-checkbox.component.mjs +0 -37
  61. package/esm2020/lib/chr-components.module.mjs +0 -117
  62. package/esm2020/lib/chr-delete-modal/chr-delete-modal.component.mjs +0 -22
  63. package/esm2020/lib/chr-form/chr-form.component.mjs +0 -132
  64. package/esm2020/lib/chr-form/chr-validators/decimal-validator.mjs +0 -58
  65. package/esm2020/lib/chr-form/chr-validators/max-date-validator.mjs +0 -54
  66. package/esm2020/lib/chr-form/chr-validators/type-validator.mjs +0 -52
  67. package/esm2020/lib/chr-search-select/chr-search-select.component.mjs +0 -136
  68. package/esm2020/lib/chr-searchbar/chr-searchbar.component.mjs +0 -29
  69. package/esm2020/lib/chr-separator/chr-separator.component.mjs +0 -11
  70. package/esm2020/lib/chr-table/chr-table.component.mjs +0 -58
  71. package/esm2020/lib/chr-table-header-cell/chr-table-header-cell.component.mjs +0 -49
  72. package/esm2020/lib/services/dialog.service.mjs +0 -29
  73. package/esm2020/public-api.mjs +0 -19
  74. package/fesm2015/chrv-components.mjs +0 -799
  75. package/fesm2015/chrv-components.mjs.map +0 -1
  76. package/fesm2020/chrv-components.mjs +0 -793
  77. package/fesm2020/chrv-components.mjs.map +0 -1
  78. package/index.d.ts +0 -5
  79. package/lib/chr-breadcrumb/chr-breadcrumb.component.d.ts +0 -15
  80. package/lib/chr-button/chr-button.component.d.ts +0 -17
  81. package/lib/chr-checkbox/chr-checkbox.component.d.ts +0 -13
  82. package/lib/chr-components.module.d.ts +0 -28
  83. package/lib/chr-delete-modal/chr-delete-modal.component.d.ts +0 -11
  84. package/lib/chr-form/chr-form.component.d.ts +0 -57
  85. package/lib/chr-form/chr-validators/decimal-validator.d.ts +0 -10
  86. package/lib/chr-form/chr-validators/max-date-validator.d.ts +0 -10
  87. package/lib/chr-form/chr-validators/type-validator.d.ts +0 -10
  88. package/lib/chr-search-select/chr-search-select.component.d.ts +0 -44
  89. package/lib/chr-searchbar/chr-searchbar.component.d.ts +0 -14
  90. package/lib/chr-separator/chr-separator.component.d.ts +0 -5
  91. package/lib/chr-table/chr-table.component.d.ts +0 -38
  92. package/lib/chr-table-header-cell/chr-table-header-cell.component.d.ts +0 -16
  93. package/lib/services/dialog.service.d.ts +0 -10
@@ -1,22 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/router";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "@angular/material/button";
6
- export class BreadcrumbComponent {
7
- constructor(router) {
8
- this.router = router;
9
- this.navigateTo = (uri, data) => {
10
- this.router.navigate([uri], { state: data });
11
- };
12
- }
13
- }
14
- BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
15
- BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BreadcrumbComponent, selector: "app-chr-breadcrumb", inputs: { crumbs: "crumbs" }, ngImport: i0, template: "<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\n <div *ngFor=\"let crumb of crumbs\" class=\"w-fit min-w-fit\">\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\n {{ crumb.display }}\n </button>\n {{ (crumb.link || crumb.callback) && \">\" }}\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BreadcrumbComponent, decorators: [{
17
- type: Component,
18
- args: [{ selector: 'app-chr-breadcrumb', template: "<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\n <div *ngFor=\"let crumb of crumbs\" class=\"w-fit min-w-fit\">\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\n {{ crumb.display }}\n </button>\n {{ (crumb.link || crumb.callback) && \">\" }}\n </div>\n</div>" }]
19
- }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { crumbs: [{
20
- type: Input
21
- }] } });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWJyZWFkY3J1bWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWJyZWFkY3J1bWIvY2hyLWJyZWFkY3J1bWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWJyZWFkY3J1bWIvY2hyLWJyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBY2pELE1BQU0sT0FBTyxtQkFBbUI7SUFHOUIsWUFBbUIsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFakMsZUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLElBQVUsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7SUFKa0MsQ0FBQzs7aUhBSDFCLG1CQUFtQjtxR0FBbkIsbUJBQW1CLHdGQ2RoQyx3YUFRTTs0RkRNTyxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0Usb0JBQW9COzZGQUtyQixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWIge1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIGNhbGxiYWNrPzogRnVuY3Rpb247XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jaHItYnJlYWRjcnVtYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaHItYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Noci1icmVhZGNydW1iLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJDb21wb25lbnQge1xuICBASW5wdXQoKSBjcnVtYnM6IEJyZWFkY3J1bWJbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgbmF2aWdhdGVUbyA9ICh1cmk6IHN0cmluZywgZGF0YT86IGFueSkgPT4ge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmldLCB7IHN0YXRlOiBkYXRhIH0pO1xuICB9O1xufVxuIiwiPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBkYXJrOiF0ZXh0LWdyYXktNDAwXCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGNydW1iIG9mIGNydW1ic1wiIGNsYXNzPVwidy1maXQgbWluLXctZml0XCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImRhcms6IXRleHQtZ3JheS00MDBcIiBbZGlzYWJsZWRdPVwiIWNydW1iLmxpbmsgJiYgIWNydW1iLmNhbGxiYWNrXCIgbWF0LWJ1dHRvblxuICAgICAgKGNsaWNrKT1cImNydW1iLmNhbGxiYWNrPy4oKSB8fCBjcnVtYi5saW5rICYmIG5hdmlnYXRlVG8oY3J1bWIubGluaylcIj5cbiAgICAgIHt7IGNydW1iLmRpc3BsYXkgfX1cbiAgICA8L2J1dHRvbj5cbiAgICB7eyAoY3J1bWIubGluayB8fCBjcnVtYi5jYWxsYmFjaykgJiYgXCI+XCIgfX1cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -1,46 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/material/icon";
5
- import * as i3 from "@angular/material/button";
6
- export class ChrButtonComponent {
7
- constructor() {
8
- this.display = '';
9
- this.icon = '';
10
- this.color = 'none';
11
- this.predicate = true;
12
- this.type = 'none';
13
- this.disabled = false;
14
- this.setDisabled = (is) => {
15
- this.disabled = is;
16
- };
17
- this.doClick = () => {
18
- this.click?.();
19
- };
20
- }
21
- }
22
- ChrButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChrButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
- ChrButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ChrButtonComponent, selector: "app-chr-button", inputs: { display: "display", icon: "icon", click: "click", color: "color", predicate: "predicate", type: "type", href: "href", target: "target", disabled: "disabled" }, ngImport: i0, template: "<div class=\"grid\">\n <a\n mat-button\n mat-flat-button\n *ngIf=\"predicate\"\n [disabled]=\"disabled\"\n [ngClass]=\"\n type == 'full'\n ? 'grid grid-cols-1 flex-1 self-end content-end items-center justify-center !w-full'\n : ' '\n \"\n [ngClass]=\"type == 'table' ? 'h-14 grid grid-cols-1' : ''\"\n [ngClass]=\"type == 'fixed' ? 'h-14 grid grid-cols-1 w-36' : ''\"\n color=\"{{ color }}\"\n (click)=\"click?.()\"\n [attr.href]=\"href && href\"\n [attr.target]=\"target && target\"\n >\n {{ display }}\n <mat-icon *ngIf=\"icon\">{{ icon }}</mat-icon>\n </a>\n</div>\n<!--\n IF\n Click\n color\n type: table : full \n icon\n-->\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }] });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChrButtonComponent, decorators: [{
25
- type: Component,
26
- args: [{ selector: 'app-chr-button', template: "<div class=\"grid\">\n <a\n mat-button\n mat-flat-button\n *ngIf=\"predicate\"\n [disabled]=\"disabled\"\n [ngClass]=\"\n type == 'full'\n ? 'grid grid-cols-1 flex-1 self-end content-end items-center justify-center !w-full'\n : ' '\n \"\n [ngClass]=\"type == 'table' ? 'h-14 grid grid-cols-1' : ''\"\n [ngClass]=\"type == 'fixed' ? 'h-14 grid grid-cols-1 w-36' : ''\"\n color=\"{{ color }}\"\n (click)=\"click?.()\"\n [attr.href]=\"href && href\"\n [attr.target]=\"target && target\"\n >\n {{ display }}\n <mat-icon *ngIf=\"icon\">{{ icon }}</mat-icon>\n </a>\n</div>\n<!--\n IF\n Click\n color\n type: table : full \n icon\n-->\n" }]
27
- }], ctorParameters: function () { return []; }, propDecorators: { display: [{
28
- type: Input
29
- }], icon: [{
30
- type: Input
31
- }], click: [{
32
- type: Input
33
- }], color: [{
34
- type: Input
35
- }], predicate: [{
36
- type: Input
37
- }], type: [{
38
- type: Input
39
- }], href: [{
40
- type: Input
41
- }], target: [{
42
- type: Input
43
- }], disabled: [{
44
- type: Input
45
- }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaHJ2LWNvbXBvbmVudHMvc3JjL2xpYi9jaHItYnV0dG9uL2Noci1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWJ1dHRvbi9jaHItYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQU9qRCxNQUFNLE9BQU8sa0JBQWtCO0lBVzdCO1FBVlMsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLFVBQUssR0FBMkMsTUFBTSxDQUFDO1FBQ3ZELGNBQVMsR0FBYSxJQUFJLENBQUM7UUFDM0IsU0FBSSxHQUF3QyxNQUFNLENBQUM7UUFHbkQsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUluQyxnQkFBVyxHQUFHLENBQUMsRUFBVyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDO1FBRUYsWUFBTyxHQUFHLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQztJQVJhLENBQUM7O2dIQVhMLGtCQUFrQjtvR0FBbEIsa0JBQWtCLGdPQ1AvQix3c0JBNkJBOzRGRHRCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCOzBFQUtqQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hyLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaHItYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hyLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDaHJCdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSBkaXNwbGF5OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaWNvbjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNsaWNrPzogRnVuY3Rpb247XG4gIEBJbnB1dCgpIGNvbG9yOiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJyB8ICdub25lJyA9ICdub25lJztcbiAgQElucHV0KCkgcHJlZGljYXRlPzogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHR5cGU6ICd0YWJsZScgfCAnZnVsbCcgfCAnZml4ZWQnIHwgJ25vbmUnID0gJ25vbmUnO1xuICBASW5wdXQoKSBocmVmPzogc3RyaW5nO1xuICBASW5wdXQoKSB0YXJnZXQ6ICdfYmxhbmsnIHwgJ19wYXJlbnQnIHwgJ19zZWxmJyB8ICdfdG9wJztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc2V0RGlzYWJsZWQgPSAoaXM6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXM7XG4gIH07XG5cbiAgZG9DbGljayA9ICgpID0+IHtcbiAgICB0aGlzLmNsaWNrPy4oKTtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkXCI+XG4gIDxhXG4gICAgbWF0LWJ1dHRvblxuICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICpuZ0lmPVwicHJlZGljYXRlXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgdHlwZSA9PSAnZnVsbCdcbiAgICAgICAgPyAnZ3JpZCBncmlkLWNvbHMtMSBmbGV4LTEgc2VsZi1lbmQgY29udGVudC1lbmQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyICF3LWZ1bGwnXG4gICAgICAgIDogJyAnXG4gICAgXCJcbiAgICBbbmdDbGFzc109XCJ0eXBlID09ICd0YWJsZScgPyAnaC0xNCBncmlkIGdyaWQtY29scy0xJyA6ICcnXCJcbiAgICBbbmdDbGFzc109XCJ0eXBlID09ICdmaXhlZCcgPyAnaC0xNCBncmlkIGdyaWQtY29scy0xIHctMzYnIDogJydcIlxuICAgIGNvbG9yPVwie3sgY29sb3IgfX1cIlxuICAgIChjbGljayk9XCJjbGljaz8uKClcIlxuICAgIFthdHRyLmhyZWZdPVwiaHJlZiAmJiBocmVmXCJcbiAgICBbYXR0ci50YXJnZXRdPVwidGFyZ2V0ICYmIHRhcmdldFwiXG4gID5cbiAgICB7eyBkaXNwbGF5IH19XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiPnt7IGljb24gfX08L21hdC1pY29uPlxuICA8L2E+XG48L2Rpdj5cbjwhLS1cbiAgICBJRlxuICAgIENsaWNrXG4gICAgY29sb3JcbiAgICB0eXBlOiB0YWJsZSA6IGZ1bGwgIFxuICAgIGljb25cbi0tPlxuIl19