@firestitch/report 18.10.1 → 18.11.0

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 (100) hide show
  1. package/app/reports/components/component-text/component-text.component.d.ts +1 -0
  2. package/app/reports/components/component-text/value-embed.plugin.d.ts +25 -1
  3. package/app/reports/components/report-canvas/report-canvas.component.d.ts +12 -1
  4. package/app/reports/components/report-component/report-component.component.d.ts +1 -0
  5. package/app/reports/data/report.data.d.ts +9 -13
  6. package/app/reports/dialogs/component-settings/component-settings.component.d.ts +13 -1
  7. package/app/reports/export/report-export-collector.service.d.ts +13 -6
  8. package/app/reports/export/report-filter-lines.d.ts +3 -2
  9. package/app/reports/filter-text.d.ts +8 -0
  10. package/app/reports/format.d.ts +1 -0
  11. package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +0 -2
  12. package/app/reports/interfaces/report-export-lines-input.interface.d.ts +1 -0
  13. package/app/reports/interfaces/report-export-snapshot.interface.d.ts +2 -3
  14. package/app/reports/interfaces/report-saved-filter-changes.interface.d.ts +4 -0
  15. package/app/reports/interfaces/report-saved-filter.interface.d.ts +6 -0
  16. package/app/reports/interfaces/{report-view-config.interface.d.ts → report-state-snapshot.interface.d.ts} +1 -2
  17. package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -1
  18. package/app/reports/report-chat-viewer-state.d.ts +3 -3
  19. package/app/reports/report-filter-items.d.ts +9 -0
  20. package/app/reports/report-saved-filters.d.ts +3 -0
  21. package/app/reports/report-state.d.ts +15 -0
  22. package/app/reports/services/report-filter-state.service.d.ts +9 -25
  23. package/app/reports/text.d.ts +16 -0
  24. package/app/reports/tile-data-state.d.ts +5 -5
  25. package/app/reports/views/report/fs-ai-report.component.d.ts +10 -5
  26. package/esm2022/app/reports/canvas-landing-page.mjs +3 -3
  27. package/esm2022/app/reports/components/component-list/component-list.component.mjs +3 -3
  28. package/esm2022/app/reports/components/component-text/component-text.component.mjs +34 -22
  29. package/esm2022/app/reports/components/component-text/value-embed.plugin.mjs +254 -42
  30. package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +124 -23
  31. package/esm2022/app/reports/components/report-component/report-component.component.mjs +45 -31
  32. package/esm2022/app/reports/data/report.data.mjs +33 -45
  33. package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +57 -14
  34. package/esm2022/app/reports/export/report-export-collector.service.mjs +93 -49
  35. package/esm2022/app/reports/export/report-filter-lines.mjs +28 -21
  36. package/esm2022/app/reports/export/report-pdf.service.mjs +31 -21
  37. package/esm2022/app/reports/export/report-pptx.service.mjs +21 -11
  38. package/esm2022/app/reports/filter-settings-rules.mjs +2 -2
  39. package/esm2022/app/reports/filter-text.mjs +154 -0
  40. package/esm2022/app/reports/format.mjs +3 -2
  41. package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +1 -1
  42. package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
  43. package/esm2022/app/reports/interfaces/report-export-lines-input.interface.mjs +1 -1
  44. package/esm2022/app/reports/interfaces/report-export-snapshot.interface.mjs +1 -1
  45. package/esm2022/app/reports/interfaces/report-saved-filter-changes.interface.mjs +2 -0
  46. package/esm2022/app/reports/interfaces/report-saved-filter.interface.mjs +2 -0
  47. package/esm2022/app/reports/interfaces/report-state-snapshot.interface.mjs +2 -0
  48. package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
  49. package/esm2022/app/reports/interfaces/report-tile-state.interface.mjs +1 -1
  50. package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +1 -1
  51. package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
  52. package/esm2022/app/reports/mark-click.mjs +2 -2
  53. package/esm2022/app/reports/report-chat-viewer-state.mjs +3 -3
  54. package/esm2022/app/reports/report-date-presets.mjs +2 -2
  55. package/esm2022/app/reports/report-filter-items.mjs +24 -2
  56. package/esm2022/app/reports/report-saved-filters.mjs +92 -0
  57. package/esm2022/app/reports/report-state.mjs +169 -0
  58. package/esm2022/app/reports/report-viewer-features.mjs +2 -4
  59. package/esm2022/app/reports/services/report-filter-state.service.mjs +83 -310
  60. package/esm2022/app/reports/text.mjs +59 -13
  61. package/esm2022/app/reports/tile-data-state.mjs +4 -4
  62. package/esm2022/app/reports/tile-loads.mjs +5 -6
  63. package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +172 -98
  64. package/esm2022/app/reports/views/report/report.component.mjs +23 -22
  65. package/esm2022/public_api.mjs +4 -8
  66. package/fesm2022/{firestitch-report-echarts-DHEH_K_q.mjs → firestitch-report-echarts-DKXlgu1D.mjs} +2 -2
  67. package/fesm2022/{firestitch-report-echarts-DHEH_K_q.mjs.map → firestitch-report-echarts-DKXlgu1D.mjs.map} +1 -1
  68. package/fesm2022/{firestitch-report-firestitch-report-ZcHTnNKq.mjs → firestitch-report-firestitch-report-Bnv62suw.mjs} +2523 -2814
  69. package/fesm2022/firestitch-report-firestitch-report-Bnv62suw.mjs.map +1 -0
  70. package/fesm2022/firestitch-report.mjs +1 -1
  71. package/package.json +1 -1
  72. package/public_api.d.ts +3 -7
  73. package/app/reports/components/report-view-picker/report-view-picker.component.d.ts +0 -21
  74. package/app/reports/dialogs/report-view/report-view-dialog.component.d.ts +0 -13
  75. package/app/reports/interfaces/report-view-create.interface.d.ts +0 -7
  76. package/app/reports/interfaces/report-view-deleted.interface.d.ts +0 -4
  77. package/app/reports/interfaces/report-view-dialog-data.interface.d.ts +0 -7
  78. package/app/reports/interfaces/report-view-dropped.interface.d.ts +0 -5
  79. package/app/reports/interfaces/report-view-menu-item.interface.d.ts +0 -10
  80. package/app/reports/interfaces/report-view-summary.interface.d.ts +0 -11
  81. package/app/reports/interfaces/report-view.interface.d.ts +0 -7
  82. package/app/reports/interfaces/report-views.interface.d.ts +0 -7
  83. package/app/reports/report-view-config.d.ts +0 -34
  84. package/app/reports/report-view-menu.d.ts +0 -15
  85. package/app/reports/services/report-view.service.d.ts +0 -39
  86. package/esm2022/app/reports/components/report-view-picker/report-view-picker.component.mjs +0 -115
  87. package/esm2022/app/reports/dialogs/report-view/report-view-dialog.component.mjs +0 -52
  88. package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +0 -2
  89. package/esm2022/app/reports/interfaces/report-view-create.interface.mjs +0 -2
  90. package/esm2022/app/reports/interfaces/report-view-deleted.interface.mjs +0 -2
  91. package/esm2022/app/reports/interfaces/report-view-dialog-data.interface.mjs +0 -2
  92. package/esm2022/app/reports/interfaces/report-view-dropped.interface.mjs +0 -2
  93. package/esm2022/app/reports/interfaces/report-view-menu-item.interface.mjs +0 -2
  94. package/esm2022/app/reports/interfaces/report-view-summary.interface.mjs +0 -2
  95. package/esm2022/app/reports/interfaces/report-view.interface.mjs +0 -2
  96. package/esm2022/app/reports/interfaces/report-views.interface.mjs +0 -2
  97. package/esm2022/app/reports/report-view-config.mjs +0 -587
  98. package/esm2022/app/reports/report-view-menu.mjs +0 -119
  99. package/esm2022/app/reports/services/report-view.service.mjs +0 -218
  100. package/fesm2022/firestitch-report-firestitch-report-ZcHTnNKq.mjs.map +0 -1
@@ -31,8 +31,14 @@ export const TEXT_TABLE_MARGIN = 4;
31
31
  // A value token: {{value.total_visits}}. Keys are lowercase letters, digits and
32
32
  // underscores, starting with a letter.
33
33
  export const VALUE_TOKEN_PATTERN = /\{\{\s*value\.([a-z][a-z0-9_]*)\s*\}\}/gi;
34
+ // A field token, anything a block may carry that is not a value:
35
+ // {{page.number}}, {{page.name}}, {{report.name}} and {{filter.<id>}}, the id
36
+ // digits only. Exactly these, so it matches neither a value token nor any
37
+ // other braces the words hold.
38
+ export const FIELD_TOKEN_PATTERN = /\{\{\s*(page\.number|page\.name|report\.name|filter\.\d+)\s*\}\}/gi;
34
39
  // What a value with no number reads as — it failed, it is not on this page, or
35
- // its query found nothing — so a block never prints a raw token.
40
+ // its query found nothing — so a block never prints a raw token. A filter
41
+ // token naming no filter of the report reads as it too.
36
42
  export const VALUE_EMPTY_TEXT = '—';
37
43
  // What a value reads as while its number is on its way (on screen only: an
38
44
  // export waits for every number).
@@ -47,24 +53,64 @@ export function valueText(value) {
47
53
  }
48
54
  // What a table's cells are joined by where it reads as lines of text.
49
55
  const TABLE_CELL_SEPARATOR = ' · ';
