ontimize-web-ngx 15.0.4 → 15.1.1

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 (89) hide show
  1. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +3 -3
  2. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +15 -13
  3. package/esm2020/lib/components/bar-menu/menu-nested/o-bar-menu-nested.component.mjs +3 -3
  4. package/esm2020/lib/components/bar-menu/o-bar-menu.component.mjs +10 -1
  5. package/esm2020/lib/components/button/o-button.component.mjs +27 -11
  6. package/esm2020/lib/components/form/index.mjs +2 -1
  7. package/esm2020/lib/components/form/o-form-tokens.mjs +3 -0
  8. package/esm2020/lib/components/form/o-form.component.mjs +42 -15
  9. package/esm2020/lib/components/grid/o-grid.component.mjs +7 -3
  10. package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +4 -1
  11. package/esm2020/lib/components/input/combo/o-combo.component.mjs +10 -3
  12. package/esm2020/lib/components/input/date-input/o-date-input.component.mjs +5 -1
  13. package/esm2020/lib/components/input/radio/o-radio.component.mjs +7 -5
  14. package/esm2020/lib/components/list/o-list.component.mjs +8 -4
  15. package/esm2020/lib/components/list/renderers/o-list-item-text-renderer.class.mjs +13 -4
  16. package/esm2020/lib/components/o-service-base-component.class.mjs +11 -5
  17. package/esm2020/lib/components/o-service-component.class.mjs +64 -1
  18. package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +2 -2
  19. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +2 -4
  20. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +8 -7
  21. package/esm2020/lib/components/table/extensions/sort/o-mat-sort.mjs +2 -4
  22. package/esm2020/lib/components/table/o-table.component.mjs +30 -13
  23. package/esm2020/lib/components/tree/o-tree.component.mjs +7 -3
  24. package/esm2020/lib/interfaces/app-menu.interface.mjs +1 -1
  25. package/esm2020/lib/interfaces/service-data-component.interface.mjs +1 -1
  26. package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +1 -1
  27. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +17 -1
  28. package/esm2020/lib/services/app-menu.service.mjs +36 -2
  29. package/esm2020/lib/services/o-auth.service.mjs +7 -1
  30. package/esm2020/lib/services/permissions/permissions.service.mjs +40 -6
  31. package/esm2020/lib/types/form/index.mjs +2 -0
  32. package/esm2020/lib/types/form/o-form-global-config.type.mjs +2 -0
  33. package/esm2020/lib/types/index.mjs +3 -1
  34. package/esm2020/lib/types/o-component-permissions-by-route.type.mjs +2 -0
  35. package/esm2020/lib/types/o-form-permissions.type.mjs +1 -1
  36. package/esm2020/lib/types/o-global-config.type.mjs +3 -0
  37. package/esm2020/lib/types/o-grid-permissions.type.mjs +2 -0
  38. package/esm2020/lib/types/o-list-permissions.type.mjs +2 -0
  39. package/esm2020/lib/types/o-service-base-permissions.type.mjs +2 -0
  40. package/esm2020/lib/types/o-tree-permissions.type.mjs +2 -0
  41. package/esm2020/lib/types/table/o-table-global-config.type.mjs +1 -1
  42. package/esm2020/lib/types/table/o-table-permissions.type.mjs +1 -1
  43. package/esm2020/lib/util/codes.mjs +9 -1
  44. package/esm2020/lib/util/util.mjs +16 -1
  45. package/fesm2015/ontimize-web-ngx.mjs +1297 -1018
  46. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  47. package/fesm2020/ontimize-web-ngx.mjs +1296 -1018
  48. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  49. package/lib/components/app-sidenav/o-app-sidenav.component.d.ts +4 -4
  50. package/lib/components/bar-menu/o-bar-menu.component.d.ts +4 -0
  51. package/lib/components/button/o-button.component.d.ts +11 -2
  52. package/lib/components/form/index.d.ts +1 -0
  53. package/lib/components/form/o-form-tokens.d.ts +3 -0
  54. package/lib/components/form/o-form.component.d.ts +11 -4
  55. package/lib/components/grid/o-grid.component.d.ts +4 -0
  56. package/lib/components/input/combo/combo-search/o-combo-search.component.d.ts +1 -0
  57. package/lib/components/input/combo/o-combo.component.d.ts +2 -0
  58. package/lib/components/input/date-input/o-date-input.component.d.ts +1 -0
  59. package/lib/components/input/radio/o-radio.component.d.ts +2 -1
  60. package/lib/components/list/o-list.component.d.ts +4 -0
  61. package/lib/components/list/renderers/o-list-item-text-renderer.class.d.ts +4 -1
  62. package/lib/components/o-service-base-component.class.d.ts +2 -0
  63. package/lib/components/o-service-component.class.d.ts +11 -0
  64. package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -1
  65. package/lib/components/table/o-table.component.d.ts +3 -3
  66. package/lib/components/tree/o-tree.component.d.ts +4 -0
  67. package/lib/interfaces/app-menu.interface.d.ts +1 -0
  68. package/lib/interfaces/service-data-component.interface.d.ts +1 -0
  69. package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +1 -0
  70. package/lib/services/app-menu.service.d.ts +7 -1
  71. package/lib/services/o-auth.service.d.ts +1 -0
  72. package/lib/services/permissions/permissions.service.d.ts +14 -3
  73. package/lib/types/form/index.d.ts +1 -0
  74. package/lib/types/form/o-form-global-config.type.d.ts +3 -0
  75. package/lib/types/index.d.ts +2 -0
  76. package/lib/types/o-component-permissions-by-route.type.d.ts +5 -0
  77. package/lib/types/o-form-permissions.type.d.ts +2 -7
  78. package/lib/types/o-global-config.type.d.ts +5 -0
  79. package/lib/types/o-grid-permissions.type.d.ts +2 -0
  80. package/lib/types/o-list-permissions.type.d.ts +2 -0
  81. package/lib/types/o-service-base-permissions.type.d.ts +7 -0
  82. package/lib/types/o-tree-permissions.type.d.ts +2 -0
  83. package/lib/types/table/o-table-global-config.type.d.ts +5 -0
  84. package/lib/types/table/o-table-permissions.type.d.ts +2 -4
  85. package/lib/util/codes.d.ts +8 -1
  86. package/lib/util/util.d.ts +2 -0
  87. package/package.json +1 -1
  88. package/theme.scss +72 -71
  89. package/theming/ontimize-style.scss +1 -30
@@ -413,6 +413,21 @@ export class Util {
413
413
  cache = null;
414
414
  return str;
415
415
  }
416
+ static sortFunction(propertyA, propertyB, activeSortDirection) {
417
+ let valueA = '';
418
+ let valueB = '';
419
+ if (Util.isDefined(propertyA)) {
420
+ valueA = isNaN(+propertyA) ? propertyA.toString().trim().toLowerCase() : +propertyA;
421
+ }
422
+ if (Util.isDefined(propertyB)) {
423
+ valueB = isNaN(+propertyB) ? propertyB.toString().trim().toLowerCase() : +propertyB;
424
+ }
425
+ return (valueA <= valueB ? -1 : 1) * (activeSortDirection === 'asc' ? 1 : -1);
426
+ }
427
+ static cloneArray(arr) {
428
+ const clonedArray = arr.map((x) => Object.assign({}, x));
429
+ return clonedArray;
430
+ }
416
431
  }
