@rivet-health/design-system 10.4.0 → 10.5.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.
- package/esm2020/lib/table/state.mjs +7 -1
- package/esm2020/lib/table/table/table.component.mjs +3 -3
- package/fesm2015/rivet-health-design-system.mjs +8 -3
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +8 -2
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/table/state.d.ts +1 -0
- package/package.json +1 -1
|
@@ -44,6 +44,7 @@ export var RivTable;
|
|
|
44
44
|
pages: getPages(s),
|
|
45
45
|
next: getNextPage(s),
|
|
46
46
|
pageCount: getPageCount(s),
|
|
47
|
+
showControls: getShowPaginationControls(s),
|
|
47
48
|
},
|
|
48
49
|
},
|
|
49
50
|
result: {
|
|
@@ -162,6 +163,11 @@ function getNextPage(state) {
|
|
|
162
163
|
const next = state.query.pagination.page + 1;
|
|
163
164
|
return next <= max ? next : null;
|
|
164
165
|
}
|
|
166
|
+
// We don't want to show the pagination controls when they are unnecessary.
|
|
167
|
+
function getShowPaginationControls(state) {
|
|
168
|
+
const smallestPageSize = Math.min(...[...RivTable.pageSizes]);
|
|
169
|
+
return state.result.totalMatchingRowCount > smallestPageSize;
|
|
170
|
+
}
|
|
165
171
|
function getAllColumns(state, supportedColumns) {
|
|
166
172
|
// If the table offers more columns than the user has configuration settings
|
|
167
173
|
// for (or if the user has no configuration settings yet), we'll append them
|
|
@@ -585,4 +591,4 @@ async function* reduce(state, action, columns, source) {
|
|
|
585
591
|
break;
|
|
586
592
|
}
|
|
587
593
|
}
|
|
588
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILFNBQVMsRUFFVCxhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxLQUFXLFFBQVEsQ0FzZXhCO0FBdGVELFdBQWlCLFFBQVE7SUF5Q1Ysa0JBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBVSxDQUFDO0lBc1ByRCxTQUFnQixhQUFhLENBSzNCLE1BQXVCLEVBQ3ZCLE9BQStCLEVBQy9CLGdCQUF3QixFQUN4QixPQUFpQztRQUVqQyxrQ0FBa0M7UUFDbEMsTUFBTSxZQUFZLEdBQXVCO1lBQ3ZDLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxNQUFNLEVBQUUsRUFBRTtnQkFDVixVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLENBQUM7b0JBQ1AsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7Z0JBQ0QsT0FBTyxFQUFFLElBQUk7YUFDZDtZQUNELElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNyQyxNQUFNLEVBQUU7Z0JBQ04sZUFBZSxFQUFFLEVBQUU7Z0JBQ25CLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLEVBQUU7YUFDbkI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFNBQVM7Z0JBQ2Ys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dCBGdXNlLCB7IElGdXNlT3B0aW9ucyB9IGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgZGVmYXVsdHNEZWVwLCBkaWZmZXJlbmNlLCBvcmRlckJ5LCByYW5nZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBDb25uZWN0YWJsZSxcbiAgY29ubmVjdGFibGUsXG4gIGZyb20sXG4gIG1hcCxcbiAgbWVyZ2VTY2FuLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSAndXRpbGl0eS10eXBlcyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2VGFibGUge1xuICBleHBvcnQgdHlwZSBSb3cgPSB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBGaWx0ZXJzID0gYW55O1xuXG4gIC8qKlxuICAgKiBSaXZUYWJsZSdzIHN0YXRlIGFuZCB1c2VyIGFjdGlvbnMgYXJlIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIGNodW5rczpcbiAgICpcbiAgICogLSBRdWVyeSAoZm9yIHRoaW5ncyBsaWtlIGZpbHRlcnMsIHBhZ2luYXRpb24sIHNlYXJjaCwgZXRjLilcbiAgICogLSBMb2FkaW5nIChmb3Igd2hldGhlciBvciBub3QgdGhlIHRhYmxlIGlzIGxvYWRpbmcgcm93IGRhdGEpXG4gICAqIC0gUmVzdWx0IChmb3IgdGhlIHJvdyBkYXRhIGl0c2VsZilcbiAgICogLSBEaXNwbGF5IChmb3IgdGhpbmdzIGxpa2UgY29sdW1uIGNvbmZpZ3VyYXRpb24pXG4gICAqIC0gU2VsZWN0aW9uIChmb3IgdHJhY2tpbmcgdGhlIHVzZXIncyByb3cgc2VsZWN0aW9ucylcbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBkYXRhIGZsb3cgaXMgdW5pZGlyZWN0aW9uYWw6IHRoZSBVSSBpc3N1ZXMgYWN0aW9ucywgd2hpY2hcbiAgICogYWZmZWN0IHRoZSBzdGF0ZSwgYW5kIHRoZSBzdGF0ZSBnZXRzIHBhc3NlZCBiYWNrIHRvIHRoZSBVSSBmb3IgZGlzcGxheS5cbiAgICpcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiAgVUkgIOKXhOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilJggICAgICAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pSCXG4gICAqIOKUgiAgQWN0aW9ucyAg4pSCICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSQXG4gICAqIOKUgiAgU3RhdGUgcmVkdWNlciAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBGcm9tIHRoZSBjb3JlIHN0YXRlLCBjYWxjdWxhdGVkIHN0YXRlIGlzIGRlcml2ZWQgYW5kIGFkZGVkIHRvIHRoZSBjb3JlXG4gICAqIHN0YXRlIChlLmcuLCBmcm9tIHRoZSByYXcgc2VsZWN0aW9uIHN0YXRlIHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWxsIHRoZSByb3dzIG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UgYXJlIHNlbGVjdGVkLCBldGMuKS5cbiAgICovXG5cbiAgLy8vLy8vLy8vLy9cbiAgLy8gUXVlcnkgLy9cbiAgLy8vLy8vLy8vLy9cblxuICAvLyBRdWVyeSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIE9yZGVyRGlyZWN0aW9uID0gJ2FzYycgfCAnZGVzYyc7XG4gIGV4cG9ydCBjb25zdCBwYWdlU2l6ZXMgPSBbMjUsIDUwLCAxMDAsIDI1MF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFF1ZXJ5PEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBvcmRlcjoge1xuICAgICAgZGlyZWN0aW9uOiBPcmRlckRpcmVjdGlvbjtcbiAgICAgIGNvbHVtbjogQztcbiAgICB9IHwgbnVsbDtcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBmaWx0ZXJzOiBGIHwgbnVsbDtcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBwYWdlOiBudW1iZXI7XG4gICAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUXVlcnkgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFF1ZXJ5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7IHR5cGU6ICdvcmRlckNoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydvcmRlciddIH1cbiAgICB8IHsgdHlwZTogJ29yZGVyQ29sdW1uVG9nZ2xlJzsgY29sdW1uOiBDIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2gnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJzQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ2ZpbHRlcnMnXSB9XG4gICAgfCB7IHR5cGU6ICdwYWdpbmF0aW9uQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3BhZ2luYXRpb24nXSB9XG4gICAgfCB7IHR5cGU6ICduZXh0UGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncGFnZUNoYW5nZSc7IHBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdwYWdlU2l6ZUNoYW5nZSc7IHNpemU6IG51bWJlciB9O1xuXG4gIC8vLy8vLy8vLy9cbiAgLy8gTG9hZCAvL1xuICAvLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgTG9hZCA9IHtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIGVycm9yOiB1bmtub3duIHwgbnVsbDtcbiAgfTtcblxuICAvLy8vLy8vLy8vLy9cbiAgLy8gUmVzdWx0IC8vXG4gIC8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIFJlc3VsdDxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQuXG4gICAgICovXG4gICAgY3VycmVudFBhZ2VEYXRhOiBSW107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBTb3VyY2U8UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID0gKFxuICAgIHF1ZXJ5OiBSaXZUYWJsZS5RdWVyeTxDLCBGPixcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBSaXZUYWJsZS5BY3Rpb248UiwgQywgRj4sXG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ8Uj4+O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gRGlzcGxheSAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgLy8gRGlzcGxheSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtblNldHRpbmdzPEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIG5hbWU6IEM7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcmVmZXJyZWRXaWR0aDogbnVtYmVyIHwgJ2F1dG8nO1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRGlzcGxheTxDIGV4dGVuZHMgQ29sdW1uPiA9IHtcbiAgICBjb2x1bW5TZXR0aW5nczogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgfTtcblxuICAvLyBEaXNwbGF5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBEaXNwbGF5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4+ID1cbiAgICB8IHsgdHlwZTogJ2NvbHVtblNldHRpbmdzQ2hhbmdlJzsgcGF5bG9hZDogRGlzcGxheTxDPlsnY29sdW1uU2V0dGluZ3MnXSB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5QaW5DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJztcbiAgICAgICAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICAgICAgICBuZXdJbmRleDogbnVtYmVyO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uRW5hYmxlZENoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbldpZHRoQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwcmVmZXJyZWRXaWR0aDogbnVtYmVyIHwgJ2F1dG8nO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy9cbiAgLy8gU2VsZWN0aW9uIC8vXG4gIC8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIFNlbGVjdGlvbiBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbjxSIGV4dGVuZHMgUm93PiA9XG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdpbmNsdWRlJztcbiAgICAgICAgaW5jbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnO1xuICAgICAgICBleGNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfTtcblxuICAvLyBTZWxlY3Rpb24gYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjdGlvbjxSIGV4dGVuZHMgUm93PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBTZWxlY3Rpb248Uj47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyb3dTZWxlY3RlZENoYW5nZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3BhZ2VTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdhbGxTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIC8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gQ29tYmluZWQgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBDb3JlU3RhdGU8UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID0ge1xuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPjtcbiAgICBsb2FkOiBMb2FkO1xuICAgIHJlc3VsdDogUmVzdWx0PFI+O1xuICAgIGRpc3BsYXk6IERpc3BsYXk8Qz47XG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb248Uj47XG4gIH07XG5cbiAgLy8gQ29tYmluZWQgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbjxSIGV4dGVuZHMgUm93LCBDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPVxuICAgIHwgUXVlcnlBY3Rpb248QywgRj5cbiAgICB8IERpc3BsYXlBY3Rpb248Qz5cbiAgICB8IFNlbGVjdGlvbkFjdGlvbjxSPjtcblxuICAvLyBGdWxsIHN0YXRlIChjb3JlIHN0YXRlIHBsdXMgcHVyZSBkZXJpdmF0aW9ucykgLy9cblxuICBleHBvcnQgdHlwZSBDb2x1bW5EYXRhVHlwZSA9XG4gICAgfCAnYWR2YW5jZWQnXG4gICAgfCAnY3VycmVuY3knXG4gICAgfCAnZGF0ZSdcbiAgICB8ICdpY29uJ1xuICAgIHwgJ2xvbmdUZXh0J1xuICAgIHwgJ251bWJlcidcbiAgICB8ICdzaG9ydFRleHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5BbGlnbm1lbnQgPSAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG4gIGV4cG9ydCB0eXBlIENvbHVtbk1ldGFkYXRhID0ge1xuICAgIG9yZGVyYWJsZTogYm9vbGVhbjtcbiAgICBtaW5XaWR0aDogbnVtYmVyO1xuICAgIGRhdGFUeXBlOiBDb2x1bW5EYXRhVHlwZTtcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRnVsbFJvdzxSIGV4dGVuZHMgUm93PiA9IFIgJiB7XG4gICAgcm93TGluazogc3RyaW5nIHwgbnVsbDtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRnVsbENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uPiA9IENvbHVtblNldHRpbmdzPEM+ICZcbiAgICBDb2x1bW5NZXRhZGF0YSAmIHtcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICBsZWZ0OiBudW1iZXIgfCBudWxsO1xuICAgICAgYWxpZ25tZW50OiBDb2x1bW5BbGlnbm1lbnQ7XG4gICAgfTtcbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG5cbiAgZXhwb3J0IHR5cGUgQ3N2Q2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3c6IFIsXG4gICAgY29sdW1uOiBGdWxsQ29sdW1uPEM+LFxuICApID0+IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgQ3N2Um93ID0gc3RyaW5nW107XG4gIGV4cG9ydCB0eXBlIENzdiA9IENzdlJvd1tdO1xuICBleHBvcnQgdHlwZSBDc3ZPdXRwdXQgPVxuICAgIHwgeyBsb2FkaW5nOiB0cnVlOyBkYXRhOiBudWxsIH1cbiAgICB8IHsgbG9hZGluZzogZmFsc2U7IGRhdGE6IENzdiB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4gPSBDb3JlU3RhdGU8UiwgQywgRj4gJiB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcHJldmlvdXM6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VzOiBudW1iZXJbXTtcbiAgICAgICAgbmV4dDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZUNvdW50OiBudW1iZXI7XG4gICAgICB9O1xuICAgIH07XG4gICAgcmVzdWx0OiB7XG4gICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICBjc3ZEYXRhOiAoKSA9PiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+O1xuICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICB9O1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIGNvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgICBzZWxlY3Rpb246IHtcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBzZWxlY3RlZENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZXIgaXMgd2hhdCBzZXRzIHVwIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB0cmFuc2xhdGVzIHVzZXIgYWN0aW9uc1xuICAgKiAobGlrZSBwYWdpbmF0aW9uIG9yIGZpbHRlciBjaGFuZ2VzLCBldGMuKSBpbnRvIG5ldyByb3cgZGF0YSBieSBjYWxsaW5nIHRoZVxuICAgKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCBhbHNvIGF1Z21lbnRzIHRoZSBjb3JlIHN0YXRlIHdpdGggYWRkaXRpb25hbCBkZXJpdmVkXG4gICAqIHN0YXRlLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPFIgZXh0ZW5kcyBSb3csIEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGPj47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+ID0ge1xuICAgIGluaXRpYWxTdGF0ZT86IERlZXBQYXJ0aWFsPENvcmVTdGF0ZTxSLCBDLCBGPj47XG4gICAgcm93TGluaz86IChyb3c6IFIpID0+IHN0cmluZztcbiAgICBjc3ZDZWxsRm9ybWF0dGVyPzogQ3N2Q2VsbEZvcm1hdHRlcjxSLCBDPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+KFxuICAgIHNvdXJjZTogU291cmNlPFIsIEMsIEY+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgLy8gU2V0IHVwIHRoZSBpbml0aWFsIHRhYmxlIHN0YXRlLlxuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEY+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7IGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogbnVsbCB9LFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogW10sXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogMCxcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBbXSxcbiAgICAgIH0sXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEY+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIC8vIFdpcmUgdXAgcmVkdWNlZCBzdGF0ZSBmcm9tIGFjdGlvbnMgYW5kIGluaXRpYWwgc3RhdGUuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRj4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8Q29yZVN0YXRlPFIsIEMsIEY+PiA9IGFjdGlvbnMucGlwZShcbiAgICAgIG1lcmdlU2NhbihcbiAgICAgICAgKHN0YXRlLCBhY3Rpb24pID0+IGZyb20ocmVkdWNlKHN0YXRlLCBhY3Rpb24sIGNvbHVtbnMsIHNvdXJjZSkpLFxuICAgICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUsXG4gICAgICAgIDEsXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEY+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+ICh7XG4gICAgICAgICAgLi4ucyxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4ucy5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwcmV2aW91czogZ2V0UHJldmlvdXNQYWdlKHMpLFxuICAgICAgICAgICAgICBwYWdlczogZ2V0UGFnZXMocyksXG4gICAgICAgICAgICAgIG5leHQ6IGdldE5leHRQYWdlKHMpLFxuICAgICAgICAgICAgICBwYWdlQ291bnQ6IGdldFBhZ2VDb3VudChzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgIC4uLnMucmVzdWx0LFxuICAgICAgICAgICAgcm93czogcy5yZXN1bHQuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rID8gb3B0aW9ucy5yb3dMaW5rKHJvdykgOiBudWxsLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY3N2RGF0YTogYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICAgICAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogcy5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gcmVzb2x2ZUNvbHVtbnMocywgY29sdW1ucyk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtcbiAgICAgICAgICAgICAgICBmdWxsQ29sdW1ucy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKSxcbiAgICAgICAgICAgICAgICAuLi5kYXRhU2V0LmN1cnJlbnRQYWdlRGF0YS5tYXAocmVjb3JkID0+XG4gICAgICAgICAgICAgICAgICBmdWxsQ29sdW1ucy5tYXAoY29sdW1uID0+IGNlbGxGb3JtYXR0ZXIocmVjb3JkLCBjb2x1bW4pKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICB5aWVsZCB7IGxvYWRpbmc6IGZhbHNlLCBkYXRhIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3N2RmlsZW5hbWU6XG4gICAgICAgICAgICAgIChvcHRpb25zPy5jc3ZGaWxlQmFzZW5hbWU/LnNsaWNlKDAsIDIwMCkgPz8gcGx1cmFsRW50aXR5TmFtZSkgK1xuICAgICAgICAgICAgICAnLmNzdicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5zLmRpc3BsYXksXG4gICAgICAgICAgICBjb2x1bW5zOiByZXNvbHZlQ29sdW1ucyhzLCBjb2x1bW5zKSxcbiAgICAgICAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IGdldFplcm9TdGF0ZU1lc3NhZ2UocywgcGx1cmFsRW50aXR5TmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgaXNBbGxTZWxlY3RlZDogaXNBbGxTZWxlY3RlZChzKSxcbiAgICAgICAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDogaXNDdXJyZW50UGFnZVNlbGVjdGVkKHMpLFxuICAgICAgICAgICAgc2VsZWN0ZWRDb3VudDogc2VsZWN0ZWRDb3VudChzKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgLy8gTG9hZCBpbml0aWFsIHRhYmxlIHJvdyBkYXRhLlxuICAgIGFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkJyB9KTtcblxuICAgIHJldHVybiB7IGFjdGlvbnMsIHN0YXRlIH07XG4gIH1cblxuICAvKipcbiAgICogTW9zdCB0YWJsZXMgdXNlIHJlbW90ZSBiYWNrZW5kcyB0byBmZXRjaCBkYXRhIGFzeW5jaHJvbm91c2x5LCBidXQgYW5cbiAgICogaW4tbWVtb3J5IHNvdXJjZSBpcyB1c2VmdWwgZm9yIHNtYWxsIGRhdGFzZXRzLCB3aGVuIFJpdlRhYmxlIGZlYXR1cmVzIGxpa2VcbiAgICogb3JkZXJpbmcgYW5kIHBhZ2luYXRpb24gYXJlIGRlc2lyZWQuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8UiBleHRlbmRzIFJvdz4gPSBPbWl0PFxuICAgIENvbHVtbk1ldGFkYXRhLFxuICAgICdvcmRlcmFibGUnXG4gID4gJiB7IG9yZGVyS2V5Pzoga2V5b2YgUiB9O1xuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5TWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+ID0gTWFuYWdlck9wdGlvbnM8UiwgQywgRj4gJiB7XG4gICAgZnVzZU9wdGlvbnM/OiBJRnVzZU9wdGlvbnM8Uj47XG4gICAgZmlsdGVyPzogKGZpbHRlcnM6IEYgfCBudWxsLCByb3c6IFIpID0+IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPFJbXT4gfCBSW10sXG4gICAgY29sdW1uczogTWFwPEMsIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2UoZGF0YSwgb3B0aW9ucz8uZnVzZU9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IHF1ZXJ5LnNlYXJjaFxuICAgICAgICA/IGZ1c2Uuc2VhcmNoKHF1ZXJ5LnNlYXJjaCkubWFwKHJlc3VsdCA9PiByZXN1bHQuaXRlbSlcbiAgICAgICAgOiBxdWVyeS5vcmRlciAmJiBvcmRlckNvbHVtblxuICAgICAgICA/IG9yZGVyQnkoZGF0YSwgb3JkZXJDb2x1bW4sIHF1ZXJ5Lm9yZGVyLmRpcmVjdGlvbilcbiAgICAgICAgOiBkYXRhO1xuICAgICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJcbiAgICAgICAgPyBvcmRlcmVkLmZpbHRlcihyb3cgPT4gZmlsdGVyKHF1ZXJ5LmZpbHRlcnMsIHJvdykpXG4gICAgICAgIDogb3JkZXJlZDtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSAqIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IHN0YXJ0SWR4ICsgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IHBhZ2luYXRlZCA9IGZpbHRlcmVkLnNsaWNlKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBwYWdpbmF0ZWQsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZmlsdGVyZWQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID0gbmV3IE1hcChcbiAgICAgIFsuLi5jb2x1bW5zLmVudHJpZXMoKV0ubWFwKChbbmFtZSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBvcmRlcmFibGU6ICEhbWV0YWRhdGEub3JkZXJLZXksXG4gICAgICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIG1pbldpZHRoOiBtZXRhZGF0YS5taW5XaWR0aCxcbiAgICAgICAgICBkYXRhVHlwZTogbWV0YWRhdGEuZGF0YVR5cGUsXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2VDb3VudDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4pOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoXG4gICAgTWF0aC5jZWlsKFxuICAgICAgc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCAvIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgKSxcbiAgICAxLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+KTogbnVtYmVyIHwgbnVsbCB7XG4gIHJldHVybiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPT09IDBcbiAgICA/IG51bGxcbiAgICA6IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAtIDE7XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2VzPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPik6IG51bWJlcltdIHtcbiAgY29uc3QgcGFkZGluZyA9IDQ7XG4gIGNvbnN0IG1pbiA9IDA7XG4gIGNvbnN0IG1heCA9IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxO1xuICBjb25zdCBkZXNpcmVkU3RhcnQgPSBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgLSBwYWRkaW5nO1xuICBjb25zdCBjbGFtcGVkU3RhcnQgPSBNYXRoLm1heChtaW4sIGRlc2lyZWRTdGFydCk7XG4gIGNvbnN0IGRlc2lyZWRFbmQgPSBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKyBwYWRkaW5nO1xuICBjb25zdCBjbGFtcGVkRW5kID0gTWF0aC5taW4obWF4LCBkZXNpcmVkRW5kKTtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heChtaW4sIGNsYW1wZWRTdGFydCAtIChkZXNpcmVkRW5kIC0gY2xhbXBlZEVuZCkpO1xuICBjb25zdCBlbmQgPSBNYXRoLm1pbihtYXgsIGNsYW1wZWRFbmQgKyAoY2xhbXBlZFN0YXJ0IC0gZGVzaXJlZFN0YXJ0KSk7XG4gIHJldHVybiByYW5nZShzdGFydCwgZW5kICsgMSk7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRQYWdlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPik6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBtYXggPSBnZXRQYWdlQ291bnQoc3RhdGUpIC0gMTtcbiAgY29uc3QgbmV4dCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIDE7XG4gIHJldHVybiBuZXh0IDw9IG1heCA/IG5leHQgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4pOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdIHtcbiAgLy8gSWYgdGhlIHRhYmxlIG9mZmVycyBtb3JlIGNvbHVtbnMgdGhhbiB0aGUgdXNlciBoYXMgY29uZmlndXJhdGlvbiBzZXR0aW5nc1xuICAvLyBmb3IgKG9yIGlmIHRoZSB1c2VyIGhhcyBubyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHlldCksIHdlJ2xsIGFwcGVuZCB0aGVtXG4gIC8vIHRvIHRoZSBlbmQuIFRoaXMgZW5zdXJlcyB0aGF0IG5ldyBjb2x1bW5zIHdlIGFkZCB0byBleGlzdGluZyB0YWJsZXMgb3ZlclxuICAvLyB0aW1lICgxKSBnZXQgZGlzcGxheWVkIGV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3QgYXBwZWFyIGluIHRoZSB1c2VyJ3NcbiAgLy8gY29uZmlndXJhdGlvbiBzZXR0aW5ncyB5ZXQsIGFuZCAoMikgZG9uJ3QgaW50ZXJydXB0IHRoZWlyIGV4aXN0aW5nIHNldHVwLlxuICBjb25zdCBjb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MgPSBkaWZmZXJlbmNlKFxuICAgIFsuLi5zdXBwb3J0ZWRDb2x1bW5zLmtleXMoKV0sXG4gICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKSxcbiAgKTtcblxuICAvLyBUaHJvdyBvdXQgc2V0dGluZ3MgZm9yIGNvbHVtbnMgbm8gbG9uZ2VyIG9mZmVyZWQgYnkgdGhlIHRhYmxlLlxuICBjb25zdCBjb2x1bW5zV2l0aFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9XG4gICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5maWx0ZXIoKHsgbmFtZSB9KSA9PlxuICAgICAgc3VwcG9ydGVkQ29sdW1ucy5oYXMobmFtZSksXG4gICAgKTtcblxuICBjb25zdCBjb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9IFtcbiAgICAuLi5jb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MsXG4gIF0ubWFwKChuYW1lOiBDKSA9PiAoe1xuICAgIG5hbWUsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBwcmVmZXJyZWRXaWR0aDogJ2F1dG8nLFxuICAgIHBpbm5lZDogZmFsc2UsXG4gIH0pKTtcblxuICByZXR1cm4gWy4uLmNvbHVtbnNXaXRoVXNlclNldHRpbmdzLCAuLi5jb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nc107XG59XG5cbmZ1bmN0aW9uIGdldEFsaWdubWVudChcbiAgbWV0YWRhdGE6IFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhLFxuICBpbmRleDogbnVtYmVyLFxuKTogUml2VGFibGUuQ29sdW1uQWxpZ25tZW50IHtcbiAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gJ2xlZnQnO1xuICBzd2l0Y2ggKG1ldGFkYXRhLmRhdGFUeXBlKSB7XG4gICAgY2FzZSAnZGF0ZSc6XG4gICAgY2FzZSAnbG9uZ1RleHQnOlxuICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICBjYXNlICdhZHZhbmNlZCc6XG4gICAgY2FzZSAnaWNvbic6XG4gICAgY2FzZSAnc2hvcnRUZXh0JzpcbiAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4pOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgc3VwcG9ydGVkQ29sdW1ucyk7XG4gIHJldHVybiBhbGxDb2x1bW5zXG4gICAgLmZpbHRlcigoeyBlbmFibGVkIH0pID0+IGVuYWJsZWQpXG4gICAgLnJlZHVjZShcbiAgICAgIChcbiAgICAgICAgZnVsbENvbHVtbnM6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSxcbiAgICAgICAgc2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LFxuICAgICAgICBpOiBudW1iZXIsXG4gICAgICApOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10gPT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHN1cHBvcnRlZENvbHVtbnMuZ2V0KHNldHRpbmdzLm5hbWUpITtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRXaWR0aCA9XG4gICAgICAgICAgc2V0dGluZ3MucHJlZmVycmVkV2lkdGggPT09ICdhdXRvJ1xuICAgICAgICAgICAgPyBtZXRhZGF0YS5taW5XaWR0aFxuICAgICAgICAgICAgOiBNYXRoLm1heChtZXRhZGF0YS5taW5XaWR0aCwgc2V0dGluZ3MucHJlZmVycmVkV2lkdGgpO1xuICAgICAgICBjb25zdCBwcmV2aW91c0NvbHVtbjogUml2VGFibGUuRnVsbENvbHVtbjxDPiB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgZnVsbENvbHVtbnNbaSAtIDFdO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLmZ1bGxDb2x1bW5zLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgICAgICB3aWR0aDogcmVzb2x2ZWRXaWR0aCxcbiAgICAgICAgICAgIGxlZnQ6IHNldHRpbmdzLnBpbm5lZFxuICAgICAgICAgICAgICA/IHByZXZpb3VzQ29sdW1uXG4gICAgICAgICAgICAgICAgPyAocHJldmlvdXNDb2x1bW4ubGVmdCB8fCAwKSArIHByZXZpb3VzQ29sdW1uLndpZHRoXG4gICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGFsaWdubWVudDogZ2V0QWxpZ25tZW50KG1ldGFkYXRhLCBpKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFtdLFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFplcm9TdGF0ZU1lc3NhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+LCBlbnRpdHk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA+IDApIHJldHVybiBudWxsO1xuICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoKVxuICAgIHJldHVybiBgTm8gJHtlbnRpdHl9IG1hdGNoIHlvdXIgY3VycmVudCBzZWFyY2gga2V5d29yZC5gO1xuICBpZiAoc3RhdGUucXVlcnkuZmlsdGVycykgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IGZpbHRlcnMuYDtcbiAgcmV0dXJuIGBObyAke2VudGl0eX0uYDtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uUGluPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbjogQyxcbiAgcGlubmVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJCeShcbiAgICAgICAgYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgcGlubmVkOiBjLm5hbWUgPT09IGNvbHVtbiA/IHBpbm5lZCA6IGMucGlubmVkLFxuICAgICAgICB9KSksXG4gICAgICAgIHYgPT4gKHYucGlubmVkID8gMSA6IDApLFxuICAgICAgICAnZGVzYycsXG4gICAgICApLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbk9yZGVyPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcixcbiAgbmV3SW5kZXg6IG51bWJlcixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zKTtcblxuICAvLyBGaXJzdCwgcHV0IHRoZSBjb2x1bW5zIGluIHRoZSBkZXNpcmVkIG9yZGVyLlxuICBjb25zdCBpdGVtID0gYWxsQ29sdW1uc1twcmV2aW91c0luZGV4XTtcbiAgY29uc3Qgd2l0aG91dEl0ZW0gPSBhbGxDb2x1bW5zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gcHJldmlvdXNJbmRleCk7XG4gIGNvbnN0IHJlb3JkZXJlZCA9IFtcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZSgwLCBuZXdJbmRleCksXG4gICAgaXRlbSxcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZShuZXdJbmRleCksXG4gIF07XG5cbiAgLy8gVGhlbiwgd2UgbWF5IG5lZWQgdG8gZml4IHRoZSBwaW5zIChhbGwgcGlubmVkIGNvbHVtbnMgYXBwZWFyIGF0IHRoZVxuICAvLyBiZWdpbm5pbmcgb2YgdGhlIGNvbHVtbnMgYXJyYXkpIHNpbmNlIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZHJhZ1xuICAvLyBhbmQgZHJvcCBjb2x1bW5zIHRvIGFuZCBmcm9tIHRoZSBwaW5uZWQgYXJlYS4gSWYgdGhlIHVzZXIgZHJhZ3MgYVxuICAvLyBjb2x1bW4gYWNyb3NzIHRoYXQgdGhyZXNob2xkLCB1cGRhdGUgaXRzIHBpbm5lZCBzdGF0dXMuXG4gIGNvbnN0IHVwZGF0ZWQgPSByZW9yZGVyZWQubWFwKChzZXR0aW5ncywgaSwgYXJyKSA9PiB7XG4gICAgaWYgKG5ld0luZGV4ID09PSBpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgcGlubmVkOiBzZXR0aW5ncy5waW5uZWRcbiAgICAgICAgICA/IGFycltpIC0gMV0/LnBpbm5lZCA/PyB0cnVlXG4gICAgICAgICAgOiBhcnJbaSArIDFdPy5waW5uZWQgPz8gZmFsc2UsXG4gICAgICB9O1xuICAgIH0gZWxzZSByZXR1cm4gc2V0dGluZ3M7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiB1cGRhdGVkLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbkVuYWJsZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uOiBDLFxuICBlbmFibGVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAuLi5jLFxuICAgICAgICBlbmFibGVkOiBjLm5hbWUgPT09IGNvbHVtbiA/IGVuYWJsZWQgOiBjLmVuYWJsZWQsXG4gICAgICB9KSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uV2lkdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uOiBDLFxuICBwcmVmZXJyZWRXaWR0aDogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bJ3ByZWZlcnJlZFdpZHRoJ10sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgIC4uLmMsXG4gICAgICAgIHByZWZlcnJlZFdpZHRoOiBjLm5hbWUgPT09IGNvbHVtbiA/IHByZWZlcnJlZFdpZHRoIDogYy5wcmVmZXJyZWRXaWR0aCxcbiAgICAgIH0pKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1Jvd1NlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPiwgaWQ6IFJbJ2lkJ10pOiBib29sZWFuIHtcbiAgc3dpdGNoIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSkge1xuICAgIGNhc2UgJ2luY2x1ZGUnOlxuICAgICAgcmV0dXJuIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5oYXMoaWQpO1xuICAgIGNhc2UgJ2V4Y2x1ZGUnOlxuICAgICAgcmV0dXJuICFzdGF0ZS5zZWxlY3Rpb24uZXhjbHVkZWQuaGFzKGlkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FsbFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICBpZiAoXG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnZXhjbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplID09PSAwKSB8fFxuICAgIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSA9PT0gJ2luY2x1ZGUnICYmXG4gICAgICBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZSA9PT0gc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudClcbiAgKVxuICAgIHJldHVybiB0cnVlO1xuICBpZiAoXG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnZXhjbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplID09PSBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50KSB8fFxuICAgIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSA9PT0gJ2luY2x1ZGUnICYmIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5zaXplID09PSAwKVxuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xufVxuXG5mdW5jdGlvbiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+KTogUml2VGFibGUuTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHNlbGVjdGVkU3RhdGVzID0gc3RhdGUucmVzdWx0LmN1cnJlbnRQYWdlRGF0YS5tYXAoKHsgaWQgfSkgPT5cbiAgICBpc1Jvd1NlbGVjdGVkKHN0YXRlLCBpZCksXG4gICk7XG4gIGlmIChzZWxlY3RlZFN0YXRlcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHNlbGVjdGVkU3RhdGVzLmV2ZXJ5KHYgPT4gdikpIHJldHVybiB0cnVlO1xuICAgIGlmIChzZWxlY3RlZFN0YXRlcy5zb21lKHYgPT4gdikpIHJldHVybiAnaW5kZXRlcm1pbmF0ZSc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RlZENvdW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPik6IG51bWJlciB7XG4gIHN3aXRjaCAoc3RhdGUuc2VsZWN0aW9uLm1vZGUpIHtcbiAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZTtcbiAgICBjYXNlICdleGNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50IC0gc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZnJlc2hSZXN1bHRXaXRoPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIHNvdXJjZTogUml2VGFibGUuU291cmNlPFIsIEMsIEY+LFxuICBtb3N0UmVjZW50QWN0aW9uOiBSaXZUYWJsZS5BY3Rpb248UiwgQywgRj4sXG4pOiBBc3luY0dlbmVyYXRvcjxSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4+IHtcbiAgeWllbGQge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWQ6IHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICB9LFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNvdXJjZShzdGF0ZS5xdWVyeSwgbW9zdFJlY2VudEFjdGlvbik7XG4gICAgeWllbGQge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgICByZXN1bHQsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB5aWVsZCB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWQ6IHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJvd1NlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIGlkOiBSWydpZCddLFxuICBzZWxlY3RlZDogYm9vbGVhbixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0aW9uOlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBzZWxlY3RlZFxuICAgICAgICAgICAgICA/IG5ldyBTZXQoWy4uLnN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZCwgaWRdKVxuICAgICAgICAgICAgICA6IG5ldyBTZXQoWy4uLnN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZF0uZmlsdGVyKHMgPT4gcyAhPT0gaWQpKSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnLFxuICAgICAgICAgICAgZXhjbHVkZWQ6IHNlbGVjdGVkXG4gICAgICAgICAgICAgID8gbmV3IFNldChbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkXS5maWx0ZXIocyA9PiBzICE9PSBpZCkpXG4gICAgICAgICAgICAgIDogbmV3IFNldChbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLCBpZF0pLFxuICAgICAgICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZVBhZ2VTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4ge1xuICBjb25zdCBpc1BhZ2VGdWxseVNlbGVjdGVkID0gc3RhdGUucmVzdWx0LmN1cnJlbnRQYWdlRGF0YS5ldmVyeSgoeyBpZCB9KSA9PlxuICAgIGlzUm93U2VsZWN0ZWQoc3RhdGUsIGlkKSxcbiAgKTtcbiAgcmV0dXJuIHN0YXRlLnJlc3VsdC5jdXJyZW50UGFnZURhdGEucmVkdWNlKChhY2N1bXVsYXRlZFN0YXRlLCByb3cpID0+IHtcbiAgICByZXR1cm4gc2V0Um93U2VsZWN0ZWQoYWNjdW11bGF0ZWRTdGF0ZSwgcm93LmlkLCAhaXNQYWdlRnVsbHlTZWxlY3RlZCk7XG4gIH0sIHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQWxsU2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+KTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+IHtcbiAgaWYgKGlzQWxsU2VsZWN0ZWQoc3RhdGUpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnLFxuICAgICAgICBleGNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNvbHVtbk9yZGVyPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPiwgY29sdW1uOiBDKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+IHtcbiAgaWYgKHN0YXRlLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICBvcmRlcjpcbiAgICAgICAgICBzdGF0ZS5xdWVyeS5vcmRlci5kaXJlY3Rpb24gPT09ICdhc2MnXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnZGVzYycsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHF1ZXJ5OiB7XG4gICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgZGlyZWN0aW9uOiAnYXNjJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZHVjZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRj4sXG4pOiBBc3luY0dlbmVyYXRvcjxSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKHN0YXRlLCBzb3VyY2UsIGFjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcmRlckNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBvcmRlcjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnb3JkZXJDb2x1bW5Ub2dnbGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB0b2dnbGVDb2x1bW5PcmRlcihzdGF0ZSwgYWN0aW9uLmNvbHVtbiksXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlYXJjaENoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBzZWFyY2g6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncHJldmlvdXNQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBnZXRQcmV2aW91c1BhZ2Uoc3RhdGUpID8/IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25leHRQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBnZXROZXh0UGFnZShzdGF0ZSkgPz8gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBhY3Rpb24ucGFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNpemVDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlU2l6ZTogYWN0aW9uLnNpemUsXG4gICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbHRlcnNDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZmlsdGVyczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgY29sdW1uU2V0dGluZ3M6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblBpbkNoYW5nZSc6XG4gICAgICB5aWVsZCBjaGFuZ2VDb2x1bW5QaW4oc3RhdGUsIGNvbHVtbnMsIGFjdGlvbi5jb2x1bW4sIGFjdGlvbi5waW5uZWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBhY3Rpb24ucHJldmlvdXNJbmRleCxcbiAgICAgICAgYWN0aW9uLm5ld0luZGV4LFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uRW5hYmxlZChzdGF0ZSwgY29sdW1ucywgYWN0aW9uLmNvbHVtbiwgYWN0aW9uLmVuYWJsZWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uV2lkdGgoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICBhY3Rpb24ucHJlZmVycmVkV2lkdGgsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncm93U2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgc2V0Um93U2VsZWN0ZWQoc3RhdGUsIGFjdGlvbi5pZCwgYWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB0b2dnbGVQYWdlU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWxsU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgdG9nZ2xlQWxsU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cbiJdfQ==
|
|
594
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILFNBQVMsRUFFVCxhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxLQUFXLFFBQVEsQ0F3ZXhCO0FBeGVELFdBQWlCLFFBQVE7SUF5Q1Ysa0JBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBVSxDQUFDO0lBdVByRCxTQUFnQixhQUFhLENBSzNCLE1BQXVCLEVBQ3ZCLE9BQStCLEVBQy9CLGdCQUF3QixFQUN4QixPQUFpQztRQUVqQyxrQ0FBa0M7UUFDbEMsTUFBTSxZQUFZLEdBQXVCO1lBQ3ZDLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxNQUFNLEVBQUUsRUFBRTtnQkFDVixVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLENBQUM7b0JBQ1AsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7Z0JBQ0QsT0FBTyxFQUFFLElBQUk7YUFDZDtZQUNELElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNyQyxNQUFNLEVBQUU7Z0JBQ04sZUFBZSxFQUFFLEVBQUU7Z0JBQ25CLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLEVBQUU7YUFDbkI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLFNBQVM7Z0JBQ2Ys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SyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELE1BQU07UUFDUixLQUFLLG9CQUFvQjtZQUN2QixNQUFNLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLE1BQU07UUFDUixLQUFLLG1CQUFtQjtZQUN0QixNQUFNLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLE1BQU07S0FDVDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRnVzZSwgeyBJRnVzZU9wdGlvbnMgfSBmcm9tICdmdXNlLmpzJztcbmltcG9ydCB7IGRlZmF1bHRzRGVlcCwgZGlmZmVyZW5jZSwgb3JkZXJCeSwgcmFuZ2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGFibGUsXG4gIGNvbm5lY3RhYmxlLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlU2NhbixcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJ3V0aWxpdHktdHlwZXMnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFJpdlRhYmxlIHtcbiAgZXhwb3J0IHR5cGUgUm93ID0geyBpZDogc3RyaW5nIHwgbnVtYmVyIH07XG4gIGV4cG9ydCB0eXBlIENvbHVtbiA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgRmlsdGVycyA9IGFueTtcblxuICAvKipcbiAgICogUml2VGFibGUncyBzdGF0ZSBhbmQgdXNlciBhY3Rpb25zIGFyZSBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBjaHVua3M6XG4gICAqXG4gICAqIC0gUXVlcnkgKGZvciB0aGluZ3MgbGlrZSBmaWx0ZXJzLCBwYWdpbmF0aW9uLCBzZWFyY2gsIGV0Yy4pXG4gICAqIC0gTG9hZGluZyAoZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0YWJsZSBpcyBsb2FkaW5nIHJvdyBkYXRhKVxuICAgKiAtIFJlc3VsdCAoZm9yIHRoZSByb3cgZGF0YSBpdHNlbGYpXG4gICAqIC0gRGlzcGxheSAoZm9yIHRoaW5ncyBsaWtlIGNvbHVtbiBjb25maWd1cmF0aW9uKVxuICAgKiAtIFNlbGVjdGlvbiAoZm9yIHRyYWNraW5nIHRoZSB1c2VyJ3Mgcm93IHNlbGVjdGlvbnMpXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgZGF0YSBmbG93IGlzIHVuaWRpcmVjdGlvbmFsOiB0aGUgVUkgaXNzdWVzIGFjdGlvbnMsIHdoaWNoXG4gICAqIGFmZmVjdCB0aGUgc3RhdGUsIGFuZCB0aGUgc3RhdGUgZ2V0cyBwYXNzZWQgYmFjayB0byB0aGUgVUkgZm9yIGRpc3BsYXkuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICpcbiAgICogRnJvbSB0aGUgY29yZSBzdGF0ZSwgY2FsY3VsYXRlZCBzdGF0ZSBpcyBkZXJpdmVkIGFuZCBhZGRlZCB0byB0aGUgY29yZVxuICAgKiBzdGF0ZSAoZS5nLiwgZnJvbSB0aGUgcmF3IHNlbGVjdGlvbiBzdGF0ZSB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90XG4gICAqIGFsbCB0aGUgcm93cyBvbiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlIGFyZSBzZWxlY3RlZCwgZXRjLikuXG4gICAqL1xuXG4gIC8vLy8vLy8vLy8vXG4gIC8vIFF1ZXJ5IC8vXG4gIC8vLy8vLy8vLy8vXG5cbiAgLy8gUXVlcnkgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBPcmRlckRpcmVjdGlvbiA9ICdhc2MnIHwgJ2Rlc2MnO1xuICBleHBvcnQgY29uc3QgcGFnZVNpemVzID0gWzI1LCA1MCwgMTAwLCAyNTBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBRdWVyeTxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPSB7XG4gICAgb3JkZXI6IHtcbiAgICAgIGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb247XG4gICAgICBjb2x1bW46IEM7XG4gICAgfSB8IG51bGw7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgZmlsdGVyczogRiB8IG51bGw7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFF1ZXJ5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBRdWVyeUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZCcgfVxuICAgIHwgeyB0eXBlOiAnb3JkZXJDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnb3JkZXInXSB9XG4gICAgfCB7IHR5cGU6ICdvcmRlckNvbHVtblRvZ2dsZSc7IGNvbHVtbjogQyB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydmaWx0ZXJzJ10gfVxuICAgIHwgeyB0eXBlOiAncGFnaW5hdGlvbkNoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydwYWdpbmF0aW9uJ10gfVxuICAgIHwgeyB0eXBlOiAnbmV4dFBhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncHJldmlvdXNQYWdlTmF2aWdhdGUnIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2VDaGFuZ2UnOyBwYWdlOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAncGFnZVNpemVDaGFuZ2UnOyBzaXplOiBudW1iZXIgfTtcblxuICAvLy8vLy8vLy8vXG4gIC8vIExvYWQgLy9cbiAgLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIExvYWQgPSB7XG4gICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICBlcnJvcjogdW5rbm93biB8IG51bGw7XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vXG4gIC8vIFJlc3VsdCAvL1xuICAvLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIGN1cnJlbnRQYWdlRGF0YTogUltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgU291cmNlPFIgZXh0ZW5kcyBSb3csIEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IChcbiAgICBxdWVyeTogUml2VGFibGUuUXVlcnk8QywgRj4sXG4gICAgbW9zdFJlY2VudEFjdGlvbjogUml2VGFibGUuQWN0aW9uPFIsIEMsIEY+LFxuICApID0+IFByb21pc2U8UmVzdWx0PFI+PjtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIERpc3BsYXkgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIC8vIERpc3BsYXkgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBDb2x1bW5TZXR0aW5nczxDIGV4dGVuZHMgQ29sdW1uPiA9IHtcbiAgICBuYW1lOiBDO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIERpc3BsYXk8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAgY29sdW1uU2V0dGluZ3M6IENvbHVtblNldHRpbmdzPEM+W107XG4gIH07XG5cbiAgLy8gRGlzcGxheSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgRGlzcGxheUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uPiA9XG4gICAgfCB7IHR5cGU6ICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc7IHBheWxvYWQ6IERpc3BsYXk8Qz5bJ2NvbHVtblNldHRpbmdzJ10gfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uUGluQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5PcmRlckNoYW5nZSc7XG4gICAgICAgIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgICAgICAgbmV3SW5kZXg6IG51bWJlcjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5XaWR0aENoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFNlbGVjdGlvbiAvL1xuICAvLy8vLy8vLy8vLy8vLy9cblxuICAvLyBTZWxlY3Rpb24gc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb248UiBleHRlbmRzIFJvdz4gPVxuICAgIHwge1xuICAgICAgICBtb2RlOiAnaW5jbHVkZSc7XG4gICAgICAgIGluY2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdleGNsdWRlJztcbiAgICAgICAgZXhjbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH07XG5cbiAgLy8gU2VsZWN0aW9uIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb25BY3Rpb248UiBleHRlbmRzIFJvdz4gPVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogU2VsZWN0aW9uPFI+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgICBpZDogUlsnaWQnXTtcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdwYWdlU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnYWxsU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIENvbWJpbmVkIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPFIgZXh0ZW5kcyBSb3csIEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBxdWVyeTogUXVlcnk8QywgRj47XG4gICAgbG9hZDogTG9hZDtcbiAgICByZXN1bHQ6IFJlc3VsdDxSPjtcbiAgICBkaXNwbGF5OiBEaXNwbGF5PEM+O1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uPFI+O1xuICB9O1xuXG4gIC8vIENvbWJpbmVkIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBBY3Rpb248UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID1cbiAgICB8IFF1ZXJ5QWN0aW9uPEMsIEY+XG4gICAgfCBEaXNwbGF5QWN0aW9uPEM+XG4gICAgfCBTZWxlY3Rpb25BY3Rpb248Uj47XG5cbiAgLy8gRnVsbCBzdGF0ZSAoY29yZSBzdGF0ZSBwbHVzIHB1cmUgZGVyaXZhdGlvbnMpIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPVxuICAgIHwgJ2FkdmFuY2VkJ1xuICAgIHwgJ2N1cnJlbmN5J1xuICAgIHwgJ2RhdGUnXG4gICAgfCAnaWNvbidcbiAgICB8ICdsb25nVGV4dCdcbiAgICB8ICdudW1iZXInXG4gICAgfCAnc2hvcnRUZXh0JztcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEZ1bGxSb3c8UiBleHRlbmRzIFJvdz4gPSBSICYge1xuICAgIHJvd0xpbms6IHN0cmluZyB8IG51bGw7XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIEZ1bGxDb2x1bW48QyBleHRlbmRzIENvbHVtbj4gPSBDb2x1bW5TZXR0aW5nczxDPiAmXG4gICAgQ29sdW1uTWV0YWRhdGEgJiB7XG4gICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgbGVmdDogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGFsaWdubWVudDogQ29sdW1uQWxpZ25tZW50O1xuICAgIH07XG4gIGV4cG9ydCB0eXBlIE11bHRpU2VsZWN0aW9uU3RhdGUgPSBib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGUnO1xuXG4gIGV4cG9ydCB0eXBlIENzdkNlbGxGb3JtYXR0ZXI8UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93OiBSLFxuICAgIGNvbHVtbjogRnVsbENvbHVtbjxDPixcbiAgKSA9PiBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIENzdlJvdyA9IHN0cmluZ1tdO1xuICBleHBvcnQgdHlwZSBDc3YgPSBDc3ZSb3dbXTtcbiAgZXhwb3J0IHR5cGUgQ3N2T3V0cHV0ID1cbiAgICB8IHsgbG9hZGluZzogdHJ1ZTsgZGF0YTogbnVsbCB9XG4gICAgfCB7IGxvYWRpbmc6IGZhbHNlOyBkYXRhOiBDc3YgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+ID0gQ29yZVN0YXRlPFIsIEMsIEY+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHByZXZpb3VzOiBudW1iZXIgfCBudWxsO1xuICAgICAgICBwYWdlczogbnVtYmVyW107XG4gICAgICAgIG5leHQ6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VDb3VudDogbnVtYmVyO1xuICAgICAgICBzaG93Q29udHJvbHM6IGJvb2xlYW47XG4gICAgICB9O1xuICAgIH07XG4gICAgcmVzdWx0OiB7XG4gICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICBjc3ZEYXRhOiAoKSA9PiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+O1xuICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICB9O1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIGNvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgICBzZWxlY3Rpb246IHtcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBzZWxlY3RlZENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZXIgaXMgd2hhdCBzZXRzIHVwIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB0cmFuc2xhdGVzIHVzZXIgYWN0aW9uc1xuICAgKiAobGlrZSBwYWdpbmF0aW9uIG9yIGZpbHRlciBjaGFuZ2VzLCBldGMuKSBpbnRvIG5ldyByb3cgZGF0YSBieSBjYWxsaW5nIHRoZVxuICAgKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCBhbHNvIGF1Z21lbnRzIHRoZSBjb3JlIHN0YXRlIHdpdGggYWRkaXRpb25hbCBkZXJpdmVkXG4gICAqIHN0YXRlLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPFIgZXh0ZW5kcyBSb3csIEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGPj47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+ID0ge1xuICAgIGluaXRpYWxTdGF0ZT86IERlZXBQYXJ0aWFsPENvcmVTdGF0ZTxSLCBDLCBGPj47XG4gICAgcm93TGluaz86IChyb3c6IFIpID0+IHN0cmluZztcbiAgICBjc3ZDZWxsRm9ybWF0dGVyPzogQ3N2Q2VsbEZvcm1hdHRlcjxSLCBDPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+KFxuICAgIHNvdXJjZTogU291cmNlPFIsIEMsIEY+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgLy8gU2V0IHVwIHRoZSBpbml0aWFsIHRhYmxlIHN0YXRlLlxuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEY+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7IGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogbnVsbCB9LFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogW10sXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogMCxcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBbXSxcbiAgICAgIH0sXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEY+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIC8vIFdpcmUgdXAgcmVkdWNlZCBzdGF0ZSBmcm9tIGFjdGlvbnMgYW5kIGluaXRpYWwgc3RhdGUuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRj4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8Q29yZVN0YXRlPFIsIEMsIEY+PiA9IGFjdGlvbnMucGlwZShcbiAgICAgIG1lcmdlU2NhbihcbiAgICAgICAgKHN0YXRlLCBhY3Rpb24pID0+IGZyb20ocmVkdWNlKHN0YXRlLCBhY3Rpb24sIGNvbHVtbnMsIHNvdXJjZSkpLFxuICAgICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUsXG4gICAgICAgIDEsXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEY+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+ICh7XG4gICAgICAgICAgLi4ucyxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4ucy5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwcmV2aW91czogZ2V0UHJldmlvdXNQYWdlKHMpLFxuICAgICAgICAgICAgICBwYWdlczogZ2V0UGFnZXMocyksXG4gICAgICAgICAgICAgIG5leHQ6IGdldE5leHRQYWdlKHMpLFxuICAgICAgICAgICAgICBwYWdlQ291bnQ6IGdldFBhZ2VDb3VudChzKSxcbiAgICAgICAgICAgICAgc2hvd0NvbnRyb2xzOiBnZXRTaG93UGFnaW5hdGlvbkNvbnRyb2xzKHMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgLi4ucy5yZXN1bHQsXG4gICAgICAgICAgICByb3dzOiBzLnJlc3VsdC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgICAgIHJvd0xpbms6IG9wdGlvbnM/LnJvd0xpbmsgPyBvcHRpb25zLnJvd0xpbmsocm93KSA6IG51bGwsXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBpc1Jvd1NlbGVjdGVkKHMsIHJvdy5pZCksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjc3ZEYXRhOiBhc3luYyBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgICAgICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBzLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29uc3QgZnVsbENvbHVtbnMgPSByZXNvbHZlQ29sdW1ucyhzLCBjb2x1bW5zKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW1xuICAgICAgICAgICAgICAgIGZ1bGxDb2x1bW5zLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLFxuICAgICAgICAgICAgICAgIC4uLmRhdGFTZXQuY3VycmVudFBhZ2VEYXRhLm1hcChyZWNvcmQgPT5cbiAgICAgICAgICAgICAgICAgIGZ1bGxDb2x1bW5zLm1hcChjb2x1bW4gPT4gY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjc3ZGaWxlbmFtZTpcbiAgICAgICAgICAgICAgKG9wdGlvbnM/LmNzdkZpbGVCYXNlbmFtZT8uc2xpY2UoMCwgMjAwKSA/PyBwbHVyYWxFbnRpdHlOYW1lKSArXG4gICAgICAgICAgICAgICcuY3N2JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLnMuZGlzcGxheSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVDb2x1bW5zKHMsIGNvbHVtbnMpLFxuICAgICAgICAgICAgemVyb1N0YXRlTWVzc2FnZTogZ2V0WmVyb1N0YXRlTWVzc2FnZShzLCBwbHVyYWxFbnRpdHlOYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgLi4ucy5zZWxlY3Rpb24sXG4gICAgICAgICAgICBpc0FsbFNlbGVjdGVkOiBpc0FsbFNlbGVjdGVkKHMpLFxuICAgICAgICAgICAgaXNDdXJyZW50UGFnZVNlbGVjdGVkOiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQocyksXG4gICAgICAgICAgICBzZWxlY3RlZENvdW50OiBzZWxlY3RlZENvdW50KHMpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBzdGF0ZS5jb25uZWN0KCk7XG5cbiAgICAvLyBMb2FkIGluaXRpYWwgdGFibGUgcm93IGRhdGEuXG4gICAgYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuXG4gICAgcmV0dXJuIHsgYWN0aW9ucywgc3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3N0IHRhYmxlcyB1c2UgcmVtb3RlIGJhY2tlbmRzIHRvIGZldGNoIGRhdGEgYXN5bmNocm9ub3VzbHksIGJ1dCBhblxuICAgKiBpbi1tZW1vcnkgc291cmNlIGlzIHVzZWZ1bCBmb3Igc21hbGwgZGF0YXNldHMsIHdoZW4gUml2VGFibGUgZmVhdHVyZXMgbGlrZVxuICAgKiBvcmRlcmluZyBhbmQgcGFnaW5hdGlvbiBhcmUgZGVzaXJlZC5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSIGV4dGVuZHMgUm93PiA9IE9taXQ8XG4gICAgQ29sdW1uTWV0YWRhdGEsXG4gICAgJ29yZGVyYWJsZSdcbiAgPiAmIHsgb3JkZXJLZXk/OiBrZXlvZiBSIH07XG5cbiAgZXhwb3J0IHR5cGUgSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4gPSBNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPiAmIHtcbiAgICBmdXNlT3B0aW9ucz86IElGdXNlT3B0aW9uczxSPjtcbiAgICBmaWx0ZXI/OiAoZmlsdGVyczogRiB8IG51bGwsIHJvdzogUikgPT4gYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5NZW1vcnlNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgPihcbiAgICBmZXRjaERhdGFzZXQ6ICgpID0+IFByb21pc2U8UltdPiB8IFJbXSxcbiAgICBjb2x1bW5zOiBNYXA8QywgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEY+IHtcbiAgICBsZXQgZGF0YTogUltdO1xuICAgIGxldCBmdXNlOiBGdXNlPFI+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8UiwgQywgRj4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIGlmIChtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCBvcHRpb25zPy5mdXNlT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBjb25zdCBvcmRlckNvbHVtbjoga2V5b2YgUiB8IHVuZGVmaW5lZCA9IHF1ZXJ5Lm9yZGVyXG4gICAgICAgID8gY29sdW1ucy5nZXQocXVlcnkub3JkZXIuY29sdW1uKT8ub3JkZXJLZXlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBvcmRlcmVkID0gcXVlcnkuc2VhcmNoXG4gICAgICAgID8gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKVxuICAgICAgICA6IHF1ZXJ5Lm9yZGVyICYmIG9yZGVyQ29sdW1uXG4gICAgICAgID8gb3JkZXJCeShkYXRhLCBvcmRlckNvbHVtbiwgcXVlcnkub3JkZXIuZGlyZWN0aW9uKVxuICAgICAgICA6IGRhdGE7XG4gICAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5maWx0ZXI7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlclxuICAgICAgICA/IG9yZGVyZWQuZmlsdGVyKHJvdyA9PiBmaWx0ZXIocXVlcnkuZmlsdGVycywgcm93KSlcbiAgICAgICAgOiBvcmRlcmVkO1xuICAgICAgY29uc3Qgc3RhcnRJZHggPSBxdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplICogcXVlcnkucGFnaW5hdGlvbi5wYWdlO1xuICAgICAgY29uc3QgZW5kSWR4ID0gc3RhcnRJZHggKyBxdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgICAgY29uc3QgcGFnaW5hdGVkID0gZmlsdGVyZWQuc2xpY2Uoc3RhcnRJZHgsIGVuZElkeCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50UGFnZURhdGE6IHBhZ2luYXRlZCxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBmaWx0ZXJlZC5sZW5ndGgsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY29sdW1uTWV0YWRhdGE6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4gPSBuZXcgTWFwKFxuICAgICAgWy4uLmNvbHVtbnMuZW50cmllcygpXS5tYXAoKFtuYW1lLCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAgbmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIG9yZGVyYWJsZTogISFtZXRhZGF0YS5vcmRlcktleSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogbWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbWluV2lkdGg6IG1ldGFkYXRhLm1pbldpZHRoLFxuICAgICAgICAgIGRhdGFUeXBlOiBtZXRhZGF0YS5kYXRhVHlwZSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgcmV0dXJuIGNyZWF0ZU1hbmFnZXIoc291cmNlLCBjb2x1bW5NZXRhZGF0YSwgcGx1cmFsRW50aXR5TmFtZSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGFnZUNvdW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heChcbiAgICBNYXRoLmNlaWwoXG4gICAgICBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50IC8gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICApLFxuICAgIDEsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4pOiBudW1iZXIgfCBudWxsIHtcbiAgcmV0dXJuIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSA9PT0gMFxuICAgID8gbnVsbFxuICAgIDogc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlIC0gMTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFnZXM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+KTogbnVtYmVyW10ge1xuICBjb25zdCBwYWRkaW5nID0gNDtcbiAgY29uc3QgbWluID0gMDtcbiAgY29uc3QgbWF4ID0gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDE7XG4gIGNvbnN0IGRlc2lyZWRTdGFydCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAtIHBhZGRpbmc7XG4gIGNvbnN0IGNsYW1wZWRTdGFydCA9IE1hdGgubWF4KG1pbiwgZGVzaXJlZFN0YXJ0KTtcbiAgY29uc3QgZGVzaXJlZEVuZCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIHBhZGRpbmc7XG4gIGNvbnN0IGNsYW1wZWRFbmQgPSBNYXRoLm1pbihtYXgsIGRlc2lyZWRFbmQpO1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KG1pbiwgY2xhbXBlZFN0YXJ0IC0gKGRlc2lyZWRFbmQgLSBjbGFtcGVkRW5kKSk7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKG1heCwgY2xhbXBlZEVuZCArIChjbGFtcGVkU3RhcnQgLSBkZXNpcmVkU3RhcnQpKTtcbiAgcmV0dXJuIHJhbmdlKHN0YXJ0LCBlbmQgKyAxKTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dFBhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+KTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IG1heCA9IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxO1xuICBjb25zdCBuZXh0ID0gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlICsgMTtcbiAgcmV0dXJuIG5leHQgPD0gbWF4ID8gbmV4dCA6IG51bGw7XG59XG5cbi8vIFdlIGRvbid0IHdhbnQgdG8gc2hvdyB0aGUgcGFnaW5hdGlvbiBjb250cm9scyB3aGVuIHRoZXkgYXJlIHVubmVjZXNzYXJ5LlxuZnVuY3Rpb24gZ2V0U2hvd1BhZ2luYXRpb25Db250cm9sczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4pOiBib29sZWFuIHtcbiAgY29uc3Qgc21hbGxlc3RQYWdlU2l6ZSA9IE1hdGgubWluKC4uLlsuLi5SaXZUYWJsZS5wYWdlU2l6ZXNdKTtcbiAgcmV0dXJuIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiBzbWFsbGVzdFBhZ2VTaXplO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4pOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdIHtcbiAgLy8gSWYgdGhlIHRhYmxlIG9mZmVycyBtb3JlIGNvbHVtbnMgdGhhbiB0aGUgdXNlciBoYXMgY29uZmlndXJhdGlvbiBzZXR0aW5nc1xuICAvLyBmb3IgKG9yIGlmIHRoZSB1c2VyIGhhcyBubyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHlldCksIHdlJ2xsIGFwcGVuZCB0aGVtXG4gIC8vIHRvIHRoZSBlbmQuIFRoaXMgZW5zdXJlcyB0aGF0IG5ldyBjb2x1bW5zIHdlIGFkZCB0byBleGlzdGluZyB0YWJsZXMgb3ZlclxuICAvLyB0aW1lICgxKSBnZXQgZGlzcGxheWVkIGV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3QgYXBwZWFyIGluIHRoZSB1c2VyJ3NcbiAgLy8gY29uZmlndXJhdGlvbiBzZXR0aW5ncyB5ZXQsIGFuZCAoMikgZG9uJ3QgaW50ZXJydXB0IHRoZWlyIGV4aXN0aW5nIHNldHVwLlxuICBjb25zdCBjb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MgPSBkaWZmZXJlbmNlKFxuICAgIFsuLi5zdXBwb3J0ZWRDb2x1bW5zLmtleXMoKV0sXG4gICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKSxcbiAgKTtcblxuICAvLyBUaHJvdyBvdXQgc2V0dGluZ3MgZm9yIGNvbHVtbnMgbm8gbG9uZ2VyIG9mZmVyZWQgYnkgdGhlIHRhYmxlLlxuICBjb25zdCBjb2x1bW5zV2l0aFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9XG4gICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5maWx0ZXIoKHsgbmFtZSB9KSA9PlxuICAgICAgc3VwcG9ydGVkQ29sdW1ucy5oYXMobmFtZSksXG4gICAgKTtcblxuICBjb25zdCBjb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9IFtcbiAgICAuLi5jb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MsXG4gIF0ubWFwKChuYW1lOiBDKSA9PiAoe1xuICAgIG5hbWUsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBwcmVmZXJyZWRXaWR0aDogJ2F1dG8nLFxuICAgIHBpbm5lZDogZmFsc2UsXG4gIH0pKTtcblxuICByZXR1cm4gWy4uLmNvbHVtbnNXaXRoVXNlclNldHRpbmdzLCAuLi5jb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nc107XG59XG5cbmZ1bmN0aW9uIGdldEFsaWdubWVudChcbiAgbWV0YWRhdGE6IFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhLFxuICBpbmRleDogbnVtYmVyLFxuKTogUml2VGFibGUuQ29sdW1uQWxpZ25tZW50IHtcbiAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gJ2xlZnQnO1xuICBzd2l0Y2ggKG1ldGFkYXRhLmRhdGFUeXBlKSB7XG4gICAgY2FzZSAnZGF0ZSc6XG4gICAgY2FzZSAnbG9uZ1RleHQnOlxuICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICBjYXNlICdhZHZhbmNlZCc6XG4gICAgY2FzZSAnaWNvbic6XG4gICAgY2FzZSAnc2hvcnRUZXh0JzpcbiAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4pOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgc3VwcG9ydGVkQ29sdW1ucyk7XG4gIHJldHVybiBhbGxDb2x1bW5zXG4gICAgLmZpbHRlcigoeyBlbmFibGVkIH0pID0+IGVuYWJsZWQpXG4gICAgLnJlZHVjZShcbiAgICAgIChcbiAgICAgICAgZnVsbENvbHVtbnM6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSxcbiAgICAgICAgc2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LFxuICAgICAgICBpOiBudW1iZXIsXG4gICAgICApOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10gPT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHN1cHBvcnRlZENvbHVtbnMuZ2V0KHNldHRpbmdzLm5hbWUpITtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRXaWR0aCA9XG4gICAgICAgICAgc2V0dGluZ3MucHJlZmVycmVkV2lkdGggPT09ICdhdXRvJ1xuICAgICAgICAgICAgPyBtZXRhZGF0YS5taW5XaWR0aFxuICAgICAgICAgICAgOiBNYXRoLm1heChtZXRhZGF0YS5taW5XaWR0aCwgc2V0dGluZ3MucHJlZmVycmVkV2lkdGgpO1xuICAgICAgICBjb25zdCBwcmV2aW91c0NvbHVtbjogUml2VGFibGUuRnVsbENvbHVtbjxDPiB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgZnVsbENvbHVtbnNbaSAtIDFdO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLmZ1bGxDb2x1bW5zLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICAgICAgICB3aWR0aDogcmVzb2x2ZWRXaWR0aCxcbiAgICAgICAgICAgIGxlZnQ6IHNldHRpbmdzLnBpbm5lZFxuICAgICAgICAgICAgICA/IHByZXZpb3VzQ29sdW1uXG4gICAgICAgICAgICAgICAgPyAocHJldmlvdXNDb2x1bW4ubGVmdCB8fCAwKSArIHByZXZpb3VzQ29sdW1uLndpZHRoXG4gICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGFsaWdubWVudDogZ2V0QWxpZ25tZW50KG1ldGFkYXRhLCBpKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFtdLFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFplcm9TdGF0ZU1lc3NhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+LCBlbnRpdHk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA+IDApIHJldHVybiBudWxsO1xuICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoKVxuICAgIHJldHVybiBgTm8gJHtlbnRpdHl9IG1hdGNoIHlvdXIgY3VycmVudCBzZWFyY2gga2V5d29yZC5gO1xuICBpZiAoc3RhdGUucXVlcnkuZmlsdGVycykgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IGZpbHRlcnMuYDtcbiAgcmV0dXJuIGBObyAke2VudGl0eX0uYDtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uUGluPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbjogQyxcbiAgcGlubmVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJCeShcbiAgICAgICAgYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgcGlubmVkOiBjLm5hbWUgPT09IGNvbHVtbiA/IHBpbm5lZCA6IGMucGlubmVkLFxuICAgICAgICB9KSksXG4gICAgICAgIHYgPT4gKHYucGlubmVkID8gMSA6IDApLFxuICAgICAgICAnZGVzYycsXG4gICAgICApLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbk9yZGVyPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcixcbiAgbmV3SW5kZXg6IG51bWJlcixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zKTtcblxuICAvLyBGaXJzdCwgcHV0IHRoZSBjb2x1bW5zIGluIHRoZSBkZXNpcmVkIG9yZGVyLlxuICBjb25zdCBpdGVtID0gYWxsQ29sdW1uc1twcmV2aW91c0luZGV4XTtcbiAgY29uc3Qgd2l0aG91dEl0ZW0gPSBhbGxDb2x1bW5zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gcHJldmlvdXNJbmRleCk7XG4gIGNvbnN0IHJlb3JkZXJlZCA9IFtcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZSgwLCBuZXdJbmRleCksXG4gICAgaXRlbSxcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZShuZXdJbmRleCksXG4gIF07XG5cbiAgLy8gVGhlbiwgd2UgbWF5IG5lZWQgdG8gZml4IHRoZSBwaW5zIChhbGwgcGlubmVkIGNvbHVtbnMgYXBwZWFyIGF0IHRoZVxuICAvLyBiZWdpbm5pbmcgb2YgdGhlIGNvbHVtbnMgYXJyYXkpIHNpbmNlIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZHJhZ1xuICAvLyBhbmQgZHJvcCBjb2x1bW5zIHRvIGFuZCBmcm9tIHRoZSBwaW5uZWQgYXJlYS4gSWYgdGhlIHVzZXIgZHJhZ3MgYVxuICAvLyBjb2x1bW4gYWNyb3NzIHRoYXQgdGhyZXNob2xkLCB1cGRhdGUgaXRzIHBpbm5lZCBzdGF0dXMuXG4gIGNvbnN0IHVwZGF0ZWQgPSByZW9yZGVyZWQubWFwKChzZXR0aW5ncywgaSwgYXJyKSA9PiB7XG4gICAgaWYgKG5ld0luZGV4ID09PSBpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgcGlubmVkOiBzZXR0aW5ncy5waW5uZWRcbiAgICAgICAgICA/IGFycltpIC0gMV0/LnBpbm5lZCA/PyB0cnVlXG4gICAgICAgICAgOiBhcnJbaSArIDFdPy5waW5uZWQgPz8gZmFsc2UsXG4gICAgICB9O1xuICAgIH0gZWxzZSByZXR1cm4gc2V0dGluZ3M7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiB1cGRhdGVkLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbkVuYWJsZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uOiBDLFxuICBlbmFibGVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAuLi5jLFxuICAgICAgICBlbmFibGVkOiBjLm5hbWUgPT09IGNvbHVtbiA/IGVuYWJsZWQgOiBjLmVuYWJsZWQsXG4gICAgICB9KSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uV2lkdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uOiBDLFxuICBwcmVmZXJyZWRXaWR0aDogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bJ3ByZWZlcnJlZFdpZHRoJ10sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgIC4uLmMsXG4gICAgICAgIHByZWZlcnJlZFdpZHRoOiBjLm5hbWUgPT09IGNvbHVtbiA/IHByZWZlcnJlZFdpZHRoIDogYy5wcmVmZXJyZWRXaWR0aCxcbiAgICAgIH0pKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1Jvd1NlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPiwgaWQ6IFJbJ2lkJ10pOiBib29sZWFuIHtcbiAgc3dpdGNoIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSkge1xuICAgIGNhc2UgJ2luY2x1ZGUnOlxuICAgICAgcmV0dXJuIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5oYXMoaWQpO1xuICAgIGNhc2UgJ2V4Y2x1ZGUnOlxuICAgICAgcmV0dXJuICFzdGF0ZS5zZWxlY3Rpb24uZXhjbHVkZWQuaGFzKGlkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FsbFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICBpZiAoXG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnZXhjbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplID09PSAwKSB8fFxuICAgIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSA9PT0gJ2luY2x1ZGUnICYmXG4gICAgICBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZSA9PT0gc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudClcbiAgKVxuICAgIHJldHVybiB0cnVlO1xuICBpZiAoXG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnZXhjbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplID09PSBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50KSB8fFxuICAgIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSA9PT0gJ2luY2x1ZGUnICYmIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5zaXplID09PSAwKVxuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xufVxuXG5mdW5jdGlvbiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+KTogUml2VGFibGUuTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHNlbGVjdGVkU3RhdGVzID0gc3RhdGUucmVzdWx0LmN1cnJlbnRQYWdlRGF0YS5tYXAoKHsgaWQgfSkgPT5cbiAgICBpc1Jvd1NlbGVjdGVkKHN0YXRlLCBpZCksXG4gICk7XG4gIGlmIChzZWxlY3RlZFN0YXRlcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHNlbGVjdGVkU3RhdGVzLmV2ZXJ5KHYgPT4gdikpIHJldHVybiB0cnVlO1xuICAgIGlmIChzZWxlY3RlZFN0YXRlcy5zb21lKHYgPT4gdikpIHJldHVybiAnaW5kZXRlcm1pbmF0ZSc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RlZENvdW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPik6IG51bWJlciB7XG4gIHN3aXRjaCAoc3RhdGUuc2VsZWN0aW9uLm1vZGUpIHtcbiAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZTtcbiAgICBjYXNlICdleGNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50IC0gc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZnJlc2hSZXN1bHRXaXRoPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIHNvdXJjZTogUml2VGFibGUuU291cmNlPFIsIEMsIEY+LFxuICBtb3N0UmVjZW50QWN0aW9uOiBSaXZUYWJsZS5BY3Rpb248UiwgQywgRj4sXG4pOiBBc3luY0dlbmVyYXRvcjxSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4+IHtcbiAgeWllbGQge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWQ6IHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICB9LFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNvdXJjZShzdGF0ZS5xdWVyeSwgbW9zdFJlY2VudEFjdGlvbik7XG4gICAgeWllbGQge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgICByZXN1bHQsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB5aWVsZCB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWQ6IHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJvd1NlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4sXG4gIGlkOiBSWydpZCddLFxuICBzZWxlY3RlZDogYm9vbGVhbixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0aW9uOlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBzZWxlY3RlZFxuICAgICAgICAgICAgICA/IG5ldyBTZXQoWy4uLnN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZCwgaWRdKVxuICAgICAgICAgICAgICA6IG5ldyBTZXQoWy4uLnN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZF0uZmlsdGVyKHMgPT4gcyAhPT0gaWQpKSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnLFxuICAgICAgICAgICAgZXhjbHVkZWQ6IHNlbGVjdGVkXG4gICAgICAgICAgICAgID8gbmV3IFNldChbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkXS5maWx0ZXIocyA9PiBzICE9PSBpZCkpXG4gICAgICAgICAgICAgIDogbmV3IFNldChbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLCBpZF0pLFxuICAgICAgICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZVBhZ2VTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4ge1xuICBjb25zdCBpc1BhZ2VGdWxseVNlbGVjdGVkID0gc3RhdGUucmVzdWx0LmN1cnJlbnRQYWdlRGF0YS5ldmVyeSgoeyBpZCB9KSA9PlxuICAgIGlzUm93U2VsZWN0ZWQoc3RhdGUsIGlkKSxcbiAgKTtcbiAgcmV0dXJuIHN0YXRlLnJlc3VsdC5jdXJyZW50UGFnZURhdGEucmVkdWNlKChhY2N1bXVsYXRlZFN0YXRlLCByb3cpID0+IHtcbiAgICByZXR1cm4gc2V0Um93U2VsZWN0ZWQoYWNjdW11bGF0ZWRTdGF0ZSwgcm93LmlkLCAhaXNQYWdlRnVsbHlTZWxlY3RlZCk7XG4gIH0sIHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQWxsU2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+KTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+IHtcbiAgaWYgKGlzQWxsU2VsZWN0ZWQoc3RhdGUpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnLFxuICAgICAgICBleGNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNvbHVtbk9yZGVyPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGPiwgY29sdW1uOiBDKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+IHtcbiAgaWYgKHN0YXRlLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICBvcmRlcjpcbiAgICAgICAgICBzdGF0ZS5xdWVyeS5vcmRlci5kaXJlY3Rpb24gPT09ICdhc2MnXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnZGVzYycsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHF1ZXJ5OiB7XG4gICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgZGlyZWN0aW9uOiAnYXNjJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZHVjZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEY+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRj4sXG4pOiBBc3luY0dlbmVyYXRvcjxSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRj4+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKHN0YXRlLCBzb3VyY2UsIGFjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcmRlckNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBvcmRlcjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnb3JkZXJDb2x1bW5Ub2dnbGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB0b2dnbGVDb2x1bW5PcmRlcihzdGF0ZSwgYWN0aW9uLmNvbHVtbiksXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlYXJjaENoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBzZWFyY2g6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncHJldmlvdXNQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBnZXRQcmV2aW91c1BhZ2Uoc3RhdGUpID8/IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25leHRQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBnZXROZXh0UGFnZShzdGF0ZSkgPz8gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBhY3Rpb24ucGFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNpemVDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlU2l6ZTogYWN0aW9uLnNpemUsXG4gICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbHRlcnNDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZmlsdGVyczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgY29sdW1uU2V0dGluZ3M6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblBpbkNoYW5nZSc6XG4gICAgICB5aWVsZCBjaGFuZ2VDb2x1bW5QaW4oc3RhdGUsIGNvbHVtbnMsIGFjdGlvbi5jb2x1bW4sIGFjdGlvbi5waW5uZWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBhY3Rpb24ucHJldmlvdXNJbmRleCxcbiAgICAgICAgYWN0aW9uLm5ld0luZGV4LFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uRW5hYmxlZChzdGF0ZSwgY29sdW1ucywgYWN0aW9uLmNvbHVtbiwgYWN0aW9uLmVuYWJsZWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uV2lkdGgoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICBhY3Rpb24ucHJlZmVycmVkV2lkdGgsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncm93U2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgc2V0Um93U2VsZWN0ZWQoc3RhdGUsIGFjdGlvbi5pZCwgYWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB0b2dnbGVQYWdlU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWxsU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgdG9nZ2xlQWxsU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -82,10 +82,10 @@ export class TableComponent {
|
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
85
|
-
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "riv-table", inputs: { manager: "manager" }, queries: [{ propertyName: "cellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "menuTemplate", first: true, predicate: ["menu"], descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"selectionTemplate\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isCurrentPageSelected === true\"\n [indeterminate]=\"\n s.selection.isCurrentPageSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'pageSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td *ngIf=\"selectionTemplate\" class=\"selection-body\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"\n manager?.actions?.next({\n type: 'rowSelectedChange',\n id: row.id,\n selected: $event\n })\n \"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"\n column.dataType === 'advanced'\n ? $event.preventDefault()\n : null\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <a *ngIf=\"row.rowLink; let href\" [href]=\"href\" class=\"row-link\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n …\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n …\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: i3.CalloutDirective, selector: "[riv-callout]" }, { kind: "component", type: i4.CheckboxComponent, selector: "riv-checkbox", inputs: ["name", "identifier", "value", "checkboxTooltip", "indeterminate", "disabled", "required"], outputs: ["valueChange"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "errorMessage"] }, { kind: "component", type: i7.SingleSelectComponent, selector: "riv-single-select", inputs: ["groups", "selectedOption", "filterabilityOptions", "loading", "locked", "maxCalloutHeight", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "directive", type: i8.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i9.TableHeaderResizeHandleComponent, selector: "table-header-resize-handle", outputs: ["dragResize"] }, { kind: "component", type: i10.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
85
|
+
TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "riv-table", inputs: { manager: "manager" }, queries: [{ propertyName: "cellTemplate", first: true, predicate: ["cell"], descendants: true }, { propertyName: "menuTemplate", first: true, predicate: ["menu"], descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: ["selection"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"selectionTemplate\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isCurrentPageSelected === true\"\n [indeterminate]=\"\n s.selection.isCurrentPageSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'pageSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td *ngIf=\"selectionTemplate\" class=\"selection-body\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"\n manager?.actions?.next({\n type: 'rowSelectedChange',\n id: row.id,\n selected: $event\n })\n \"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"\n column.dataType === 'advanced'\n ? $event.preventDefault()\n : null\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <a *ngIf=\"row.rowLink; let href\" [href]=\"href\" class=\"row-link\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n …\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n …\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: i3.CalloutDirective, selector: "[riv-callout]" }, { kind: "component", type: i4.CheckboxComponent, selector: "riv-checkbox", inputs: ["name", "identifier", "value", "checkboxTooltip", "indeterminate", "disabled", "required"], outputs: ["valueChange"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "errorMessage"] }, { kind: "component", type: i7.SingleSelectComponent, selector: "riv-single-select", inputs: ["groups", "selectedOption", "filterabilityOptions", "loading", "locked", "maxCalloutHeight", "noOptionsMessage", "nodeTemplate", "triggerTemplate", "placeholder", "disabled"], outputs: ["filterQueryChange", "selectedOptionChange"] }, { kind: "directive", type: i8.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i9.TableHeaderResizeHandleComponent, selector: "table-header-resize-handle", outputs: ["dragResize"] }, { kind: "component", type: i10.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
86
86
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, decorators: [{
|
|
87
87
|
type: Component,
|
|
88
|
-
args: [{ selector: 'riv-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"selectionTemplate\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isCurrentPageSelected === true\"\n [indeterminate]=\"\n s.selection.isCurrentPageSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'pageSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td *ngIf=\"selectionTemplate\" class=\"selection-body\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"\n manager?.actions?.next({\n type: 'rowSelectedChange',\n id: row.id,\n selected: $event\n })\n \"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"\n column.dataType === 'advanced'\n ? $event.preventDefault()\n : null\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <a *ngIf=\"row.rowLink; let href\" [href]=\"href\" class=\"row-link\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n …\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n …\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\n"] }]
|
|
88
|
+
args: [{ selector: 'riv-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-callout\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <riv-loading-cover\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div class=\"container\" (rivClientSize)=\"containerSize.next($event)\">\n <table>\n <thead>\n <tr>\n <th *ngIf=\"selectionTemplate\" class=\"selection-head\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [value]=\"s.selection.isCurrentPageSelected === true\"\n [indeterminate]=\"\n s.selection.isCurrentPageSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'pageSelectedChange' })\n \"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n draggable=\"true\"\n droppable=\"true\"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <div\n *ngIf=\"!column.orderable\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ column.name }}\n </div>\n <button\n *ngIf=\"column.orderable\"\n type=\"button\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.name\"\n (click)=\"\n manager?.actions?.next({\n type: 'orderColumnToggle',\n column: column.name\n })\n \"\n >\n {{ column.name }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.column === column.name &&\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </button>\n <table-header-resize-handle\n (dragResize)=\"setWidth(column.name, $event)\"\n ></table-header-resize-handle>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\"></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\">\n <ng-container\n *ngFor=\"let row of s.result.rows; trackBy: trackByRow\"\n >\n <ng-template #rowBody>\n <td *ngIf=\"selectionTemplate\" class=\"selection-body\">\n <div class=\"checkbox-wrapper\">\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"\n manager?.actions?.next({\n type: 'rowSelectedChange',\n id: row.id,\n selected: $event\n })\n \"\n ></riv-checkbox>\n </div>\n </td>\n <td\n *ngFor=\"let column of s.display.columns\"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"\n column.dataType === 'advanced'\n ? $event.preventDefault()\n : null\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </td>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"$event.preventDefault()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n <a *ngIf=\"row.rowLink; let href\" [href]=\"href\" class=\"row-link\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </a>\n <tr *ngIf=\"!row.rowLink\">\n <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n </tr>\n </ng-container>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n Results per page:\n <riv-single-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event.value\n })\n \"\n [groups]=\"pageSizeOptions\"\n ></riv-single-select>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination-controls\">\n <button\n class=\"paginate previous\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowLeft'\" [size]=\"16\"></riv-icon>\n </button>\n <span *ngIf=\"s.query.pagination.pages[0] > 0\" class=\"truncated-pages\">\n …\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages\"\n >\n …\n </span>\n <button\n class=\"paginate next\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n >\n <riv-icon [name]=\"'ArrowRight'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n </div>\n </riv-loading-cover>\n</ng-container>\n", styles: [":host{display:flex;min-height:0}riv-loading-cover{width:100%;display:grid;grid-template-rows:1fr auto;gap:var(--size-small)}.container{border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-medium);box-shadow:0 0 calc(var(--base-grid-size) / 4) #0000000a,0 0 calc(var(--base-grid-size) / 2) #0000000f,0 var(--base-grid-size) calc(var(--base-grid-size) * 2) #0000000a;overflow:auto}table{border-collapse:separate;width:100%;table-layout:fixed}thead{position:sticky;top:0;z-index:var(--above-scroll-z-index)}th{border-bottom:var(--border-width) solid var(--border-light);background-color:var(--surface-light-1);position:relative}th:not(:last-child){border-right:var(--border-width) solid var(--border-light)}th.pinned{position:sticky;z-index:1}th.dragged-over-left:before,th.dragged-over-right:before{content:\"\";position:absolute;top:0;bottom:0;width:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}th.dragged-over-left:before{left:0}th.dragged-over-right:before{right:0}th.selection-head{width:var(--size-xxlarge);position:sticky;z-index:1;left:0;vertical-align:middle}.checkbox-wrapper{display:flex;justify-content:center;align-items:center}th.menu-head{width:var(--size-xxlarge);position:sticky;z-index:1;right:0}.header-wrapper{font-size:calc(var(--base-grid-size) * 2.75);font-weight:var(--font-weight-heavy);line-height:1;text-transform:uppercase;letter-spacing:calc(var(--base-grid-size) / 4);padding:var(--size-xsmall) var(--size-small);display:inline-flex;align-items:center;justify-content:center;width:100%;height:calc(var(--base-grid-size) * 8);white-space:nowrap}.header-wrapper.left{justify-content:flex-start}.header-wrapper.right{justify-content:flex-end}button.header-wrapper{transition:background-color var(--medium-transition);cursor:pointer}button.header-wrapper:hover{background-color:var(--black-20)}button.header-wrapper .icon-container{overflow:hidden;display:inline-block;width:0;height:1em;opacity:0;padding-left:0;transition:width var(--medium-transition),opacity var(--medium-transition),color var(--medium-transition),padding-left var(--medium-transition)}button.header-wrapper:hover .icon-container,button.header-wrapper.active .icon-container{width:calc(var(--base-grid-size) * 3.5);padding-left:var(--size-xsmall);opacity:1}button.header-wrapper:hover .icon-container{color:var(--type-light-low-contrast)}button.header-wrapper.active .icon-container{color:var(--brand)}a.row-link{display:table-row;text-decoration:none;color:inherit}td{border-bottom:var(--border-width) solid var(--border-light);height:calc(var(--base-grid-size) * 8);padding:var(--size-xxsmall) var(--size-small);font:var(--body-small);vertical-align:middle;text-align:center;background-color:var(--surface-light-0)}td.pinned{position:sticky;z-index:1}td.advanced,td.selection-body,td.menu-body{padding:0;vertical-align:middle}td.menu-body{position:sticky;z-index:1;right:0}.pagination{display:flex;justify-content:space-between}.page-size-controls,.pagination-controls{display:flex;align-items:center}.page-size-controls riv-single-select{margin-left:var(--size-small)}.paginate,.page{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:var(--size-xlarge);height:var(--size-xlarge);padding:var(--size-xxsmall);font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0)}.paginate{border:var(--border-width) solid var(--border-light-blend);border-radius:var(--border-radius-small);color:var(--brand);&:disabled{color:var(--type-light-disabled)}&.previous{margin-right:var(--size-small)}&.next{margin-left:var(--size-small)}}.page{color:var(--brand);&:disabled{background-color:var(--surface-light-2)}}.truncated-pages{color:var(--type-light-disabled)}\n"] }]
|
|
89
89
|
}], propDecorators: { manager: [{
|
|
90
90
|
type: Input
|
|
91
91
|
}], cellTemplate: [{
|
|
@@ -98,4 +98,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
98
98
|
type: ContentChild,
|
|
99
99
|
args: ['selection']
|
|
100
100
|
}] } });
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7QUFjcEMsTUFBTSxPQUFPLGNBQWM7SUFOM0I7UUEwQlcsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3ZDLDZCQUF3QixHQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3pELENBQUM7UUFFSyxvQkFBZSxHQUN0QjtZQUNFO2dCQUNFLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUN2QixLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRTtvQkFDMUIsS0FBSyxFQUFFLFFBQVE7aUJBQ2hCLENBQUMsQ0FBQzthQUNKO1NBQ0YsQ0FBQztRQUVLLGVBQVUsR0FBeUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDckUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUVRLG9CQUFlLEdBQW1CLElBQUksR0FBRyxFQUFFLENBQUM7UUF3QjdELHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMseUJBQW9CLEdBQWtCLElBQUksQ0FBQztLQTJCNUM7SUFuREMsUUFBUSxDQUFDLE1BQVMsRUFBRSxLQUFvQjtRQUN0QyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDbEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDekIsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsTUFBTTtvQkFDTixjQUFjLEVBQUUsY0FBYztpQkFDL0IsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUNELFFBQVEsQ0FBQyxNQUE4QjtRQUNyQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxRTthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUtELFNBQVMsQ0FBQyxHQUFXO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFlO1FBQ2xCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNwQyxRQUFRLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxDQUFVO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEtBQUs7WUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUk7WUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7WUFDeEQsT0FBTyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDOzsyR0EzRlUsY0FBYzsrRkFBZCxjQUFjLDJXQ3hCM0IsaXdSQTRPQTsyRkRwTmEsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU07OEJBUS9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixZQUFZO3NCQURYLFlBQVk7dUJBQUMsTUFBTTtnQkFPcEIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLE1BQU07Z0JBSXBCLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFRyYWNrQnlGdW5jdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNpbmdsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L3NpbmdsZS1zZWxlY3Qvc2luZ2xlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbnR5cGUgUGFnZVNpemVPcHRpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+IHtcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlRhYmxlLk1hbmFnZXI8UiwgQywgRj47XG5cbiAgQENvbnRlbnRDaGlsZCgnY2VsbCcpXG4gIGNlbGxUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICByb3c6IFJpdlRhYmxlLkZ1bGxSb3c8Uj47XG4gICAgY29sdW1uOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+O1xuICB9PjtcblxuICBAQ29udGVudENoaWxkKCdtZW51JylcbiAgbWVudVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyByb3c6IFJpdlRhYmxlLkZ1bGxSb3c8Uj4gfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnc2VsZWN0aW9uJylcbiAgc2VsZWN0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IHN0YXRlOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRj4gfT47XG5cbiAgcmVhZG9ubHkgY29udGFpbmVyU2l6ZSA9IG5ldyBTdWJqZWN0PERPTVJlY3Q+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNhbGxvdXRQb3NpdGlvbjogT2JzZXJ2YWJsZTxET01SZWN0PiA9XG4gICAgdGhpcy5jb250YWluZXJTaXplLnBpcGUoXG4gICAgICBtYXAocmVjdCA9PiBuZXcgRE9NUmVjdChyZWN0LnggKyA0NCwgcmVjdC55IC0gMTIsIDAsIDApKSxcbiAgICApO1xuXG4gIHJlYWRvbmx5IHBhZ2VTaXplT3B0aW9uczogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbkdyb3VwPFBhZ2VTaXplT3B0aW9uPltdID1cbiAgICBbXG4gICAgICB7XG4gICAgICAgIG9wdGlvbnM6IFJpdlRhYmxlLnBhZ2VTaXplcy5tYXAocGFnZVNpemUgPT4gKHtcbiAgICAgICAgICBpZDogcGFnZVNpemUudG9TdHJpbmcoKSxcbiAgICAgICAgICB0aXRsZTogcGFnZVNpemUudG9TdHJpbmcoKSxcbiAgICAgICAgICB2YWx1ZTogcGFnZVNpemUsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICByZWFkb25seSB0cmFja0J5Um93OiBUcmFja0J5RnVuY3Rpb248Uml2VGFibGUuRnVsbFJvdzxSPj4gPSAoXywgcm93KSA9PlxuICAgIHJvdy5pZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRlbXBvcmFyeVdpZHRoczogTWFwPEMsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gIHNldFdpZHRoKGNvbHVtbjogQywgd2lkdGg6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAod2lkdGggPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlbXBvcmFyeVdpZHRoID0gdGhpcy50ZW1wb3JhcnlXaWR0aHMuZ2V0KGNvbHVtbik7XG4gICAgICBpZiAodGVtcG9yYXJ5V2lkdGgpIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICAgIHR5cGU6ICdjb2x1bW5XaWR0aENoYW5nZScsXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHByZWZlcnJlZFdpZHRoOiB0ZW1wb3JhcnlXaWR0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRlbXBvcmFyeVdpZHRocy5kZWxldGUoY29sdW1uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZW1wb3JhcnlXaWR0aHMuc2V0KGNvbHVtbiwgd2lkdGgpO1xuICAgIH1cbiAgfVxuICBnZXRXaWR0aChjb2x1bW46IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz4pOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnRlbXBvcmFyeVdpZHRocy5oYXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy50ZW1wb3JhcnlXaWR0aHMuZ2V0KGNvbHVtbi5uYW1lKSEsIGNvbHVtbi5taW5XaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjb2x1bW4ud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgZHJhZ2dlZENvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGRyYWdnZWRPdmVyQ29sdW1uSWR4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBkcmFnU3RhcnQoaWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLmRyYWdnZWRDb2x1bW5JZHggPSBpZHg7XG4gIH1cblxuICBkcmFnT3ZlcihvbnRvSWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gb250b0lkeDtcbiAgfVxuXG4gIGRyb3Aob250b0lkeDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnLFxuICAgICAgICBwcmV2aW91c0luZGV4OiB0aGlzLmRyYWdnZWRDb2x1bW5JZHgsXG4gICAgICAgIG5ld0luZGV4OiBvbnRvSWR4LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGUubWVzc2FnZTtcbiAgICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSByZXR1cm4gZTtcbiAgICBpZiAodHlwZW9mIGUgPT09ICdvYmplY3QnICYmIGUgIT09IG51bGwpIHJldHVybiBlLnRvU3RyaW5nKCk7XG4gICAgZWxzZSByZXR1cm4gJ0FuIGVycm9yIG9jY3VycmVkLic7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uQ2FsbG91dFBvc2l0aW9uIHwgYXN5bmM7IGxldCBwb3NpdGlvblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzLnNlbGVjdGlvbi5zZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3Rpb25UZW1wbGF0ZVwiPlxuICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICpyaXYtY2FsbG91dFxuICAgICAgICBbYW5jaG9yXT1cInBvc2l0aW9uXCJcbiAgICAgICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ3RvcC1yaWdodCdcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3Rpb25UZW1wbGF0ZTsgY29udGV4dDogeyBzdGF0ZTogcyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxyaXYtbG9hZGluZy1jb3ZlclxuICAgIFtsb2FkaW5nXT1cInMubG9hZC5sb2FkaW5nXCJcbiAgICBbZXJyb3JNZXNzYWdlXT1cInMubG9hZC5lcnJvciA/IGdldEVycm9yTWVzc2FnZShzLmxvYWQuZXJyb3IpIDogdW5kZWZpbmVkXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAocml2Q2xpZW50U2l6ZSk9XCJjb250YWluZXJTaXplLm5leHQoJGV2ZW50KVwiPlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uVGVtcGxhdGVcIiBjbGFzcz1cInNlbGVjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPHJpdi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInMuc2VsZWN0aW9uLmlzQ3VycmVudFBhZ2VTZWxlY3RlZCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgcy5zZWxlY3Rpb24uaXNDdXJyZW50UGFnZVNlbGVjdGVkID09PSAnaW5kZXRlcm1pbmF0ZSdcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAncGFnZVNlbGVjdGVkQ2hhbmdlJyB9KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHMuZGlzcGxheS5jb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBpbm5lZF09XCJjb2x1bW4ucGlubmVkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ2V0V2lkdGgoY29sdW1uKVwiXG4gICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgICAgICAgICBkcm9wcGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoaSlcIlxuICAgICAgICAgICAgICAoZHJhZ2VudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcihpKVwiXG4gICAgICAgICAgICAgIChkcm9wKT1cImRyb3AoaSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dlZC1vdmVyLWxlZnRdPVwiXG4gICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA+IGlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci1yaWdodF09XCJcbiAgICAgICAgICAgICAgICBkcmFnZ2VkT3ZlckNvbHVtbklkeCA9PT0gaSAmJlxuICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4IDwgaVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLm9yZGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmxlZnRdPVwiY29sdW1uLmFsaWdubWVudCA9PT0gJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucmlnaHRdPVwiY29sdW1uLmFsaWdubWVudCA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubmFtZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLm9yZGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmxlZnRdPVwiY29sdW1uLmFsaWdubWVudCA9PT0gJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucmlnaHRdPVwiY29sdW1uLmFsaWdubWVudCA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ29yZGVyQ29sdW1uVG9nZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4ubmFtZVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sdW1uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBzLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbi5uYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgcy5xdWVyeS5vcmRlcj8uZGlyZWN0aW9uID09PSAnZGVzYydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ0Fycm93RG93bidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ0Fycm93VXAnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9yaXYtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8dGFibGUtaGVhZGVyLXJlc2l6ZS1oYW5kbGVcbiAgICAgICAgICAgICAgICAoZHJhZ1Jlc2l6ZSk9XCJzZXRXaWR0aChjb2x1bW4ubmFtZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L3RhYmxlLWhlYWRlci1yZXNpemUtaGFuZGxlPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIm1lbnVUZW1wbGF0ZVwiIGNsYXNzPVwibWVudS1oZWFkXCI+PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInMucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA+IDA7IGVsc2UgZW1wdHlcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiBzLnJlc3VsdC5yb3dzOyB0cmFja0J5OiB0cmFja0J5Um93XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dCb2R5PlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNlbGVjdGlvblRlbXBsYXRlXCIgY2xhc3M9XCJzZWxlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJpdi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXT1cIidyaXYtdGFibGUtc2VsZWN0aW9uLScgKyByb3cuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyb3cuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcm93LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L3Jpdi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHMuZGlzcGxheS5jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5waW5uZWRdPVwiY29sdW1uLnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYWR2YW5jZWRdPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYWR2YW5jZWQnXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbHVtbi5hbGlnbm1lbnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZGF0YVR5cGUgPT09ICdhZHZhbmNlZCdcbiAgICAgICAgICAgICAgICAgICAgICA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjZWxsVGVtcGxhdGUgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHJvdzogcm93LCBjb2x1bW46IGNvbHVtbiB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1ib2R5XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIG1lbnVUZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93OiByb3cgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxhICpuZ0lmPVwicm93LnJvd0xpbms7IGxldCBocmVmXCIgW2hyZWZdPVwiaHJlZlwiIGNsYXNzPVwicm93LWxpbmtcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93Qm9keVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cIiFyb3cucm93TGlua1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dCb2R5XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJzLmRpc3BsYXkuY29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8cml2LXplcm8tc3RhdGVcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicy5kaXNwbGF5Lnplcm9TdGF0ZU1lc3NhZ2U7IGxldCBtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgID48L3Jpdi16ZXJvLXN0YXRlPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZS1jb250cm9sc1wiPlxuICAgICAgICBSZXN1bHRzIHBlciBwYWdlOlxuICAgICAgICA8cml2LXNpbmdsZS1zZWxlY3RcbiAgICAgICAgICBbc2VsZWN0ZWRPcHRpb25dPVwie1xuICAgICAgICAgICAgaWQ6IHMucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgdGl0bGU6IHMucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgdmFsdWU6IHMucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJcbiAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICB0eXBlOiAncGFnZVNpemVDaGFuZ2UnLFxuICAgICAgICAgICAgICBzaXplOiAkZXZlbnQudmFsdWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZ3JvdXBzXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgID48L3Jpdi1zaW5nbGUtc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1jb250cm9sc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJwYWdpbmF0ZSBwcmV2aW91c1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInMucXVlcnkucGFnaW5hdGlvbi5wcmV2aW91cyA9PT0gbnVsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAncHJldmlvdXNQYWdlTmF2aWdhdGUnIH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInQXJyb3dMZWZ0J1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VzWzBdID4gMFwiIGNsYXNzPVwidHJ1bmNhdGVkLXBhZ2VzXCI+XG4gICAgICAgICAgJmhlbGxpcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHBhZ2Ugb2Ygcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VzXCJcbiAgICAgICAgICBjbGFzcz1cInBhZ2VcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdlID09PSBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAncGFnZUNoYW5nZScsIHBhZ2UgfSlcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcGFnZSArIDEgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHMucXVlcnkucGFnaW5hdGlvbi5wYWdlc1tzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZXMubGVuZ3RoIC0gMV0gPFxuICAgICAgICAgICAgcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VDb3VudCAtIDFcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwidHJ1bmNhdGVkLXBhZ2VzXCJcbiAgICAgICAgPlxuICAgICAgICAgICZoZWxsaXA7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwicGFnaW5hdGUgbmV4dFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInMucXVlcnkucGFnaW5hdGlvbi5uZXh0ID09PSBudWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICduZXh0UGFnZU5hdmlnYXRlJyB9KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cml2LWljb24gW25hbWVdPVwiJ0Fycm93UmlnaHQnXCIgW3NpemVdPVwiMTZcIj48L3Jpdi1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3Jpdi1sb2FkaW5nLWNvdmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7QUFjcEMsTUFBTSxPQUFPLGNBQWM7SUFOM0I7UUEwQlcsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3ZDLDZCQUF3QixHQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3pELENBQUM7UUFFSyxvQkFBZSxHQUN0QjtZQUNFO2dCQUNFLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUN2QixLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRTtvQkFDMUIsS0FBSyxFQUFFLFFBQVE7aUJBQ2hCLENBQUMsQ0FBQzthQUNKO1NBQ0YsQ0FBQztRQUVLLGVBQVUsR0FBeUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDckUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUVRLG9CQUFlLEdBQW1CLElBQUksR0FBRyxFQUFFLENBQUM7UUF3QjdELHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMseUJBQW9CLEdBQWtCLElBQUksQ0FBQztLQTJCNUM7SUFuREMsUUFBUSxDQUFDLE1BQVMsRUFBRSxLQUFvQjtRQUN0QyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDbEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDekIsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsTUFBTTtvQkFDTixjQUFjLEVBQUUsY0FBYztpQkFDL0IsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUNELFFBQVEsQ0FBQyxNQUE4QjtRQUNyQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxRTthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUtELFNBQVMsQ0FBQyxHQUFXO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFlO1FBQ2xCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNwQyxRQUFRLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxDQUFVO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEtBQUs7WUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUk7WUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7WUFDeEQsT0FBTyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDOzsyR0EzRlUsY0FBYzsrRkFBZCxjQUFjLDJXQ3hCM0IscTFSQTRPQTsyRkRwTmEsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU07OEJBUS9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixZQUFZO3NCQURYLFlBQVk7dUJBQUMsTUFBTTtnQkFPcEIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLE1BQU07Z0JBSXBCLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFRyYWNrQnlGdW5jdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNpbmdsZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L3NpbmdsZS1zZWxlY3Qvc2luZ2xlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5cbnR5cGUgUGFnZVNpemVPcHRpb24gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4+IHtcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlRhYmxlLk1hbmFnZXI8UiwgQywgRj47XG5cbiAgQENvbnRlbnRDaGlsZCgnY2VsbCcpXG4gIGNlbGxUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICByb3c6IFJpdlRhYmxlLkZ1bGxSb3c8Uj47XG4gICAgY29sdW1uOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+O1xuICB9PjtcblxuICBAQ29udGVudENoaWxkKCdtZW51JylcbiAgbWVudVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyByb3c6IFJpdlRhYmxlLkZ1bGxSb3c8Uj4gfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnc2VsZWN0aW9uJylcbiAgc2VsZWN0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IHN0YXRlOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRj4gfT47XG5cbiAgcmVhZG9ubHkgY29udGFpbmVyU2l6ZSA9IG5ldyBTdWJqZWN0PERPTVJlY3Q+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNhbGxvdXRQb3NpdGlvbjogT2JzZXJ2YWJsZTxET01SZWN0PiA9XG4gICAgdGhpcy5jb250YWluZXJTaXplLnBpcGUoXG4gICAgICBtYXAocmVjdCA9PiBuZXcgRE9NUmVjdChyZWN0LnggKyA0NCwgcmVjdC55IC0gMTIsIDAsIDApKSxcbiAgICApO1xuXG4gIHJlYWRvbmx5IHBhZ2VTaXplT3B0aW9uczogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbkdyb3VwPFBhZ2VTaXplT3B0aW9uPltdID1cbiAgICBbXG4gICAgICB7XG4gICAgICAgIG9wdGlvbnM6IFJpdlRhYmxlLnBhZ2VTaXplcy5tYXAocGFnZVNpemUgPT4gKHtcbiAgICAgICAgICBpZDogcGFnZVNpemUudG9TdHJpbmcoKSxcbiAgICAgICAgICB0aXRsZTogcGFnZVNpemUudG9TdHJpbmcoKSxcbiAgICAgICAgICB2YWx1ZTogcGFnZVNpemUsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICByZWFkb25seSB0cmFja0J5Um93OiBUcmFja0J5RnVuY3Rpb248Uml2VGFibGUuRnVsbFJvdzxSPj4gPSAoXywgcm93KSA9PlxuICAgIHJvdy5pZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRlbXBvcmFyeVdpZHRoczogTWFwPEMsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gIHNldFdpZHRoKGNvbHVtbjogQywgd2lkdGg6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAod2lkdGggPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlbXBvcmFyeVdpZHRoID0gdGhpcy50ZW1wb3JhcnlXaWR0aHMuZ2V0KGNvbHVtbik7XG4gICAgICBpZiAodGVtcG9yYXJ5V2lkdGgpIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICAgIHR5cGU6ICdjb2x1bW5XaWR0aENoYW5nZScsXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHByZWZlcnJlZFdpZHRoOiB0ZW1wb3JhcnlXaWR0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRlbXBvcmFyeVdpZHRocy5kZWxldGUoY29sdW1uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZW1wb3JhcnlXaWR0aHMuc2V0KGNvbHVtbiwgd2lkdGgpO1xuICAgIH1cbiAgfVxuICBnZXRXaWR0aChjb2x1bW46IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz4pOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnRlbXBvcmFyeVdpZHRocy5oYXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy50ZW1wb3JhcnlXaWR0aHMuZ2V0KGNvbHVtbi5uYW1lKSEsIGNvbHVtbi5taW5XaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjb2x1bW4ud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgZHJhZ2dlZENvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGRyYWdnZWRPdmVyQ29sdW1uSWR4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBkcmFnU3RhcnQoaWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLmRyYWdnZWRDb2x1bW5JZHggPSBpZHg7XG4gIH1cblxuICBkcmFnT3ZlcihvbnRvSWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gb250b0lkeDtcbiAgfVxuXG4gIGRyb3Aob250b0lkeDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnLFxuICAgICAgICBwcmV2aW91c0luZGV4OiB0aGlzLmRyYWdnZWRDb2x1bW5JZHgsXG4gICAgICAgIG5ld0luZGV4OiBvbnRvSWR4LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGUubWVzc2FnZTtcbiAgICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSByZXR1cm4gZTtcbiAgICBpZiAodHlwZW9mIGUgPT09ICdvYmplY3QnICYmIGUgIT09IG51bGwpIHJldHVybiBlLnRvU3RyaW5nKCk7XG4gICAgZWxzZSByZXR1cm4gJ0FuIGVycm9yIG9jY3VycmVkLic7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uQ2FsbG91dFBvc2l0aW9uIHwgYXN5bmM7IGxldCBwb3NpdGlvblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzLnNlbGVjdGlvbi5zZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3Rpb25UZW1wbGF0ZVwiPlxuICAgICAgPHJpdi1jYWxsb3V0XG4gICAgICAgICpyaXYtY2FsbG91dFxuICAgICAgICBbYW5jaG9yXT1cInBvc2l0aW9uXCJcbiAgICAgICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ3RvcC1yaWdodCdcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3Rpb25UZW1wbGF0ZTsgY29udGV4dDogeyBzdGF0ZTogcyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxyaXYtbG9hZGluZy1jb3ZlclxuICAgIFtsb2FkaW5nXT1cInMubG9hZC5sb2FkaW5nXCJcbiAgICBbZXJyb3JNZXNzYWdlXT1cInMubG9hZC5lcnJvciA/IGdldEVycm9yTWVzc2FnZShzLmxvYWQuZXJyb3IpIDogdW5kZWZpbmVkXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAocml2Q2xpZW50U2l6ZSk9XCJjb250YWluZXJTaXplLm5leHQoJGV2ZW50KVwiPlxuICAgICAgPHRhYmxlPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uVGVtcGxhdGVcIiBjbGFzcz1cInNlbGVjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPHJpdi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInMuc2VsZWN0aW9uLmlzQ3VycmVudFBhZ2VTZWxlY3RlZCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgcy5zZWxlY3Rpb24uaXNDdXJyZW50UGFnZVNlbGVjdGVkID09PSAnaW5kZXRlcm1pbmF0ZSdcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAncGFnZVNlbGVjdGVkQ2hhbmdlJyB9KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHMuZGlzcGxheS5jb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBpbm5lZF09XCJjb2x1bW4ucGlubmVkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sdW1uLmxlZnRcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ2V0V2lkdGgoY29sdW1uKVwiXG4gICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgICAgICAgICBkcm9wcGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoaSlcIlxuICAgICAgICAgICAgICAoZHJhZ2VudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcihpKVwiXG4gICAgICAgICAgICAgIChkcm9wKT1cImRyb3AoaSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dlZC1vdmVyLWxlZnRdPVwiXG4gICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA+IGlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci1yaWdodF09XCJcbiAgICAgICAgICAgICAgICBkcmFnZ2VkT3ZlckNvbHVtbklkeCA9PT0gaSAmJlxuICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4IDwgaVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLm9yZGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmxlZnRdPVwiY29sdW1uLmFsaWdubWVudCA9PT0gJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucmlnaHRdPVwiY29sdW1uLmFsaWdubWVudCA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubmFtZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLm9yZGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmxlZnRdPVwiY29sdW1uLmFsaWdubWVudCA9PT0gJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucmlnaHRdPVwiY29sdW1uLmFsaWdubWVudCA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ29yZGVyQ29sdW1uVG9nZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4ubmFtZVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sdW1uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBzLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbi5uYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgcy5xdWVyeS5vcmRlcj8uZGlyZWN0aW9uID09PSAnZGVzYydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ0Fycm93RG93bidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ0Fycm93VXAnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9yaXYtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8dGFibGUtaGVhZGVyLXJlc2l6ZS1oYW5kbGVcbiAgICAgICAgICAgICAgICAoZHJhZ1Jlc2l6ZSk9XCJzZXRXaWR0aChjb2x1bW4ubmFtZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L3RhYmxlLWhlYWRlci1yZXNpemUtaGFuZGxlPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIm1lbnVUZW1wbGF0ZVwiIGNsYXNzPVwibWVudS1oZWFkXCI+PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInMucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA+IDA7IGVsc2UgZW1wdHlcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiBzLnJlc3VsdC5yb3dzOyB0cmFja0J5OiB0cmFja0J5Um93XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dCb2R5PlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNlbGVjdGlvblRlbXBsYXRlXCIgY2xhc3M9XCJzZWxlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJpdi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgIFtpZGVudGlmaWVyXT1cIidyaXYtdGFibGUtc2VsZWN0aW9uLScgKyByb3cuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyb3cuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcm93LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L3Jpdi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHMuZGlzcGxheS5jb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5waW5uZWRdPVwiY29sdW1uLnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYWR2YW5jZWRdPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYWR2YW5jZWQnXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbHVtbi5sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbHVtbi5hbGlnbm1lbnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZGF0YVR5cGUgPT09ICdhZHZhbmNlZCdcbiAgICAgICAgICAgICAgICAgICAgICA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjZWxsVGVtcGxhdGUgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHJvdzogcm93LCBjb2x1bW46IGNvbHVtbiB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1ib2R5XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIG1lbnVUZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93OiByb3cgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxhICpuZ0lmPVwicm93LnJvd0xpbms7IGxldCBocmVmXCIgW2hyZWZdPVwiaHJlZlwiIGNsYXNzPVwicm93LWxpbmtcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93Qm9keVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cIiFyb3cucm93TGlua1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dCb2R5XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJzLmRpc3BsYXkuY29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8cml2LXplcm8tc3RhdGVcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicy5kaXNwbGF5Lnplcm9TdGF0ZU1lc3NhZ2U7IGxldCBtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgID48L3Jpdi16ZXJvLXN0YXRlPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicy5xdWVyeS5wYWdpbmF0aW9uLnNob3dDb250cm9sc1wiIGNsYXNzPVwicGFnaW5hdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZS1jb250cm9sc1wiPlxuICAgICAgICBSZXN1bHRzIHBlciBwYWdlOlxuICAgICAgICA8cml2LXNpbmdsZS1zZWxlY3RcbiAgICAgICAgICBbc2VsZWN0ZWRPcHRpb25dPVwie1xuICAgICAgICAgICAgaWQ6IHMucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgdGl0bGU6IHMucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgdmFsdWU6IHMucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJcbiAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICB0eXBlOiAncGFnZVNpemVDaGFuZ2UnLFxuICAgICAgICAgICAgICBzaXplOiAkZXZlbnQudmFsdWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZ3JvdXBzXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgID48L3Jpdi1zaW5nbGUtc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwicy5xdWVyeS5wYWdpbmF0aW9uLnNob3dDb250cm9sc1wiIGNsYXNzPVwicGFnaW5hdGlvbi1jb250cm9sc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJwYWdpbmF0ZSBwcmV2aW91c1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInMucXVlcnkucGFnaW5hdGlvbi5wcmV2aW91cyA9PT0gbnVsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAncHJldmlvdXNQYWdlTmF2aWdhdGUnIH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInQXJyb3dMZWZ0J1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VzWzBdID4gMFwiIGNsYXNzPVwidHJ1bmNhdGVkLXBhZ2VzXCI+XG4gICAgICAgICAgJmhlbGxpcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHBhZ2Ugb2Ygcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VzXCJcbiAgICAgICAgICBjbGFzcz1cInBhZ2VcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdlID09PSBzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoeyB0eXBlOiAncGFnZUNoYW5nZScsIHBhZ2UgfSlcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcGFnZSArIDEgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHMucXVlcnkucGFnaW5hdGlvbi5wYWdlc1tzLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZXMubGVuZ3RoIC0gMV0gPFxuICAgICAgICAgICAgcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VDb3VudCAtIDFcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwidHJ1bmNhdGVkLXBhZ2VzXCJcbiAgICAgICAgPlxuICAgICAgICAgICZoZWxsaXA7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwicGFnaW5hdGUgbmV4dFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInMucXVlcnkucGFnaW5hdGlvbi5uZXh0ID09PSBudWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICduZXh0UGFnZU5hdmlnYXRlJyB9KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cml2LWljb24gW25hbWVdPVwiJ0Fycm93UmlnaHQnXCIgW3NpemVdPVwiMTZcIj48L3Jpdi1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3Jpdi1sb2FkaW5nLWNvdmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|