50
- // The tokens a block may carry, with what fills each. {{page.number}} is the
51
- // page's position among the report's pages (1-based), which is what makes a
52
- // shared footer number every page correctly.
53
- const TOKENS = {
54
- 'page.number': (context) => String(context.pageNumber),
55
- 'page.name': (context) => context.pageName,
56
- 'report.name': (context) => context.reportName,
56
+ // The page and report fields: what each is called where an author picks and
57
+ // sees it (the Insert field menus of the text editor and of a title, and the
58
+ // editor's chips), in those menus' order, and what fills it. {{page.number}}
59
+ // is the page's position among the report's pages (1-based), which is what
60
+ // makes a shared footer number every page correctly.
61
+ const PAGE_FIELDS = {
62
+ 'page.number': { name: 'Page number', text: (context) => String(context.pageNumber) },
63
+ 'page.name': { name: 'Page name', text: (context) => context.pageName },
64
+ 'report.name': { name: 'Report name', text: (context) => context.reportName },
57
65
  };
66
+ const FILTER_FIELD_PREFIX = 'filter.';
67
+ // Every field a block or a title of this context can carry, in the order the
68
+ // Insert field menus list them: the page and report fields, then each filter
69
+ // of the report in the filter bar's order.
70
+ export function textFields(context) {
71
+ return [
72
+ ...Object.entries(PAGE_FIELDS).map(([field, { name }]) => ({ field, name })),
73
+ ...Object.entries(context.filters ?? {})
74
+ .sort(([, a], [, b]) => a.order - b.order)
75
+ .map(([id, filter]) => ({
76
+ field: `${FILTER_FIELD_PREFIX}${id}`,
77
+ name: filter.name,
78
+ })),
79
+ ];
80
+ }
81
+ // A field's token: {{page.number}}, {{filter.12}}.
82
+ export function fieldToken(field) {
83
+ return `{{${field}}}`;
84
+ }
58
85
  // Replace every {{token}} in the html. Values are html-escaped: a page named
59
86
  // "R&D <draft>" must read as that, not as markup. A {{value.<key>}} token reads
60
87
  // as its formatted number, the ellipsis while that loads, else the em dash.
61
88
  export function fillTextTokens(html, context) {
62
89
  return html
63
90
  .replace(VALUE_TOKEN_PATTERN, (match, key) => escapeHtml(valueText(context.values?.[key.toLowerCase()])))
64
- .replace(/\{\{\s*([a-z.]+)\s*\}\}/gi, (match, token) => {
65
- const fill = TOKENS[token.toLowerCase()];
66
- return fill ? escapeHtml(fill(context)) : match;
67
- });
91
+ .replace(FIELD_TOKEN_PATTERN, (match, field) => escapeHtml(fieldText(field, context)));
92
+ }
93
+ // A component's title as it reads: its page, report and filter fields filled
94
+ // with the same words as a block's, e.g. 'Sign-ups — {{filter.12}}' reads
95
+ // 'Sign-ups — September 2026'. Never escaped: the canvas binds a title as
96
+ // text, and the exports draw plain strings. A value belongs to a page's text,
97
+ // never a title, so a value token reads as the em dash. '' for no title.
98
+ export function fillTitleTokens(title, context) {
99
+ return (title ?? '')
100
+ .replace(VALUE_TOKEN_PATTERN, VALUE_EMPTY_TEXT)
101
+ .replace(FIELD_TOKEN_PATTERN, (match, field) => fieldText(field, context));
102
+ }
103
+ // What a field token reads as, its field written as FIELD_TOKEN_PATTERN
104
+ // captures it ('page.name', 'filter.12'). A {{filter.<id>}} token reads as its
105
+ // filter's wording, the ellipsis while a select's names load, else the em
106
+ // dash: the filter could not be read, or the report has no group of that id.
107
+ export function fieldText(field, context) {
108
+ const name = field.toLowerCase();
109
+ if (!name.startsWith(FILTER_FIELD_PREFIX)) {
110
+ return PAGE_FIELDS[name]?.text(context) ?? VALUE_EMPTY_TEXT;
111
+ }
112
+ const filter = context.filters?.[Number(name.slice(FILTER_FIELD_PREFIX.length))];
113
+ return filter?.text ?? (filter?.loading ? VALUE_LOADING_TEXT : VALUE_EMPTY_TEXT);
68
114
  }
69
115
  // Walk a block's html into what the exports draw: the words between its tables
70
116
  // as paragraphs of styled runs, and each table as a grid of cells. Tokens are
@@ -426,4 +472,4 @@ export function escapeHtml(value) {
426
472
  .replace(/>/g, '&gt;')
427
473
  .replace(/"/g, '&quot;');
428
474
  }
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRFQUE0RTtBQUM1RSw4Q0FBOEM7QUFDOUMsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UseUVBQXlFO0FBQ3pFLDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBQ3pFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSw4QkFBOEI7QUFHOUIsOEVBQThFO0FBQzlFLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQTJCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFFNUMsOEVBQThFO0FBQzlFLGlFQUFpRTtBQUNqRSw4RUFBOEU7QUFDOUUsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFDNUMsa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEUsNEVBQTRFO0FBQzVFLFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUE4Qm5DLGdGQUFnRjtBQUNoRix1Q0FBdUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsMENBQTBDLENBQUM7QUFFOUUsK0VBQStFO0FB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QVM7UUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUcsQ0FBQztBQUVELGlEQUFpRDtBQUNqRCxTQUFTLFlBQVksQ0FBQyxPQUFpQyxFQUFFLElBQVksRUFBRSxLQUFhO0lBQ2xGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLE9BQU8sS0FBSztTQUNULE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1NBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1NBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1NBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRleHQgYmxvY2tzIOKAlCBzaGFyZWQgYnkgdGhlIGNhbnZhcyBhbmQgYm90aCBleHBvcnRzLCBzbyBhIGJsb2NrIHJlYWRzIHRoZVxuLy8gc2FtZSBvbiBzY3JlZW4sIGluIHRoZSBkZWNrIGFuZCBpbiB0aGUgUERGLlxuLy9cbi8vIEEgYmxvY2sncyBodG1sIGFycml2ZXMgYWxyZWFkeSByZWJ1aWx0IHNlcnZlci1zaWRlIGZyb20gYSBzbWFsbCBhbGxvd2xpc3Rcbi8vIChSZXBvcnRUZXh0SHRtbCk6IHAsIGgxLWgzLCBzdHJvbmcsIGVtLCB1LCBzLCB1bC9vbC9saSwgYnIsIGEsIGFuZCBzcGFuIHdpdGhcbi8vIGNvbG9yIC8gYmFja2dyb3VuZC1jb2xvciAvIGZvbnQtc2l6ZSAvIGZvbnQtd2VpZ2h0IC8gZm9udC1mYW1pbHksIHBsdXNcbi8vIHRleHQtYWxpZ24gb24gYSBibG9jay4gQSB0YWJsZSBtYXkgc2l0IGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBibG9jazogdGFibGUsXG4vLyB0aGVhZCwgdGJvZHksIHRmb290LCB0ciwgdGggYW5kIHRkLCBhIHdpZHRoIG9uIHRoZSB0YWJsZSwgYW5kIG9uIGEgY2VsbFxuLy8gdGV4dC1hbGlnbiwgdmVydGljYWwtYWxpZ24sIGJhY2tncm91bmQtY29sb3IsIGEgd2lkdGggYW5kIGEgY29sc3BhbiBvclxuLy8gcm93c3Bhbi4gSXRzIGdyaWQgbGluZXMsIHBhZGRpbmcgYW5kIG1hcmdpbiBhcmUgbmV2ZXIgc3RvcmVkOiBldmVyeSByZW5kZXJlclxuLy8gZHJhd3MgdGhlbSBmcm9tIHRoZSBURVhUX1RBQkxFXyogY29uc3RhbnRzIGJlbG93LiBUcmFuc3BhcmVudCwgY3VycmVudGNvbG9yXG4vLyBhbmQgdGhlIENTUy13aWRlIGtleXdvcmRzIChpbmhlcml0LCBpbml0aWFsLCDigKYpIGFyZSBub3QgY29sb3JzLCBzbyB0aGVcbi8vIHNlcnZlciBkcm9wcyB0aGVtIGFuZCBoZXhDb2xvciByZWFkcyB0aGVtIGFzIG5vIGNvbG9yLiBFdmVyeXRoaW5nIGhlcmUgb25seVxuLy8gaGFzIHRvIHVuZGVyc3RhbmQgdGhhdCBzZXQuXG5cblxuLy8gQm9keSB0ZXh0IHNpemUsIHBvaW50cywgYW5kIHRoZSBoZWFkaW5nIHNpemVzIOKAlCB0aGUgc2FtZSBudW1iZXJzIHRoZSBjYW52YXNcbi8vIHN0eWxlc2hlZXQgdXNlcywgc28gYW4gdW5zdHlsZWQgcGFyYWdyYXBoIGlzIG9uZSBzaXplIGV2ZXJ5d2hlcmUuXG5leHBvcnQgY29uc3QgREVGQVVMVF9URVhUX1NJWkUgPSAxMjtcbmV4cG9ydCBjb25zdCBIRUFESU5HX1RFWFRfU0laRVM6IFJlY29yZDxudW1iZXIsIG51bWJlcj4gPSB7IDE6IDI0LCAyOiAxOCwgMzogMTQgfTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RFWFRfQ09MT1IgPSAnIzFmMjkzMyc7XG5cbi8vIEEgdGFibGUncyBncmlkIGxpbmVzOiB0aGVpciBjb2xvciwgYW5kIHRoZWlyIHdpZHRoIGluIHBvaW50cyAoMC43NXB0IGlzIG9uZVxuLy8gcGl4ZWwgb24gdGhlIGNhbnZhcykuIFRoZSBodG1sIG5ldmVyIHN0b3JlcyBib3JkZXJzIG9yIHBhZGRpbmdcbi8vIChSZXBvcnRUZXh0SHRtbCBkcm9wcyB0aGVtKSwgc28gdGhlIGNhbnZhcywgdGhlIGVkaXRvciBhbmQgYm90aCBleHBvcnRzIGFsbFxuLy8gZHJhdyB0aGlzIG9uZSBsb29rLlxuZXhwb3J0IGNvbnN0IFRFWFRfVEFCTEVfQk9SREVSX0NPTE9SID0gJyNjYmQyZDknO1xuZXhwb3J0IGNvbnN0IFRFWFRfVEFCTEVfQk9SREVSX1dJRFRIID0gMC43NTtcbi8vIFRoZSBzcGFjZSBiZXR3ZWVuIGEgY2VsbCdzIGdyaWQgbGluZXMgYW5kIGl0cyB3b3JkcywgaW4gcG9pbnRzLlxuZXhwb3J0IGNvbnN0IFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HID0geyB2ZXJ0aWNhbDogMiwgaG9yaXpvbnRhbDogNCB9O1xuLy8gVGhlIHNwYWNlIGFib3ZlIGFuZCBiZWxvdyBhIHRhYmxlLCBiZXR3ZWVuIGl0IGFuZCB0aGUgd29yZHMgYXJvdW5kIGl0LCBpblxuLy8gcG9pbnRzLlxuZXhwb3J0IGNvbnN0IFRFWFRfVEFCTEVfTUFSR0lOID0gNDtcblxuLy8gQSBsaXZlIHZhbHVlIGEgYmxvY2sgc2hvd3MgaW5saW5lLCB3cml0dGVuIHt7dmFsdWUuPGtleT59fSBpbiBpdHMgaHRtbDogd2hhdFxuLy8gdGhlIHZhbHVlIGlzLCBhbmQgaXRzIGZvcm1hdHRlZCB0ZXh0IG9uY2UgbG9hZGVkLiBWYWx1ZXMgYmVsb25nIHRvIHRoZSBwYWdlXG4vLyB0aGUgYmxvY2sgc2l0cyBvbiAodGhlIG1hc3RlciBmb3IgYSBoZWFkZXIgb3IgZm9vdGVyIGJsb2NrKSwgc28gdGhlIGtleSBpc1xuLy8gdW5pcXVlIHdpdGhpbiB0aGF0IHBhZ2UuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRWYWx1ZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgLy8gQWJzZW50IHdoaWxlIGxvYWRpbmcsIGFuZCB3aGVuIHRoZSB2YWx1ZSdzIHF1ZXJ5IGZhaWxlZC5cbiAgdGV4dD86IHN0cmluZztcbiAgLy8gSXRzIG51bWJlciBoYXMgYmVlbiBhc2tlZCBmb3IgYW5kIGhhcyBub3QgYXJyaXZlZCB5ZXQuXG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICAvLyBBIGZvcm11bGEncyBvcGVyYW5kIGtleXMsIGxvd2VyY2FzZTogdGhlIHZhbHVlcyBpdCByZWFkcywgd2hpY2ggdGhlIHBhZ2VcbiAgLy8gcmVhZHMgdG9vIHdoaWxlIHRoZSBmb3JtdWxhIGlzIHNob3duLlxuICByZWFkcz86IHN0cmluZ1tdO1xufVxuXG4vLyBXaGF0IHRoZSB0b2tlbnMgaW4gYSBibG9jaydzIGh0bWwgYXJlIGZpbGxlZCB3aXRoLCBwZXIgcGFnZS5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFRva2VuQ29udGV4dCB7XG4gIHBhZ2VOdW1iZXI6IG51bWJlcjtcbiAgcGFnZU5hbWU6IHN0cmluZztcbiAgcmVwb3J0TmFtZTogc3RyaW5nO1xuICAvLyBUaGUgcGFnZSdzIHZhbHVlcywgYnkgbG93ZXJjYXNlIGtleS5cbiAgdmFsdWVzPzogUmVjb3JkPHN0cmluZywgVGV4dFZhbHVlPjtcbiAgLy8gVGhlIHJlcG9ydCBwYWdlIHdob3NlIHZhbHVlcyB0aGUgYmxvY2sgc2hvd3M6IHRoZSBwYWdlIGl0IHNpdHMgb24sIG9yIHRoZVxuICAvLyBtYXN0ZXIgZm9yIGEgaGVhZGVyIG9yIGZvb3RlciBibG9jay4gSXQgaXMgYWxzbyB0aGUgZWRpdG9yJ3MgY2xpcGJvYXJkXG4gIC8vIHNjb3BlLCBzbyBhIGNvcGllZCBjaGlwIHBhc3RlcyBiYWNrIGFzIGEgY2hpcCBvbmx5IG9uIHRoYXQgcGFnZS5cbiAgdmFsdWVQYWdlSWQ/OiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBBIHZhbHVlIHRva2VuOiB7e3ZhbHVlLnRvdGFsX3Zpc2l0c319LiBLZXlzIGFyZSBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZFxuLy8gdW5kZXJzY29yZXMsIHN0YXJ0aW5nIHdpdGggYSBsZXR0ZXIuXG5leHBvcnQgY29uc3QgVkFMVUVfVE9LRU5fUEFUVEVSTiA9IC9cXHtcXHtcXHMqdmFsdWVcXC4oW2Etel1bYS16MC05X10qKVxccypcXH1cXH0vZ2k7XG5cbi8vIFdoYXQgYSB2YWx1ZSB3aXRoIG5vIG51bWJlciByZWFkcyBhcyDigJQgaXQgZmFpbGVkLCBpdCBpcyBub3Qgb24gdGhpcyBwYWdlLCBvclxuLy8gaXRzIHF1ZXJ5IGZvdW5kIG5vdGhpbmcg4oCUIHNvIGEgYmxvY2sgbmV2ZXIgcHJpbnRzIGEgcmF3IHRva2VuLlxuZXhwb3J0IGNvbnN0IFZBTFVFX0VNUFRZX1RFWFQgPSAn4oCUJztcblxuLy8gV2hhdCBhIHZhbHVlIHJlYWRzIGFzIHdoaWxlIGl0cyBudW1iZXIgaXMgb24gaXRzIHdheSAob24gc2NyZWVuIG9ubHk6IGFuXG4vLyBleHBvcnQgd2FpdHMgZm9yIGV2ZXJ5IG51bWJlcikuXG5leHBvcnQgY29uc3QgVkFMVUVfTE9BRElOR19URVhUID0gJ+KApic7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZVRva2VuKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7e3ZhbHVlLiR7a2V5fX19YDtcbn1cblxuLy8gV2hhdCBhIHZhbHVlIHJlYWRzIGFzIGluIGEgYmxvY2ssIHZpZXdlZCBvciBlZGl0ZWQ6IGl0cyBmb3JtYXR0ZWQgbnVtYmVyLFxuLy8gdGhlIGVsbGlwc2lzIHdoaWxlIHRoYXQgbG9hZHMsIGVsc2UgdGhlIGVtIGRhc2guXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVUZXh0KHZhbHVlOiBUZXh0VmFsdWUgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWU/LnRleHQgPz8gKHZhbHVlPy5sb2FkaW5nID8gVkFMVUVfTE9BRElOR19URVhUIDogVkFMVUVfRU1QVFlfVEVYVCk7XG59XG5cbi8vIE9uZSBzdHlsZWQgc3RyZXRjaCBvZiB0ZXh0LlxuZXhwb3J0IGludGVyZmFjZSBUZXh0UnVuIHtcbiAgdGV4dDogc3RyaW5nO1xuICBib2xkPzogYm9vbGVhbjtcbiAgaXRhbGljPzogYm9vbGVhbjtcbiAgdW5kZXJsaW5lPzogYm9vbGVhbjtcbiAgc3RyaWtlPzogYm9vbGVhbjtcbiAgLy8gI3JyZ2diYlxuICBjb2xvcj86IHN0cmluZztcbiAgaGlnaGxpZ2h0Pzogc3RyaW5nO1xuICAvLyBwb2ludHNcbiAgZm9udFNpemU/OiBudW1iZXI7XG4gIGZvbnRGYWNlPzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xufVxuXG4vLyBPbmUgbGluZS1zdGFydGluZyBibG9jazogYSBwYXJhZ3JhcGgsIGEgaGVhZGluZyBvciBhIGxpc3QgaXRlbS5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFBhcmFncmFwaCB7XG4gIHJ1bnM6IFRleHRSdW5bXTtcbiAgYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgfCAnanVzdGlmeSc7XG4gIGJ1bGxldD86ICdidWxsZXQnIHwgJ251bWJlcic7XG4gIGhlYWRpbmc/OiBudW1iZXI7XG59XG5cbi8vIE9uZSBjZWxsIG9mIGEgdGFibGUgaW4gYSBibG9jay4gSXRzIHdvcmRzIGFyZSBwYXJhZ3JhcGhzIGxpa2UgYW55IG90aGVyczogYVxuLy8gPGJyPiBpbiBhIGNlbGwgc3RhcnRzIGEgbmV3IG9uZSwgYW5kIGEgaGVhZGVyIGNlbGwncyBydW5zIGFyZSBib2xkLiBFYWNoXG4vLyBwYXJhZ3JhcGggY2FycmllcyB0aGUgY2VsbCdzIGFsaWdubWVudCB1bmxlc3MgaXQgaGFzIGl0cyBvd24sIHNvIGV2ZXJ5XG4vLyByZW5kZXJlciByZWFkcyBhbGlnbm1lbnQgYW5kIHdlaWdodCBmcm9tIHRoZSBwYXJhZ3JhcGhzLlxuZXhwb3J0IGludGVyZmFjZSBUZXh0VGFibGVDZWxsIHtcbiAgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdO1xuICBjb2xTcGFuOiBudW1iZXI7XG4gIC8vIEN1dCBhdCB0aGUgbGFzdCByb3cgb2YgdGhlIGNlbGwncyBzZWN0aW9uLCBhcyBhIGJyb3dzZXIgZHJhd3MgaXQuXG4gIHJvd1NwYW46IG51bWJlcjtcbiAgLy8gV2hlcmUgdGhlIGNlbGwgc2l0cyBpbiB0aGUgZ3JpZCAodGFibGVHcmlkKSwgMC1iYXNlZDogaXRzIHRvcCByb3cgYW5kIGl0c1xuICAvLyBsZWZ0IGNvbHVtbi5cbiAgcm93OiBudW1iZXI7XG4gIGNvbHVtbjogbnVtYmVyO1xuICAvLyBJdHMgdGV4dC1hbGlnbiwgZWxzZSBjZW50ZXJlZCBmb3IgYSBoZWFkZXIgY2VsbCBhbmQgbGVmdCBmb3IgYW55IG90aGVyLlxuICBhbGlnbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnIHwgJ2p1c3RpZnknO1xuICB2YWxpZ24/OiAndG9wJyB8ICdtaWRkbGUnIHwgJ2JvdHRvbSc7XG4gIC8vIEl0cyBiYWNrZ3JvdW5kLCAjcnJnZ2JiLlxuICBmaWxsPzogc3RyaW5nO1xufVxuXG4vLyBBIHRhYmxlJ3Mgcm93LiBSb3dzIGNvbWUgaW4gdGhlIG9yZGVyIGEgYnJvd3NlciBkcmF3cyB0aGVtOiB0aGUgaGVhZCwgdGhlXG4vLyBib2R5LCB0aGVuIHRoZSBmb290LlxuZXhwb3J0IGludGVyZmFjZSBUZXh0VGFibGVSb3cge1xuICBzZWN0aW9uOiAnaGVhZCcgfCAnYm9keScgfCAnZm9vdCc7XG4gIGNlbGxzOiBUZXh0VGFibGVDZWxsW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dFRhYmxlIHtcbiAgcm93czogVGV4dFRhYmxlUm93W107XG4gIC8vIEhvdyBtYW55IGNvbHVtbnMgdGhlIGdyaWQgaGFzOiB0aGUgd2lkZXN0IHJpZ2h0IGVkZ2Ugb2YgYW55IGNlbGwuXG4gIGNvbHVtbnM6IG51bWJlcjtcbn1cblxuLy8gQSBibG9jayBhcyB0aGUgZXhwb3J0cyBkcmF3IGl0OiBpdHMgd29yZHMsIHNwbGl0IGF0IGVhY2ggdGFibGUgaXQgaG9sZHMuXG5leHBvcnQgdHlwZSBUZXh0QmxvY2sgPVxuICB8IHsga2luZDogJ3RleHQnOyBwYXJhZ3JhcGhzOiBUZXh0UGFyYWdyYXBoW10gfVxuICB8IHsga2luZDogJ3RhYmxlJzsgdGFibGU6IFRleHRUYWJsZSB9O1xuXG4vLyBXaGF0IGEgdGFibGUncyBjZWxscyBhcmUgam9pbmVkIGJ5IHdoZXJlIGl0IHJlYWRzIGFzIGxpbmVzIG9mIHRleHQuXG5jb25zdCBUQUJMRV9DRUxMX1NFUEFSQVRPUiA9ICcgwrcgJztcblxuLy8gVGhlIHRva2VucyBhIGJsb2NrIG1heSBjYXJyeSwgd2l0aCB3aGF0IGZpbGxzIGVhY2guIHt7cGFnZS5udW1iZXJ9fSBpcyB0aGVcbi8vIHBhZ2UncyBwb3NpdGlvbiBhbW9uZyB0aGUgcmVwb3J0J3MgcGFnZXMgKDEtYmFzZWQpLCB3aGljaCBpcyB3aGF0IG1ha2VzIGFcbi8vIHNoYXJlZCBmb290ZXIgbnVtYmVyIGV2ZXJ5IHBhZ2UgY29ycmVjdGx5LlxuY29uc3QgVE9LRU5TOiBSZWNvcmQ8c3RyaW5nLCAoY29udGV4dDogVGV4dFRva2VuQ29udGV4dCkgPT4gc3RyaW5nPiA9IHtcbiAgJ3BhZ2UubnVtYmVyJzogKGNvbnRleHQpID0+IFN0cmluZyhjb250ZXh0LnBhZ2VOdW1iZXIpLFxuICAncGFnZS5uYW1lJzogKGNvbnRleHQpID0+IGNvbnRleHQucGFnZU5hbWUsXG4gICdyZXBvcnQubmFtZSc6IChjb250ZXh0KSA9PiBjb250ZXh0LnJlcG9ydE5hbWUsXG59O1xuXG4vLyBSZXBsYWNlIGV2ZXJ5IHt7dG9rZW59fSBpbiB0aGUgaHRtbC4gVmFsdWVzIGFyZSBodG1sLWVzY2FwZWQ6IGEgcGFnZSBuYW1lZFxuLy8gXCJSJkQgPGRyYWZ0PlwiIG11c3QgcmVhZCBhcyB0aGF0LCBub3QgYXMgbWFya3VwLiBBIHt7dmFsdWUuPGtleT59fSB0b2tlbiByZWFkc1xuLy8gYXMgaXRzIGZvcm1hdHRlZCBudW1iZXIsIHRoZSBlbGxpcHNpcyB3aGlsZSB0aGF0IGxvYWRzLCBlbHNlIHRoZSBlbSBkYXNoLlxuZXhwb3J0IGZ1bmN0aW9uIGZpbGxUZXh0VG9rZW5zKGh0bWw6IHN0cmluZywgY29udGV4dDogVGV4dFRva2VuQ29udGV4dCk6IHN0cmluZyB7XG4gIHJldHVybiBodG1sXG4gICAgLnJlcGxhY2UoVkFMVUVfVE9LRU5fUEFUVEVSTiwgKG1hdGNoLCBrZXk6IHN0cmluZykgPT4gZXNjYXBlSHRtbChcbiAgICAgIHZhbHVlVGV4dChjb250ZXh0LnZhbHVlcz8uW2tleS50b0xvd2VyQ2FzZSgpXSksXG4gICAgKSlcbiAgICAucmVwbGFjZSgvXFx7XFx7XFxzKihbYS16Ll0rKVxccypcXH1cXH0vZ2ksIChtYXRjaCwgdG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZmlsbCA9IFRPS0VOU1t0b2tlbi50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgcmV0dXJuIGZpbGwgPyBlc2NhcGVIdG1sKGZpbGwoY29udGV4dCkpIDogbWF0Y2g7XG4gICAgfSk7XG59XG5cbi8vIFdhbGsgYSBibG9jaydzIGh0bWwgaW50byB3aGF0IHRoZSBleHBvcnRzIGRyYXc6IHRoZSB3b3JkcyBiZXR3ZWVuIGl0cyB0YWJsZXNcbi8vIGFzIHBhcmFncmFwaHMgb2Ygc3R5bGVkIHJ1bnMsIGFuZCBlYWNoIHRhYmxlIGFzIGEgZ3JpZCBvZiBjZWxscy4gVG9rZW5zIGFyZVxuLy8gZmlsbGVkIGZpcnN0IHNvIGEgcGFnZSBudW1iZXIgaXMganVzdCB0ZXh0IGJ5IHRoZW4uIFRoZXJlIGlzIGEgdGV4dCBwYXJ0IGZvclxuLy8gZXZlcnkgcnVuIG9mIG5vZGVzIHNwbGl0QXRUYWJsZXMgZmluZHMsIGV2ZW4gb25lIHRoYXQgaG9sZHMgbm8gd29yZHMsIHNvIHRoZVxuLy8gbnRoIHRleHQgcGFydCBpcyB0aGUgbnRoIHJ1biB0aGUgZXhwb3J0J3MgRE9NIG1lYXN1cmUgZmluZHMuXG5leHBvcnQgZnVuY3Rpb24gdGV4dEJsb2NrcyhodG1sOiBzdHJpbmcsIGNvbnRleHQ6IFRleHRUb2tlbkNvbnRleHQpOiBUZXh0QmxvY2tbXSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhgPGJvZHk+JHtmaWxsVGV4dFRva2VucyhodG1sLCBjb250ZXh0KX08L2JvZHk+YCwgJ3RleHQvaHRtbCcpO1xuICBjb25zdCBibG9ja3MgPSBzcGxpdEF0VGFibGVzKGRvY3VtZW50LmJvZHkpLm1hcCgocGFydCk6IFRleHRCbG9jayA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnQpKSB7XG4gICAgICByZXR1cm4geyBraW5kOiAndGFibGUnLCB0YWJsZTogcGFyc2VUYWJsZShwYXJ0KSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGNvbnN0IHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSA9IFtdO1xuICAgIGZyYWdtZW50LmFwcGVuZCguLi5wYXJ0KTtcbiAgICB3YWxrQmxvY2tzKGZyYWdtZW50LCBwYXJhZ3JhcGhzLCBudWxsKTtcblxuICAgIHJldHVybiB7IGtpbmQ6ICd0ZXh0JywgcGFyYWdyYXBocyB9O1xuICB9KTtcblxuICB0cmltQmxhbmtFbmQoYmxvY2tzKTtcblxuICByZXR1cm4gYmxvY2tzO1xufVxuXG4vLyBUaGUgYmxvY2sgYXMgcGFyYWdyYXBocyBhbG9uZSwgZm9yIGFueXRoaW5nIHRoYXQgZHJhd3Mgbm8gZ3JpZDogYSB0YWJsZSByZWFkc1xuLy8gYXMgYSBsaW5lIHBlciByb3csIGl0cyBjZWxscycgd29yZHMgam9pbmVkIGJ5ICcgwrcgJy5cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0UGFyYWdyYXBocyhodG1sOiBzdHJpbmcsIGNvbnRleHQ6IFRleHRUb2tlbkNvbnRleHQpOiBUZXh0UGFyYWdyYXBoW10ge1xuICByZXR1cm4gYmxvY2tQYXJhZ3JhcGhzKHRleHRCbG9ja3MoaHRtbCwgY29udGV4dCkpO1xufVxuXG4vLyBCbG9ja3MgdGV4dEJsb2NrcyBhbHJlYWR5IHdhbGtlZCwgYXMgdGV4dFBhcmFncmFwaHMgcmVhZHMgdGhlbS5cbmV4cG9ydCBmdW5jdGlvbiBibG9ja1BhcmFncmFwaHMoYmxvY2tzOiBUZXh0QmxvY2tbXSk6IFRleHRQYXJhZ3JhcGhbXSB7XG4gIHJldHVybiBibG9ja3MuZmxhdE1hcCgoYmxvY2spID0+IGJsb2NrLmtpbmQgPT09ICd0ZXh0J1xuICAgID8gYmxvY2sucGFyYWdyYXBoc1xuICAgIDogYmxvY2sudGFibGUucm93cy5tYXAocm93UGFyYWdyYXBoKSk7XG59XG5cbi8vIFRoZSBodG1sIGFzIHBsYWluIHRleHQg4oCUIHdoYXQgYSBibG9jayBzYXlzLCBmb3IgYW55dGhpbmcgdGhhdCBjYW5ub3Qgc3R5bGUgaXQuXG5leHBvcnQgZnVuY3Rpb24gdGV4dFBsYWluKGh0bWw6IHN0cmluZywgY29udGV4dDogVGV4dFRva2VuQ29udGV4dCk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0UGFyYWdyYXBocyhodG1sLCBjb250ZXh0KVxuICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJ1bnMubWFwKChydW4pID0+IHJ1bi50ZXh0KS5qb2luKCcnKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8vIEEgYmxvY2sncyB0b3AtbGV2ZWwgbm9kZXMgc3BsaXQgYXQgZWFjaCB0YWJsZTogZWFjaCB0YWJsZSBvbiBpdHMgb3duLCBhbmRcbi8vIGVhY2ggcnVuIG9mIHRoZSBub2RlcyBiZXR3ZWVuIHRoZW0gYXMgYSBsaXN0LiBBIHRhYmxlIHNpdHMgb25seSBhdCB0aGUgdG9wXG4vLyBsZXZlbCAoUmVwb3J0VGV4dEh0bWwgZmxhdHRlbnMgYW55IG90aGVyKSwgc28gdGhpcyBpcyB0aGUgd2hvbGUgc3BsaXQuXG4vLyB0ZXh0QmxvY2tzIGFuZCB0aGUgZXhwb3J0J3MgbWVhc3VyZSBvZiB0aGUgcmVuZGVyZWQgYmxvY2sgYm90aCBzcGxpdCBoZXJlLlxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QXRUYWJsZXMocGFyZW50OiBOb2RlKTogKE5vZGVbXSB8IEhUTUxUYWJsZUVsZW1lbnQpW10ge1xuICBjb25zdCBwYXJ0czogKE5vZGVbXSB8IEhUTUxUYWJsZUVsZW1lbnQpW10gPSBbXTtcbiAgbGV0IHJ1bjogTm9kZVtdIHwgbnVsbCA9IG51bGw7XG5cbiAgcGFyZW50LmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnVEFCTEUnKSB7XG4gICAgICBwYXJ0cy5wdXNoKG5vZGUgYXMgSFRNTFRhYmxlRWxlbWVudCk7XG4gICAgICBydW4gPSBudWxsO1xuICAgIH0gZWxzZSBpZiAocnVuKSB7XG4gICAgICBydW4ucHVzaChub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnVuID0gW25vZGVdO1xuICAgICAgcGFydHMucHVzaChydW4pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBBIHRhYmxlIGFzIGEgZ3JpZCBvZiBjZWxscywgZWFjaCBob2xkaW5nIGl0cyB3b3JkcyBhcyBwYXJhZ3JhcGhzLiBSb3dzIGNvbWVcbi8vIGFzIGEgYnJvd3NlciBkcmF3cyB0aGVtLCB0aGUgaGVhZCBmaXJzdCBhbmQgdGhlIGZvb3QgbGFzdCwgd2hhdGV2ZXIgb3JkZXIgdGhlXG4vLyBodG1sIHdyaXRlcyBpdHMgc2VjdGlvbnMgaW4uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUYWJsZShlbGVtZW50OiBIVE1MVGFibGVFbGVtZW50KTogVGV4dFRhYmxlIHtcbiAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20oZWxlbWVudC5yb3dzLCAocm93KTogVGV4dFRhYmxlUm93ID0+ICh7XG4gICAgc2VjdGlvbjogdGFibGVTZWN0aW9uKHJvdyksXG4gICAgY2VsbHM6IEFycmF5LmZyb20ocm93LmNlbGxzLCB0YWJsZUNlbGwpLFxuICB9KSk7XG5cbiAgcmV0dXJuIHRhYmxlR3JpZCh7IHJvd3MsIGNvbHVtbnM6IDAgfSk7XG59XG5cbi8vIFdoZXJlIGVhY2ggY2VsbCBzaXRzLCBieSB0aGUgSFRNTCB0YWJsZSBhbGdvcml0aG06IGEgY2VsbCB0YWtlcyB0aGUgZmlyc3Rcbi8vIGNvbHVtbiBvZiBpdHMgcm93IHRoYXQgbm8gY2VsbCBzcGFubmluZyBkb3duIGZyb20gYSByb3cgYWJvdmUgaG9sZHMuIEEgcm93c3BhblxuLy8gc3RvcHMgYXQgdGhlIGxhc3Qgcm93IG9mIGl0cyBzZWN0aW9uLCBhcyBhIGJyb3dzZXIgZHJhd3MgaXQsIGFuZCB0aGUgZ3JpZCBpc1xuLy8gYXMgd2lkZSBhcyB0aGUgd2lkZXN0IHJpZ2h0IGVkZ2Ugb2YgYW55IGNlbGwuXG5leHBvcnQgZnVuY3Rpb24gdGFibGVHcmlkKHRhYmxlOiBUZXh0VGFibGUpOiBUZXh0VGFibGUge1xuICBjb25zdCB0YWtlbjogYm9vbGVhbltdW10gPSB0YWJsZS5yb3dzLm1hcCgoKSA9PiBbXSk7XG4gIGxldCBjb2x1bW5zID0gMDtcblxuICBjb25zdCByb3dzID0gdGFibGUucm93cy5tYXAoKHJvdywgaW5kZXgpOiBUZXh0VGFibGVSb3cgPT4ge1xuICAgIGNvbnN0IHNlY3Rpb25FbmQgPSByb3dTZWN0aW9uRW5kKHRhYmxlLnJvd3MsIGluZGV4KTtcbiAgICBsZXQgY29sdW1uID0gMDtcblxuICAgIGNvbnN0IGNlbGxzID0gcm93LmNlbGxzLm1hcCgoY2VsbCk6IFRleHRUYWJsZUNlbGwgPT4ge1xuICAgICAgd2hpbGUgKHRha2VuW2luZGV4XVtjb2x1bW5dKSB7XG4gICAgICAgIGNvbHVtbisrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwbGFjZWQgPSB7IC4uLmNlbGwsIHJvdzogaW5kZXgsIGNvbHVtbiwgcm93U3BhbjogTWF0aC5taW4oY2VsbC5yb3dTcGFuLCBzZWN0aW9uRW5kIC0gaW5kZXgpIH07XG4gICAgICBvY2N1cHkodGFrZW4sIHBsYWNlZCk7XG4gICAgICBjb2x1bW4gKz0gcGxhY2VkLmNvbFNwYW47XG4gICAgICBjb2x1bW5zID0gTWF0aC5tYXgoY29sdW1ucywgY29sdW1uKTtcblxuICAgICAgcmV0dXJuIHBsYWNlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IC4uLnJvdywgY2VsbHMgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgcm93cywgY29sdW1ucyB9O1xufVxuXG5mdW5jdGlvbiB0YWJsZVNlY3Rpb24ocm93OiBIVE1MVGFibGVSb3dFbGVtZW50KTogVGV4dFRhYmxlUm93WydzZWN0aW9uJ10ge1xuICBjb25zdCBzZWN0aW9uID0gcm93LnBhcmVudEVsZW1lbnQ/Lm5vZGVOYW1lO1xuXG4gIHJldHVybiBzZWN0aW9uID09PSAnVEhFQUQnID8gJ2hlYWQnIDogc2VjdGlvbiA9PT0gJ1RGT09UJyA/ICdmb290JyA6ICdib2R5Jztcbn1cblxuLy8gT25lIHRoIG9yIHRkLiBBIGhlYWRlciBjZWxsJ3MgcnVucyBhcmUgYm9sZCwgYW5kIGV2ZXJ5IHBhcmFncmFwaCB0YWtlcyB0aGVcbi8vIGNlbGwncyB0ZXh0LWFsaWduIHVubGVzcyBpdCBoYXMgaXRzIG93bjogdGhlIGRlZmF1bHQgbG9vayBjZW50ZXJzIGEgaGVhZGVyXG4vLyBjZWxsIGFuZCBwdXRzIGFueSBvdGhlciBvbiB0aGUgbGVmdC5cbmZ1bmN0aW9uIHRhYmxlQ2VsbChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCk6IFRleHRUYWJsZUNlbGwge1xuICBjb25zdCBoZWFkZXIgPSBjZWxsLm5vZGVOYW1lID09PSAnVEgnO1xuICBjb25zdCBhbGlnbiA9IGNlbGxBbGlnbihjZWxsLnN0eWxlLnRleHRBbGlnbikgPz8gKGhlYWRlciA/ICdjZW50ZXInIDogJ2xlZnQnKTtcbiAgY29uc3QgdmFsaWduID0gY2VsbC5zdHlsZS52ZXJ0aWNhbEFsaWduO1xuICBjb25zdCBwYXJhZ3JhcGhzOiBUZXh0UGFyYWdyYXBoW10gPSBbXTtcblxuICB3YWxrQmxvY2tzKGNlbGwsIHBhcmFncmFwaHMsIG51bGwsIGhlYWRlciA/IHsgYm9sZDogdHJ1ZSB9IDoge30pO1xuXG4gIHJldHVybiB7XG4gICAgcGFyYWdyYXBoczogcGFyYWdyYXBocy5tYXAoKHBhcmFncmFwaCkgPT4gKHsgLi4ucGFyYWdyYXBoLCBhbGlnbjogcGFyYWdyYXBoLmFsaWduID8/IGFsaWduIH0pKSxcbiAgICBjb2xTcGFuOiBNYXRoLm1heCgxLCBjZWxsLmNvbFNwYW4pLFxuICAgIHJvd1NwYW46IE1hdGgubWF4KDEsIGNlbGwucm93U3BhbiksXG4gICAgcm93OiAwLFxuICAgIGNvbHVtbjogMCxcbiAgICBhbGlnbixcbiAgICB2YWxpZ246IHZhbGlnbiA9PT0gJ3RvcCcgfHwgdmFsaWduID09PSAnbWlkZGxlJyB8fCB2YWxpZ24gPT09ICdib3R0b20nID8gdmFsaWduIDogdW5kZWZpbmVkLFxuICAgIGZpbGw6IGNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID8gaGV4Q29sb3IoY2VsbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjZWxsQWxpZ24odmFsdWU6IHN0cmluZyk6IFRleHRUYWJsZUNlbGxbJ2FsaWduJ10gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09ICdsZWZ0JyB8fCB2YWx1ZSA9PT0gJ2NlbnRlcicgfHwgdmFsdWUgPT09ICdyaWdodCcgfHwgdmFsdWUgPT09ICdqdXN0aWZ5JyA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vLyBUaGUgaW5kZXgganVzdCBwYXN0IHRoZSBsYXN0IHJvdyBvZiB0aGUgc2VjdGlvbiB0aGUgcm93IGF0IGluZGV4IHNpdHMgaW4uXG5mdW5jdGlvbiByb3dTZWN0aW9uRW5kKHJvd3M6IFRleHRUYWJsZVJvd1tdLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGVuZCA9IGluZGV4ICsgMTtcbiAgd2hpbGUgKGVuZCA8IHJvd3MubGVuZ3RoICYmIHJvd3NbZW5kXS5zZWN0aW9uID09PSByb3dzW2luZGV4XS5zZWN0aW9uKSB7XG4gICAgZW5kKys7XG4gIH1cblxuICByZXR1cm4gZW5kO1xufVxuXG4vLyBNYXJrIHRoZSBncmlkIHNsb3RzIGEgcGxhY2VkIGNlbGwgY292ZXJzLlxuZnVuY3Rpb24gb2NjdXB5KHRha2VuOiBib29sZWFuW11bXSwgY2VsbDogVGV4dFRhYmxlQ2VsbCk6IHZvaWQge1xuICBmb3IgKGxldCByb3cgPSBjZWxsLnJvdzsgcm93IDwgY2VsbC5yb3cgKyBjZWxsLnJvd1NwYW47IHJvdysrKSB7XG4gICAgZm9yIChsZXQgY29sdW1uID0gY2VsbC5jb2x1bW47IGNvbHVtbiA8IGNlbGwuY29sdW1uICsgY2VsbC5jb2xTcGFuOyBjb2x1bW4rKykge1xuICAgICAgdGFrZW5bcm93XVtjb2x1bW5dID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQSB0YWJsZSByb3cgYXMgb25lIGxpbmUgb2YgdGV4dDogaXRzIGNlbGxzIGluIG9yZGVyLCBhIGNlbGwncyBvd24gbGluZXNcbi8vIGpvaW5lZCBieSBhIHNwYWNlLlxuZnVuY3Rpb24gcm93UGFyYWdyYXBoKHJvdzogVGV4dFRhYmxlUm93KTogVGV4dFBhcmFncmFwaCB7XG4gIHJldHVybiB7XG4gICAgcnVuczogcm93LmNlbGxzLmZsYXRNYXAoKGNlbGwsIGluZGV4KSA9PiBbXG4gICAgICAuLi4oaW5kZXggPyBbeyB0ZXh0OiBUQUJMRV9DRUxMX1NFUEFSQVRPUiB9XSA6IFtdKSxcbiAgICAgIC4uLmNlbGwucGFyYWdyYXBocy5mbGF0TWFwKChwYXJhZ3JhcGgsIGxpbmUpID0+IFsuLi4obGluZSA/IFt7IHRleHQ6ICcgJyB9XSA6IFtdKSwgLi4ucGFyYWdyYXBoLnJ1bnNdKSxcbiAgICBdKSxcbiAgfTtcbn1cblxuLy8gQW4gZW1wdHkgcGFyYWdyYXBoIGlzIGEgYmxhbmsgbGluZSB0aGUgY2FudmFzIGRyYXdzICg8cD48YnI+PC9wPiwgb3IgYW4gZW1wdHlcbi8vIDxwPiksIHNvIG9uZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGJsb2NrIGtlZXBzIHRoZSB3b3JkcyBiZWxvdyBpdCB3aGVyZSB0aGVcbi8vIGNhbnZhcyBwdXRzIHRoZW0uIEF0IHRoZSBlbmQgb2YgdGhlIHdob2xlIGJsb2NrIGl0IGRyYXdzIG5vdGhpbmcsIGFuZCBpc1xuLy8gZHJvcHBlZCBzbyBpdCBuZXZlciBjb3VudHMgYXMgcnVubmluZyBwYXN0IHRoZSBib3guIEFuIGVtcHR5IHBhcmFncmFwaFxuLy8gYmVmb3JlIGEgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQuXG5mdW5jdGlvbiB0cmltQmxhbmtFbmQoYmxvY2tzOiBUZXh0QmxvY2tbXSk6IHZvaWQge1xuICBjb25zdCBsYXN0ID0gYmxvY2tzW2Jsb2Nrcy5sZW5ndGggLSAxXTtcblxuICB3aGlsZSAobGFzdD8ua2luZCA9PT0gJ3RleHQnICYmIGxhc3QucGFyYWdyYXBocy5sZW5ndGggJiYgIWxhc3QucGFyYWdyYXBoc1tsYXN0LnBhcmFncmFwaHMubGVuZ3RoIC0gMV0ucnVucy5sZW5ndGgpIHtcbiAgICBsYXN0LnBhcmFncmFwaHMucG9wKCk7XG4gIH1cbn1cblxuLy8gYmFzZSBpcyB0aGUgc3R5bGUgZXZlcnkgcnVuIHN0YXJ0cyBmcm9tOiBib2xkIGZvciBhIGhlYWRlciBjZWxsJ3Mgd29yZHMuXG5mdW5jdGlvbiB3YWxrQmxvY2tzKFxuICBwYXJlbnQ6IE5vZGUsXG4gIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSxcbiAgbGlzdDogJ2J1bGxldCcgfCAnbnVtYmVyJyB8IG51bGwsXG4gIGJhc2U6IFBhcnRpYWw8VGV4dFJ1bj4gPSB7fSxcbik6IHZvaWQge1xuICAvLyBMb29zZSBpbmxpbmUgY29udGVudCBiZXR3ZWVuIGJsb2NrcyAodGV4dCBzdHJhaWdodCB1bmRlciB0aGUgYmxvY2ssIGFuXG4gIC8vIDxsaT4gb3IgYSBjZWxsKSBpcyBnYXRoZXJlZCBpbnRvIGEgcGFyYWdyYXBoIG9mIGl0cyBvd24uXG4gIGxldCBsb29zZTogVGV4dFBhcmFncmFwaCB8IG51bGwgPSBudWxsO1xuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAobG9vc2UgJiYgaXNTaG93bihsb29zZSkpIHtcbiAgICAgIHBhcmFncmFwaHMucHVzaChsb29zZSk7XG4gICAgfVxuICAgIGxvb3NlID0gbnVsbDtcbiAgfTtcblxuICBwYXJlbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChuYW1lID09PSAndWwnIHx8IG5hbWUgPT09ICdvbCcgfHwgbmFtZSA9PT0gJ2xpJyB8fCBuYW1lID09PSAncCcgfHwgL15oWzEtM10kLy50ZXN0KG5hbWUpKSB7XG4gICAgICBmbHVzaCgpO1xuICAgICAgd2Fsa0Jsb2NrKG5vZGUgYXMgSFRNTEVsZW1lbnQsIHBhcmFncmFwaHMsIGxpc3QsIGJhc2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9vc2UgPSBsb29zZSA/PyB7IHJ1bnM6IFtdIH07XG4gICAgd2Fsa0lubGluZShub2RlLCBiYXNlLCBsb29zZSwgcGFyYWdyYXBocywgdHJ1ZSk7XG4gIH0pO1xuXG4gIGZsdXNoKCk7XG59XG5cbi8vIFdoZXRoZXIgbG9vc2UgY29udGVudCdzIGxhc3QgbGluZSBzaG93cyBhbnl0aGluZy4gV2hpdGVzcGFjZSBhbG9uZSBiZXR3ZWVuXG4vLyBibG9ja3MgaXMgbm90IGRyYXduLCBhbmQgYSBsaW5lIGEgPGJyPiBlbmRlZCB3YXMgcHVzaGVkIHdoZW4gaXQgZW5kZWQsIHNvIGFcbi8vIHRyYWlsaW5nIDxicj4gYWRkcyBubyBlbXB0eSBsaW5lIGFmdGVyIGl0LlxuZnVuY3Rpb24gaXNTaG93bihsb29zZTogVGV4dFBhcmFncmFwaCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbG9vc2UucnVucy5zb21lKChydW4pID0+IC9bXiBcXHRcXG5cXHJcXGZdLy50ZXN0KHJ1bi50ZXh0KSk7XG59XG5cbmZ1bmN0aW9uIHdhbGtCbG9jayhcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSxcbiAgbGlzdDogJ2J1bGxldCcgfCAnbnVtYmVyJyB8IG51bGwsXG4gIGJhc2U6IFBhcnRpYWw8VGV4dFJ1bj4sXG4pOiB2b2lkIHtcbiAgY29uc3QgbmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobmFtZSA9PT0gJ3VsJyB8fCBuYW1lID09PSAnb2wnKSB7XG4gICAgd2Fsa0Jsb2NrcyhlbGVtZW50LCBwYXJhZ3JhcGhzLCBuYW1lID09PSAndWwnID8gJ2J1bGxldCcgOiAnbnVtYmVyJywgYmFzZSk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2xpJykge1xuICAgIGNvbnN0IGl0ZW06IFRleHRQYXJhZ3JhcGggPSB7IHJ1bnM6IFtdLCBidWxsZXQ6IGxpc3QgPz8gJ2J1bGxldCcgfTtcbiAgICBjb25zdCBuZXN0ZWQ6IFRleHRQYXJhZ3JhcGhbXSA9IFtdO1xuICAgIC8vIEEgbGlzdCBpdGVtJ3MgZmlyc3QgcGFyYWdyYXBoIElTIHRoZSBpdGVtOyBhbnl0aGluZyBhZnRlciBpdCBpcyBpdHMgb3duXG4gICAgLy8gbGluZSB1bmRlciB0aGUgc2FtZSBidWxsZXQuXG4gICAgd2Fsa0Jsb2NrcyhlbGVtZW50LCBuZXN0ZWQsIGxpc3QsIGJhc2UpO1xuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBuZXN0ZWQubGVuZ3RoID8gbmVzdGVkIDogW2l0ZW1dO1xuICAgIHBhcmFncmFwaHMucHVzaCh7IC4uLmZpcnN0LCBidWxsZXQ6IGxpc3QgPz8gJ2J1bGxldCcgfSwgLi4ucmVzdCk7XG4gIH0gZWxzZSB7XG4gICAgd2Fsa1BhcmFncmFwaChlbGVtZW50LCBwYXJhZ3JhcGhzLCBiYXNlKTtcbiAgfVxufVxuXG4vLyBBIHAgb3IgYSBoZWFkaW5nLiBBIDxicj4gZW5kcyBhIGxpbmUsIHNvIGl0cyBsYXN0IGxpbmUgaXMgcHVzaGVkIG9ubHkgd2hlbiBpdFxuLy8gaG9sZHMgd29yZHMgb3Igbm8gPGJyPiBjYW1lIGJlZm9yZSBpdDogPHA+PGJyPjwvcD4gaXMgb25lIGJsYW5rIGxpbmUsXG4vLyA8cD5hPGJyPjwvcD4gb25lIGxpbmUgYW5kIDxwPmE8YnI+YjwvcD4gdHdvLCBhcyBhIGJyb3dzZXIgZHJhd3MgdGhlbS5cbmZ1bmN0aW9uIHdhbGtQYXJhZ3JhcGgoZWxlbWVudDogSFRNTEVsZW1lbnQsIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSwgYmFzZTogUGFydGlhbDxUZXh0UnVuPik6IHZvaWQge1xuICBjb25zdCBuYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBoZWFkaW5nID0gbmFtZS5zdGFydHNXaXRoKCdoJykgPyBOdW1iZXIobmFtZVsxXSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHBhcmFncmFwaDogVGV4dFBhcmFncmFwaCA9IHtcbiAgICBydW5zOiBbXSxcbiAgICBhbGlnbjogYmxvY2tBbGlnbihlbGVtZW50KSxcbiAgICBidWxsZXQ6IHVuZGVmaW5lZCxcbiAgICBoZWFkaW5nLFxuICB9O1xuICBjb25zdCBzdHlsZTogUGFydGlhbDxUZXh0UnVuPiA9IGhlYWRpbmdcbiAgICA/IHsgLi4uYmFzZSwgYm9sZDogdHJ1ZSwgZm9udFNpemU6IEhFQURJTkdfVEVYVF9TSVpFU1toZWFkaW5nXSB9XG4gICAgOiBiYXNlO1xuXG4gIGNvbnN0IGJyZWFrcyA9IHdhbGtJbmxpbmUoZWxlbWVudCwgc3R5bGUsIHBhcmFncmFwaCwgcGFyYWdyYXBocyk7XG4gIGlmIChwYXJhZ3JhcGgucnVucy5sZW5ndGggfHwgIWJyZWFrcykge1xuICAgIHBhcmFncmFwaHMucHVzaChwYXJhZ3JhcGgpO1xuICB9XG59XG5cbi8vIEFjY3VtdWxhdGUgaW5saW5lIHN0eWxlcyBkb3duIHRoZSB0cmVlLiBBIDxicj4gZW5kcyB0aGUgY3VycmVudCBsaW5lOiB0aGVcbi8vIHJ1bnMgYWZ0ZXIgaXQgc3RhcnQgYSBuZXcgcGFyYWdyYXBoIHdpdGggdGhlIHNhbWUgYWxpZ25tZW50IGFuZCBidWxsZXQuXG4vLyBSZXR1cm5zIGhvdyBtYW55IGxpbmVzIGEgPGJyPiBlbmRlZC5cbmZ1bmN0aW9uIHdhbGtJbmxpbmUoXG4gIG5vZGU6IE5vZGUsXG4gIHN0eWxlOiBQYXJ0aWFsPFRleHRSdW4+LFxuICBwYXJhZ3JhcGg6IFRleHRQYXJhZ3JhcGgsXG4gIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSxcbiAgaXNTZWxmID0gZmFsc2UsXG4pOiBudW1iZXIge1xuICBjb25zdCBub2RlcyA9IGlzU2VsZiA/IFtub2RlXSA6IEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKTtcblxuICByZXR1cm4gbm9kZXMucmVkdWNlKChicmVha3MsIGNoaWxkKSA9PiBicmVha3MgKyB3YWxrSW5saW5lTm9kZShjaGlsZCwgc3R5bGUsIHBhcmFncmFwaCwgcGFyYWdyYXBocyksIDApO1xufVxuXG5mdW5jdGlvbiB3YWxrSW5saW5lTm9kZShcbiAgbm9kZTogTm9kZSxcbiAgc3R5bGU6IFBhcnRpYWw8VGV4dFJ1bj4sXG4gIHBhcmFncmFwaDogVGV4dFBhcmFncmFwaCxcbiAgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLFxuKTogbnVtYmVyIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQgPz8gJyc7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIHBhcmFncmFwaC5ydW5zLnB1c2goeyAuLi5zdHlsZSwgdGV4dCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGUgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2JyJykge1xuICAgIHBhcmFncmFwaHMucHVzaCh7IC4uLnBhcmFncmFwaCwgcnVuczogWy4uLnBhcmFncmFwaC5ydW5zXSB9KTtcbiAgICBwYXJhZ3JhcGgucnVucy5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gd2Fsa0lubGluZShlbGVtZW50LCB7IC4uLnN0eWxlLCAuLi5pbmxpbmVTdHlsZShlbGVtZW50KSB9LCBwYXJhZ3JhcGgsIHBhcmFncmFwaHMpO1xufVxuXG5mdW5jdGlvbiBpbmxpbmVTdHlsZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFBhcnRpYWw8VGV4dFJ1bj4ge1xuICBjb25zdCBuYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBzdHlsZTogUGFydGlhbDxUZXh0UnVuPiA9IHt9O1xuXG4gIGlmIChuYW1lID09PSAnc3Ryb25nJykge1xuICAgIHN0eWxlLmJvbGQgPSB0cnVlO1xuICB9XG4gIGlmIChuYW1lID09PSAnZW0nKSB7XG4gICAgc3R5bGUuaXRhbGljID0gdHJ1ZTtcbiAgfVxuICBpZiAobmFtZSA9PT0gJ3UnKSB7XG4gICAgc3R5bGUudW5kZXJsaW5lID0gdHJ1ZTtcbiAgfVxuICBpZiAobmFtZSA9PT0gJ3MnKSB7XG4gICAgc3R5bGUuc3RyaWtlID0gdHJ1ZTtcbiAgfVxuICBpZiAobmFtZSA9PT0gJ2EnKSB7XG4gICAgc3R5bGUubGluayA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJykgPz8gdW5kZWZpbmVkO1xuICAgIHN0eWxlLnVuZGVybGluZSA9IHRydWU7XG4gIH1cblxuICAvLyBXaGF0IGlzIG5vIGNvbG9yIGxlYXZlcyB0aGUgY29sb3IgdGhlIHJ1biBpbmhlcml0cy5cbiAgY29uc3QgY3NzID0gZWxlbWVudC5zdHlsZTtcbiAgY29uc3QgY29sb3IgPSBjc3MuY29sb3IgPyBoZXhDb2xvcihjc3MuY29sb3IpIDogdW5kZWZpbmVkO1xuICBjb25zdCBoaWdobGlnaHQgPSBjc3MuYmFja2dyb3VuZENvbG9yID8gaGV4Q29sb3IoY3NzLmJhY2tncm91bmRDb2xvcikgOiB1bmRlZmluZWQ7XG4gIGlmIChjb2xvcikge1xuICAgIHN0eWxlLmNvbG9yID0gY29sb3I7XG4gIH1cbiAgaWYgKGhpZ2hsaWdodCkge1xuICAgIHN0eWxlLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgfVxuICBpZiAoY3NzLmZvbnRTaXplKSB7XG4gICAgc3R5bGUuZm9udFNpemUgPSBwb2ludHMoY3NzLmZvbnRTaXplKTtcbiAgfVxuICBpZiAoY3NzLmZvbnRXZWlnaHQpIHtcbiAgICBzdHlsZS5ib2xkID0gY3NzLmZvbnRXZWlnaHQgPT09ICdib2xkJyB8fCBOdW1iZXIoY3NzLmZvbnRXZWlnaHQpID49IDYwMDtcbiAgfVxuICBpZiAoY3NzLmZvbnRTdHlsZSkge1xuICAgIHN0eWxlLml0YWxpYyA9IGNzcy5mb250U3R5bGUgPT09ICdpdGFsaWMnO1xuICB9XG4gIGlmIChjc3MudGV4dERlY29yYXRpb24pIHtcbiAgICBzdHlsZS51bmRlcmxpbmUgPSBjc3MudGV4dERlY29yYXRpb24uaW5jbHVkZXMoJ3VuZGVybGluZScpO1xuICAgIHN0eWxlLnN0cmlrZSA9IGNzcy50ZXh0RGVjb3JhdGlvbi5pbmNsdWRlcygnbGluZS10aHJvdWdoJyk7XG4gIH1cbiAgaWYgKGNzcy5mb250RmFtaWx5KSB7XG4gICAgc3R5bGUuZm9udEZhY2UgPSBjc3MuZm9udEZhbWlseS5zcGxpdCgnLCcpWzBdLnJlcGxhY2UoL1tcIiddL2csICcnKS50cmltKCk7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGJsb2NrQWxpZ24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBUZXh0UGFyYWdyYXBoWydhbGlnbiddIHtcbiAgY29uc3QgYWxpZ24gPSBlbGVtZW50LnN0eWxlLnRleHRBbGlnbjtcblxuICByZXR1cm4gYWxpZ24gPT09ICdjZW50ZXInIHx8IGFsaWduID09PSAncmlnaHQnIHx8IGFsaWduID09PSAnanVzdGlmeScgPyBhbGlnbiA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSBDU1MgZm9udC1zaXplIGluIHBvaW50cy4gVGhlIGNhbnZhcyByZW5kZXJzIGF0IDk2cHggcGVyIGluY2gsIHNvIDFweCBpc1xuLy8gZXhhY3RseSAwLjc1cHQ7IGVtL3JlbS8lIGFyZSByZWxhdGl2ZSB0byB0aGUgYm9keSBzaXplLlxuZnVuY3Rpb24gcG9pbnRzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaCA9IC9eKFtcXGQuXSspKHB0fHB4fGVtfHJlbXwlKSQvLmV4ZWModmFsdWUudHJpbSgpKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaXplID0gTnVtYmVyKG1hdGNoWzFdKTtcbiAgc3dpdGNoIChtYXRjaFsyXSkge1xuICAgIGNhc2UgJ3B0JzpcbiAgICAgIHJldHVybiBzaXplO1xuICAgIGNhc2UgJ3B4JzpcbiAgICAgIHJldHVybiBzaXplICogMC43NTtcbiAgICBjYXNlICclJzpcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMCkgKiBERUZBVUxUX1RFWFRfU0laRTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHNpemUgKiBERUZBVUxUX1RFWFRfU0laRTtcbiAgfVxufVxuXG4vLyBBbnkgQ1NTIGNvbG9yIHRoZSBhbGxvd2xpc3QgbGV0cyB0aHJvdWdoIChoZXgsIHJnYigpLCBhIG5hbWUpIGFzICNycmdnYmIg4oCUXG4vLyB0aGUgb25lIGZvcm0gYm90aCBleHBvcnRzIGFjY2VwdC4gVGhlIGJyb3dzZXIgcmVzb2x2ZXMgaXQsIHNvIGEgbmFtZWQgY29sb3Jcbi8vIGNvbWVzIG91dCBleGFjdGx5IGFzIHRoZSBjYW52YXMgcGFpbnRlZCBpdC4gQSB2YWx1ZSB0aGF0IGlzIG5vIGNvbG9yIG9mIGl0c1xuLy8gb3duIChpbmhlcml0LCBjdXJyZW50Y29sb3IsIGEgdHlwbykgb3IgcGFpbnRzIG5vdGhpbmcgKHRyYW5zcGFyZW50LCBhbiBhbHBoYVxuLy8gb2YgMCkgaXMgdW5kZWZpbmVkLCBzbyBhbiBleHBvcnQgbmV2ZXIgcGFpbnRzIGl0IGJsYWNrLlxubGV0IGNvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGhleENvbG9yKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb2xvckNvbnRleHQgPSBjb2xvckNvbnRleHQgPz8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcbiAgaWYgKCFjb2xvckNvbnRleHQgfHwgL15cXHMqY3VycmVudGNvbG9yXFxzKiQvaS50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBIHZhbHVlIHRoZSBjYW52YXMgY2Fubm90IHJlYWQgbGVhdmVzIHRoZSBjb2xvciBzZXQgYmVmb3JlIGl0LCBzbyBpdCByZWFkc1xuICAvLyBiYWNrIG9uZSB3YXkgb3ZlciBibGFjayBhbmQgYW5vdGhlciBvdmVyIHdoaXRlLiAoY3VycmVudGNvbG9yIHJlYWRzIGFzXG4gIC8vIGJsYWNrIG92ZXIgYm90aCwgaGVuY2UgdGhlIGNoZWNrIGFib3ZlLilcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlQ29sb3IoY29sb3JDb250ZXh0LCAnIzAwMDAwMCcsIHZhbHVlKTtcbiAgaWYgKHJlc29sdmVkICE9PSByZXNvbHZlQ29sb3IoY29sb3JDb250ZXh0LCAnI2ZmZmZmZicsIHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAocmVzb2x2ZWQuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgLy8gcmdiYSguLi4pIGZvciBhIHRyYW5zbHVjZW50IGNvbG9yIOKAlCBkcm9wIHRoZSBhbHBoYSwga2VlcCB0aGUgaHVlLlxuICBjb25zdCBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gcmVzb2x2ZWQubWF0Y2goL1tcXGQuXSsvZyk/Lm1hcChOdW1iZXIpID8/IFtdO1xuXG4gIHJldHVybiBibHVlID09PSB1bmRlZmluZWQgfHwgYWxwaGEgPT09IDBcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogYCMke1tyZWQsIGdyZWVuLCBibHVlXS5tYXAoKGNoYW5uZWwpID0+IE1hdGgucm91bmQoY2hhbm5lbCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWA7XG59XG5cbi8vIFdoYXQgdGhlIGNhbnZhcyByZWFkcyB2YWx1ZSBhcywgc2V0IG92ZXIgc2VlZC5cbmZ1bmN0aW9uIHJlc29sdmVDb2xvcihjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHNlZWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnRleHQuZmlsbFN0eWxlID0gc2VlZDtcbiAgY29udGV4dC5maWxsU3R5bGUgPSB2YWx1ZTtcblxuICByZXR1cm4gU3RyaW5nKGNvbnRleHQuZmlsbFN0eWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufVxuIl19
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRFQUE0RTtBQUM1RSw4Q0FBOEM7QUFDOUMsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UseUVBQXlFO0FBQ3pFLDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBQ3pFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUseUVBQXlFO0FBQ3pFLDhFQUE4RTtBQUM5RSw4QkFBOEI7QUFHOUIsOEVBQThFO0FBQzlFLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQTJCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFFNUMsOEVBQThFO0FBQzlFLGlFQUFpRTtBQUNqRSw4RUFBOEU7QUFDOUUsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFDNUMsa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDdEUsNEVBQTRFO0FBQzVFLFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFrRG5DLGdGQUFnRjtBQUNoRix1Q0FBdUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsMENBQTBDLENBQUM7QUFFOUUsaUVBQWlFO0FB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RUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzVHLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsU0FBUyxZQUFZLENBQUMsT0FBaUMsRUFBRSxJQUFZLEVBQUUsS0FBYTtJQUNsRixPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN6QixPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUUxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYTtJQUN0QyxPQUFPLEtBQUs7U0FDVCxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztTQUN0QixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztTQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztTQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUZXh0IGJsb2NrcyDigJQgc2hhcmVkIGJ5IHRoZSBjYW52YXMgYW5kIGJvdGggZXhwb3J0cywgc28gYSBibG9jayByZWFkcyB0aGVcbi8vIHNhbWUgb24gc2NyZWVuLCBpbiB0aGUgZGVjayBhbmQgaW4gdGhlIFBERi5cbi8vXG4vLyBBIGJsb2NrJ3MgaHRtbCBhcnJpdmVzIGFscmVhZHkgcmVidWlsdCBzZXJ2ZXItc2lkZSBmcm9tIGEgc21hbGwgYWxsb3dsaXN0XG4vLyAoUmVwb3J0VGV4dEh0bWwpOiBwLCBoMS1oMywgc3Ryb25nLCBlbSwgdSwgcywgdWwvb2wvbGksIGJyLCBhLCBhbmQgc3BhbiB3aXRoXG4vLyBjb2xvciAvIGJhY2tncm91bmQtY29sb3IgLyBmb250LXNpemUgLyBmb250LXdlaWdodCAvIGZvbnQtZmFtaWx5LCBwbHVzXG4vLyB0ZXh0LWFsaWduIG9uIGEgYmxvY2suIEEgdGFibGUgbWF5IHNpdCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgYmxvY2s6IHRhYmxlLFxuLy8gdGhlYWQsIHRib2R5LCB0Zm9vdCwgdHIsIHRoIGFuZCB0ZCwgYSB3aWR0aCBvbiB0aGUgdGFibGUsIGFuZCBvbiBhIGNlbGxcbi8vIHRleHQtYWxpZ24sIHZlcnRpY2FsLWFsaWduLCBiYWNrZ3JvdW5kLWNvbG9yLCBhIHdpZHRoIGFuZCBhIGNvbHNwYW4gb3Jcbi8vIHJvd3NwYW4uIEl0cyBncmlkIGxpbmVzLCBwYWRkaW5nIGFuZCBtYXJnaW4gYXJlIG5ldmVyIHN0b3JlZDogZXZlcnkgcmVuZGVyZXJcbi8vIGRyYXdzIHRoZW0gZnJvbSB0aGUgVEVYVF9UQUJMRV8qIGNvbnN0YW50cyBiZWxvdy4gVHJhbnNwYXJlbnQsIGN1cnJlbnRjb2xvclxuLy8gYW5kIHRoZSBDU1Mtd2lkZSBrZXl3b3JkcyAoaW5oZXJpdCwgaW5pdGlhbCwg4oCmKSBhcmUgbm90IGNvbG9ycywgc28gdGhlXG4vLyBzZXJ2ZXIgZHJvcHMgdGhlbSBhbmQgaGV4Q29sb3IgcmVhZHMgdGhlbSBhcyBubyBjb2xvci4gRXZlcnl0aGluZyBoZXJlIG9ubHlcbi8vIGhhcyB0byB1bmRlcnN0YW5kIHRoYXQgc2V0LlxuXG5cbi8vIEJvZHkgdGV4dCBzaXplLCBwb2ludHMsIGFuZCB0aGUgaGVhZGluZyBzaXplcyDigJQgdGhlIHNhbWUgbnVtYmVycyB0aGUgY2FudmFzXG4vLyBzdHlsZXNoZWV0IHVzZXMsIHNvIGFuIHVuc3R5bGVkIHBhcmFncmFwaCBpcyBvbmUgc2l6ZSBldmVyeXdoZXJlLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVYVF9TSVpFID0gMTI7XG5leHBvcnQgY29uc3QgSEVBRElOR19URVhUX1NJWkVTOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+ID0geyAxOiAyNCwgMjogMTgsIDM6IDE0IH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9URVhUX0NPTE9SID0gJyMxZjI5MzMnO1xuXG4vLyBBIHRhYmxlJ3MgZ3JpZCBsaW5lczogdGhlaXIgY29sb3IsIGFuZCB0aGVpciB3aWR0aCBpbiBwb2ludHMgKDAuNzVwdCBpcyBvbmVcbi8vIHBpeGVsIG9uIHRoZSBjYW52YXMpLiBUaGUgaHRtbCBuZXZlciBzdG9yZXMgYm9yZGVycyBvciBwYWRkaW5nXG4vLyAoUmVwb3J0VGV4dEh0bWwgZHJvcHMgdGhlbSksIHNvIHRoZSBjYW52YXMsIHRoZSBlZGl0b3IgYW5kIGJvdGggZXhwb3J0cyBhbGxcbi8vIGRyYXcgdGhpcyBvbmUgbG9vay5cbmV4cG9ydCBjb25zdCBURVhUX1RBQkxFX0JPUkRFUl9DT0xPUiA9ICcjY2JkMmQ5JztcbmV4cG9ydCBjb25zdCBURVhUX1RBQkxFX0JPUkRFUl9XSURUSCA9IDAuNzU7XG4vLyBUaGUgc3BhY2UgYmV0d2VlbiBhIGNlbGwncyBncmlkIGxpbmVzIGFuZCBpdHMgd29yZHMsIGluIHBvaW50cy5cbmV4cG9ydCBjb25zdCBURVhUX1RBQkxFX0NFTExfUEFERElORyA9IHsgdmVydGljYWw6IDIsIGhvcml6b250YWw6IDQgfTtcbi8vIFRoZSBzcGFjZSBhYm92ZSBhbmQgYmVsb3cgYSB0YWJsZSwgYmV0d2VlbiBpdCBhbmQgdGhlIHdvcmRzIGFyb3VuZCBpdCwgaW5cbi8vIHBvaW50cy5cbmV4cG9ydCBjb25zdCBURVhUX1RBQkxFX01BUkdJTiA9IDQ7XG5cbi8vIEEgbGl2ZSB2YWx1ZSBhIGJsb2NrIHNob3dzIGlubGluZSwgd3JpdHRlbiB7e3ZhbHVlLjxrZXk+fX0gaW4gaXRzIGh0bWw6IHdoYXRcbi8vIHRoZSB2YWx1ZSBpcywgYW5kIGl0cyBmb3JtYXR0ZWQgdGV4dCBvbmNlIGxvYWRlZC4gVmFsdWVzIGJlbG9uZyB0byB0aGUgcGFnZVxuLy8gdGhlIGJsb2NrIHNpdHMgb24gKHRoZSBtYXN0ZXIgZm9yIGEgaGVhZGVyIG9yIGZvb3RlciBibG9jayksIHNvIHRoZSBrZXkgaXNcbi8vIHVuaXF1ZSB3aXRoaW4gdGhhdCBwYWdlLlxuZXhwb3J0IGludGVyZmFjZSBUZXh0VmFsdWUge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8vIEFic2VudCB3aGlsZSBsb2FkaW5nLCBhbmQgd2hlbiB0aGUgdmFsdWUncyBxdWVyeSBmYWlsZWQuXG4gIHRleHQ/OiBzdHJpbmc7XG4gIC8vIEl0cyBudW1iZXIgaGFzIGJlZW4gYXNrZWQgZm9yIGFuZCBoYXMgbm90IGFycml2ZWQgeWV0LlxuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgLy8gQSBmb3JtdWxhJ3Mgb3BlcmFuZCBrZXlzLCBsb3dlcmNhc2U6IHRoZSB2YWx1ZXMgaXQgcmVhZHMsIHdoaWNoIHRoZSBwYWdlXG4gIC8vIHJlYWRzIHRvbyB3aGlsZSB0aGUgZm9ybXVsYSBpcyBzaG93bi5cbiAgcmVhZHM/OiBzdHJpbmdbXTtcbn1cblxuLy8gQSBmaWx0ZXIgb2YgdGhlIHJlcG9ydCBhIGJsb2NrIG5hbWVzLCB3cml0dGVuIHt7ZmlsdGVyLjxpZD59fSBpbiBpdHMgaHRtbFxuLy8gd2l0aCB0aGUgZmlsdGVyIGdyb3VwJ3MgaWQ6IHdoYXQgdGhlIGZpbHRlciBpcywgYW5kIHdoYXQgaXRzIGN1cnJlbnQgdmFsdWVcbi8vIHJlYWRzIGFzIChmaWx0ZXJGaWVsZFRleHQpLiBBIGJsb2NrIHJlYWRzIHRoZSByZXBvcnQncyBmaWx0ZXJzLCBhbmQgYSBwYWdlXG4vLyBibG9jayBpdHMgb3duIHBhZ2UncyBwYWdlIGZpbHRlcnMgdG9vIChsYXllckZpbHRlckdyb3VwcykuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRGaWx0ZXJGaWVsZCB7XG4gIC8vIFRoZSBncm91cCdzIGxhYmVsLCBlbHNlIGl0cyBuYW1lLCBlbHNlICdGaWx0ZXInIChmaWx0ZXJGaWVsZE5hbWUpLlxuICBuYW1lOiBzdHJpbmc7XG4gIC8vIFdoZXJlIHRoZSBmaWx0ZXIgYmFyIGxpc3RzIHRoZSBncm91cCAoUmVwb3J0RmlsdGVyR3JvdXAub3JkZXIpLCB3aGljaCBpc1xuICAvLyB3aGVyZSB0aGUgSW5zZXJ0IGZpZWxkIG1lbnVzIGxpc3QgaXQgdG9vLlxuICBvcmRlcjogbnVtYmVyO1xuICAvLyBBYnNlbnQgd2hpbGUgbG9hZGluZywgYW5kIHdoZW4gaXRzIHZhbHVlIGNvdWxkIG5vdCBiZSByZWFkLlxuICB0ZXh0Pzogc3RyaW5nO1xuICAvLyBBIHNlbGVjdCdzIHBpY2tlZCBuYW1lcyBoYXZlIGJlZW4gYXNrZWQgZm9yIGFuZCBoYXZlIG5vdCBhcnJpdmVkIHlldC5cbiAgbG9hZGluZz86IGJvb2xlYW47XG59XG5cbi8vIFdoYXQgdGhlIHRva2VucyBpbiBhIGJsb2NrJ3MgaHRtbCwgYW5kIGluIGEgY29tcG9uZW50J3MgdGl0bGUsIGFyZSBmaWxsZWRcbi8vIHdpdGgsIHBlciBwYWdlLlxuZXhwb3J0IGludGVyZmFjZSBUZXh0VG9rZW5Db250ZXh0IHtcbiAgcGFnZU51bWJlcjogbnVtYmVyO1xuICBwYWdlTmFtZTogc3RyaW5nO1xuICByZXBvcnROYW1lOiBzdHJpbmc7XG4gIC8vIFRoZSBwYWdlJ3MgdmFsdWVzLCBieSBsb3dlcmNhc2Uga2V5LlxuICB2YWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBUZXh0VmFsdWU+O1xuICAvLyBUaGUgZmlsdGVycyB0aGUgbGF5ZXIgcmVhZHMgKGxheWVyRmlsdGVyR3JvdXBzKSwgYnkgZmlsdGVyIGdyb3VwIGlkLiBBXG4gIC8vIHRva2VuIG9mIGFueSBvdGhlciBncm91cCByZWFkcyB0aGUgZW0gZGFzaC5cbiAgZmlsdGVycz86IFJlY29yZDxudW1iZXIsIFRleHRGaWx0ZXJGaWVsZD47XG4gIC8vIFRoZSByZXBvcnQgcGFnZSB3aG9zZSB2YWx1ZXMgdGhlIGJsb2NrIHNob3dzOiB0aGUgcGFnZSBpdCBzaXRzIG9uLCBvciB0aGVcbiAgLy8gbWFzdGVyIGZvciBhIGhlYWRlciBvciBmb290ZXIgYmxvY2suIEl0IGlzIGFsc28gdGhlIGVkaXRvcidzIGNsaXBib2FyZFxuICAvLyBzY29wZSwgc28gYSBjb3BpZWQgY2hpcCBwYXN0ZXMgYmFjayBhcyBhIGNoaXAgb25seSBvbiB0aGF0IHBhZ2UuXG4gIHZhbHVlUGFnZUlkPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSB2YWx1ZSB0b2tlbjoge3t2YWx1ZS50b3RhbF92aXNpdHN9fS4gS2V5cyBhcmUgbG93ZXJjYXNlIGxldHRlcnMsIGRpZ2l0cyBhbmRcbi8vIHVuZGVyc2NvcmVzLCBzdGFydGluZyB3aXRoIGEgbGV0dGVyLlxuZXhwb3J0IGNvbnN0IFZBTFVFX1RPS0VOX1BBVFRFUk4gPSAvXFx7XFx7XFxzKnZhbHVlXFwuKFthLXpdW2EtejAtOV9dKilcXHMqXFx9XFx9L2dpO1xuXG4vLyBBIGZpZWxkIHRva2VuLCBhbnl0aGluZyBhIGJsb2NrIG1heSBjYXJyeSB0aGF0IGlzIG5vdCBhIHZhbHVlOlxuLy8ge3twYWdlLm51bWJlcn19LCB7e3BhZ2UubmFtZX19LCB7e3JlcG9ydC5uYW1lfX0gYW5kIHt7ZmlsdGVyLjxpZD59fSwgdGhlIGlkXG4vLyBkaWdpdHMgb25seS4gRXhhY3RseSB0aGVzZSwgc28gaXQgbWF0Y2hlcyBuZWl0aGVyIGEgdmFsdWUgdG9rZW4gbm9yIGFueVxuLy8gb3RoZXIgYnJhY2VzIHRoZSB3b3JkcyBob2xkLlxuZXhwb3J0IGNvbnN0IEZJRUxEX1RPS0VOX1BBVFRFUk4gPSAvXFx7XFx7XFxzKihwYWdlXFwubnVtYmVyfHBhZ2VcXC5uYW1lfHJlcG9ydFxcLm5hbWV8ZmlsdGVyXFwuXFxkKylcXHMqXFx9XFx9L2dpO1xuXG4vLyBXaGF0IGEgdmFsdWUgd2l0aCBubyBudW1iZXIgcmVhZHMgYXMg4oCUIGl0IGZhaWxlZCwgaXQgaXMgbm90IG9uIHRoaXMgcGFnZSwgb3Jcbi8vIGl0cyBxdWVyeSBmb3VuZCBub3RoaW5nIOKAlCBzbyBhIGJsb2NrIG5ldmVyIHByaW50cyBhIHJhdyB0b2tlbi4gQSBmaWx0ZXJcbi8vIHRva2VuIG5hbWluZyBubyBmaWx0ZXIgb2YgdGhlIHJlcG9ydCByZWFkcyBhcyBpdCB0b28uXG5leHBvcnQgY29uc3QgVkFMVUVfRU1QVFlfVEVYVCA9ICfigJQnO1xuXG4vLyBXaGF0IGEgdmFsdWUgcmVhZHMgYXMgd2hpbGUgaXRzIG51bWJlciBpcyBvbiBpdHMgd2F5IChvbiBzY3JlZW4gb25seTogYW5cbi8vIGV4cG9ydCB3YWl0cyBmb3IgZXZlcnkgbnVtYmVyKS5cbmV4cG9ydCBjb25zdCBWQUxVRV9MT0FESU5HX1RFWFQgPSAn4oCmJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlVG9rZW4oa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHt7dmFsdWUuJHtrZXl9fX1gO1xufVxuXG4vLyBXaGF0IGEgdmFsdWUgcmVhZHMgYXMgaW4gYSBibG9jaywgdmlld2VkIG9yIGVkaXRlZDogaXRzIGZvcm1hdHRlZCBudW1iZXIsXG4vLyB0aGUgZWxsaXBzaXMgd2hpbGUgdGhhdCBsb2FkcywgZWxzZSB0aGUgZW0gZGFzaC5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZVRleHQodmFsdWU6IFRleHRWYWx1ZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZT8udGV4dCA/PyAodmFsdWU/LmxvYWRpbmcgPyBWQUxVRV9MT0FESU5HX1RFWFQgOiBWQUxVRV9FTVBUWV9URVhUKTtcbn1cblxuLy8gT25lIHN0eWxlZCBzdHJldGNoIG9mIHRleHQuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRSdW4ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGJvbGQ/OiBib29sZWFuO1xuICBpdGFsaWM/OiBib29sZWFuO1xuICB1bmRlcmxpbmU/OiBib29sZWFuO1xuICBzdHJpa2U/OiBib29sZWFuO1xuICAvLyAjcnJnZ2JiXG4gIGNvbG9yPzogc3RyaW5nO1xuICBoaWdobGlnaHQ/OiBzdHJpbmc7XG4gIC8vIHBvaW50c1xuICBmb250U2l6ZT86IG51bWJlcjtcbiAgZm9udEZhY2U/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG59XG5cbi8vIE9uZSBsaW5lLXN0YXJ0aW5nIGJsb2NrOiBhIHBhcmFncmFwaCwgYSBoZWFkaW5nIG9yIGEgbGlzdCBpdGVtLlxuZXhwb3J0IGludGVyZmFjZSBUZXh0UGFyYWdyYXBoIHtcbiAgcnVuczogVGV4dFJ1bltdO1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdqdXN0aWZ5JztcbiAgYnVsbGV0PzogJ2J1bGxldCcgfCAnbnVtYmVyJztcbiAgaGVhZGluZz86IG51bWJlcjtcbn1cblxuLy8gT25lIGNlbGwgb2YgYSB0YWJsZSBpbiBhIGJsb2NrLiBJdHMgd29yZHMgYXJlIHBhcmFncmFwaHMgbGlrZSBhbnkgb3RoZXJzOiBhXG4vLyA8YnI+IGluIGEgY2VsbCBzdGFydHMgYSBuZXcgb25lLCBhbmQgYSBoZWFkZXIgY2VsbCdzIHJ1bnMgYXJlIGJvbGQuIEVhY2hcbi8vIHBhcmFncmFwaCBjYXJyaWVzIHRoZSBjZWxsJ3MgYWxpZ25tZW50IHVubGVzcyBpdCBoYXMgaXRzIG93biwgc28gZXZlcnlcbi8vIHJlbmRlcmVyIHJlYWRzIGFsaWdubWVudCBhbmQgd2VpZ2h0IGZyb20gdGhlIHBhcmFncmFwaHMuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRUYWJsZUNlbGwge1xuICBwYXJhZ3JhcGhzOiBUZXh0UGFyYWdyYXBoW107XG4gIGNvbFNwYW46IG51bWJlcjtcbiAgLy8gQ3V0IGF0IHRoZSBsYXN0IHJvdyBvZiB0aGUgY2VsbCdzIHNlY3Rpb24sIGFzIGEgYnJvd3NlciBkcmF3cyBpdC5cbiAgcm93U3BhbjogbnVtYmVyO1xuICAvLyBXaGVyZSB0aGUgY2VsbCBzaXRzIGluIHRoZSBncmlkICh0YWJsZUdyaWQpLCAwLWJhc2VkOiBpdHMgdG9wIHJvdyBhbmQgaXRzXG4gIC8vIGxlZnQgY29sdW1uLlxuICByb3c6IG51bWJlcjtcbiAgY29sdW1uOiBudW1iZXI7XG4gIC8vIEl0cyB0ZXh0LWFsaWduLCBlbHNlIGNlbnRlcmVkIGZvciBhIGhlYWRlciBjZWxsIGFuZCBsZWZ0IGZvciBhbnkgb3RoZXIuXG4gIGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgfCAnanVzdGlmeSc7XG4gIHZhbGlnbj86ICd0b3AnIHwgJ21pZGRsZScgfCAnYm90dG9tJztcbiAgLy8gSXRzIGJhY2tncm91bmQsICNycmdnYmIuXG4gIGZpbGw/OiBzdHJpbmc7XG59XG5cbi8vIEEgdGFibGUncyByb3cuIFJvd3MgY29tZSBpbiB0aGUgb3JkZXIgYSBicm93c2VyIGRyYXdzIHRoZW06IHRoZSBoZWFkLCB0aGVcbi8vIGJvZHksIHRoZW4gdGhlIGZvb3QuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRUYWJsZVJvdyB7XG4gIHNlY3Rpb246ICdoZWFkJyB8ICdib2R5JyB8ICdmb290JztcbiAgY2VsbHM6IFRleHRUYWJsZUNlbGxbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXh0VGFibGUge1xuICByb3dzOiBUZXh0VGFibGVSb3dbXTtcbiAgLy8gSG93IG1hbnkgY29sdW1ucyB0aGUgZ3JpZCBoYXM6IHRoZSB3aWRlc3QgcmlnaHQgZWRnZSBvZiBhbnkgY2VsbC5cbiAgY29sdW1uczogbnVtYmVyO1xufVxuXG4vLyBBIGJsb2NrIGFzIHRoZSBleHBvcnRzIGRyYXcgaXQ6IGl0cyB3b3Jkcywgc3BsaXQgYXQgZWFjaCB0YWJsZSBpdCBob2xkcy5cbmV4cG9ydCB0eXBlIFRleHRCbG9jayA9XG4gIHwgeyBraW5kOiAndGV4dCc7IHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSB9XG4gIHwgeyBraW5kOiAndGFibGUnOyB0YWJsZTogVGV4dFRhYmxlIH07XG5cbi8vIFdoYXQgYSB0YWJsZSdzIGNlbGxzIGFyZSBqb2luZWQgYnkgd2hlcmUgaXQgcmVhZHMgYXMgbGluZXMgb2YgdGV4dC5cbmNvbnN0IFRBQkxFX0NFTExfU0VQQVJBVE9SID0gJyDCtyAnO1xuXG4vLyBUaGUgcGFnZSBhbmQgcmVwb3J0IGZpZWxkczogd2hhdCBlYWNoIGlzIGNhbGxlZCB3aGVyZSBhbiBhdXRob3IgcGlja3MgYW5kXG4vLyBzZWVzIGl0ICh0aGUgSW5zZXJ0IGZpZWxkIG1lbnVzIG9mIHRoZSB0ZXh0IGVkaXRvciBhbmQgb2YgYSB0aXRsZSwgYW5kIHRoZVxuLy8gZWRpdG9yJ3MgY2hpcHMpLCBpbiB0aG9zZSBtZW51cycgb3JkZXIsIGFuZCB3aGF0IGZpbGxzIGl0LiB7e3BhZ2UubnVtYmVyfX1cbi8vIGlzIHRoZSBwYWdlJ3MgcG9zaXRpb24gYW1vbmcgdGhlIHJlcG9ydCdzIHBhZ2VzICgxLWJhc2VkKSwgd2hpY2ggaXMgd2hhdFxuLy8gbWFrZXMgYSBzaGFyZWQgZm9vdGVyIG51bWJlciBldmVyeSBwYWdlIGNvcnJlY3RseS5cbmNvbnN0IFBBR0VfRklFTERTOiBSZWNvcmQ8c3RyaW5nLCB7IG5hbWU6IHN0cmluZzsgdGV4dDogKGNvbnRleHQ6IFRleHRUb2tlbkNvbnRleHQpID0+IHN0cmluZyB9PiA9IHtcbiAgJ3BhZ2UubnVtYmVyJzogeyBuYW1lOiAnUGFnZSBudW1iZXInLCB0ZXh0OiAoY29udGV4dCkgPT4gU3RyaW5nKGNvbnRleHQucGFnZU51bWJlcikgfSxcbiAgJ3BhZ2UubmFtZSc6IHsgbmFtZTogJ1BhZ2UgbmFtZScsIHRleHQ6IChjb250ZXh0KSA9PiBjb250ZXh0LnBhZ2VOYW1lIH0sXG4gICdyZXBvcnQubmFtZSc6IHsgbmFtZTogJ1JlcG9ydCBuYW1lJywgdGV4dDogKGNvbnRleHQpID0+IGNvbnRleHQucmVwb3J0TmFtZSB9LFxufTtcblxuY29uc3QgRklMVEVSX0ZJRUxEX1BSRUZJWCA9ICdmaWx0ZXIuJztcblxuLy8gQSBmaWVsZCBhIGJsb2NrIGNhbiBjYXJyeSwgYXMgdGhlIGVkaXRvciBvZmZlcnMgYW5kIHNob3dzIGl0LlxuZXhwb3J0IGludGVyZmFjZSBUZXh0RmllbGQge1xuICAvLyBBcyBpdHMgdG9rZW4gd3JpdGVzIGl0LCBsb3dlcmNhc2U6ICdwYWdlLm51bWJlcicsICdmaWx0ZXIuMTInLlxuICBmaWVsZDogc3RyaW5nO1xuICAvLyBXaGF0IGl0IGlzIGNhbGxlZDogJ1BhZ2UgbnVtYmVyJywgYSBmaWx0ZXIncyBsYWJlbC5cbiAgbmFtZTogc3RyaW5nO1xufVxuXG4vLyBFdmVyeSBmaWVsZCBhIGJsb2NrIG9yIGEgdGl0bGUgb2YgdGhpcyBjb250ZXh0IGNhbiBjYXJyeSwgaW4gdGhlIG9yZGVyIHRoZVxuLy8gSW5zZXJ0IGZpZWxkIG1lbnVzIGxpc3QgdGhlbTogdGhlIHBhZ2UgYW5kIHJlcG9ydCBmaWVsZHMsIHRoZW4gZWFjaCBmaWx0ZXJcbi8vIG9mIHRoZSByZXBvcnQgaW4gdGhlIGZpbHRlciBiYXIncyBvcmRlci5cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0RmllbGRzKGNvbnRleHQ6IFRleHRUb2tlbkNvbnRleHQpOiBUZXh0RmllbGRbXSB7XG4gIHJldHVybiBbXG4gICAgLi4uT2JqZWN0LmVudHJpZXMoUEFHRV9GSUVMRFMpLm1hcCgoW2ZpZWxkLCB7IG5hbWUgfV0pID0+ICh7IGZpZWxkLCBuYW1lIH0pKSxcbiAgICAuLi5PYmplY3QuZW50cmllcyhjb250ZXh0LmZpbHRlcnMgPz8ge30pXG4gICAgICAuc29ydCgoWywgYV0sIFssIGJdKSA9PiBhLm9yZGVyIC0gYi5vcmRlcilcbiAgICAgIC5tYXAoKFtpZCwgZmlsdGVyXSkgPT4gKHtcbiAgICAgICAgZmllbGQ6IGAke0ZJTFRFUl9GSUVMRF9QUkVGSVh9JHtpZH1gLFxuICAgICAgICBuYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgIH0pKSxcbiAgXTtcbn1cblxuLy8gQSBmaWVsZCdzIHRva2VuOiB7e3BhZ2UubnVtYmVyfX0sIHt7ZmlsdGVyLjEyfX0uXG5leHBvcnQgZnVuY3Rpb24gZmllbGRUb2tlbihmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7eyR7ZmllbGR9fX1gO1xufVxuXG4vLyBSZXBsYWNlIGV2ZXJ5IHt7dG9rZW59fSBpbiB0aGUgaHRtbC4gVmFsdWVzIGFyZSBodG1sLWVzY2FwZWQ6IGEgcGFnZSBuYW1lZFxuLy8gXCJSJkQgPGRyYWZ0PlwiIG11c3QgcmVhZCBhcyB0aGF0LCBub3QgYXMgbWFya3VwLiBBIHt7dmFsdWUuPGtleT59fSB0b2tlbiByZWFkc1xuLy8gYXMgaXRzIGZvcm1hdHRlZCBudW1iZXIsIHRoZSBlbGxpcHNpcyB3aGlsZSB0aGF0IGxvYWRzLCBlbHNlIHRoZSBlbSBkYXNoLlxuZXhwb3J0IGZ1bmN0aW9uIGZpbGxUZXh0VG9rZW5zKGh0bWw6IHN0cmluZywgY29udGV4dDogVGV4dFRva2VuQ29udGV4dCk6IHN0cmluZyB7XG4gIHJldHVybiBodG1sXG4gICAgLnJlcGxhY2UoVkFMVUVfVE9LRU5fUEFUVEVSTiwgKG1hdGNoLCBrZXk6IHN0cmluZykgPT4gZXNjYXBlSHRtbChcbiAgICAgIHZhbHVlVGV4dChjb250ZXh0LnZhbHVlcz8uW2tleS50b0xvd2VyQ2FzZSgpXSksXG4gICAgKSlcbiAgICAucmVwbGFjZShGSUVMRF9UT0tFTl9QQVRURVJOLCAobWF0Y2gsIGZpZWxkOiBzdHJpbmcpID0+IGVzY2FwZUh0bWwoZmllbGRUZXh0KGZpZWxkLCBjb250ZXh0KSkpO1xufVxuXG4vLyBBIGNvbXBvbmVudCdzIHRpdGxlIGFzIGl0IHJlYWRzOiBpdHMgcGFnZSwgcmVwb3J0IGFuZCBmaWx0ZXIgZmllbGRzIGZpbGxlZFxuLy8gd2l0aCB0aGUgc2FtZSB3b3JkcyBhcyBhIGJsb2NrJ3MsIGUuZy4gJ1NpZ24tdXBzIOKAlCB7e2ZpbHRlci4xMn19JyByZWFkc1xuLy8gJ1NpZ24tdXBzIOKAlCBTZXB0ZW1iZXIgMjAyNicuIE5ldmVyIGVzY2FwZWQ6IHRoZSBjYW52YXMgYmluZHMgYSB0aXRsZSBhc1xuLy8gdGV4dCwgYW5kIHRoZSBleHBvcnRzIGRyYXcgcGxhaW4gc3RyaW5ncy4gQSB2YWx1ZSBiZWxvbmdzIHRvIGEgcGFnZSdzIHRleHQsXG4vLyBuZXZlciBhIHRpdGxlLCBzbyBhIHZhbHVlIHRva2VuIHJlYWRzIGFzIHRoZSBlbSBkYXNoLiAnJyBmb3Igbm8gdGl0bGUuXG5leHBvcnQgZnVuY3Rpb24gZmlsbFRpdGxlVG9rZW5zKHRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0OiBUZXh0VG9rZW5Db250ZXh0KTogc3RyaW5nIHtcbiAgcmV0dXJuICh0aXRsZSA/PyAnJylcbiAgICAucmVwbGFjZShWQUxVRV9UT0tFTl9QQVRURVJOLCBWQUxVRV9FTVBUWV9URVhUKVxuICAgIC5yZXBsYWNlKEZJRUxEX1RPS0VOX1BBVFRFUk4sIChtYXRjaCwgZmllbGQ6IHN0cmluZykgPT4gZmllbGRUZXh0KGZpZWxkLCBjb250ZXh0KSk7XG59XG5cbi8vIFdoYXQgYSBmaWVsZCB0b2tlbiByZWFkcyBhcywgaXRzIGZpZWxkIHdyaXR0ZW4gYXMgRklFTERfVE9LRU5fUEFUVEVSTlxuLy8gY2FwdHVyZXMgaXQgKCdwYWdlLm5hbWUnLCAnZmlsdGVyLjEyJykuIEEge3tmaWx0ZXIuPGlkPn19IHRva2VuIHJlYWRzIGFzIGl0c1xuLy8gZmlsdGVyJ3Mgd29yZGluZywgdGhlIGVsbGlwc2lzIHdoaWxlIGEgc2VsZWN0J3MgbmFtZXMgbG9hZCwgZWxzZSB0aGUgZW1cbi8vIGRhc2g6IHRoZSBmaWx0ZXIgY291bGQgbm90IGJlIHJlYWQsIG9yIHRoZSByZXBvcnQgaGFzIG5vIGdyb3VwIG9mIHRoYXQgaWQuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRUZXh0KGZpZWxkOiBzdHJpbmcsIGNvbnRleHQ6IFRleHRUb2tlbkNvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCBuYW1lID0gZmllbGQudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoIW5hbWUuc3RhcnRzV2l0aChGSUxURVJfRklFTERfUFJFRklYKSkge1xuICAgIHJldHVybiBQQUdFX0ZJRUxEU1tuYW1lXT8udGV4dChjb250ZXh0KSA/PyBWQUxVRV9FTVBUWV9URVhUO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gY29udGV4dC5maWx0ZXJzPy5bTnVtYmVyKG5hbWUuc2xpY2UoRklMVEVSX0ZJRUxEX1BSRUZJWC5sZW5ndGgpKV07XG5cbiAgcmV0dXJuIGZpbHRlcj8udGV4dCA/PyAoZmlsdGVyPy5sb2FkaW5nID8gVkFMVUVfTE9BRElOR19URVhUIDogVkFMVUVfRU1QVFlfVEVYVCk7XG59XG5cbi8vIFdhbGsgYSBibG9jaydzIGh0bWwgaW50byB3aGF0IHRoZSBleHBvcnRzIGRyYXc6IHRoZSB3b3JkcyBiZXR3ZWVuIGl0cyB0YWJsZXNcbi8vIGFzIHBhcmFncmFwaHMgb2Ygc3R5bGVkIHJ1bnMsIGFuZCBlYWNoIHRhYmxlIGFzIGEgZ3JpZCBvZiBjZWxscy4gVG9rZW5zIGFyZVxuLy8gZmlsbGVkIGZpcnN0IHNvIGEgcGFnZSBudW1iZXIgaXMganVzdCB0ZXh0IGJ5IHRoZW4uIFRoZXJlIGlzIGEgdGV4dCBwYXJ0IGZvclxuLy8gZXZlcnkgcnVuIG9mIG5vZGVzIHNwbGl0QXRUYWJsZXMgZmluZHMsIGV2ZW4gb25lIHRoYXQgaG9sZHMgbm8gd29yZHMsIHNvIHRoZVxuLy8gbnRoIHRleHQgcGFydCBpcyB0aGUgbnRoIHJ1biB0aGUgZXhwb3J0J3MgRE9NIG1lYXN1cmUgZmluZHMuXG5leHBvcnQgZnVuY3Rpb24gdGV4dEJsb2NrcyhodG1sOiBzdHJpbmcsIGNvbnRleHQ6IFRleHRUb2tlbkNvbnRleHQpOiBUZXh0QmxvY2tbXSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhgPGJvZHk+JHtmaWxsVGV4dFRva2VucyhodG1sLCBjb250ZXh0KX08L2JvZHk+YCwgJ3RleHQvaHRtbCcpO1xuICBjb25zdCBibG9ja3MgPSBzcGxpdEF0VGFibGVzKGRvY3VtZW50LmJvZHkpLm1hcCgocGFydCk6IFRleHRCbG9jayA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnQpKSB7XG4gICAgICByZXR1cm4geyBraW5kOiAndGFibGUnLCB0YWJsZTogcGFyc2VUYWJsZShwYXJ0KSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGNvbnN0IHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSA9IFtdO1xuICAgIGZyYWdtZW50LmFwcGVuZCguLi5wYXJ0KTtcbiAgICB3YWxrQmxvY2tzKGZyYWdtZW50LCBwYXJhZ3JhcGhzLCBudWxsKTtcblxuICAgIHJldHVybiB7IGtpbmQ6ICd0ZXh0JywgcGFyYWdyYXBocyB9O1xuICB9KTtcblxuICB0cmltQmxhbmtFbmQoYmxvY2tzKTtcblxuICByZXR1cm4gYmxvY2tzO1xufVxuXG4vLyBUaGUgYmxvY2sgYXMgcGFyYWdyYXBocyBhbG9uZSwgZm9yIGFueXRoaW5nIHRoYXQgZHJhd3Mgbm8gZ3JpZDogYSB0YWJsZSByZWFkc1xuLy8gYXMgYSBsaW5lIHBlciByb3csIGl0cyBjZWxscycgd29yZHMgam9pbmVkIGJ5ICcgwrcgJy5cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0UGFyYWdyYXBocyhodG1sOiBzdHJpbmcsIGNvbnRleHQ6IFRleHRUb2tlbkNvbnRleHQpOiBUZXh0UGFyYWdyYXBoW10ge1xuICByZXR1cm4gYmxvY2tQYXJhZ3JhcGhzKHRleHRCbG9ja3MoaHRtbCwgY29udGV4dCkpO1xufVxuXG4vLyBCbG9ja3MgdGV4dEJsb2NrcyBhbHJlYWR5IHdhbGtlZCwgYXMgdGV4dFBhcmFncmFwaHMgcmVhZHMgdGhlbS5cbmV4cG9ydCBmdW5jdGlvbiBibG9ja1BhcmFncmFwaHMoYmxvY2tzOiBUZXh0QmxvY2tbXSk6IFRleHRQYXJhZ3JhcGhbXSB7XG4gIHJldHVybiBibG9ja3MuZmxhdE1hcCgoYmxvY2spID0+IGJsb2NrLmtpbmQgPT09ICd0ZXh0J1xuICAgID8gYmxvY2sucGFyYWdyYXBoc1xuICAgIDogYmxvY2sudGFibGUucm93cy5tYXAocm93UGFyYWdyYXBoKSk7XG59XG5cbi8vIFRoZSBodG1sIGFzIHBsYWluIHRleHQg4oCUIHdoYXQgYSBibG9jayBzYXlzLCBmb3IgYW55dGhpbmcgdGhhdCBjYW5ub3Qgc3R5bGUgaXQuXG5leHBvcnQgZnVuY3Rpb24gdGV4dFBsYWluKGh0bWw6IHN0cmluZywgY29udGV4dDogVGV4dFRva2VuQ29udGV4dCk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0UGFyYWdyYXBocyhodG1sLCBjb250ZXh0KVxuICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJ1bnMubWFwKChydW4pID0+IHJ1bi50ZXh0KS5qb2luKCcnKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8vIEEgYmxvY2sncyB0b3AtbGV2ZWwgbm9kZXMgc3BsaXQgYXQgZWFjaCB0YWJsZTogZWFjaCB0YWJsZSBvbiBpdHMgb3duLCBhbmRcbi8vIGVhY2ggcnVuIG9mIHRoZSBub2RlcyBiZXR3ZWVuIHRoZW0gYXMgYSBsaXN0LiBBIHRhYmxlIHNpdHMgb25seSBhdCB0aGUgdG9wXG4vLyBsZXZlbCAoUmVwb3J0VGV4dEh0bWwgZmxhdHRlbnMgYW55IG90aGVyKSwgc28gdGhpcyBpcyB0aGUgd2hvbGUgc3BsaXQuXG4vLyB0ZXh0QmxvY2tzIGFuZCB0aGUgZXhwb3J0J3MgbWVhc3VyZSBvZiB0aGUgcmVuZGVyZWQgYmxvY2sgYm90aCBzcGxpdCBoZXJlLlxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QXRUYWJsZXMocGFyZW50OiBOb2RlKTogKE5vZGVbXSB8IEhUTUxUYWJsZUVsZW1lbnQpW10ge1xuICBjb25zdCBwYXJ0czogKE5vZGVbXSB8IEhUTUxUYWJsZUVsZW1lbnQpW10gPSBbXTtcbiAgbGV0IHJ1bjogTm9kZVtdIHwgbnVsbCA9IG51bGw7XG5cbiAgcGFyZW50LmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnVEFCTEUnKSB7XG4gICAgICBwYXJ0cy5wdXNoKG5vZGUgYXMgSFRNTFRhYmxlRWxlbWVudCk7XG4gICAgICBydW4gPSBudWxsO1xuICAgIH0gZWxzZSBpZiAocnVuKSB7XG4gICAgICBydW4ucHVzaChub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnVuID0gW25vZGVdO1xuICAgICAgcGFydHMucHVzaChydW4pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBBIHRhYmxlIGFzIGEgZ3JpZCBvZiBjZWxscywgZWFjaCBob2xkaW5nIGl0cyB3b3JkcyBhcyBwYXJhZ3JhcGhzLiBSb3dzIGNvbWVcbi8vIGFzIGEgYnJvd3NlciBkcmF3cyB0aGVtLCB0aGUgaGVhZCBmaXJzdCBhbmQgdGhlIGZvb3QgbGFzdCwgd2hhdGV2ZXIgb3JkZXIgdGhlXG4vLyBodG1sIHdyaXRlcyBpdHMgc2VjdGlvbnMgaW4uXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUYWJsZShlbGVtZW50OiBIVE1MVGFibGVFbGVtZW50KTogVGV4dFRhYmxlIHtcbiAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20oZWxlbWVudC5yb3dzLCAocm93KTogVGV4dFRhYmxlUm93ID0+ICh7XG4gICAgc2VjdGlvbjogdGFibGVTZWN0aW9uKHJvdyksXG4gICAgY2VsbHM6IEFycmF5LmZyb20ocm93LmNlbGxzLCB0YWJsZUNlbGwpLFxuICB9KSk7XG5cbiAgcmV0dXJuIHRhYmxlR3JpZCh7IHJvd3MsIGNvbHVtbnM6IDAgfSk7XG59XG5cbi8vIFdoZXJlIGVhY2ggY2VsbCBzaXRzLCBieSB0aGUgSFRNTCB0YWJsZSBhbGdvcml0aG06IGEgY2VsbCB0YWtlcyB0aGUgZmlyc3Rcbi8vIGNvbHVtbiBvZiBpdHMgcm93IHRoYXQgbm8gY2VsbCBzcGFubmluZyBkb3duIGZyb20gYSByb3cgYWJvdmUgaG9sZHMuIEEgcm93c3BhblxuLy8gc3RvcHMgYXQgdGhlIGxhc3Qgcm93IG9mIGl0cyBzZWN0aW9uLCBhcyBhIGJyb3dzZXIgZHJhd3MgaXQsIGFuZCB0aGUgZ3JpZCBpc1xuLy8gYXMgd2lkZSBhcyB0aGUgd2lkZXN0IHJpZ2h0IGVkZ2Ugb2YgYW55IGNlbGwuXG5leHBvcnQgZnVuY3Rpb24gdGFibGVHcmlkKHRhYmxlOiBUZXh0VGFibGUpOiBUZXh0VGFibGUge1xuICBjb25zdCB0YWtlbjogYm9vbGVhbltdW10gPSB0YWJsZS5yb3dzLm1hcCgoKSA9PiBbXSk7XG4gIGxldCBjb2x1bW5zID0gMDtcblxuICBjb25zdCByb3dzID0gdGFibGUucm93cy5tYXAoKHJvdywgaW5kZXgpOiBUZXh0VGFibGVSb3cgPT4ge1xuICAgIGNvbnN0IHNlY3Rpb25FbmQgPSByb3dTZWN0aW9uRW5kKHRhYmxlLnJvd3MsIGluZGV4KTtcbiAgICBsZXQgY29sdW1uID0gMDtcblxuICAgIGNvbnN0IGNlbGxzID0gcm93LmNlbGxzLm1hcCgoY2VsbCk6IFRleHRUYWJsZUNlbGwgPT4ge1xuICAgICAgd2hpbGUgKHRha2VuW2luZGV4XVtjb2x1bW5dKSB7XG4gICAgICAgIGNvbHVtbisrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwbGFjZWQgPSB7IC4uLmNlbGwsIHJvdzogaW5kZXgsIGNvbHVtbiwgcm93U3BhbjogTWF0aC5taW4oY2VsbC5yb3dTcGFuLCBzZWN0aW9uRW5kIC0gaW5kZXgpIH07XG4gICAgICBvY2N1cHkodGFrZW4sIHBsYWNlZCk7XG4gICAgICBjb2x1bW4gKz0gcGxhY2VkLmNvbFNwYW47XG4gICAgICBjb2x1bW5zID0gTWF0aC5tYXgoY29sdW1ucywgY29sdW1uKTtcblxuICAgICAgcmV0dXJuIHBsYWNlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IC4uLnJvdywgY2VsbHMgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgcm93cywgY29sdW1ucyB9O1xufVxuXG5mdW5jdGlvbiB0YWJsZVNlY3Rpb24ocm93OiBIVE1MVGFibGVSb3dFbGVtZW50KTogVGV4dFRhYmxlUm93WydzZWN0aW9uJ10ge1xuICBjb25zdCBzZWN0aW9uID0gcm93LnBhcmVudEVsZW1lbnQ/Lm5vZGVOYW1lO1xuXG4gIHJldHVybiBzZWN0aW9uID09PSAnVEhFQUQnID8gJ2hlYWQnIDogc2VjdGlvbiA9PT0gJ1RGT09UJyA/ICdmb290JyA6ICdib2R5Jztcbn1cblxuLy8gT25lIHRoIG9yIHRkLiBBIGhlYWRlciBjZWxsJ3MgcnVucyBhcmUgYm9sZCwgYW5kIGV2ZXJ5IHBhcmFncmFwaCB0YWtlcyB0aGVcbi8vIGNlbGwncyB0ZXh0LWFsaWduIHVubGVzcyBpdCBoYXMgaXRzIG93bjogdGhlIGRlZmF1bHQgbG9vayBjZW50ZXJzIGEgaGVhZGVyXG4vLyBjZWxsIGFuZCBwdXRzIGFueSBvdGhlciBvbiB0aGUgbGVmdC5cbmZ1bmN0aW9uIHRhYmxlQ2VsbChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCk6IFRleHRUYWJsZUNlbGwge1xuICBjb25zdCBoZWFkZXIgPSBjZWxsLm5vZGVOYW1lID09PSAnVEgnO1xuICBjb25zdCBhbGlnbiA9IGNlbGxBbGlnbihjZWxsLnN0eWxlLnRleHRBbGlnbikgPz8gKGhlYWRlciA/ICdjZW50ZXInIDogJ2xlZnQnKTtcbiAgY29uc3QgdmFsaWduID0gY2VsbC5zdHlsZS52ZXJ0aWNhbEFsaWduO1xuICBjb25zdCBwYXJhZ3JhcGhzOiBUZXh0UGFyYWdyYXBoW10gPSBbXTtcblxuICB3YWxrQmxvY2tzKGNlbGwsIHBhcmFncmFwaHMsIG51bGwsIGhlYWRlciA/IHsgYm9sZDogdHJ1ZSB9IDoge30pO1xuXG4gIHJldHVybiB7XG4gICAgcGFyYWdyYXBoczogcGFyYWdyYXBocy5tYXAoKHBhcmFncmFwaCkgPT4gKHsgLi4ucGFyYWdyYXBoLCBhbGlnbjogcGFyYWdyYXBoLmFsaWduID8/IGFsaWduIH0pKSxcbiAgICBjb2xTcGFuOiBNYXRoLm1heCgxLCBjZWxsLmNvbFNwYW4pLFxuICAgIHJvd1NwYW46IE1hdGgubWF4KDEsIGNlbGwucm93U3BhbiksXG4gICAgcm93OiAwLFxuICAgIGNvbHVtbjogMCxcbiAgICBhbGlnbixcbiAgICB2YWxpZ246IHZhbGlnbiA9PT0gJ3RvcCcgfHwgdmFsaWduID09PSAnbWlkZGxlJyB8fCB2YWxpZ24gPT09ICdib3R0b20nID8gdmFsaWduIDogdW5kZWZpbmVkLFxuICAgIGZpbGw6IGNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID8gaGV4Q29sb3IoY2VsbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjZWxsQWxpZ24odmFsdWU6IHN0cmluZyk6IFRleHRUYWJsZUNlbGxbJ2FsaWduJ10gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09ICdsZWZ0JyB8fCB2YWx1ZSA9PT0gJ2NlbnRlcicgfHwgdmFsdWUgPT09ICdyaWdodCcgfHwgdmFsdWUgPT09ICdqdXN0aWZ5JyA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG4vLyBUaGUgaW5kZXgganVzdCBwYXN0IHRoZSBsYXN0IHJvdyBvZiB0aGUgc2VjdGlvbiB0aGUgcm93IGF0IGluZGV4IHNpdHMgaW4uXG5mdW5jdGlvbiByb3dTZWN0aW9uRW5kKHJvd3M6IFRleHRUYWJsZVJvd1tdLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGVuZCA9IGluZGV4ICsgMTtcbiAgd2hpbGUgKGVuZCA8IHJvd3MubGVuZ3RoICYmIHJvd3NbZW5kXS5zZWN0aW9uID09PSByb3dzW2luZGV4XS5zZWN0aW9uKSB7XG4gICAgZW5kKys7XG4gIH1cblxuICByZXR1cm4gZW5kO1xufVxuXG4vLyBNYXJrIHRoZSBncmlkIHNsb3RzIGEgcGxhY2VkIGNlbGwgY292ZXJzLlxuZnVuY3Rpb24gb2NjdXB5KHRha2VuOiBib29sZWFuW11bXSwgY2VsbDogVGV4dFRhYmxlQ2VsbCk6IHZvaWQge1xuICBmb3IgKGxldCByb3cgPSBjZWxsLnJvdzsgcm93IDwgY2VsbC5yb3cgKyBjZWxsLnJvd1NwYW47IHJvdysrKSB7XG4gICAgZm9yIChsZXQgY29sdW1uID0gY2VsbC5jb2x1bW47IGNvbHVtbiA8IGNlbGwuY29sdW1uICsgY2VsbC5jb2xTcGFuOyBjb2x1bW4rKykge1xuICAgICAgdGFrZW5bcm93XVtjb2x1bW5dID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQSB0YWJsZSByb3cgYXMgb25lIGxpbmUgb2YgdGV4dDogaXRzIGNlbGxzIGluIG9yZGVyLCBhIGNlbGwncyBvd24gbGluZXNcbi8vIGpvaW5lZCBieSBhIHNwYWNlLlxuZnVuY3Rpb24gcm93UGFyYWdyYXBoKHJvdzogVGV4dFRhYmxlUm93KTogVGV4dFBhcmFncmFwaCB7XG4gIHJldHVybiB7XG4gICAgcnVuczogcm93LmNlbGxzLmZsYXRNYXAoKGNlbGwsIGluZGV4KSA9PiBbXG4gICAgICAuLi4oaW5kZXggPyBbeyB0ZXh0OiBUQUJMRV9DRUxMX1NFUEFSQVRPUiB9XSA6IFtdKSxcbiAgICAgIC4uLmNlbGwucGFyYWdyYXBocy5mbGF0TWFwKChwYXJhZ3JhcGgsIGxpbmUpID0+IFsuLi4obGluZSA/IFt7IHRleHQ6ICcgJyB9XSA6IFtdKSwgLi4ucGFyYWdyYXBoLnJ1bnNdKSxcbiAgICBdKSxcbiAgfTtcbn1cblxuLy8gQW4gZW1wdHkgcGFyYWdyYXBoIGlzIGEgYmxhbmsgbGluZSB0aGUgY2FudmFzIGRyYXdzICg8cD48YnI+PC9wPiwgb3IgYW4gZW1wdHlcbi8vIDxwPiksIHNvIG9uZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGJsb2NrIGtlZXBzIHRoZSB3b3JkcyBiZWxvdyBpdCB3aGVyZSB0aGVcbi8vIGNhbnZhcyBwdXRzIHRoZW0uIEF0IHRoZSBlbmQgb2YgdGhlIHdob2xlIGJsb2NrIGl0IGRyYXdzIG5vdGhpbmcsIGFuZCBpc1xuLy8gZHJvcHBlZCBzbyBpdCBuZXZlciBjb3VudHMgYXMgcnVubmluZyBwYXN0IHRoZSBib3guIEFuIGVtcHR5IHBhcmFncmFwaFxuLy8gYmVmb3JlIGEgdGFibGUgaXMgbm90IGF0IHRoZSBlbmQuXG5mdW5jdGlvbiB0cmltQmxhbmtFbmQoYmxvY2tzOiBUZXh0QmxvY2tbXSk6IHZvaWQge1xuICBjb25zdCBsYXN0ID0gYmxvY2tzW2Jsb2Nrcy5sZW5ndGggLSAxXTtcblxuICB3aGlsZSAobGFzdD8ua2luZCA9PT0gJ3RleHQnICYmIGxhc3QucGFyYWdyYXBocy5sZW5ndGggJiYgIWxhc3QucGFyYWdyYXBoc1tsYXN0LnBhcmFncmFwaHMubGVuZ3RoIC0gMV0ucnVucy5sZW5ndGgpIHtcbiAgICBsYXN0LnBhcmFncmFwaHMucG9wKCk7XG4gIH1cbn1cblxuLy8gYmFzZSBpcyB0aGUgc3R5bGUgZXZlcnkgcnVuIHN0YXJ0cyBmcm9tOiBib2xkIGZvciBhIGhlYWRlciBjZWxsJ3Mgd29yZHMuXG5mdW5jdGlvbiB3YWxrQmxvY2tzKFxuICBwYXJlbnQ6IE5vZGUsXG4gIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSxcbiAgbGlzdDogJ2J1bGxldCcgfCAnbnVtYmVyJyB8IG51bGwsXG4gIGJhc2U6IFBhcnRpYWw8VGV4dFJ1bj4gPSB7fSxcbik6IHZvaWQge1xuICAvLyBMb29zZSBpbmxpbmUgY29udGVudCBiZXR3ZWVuIGJsb2NrcyAodGV4dCBzdHJhaWdodCB1bmRlciB0aGUgYmxvY2ssIGFuXG4gIC8vIDxsaT4gb3IgYSBjZWxsKSBpcyBnYXRoZXJlZCBpbnRvIGEgcGFyYWdyYXBoIG9mIGl0cyBvd24uXG4gIGxldCBsb29zZTogVGV4dFBhcmFncmFwaCB8IG51bGwgPSBudWxsO1xuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAobG9vc2UgJiYgaXNTaG93bihsb29zZSkpIHtcbiAgICAgIHBhcmFncmFwaHMucHVzaChsb29zZSk7XG4gICAgfVxuICAgIGxvb3NlID0gbnVsbDtcbiAgfTtcblxuICBwYXJlbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChuYW1lID09PSAndWwnIHx8IG5hbWUgPT09ICdvbCcgfHwgbmFtZSA9PT0gJ2xpJyB8fCBuYW1lID09PSAncCcgfHwgL15oWzEtM10kLy50ZXN0KG5hbWUpKSB7XG4gICAgICBmbHVzaCgpO1xuICAgICAgd2Fsa0Jsb2NrKG5vZGUgYXMgSFRNTEVsZW1lbnQsIHBhcmFncmFwaHMsIGxpc3QsIGJhc2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9vc2UgPSBsb29zZSA/PyB7IHJ1bnM6IFtdIH07XG4gICAgd2Fsa0lubGluZShub2RlLCBiYXNlLCBsb29zZSwgcGFyYWdyYXBocywgdHJ1ZSk7XG4gIH0pO1xuXG4gIGZsdXNoKCk7XG59XG5cbi8vIFdoZXRoZXIgbG9vc2UgY29udGVudCdzIGxhc3QgbGluZSBzaG93cyBhbnl0aGluZy4gV2hpdGVzcGFjZSBhbG9uZSBiZXR3ZWVuXG4vLyBibG9ja3MgaXMgbm90IGRyYXduLCBhbmQgYSBsaW5lIGEgPGJyPiBlbmRlZCB3YXMgcHVzaGVkIHdoZW4gaXQgZW5kZWQsIHNvIGFcbi8vIHRyYWlsaW5nIDxicj4gYWRkcyBubyBlbXB0eSBsaW5lIGFmdGVyIGl0LlxuZnVuY3Rpb24gaXNTaG93bihsb29zZTogVGV4dFBhcmFncmFwaCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbG9vc2UucnVucy5zb21lKChydW4pID0+IC9bXiBcXHRcXG5cXHJcXGZdLy50ZXN0KHJ1bi50ZXh0KSk7XG59XG5cbmZ1bmN0aW9uIHdhbGtCbG9jayhcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSxcbiAgbGlzdDogJ2J1bGxldCcgfCAnbnVtYmVyJyB8IG51bGwsXG4gIGJhc2U6IFBhcnRpYWw8VGV4dFJ1bj4sXG4pOiB2b2lkIHtcbiAgY29uc3QgbmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobmFtZSA9PT0gJ3VsJyB8fCBuYW1lID09PSAnb2wnKSB7XG4gICAgd2Fsa0Jsb2NrcyhlbGVtZW50LCBwYXJhZ3JhcGhzLCBuYW1lID09PSAndWwnID8gJ2J1bGxldCcgOiAnbnVtYmVyJywgYmFzZSk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2xpJykge1xuICAgIGNvbnN0IGl0ZW06IFRleHRQYXJhZ3JhcGggPSB7IHJ1bnM6IFtdLCBidWxsZXQ6IGxpc3QgPz8gJ2J1bGxldCcgfTtcbiAgICBjb25zdCBuZXN0ZWQ6IFRleHRQYXJhZ3JhcGhbXSA9IFtdO1xuICAgIC8vIEEgbGlzdCBpdGVtJ3MgZmlyc3QgcGFyYWdyYXBoIElTIHRoZSBpdGVtOyBhbnl0aGluZyBhZnRlciBpdCBpcyBpdHMgb3duXG4gICAgLy8gbGluZSB1bmRlciB0aGUgc2FtZSBidWxsZXQuXG4gICAgd2Fsa0Jsb2NrcyhlbGVtZW50LCBuZXN0ZWQsIGxpc3QsIGJhc2UpO1xuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBuZXN0ZWQubGVuZ3RoID8gbmVzdGVkIDogW2l0ZW1dO1xuICAgIHBhcmFncmFwaHMucHVzaCh7IC4uLmZpcnN0LCBidWxsZXQ6IGxpc3QgPz8gJ2J1bGxldCcgfSwgLi4ucmVzdCk7XG4gIH0gZWxzZSB7XG4gICAgd2Fsa1BhcmFncmFwaChlbGVtZW50LCBwYXJhZ3JhcGhzLCBiYXNlKTtcbiAgfVxufVxuXG4vLyBBIHAgb3IgYSBoZWFkaW5nLiBBIDxicj4gZW5kcyBhIGxpbmUsIHNvIGl0cyBsYXN0IGxpbmUgaXMgcHVzaGVkIG9ubHkgd2hlbiBpdFxuLy8gaG9sZHMgd29yZHMgb3Igbm8gPGJyPiBjYW1lIGJlZm9yZSBpdDogPHA+PGJyPjwvcD4gaXMgb25lIGJsYW5rIGxpbmUsXG4vLyA8cD5hPGJyPjwvcD4gb25lIGxpbmUgYW5kIDxwPmE8YnI+YjwvcD4gdHdvLCBhcyBhIGJyb3dzZXIgZHJhd3MgdGhlbS5cbmZ1bmN0aW9uIHdhbGtQYXJhZ3JhcGgoZWxlbWVudDogSFRNTEVsZW1lbnQsIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSwgYmFzZTogUGFydGlhbDxUZXh0UnVuPik6IHZvaWQge1xuICBjb25zdCBuYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBoZWFkaW5nID0gbmFtZS5zdGFydHNXaXRoKCdoJykgPyBOdW1iZXIobmFtZVsxXSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHBhcmFncmFwaDogVGV4dFBhcmFncmFwaCA9IHtcbiAgICBydW5zOiBbXSxcbiAgICBhbGlnbjogYmxvY2tBbGlnbihlbGVtZW50KSxcbiAgICBidWxsZXQ6IHVuZGVmaW5lZCxcbiAgICBoZWFkaW5nLFxuICB9O1xuICBjb25zdCBzdHlsZTogUGFydGlhbDxUZXh0UnVuPiA9IGhlYWRpbmdcbiAgICA/IHsgLi4uYmFzZSwgYm9sZDogdHJ1ZSwgZm9udFNpemU6IEhFQURJTkdfVEVYVF9TSVpFU1toZWFkaW5nXSB9XG4gICAgOiBiYXNlO1xuXG4gIGNvbnN0IGJyZWFrcyA9IHdhbGtJbmxpbmUoZWxlbWVudCwgc3R5bGUsIHBhcmFncmFwaCwgcGFyYWdyYXBocyk7XG4gIGlmIChwYXJhZ3JhcGgucnVucy5sZW5ndGggfHwgIWJyZWFrcykge1xuICAgIHBhcmFncmFwaHMucHVzaChwYXJhZ3JhcGgpO1xuICB9XG59XG5cbi8vIEFjY3VtdWxhdGUgaW5saW5lIHN0eWxlcyBkb3duIHRoZSB0cmVlLiBBIDxicj4gZW5kcyB0aGUgY3VycmVudCBsaW5lOiB0aGVcbi8vIHJ1bnMgYWZ0ZXIgaXQgc3RhcnQgYSBuZXcgcGFyYWdyYXBoIHdpdGggdGhlIHNhbWUgYWxpZ25tZW50IGFuZCBidWxsZXQuXG4vLyBSZXR1cm5zIGhvdyBtYW55IGxpbmVzIGEgPGJyPiBlbmRlZC5cbmZ1bmN0aW9uIHdhbGtJbmxpbmUoXG4gIG5vZGU6IE5vZGUsXG4gIHN0eWxlOiBQYXJ0aWFsPFRleHRSdW4+LFxuICBwYXJhZ3JhcGg6IFRleHRQYXJhZ3JhcGgsXG4gIHBhcmFncmFwaHM6IFRleHRQYXJhZ3JhcGhbXSxcbiAgaXNTZWxmID0gZmFsc2UsXG4pOiBudW1iZXIge1xuICBjb25zdCBub2RlcyA9IGlzU2VsZiA/IFtub2RlXSA6IEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKTtcblxuICByZXR1cm4gbm9kZXMucmVkdWNlKChicmVha3MsIGNoaWxkKSA9PiBicmVha3MgKyB3YWxrSW5saW5lTm9kZShjaGlsZCwgc3R5bGUsIHBhcmFncmFwaCwgcGFyYWdyYXBocyksIDApO1xufVxuXG5mdW5jdGlvbiB3YWxrSW5saW5lTm9kZShcbiAgbm9kZTogTm9kZSxcbiAgc3R5bGU6IFBhcnRpYWw8VGV4dFJ1bj4sXG4gIHBhcmFncmFwaDogVGV4dFBhcmFncmFwaCxcbiAgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLFxuKTogbnVtYmVyIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQgPz8gJyc7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIHBhcmFncmFwaC5ydW5zLnB1c2goeyAuLi5zdHlsZSwgdGV4dCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGUgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2JyJykge1xuICAgIHBhcmFncmFwaHMucHVzaCh7IC4uLnBhcmFncmFwaCwgcnVuczogWy4uLnBhcmFncmFwaC5ydW5zXSB9KTtcbiAgICBwYXJhZ3JhcGgucnVucy5sZW5ndGggPSAwO1xuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gd2Fsa0lubGluZShlbGVtZW50LCB7IC4uLnN0eWxlLCAuLi5pbmxpbmVTdHlsZShlbGVtZW50KSB9LCBwYXJhZ3JhcGgsIHBhcmFncmFwaHMpO1xufVxuXG5mdW5jdGlvbiBpbmxpbmVTdHlsZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFBhcnRpYWw8VGV4dFJ1bj4ge1xuICBjb25zdCBuYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBzdHlsZTogUGFydGlhbDxUZXh0UnVuPiA9IHt9O1xuXG4gIGlmIChuYW1lID09PSAnc3Ryb25nJykge1xuICAgIHN0eWxlLmJvbGQgPSB0cnVlO1xuICB9XG4gIGlmIChuYW1lID09PSAnZW0nKSB7XG4gICAgc3R5bGUuaXRhbGljID0gdHJ1ZTtcbiAgfVxuICBpZiAobmFtZSA9PT0gJ3UnKSB7XG4gICAgc3R5bGUudW5kZXJsaW5lID0gdHJ1ZTtcbiAgfVxuICBpZiAobmFtZSA9PT0gJ3MnKSB7XG4gICAgc3R5bGUuc3RyaWtlID0gdHJ1ZTtcbiAgfVxuICBpZiAobmFtZSA9PT0gJ2EnKSB7XG4gICAgc3R5bGUubGluayA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJykgPz8gdW5kZWZpbmVkO1xuICAgIHN0eWxlLnVuZGVybGluZSA9IHRydWU7XG4gIH1cblxuICAvLyBXaGF0IGlzIG5vIGNvbG9yIGxlYXZlcyB0aGUgY29sb3IgdGhlIHJ1biBpbmhlcml0cy5cbiAgY29uc3QgY3NzID0gZWxlbWVudC5zdHlsZTtcbiAgY29uc3QgY29sb3IgPSBjc3MuY29sb3IgPyBoZXhDb2xvcihjc3MuY29sb3IpIDogdW5kZWZpbmVkO1xuICBjb25zdCBoaWdobGlnaHQgPSBjc3MuYmFja2dyb3VuZENvbG9yID8gaGV4Q29sb3IoY3NzLmJhY2tncm91bmRDb2xvcikgOiB1bmRlZmluZWQ7XG4gIGlmIChjb2xvcikge1xuICAgIHN0eWxlLmNvbG9yID0gY29sb3I7XG4gIH1cbiAgaWYgKGhpZ2hsaWdodCkge1xuICAgIHN0eWxlLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgfVxuICBpZiAoY3NzLmZvbnRTaXplKSB7XG4gICAgc3R5bGUuZm9udFNpemUgPSBwb2ludHMoY3NzLmZvbnRTaXplKTtcbiAgfVxuICBpZiAoY3NzLmZvbnRXZWlnaHQpIHtcbiAgICBzdHlsZS5ib2xkID0gY3NzLmZvbnRXZWlnaHQgPT09ICdib2xkJyB8fCBOdW1iZXIoY3NzLmZvbnRXZWlnaHQpID49IDYwMDtcbiAgfVxuICBpZiAoY3NzLmZvbnRTdHlsZSkge1xuICAgIHN0eWxlLml0YWxpYyA9IGNzcy5mb250U3R5bGUgPT09ICdpdGFsaWMnO1xuICB9XG4gIGlmIChjc3MudGV4dERlY29yYXRpb24pIHtcbiAgICBzdHlsZS51bmRlcmxpbmUgPSBjc3MudGV4dERlY29yYXRpb24uaW5jbHVkZXMoJ3VuZGVybGluZScpO1xuICAgIHN0eWxlLnN0cmlrZSA9IGNzcy50ZXh0RGVjb3JhdGlvbi5pbmNsdWRlcygnbGluZS10aHJvdWdoJyk7XG4gIH1cbiAgaWYgKGNzcy5mb250RmFtaWx5KSB7XG4gICAgc3R5bGUuZm9udEZhY2UgPSBjc3MuZm9udEZhbWlseS5zcGxpdCgnLCcpWzBdLnJlcGxhY2UoL1tcIiddL2csICcnKS50cmltKCk7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGJsb2NrQWxpZ24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBUZXh0UGFyYWdyYXBoWydhbGlnbiddIHtcbiAgY29uc3QgYWxpZ24gPSBlbGVtZW50LnN0eWxlLnRleHRBbGlnbjtcblxuICByZXR1cm4gYWxpZ24gPT09ICdjZW50ZXInIHx8IGFsaWduID09PSAncmlnaHQnIHx8IGFsaWduID09PSAnanVzdGlmeScgPyBhbGlnbiA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSBDU1MgZm9udC1zaXplIGluIHBvaW50cy4gVGhlIGNhbnZhcyByZW5kZXJzIGF0IDk2cHggcGVyIGluY2gsIHNvIDFweCBpc1xuLy8gZXhhY3RseSAwLjc1cHQ7IGVtL3JlbS8lIGFyZSByZWxhdGl2ZSB0byB0aGUgYm9keSBzaXplLlxuZnVuY3Rpb24gcG9pbnRzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaCA9IC9eKFtcXGQuXSspKHB0fHB4fGVtfHJlbXwlKSQvLmV4ZWModmFsdWUudHJpbSgpKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaXplID0gTnVtYmVyKG1hdGNoWzFdKTtcbiAgc3dpdGNoIChtYXRjaFsyXSkge1xuICAgIGNhc2UgJ3B0JzpcbiAgICAgIHJldHVybiBzaXplO1xuICAgIGNhc2UgJ3B4JzpcbiAgICAgIHJldHVybiBzaXplICogMC43NTtcbiAgICBjYXNlICclJzpcbiAgICAgIHJldHVybiAoc2l6ZSAvIDEwMCkgKiBERUZBVUxUX1RFWFRfU0laRTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHNpemUgKiBERUZBVUxUX1RFWFRfU0laRTtcbiAgfVxufVxuXG4vLyBBbnkgQ1NTIGNvbG9yIHRoZSBhbGxvd2xpc3QgbGV0cyB0aHJvdWdoIChoZXgsIHJnYigpLCBhIG5hbWUpIGFzICNycmdnYmIg4oCUXG4vLyB0aGUgb25lIGZvcm0gYm90aCBleHBvcnRzIGFjY2VwdC4gVGhlIGJyb3dzZXIgcmVzb2x2ZXMgaXQsIHNvIGEgbmFtZWQgY29sb3Jcbi8vIGNvbWVzIG91dCBleGFjdGx5IGFzIHRoZSBjYW52YXMgcGFpbnRlZCBpdC4gQSB2YWx1ZSB0aGF0IGlzIG5vIGNvbG9yIG9mIGl0c1xuLy8gb3duIChpbmhlcml0LCBjdXJyZW50Y29sb3IsIGEgdHlwbykgb3IgcGFpbnRzIG5vdGhpbmcgKHRyYW5zcGFyZW50LCBhbiBhbHBoYVxuLy8gb2YgMCkgaXMgdW5kZWZpbmVkLCBzbyBhbiBleHBvcnQgbmV2ZXIgcGFpbnRzIGl0IGJsYWNrLlxubGV0IGNvbG9yQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGhleENvbG9yKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb2xvckNvbnRleHQgPSBjb2xvckNvbnRleHQgPz8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcbiAgaWYgKCFjb2xvckNvbnRleHQgfHwgL15cXHMqY3VycmVudGNvbG9yXFxzKiQvaS50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBIHZhbHVlIHRoZSBjYW52YXMgY2Fubm90IHJlYWQgbGVhdmVzIHRoZSBjb2xvciBzZXQgYmVmb3JlIGl0LCBzbyBpdCByZWFkc1xuICAvLyBiYWNrIG9uZSB3YXkgb3ZlciBibGFjayBhbmQgYW5vdGhlciBvdmVyIHdoaXRlLiAoY3VycmVudGNvbG9yIHJlYWRzIGFzXG4gIC8vIGJsYWNrIG92ZXIgYm90aCwgaGVuY2UgdGhlIGNoZWNrIGFib3ZlLilcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlQ29sb3IoY29sb3JDb250ZXh0LCAnIzAwMDAwMCcsIHZhbHVlKTtcbiAgaWYgKHJlc29sdmVkICE9PSByZXNvbHZlQ29sb3IoY29sb3JDb250ZXh0LCAnI2ZmZmZmZicsIHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAocmVzb2x2ZWQuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgLy8gcmdiYSguLi4pIGZvciBhIHRyYW5zbHVjZW50IGNvbG9yIOKAlCBkcm9wIHRoZSBhbHBoYSwga2VlcCB0aGUgaHVlLlxuICBjb25zdCBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gcmVzb2x2ZWQubWF0Y2goL1tcXGQuXSsvZyk/Lm1hcChOdW1iZXIpID8/IFtdO1xuXG4gIHJldHVybiBibHVlID09PSB1bmRlZmluZWQgfHwgYWxwaGEgPT09IDBcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogYCMke1tyZWQsIGdyZWVuLCBibHVlXS5tYXAoKGNoYW5uZWwpID0+IE1hdGgucm91bmQoY2hhbm5lbCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWA7XG59XG5cbi8vIFdoYXQgdGhlIGNhbnZhcyByZWFkcyB2YWx1ZSBhcywgc2V0IG92ZXIgc2VlZC5cbmZ1bmN0aW9uIHJlc29sdmVDb2xvcihjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHNlZWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnRleHQuZmlsbFN0eWxlID0gc2VlZDtcbiAgY29udGV4dC5maWxsU3R5bGUgPSB2YWx1ZTtcblxuICByZXR1cm4gU3RyaW5nKGNvbnRleHQuZmlsbFN0eWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { isMatchAnyGroup } from './report-filter-items';
2
2
  import { isTile } from './report-tile';
3
- import { isChartGranularity } from './report-view-config';
3
+ import { isChartGranularity } from './report-state';
4
4
  // Whether a component is a chart on a time x-axis: the only component the
5
5
  // report's group-by grain applies to. A deliberate mirror of the server's
6
6
  // ReportQueryRunner::_isTimeSeriesChart, which is canonical and drops the
@@ -9,8 +9,8 @@ import { isChartGranularity } from './report-view-config';
9
9
  export function isTimeSeriesChart(component) {
10
10
  return component.type === 'chart' && component.config?.xAxis?.kind === 'time';
11
11
  }
12
- // The interaction state one tile's data request carries, read off a view
13
- // document of the screen (the state service's snapshot()): the group-by grain
12
+ // The interaction state one tile's data request carries, read off a snapshot
13
+ // of the screen (the state service's snapshot()): the group-by grain
14
14
  // for a time-series chart, a list's sort, search and hidden columns, a
15
15
  // chart's drill path, and, while the groups match 'any', the groups that
16
16
  // combine (matchAnyGroupIds). The tile on screen, its CSV, the PDF and
@@ -124,4 +124,4 @@ function holdsValue(value) {
124
124
  || Number.isFinite(value.min)
125
125
  || Number.isFinite(value.max);
126
126
  }
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1kYXRhLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL3RpbGUtZGF0YS1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUcxRCwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSx3RUFBd0U7QUFDeEUsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUEwQjtJQUMxRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxNQUFNLENBQUM7QUFDaEYsQ0FBQztBQUdELHlFQUF5RTtBQUN6RSw4RUFBOEU7QUFDOUUsdUVBQXVFO0FBQ3ZFLHlFQUF5RTtBQUN6RSx1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsRUFBRTtBQUNGLDJFQUEyRTtBQUMzRSwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsTUFBcUIsRUFDckIsU0FBMEIsRUFDMUIsUUFBMEI7SUFFMUIsTUFBTSxLQUFLLEdBQXVCLEVBQUUsQ0FBQztJQUVyQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU1QyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFFBQVEs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Jy4vaW50ZXJmYWNlcy9yZXBvcnQtdmlldy1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgRmlsdGVyR3JvdXBEZWZhdWx0LFxuICBSZXBvcnQsXG4gIFJlcG9ydENvbXBvbmVudCxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgaXNNYXRjaEFueUdyb3VwIH0gZnJvbSAnLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IGlzVGlsZSB9IGZyb20gJy4vcmVwb3J0LXRpbGUnO1xuaW1wb3J0IHsgaXNDaGFydEdyYW51bGFyaXR5IH0gZnJvbSAnLi9yZXBvcnQtdmlldy1jb25maWcnO1xuXG5cbi8vIFdoZXRoZXIgYSBjb21wb25lbnQgaXMgYSBjaGFydCBvbiBhIHRpbWUgeC1heGlzOiB0aGUgb25seSBjb21wb25lbnQgdGhlXG4vLyByZXBvcnQncyBncm91cC1ieSBncmFpbiBhcHBsaWVzIHRvLiBBIGRlbGliZXJhdGUgbWlycm9yIG9mIHRoZSBzZXJ2ZXInc1xuLy8gUmVwb3J0UXVlcnlSdW5uZXI6Ol9pc1RpbWVTZXJpZXNDaGFydCwgd2hpY2ggaXMgY2Fub25pY2FsIGFuZCBkcm9wcyB0aGVcbi8vIGdyYWluIGZvciBldmVyeSBvdGhlciBjb21wb25lbnQ7IGtlcHQgc28gYSBwcm9kdWN0IHBpbm5lZCB0byBhbiBvbGRlclxuLy8gZnJhbWV3b3JrIGRvZXMgbm90IHJlLWJ1Y2tldCBhIG5vbi10aW1lIGNoYXJ0LlxuZXhwb3J0IGZ1bmN0aW9uIGlzVGltZVNlcmllc0NoYXJ0KGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBjb21wb25lbnQudHlwZSA9PT0gJ2NoYXJ0JyAmJiBjb21wb25lbnQuY29uZmlnPy54QXhpcz8ua2luZCA9PT0gJ3RpbWUnO1xufVxuXG5cbi8vIFRoZSBpbnRlcmFjdGlvbiBzdGF0ZSBvbmUgdGlsZSdzIGRhdGEgcmVxdWVzdCBjYXJyaWVzLCByZWFkIG9mZiBhIHZpZXdcbi8vIGRvY3VtZW50IG9mIHRoZSBzY3JlZW4gKHRoZSBzdGF0ZSBzZXJ2aWNlJ3Mgc25hcHNob3QoKSk6IHRoZSBncm91cC1ieSBncmFpblxuLy8gZm9yIGEgdGltZS1zZXJpZXMgY2hhcnQsIGEgbGlzdCdzIHNvcnQsIHNlYXJjaCBhbmQgaGlkZGVuIGNvbHVtbnMsIGFcbi8vIGNoYXJ0J3MgZHJpbGwgcGF0aCwgYW5kLCB3aGlsZSB0aGUgZ3JvdXBzIG1hdGNoICdhbnknLCB0aGUgZ3JvdXBzIHRoYXRcbi8vIGNvbWJpbmUgKG1hdGNoQW55R3JvdXBJZHMpLiBUaGUgdGlsZSBvbiBzY3JlZW4sIGl0cyBDU1YsIHRoZSBQREYgYW5kXG4vLyBQb3dlclBvaW50IGNvbGxlY3RvciBhbmQgdGhlIHppcCBhbGwgYnVpbGQgdGhlaXIgc3RhdGUgaGVyZSwgc28gYSBmaWxlXG4vLyBhbHdheXMgaG9sZHMgd2hhdCB0aGUgc2NyZWVuIHNob3dzLiBBIGxpc3QncyBwYWdpbmcgaXMgdGhlIGNhbGxlcidzLiBOZXZlclxuLy8gc2V0cyB1bmNoYW5nZWRJZlVucmVhY2hlZDogdGhhdCBiZWxvbmdzIHRvIGFuIG9uLXNjcmVlbiByZWZldGNoIGFsb25lLlxuLy9cbi8vIEEgZHJpbGwgcGF0aCBhbmQgdGhlIGdyYWluIG1heSBib3RoIGJlIHNlbnQ6IHRoZSBzZXJ2ZXIgbGV0cyB0aGUgZHJpbGxlZFxuLy8gbGV2ZWwgd2luLCBhbmQgYSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBkcmlsbCBrZWVwcyB0aGUgZ3JhaW4uXG5leHBvcnQgZnVuY3Rpb24gdGlsZURhdGFTdGF0ZShcbiAgcmVwb3J0OiBSZXBvcnQgfCBudWxsLFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgc25hcHNob3Q6IFJlcG9ydFZpZXdDb25maWcsXG4pOiBDb21wb25lbnREYXRhU3RhdGUge1xuICBjb25zdCBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0ge307XG5cbiAgaWYgKCFpc1RpbGUoY29tcG9uZW50KSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHRpbGUgPSBzbmFwc2hvdC50aWxlcz8uW2NvbXBvbmVudC5pZF07XG5cbiAgaWYgKGlzVGltZVNlcmllc0NoYXJ0KGNvbXBvbmVudCkgJiYgaXNDaGFydEdyYW51bGFyaXR5KHNuYXBzaG90Lmdyb3VwQnkpKSB7XG4gICAgc3RhdGUuZnJlcXVlbmN5ID0gc25hcHNob3QuZ3JvdXBCeTtcbiAgfVxuXG4gIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnKSB7XG4gICAgaWYgKHRpbGU/LnNvcnQ/LmNvbHVtbikge1xuICAgICAgc3RhdGUuc29ydCA9IHsgLi4udGlsZS5zb3J0IH07XG4gICAgfVxuICAgIGlmICh0aWxlPy5zZWFyY2gpIHtcbiAgICAgIHN0YXRlLnNlYXJjaCA9IHRpbGUuc2VhcmNoO1xuICAgIH1cbiAgICBpZiAodGlsZT8uaGlkZGVuPy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmhpZGRlbkNvbHVtbnMgPSBbLi4udGlsZS5oaWRkZW5dO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ2NoYXJ0JyAmJiB0aWxlPy5kcmlsbD8ubGVuZ3RoKSB7XG4gICAgc3RhdGUuZHJpbGwgPSB0aWxlLmRyaWxsLm1hcCgoc3RlcCkgPT4gKHsgLi4uc3RlcCB9KSk7XG4gIH1cblxuICBjb25zdCBtYXRjaEFueUdyb3VwSWRzID0gdGlsZU1hdGNoQW55R3JvdXBJZHMocmVwb3J0LCBjb21wb25lbnQsIHNuYXBzaG90KTtcbiAgaWYgKG1hdGNoQW55R3JvdXBJZHMubGVuZ3RoKSB7XG4gICAgc3RhdGUubWF0Y2hBbnlHcm91cElkcyA9IG1hdGNoQW55R3JvdXBJZHM7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cblxuLy8gRWFjaCB0aWxlJ3Mgc3RhdGUgZm9yIHRoZSB6aXAgZXhwb3J0ICh0aWxlRGF0YVN0YXRlKSwgYnkgY29tcG9uZW50IGlkOiB0aGVcbi8vIHRpbGVzIG9mIGV2ZXJ5IHBhZ2UsIG9yIG9mIGBwYWdlSWRgIGFsb25lLiBUaGUgemlwIGhvbGRzIG5vIGhlYWRlciBvclxuLy8gZm9vdGVyIHRpbGUuIEEgdGlsZSB3aXRoIG5vdGhpbmcgdG8gc2VuZCBpcyBsZWZ0IG91dCwgc28gYW4gdW50b3VjaGVkIHJlcG9ydFxuLy8gc2VuZHMgbm8gc3RhdGVzIGF0IGFsbC5cbmV4cG9ydCBmdW5jdGlvbiB6aXBFeHBvcnRTdGF0ZXMoXG4gIHJlcG9ydDogUmVwb3J0LFxuICBzbmFwc2hvdDogUmVwb3J0Vmlld0NvbmZpZyxcbiAgcGFnZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbCxcbik6IFJlY29yZDxudW1iZXIsIENvbXBvbmVudERhdGFTdGF0ZT4ge1xuICBjb25zdCBzdGF0ZXM6IFJlY29yZDxudW1iZXIsIENvbXBvbmVudERhdGFTdGF0ZT4gPSB7fTtcblxuICAocmVwb3J0LnBhZ2VzID8/IFtdKVxuICAgIC5maWx0ZXIoKHBhZ2UpID0+ICFwYWdlSWQgfHwgcGFnZS5pZCA9PT0gcGFnZUlkKVxuICAgIC5mbGF0TWFwKChwYWdlKSA9PiBwYWdlLmNvbXBvbmVudHMgPz8gW10pXG4gICAgLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aWxlRGF0YVN0YXRlKHJlcG9ydCwgY29tcG9uZW50LCBzbmFwc2hvdCk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlc1tjb21wb25lbnQuaWRdID0gc3RhdGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlcztcbn1cblxuXG4vLyBUaGUgZ3JvdXBzIGEgdGlsZSdzICdhbnknIGNvbWJpbmVzLCBpbiBpZCBvcmRlcjogd2hpbGUgdGhlIHNuYXBzaG90J3Ncbi8vIG1hdGNoIGlzICdhbnknLCBldmVyeSBlbGlnaWJsZSBncm91cCB0aGF0IGhvbGRzIGEgdmFsdWUuIEEgZ3JvdXAgdGhlIHRpbGVcbi8vIGhhcyBubyBtZW1iZXIgb2YgaXMgbGlzdGVkIHRvbywgc28gdGhlIHNlcnZlciBjYW4gdGVsbCBhIHRpbGUgdGhhdCBjYW5ub3Rcbi8vIHRlc3QgZXZlcnkgZ3JvdXAgKGl0IHRoZW4gYXBwbGllcyBub25lIG9mIHRoZW0gYW5kIHNheXMgc28pLiBBIHBhZ2UgZ3JvdXBcbi8vIGNvdW50cyBvbmx5IGZvciB0aGUgdGlsZXMgb2YgaXRzIG93biBwYWdlOiBpdCBpcyBpbiB0aGUgcmVwb3J0IGJhciBvZiBub1xuLy8gb3RoZXIgcGFnZS4gQSBoZWFkZXIgb3IgZm9vdGVyIHRpbGUgaXMgYSB0aWxlIG9mIHRoZSBwYWdlIG9uIHNjcmVlbi5cbmZ1bmN0aW9uIHRpbGVNYXRjaEFueUdyb3VwSWRzKHJlcG9ydDogUmVwb3J0IHwgbnVsbCwgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIHNuYXBzaG90OiBSZXBvcnRWaWV3Q29uZmlnKTogbnVtYmVyW10ge1xuICBpZiAoIXJlcG9ydCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaEFueUdyb3VwSWRzT25QYWdlKHJlcG9ydCwgdGlsZVBhZ2VJZChyZXBvcnQsIGNvbXBvbmVudCwgc25hcHNob3QpLCBzbmFwc2hvdCk7XG59XG5cblxuLy8gVGhlIGdyb3VwcyBhIGxheWVyJ3MgaW5saW5lIHZhbHVlcyBjb21iaW5lICh0aGUgcGFnZSB2YWx1ZXMgcmVxdWVzdCdzXG4vLyBtYXRjaEFueUdyb3VwSWRzKSwgYnkgdGhlIHRpbGUgcnVsZSAodGlsZURhdGFTdGF0ZSk6IHdoaWxlIHRoZSBzbmFwc2hvdCdzXG4vLyBtYXRjaCBpcyAnYW55JywgZXZlcnkgZWxpZ2libGUgZ3JvdXAgdGhhdCBob2xkcyBhIHZhbHVlLCBpbiBpZCBvcmRlci4gQVxuLy8gdmFsdWUgaGFzIG5vIG1lbWJlciBvZiBzb21lIG9mIHRoZW0sIGFuZCB0aGUgc2VydmVyIHRoZW4gYXBwbGllcyBub25lIG9mXG4vLyB0aGVtIHRvIGl0LCBhcyBpdCBkb2VzIGZvciBzdWNoIGEgdGlsZS4gYGxheWVySWRgIGlzIHRoZSBwYWdlIHRoZSB2YWx1ZXNcbi8vIHNpdCBvbjsgdGhlIGhlYWRlciBhbmQgZm9vdGVyJ3MgdmFsdWVzIChhbnkgb3RoZXIgaWQpIGFyZSB2YWx1ZXMgb2YgdGhlXG4vLyBwYWdlIG9uIHNjcmVlbiwgYXMgYSBoZWFkZXIgb3IgZm9vdGVyIHRpbGUgaXMuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzTWF0Y2hBbnlHcm91cElkcyhcbiAgcmVwb3J0OiBSZXBvcnQgfCBudWxsLFxuICBsYXllcklkOiBudW1iZXIgfCBudWxsLFxuICBzbmFwc2hvdDogUmVwb3J0Vmlld0NvbmZpZyxcbik6IG51bWJlcltdIHtcbiAgaWYgKCFyZXBvcnQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwYWdlID0gKHJlcG9ydC5wYWdlcyA/PyBbXSkuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IGxheWVySWQpO1xuXG4gIHJldHVybiBtYXRjaEFueUdyb3VwSWRzT25QYWdlKHJlcG9ydCwgcGFnZT8uaWQgPz8gc25hcHNob3QucGFnZUlkID8/IG51bGwsIHNuYXBzaG90KTtcbn1cblxuXG4vLyBXaGlsZSB0aGUgc25hcHNob3QncyBtYXRjaCBpcyAnYW55JzogdGhlIGVsaWdpYmxlIGdyb3VwcyBvZiB0aGUgcmVwb3J0IGJhclxuLy8gb24gYHBhZ2VJZGAgdGhhdCBob2xkIGEgdmFsdWUsIGluIGlkIG9yZGVyLlxuZnVuY3Rpb24gbWF0Y2hBbnlHcm91cElkc09uUGFnZShyZXBvcnQ6IFJlcG9ydCwgcGFnZUlkOiBudW1iZXIgfCBudWxsLCBzbmFwc2hvdDogUmVwb3J0Vmlld0NvbmZpZyk6IG51bWJlcltdIHtcbiAgaWYgKHNuYXBzaG90Lm1hdGNoICE9PSAnYW55Jykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiAocmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXSlcbiAgICAuZmlsdGVyKChncm91cCkgPT4gaXNNYXRjaEFueUdyb3VwKGdyb3VwLCBwYWdlSWQpICYmIGhvbGRzVmFsdWUoc25hcHNob3QuZ3JvdXBzPy5bZ3JvdXAuaWRdKSlcbiAgICAubWFwKChncm91cCkgPT4gZ3JvdXAuaWQpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbn1cblxuXG4vLyBUaGUgcGFnZSBhIHRpbGUgaXMgZHJhd24gb246IGl0cyBvd24gcGFnZSwgb3IsIGZvciBhIGhlYWRlciBvciBmb290ZXJcbi8vIHRpbGUsIHRoZSBwYWdlIG9uIHNjcmVlbi4gTnVsbCB3aGVuIG5laXRoZXIgaXMga25vd24uIEFuIGlubGluZSB2YWx1ZSdzXG4vLyBwYWdlIGlzIHRoZSBwYWdlIHdob3NlIHZhbHVlcyBob2xkIGl0LCB0aGUgc2FtZSB3YXkuXG5leHBvcnQgZnVuY3Rpb24gdGlsZVBhZ2VJZChyZXBvcnQ6IFJlcG9ydCwgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIHNuYXBzaG90OiBSZXBvcnRWaWV3Q29uZmlnKTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IHBhZ2UgPSAocmVwb3J0LnBhZ2VzID8/IFtdKVxuICAgIC5maW5kKChjYW5kaWRhdGUpID0+IFsuLi4oY2FuZGlkYXRlLmNvbXBvbmVudHMgPz8gW10pLCAuLi4oY2FuZGlkYXRlLnZhbHVlcyA/PyBbXSldXG4gICAgICAuc29tZSgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gY29tcG9uZW50LmlkKSk7XG5cbiAgcmV0dXJuIHBhZ2U/LmlkID8/IHNuYXBzaG90LnBhZ2VJZCA/PyBudWxsO1xufVxuXG5cbi8vIFdoZXRoZXIgYSBncm91cCdzIHN0b3JlZCB2YWx1ZSBob2xkcyBzb21ldGhpbmcgYSByZXF1ZXN0IHNlbmRzOiBwaWNrcyB0b1xuLy8ga2VlcCBvciBsZWF2ZSBvdXQsIHRleHQsIG9yIGEgbnVtYmVyIHJhbmdlIGVuZCAoMCBpcyBhbiBlbmQpLlxuZnVuY3Rpb24gaG9sZHNWYWx1ZSh2YWx1ZTogRmlsdGVyR3JvdXBEZWZhdWx0IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICEhdmFsdWUudmFsdWVzPy5sZW5ndGhcbiAgICB8fCAhIXZhbHVlLmV4Y2x1ZGVWYWx1ZXM/Lmxlbmd0aFxuICAgIHx8ICh0eXBlb2YgdmFsdWUudmFsdWUgPT09ICdzdHJpbmcnICYmICEhdmFsdWUudmFsdWUudHJpbSgpKVxuICAgIHx8IE51bWJlci5pc0Zpbml0ZSh2YWx1ZS5taW4pXG4gICAgfHwgTnVtYmVyLmlzRmluaXRlKHZhbHVlLm1heCk7XG59XG4iXX0=
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1kYXRhLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL3RpbGUtZGF0YS1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRCwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSx3RUFBd0U7QUFDeEUsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUEwQjtJQUMxRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxNQUFNLENBQUM7QUFDaEYsQ0FBQztBQUdELDZFQUE2RTtBQUM3RSxxRUFBcUU7QUFDckUsdUVBQXVFO0FBQ3ZFLHlFQUF5RTtBQUN6RSx1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsRUFBRTtBQUNGLDJFQUEyRTtBQUMzRSwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsTUFBcUIsRUFDckIsU0FBMEIsRUFDMUIsUUFBNkI7SUFFN0IsTUFBTSxLQUFLLEdBQXVCLEVBQUUsQ0FBQztJQUVyQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU1QyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFFBQVEs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b20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtc3RhdGUtc25hcHNob3QuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgRmlsdGVyR3JvdXBEZWZhdWx0LFxuICBSZXBvcnQsXG4gIFJlcG9ydENvbXBvbmVudCxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgaXNNYXRjaEFueUdyb3VwIH0gZnJvbSAnLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IGlzVGlsZSB9IGZyb20gJy4vcmVwb3J0LXRpbGUnO1xuaW1wb3J0IHsgaXNDaGFydEdyYW51bGFyaXR5IH0gZnJvbSAnLi9yZXBvcnQtc3RhdGUnO1xuXG5cbi8vIFdoZXRoZXIgYSBjb21wb25lbnQgaXMgYSBjaGFydCBvbiBhIHRpbWUgeC1heGlzOiB0aGUgb25seSBjb21wb25lbnQgdGhlXG4vLyByZXBvcnQncyBncm91cC1ieSBncmFpbiBhcHBsaWVzIHRvLiBBIGRlbGliZXJhdGUgbWlycm9yIG9mIHRoZSBzZXJ2ZXInc1xuLy8gUmVwb3J0UXVlcnlSdW5uZXI6Ol9pc1RpbWVTZXJpZXNDaGFydCwgd2hpY2ggaXMgY2Fub25pY2FsIGFuZCBkcm9wcyB0aGVcbi8vIGdyYWluIGZvciBldmVyeSBvdGhlciBjb21wb25lbnQ7IGtlcHQgc28gYSBwcm9kdWN0IHBpbm5lZCB0byBhbiBvbGRlclxuLy8gZnJhbWV3b3JrIGRvZXMgbm90IHJlLWJ1Y2tldCBhIG5vbi10aW1lIGNoYXJ0LlxuZXhwb3J0IGZ1bmN0aW9uIGlzVGltZVNlcmllc0NoYXJ0KGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBjb21wb25lbnQudHlwZSA9PT0gJ2NoYXJ0JyAmJiBjb21wb25lbnQuY29uZmlnPy54QXhpcz8ua2luZCA9PT0gJ3RpbWUnO1xufVxuXG5cbi8vIFRoZSBpbnRlcmFjdGlvbiBzdGF0ZSBvbmUgdGlsZSdzIGRhdGEgcmVxdWVzdCBjYXJyaWVzLCByZWFkIG9mZiBhIHNuYXBzaG90XG4vLyBvZiB0aGUgc2NyZWVuICh0aGUgc3RhdGUgc2VydmljZSdzIHNuYXBzaG90KCkpOiB0aGUgZ3JvdXAtYnkgZ3JhaW5cbi8vIGZvciBhIHRpbWUtc2VyaWVzIGNoYXJ0LCBhIGxpc3QncyBzb3J0LCBzZWFyY2ggYW5kIGhpZGRlbiBjb2x1bW5zLCBhXG4vLyBjaGFydCdzIGRyaWxsIHBhdGgsIGFuZCwgd2hpbGUgdGhlIGdyb3VwcyBtYXRjaCAnYW55JywgdGhlIGdyb3VwcyB0aGF0XG4vLyBjb21iaW5lIChtYXRjaEFueUdyb3VwSWRzKS4gVGhlIHRpbGUgb24gc2NyZWVuLCBpdHMgQ1NWLCB0aGUgUERGIGFuZFxuLy8gUG93ZXJQb2ludCBjb2xsZWN0b3IgYW5kIHRoZSB6aXAgYWxsIGJ1aWxkIHRoZWlyIHN0YXRlIGhlcmUsIHNvIGEgZmlsZVxuLy8gYWx3YXlzIGhvbGRzIHdoYXQgdGhlIHNjcmVlbiBzaG93cy4gQSBsaXN0J3MgcGFnaW5nIGlzIHRoZSBjYWxsZXIncy4gTmV2ZXJcbi8vIHNldHMgdW5jaGFuZ2VkSWZVbnJlYWNoZWQ6IHRoYXQgYmVsb25ncyB0byBhbiBvbi1zY3JlZW4gcmVmZXRjaCBhbG9uZS5cbi8vXG4vLyBBIGRyaWxsIHBhdGggYW5kIHRoZSBncmFpbiBtYXkgYm90aCBiZSBzZW50OiB0aGUgc2VydmVyIGxldHMgdGhlIGRyaWxsZWRcbi8vIGxldmVsIHdpbiwgYW5kIGEgc2VydmVyIHRoYXQgZG9lcyBub3QgZHJpbGwga2VlcHMgdGhlIGdyYWluLlxuZXhwb3J0IGZ1bmN0aW9uIHRpbGVEYXRhU3RhdGUoXG4gIHJlcG9ydDogUmVwb3J0IHwgbnVsbCxcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIHNuYXBzaG90OiBSZXBvcnRTdGF0ZVNuYXBzaG90LFxuKTogQ29tcG9uZW50RGF0YVN0YXRlIHtcbiAgY29uc3Qgc3RhdGU6IENvbXBvbmVudERhdGFTdGF0ZSA9IHt9O1xuXG4gIGlmICghaXNUaWxlKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB0aWxlID0gc25hcHNob3QudGlsZXM/Lltjb21wb25lbnQuaWRdO1xuXG4gIGlmIChpc1RpbWVTZXJpZXNDaGFydChjb21wb25lbnQpICYmIGlzQ2hhcnRHcmFudWxhcml0eShzbmFwc2hvdC5ncm91cEJ5KSkge1xuICAgIHN0YXRlLmZyZXF1ZW5jeSA9IHNuYXBzaG90Lmdyb3VwQnk7XG4gIH1cblxuICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdsaXN0Jykge1xuICAgIGlmICh0aWxlPy5zb3J0Py5jb2x1bW4pIHtcbiAgICAgIHN0YXRlLnNvcnQgPSB7IC4uLnRpbGUuc29ydCB9O1xuICAgIH1cbiAgICBpZiAodGlsZT8uc2VhcmNoKSB7XG4gICAgICBzdGF0ZS5zZWFyY2ggPSB0aWxlLnNlYXJjaDtcbiAgICB9XG4gICAgaWYgKHRpbGU/LmhpZGRlbj8ubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5oaWRkZW5Db2x1bW5zID0gWy4uLnRpbGUuaGlkZGVuXTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcG9uZW50LnR5cGUgPT09ICdjaGFydCcgJiYgdGlsZT8uZHJpbGw/Lmxlbmd0aCkge1xuICAgIHN0YXRlLmRyaWxsID0gdGlsZS5kcmlsbC5tYXAoKHN0ZXApID0+ICh7IC4uLnN0ZXAgfSkpO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hBbnlHcm91cElkcyA9IHRpbGVNYXRjaEFueUdyb3VwSWRzKHJlcG9ydCwgY29tcG9uZW50LCBzbmFwc2hvdCk7XG4gIGlmIChtYXRjaEFueUdyb3VwSWRzLmxlbmd0aCkge1xuICAgIHN0YXRlLm1hdGNoQW55R3JvdXBJZHMgPSBtYXRjaEFueUdyb3VwSWRzO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5cbi8vIEVhY2ggdGlsZSdzIHN0YXRlIGZvciB0aGUgemlwIGV4cG9ydCAodGlsZURhdGFTdGF0ZSksIGJ5IGNvbXBvbmVudCBpZDogdGhlXG4vLyB0aWxlcyBvZiBldmVyeSBwYWdlLCBvciBvZiBgcGFnZUlkYCBhbG9uZS4gVGhlIHppcCBob2xkcyBubyBoZWFkZXIgb3Jcbi8vIGZvb3RlciB0aWxlLiBBIHRpbGUgd2l0aCBub3RoaW5nIHRvIHNlbmQgaXMgbGVmdCBvdXQsIHNvIGFuIHVudG91Y2hlZCByZXBvcnRcbi8vIHNlbmRzIG5vIHN0YXRlcyBhdCBhbGwuXG5leHBvcnQgZnVuY3Rpb24gemlwRXhwb3J0U3RhdGVzKFxuICByZXBvcnQ6IFJlcG9ydCxcbiAgc25hcHNob3Q6IFJlcG9ydFN0YXRlU25hcHNob3QsXG4gIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCA9IG51bGwsXG4pOiBSZWNvcmQ8bnVtYmVyLCBDb21wb25lbnREYXRhU3RhdGU+IHtcbiAgY29uc3Qgc3RhdGVzOiBSZWNvcmQ8bnVtYmVyLCBDb21wb25lbnREYXRhU3RhdGU+ID0ge307XG5cbiAgKHJlcG9ydC5wYWdlcyA/PyBbXSlcbiAgICAuZmlsdGVyKChwYWdlKSA9PiAhcGFnZUlkIHx8IHBhZ2UuaWQgPT09IHBhZ2VJZClcbiAgICAuZmxhdE1hcCgocGFnZSkgPT4gcGFnZS5jb21wb25lbnRzID8/IFtdKVxuICAgIC5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGlsZURhdGFTdGF0ZShyZXBvcnQsIGNvbXBvbmVudCwgc25hcHNob3QpO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZXNbY29tcG9uZW50LmlkXSA9IHN0YXRlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBzdGF0ZXM7XG59XG5cblxuLy8gVGhlIGdyb3VwcyBhIHRpbGUncyAnYW55JyBjb21iaW5lcywgaW4gaWQgb3JkZXI6IHdoaWxlIHRoZSBzbmFwc2hvdCdzXG4vLyBtYXRjaCBpcyAnYW55JywgZXZlcnkgZWxpZ2libGUgZ3JvdXAgdGhhdCBob2xkcyBhIHZhbHVlLiBBIGdyb3VwIHRoZSB0aWxlXG4vLyBoYXMgbm8gbWVtYmVyIG9mIGlzIGxpc3RlZCB0b28sIHNvIHRoZSBzZXJ2ZXIgY2FuIHRlbGwgYSB0aWxlIHRoYXQgY2Fubm90XG4vLyB0ZXN0IGV2ZXJ5IGdyb3VwIChpdCB0aGVuIGFwcGxpZXMgbm9uZSBvZiB0aGVtIGFuZCBzYXlzIHNvKS4gQSBwYWdlIGdyb3VwXG4vLyBjb3VudHMgb25seSBmb3IgdGhlIHRpbGVzIG9mIGl0cyBvd24gcGFnZTogaXQgaXMgaW4gdGhlIHJlcG9ydCBiYXIgb2Ygbm9cbi8vIG90aGVyIHBhZ2UuIEEgaGVhZGVyIG9yIGZvb3RlciB0aWxlIGlzIGEgdGlsZSBvZiB0aGUgcGFnZSBvbiBzY3JlZW4uXG5mdW5jdGlvbiB0aWxlTWF0Y2hBbnlHcm91cElkcyhyZXBvcnQ6IFJlcG9ydCB8IG51bGwsIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBzbmFwc2hvdDogUmVwb3J0U3RhdGVTbmFwc2hvdCk6IG51bWJlcltdIHtcbiAgaWYgKCFyZXBvcnQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gbWF0Y2hBbnlHcm91cElkc09uUGFnZShyZXBvcnQsIHRpbGVQYWdlSWQocmVwb3J0LCBjb21wb25lbnQsIHNuYXBzaG90KSwgc25hcHNob3QpO1xufVxuXG5cbi8vIFRoZSBncm91cHMgYSBsYXllcidzIGlubGluZSB2YWx1ZXMgY29tYmluZSAodGhlIHBhZ2UgdmFsdWVzIHJlcXVlc3Qnc1xuLy8gbWF0Y2hBbnlHcm91cElkcyksIGJ5IHRoZSB0aWxlIHJ1bGUgKHRpbGVEYXRhU3RhdGUpOiB3aGlsZSB0aGUgc25hcHNob3Qnc1xuLy8gbWF0Y2ggaXMgJ2FueScsIGV2ZXJ5IGVsaWdpYmxlIGdyb3VwIHRoYXQgaG9sZHMgYSB2YWx1ZSwgaW4gaWQgb3JkZXIuIEFcbi8vIHZhbHVlIGhhcyBubyBtZW1iZXIgb2Ygc29tZSBvZiB0aGVtLCBhbmQgdGhlIHNlcnZlciB0aGVuIGFwcGxpZXMgbm9uZSBvZlxuLy8gdGhlbSB0byBpdCwgYXMgaXQgZG9lcyBmb3Igc3VjaCBhIHRpbGUuIGBsYXllcklkYCBpcyB0aGUgcGFnZSB0aGUgdmFsdWVzXG4vLyBzaXQgb247IHRoZSBoZWFkZXIgYW5kIGZvb3RlcidzIHZhbHVlcyAoYW55IG90aGVyIGlkKSBhcmUgdmFsdWVzIG9mIHRoZVxuLy8gcGFnZSBvbiBzY3JlZW4sIGFzIGEgaGVhZGVyIG9yIGZvb3RlciB0aWxlIGlzLlxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc01hdGNoQW55R3JvdXBJZHMoXG4gIHJlcG9ydDogUmVwb3J0IHwgbnVsbCxcbiAgbGF5ZXJJZDogbnVtYmVyIHwgbnVsbCxcbiAgc25hcHNob3Q6IFJlcG9ydFN0YXRlU25hcHNob3QsXG4pOiBudW1iZXJbXSB7XG4gIGlmICghcmVwb3J0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGFnZSA9IChyZXBvcnQucGFnZXMgPz8gW10pLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSBsYXllcklkKTtcblxuICByZXR1cm4gbWF0Y2hBbnlHcm91cElkc09uUGFnZShyZXBvcnQsIHBhZ2U/LmlkID8/IHNuYXBzaG90LnBhZ2VJZCA/PyBudWxsLCBzbmFwc2hvdCk7XG59XG5cblxuLy8gV2hpbGUgdGhlIHNuYXBzaG90J3MgbWF0Y2ggaXMgJ2FueSc6IHRoZSBlbGlnaWJsZSBncm91cHMgb2YgdGhlIHJlcG9ydCBiYXJcbi8vIG9uIGBwYWdlSWRgIHRoYXQgaG9sZCBhIHZhbHVlLCBpbiBpZCBvcmRlci5cbmZ1bmN0aW9uIG1hdGNoQW55R3JvdXBJZHNPblBhZ2UocmVwb3J0OiBSZXBvcnQsIHBhZ2VJZDogbnVtYmVyIHwgbnVsbCwgc25hcHNob3Q6IFJlcG9ydFN0YXRlU25hcHNob3QpOiBudW1iZXJbXSB7XG4gIGlmIChzbmFwc2hvdC5tYXRjaCAhPT0gJ2FueScpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gKHJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10pXG4gICAgLmZpbHRlcigoZ3JvdXApID0+IGlzTWF0Y2hBbnlHcm91cChncm91cCwgcGFnZUlkKSAmJiBob2xkc1ZhbHVlKHNuYXBzaG90Lmdyb3Vwcz8uW2dyb3VwLmlkXSkpXG4gICAgLm1hcCgoZ3JvdXApID0+IGdyb3VwLmlkKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG59XG5cblxuLy8gVGhlIHBhZ2UgYSB0aWxlIGlzIGRyYXduIG9uOiBpdHMgb3duIHBhZ2UsIG9yLCBmb3IgYSBoZWFkZXIgb3IgZm9vdGVyXG4vLyB0aWxlLCB0aGUgcGFnZSBvbiBzY3JlZW4uIE51bGwgd2hlbiBuZWl0aGVyIGlzIGtub3duLiBBbiBpbmxpbmUgdmFsdWUnc1xuLy8gcGFnZSBpcyB0aGUgcGFnZSB3aG9zZSB2YWx1ZXMgaG9sZCBpdCwgdGhlIHNhbWUgd2F5LlxuZXhwb3J0IGZ1bmN0aW9uIHRpbGVQYWdlSWQocmVwb3J0OiBSZXBvcnQsIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBzbmFwc2hvdDogUmVwb3J0U3RhdGVTbmFwc2hvdCk6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBwYWdlID0gKHJlcG9ydC5wYWdlcyA/PyBbXSlcbiAgICAuZmluZCgoY2FuZGlkYXRlKSA9PiBbLi4uKGNhbmRpZGF0ZS5jb21wb25lbnRzID8/IFtdKSwgLi4uKGNhbmRpZGF0ZS52YWx1ZXMgPz8gW10pXVxuICAgICAgLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGNvbXBvbmVudC5pZCkpO1xuXG4gIHJldHVybiBwYWdlPy5pZCA/PyBzbmFwc2hvdC5wYWdlSWQgPz8gbnVsbDtcbn1cblxuXG4vLyBXaGV0aGVyIGEgZ3JvdXAncyBzdG9yZWQgdmFsdWUgaG9sZHMgc29tZXRoaW5nIGEgcmVxdWVzdCBzZW5kczogcGlja3MgdG9cbi8vIGtlZXAgb3IgbGVhdmUgb3V0LCB0ZXh0LCBvciBhIG51bWJlciByYW5nZSBlbmQgKDAgaXMgYW4gZW5kKS5cbmZ1bmN0aW9uIGhvbGRzVmFsdWUodmFsdWU6IEZpbHRlckdyb3VwRGVmYXVsdCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAhIXZhbHVlLnZhbHVlcz8ubGVuZ3RoXG4gICAgfHwgISF2YWx1ZS5leGNsdWRlVmFsdWVzPy5sZW5ndGhcbiAgICB8fCAodHlwZW9mIHZhbHVlLnZhbHVlID09PSAnc3RyaW5nJyAmJiAhIXZhbHVlLnZhbHVlLnRyaW0oKSlcbiAgICB8fCBOdW1iZXIuaXNGaW5pdGUodmFsdWUubWluKVxuICAgIHx8IE51bWJlci5pc0Zpbml0ZSh2YWx1ZS5tYXgpO1xufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { catchError, filter, map, merge, of, switchMap, timer } from 'rxjs';
2
- // A sweep of changes (a few filters set in a row, every value of an applied
3
- // view) settles for this long before a tile refetches, so the sweep costs one
2
+ // A sweep of changes (a few filters set in a row, every value of a picked
3
+ // saved filter) settles for this long before a tile refetches, so the sweep costs one
4
4
  // request, not one per change.
5
5
  export const TILE_REFRESH_DEBOUNCE_MS = 300;
6
6
  // A tile's data as one stream: the first load at once, then one load per
@@ -11,9 +11,8 @@ export const TILE_REFRESH_DEBOUNCE_MS = 300;
11
11
  // So an answer to an older request never lands, not even while the next
12
12
  // load still waits, and the bar stays on until the settled load answers.
13
13
  // - Each load notes the state version it was sent under (stateVersion), and
14
- // its answer is dropped when the version has moved since. apply() and
15
- // resetToBase() move the version and announce a full change together, so
16
- // the load for the new state is already on its way.
14
+ // its answer is dropped when the version has moved since. resetToDefaults()
15
+ // moves the version and announces a full change together, so the load for the new state is already on its way.
17
16
  // - A failed load ends only itself: its message comes through as the answer,
18
17
  // and the next trigger loads again.
19
18
  export function tileLoads(refresh$, load, version) {
@@ -35,4 +34,4 @@ function loadErrorMessage(error) {
35
34
  const message = failure?.error?.message ?? failure?.message;
36
35
  return typeof message === 'string' && message ? message : 'Failed to load data';
37
36
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1sb2Fkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90aWxlLWxvYWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLeEYsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrQkFBK0I7QUFDL0IsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBRTVDLHlFQUF5RTtBQUN6RSxxQ0FBcUM7QUFDckMsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsd0VBQXdFO0FBQ3hFLDJFQUEyRTtBQUMzRSxzREFBc0Q7QUFDdEQsNkVBQTZFO0FBQzdFLHNDQUFzQztBQUN0QyxNQUFNLFVBQVUsU0FBUyxDQUN2QixRQUE2QixFQUM3QixJQUF5QixFQUN6QixPQUFxQjtJQUVyQixPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1NBQ3BFLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QyxJQUFJLENBQ0gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDeEMsQ0FBQyxDQUNMLENBQUM7QUFDTixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLHdDQUF3QztBQUN4QyxTQUFTLE9BQU8sQ0FBSSxJQUF5QixFQUFFLE9BQXFCO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBRXpCLE9BQU8sSUFBSSxFQUFFO1NBQ1YsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFDekQsVUFBVSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQW9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3JHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FDbkMsQ0FBQztBQUNOLENBQUM7QUFFRCwwRUFBMEU7QUFDMUUseUJBQXlCO0FBQ3pCLFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUN0QyxNQUFNLE9BQU8sR0FBRyxLQUFvRSxDQUFDO0lBQ3JGLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFFNUQsT0FBTyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0FBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgbWVyZ2UsIG9mLCBzd2l0Y2hNYXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFRpbGVMb2FkUmVzdWx0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3RpbGUtbG9hZC1yZXN1bHQuaW50ZXJmYWNlJztcblxuXG4vLyBBIHN3ZWVwIG9mIGNoYW5nZXMgKGEgZmV3IGZpbHRlcnMgc2V0IGluIGEgcm93LCBldmVyeSB2YWx1ZSBvZiBhbiBhcHBsaWVkXG4vLyB2aWV3KSBzZXR0bGVzIGZvciB0aGlzIGxvbmcgYmVmb3JlIGEgdGlsZSByZWZldGNoZXMsIHNvIHRoZSBzd2VlcCBjb3N0cyBvbmVcbi8vIHJlcXVlc3QsIG5vdCBvbmUgcGVyIGNoYW5nZS5cbmV4cG9ydCBjb25zdCBUSUxFX1JFRlJFU0hfREVCT1VOQ0VfTVMgPSAzMDA7XG5cbi8vIEEgdGlsZSdzIGRhdGEgYXMgb25lIHN0cmVhbTogdGhlIGZpcnN0IGxvYWQgYXQgb25jZSwgdGhlbiBvbmUgbG9hZCBwZXJcbi8vIHNldHRsZWQgYnVyc3Qgb2YgcmVmcmVzaCB0cmlnZ2Vycy5cbi8vXG4vLyAtIEVhY2ggdHJpZ2dlciBzdGFydHMgb3ZlciAoc3dpdGNoTWFwKTogaXQgY2FuY2VscyB0aGUgd2FpdCBmb3IgdGhlIG9uZVxuLy8gICBiZWZvcmUgaXQgYW5kIHRoZSByZXF1ZXN0IGluIGZsaWdodCwgdGhlbiB3YWl0cyBmb3IgdGhlIHN3ZWVwIHRvIHNldHRsZS5cbi8vICAgU28gYW4gYW5zd2VyIHRvIGFuIG9sZGVyIHJlcXVlc3QgbmV2ZXIgbGFuZHMsIG5vdCBldmVuIHdoaWxlIHRoZSBuZXh0XG4vLyAgIGxvYWQgc3RpbGwgd2FpdHMsIGFuZCB0aGUgYmFyIHN0YXlzIG9uIHVudGlsIHRoZSBzZXR0bGVkIGxvYWQgYW5zd2Vycy5cbi8vIC0gRWFjaCBsb2FkIG5vdGVzIHRoZSBzdGF0ZSB2ZXJzaW9uIGl0IHdhcyBzZW50IHVuZGVyIChzdGF0ZVZlcnNpb24pLCBhbmRcbi8vICAgaXRzIGFuc3dlciBpcyBkcm9wcGVkIHdoZW4gdGhlIHZlcnNpb24gaGFzIG1vdmVkIHNpbmNlLiBhcHBseSgpIGFuZFxuLy8gICByZXNldFRvQmFzZSgpIG1vdmUgdGhlIHZlcnNpb24gYW5kIGFubm91bmNlIGEgZnVsbCBjaGFuZ2UgdG9nZXRoZXIsIHNvXG4vLyAgIHRoZSBsb2FkIGZvciB0aGUgbmV3IHN0YXRlIGlzIGFscmVhZHkgb24gaXRzIHdheS5cbi8vIC0gQSBmYWlsZWQgbG9hZCBlbmRzIG9ubHkgaXRzZWxmOiBpdHMgbWVzc2FnZSBjb21lcyB0aHJvdWdoIGFzIHRoZSBhbnN3ZXIsXG4vLyAgIGFuZCB0aGUgbmV4dCB0cmlnZ2VyIGxvYWRzIGFnYWluLlxuZXhwb3J0IGZ1bmN0aW9uIHRpbGVMb2FkczxUPihcbiAgcmVmcmVzaCQ6IE9ic2VydmFibGU8dW5rbm93bj4sXG4gIGxvYWQ6ICgpID0+IE9ic2VydmFibGU8VD4sXG4gIHZlcnNpb246ICgpID0+IG51bWJlcixcbik6IE9ic2VydmFibGU8VGlsZUxvYWRSZXN1bHQ8VD4+IHtcbiAgcmV0dXJuIG1lcmdlKG9mKDApLCByZWZyZXNoJC5waXBlKG1hcCgoKSA9PiBUSUxFX1JFRlJFU0hfREVCT1VOQ0VfTVMpKSlcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCgod2FpdCkgPT4gKHdhaXQgPyB0aW1lcih3YWl0KSA6IG9mKDApKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gb25lTG9hZChsb2FkLCB2ZXJzaW9uKSksXG4gICAgICAgICkpLFxuICAgICk7XG59XG5cbi8vIE9uZSByZXF1ZXN0OiBpdHMgYW5zd2VyLCBvciBpdHMgZmFpbHVyZSBhcyBhIG1lc3NhZ2UsIGRyb3BwZWQgd2hlbiB0aGVcbi8vIHN0YXRlIHZlcnNpb24gbW92ZWQgd2hpbGUgaXQgd2FzIG91dC5cbmZ1bmN0aW9uIG9uZUxvYWQ8VD4obG9hZDogKCkgPT4gT2JzZXJ2YWJsZTxUPiwgdmVyc2lvbjogKCkgPT4gbnVtYmVyKTogT2JzZXJ2YWJsZTxUaWxlTG9hZFJlc3VsdDxUPj4ge1xuICBjb25zdCBzZW50QXQgPSB2ZXJzaW9uKCk7XG5cbiAgcmV0dXJuIGxvYWQoKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChkYXRhKTogVGlsZUxvYWRSZXN1bHQ8VD4gPT4gKHsgZGF0YSwgZXJyb3I6IG51bGwgfSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IG9mPFRpbGVMb2FkUmVzdWx0PFQ+Pih7IGRhdGE6IG51bGwsIGVycm9yOiBsb2FkRXJyb3JNZXNzYWdlKGVycm9yKSB9KSksXG4gICAgICBmaWx0ZXIoKCkgPT4gdmVyc2lvbigpID09PSBzZW50QXQpLFxuICAgICk7XG59XG5cbi8vIFdoYXQgYSBmYWlsZWQgcmVxdWVzdCBzYXlzOiB0aGUgc2VydmVyJ3MgbWVzc2FnZSwgZWxzZSB0aGUgZXJyb3IncyBvd24sXG4vLyBlbHNlIGEgcGxhaW4gZmFsbGJhY2suXG5mdW5jdGlvbiBsb2FkRXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgZmFpbHVyZSA9IGVycm9yIGFzIHsgZXJyb3I/OiB7IG1lc3NhZ2U/OiB1bmtub3duIH07IG1lc3NhZ2U/OiB1bmtub3duIH0gfCBudWxsO1xuICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZT8uZXJyb3I/Lm1lc3NhZ2UgPz8gZmFpbHVyZT8ubWVzc2FnZTtcblxuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UgPyBtZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIGRhdGEnO1xufVxuIl19
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1sb2Fkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90aWxlLWxvYWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLeEYsMEVBQTBFO0FBQzFFLHNGQUFzRjtBQUN0RiwrQkFBK0I7QUFDL0IsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBRTVDLHlFQUF5RTtBQUN6RSxxQ0FBcUM7QUFDckMsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLGlIQUFpSDtBQUNqSCw2RUFBNkU7QUFDN0Usc0NBQXNDO0FBQ3RDLE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFFBQTZCLEVBQzdCLElBQXlCLEVBQ3pCLE9BQXFCO0lBRXJCLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7U0FDcEUsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUN4QyxDQUFDLENBQ0wsQ0FBQztBQUNOLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsd0NBQXdDO0FBQ3hDLFNBQVMsT0FBTyxDQUFJLElBQXlCLEVBQUUsT0FBcUI7SUFDbEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFFekIsT0FBTyxJQUFJLEVBQUU7U0FDVixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFxQixFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUN6RCxVQUFVLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBb0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDckcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUNuQyxDQUFDO0FBQ04sQ0FBQztBQUVELDBFQUEwRTtBQUMxRSx5QkFBeUI7QUFDekIsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLEtBQW9FLENBQUM7SUFDckYsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUU1RCxPQUFPLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7QUFDbEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGltZXIgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVGlsZUxvYWRSZXN1bHQgfSBmcm9tICcuL2ludGVyZmFjZXMvdGlsZS1sb2FkLXJlc3VsdC5pbnRlcmZhY2UnO1xuXG5cbi8vIEEgc3dlZXAgb2YgY2hhbmdlcyAoYSBmZXcgZmlsdGVycyBzZXQgaW4gYSByb3csIGV2ZXJ5IHZhbHVlIG9mIGEgcGlja2VkXG4vLyBzYXZlZCBmaWx0ZXIpIHNldHRsZXMgZm9yIHRoaXMgbG9uZyBiZWZvcmUgYSB0aWxlIHJlZmV0Y2hlcywgc28gdGhlIHN3ZWVwIGNvc3RzIG9uZVxuLy8gcmVxdWVzdCwgbm90IG9uZSBwZXIgY2hhbmdlLlxuZXhwb3J0IGNvbnN0IFRJTEVfUkVGUkVTSF9ERUJPVU5DRV9NUyA9IDMwMDtcblxuLy8gQSB0aWxlJ3MgZGF0YSBhcyBvbmUgc3RyZWFtOiB0aGUgZmlyc3QgbG9hZCBhdCBvbmNlLCB0aGVuIG9uZSBsb2FkIHBlclxuLy8gc2V0dGxlZCBidXJzdCBvZiByZWZyZXNoIHRyaWdnZXJzLlxuLy9cbi8vIC0gRWFjaCB0cmlnZ2VyIHN0YXJ0cyBvdmVyIChzd2l0Y2hNYXApOiBpdCBjYW5jZWxzIHRoZSB3YWl0IGZvciB0aGUgb25lXG4vLyAgIGJlZm9yZSBpdCBhbmQgdGhlIHJlcXVlc3QgaW4gZmxpZ2h0LCB0aGVuIHdhaXRzIGZvciB0aGUgc3dlZXAgdG8gc2V0dGxlLlxuLy8gICBTbyBhbiBhbnN3ZXIgdG8gYW4gb2xkZXIgcmVxdWVzdCBuZXZlciBsYW5kcywgbm90IGV2ZW4gd2hpbGUgdGhlIG5leHRcbi8vICAgbG9hZCBzdGlsbCB3YWl0cywgYW5kIHRoZSBiYXIgc3RheXMgb24gdW50aWwgdGhlIHNldHRsZWQgbG9hZCBhbnN3ZXJzLlxuLy8gLSBFYWNoIGxvYWQgbm90ZXMgdGhlIHN0YXRlIHZlcnNpb24gaXQgd2FzIHNlbnQgdW5kZXIgKHN0YXRlVmVyc2lvbiksIGFuZFxuLy8gICBpdHMgYW5zd2VyIGlzIGRyb3BwZWQgd2hlbiB0aGUgdmVyc2lvbiBoYXMgbW92ZWQgc2luY2UuIHJlc2V0VG9EZWZhdWx0cygpXG4vLyAgIG1vdmVzIHRoZSB2ZXJzaW9uIGFuZCBhbm5vdW5jZXMgYSBmdWxsIGNoYW5nZSB0b2dldGhlciwgc28gdGhlIGxvYWQgZm9yIHRoZSBuZXcgc3RhdGUgaXMgYWxyZWFkeSBvbiBpdHMgd2F5LlxuLy8gLSBBIGZhaWxlZCBsb2FkIGVuZHMgb25seSBpdHNlbGY6IGl0cyBtZXNzYWdlIGNvbWVzIHRocm91Z2ggYXMgdGhlIGFuc3dlcixcbi8vICAgYW5kIHRoZSBuZXh0IHRyaWdnZXIgbG9hZHMgYWdhaW4uXG5leHBvcnQgZnVuY3Rpb24gdGlsZUxvYWRzPFQ+KFxuICByZWZyZXNoJDogT2JzZXJ2YWJsZTx1bmtub3duPixcbiAgbG9hZDogKCkgPT4gT2JzZXJ2YWJsZTxUPixcbiAgdmVyc2lvbjogKCkgPT4gbnVtYmVyLFxuKTogT2JzZXJ2YWJsZTxUaWxlTG9hZFJlc3VsdDxUPj4ge1xuICByZXR1cm4gbWVyZ2Uob2YoMCksIHJlZnJlc2gkLnBpcGUobWFwKCgpID0+IFRJTEVfUkVGUkVTSF9ERUJPVU5DRV9NUykpKVxuICAgIC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh3YWl0KSA9PiAod2FpdCA/IHRpbWVyKHdhaXQpIDogb2YoMCkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBvbmVMb2FkKGxvYWQsIHZlcnNpb24pKSxcbiAgICAgICAgKSksXG4gICAgKTtcbn1cblxuLy8gT25lIHJlcXVlc3Q6IGl0cyBhbnN3ZXIsIG9yIGl0cyBmYWlsdXJlIGFzIGEgbWVzc2FnZSwgZHJvcHBlZCB3aGVuIHRoZVxuLy8gc3RhdGUgdmVyc2lvbiBtb3ZlZCB3aGlsZSBpdCB3YXMgb3V0LlxuZnVuY3Rpb24gb25lTG9hZDxUPihsb2FkOiAoKSA9PiBPYnNlcnZhYmxlPFQ+LCB2ZXJzaW9uOiAoKSA9PiBudW1iZXIpOiBPYnNlcnZhYmxlPFRpbGVMb2FkUmVzdWx0PFQ+PiB7XG4gIGNvbnN0IHNlbnRBdCA9IHZlcnNpb24oKTtcblxuICByZXR1cm4gbG9hZCgpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGRhdGEpOiBUaWxlTG9hZFJlc3VsdDxUPiA9PiAoeyBkYXRhLCBlcnJvcjogbnVsbCB9KSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4gb2Y8VGlsZUxvYWRSZXN1bHQ8VD4+KHsgZGF0YTogbnVsbCwgZXJyb3I6IGxvYWRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pKSxcbiAgICAgIGZpbHRlcigoKSA9PiB2ZXJzaW9uKCkgPT09IHNlbnRBdCksXG4gICAgKTtcbn1cblxuLy8gV2hhdCBhIGZhaWxlZCByZXF1ZXN0IHNheXM6IHRoZSBzZXJ2ZXIncyBtZXNzYWdlLCBlbHNlIHRoZSBlcnJvcidzIG93bixcbi8vIGVsc2UgYSBwbGFpbiBmYWxsYmFjay5cbmZ1bmN0aW9uIGxvYWRFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBmYWlsdXJlID0gZXJyb3IgYXMgeyBlcnJvcj86IHsgbWVzc2FnZT86IHVua25vd24gfTsgbWVzc2FnZT86IHVua25vd24gfSB8IG51bGw7XG4gIGNvbnN0IG1lc3NhZ2UgPSBmYWlsdXJlPy5lcnJvcj8ubWVzc2FnZSA/PyBmYWlsdXJlPy5tZXNzYWdlO1xuXG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZSA/IG1lc3NhZ2UgOiAnRmFpbGVkIHRvIGxvYWQgZGF0YSc7XG59XG4iXX0=