417
432
  Util.columnAggregates = ['sum', 'count', 'avg', 'min', 'max'];
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8xRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHaEMsTUFBTSxPQUFPLElBQUk7SUFJZixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQVE7UUFDdEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7UUFDM0IsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDckIsT0FBTyxHQUFHLFlBQVksS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxZQUFzQjtRQUN2RCxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwRyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDM0csT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMs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QUMvQixPQUFPO2lCQUNSO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbkI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNiLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs7QUFsaEJlLHFCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kYXRhLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS1kYXRhLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGVybWlzc2lvbnMtc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0RhdGVWYWx1ZVR5cGUgfSBmcm9tICcuLi90eXBlcy9vLWRhdGUtdmFsdWUudHlwZSc7XG5pbXBvcnQgeyBPQ29uZmlndXJlU2VydmljZUFyZ3MgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmUtc2VydmljZS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgQmFzZTY0IH0gZnJvbSAnLi9iYXNlNjQnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuL2NvZGVzJztcbmltcG9ydCB7IE9Db25maWd1cmVNZXNzYWdlU2VydmljZUFyZ3MgfSBmcm9tICcuLi90eXBlcy9jb25maWd1cmUtbWVzc2FnZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBVdGlsIHtcblxuICBzdGF0aWMgcmVhZG9ubHkgY29sdW1uQWdncmVnYXRlcyA9IFsnc3VtJywgJ2NvdW50JywgJ2F2ZycsICdtaW4nLCAnbWF4J107XG5cbiAgc3RhdGljIGlzT2JqZWN0KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsVHlwZSA9IHR5cGVvZiB2YWw7XG4gICAgcmV0dXJuIHZhbFR5cGUgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgc3RhdGljIGlzQXJyYXkodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgQXJyYXk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VCb29sZWFuKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpICYmICh2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnVFJVRScgfHwgdmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ1lFUycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSAmJiAodmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ0ZBTFNFJyB8fCB2YWx1ZS50b1VwcGVyQ2FzZSgpID09PSAnTk8nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc0RlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQXJyYXkodmFsdWU6IHN0cmluZywgZXhjbHVkZVJlcGVhdGVkOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmVzdWx0ID0gdmFsdWUuc3BsaXQoQ29kZXMuQVJSQVlfSU5QVVRfU0VQQVJBVE9SKTtcbiAgICB9XG4gICAgaWYgKGV4Y2x1ZGVSZXBlYXRlZCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0ID0gQXJyYXkuZnJvbShuZXcgU2V0KHJlc3VsdCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggcGFyZW50IGtleXMgZXF1aXZhbGVuY2VzLlxuICAgKiBAcGFyYW0gIHBLZXlzQXJyYXkgQXJyYXkgb2Ygc3RyaW5ncy4gQWNjZXB0ZWQgZm9ybWF0OiBrZXkgfCBrZXk6YWxpYXNcbiAgICogQHJldHVybnMgT2JqZWN0XG4gICAqL1xuICBzdGF0aWMgcGFyc2VQYXJlbnRLZXlzRXF1aXZhbGVuY2VzKHBLZXlzQXJyYXk6IEFycmF5PHN0cmluZz4sIHNlcGFyYXRvcjogc3RyaW5nID0gJzonKTogb2JqZWN0IHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSB7fTtcbiAgICBpZiAocEtleXNBcnJheSAmJiBwS2V5c0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHBLZXlzQXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgYXV4ID0gaXRlbS5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICBpZiAoYXV4ICYmIGF1eC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBpZiAoLy4rXFxbLitcXF0vLnRlc3QoYXV4WzFdKSkge1xuICAgICAgICAgICAgY29uc3QgZXF1aXZLZXkgPSBhdXhbMV0uc3Vic3RyaW5nKDAsIGF1eFsxXS5pbmRleE9mKCdbJykpO1xuICAgICAgICAgICAgY29uc3QgZXF1aXZWYWx1ZSA9IGF1eFsxXS5zdWJzdHJpbmcoYXV4WzFdLmluZGV4T2YoJ1snKSArIDEsIGF1eFsxXS5pbmRleE9mKCddJykpO1xuICAgICAgICAgICAgY29uc3QgZXF1aXYgPSB7fTtcbiAgICAgICAgICAgIGVxdWl2W2VxdWl2S2V5XSA9IGVxdWl2VmFsdWU7XG4gICAgICAgICAgICBlcXVpdmFsZW5jZXNbYXV4WzBdXSA9IGVxdWl2O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcXVpdmFsZW5jZXNbYXV4WzBdXSA9IGF1eFsxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYXV4ICYmIGF1eC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBlcXVpdmFsZW5jZXNbaXRlbV0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIHN0YXRpYyBlbmNvZGVQYXJlbnRLZXlzKHBhcmVudEtleXM6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgbGV0IGVuY29kZWQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChwYXJlbnRLZXlzKSB7XG4gICAgICBlbmNvZGVkID0gQmFzZTY0LmVuY29kZShKU09OLnN0cmluZ2lmeShwYXJlbnRLZXlzKSk7XG4gICAgfVxuICAgIHJldHVybiBlbmNvZGVkO1xuICB9XG5cbiAgc3RhdGljIGRlY29kZVBhcmVudEtleXMocGFyZW50S2V5czogc3RyaW5nKTogb2JqZWN0IHtcbiAgICBsZXQgZGVjb2RlZCA9IHt9O1xuICAgIGlmIChwYXJlbnRLZXlzICYmIHBhcmVudEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZCA9IEJhc2U2NC5kZWNvZGUocGFyZW50S2V5cyk7XG4gICAgICBkZWNvZGVkID0gSlNPTi5wYXJzZShkKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlY29kZWQ7XG4gIH1cblxuICBzdGF0aWMgaXNBcnJheUVtcHR5KGFycmF5OiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgaXNPYmplY3RFbXB0eShvYmo6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2V0aGVyIHNwZWNpZmllZCBzZXJ2aWNlIGFzIGFyZ3VtZW50IGltcGxlbWVudHMgJ0lEYXRhU2VydmljZScgaW50ZXJmYWNlXG4gICAqIEBwYXJhbSBhcmcgVGhlIHNlcnZpY2UgaW5zdGFuY2UgZm9yIGNoZWNraW5nLlxuICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAqL1xuICBzdGF0aWMgaXNEYXRhU2VydmljZShhcmc6IGFueSk6IGFyZyBpcyBJRGF0YVNlcnZpY2Uge1xuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgoYXJnIGFzIElEYXRhU2VydmljZSkuZ2V0RGVmYXVsdFNlcnZpY2VDb25maWd1cmF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChhcmcgYXMgSURhdGFTZXJ2aWNlKS5jb25maWd1cmVTZXJ2aWNlICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3ZXRoZXIgc3BlY2lmaWVkIHNlcnZpY2UgYXMgYXJndW1lbnQgaW1wbGVtZW50cyAnSURhdGFTZXJ2aWNlJyBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGFyZyBUaGUgc2VydmljZSBpbnN0YW5jZSBmb3IgY2hlY2tpbmcuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHN0YXRpYyBpc1Blcm1pc3Npb25zU2VydmljZShhcmc6IGFueSk6IGFyZyBpcyBJUGVybWlzc2lvbnNTZXJ2aWNlIHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKGFyZyBhcyBJUGVybWlzc2lvbnNTZXJ2aWNlKS5sb2FkUGVybWlzc2lvbnMgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdldGhlciBzcGVjaWZpZWQgY29tcG9uZW50IGFzIGFyZ3VtZW50IGltcGxlbWVudHMgJ0lGb3JtRGF0YUNvbXBvbmVudCcgaW50ZXJmYWNlXG4gICAqIEBwYXJhbSBhcmcgVGhlIGNvbXBvbmVudCBpbnN0YW5jZSBmb3IgY2hlY2tpbmcuXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHN0YXRpYyBpc0Zvcm1EYXRhQ29tcG9uZW50KGFyZzogYW55KTogYXJnIGlzIElGb3JtRGF0YUNvbXBvbmVudCB7XG4gICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChhcmcgYXMgSUZvcm1EYXRhQ29tcG9uZW50KS5pc0F1dG9tYXRpY0JpbmRpbmcgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBpcyBlcXVhbCB0d28gb2JqZWN0c1xuICAgKiBAcGFyYW0gYSBPYmplY3QgMVxuICAgKiBAcGFyYW0gYiBPYmplY3QgMlxuICAgKlxuICAgKi9cbiAgc3RhdGljIGlzRXF1aXZhbGVudChhLCBiKSB7XG4gICAgLy8gQ3JlYXRlIGFycmF5cyBvZiBwcm9wZXJ0eSBuYW1lc1xuICAgIGNvbnN0IGFQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpO1xuICAgIGNvbnN0IGJQcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpO1xuXG4gICAgLy8gSWYgbnVtYmVyIG9mIHByb3BlcnRpZXMgaXMgZGlmZmVyZW50LCBvYmplY3RzIGFyZSBub3QgZXF1aXZhbGVudFxuICAgIGlmIChhUHJvcHMubGVuZ3RoICE9PSBiUHJvcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHByb3BOYW1lID0gYVByb3BzW2ldO1xuICAgICAgLy8gSWYgdmFsdWVzIG9mIHNhbWUgcHJvcGVydHkgYXJlIG5vdCBlcXVhbCwgb2JqZWN0cyBhcmUgbm90IGVxdWl2YWxlbnRcbiAgICAgIGxldCBiVmFsdWUgPSBiW3Byb3BOYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgYVtwcm9wTmFtZV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IGludEIgPSBwYXJzZUludChiVmFsdWUsIDEwKTtcbiAgICAgICAgYlZhbHVlID0gaXNOYU4oaW50QikgPyBiVmFsdWUgOiBpbnRCO1xuICAgICAgfVxuICAgICAgaWYgKGFbcHJvcE5hbWVdICE9PSBiVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIG1hZGUgaXQgdGhpcyBmYXIsIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGVxdWFscyhvMTogYW55LCBvMjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKG8xID09PSBvMikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMikge1xuICAgICAgLy8gTmFOID09PSBOYU5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0MSA9IHR5cGVvZiBvMTtcbiAgICBjb25zdCB0MiA9IHR5cGVvZiBvMjtcbiAgICBsZXQgbGVuZ3RoOiBudW1iZXI7XG4gICAgbGV0IGtleTogYW55O1xuICAgIGxldCBrZXlTZXQ6IGFueTtcbiAgICBpZiAodDEgPT09IHQyICYmIHQxID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobzEpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvMikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGVuZ3RoID0gbzEubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcbiAgICAgICAgICAgIGlmICghVXRpbC5lcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobzIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGtleVNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAoa2V5IGluIG8xKSB7XG4gICAgICAgICAgaWYgKCFVdGlsLmVxdWFscyhvMVtrZXldLCBvMltrZXldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZXlTZXRba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChrZXkgaW4gbzIpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiB0eXBlb2YgbzJba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGEgcmFuZG9tIG51bWJlclxuICAqL1xuICBzdGF0aWMgcmFuZG9tTnVtYmVyKCkge1xuICAgIGNvbnN0IHJhbmRvbUFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpO1xuICAgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHJhbmRvbUFycmF5KTtcbiAgICByZXR1cm4gcmFuZG9tQXJyYXlbMF07XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm92aWRlZCBzdHJpbmcgaW4gbG93ZXJjYXNlIGFuZCB3aXRob3V0IGFjY2VudCBtYXJrcy5cbiAgICogQHBhcmFtIHZhbHVlIHRoZSB0ZXh0IHRvIG5vcm1hbGl6ZVxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVN0cmluZyh2YWx1ZTogc3RyaW5nLCB0b0xvd2VyQ2FzZTogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB2YWx1ZS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgaWYgKHRvTG93ZXJDYXNlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByb3ZpZGVkIGFycmF5IGZsYXR0ZW5kLlxuICAgKiBAcGFyYW0gYXJyYXkgdGhlIGFycmF5IHRvIGZsYXRcbiAgICovXG4gIHN0YXRpYyBmbGF0dGVuKGFycmF5OiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgbGV0IGZsYXR0ZW5lZCA9IFtdO1xuICAgIGZvciAoY29uc3QgY3VycmVudCBvZiBhcnJheSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgICAgIGZsYXR0ZW5lZC5wdXNoKGN1cnJlbnQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgY2hpbGRDdXJyZW50IG9mIGN1cnJlbnQpIHtcbiAgICAgICAgZmxhdHRlbmVkLnB1c2goY2hpbGRDdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxhdHRlbmVkXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCBhbGwgdGhlIHZhbHVlcyBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBvYmogdGhlIG9iamVjdFxuICAgKi9cbiAgc3RhdGljIGdldFZhbHVlc0Zyb21PYmplY3Qob2JqOiBvYmplY3QgPSB7fSk6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGFycmF5OiBBcnJheTxhbnk+ID0gW107XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhcnJheS5wdXNoKFV0aWwuZ2V0VmFsdWVzRnJvbU9iamVjdChvYmpba2V5XSkpO1xuICAgICAgfVxuICAgICAgYXJyYXkucHVzaChvYmpba2V5XSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFV0aWwuZmxhdHRlbihhcnJheSk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VJY29uUG9zaXRpb24odmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gZGVmYXVsdFZhbHVlIHx8IENvZGVzLklDT05fUE9TSVRJT05fTEVGVDtcbiAgICBjb25zdCBhdmFpbGFibGVQb3NpdGlvbnMgPSBbQ29kZXMuSUNPTl9QT1NJVElPTl9MRUZULCBDb2Rlcy5JQ09OX1BPU0lUSU9OX1JJR0hUXTtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoYXZhaWxhYmxlUG9zaXRpb25zLmluZGV4T2YocmVzdWx0KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdCA9IGRlZmF1bHRWYWx1ZSB8fCBDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgY29weVRvQ2xpcGJvYXJkKGRhdGE6IHN0cmluZykge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGUuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCd0ZXh0L3BsYWluJywgZGF0YSk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjb3B5JywgbnVsbCk7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja1BpeGVsc1ZhbHVlU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ3B4JykgOiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBleHRyYWN0UGl4ZWxzVmFsdWUodmFsdWU6IGFueSwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgaWYgKFV0aWwuY2hlY2tQaXhlbHNWYWx1ZVN0cmluZyh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWUuc3Vic3RyKDAsIHZhbHVlLmxlbmd0aCAtICdweCcubGVuZ3RoKSk7XG4gICAgICByZXN1bHQgPSBpc05hTihwYXJzZWQpID8gZGVmYXVsdFZhbHVlIDogcGFyc2VkO1xuICAgIH1cbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQocmVzdWx0KSA/IHJlc3VsdCA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogQWRkZWQgY2xhc3MgJ2FjY2VudCcgaW4gPG1hdC1mb3JtLWZpZWxkPiBhbmQgc2V0IHRoZSBjb2xvciAgYWNjZW50IGluIHRoZSBpY29uc1xuICAgKiBAcGFyYW0gZWxSZWZcbiAgICogQHBhcmFtIG9JbnB1dHNPcHRpb25zXG4gICAqL1xuXG4gIHN0YXRpYyBwYXJzZU9JbnB1dHNPcHRpb25zKGVsUmVmLCBvSW5wdXRzT3B0aW9ucykge1xuXG4gICAgaWYgKG9JbnB1dHNPcHRpb25zLmljb25Db2xvciA9PT0gQ29kZXMuT19JTlBVVFNfT1BUSU9OU19DT0xPUl9BQ0NFTlQpIHtcbiAgICAgIGNvbnN0IG1hdEZvcm1GaWVsZEVMID0gZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbWF0LWZvcm0tZmllbGQnKVswXTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChtYXRGb3JtRmllbGRFTCkpIHtcbiAgICAgICAgbWF0Rm9ybUZpZWxkRUwuY2xhc3NMaXN0LmFkZCgnYWNjZW50Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogIFJldHVybiBzdHJpbmcgd2l0aCBlc2NhcGVkIHNwZWNpYWwgY2hhcmFjdGVyXG4gICAqL1xuICBzdGF0aWMgZXNjYXBlU3BlY2lhbENoYXJhY3RlcihTOiBzdHJpbmcpOiBzdHJpbmcge1xuXG4gICAgY29uc3Qgc3RyID0gU3RyaW5nKFMpO1xuXG4gICAgY29uc3QgY3BMaXN0ID0gQXJyYXkuZnJvbShzdHJbU3ltYm9sLml0ZXJhdG9yXSgpKTtcblxuICAgIGNvbnN0IGN1TGlzdCA9IFtdO1xuICAgIGZvciAoY29uc3QgYyBvZiBjcExpc3QpIHtcbiAgICAgIC8vIGkuIElmIGMgaXMgYSBTcGVjaWFsQ2hhcmFjdGVyIHRoZW4gZG86XG4gICAgICBpZiAoJ14kXFxcXC4qKz8oKVtde318Jy5pbmRleE9mKGMpICE9PSAtMSkge1xuICAgICAgICAvLyBhLiBBcHBlbmQgXCJcXFwiIHRvIGN1TGlzdC5cbiAgICAgICAgY3VMaXN0LnB1c2goJ1xcXFwnKTtcbiAgICAgIH1cbiAgICAgIC8vIEFwcGVuZCBjIHRvIGNwTGlzdC5cbiAgICAgIGN1TGlzdC5wdXNoKGMpO1xuICAgIH1cbiAgICBjb25zdCBMID0gY3VMaXN0LmpvaW4oJycpO1xuICAgIHJldHVybiBMO1xuXG4gIH1cblxuICBzdGF0aWMgaXNBcnJheUVxdWFsKGFycmF5MTogQXJyYXk8YW55PiwgYXJyYXkyOiBBcnJheTxhbnk+KSB7XG4gICAgcmV0dXJuIGFycmF5MS5sZW5ndGggPT09IGFycmF5Mi5sZW5ndGggJiYgYXJyYXkxLmV2ZXJ5KCh2LCBpKSA9PiB2ID09PSBhcnJheTJbaV0pXG4gIH07XG5cbiAgc3RhdGljIGRpZmZlcmVuY2VBcnJheXMoYXJyYXkxOiBBcnJheTxhbnk+LCBhcnJheTI6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gYXJyYXkxLmZpbHRlcihvYmogPT4ge1xuICAgICAgcmV0dXJuICFhcnJheTIuc29tZShvYmoyID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXF1YWxzKG9iaiwgb2JqMik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGlmZmVyZW5jZTtcbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0VG9PRGF0ZVZhbHVlVHlwZSh2YWw6IGFueSk6IE9EYXRlVmFsdWVUeXBlIHtcbiAgICBsZXQgcmVzdWx0OiBPRGF0ZVZhbHVlVHlwZSA9ICd0aW1lc3RhbXAnO1xuICAgIGNvbnN0IGxvd2VyVmFsID0gKHZhbCB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXJWYWwgPT09ICdzdHJpbmcnIHx8IGxvd2VyVmFsID09PSAnZGF0ZScgfHwgbG93ZXJWYWwgPT09ICd0aW1lc3RhbXAnIHx8IGxvd2VyVmFsID09PSAnaXNvLTg2MDEnKSB7XG4gICAgICByZXN1bHQgPSBsb3dlclZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgc3RhdGljIHVuaXF1ZUJ5KGE6IEFycmF5PGFueT4sIGtleSkge1xuICAgIGNvbnN0IHNlZW4gPSB7fTtcbiAgICByZXR1cm4gYS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGsgPSBrZXkoaXRlbSk7XG4gICAgICByZXR1cm4gc2Vlbi5oYXNPd25Qcm9wZXJ0eShrKSA/IGZhbHNlIDogKHNlZW5ba10gPSB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0d28gc3RyaW5ncyBhbmQgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIGZpcnN0IGFyZ3VtZW50IGlzIGxlc3MgdGhhbiBzZWNvbmQgYXJndW1lbnQsIHplcm8gaWYgdGhleSdyZSBlcXVhbCBhbmQgYSBwb3NpdGl2ZSB2YWx1ZSBvdGhlcndpc2UuXG4gICAqL1xuICBzdGF0aWMgY29tcGFyZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKGEgPCBiKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmIChhID4gYikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQnlWYWx1ZVR5cGUodmFsdWU6IGFueSwgdmFsdWVUeXBlOiBPRGF0ZVZhbHVlVHlwZSwgZm9ybWF0OiBzdHJpbmcpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdmFsdWU7XG4gICAgY29uc3QgbSA9IG1vbWVudCh2YWx1ZSk7XG4gICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJlc3VsdCA9IG0uZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHJlc3VsdCA9IG0udG9EYXRlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaXNvLTg2MDEnOlxuICAgICAgICByZXN1bHQgPSBtLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGltZXN0YW1wJzpcbiAgICAgICAgcmVzdWx0ID0gbS52YWx1ZU9mKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzdWx0ID0gdm9pZCAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyB3cmFwSW50b09ic2VydmFibGU8VD4odmFsdWU6IFQgfCBQcm9taXNlPFQ+IHwgT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNQcm9taXNlKHZhbHVlKSkge1xuICAgICAgLy8gVXNlIGBQcm9taXNlLnJlc29sdmUoKWAgdG8gd3JhcCBwcm9taXNlLWxpa2UgaW5zdGFuY2VzLlxuICAgICAgcmV0dXJuIGZyb20oUHJvbWlzZS5yZXNvbHZlKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBpc1Byb21pc2U8VCA9IGFueT4ob2JqOiBhbnkpOiBvYmogaXMgUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuICEhb2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG5cbiAgc3RhdGljIGNvbmZpZ3VyZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncyk6IGFueSB7XG4gICAgbGV0IGRhdGFTZXJ2aWNlID0gY29uZmlndXJlU2VydmljZUFyZ3MuYmFzZVNlcnZpY2U7XG4gICAgY29uc3QgZW50aXR5ID0gY29uZmlndXJlU2VydmljZUFyZ3MuZW50aXR5O1xuICAgIGNvbnN0IHNlcnZpY2UgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5zZXJ2aWNlO1xuICAgIGNvbnN0IHNlcnZpY2VUeXBlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZVR5cGU7XG4gICAgY29uc3QgaW5qZWN0b3IgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5pbmplY3RvcjtcblxuICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgZGF0YVNlcnZpY2UgPSBzZXJ2aWNlVHlwZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGRhdGFTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0PGFueT4oZGF0YVNlcnZpY2UpO1xuICAgICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgIGRhdGFTZXJ2aWNlID0gVXRpbC5jcmVhdGVTZXJ2aWNlSW5zdGFuY2UoZGF0YVNlcnZpY2UsIGluamVjdG9yKVxuICAgICAgfVxuICAgICAgaWYgKFV0aWwuaXNEYXRhU2VydmljZShkYXRhU2VydmljZSkpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUNmZyA9IGRhdGFTZXJ2aWNlLmdldERlZmF1bHRTZXJ2aWNlQ29uZmlndXJhdGlvbihzZXJ2aWNlKTtcbiAgICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICAgIHNlcnZpY2VDZmcuZW50aXR5ID0gZW50aXR5O1xuICAgICAgICB9XG4gICAgICAgIGRhdGFTZXJ2aWNlLmNvbmZpZ3VyZVNlcnZpY2Uoc2VydmljZUNmZyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBwcm92aWRlZCBzZXJ2aWNlIGNsYXNzXG4gKiBAcGFyYW0gY2xhenogdGhlIGNsYXNzIHJlZmVyZW5jZVxuICogQHBhcmFtIGluamVjdG9yIHRoZSBpbmplY3RvclxuICovXG4gIHN0YXRpYyBjcmVhdGVTZXJ2aWNlSW5zdGFuY2UoY2xheno6IGFueSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChjbGF6eikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbnN0YW5jZSA9IG5ldyBjbGF6eihpbmplY3Rvcik7XG4gICAgcmV0dXJuIG5ld0luc3RhbmNlO1xuICB9XG5cbiAgc3RhdGljIGNvbmZpZ3VyZU1lc3NhZ2VTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlTWVzc2FnZVNlcnZpY2VBcmdzKTogYW55IHtcbiAgICBsZXQgbWVzc2FnZVNlcnZpY2UgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5iYXNlU2VydmljZTtcbiAgICBjb25zdCBzZXJ2aWNlVHlwZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLnNlcnZpY2VUeXBlO1xuICAgIGNvbnN0IGluamVjdG9yID0gY29uZmlndXJlU2VydmljZUFyZ3MuaW5qZWN0b3I7XG5cbiAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgIG1lc3NhZ2VTZXJ2aWNlID0gc2VydmljZVR5cGU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBtZXNzYWdlU2VydmljZSA9IGluamVjdG9yLmdldDxhbnk+KG1lc3NhZ2VTZXJ2aWNlKTtcbiAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICBtZXNzYWdlU2VydmljZSA9IFV0aWwuY3JlYXRlU2VydmljZUluc3RhbmNlKG1lc3NhZ2VTZXJ2aWNlLCBpbmplY3RvcilcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVNlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgaXNCYXNlNjQoZmlsZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoL14oW0EtWmEtejAtOStcXC9dezR9KSooW0EtWmEtejAtOStcXC9dezR9fFtBLVphLXowLTkrXFwvXXszfT18W0EtWmEtejAtOStcXC9dezJ9PT0pJC9nKVxuXG4gICAgaWYgKGZpbGUuc3Vic3RyaW5nKDAsIDQpID09PSAnZGF0YScpIHtcbiAgICAgIGZpbGUgPSBmaWxlLnN1YnN0cmluZyhmaWxlLmluZGV4T2YoJ2Jhc2U2NCcpICsgNyk7XG4gICAgfVxuICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoZmlsZS5yZXBsYWNlKC9cXHMrL2csICcnKSk7XG5cbiAgfVxuICAvKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCB0byBhIEpTT04gc3RyaW5nLCBhdm9pZGluZyBjaXJjdWxhciByZWZlcmVuY2VzLlxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqIEByZXR1cm5zIEEgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvYmplY3QuXG4gKi9cbiAgc3RhdGljIHN0cmluZ2lmeShvYmo6IG9iamVjdCkge1xuICAgIGxldCBjYWNoZSA9IFtdO1xuICAgIGxldCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjYWNoZS5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm47IC8vIEF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICBjYWNoZSA9IG51bGw7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG59XG4iXX0=
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8xRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHaEMsTUFBTSxPQUFPLElBQUk7SUFJZixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQVE7UUFDdEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7UUFDM0IsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVE7UUFDckIsT0FBTyxHQUFHLFlBQVksS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxZQUFzQjtRQUN2RCxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwRyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDM0csT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMs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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7O0FBdGlCZSxxQkFBZ0IsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElEYXRhU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGF0YS1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRm9ybURhdGFDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zvcm0tZGF0YS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Blcm1pc3Npb25zLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9EYXRlVmFsdWVUeXBlIH0gZnJvbSAnLi4vdHlwZXMvby1kYXRlLXZhbHVlLnR5cGUnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlndXJlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gJy4vYmFzZTY0JztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi9jb2Rlcyc7XG5pbXBvcnQgeyBPQ29uZmlndXJlTWVzc2FnZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlndXJlLW1lc3NhZ2Utc2VydmljZS1hcmdzLnR5cGUnO1xuXG5leHBvcnQgY2xhc3MgVXRpbCB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IGNvbHVtbkFnZ3JlZ2F0ZXMgPSBbJ3N1bScsICdjb3VudCcsICdhdmcnLCAnbWluJywgJ21heCddO1xuXG4gIHN0YXRpYyBpc09iamVjdCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbFR5cGUgPSB0eXBlb2YgdmFsO1xuICAgIHJldHVybiB2YWxUeXBlID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHN0YXRpYyBpc0FycmF5KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEFycmF5O1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQm9vbGVhbih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSAmJiAodmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ1RSVUUnIHx8IHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdZRVMnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgKHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdGQUxTRScgfHwgdmFsdWUudG9VcHBlckNhc2UoKSA9PT0gJ05PJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFV0aWwuaXNEZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUFycmF5KHZhbHVlOiBzdHJpbmcsIGV4Y2x1ZGVSZXBlYXRlZDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nW10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlLnNwbGl0KENvZGVzLkFSUkFZX0lOUFVUX1NFUEFSQVRPUik7XG4gICAgfVxuICAgIGlmIChleGNsdWRlUmVwZWF0ZWQgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdCA9IEFycmF5LmZyb20obmV3IFNldChyZXN1bHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHBhcmVudCBrZXlzIGVxdWl2YWxlbmNlcy5cbiAgICogQHBhcmFtICBwS2V5c0FycmF5IEFycmF5IG9mIHN0cmluZ3MuIEFjY2VwdGVkIGZvcm1hdDoga2V5IHwga2V5OmFsaWFzXG4gICAqIEByZXR1cm5zIE9iamVjdFxuICAgKi9cbiAgc3RhdGljIHBhcnNlUGFyZW50S2V5c0VxdWl2YWxlbmNlcyhwS2V5c0FycmF5OiBBcnJheTxzdHJpbmc+LCBzZXBhcmF0b3I6IHN0cmluZyA9ICc6Jyk6IG9iamVjdCB7XG4gICAgY29uc3QgZXF1aXZhbGVuY2VzID0ge307XG4gICAgaWYgKHBLZXlzQXJyYXkgJiYgcEtleXNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBwS2V5c0FycmF5LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGF1eCA9IGl0ZW0uc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGF1eCAmJiBhdXgubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgaWYgKC8uK1xcWy4rXFxdLy50ZXN0KGF1eFsxXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2S2V5ID0gYXV4WzFdLnN1YnN0cmluZygwLCBhdXhbMV0uaW5kZXhPZignWycpKTtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2VmFsdWUgPSBhdXhbMV0uc3Vic3RyaW5nKGF1eFsxXS5pbmRleE9mKCdbJykgKyAxLCBhdXhbMV0uaW5kZXhPZignXScpKTtcbiAgICAgICAgICAgIGNvbnN0IGVxdWl2ID0ge307XG4gICAgICAgICAgICBlcXVpdltlcXVpdktleV0gPSBlcXVpdlZhbHVlO1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VzW2F1eFswXV0gPSBlcXVpdjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VzW2F1eFswXV0gPSBhdXhbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGF1eCAmJiBhdXgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgZXF1aXZhbGVuY2VzW2l0ZW1dID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBzdGF0aWMgZW5jb2RlUGFyZW50S2V5cyhwYXJlbnRLZXlzOiBvYmplY3QpOiBzdHJpbmcge1xuICAgIGxldCBlbmNvZGVkOiBzdHJpbmcgPSAnJztcbiAgICBpZiAocGFyZW50S2V5cykge1xuICAgICAgZW5jb2RlZCA9IEJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGFyZW50S2V5cykpO1xuICAgIH1cbiAgICByZXR1cm4gZW5jb2RlZDtcbiAgfVxuXG4gIHN0YXRpYyBkZWNvZGVQYXJlbnRLZXlzKHBhcmVudEtleXM6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgbGV0IGRlY29kZWQgPSB7fTtcbiAgICBpZiAocGFyZW50S2V5cyAmJiBwYXJlbnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGQgPSBCYXNlNjQuZGVjb2RlKHBhcmVudEtleXMpO1xuICAgICAgZGVjb2RlZCA9IEpTT04ucGFyc2UoZCk7XG4gICAgfVxuICAgIHJldHVybiBkZWNvZGVkO1xuICB9XG5cbiAgc3RhdGljIGlzQXJyYXlFbXB0eShhcnJheTogYW55W10pOiBib29sZWFuIHtcbiAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGlzT2JqZWN0RW1wdHkob2JqOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdldGhlciBzcGVjaWZpZWQgc2VydmljZSBhcyBhcmd1bWVudCBpbXBsZW1lbnRzICdJRGF0YVNlcnZpY2UnIGludGVyZmFjZVxuICAgKiBAcGFyYW0gYXJnIFRoZSBzZXJ2aWNlIGluc3RhbmNlIGZvciBjaGVja2luZy5cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgc3RhdGljIGlzRGF0YVNlcnZpY2UoYXJnOiBhbnkpOiBhcmcgaXMgSURhdGFTZXJ2aWNlIHtcbiAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKGFyZyBhcyBJRGF0YVNlcnZpY2UpLmdldERlZmF1bHRTZXJ2aWNlQ29uZmlndXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoYXJnIGFzIElEYXRhU2VydmljZSkuY29uZmlndXJlU2VydmljZSAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2V0aGVyIHNwZWNpZmllZCBzZXJ2aWNlIGFzIGFyZ3VtZW50IGltcGxlbWVudHMgJ0lEYXRhU2VydmljZScgaW50ZXJmYWNlXG4gICAqIEBwYXJhbSBhcmcgVGhlIHNlcnZpY2UgaW5zdGFuY2UgZm9yIGNoZWNraW5nLlxuICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAqL1xuICBzdGF0aWMgaXNQZXJtaXNzaW9uc1NlcnZpY2UoYXJnOiBhbnkpOiBhcmcgaXMgSVBlcm1pc3Npb25zU2VydmljZSB7XG4gICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChhcmcgYXMgSVBlcm1pc3Npb25zU2VydmljZSkubG9hZFBlcm1pc3Npb25zICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3ZXRoZXIgc3BlY2lmaWVkIGNvbXBvbmVudCBhcyBhcmd1bWVudCBpbXBsZW1lbnRzICdJRm9ybURhdGFDb21wb25lbnQnIGludGVyZmFjZVxuICAgKiBAcGFyYW0gYXJnIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgZm9yIGNoZWNraW5nLlxuICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAqL1xuICBzdGF0aWMgaXNGb3JtRGF0YUNvbXBvbmVudChhcmc6IGFueSk6IGFyZyBpcyBJRm9ybURhdGFDb21wb25lbnQge1xuICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgoYXJnIGFzIElGb3JtRGF0YUNvbXBvbmVudCkuaXNBdXRvbWF0aWNCaW5kaW5nICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgaXMgZXF1YWwgdHdvIG9iamVjdHNcbiAgICogQHBhcmFtIGEgT2JqZWN0IDFcbiAgICogQHBhcmFtIGIgT2JqZWN0IDJcbiAgICpcbiAgICovXG4gIHN0YXRpYyBpc0VxdWl2YWxlbnQoYSwgYikge1xuICAgIC8vIENyZWF0ZSBhcnJheXMgb2YgcHJvcGVydHkgbmFtZXNcbiAgICBjb25zdCBhUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKTtcbiAgICBjb25zdCBiUHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKTtcblxuICAgIC8vIElmIG51bWJlciBvZiBwcm9wZXJ0aWVzIGlzIGRpZmZlcmVudCwgb2JqZWN0cyBhcmUgbm90IGVxdWl2YWxlbnRcbiAgICBpZiAoYVByb3BzLmxlbmd0aCAhPT0gYlByb3BzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwcm9wTmFtZSA9IGFQcm9wc1tpXTtcbiAgICAgIC8vIElmIHZhbHVlcyBvZiBzYW1lIHByb3BlcnR5IGFyZSBub3QgZXF1YWwsIG9iamVjdHMgYXJlIG5vdCBlcXVpdmFsZW50XG4gICAgICBsZXQgYlZhbHVlID0gYltwcm9wTmFtZV07XG4gICAgICBpZiAodHlwZW9mIGFbcHJvcE5hbWVdID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBpbnRCID0gcGFyc2VJbnQoYlZhbHVlLCAxMCk7XG4gICAgICAgIGJWYWx1ZSA9IGlzTmFOKGludEIpID8gYlZhbHVlIDogaW50QjtcbiAgICAgIH1cbiAgICAgIGlmIChhW3Byb3BOYW1lXSAhPT0gYlZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBtYWRlIGl0IHRoaXMgZmFyLCBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHMobzE6IGFueSwgbzI6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChvMSA9PT0gbzIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpIHtcbiAgICAgIC8vIE5hTiA9PT0gTmFOXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdDEgPSB0eXBlb2YgbzE7XG4gICAgY29uc3QgdDIgPSB0eXBlb2YgbzI7XG4gICAgbGV0IGxlbmd0aDogbnVtYmVyO1xuICAgIGxldCBrZXk6IGFueTtcbiAgICBsZXQga2V5U2V0OiBhbnk7XG4gICAgaWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG8xKSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobzIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxlbmd0aCA9IG8xLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gbzIubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG4gICAgICAgICAgICBpZiAoIVV0aWwuZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG8yKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBrZXlTZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBmb3IgKGtleSBpbiBvMSkge1xuICAgICAgICAgIGlmICghVXRpbC5lcXVhbHMobzFba2V5XSwgbzJba2V5XSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5U2V0W2tleV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoa2V5IGluIG8yKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIGtleVNldCkgJiYgdHlwZW9mIG8yW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhIHJhbmRvbSBudW1iZXJcbiAgKi9cbiAgc3RhdGljIHJhbmRvbU51bWJlcigpIHtcbiAgICBjb25zdCByYW5kb21BcnJheSA9IG5ldyBVaW50MzJBcnJheSgxKTtcbiAgICB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhyYW5kb21BcnJheSk7XG4gICAgcmV0dXJuIHJhbmRvbUFycmF5WzBdO1xuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvdmlkZWQgc3RyaW5nIGluIGxvd2VyY2FzZSBhbmQgd2l0aG91dCBhY2NlbnQgbWFya3MuXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdGV4dCB0byBub3JtYWxpemVcbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVTdHJpbmcodmFsdWU6IHN0cmluZywgdG9Mb3dlckNhc2U6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdmFsdWUubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgIGlmICh0b0xvd2VyQ2FzZSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm92aWRlZCBhcnJheSBmbGF0dGVuZC5cbiAgICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSB0byBmbGF0XG4gICAqL1xuICBzdGF0aWMgZmxhdHRlbihhcnJheTogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIGxldCBmbGF0dGVuZWQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGN1cnJlbnQgb2YgYXJyYXkpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuICAgICAgICBmbGF0dGVuZWQucHVzaChjdXJyZW50KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkQ3VycmVudCBvZiBjdXJyZW50KSB7XG4gICAgICAgIGZsYXR0ZW5lZC5wdXNoKGNoaWxkQ3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZsYXR0ZW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IHdpdGggYWxsIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gb2JqIHRoZSBvYmplY3RcbiAgICovXG4gIHN0YXRpYyBnZXRWYWx1ZXNGcm9tT2JqZWN0KG9iajogb2JqZWN0ID0ge30pOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBhcnJheTogQXJyYXk8YW55PiA9IFtdO1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYXJyYXkucHVzaChVdGlsLmdldFZhbHVlc0Zyb21PYmplY3Qob2JqW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIGFycmF5LnB1c2gob2JqW2tleV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBVdGlsLmZsYXR0ZW4oYXJyYXkpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlSWNvblBvc2l0aW9uKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IGRlZmF1bHRWYWx1ZSB8fCBDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQ7XG4gICAgY29uc3QgYXZhaWxhYmxlUG9zaXRpb25zID0gW0NvZGVzLklDT05fUE9TSVRJT05fTEVGVCwgQ29kZXMuSUNPTl9QT1NJVElPTl9SSUdIVF07XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKGF2YWlsYWJsZVBvc2l0aW9ucy5pbmRleE9mKHJlc3VsdCkgPT09IC0xKSB7XG4gICAgICByZXN1bHQgPSBkZWZhdWx0VmFsdWUgfHwgQ29kZXMuSUNPTl9QT1NJVElPTl9MRUZUO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGNvcHlUb0NsaXBib2FyZChkYXRhOiBzdHJpbmcpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb3B5JywgKGU6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICBlLmNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9wbGFpbicsIGRhdGEpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29weScsIG51bGwpO1xuICAgIH0pO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gIH1cblxuICBzdGF0aWMgY2hlY2tQaXhlbHNWYWx1ZVN0cmluZyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdweCcpIDogZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgZXh0cmFjdFBpeGVsc1ZhbHVlKHZhbHVlOiBhbnksIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHJlc3VsdDogbnVtYmVyID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICAgIGlmIChVdGlsLmNoZWNrUGl4ZWxzVmFsdWVTdHJpbmcodmFsdWUpKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHZhbHVlLnN1YnN0cigwLCB2YWx1ZS5sZW5ndGggLSAncHgnLmxlbmd0aCkpO1xuICAgICAgcmVzdWx0ID0gaXNOYU4ocGFyc2VkKSA/IGRlZmF1bHRWYWx1ZSA6IHBhcnNlZDtcbiAgICB9XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHJlc3VsdCkgPyByZXN1bHQgOiBkZWZhdWx0VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIEFkZGVkIGNsYXNzICdhY2NlbnQnIGluIDxtYXQtZm9ybS1maWVsZD4gYW5kIHNldCB0aGUgY29sb3IgIGFjY2VudCBpbiB0aGUgaWNvbnNcbiAgICogQHBhcmFtIGVsUmVmXG4gICAqIEBwYXJhbSBvSW5wdXRzT3B0aW9uc1xuICAgKi9cblxuICBzdGF0aWMgcGFyc2VPSW5wdXRzT3B0aW9ucyhlbFJlZiwgb0lucHV0c09wdGlvbnMpIHtcblxuICAgIGlmIChvSW5wdXRzT3B0aW9ucy5pY29uQ29sb3IgPT09IENvZGVzLk9fSU5QVVRTX09QVElPTlNfQ09MT1JfQUNDRU5UKSB7XG4gICAgICBjb25zdCBtYXRGb3JtRmllbGRFTCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hdC1mb3JtLWZpZWxkJylbMF07XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQobWF0Rm9ybUZpZWxkRUwpKSB7XG4gICAgICAgIG1hdEZvcm1GaWVsZEVMLmNsYXNzTGlzdC5hZGQoJ2FjY2VudCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqICBSZXR1cm4gc3RyaW5nIHdpdGggZXNjYXBlZCBzcGVjaWFsIGNoYXJhY3RlclxuICAgKi9cbiAgc3RhdGljIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXIoUzogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHN0ciA9IFN0cmluZyhTKTtcblxuICAgIGNvbnN0IGNwTGlzdCA9IEFycmF5LmZyb20oc3RyW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG5cbiAgICBjb25zdCBjdUxpc3QgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY3BMaXN0KSB7XG4gICAgICAvLyBpLiBJZiBjIGlzIGEgU3BlY2lhbENoYXJhY3RlciB0aGVuIGRvOlxuICAgICAgaWYgKCdeJFxcXFwuKis/KClbXXt9fCcuaW5kZXhPZihjKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gYS4gQXBwZW5kIFwiXFxcIiB0byBjdUxpc3QuXG4gICAgICAgIGN1TGlzdC5wdXNoKCdcXFxcJyk7XG4gICAgICB9XG4gICAgICAvLyBBcHBlbmQgYyB0byBjcExpc3QuXG4gICAgICBjdUxpc3QucHVzaChjKTtcbiAgICB9XG4gICAgY29uc3QgTCA9IGN1TGlzdC5qb2luKCcnKTtcbiAgICByZXR1cm4gTDtcblxuICB9XG5cbiAgc3RhdGljIGlzQXJyYXlFcXVhbChhcnJheTE6IEFycmF5PGFueT4sIGFycmF5MjogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBhcnJheTEubGVuZ3RoID09PSBhcnJheTIubGVuZ3RoICYmIGFycmF5MS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYXJyYXkyW2ldKVxuICB9O1xuXG4gIHN0YXRpYyBkaWZmZXJlbmNlQXJyYXlzKGFycmF5MTogQXJyYXk8YW55PiwgYXJyYXkyOiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IGFycmF5MS5maWx0ZXIob2JqID0+IHtcbiAgICAgIHJldHVybiAhYXJyYXkyLnNvbWUob2JqMiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVxdWFscyhvYmosIG9iajIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpZmZlcmVuY2U7XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRvT0RhdGVWYWx1ZVR5cGUodmFsOiBhbnkpOiBPRGF0ZVZhbHVlVHlwZSB7XG4gICAgbGV0IHJlc3VsdDogT0RhdGVWYWx1ZVR5cGUgPSAndGltZXN0YW1wJztcbiAgICBjb25zdCBsb3dlclZhbCA9ICh2YWwgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGxvd2VyVmFsID09PSAnc3RyaW5nJyB8fCBsb3dlclZhbCA9PT0gJ2RhdGUnIHx8IGxvd2VyVmFsID09PSAndGltZXN0YW1wJyB8fCBsb3dlclZhbCA9PT0gJ2lzby04NjAxJykge1xuICAgICAgcmVzdWx0ID0gbG93ZXJWYWw7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG4gIHN0YXRpYyB1bmlxdWVCeShhOiBBcnJheTxhbnk+LCBrZXkpIHtcbiAgICBjb25zdCBzZWVuID0ge307XG4gICAgcmV0dXJuIGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBrID0ga2V5KGl0ZW0pO1xuICAgICAgcmV0dXJuIHNlZW4uaGFzT3duUHJvcGVydHkoaykgPyBmYWxzZSA6IChzZWVuW2tdID0gdHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgdHdvIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBmaXJzdCBhcmd1bWVudCBpcyBsZXNzIHRoYW4gc2Vjb25kIGFyZ3VtZW50LCB6ZXJvIGlmIHRoZXkncmUgZXF1YWwgYW5kIGEgcG9zaXRpdmUgdmFsdWUgb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RhdGljIGNvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmIChhIDwgYikge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoYSA+IGIpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUJ5VmFsdWVUeXBlKHZhbHVlOiBhbnksIHZhbHVlVHlwZTogT0RhdGVWYWx1ZVR5cGUsIGZvcm1hdDogc3RyaW5nKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHZhbHVlO1xuICAgIGNvbnN0IG0gPSBtb21lbnQodmFsdWUpO1xuICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXN1bHQgPSBtLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXN1bHQgPSBtLnRvRGF0ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lzby04NjAxJzpcbiAgICAgICAgcmVzdWx0ID0gbS50b0lTT1N0cmluZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWVzdGFtcCc6XG4gICAgICAgIHJlc3VsdCA9IG0udmFsdWVPZigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlc3VsdCA9IHZvaWQgMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgd3JhcEludG9PYnNlcnZhYmxlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICAgIC8vIFVzZSBgUHJvbWlzZS5yZXNvbHZlKClgIHRvIHdyYXAgcHJvbWlzZS1saWtlIGluc3RhbmNlcy5cbiAgICAgIHJldHVybiBmcm9tKFByb21pc2UucmVzb2x2ZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBvZih2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgaXNQcm9taXNlPFQgPSBhbnk+KG9iajogYW55KTogb2JqIGlzIFByb21pc2U8VD4ge1xuICAgIHJldHVybiAhIW9iaiAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuXG4gIHN0YXRpYyBjb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3MpOiBhbnkge1xuICAgIGxldCBkYXRhU2VydmljZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmJhc2VTZXJ2aWNlO1xuICAgIGNvbnN0IGVudGl0eSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmVudGl0eTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY29uZmlndXJlU2VydmljZUFyZ3Muc2VydmljZTtcbiAgICBjb25zdCBzZXJ2aWNlVHlwZSA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLnNlcnZpY2VUeXBlO1xuICAgIGNvbnN0IGluamVjdG9yID0gY29uZmlndXJlU2VydmljZUFyZ3MuaW5qZWN0b3I7XG5cbiAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgIGRhdGFTZXJ2aWNlID0gc2VydmljZVR5cGU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkYXRhU2VydmljZSA9IGluamVjdG9yLmdldDxhbnk+KGRhdGFTZXJ2aWNlKTtcbiAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICBkYXRhU2VydmljZSA9IFV0aWwuY3JlYXRlU2VydmljZUluc3RhbmNlKGRhdGFTZXJ2aWNlLCBpbmplY3RvcilcbiAgICAgIH1cbiAgICAgIGlmIChVdGlsLmlzRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VDZmcgPSBkYXRhU2VydmljZS5nZXREZWZhdWx0U2VydmljZUNvbmZpZ3VyYXRpb24oc2VydmljZSk7XG4gICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICBzZXJ2aWNlQ2ZnLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhU2VydmljZS5jb25maWd1cmVTZXJ2aWNlKHNlcnZpY2VDZmcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhU2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZWQgc2VydmljZSBjbGFzc1xuICogQHBhcmFtIGNsYXp6IHRoZSBjbGFzcyByZWZlcmVuY2VcbiAqIEBwYXJhbSBpbmplY3RvciB0aGUgaW5qZWN0b3JcbiAqL1xuICBzdGF0aWMgY3JlYXRlU2VydmljZUluc3RhbmNlKGNsYXp6OiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoY2xhenopKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3SW5zdGFuY2UgPSBuZXcgY2xhenooaW5qZWN0b3IpO1xuICAgIHJldHVybiBuZXdJbnN0YW5jZTtcbiAgfVxuXG4gIHN0YXRpYyBjb25maWd1cmVNZXNzYWdlU2VydmljZShjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZU1lc3NhZ2VTZXJ2aWNlQXJncyk6IGFueSB7XG4gICAgbGV0IG1lc3NhZ2VTZXJ2aWNlID0gY29uZmlndXJlU2VydmljZUFyZ3MuYmFzZVNlcnZpY2U7XG4gICAgY29uc3Qgc2VydmljZVR5cGUgPSBjb25maWd1cmVTZXJ2aWNlQXJncy5zZXJ2aWNlVHlwZTtcbiAgICBjb25zdCBpbmplY3RvciA9IGNvbmZpZ3VyZVNlcnZpY2VBcmdzLmluamVjdG9yO1xuXG4gICAgaWYgKHNlcnZpY2VUeXBlKSB7XG4gICAgICBtZXNzYWdlU2VydmljZSA9IHNlcnZpY2VUeXBlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQ8YW55PihtZXNzYWdlU2VydmljZSk7XG4gICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgbWVzc2FnZVNlcnZpY2UgPSBVdGlsLmNyZWF0ZVNlcnZpY2VJbnN0YW5jZShtZXNzYWdlU2VydmljZSwgaW5qZWN0b3IpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGlzQmFzZTY0KGZpbGU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKC9eKFtBLVphLXowLTkrXFwvXXs0fSkqKFtBLVphLXowLTkrXFwvXXs0fXxbQS1aYS16MC05K1xcL117M309fFtBLVphLXowLTkrXFwvXXsyfT09KSQvZylcblxuICAgIGlmIChmaWxlLnN1YnN0cmluZygwLCA0KSA9PT0gJ2RhdGEnKSB7XG4gICAgICBmaWxlID0gZmlsZS5zdWJzdHJpbmcoZmlsZS5pbmRleE9mKCdiYXNlNjQnKSArIDcpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KGZpbGUucmVwbGFjZSgvXFxzKy9nLCAnJykpO1xuXG4gIH1cbiAgLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3QgdG8gYSBKU09OIHN0cmluZywgYXZvaWRpbmcgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKiBAcmV0dXJucyBBIEpTT04gc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgb2JqZWN0LlxuICovXG4gIHN0YXRpYyBzdHJpbmdpZnkob2JqOiBvYmplY3QpIHtcbiAgICBsZXQgY2FjaGUgPSBbXTtcbiAgICBsZXQgc3RyID0gSlNPTi5zdHJpbmdpZnkob2JqLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoY2FjaGUuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBBdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgICAgIH1cbiAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgY2FjaGUgPSBudWxsO1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBzdGF0aWMgc29ydEZ1bmN0aW9uKHByb3BlcnR5QTogc3RyaW5nIHwgbnVtYmVyLCBwcm9wZXJ0eUI6IHN0cmluZyB8IG51bWJlciwgYWN0aXZlU29ydERpcmVjdGlvbjogc3RyaW5nKSB7XG5cbiAgICBsZXQgdmFsdWVBOiBzdHJpbmcgfCBudW1iZXIgPSAnJztcbiAgICBsZXQgdmFsdWVCOiBzdHJpbmcgfCBudW1iZXIgPSAnJztcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChwcm9wZXJ0eUEpKSB7XG4gICAgICB2YWx1ZUEgPSBpc05hTigrcHJvcGVydHlBKSA/IHByb3BlcnR5QS50b1N0cmluZygpLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogK3Byb3BlcnR5QTtcbiAgICB9XG5cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocHJvcGVydHlCKSkge1xuICAgICAgdmFsdWVCID0gaXNOYU4oK3Byb3BlcnR5QikgPyBwcm9wZXJ0eUIudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICtwcm9wZXJ0eUI7XG4gICAgfVxuICAgIHJldHVybiAodmFsdWVBIDw9IHZhbHVlQiA/IC0xIDogMSkgKiAoYWN0aXZlU29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTEpO1xuICB9XG5cbiAgc3RhdGljIGNsb25lQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICAgIGNvbnN0IGNsb25lZEFycmF5ID0gYXJyLm1hcCgoeCkgPT4gT2JqZWN0LmFzc2lnbih7fSwgeCkpXG4gICAgcmV0dXJuIGNsb25lZEFycmF5O1xuICB9XG5cbn1cbiJdfQ==